comp.lang.ada
 help / color / mirror / Atom feed
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.



  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