From: Adam Beneschan <adam@irvine.com>
Subject: Re: Extending discriminant types
Date: Mon, 17 Nov 2008 08:30:45 -0800 (PST)
Date: 2008-11-17T08:30:45-08:00 [thread overview]
Message-ID: <166efe91-849b-46f6-98d2-cb2c0991c6b8@l33g2000pri.googlegroups.com> (raw)
In-Reply-To: 20081115101632.5f98c596@cube.tz.axivion.com
On Nov 15, 1:16 am, Stefan Bellon <bel...@software-erosion.org> wrote:
> Hi,
>
> I stumbled across some behaviour when extending an unconstrained
> discriminant type while providing the constraint when extending. Assume
> the following code:
>
> type Kind is (A, B);
>
> type Base (K : Kind) is abstract tagged record
> case K is
> when A => null;
> when B => Dummy : Natural;
> end case;
> end record;
>
> type Base_Access is access all Base'Class;
>
> type Child is new Base (B) with null record;
>
> In this case I would have thought that type Child is now constrained to
> Kind B and no object of type Child with Kind A can be created.
>
> However, the following compiles (with GNAT) and does not throw an
> exception at runtime:
>
> Var : Base_Access := new Child'(K => A);
>
> Am I misunderstanding the Ada semantics?
No, I think GNAT is wrong here. The semantics of allocators is that
an object is created with K=A, and then it tries to convert this
object to the subtype Child, but since Child has a constraint and the
object violates that constraint, a Constraint_Error should be raised.
However, I think this would be OK and would not raise an exception:
Var : Base_Access := new Child'Base' (K => A);
since there are no constraints to violate. I'm not 100% sure I'm
right about this, though.
-- Adam
next prev parent reply other threads:[~2008-11-17 16:30 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-15 9:16 Extending discriminant types Stefan Bellon
2008-11-15 18:50 ` Jeffrey R. Carter
2008-11-17 16:30 ` Adam Beneschan [this message]
2008-11-18 11:02 ` christoph.grein
2008-11-18 23:24 ` Adam Beneschan
2008-11-19 9:49 ` anon
2008-11-19 10:15 ` christoph.grein
2008-11-19 19:19 ` Georg Bauhaus
2008-11-19 11:38 ` Martin
2008-11-20 7:21 ` anon
2008-11-20 8:30 ` christoph.grein
2008-11-20 8:36 ` Ludovic Brenta
2008-11-20 11:45 ` Georg Bauhaus
2008-11-20 11:46 ` Georg Bauhaus
2008-11-20 23:01 ` anon
2008-11-21 11:54 ` Ludovic Brenta
2008-11-20 14:03 ` Dmitry A. Kazakov
2008-11-20 15:03 ` Robert A Duff
2008-11-20 15:57 ` Stefan Bellon
2008-11-21 0:32 ` Adam Beneschan
2008-11-20 16:11 ` Adam Beneschan
2008-11-20 22:59 ` anon
2008-11-21 0:29 ` Adam Beneschan
2008-11-21 7:25 ` anon
2008-11-21 9:19 ` Jean-Pierre Rosen
2008-11-21 10:11 ` christoph.grein
2008-11-21 12:00 ` Ludovic Brenta
2008-11-21 22:31 ` anon
2008-11-22 0:18 ` Stefan Bellon
2008-11-23 4:06 ` anon
2008-11-23 5:39 ` Georg Bauhaus
2008-11-23 8:00 ` anon
2008-11-24 10:08 ` Georg Bauhaus
2008-11-24 22:16 ` anon
2008-11-25 10:37 ` Martin
2008-11-25 11:24 ` Georg Bauhaus
2008-11-25 20:49 ` Jeffrey R. Carter
2008-11-25 21:01 ` Adam Beneschan
2008-11-25 22:09 ` Georg Bauhaus
2008-11-25 22:33 ` Jeffrey R. Carter
2008-11-26 0:58 ` Adam Beneschan
2008-11-26 1:45 ` Jeffrey R. Carter
2008-11-26 9:31 ` Martin
2008-11-26 9:38 ` Stefan Bellon
2008-11-26 9:48 ` Martin
2008-11-26 10:16 ` Stefan Bellon
2008-11-26 11:05 ` Ludovic Brenta
2008-11-26 11:33 ` Stefan Bellon
2008-11-26 15:49 ` Adam Beneschan
2008-11-26 16:15 ` Ludovic Brenta
2008-11-26 11:10 ` Niklas Holsti
2008-11-23 8:48 ` Compiler quality (was: Extending discriminant types) Ludovic Brenta
2008-11-24 23:33 ` anon
2008-11-25 6:54 ` christoph.grein
2008-11-25 10:01 ` Ludovic Brenta
2008-11-26 23:34 ` anon
2008-11-27 10:24 ` Compiler quality Georg Bauhaus
2008-11-27 14:46 ` Ludovic Brenta
2008-11-28 9:13 ` Martin
2008-11-28 10:28 ` Georg Bauhaus
2008-12-02 3:51 ` Randy Brukardt
2008-11-22 13:10 ` Extending discriminant types Gautier
2008-11-24 8:24 ` christoph.grein
2008-11-21 6:11 ` christoph.grein
2008-11-21 21:12 ` Jeffrey R. Carter
2008-11-22 16:41 ` sjw
2008-11-21 11:44 ` Martin
2008-11-20 9:55 ` Martin
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox