comp.lang.ada
 help / color / mirror / Atom feed
* Is this definition legal?
@ 2004-09-18 23:29 Björn Persson
  2004-09-18 23:44 ` Ludovic Brenta
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Björn Persson @ 2004-09-18 23:29 UTC (permalink / raw)


GCC-Gnat 3.4.0 is having serious problems with the definition of 
Character_Encoding below:

  type Known_OS is (NT, OS2, Linux);

  This_OS : constant Known_OS := Linux;

  type Encoding_ID is
    (UTF_8_ID, ASCII_ID, Latin_1_ID);  -- and some others

  type Unified_Encoding_Record (Known : Boolean; OS : Known_OS) is record
     case Known is
        when True =>
           Which : Encoding_ID;
        when False =>
           case OS is
              when Linux =>
                 Name : Unbounded_String;
              when NT | OS2 =>
                 Number : Unsigned_16;
           end case;
     end case;
  end record;

  type Character_Encoding (Known : Boolean := False) is
    new Unified_Encoding_Record (Known => Known, OS => This_OS);

Gnat often crashes with a bug box on a reference to Character_Encoding. 
For example, when I declare a variable of this type I have to initialize 
it at the declaration to avoid a bug box. Also, the predefined "=" for 
Character_Encoding sometimes returns False for values that should be equal.

Once when I converted a Character_Encoding to a Unified_Encoding_Record, 
the field OS was set to NT, even though This_OS = Linux. The next 
conversion raised Constraint_Error with the message "invalid data".

My first question is: Is this definition of Character_Encoding legal and 
I should work around the problems until Gnat gets fixed, or is it 
illegal code that Gnat fails to reject, and I should find another way to 
do it?

I have also seen an indication that Adjust gets called on the field Name 
(Unbounded_String is controlled), even when Known is True, and this is 
my second question: Should I expect that fields in a variant part are 
"active" like this even when they are inaccessible because of the 
discriminant's value? It seems like waste of time to call procedures to 
maintain a value that can never be read.

-- 
Björn Persson                              PGP key A88682FD
                    omb jor ers @sv ge.
                    r o.b n.p son eri nu




^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2004-09-23 21:18 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-09-18 23:29 Is this definition legal? Björn Persson
2004-09-18 23:44 ` Ludovic Brenta
2004-09-19 14:07   ` Björn Persson
2004-09-19 20:21     ` Ludovic Brenta
2004-09-23 21:18     ` Björn Persson
2004-09-19 14:17   ` Björn Persson
2004-09-19  8:42 ` Martin Krischik
2004-09-19 11:25   ` Simon Wright
2004-09-20  7:32     ` Martin Krischik
2004-09-20 13:44       ` Björn Persson
2004-09-20 16:01         ` Martin Krischik
2004-09-20 21:20         ` Randy Brukardt
2004-09-20 17:12       ` Florian Weimer
2004-09-21  7:58         ` Martin Krischik
2004-09-19 11:30 ` Simon Wright
2004-09-19 11:53 ` Martin Dowie

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