comp.lang.ada
 help / color / mirror / Atom feed
From: Mark Lorenzen <mark.lorenzen@gmail.com>
Subject: Re: Unexpected discriminant check failure involving access types
Date: Mon, 10 Aug 2015 06:14:40 -0700 (PDT)
Date: 2015-08-10T06:14:40-07:00	[thread overview]
Message-ID: <d185227b-7cce-476c-8398-b211429a201f@googlegroups.com> (raw)
In-Reply-To: <mqa5vs$k1n$1@speranza.aioe.org>

On Monday, August 10, 2015 at 2:38:23 PM UTC+2, Markus Schöpflin wrote:
> Given the following piece of code:
> 
> ---%<---
>       1  procedure TEST
>       2  is
>       3     type T is (T1, T2);
>       4
>       5     type RECORD_T (X : T := T1) is record
>       6        null;
>       7     end record;
>       8
>       9     type PTR_T is access RECORD_T;
>      10
>      11     FOO : RECORD_T;
>      12     FOO_PTR : constant PTR_T := new RECORD_T;
>      13
>      14     FOO1 : constant RECORD_T := (X => T1);
>      15     FOO2 : constant RECORD_T := (X => T2);
>      16  begin
>      17     FOO := FOO1;
>      18     FOO := FOO2;
>      19
>      20     FOO_PTR.all := FOO1;
>      21     FOO_PTR.all := FOO2;
>      22  end;
> --->%---
> 
> When compiled and executed, I get:
> 
>  > ./test
> 
> raised CONSTRAINT_ERROR : test.adb:21 discriminant check failed
> 
> Can anyone please explain me why I get a discriminant check error when using 
> access types? I would have expected it to work the same as for the non-access 
> case.
> 
> TIA, Markus

Look at line 12. FOO_PTR is a constant object of an access type. The constant object is initialized to point to a discriminated record with discriminant T1, since this is the default discriminant of objects of type RECORD_T. In line 21 it goes horribly wrong and you try to change the object pointed to, to a record with discriminant T2.

What problem are you trying to solve? Is the above code just a simple reproducer or is it a snippet from real code?

Regards,

Mark L

  reply	other threads:[~2015-08-10 13:14 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-10 12:38 Unexpected discriminant check failure involving access types Markus Schöpflin
2015-08-10 13:14 ` Mark Lorenzen [this message]
2015-08-10 14:20   ` Markus Schöpflin
2015-08-10 19:00     ` Randy Brukardt
2015-08-10 14:33 ` Niklas Holsti
2015-08-10 14:56   ` Markus Schöpflin
2015-08-10 19:43     ` Niklas Holsti
replies disabled

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