comp.lang.ada
 help / color / mirror / Atom feed
From: "J-P. Rosen" <rosen@adalog.fr>
Subject: Re: Assignment access type with discriminants
Date: Thu, 23 Mar 2023 18:04:36 +0100	[thread overview]
Message-ID: <tvi0qt$17pev$1@dont-email.me> (raw)
In-Reply-To: <tveh6u$ihpu$1@dont-email.me>

Le 22/03/2023 à 10:19, Dmitry A. Kazakov a écrit :
> I stumbled on a curious fact.
> 
> The value of an object with a discriminant can be changed to a value 
> with a different discriminant if the type's discriminants are defaulted.
> 
> Right?
> 
> Wrong! Not through an access type!
> 
(...)
> Is this a compiler bug or intentional language design? Any language 
> lawyers?
> 
An access value is always constrained by its initial value; this is 
necessary because of constrained access subtypes. Here is a slightly 
modified version of your example:

procedure Test is
    type F is (F1, F2, F3);

    type Foo (K : F := F1) is record
       case K is
          when F1 =>
             X1 : Integer;
          when F2 =>
             X2 : Float;
          when F3 =>
             X3 : String (1..2);
       end case;
    end record;
    type Foo_Ptr is access all Foo;
    type Foo_Ptr2 is access Foo;
    X : aliased Foo;
    P : Foo_Ptr := X'Access;
    PF2: Foo_PTR2 (F2);
begin
    X := (F2, 1.0);   -- OK
    PF2 := new Foo (F2);
    P := PF2.all'Access;
    P.all := (F1, 3); -- Error!
end Test;

Without this rule, PF2.all would now designate a value whose 
discriminant is F1!
-- 
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
https://www.adalog.fr https://www.adacontrol.fr

  parent reply	other threads:[~2023-03-23 17:04 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-22  9:19 Assignment access type with discriminants Dmitry A. Kazakov
2023-03-22  9:31 ` Björn Lundin
2023-03-22 14:10 ` G.B.
2023-03-23 11:51   ` Dmitry A. Kazakov
2023-03-23 16:53     ` AdaMagica
2023-03-23 18:09       ` Niklas Holsti
2023-03-23 17:04 ` J-P. Rosen [this message]
2023-03-23 18:55   ` Niklas Holsti
2023-03-23 19:53     ` Dmitry A. Kazakov
2023-03-24  9:41     ` J-P. Rosen
2023-03-25  8:51       ` Randy Brukardt
replies disabled

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