From: Simon Wright <simon@pushface.org>
Subject: Re: Profile mismatch?
Date: Thu, 13 Mar 2014 16:35:40 +0000
Date: 2014-03-13T16:35:40+00:00 [thread overview]
Message-ID: <lyzjku5a5f.fsf@pushface.org> (raw)
In-Reply-To: 3d90b1df-4d18-4097-aa26-e727defd26ba@googlegroups.com
adambeneschan@gmail.com writes:
> 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.
This is what GNAT is doing (I take it you don't actually mean
"position"; in the first case "access T" had to be non-null in Ada 95,
and in the second case it's non-controlling parameters).
> "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.
My code has subtype conformance, I think.
Thanks!
next prev parent reply other threads:[~2014-03-13 16:35 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
2014-03-13 16:35 ` Simon Wright [this message]
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