comp.lang.ada
 help / color / mirror / Atom feed
From: adambeneschan@gmail.com
Subject: Re: Profile mismatch?
Date: Thu, 13 Mar 2014 07:53:34 -0700 (PDT)
Date: 2014-03-13T07:53:34-07:00	[thread overview]
Message-ID: <3d90b1df-4d18-4097-aa26-e727defd26ba@googlegroups.com> (raw)
In-Reply-To: <ly4n327167.fsf@pushface.org>

On Thursday, March 13, 2014 5:06:40 AM UTC-7, Simon Wright wrote:
> Given the code below
> 
>    package Profile is
>       type A1 is abstract tagged limited null record;
>       procedure P (This : not null access A1);
>       type A2 is abstract new A1 with null record;
>       procedure P (This : access A2);              -- mismatch
>       type T1 is new A1 with null record;
>       procedure P (This : access T1);              -- mismatch
>       type T2 is new A2 with null record;
>       procedure P (This : not null access T2);     -- mismatch
>       type T3 is new T2 with null record;
>       procedure P (This : access T3);              -- mismatch
>    end Profile;
> 
> should a compiler recognise the mismatches of the null exclusions where
> indicated?
> 
> GNAT (4.8, 4.9, GPL 2013) accepts this code without comment. I've seen
> very similar cases (structurally, but with many more subprograms) which
> GNAT didn't accept, saying
> 
>    not subtype conformant with operation inherited at line 42
>    type of "This" does not match
> 
> I've not yet tried to track this down.

All of the access parameters are automatically "not null", because they are controlling parameters; a parameter of type "access T" is a controlling parameter if it's for a primitive subprogram of type T where T is tagged.

In Ada 95, which didn't have "not null", the rules said that parameters in that position were required to be non-null.  When "not null" was added to Ada 2005, the decision was made to allow, but not require, the "not null" on controlling parameters, for backward compatibility.  That's not the case for parameters in other positions, which is why you may see "not subtype conformant" errors.

"Full conformance" requires that the actual presence or absence of "not null" be the same, whether or not the null exclusion is implied.  However, this is needed only in some contexts, such as when a subprogram is declared without a body in one place, and the same subprogram's body appears later.  Overriding doesn't require full conformance, I think; I think it only requires subtype conformance, although I'd have to look it up and I can't do so right now.

                             -- Adam


  reply	other threads:[~2014-03-13 14:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-13 12:06 Profile mismatch? Simon Wright
2014-03-13 14:53 ` adambeneschan [this message]
2014-03-13 16:35   ` Simon Wright
2014-03-13 17:38     ` adambeneschan
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox