From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Formal Subprogram Access
Date: Fri, 9 Feb 2018 21:03:29 -0600
Date: 2018-02-09T21:03:29-06:00 [thread overview]
Message-ID: <p5lne2$fe9$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: p5l6bd$ete$1@dont-email.me
"Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org> wrote in message
news:p5l6bd$ete$1@dont-email.me...
> Suppose I have something like
>
> procedure Fpa_Proc (P : not null access procedure) is
> -- Empty
> begin -- Fpa_Proc
> null;
> end Fpa_Proc;
>
> generic -- Fpa_Gen
> with procedure P;
> procedure Fpa_Gen;
>
> with Fpa_Proc;
>
> procedure Fpa_Gen is
> -- Empty
> begin -- Fpa_Gen
> Fpa_Proc (P => P'Access);
> end Fpa_Gen;
>
> (FPA for Formal Procedure Access)
>
> FSF GNAT 7.2.0 rejects Fpa_Gen with the error
>
> fpa_gen.adb:6:19: not subtype conformant with declaration at
> fpa_proc.adb:1
> fpa_gen.adb:6:19: formal subprograms not allowed
>
> which I think is correct. I can change it to have a wrapper procedure:
Why do you think this is correct? I can't read 3.10.2(32/5) in a way which
would prevent using a formal subprogram in this way (assuming that the
profile matches, which is does trivially in this case). Indeed, there is
specifically an exception allowing "an anonymous access type of an access
parameter."
It's possible there is some rule somewhere else that I've forgotten.
> with Fpa_Proc;
>
> procedure Fpa_Gen is
> procedure New_P is
> -- Empty
> begin -- New_P
> P;
> end New_P;
> begin -- Fpa_Gen
> Fpa_Proc (P => New_P'Access);
> end Fpa_Gen;
>
> which compiles fine.
The fact this works makes it rather silly to not allow P directly.
> But to my surprise, I can also rename P:
>
> with Fpa_Proc;
>
> procedure Fpa_Gen is
> procedure New_P renames P;
> begin -- Fpa_Gen
> Fpa_Proc (P => New_P'Access);
> end Fpa_Gen;
>
> and this also compiles. I would think that if you can't take 'Access of a
> generic formal subprogram, then you shouldn't be able to take 'Access of a
> renaming of a generic formal subprogram. So I'm wondering if this last
> form is legal.
My 60 second opinion is that all three should be legal. But if that's wrong
for some subtle reason that I've forgotten, then surely the renames is
illegal too. (3.10.2(32/5) uses the term "denoted" to ensure that renames
are ignored for the purposes of enforcing the rule.) I'd definitely report a
bug to the vendor.
Randy.
next prev parent reply other threads:[~2018-02-10 3:03 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-09 22:11 Formal Subprogram Access Jeffrey R. Carter
2018-02-10 3:03 ` Randy Brukardt [this message]
2018-02-10 9:57 ` Jeffrey R. Carter
2018-02-13 5:51 ` Randy Brukardt
2018-02-13 9:24 ` AdaMagica
2018-02-13 9:41 ` Dmitry A. Kazakov
2018-02-13 10:28 ` AdaMagica
2018-02-14 0:47 ` Randy Brukardt
2018-02-14 8:19 ` Dmitry A. Kazakov
2018-02-14 10:01 ` Jacob Sparre Andersen
2018-02-14 11:07 ` Dmitry A. Kazakov
2018-02-13 12:24 ` Simon Wright
2018-02-14 0:53 ` Randy Brukardt
2018-02-14 14:36 ` Simon Wright
2018-02-15 4:56 ` Randy Brukardt
2018-02-15 13:12 ` Simon Clubley
2018-02-15 16:38 ` Simon Wright
2018-02-15 18:40 ` Simon Clubley
2018-02-15 16:19 ` Simon Wright
2018-02-15 23:03 ` Randy Brukardt
2018-02-13 17:34 ` Jeffrey R. Carter
2018-02-13 18:31 ` AdaMagica
2018-02-14 0:57 ` Randy Brukardt
2018-02-10 14:55 ` AdaMagica
2018-02-21 17:51 ` Jeffrey R. Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox