I have a bit of a dilemma that I was hoping some of you may be able to shed some light on. It is in relation to the program below (I know this isn't really the place to discuss technical problems, but I'd appreciate any comment on this one). The program below is a modified snippet of something I have to use. The problem I have is that I have access to 4 compilers, namely Apex, Green Hills, GNAT and ObjectAda that I have used to compile the code. All of them are quite happy to compile the program, but I need to know whether I should be reporting this as a bug to the supplier of the code, or the compiler vendors! When I run the program, on both Green Hills and ObjectAda, with the pragma Suppress commented out, a Constraint_Error is raised on the line: ZZZ_Control_Data := (Date => (Date, (Month => Control_Data.Month))); If you look at the program you can see that Control_Data.Month has been assigned a value of zero as a result of the unchecked conversion carried out on Input_Data. A zero value is invalid for an object of type Month_Type which is presumably the justification for ObjectAda and Green Hills raising a Constraint_Error on that assignment. On the other hand, both GNAT and Apex allow the program to run straight through, printing out "Program Completed Successfully.", even with the -gnato option on GNAT to enable additional overflow checks etc. In all cases, inserting the pragma Suppress suppresses the Constraint_Error (I know I shouldn't use All_Checks in the way I have, but it's only a test). So, your comments, explanations and suggestions would be appreciated, as would the result of running the program with compilers other than those listed. Thanks John ------------------------------- with Ada.Text_Io; with Ada.Unchecked_Conversion; procedure Testy is -- pragma Supress (All_Checks); type Month_Type is (January, February, March, April, May, June, July, August, September, October, Novemember, December); for Month_Type use (January => 1, February => 2, March => 3, April => 4, May => 5, June => 6, July => 7, August => 8, September => 9, October => 10, Novemember => 11, December => 12); for Month_Type'Size use 4; type ZZZ_Date_Type is record Month : Month_Type; end record; type Natural_12_Bit_Type is range 0 .. (2 ** 12-1); for Natural_12_Bit_Type'Size use 12; type Natural_16_Bit_Type is range 0 .. (2 ** 16-1); for Natural_16_Bit_Type'Size use 16; type Request_Type is record Spare : Natural_12_Bit_Type; Month : Month_Type; end record; for Request_Type use record Spare at 0 range 0 .. 11; Month at 0 range 12 .. 15; end record; for Request_Type'Size use 16; type Data_Block_Type is array (1 .. 1) of Natural_16_Bit_Type; for Data_Block_Type'Size use 16; type ZZZ_Control_Fields is (Date); type ZZZ_Single_Value_Control_Type (Field : ZZZ_Control_Fields := Date) is record case Field is when Date => Data : ZZZ_Date_Type := (Month => January); end case; end record; type ZZZ_Control_Data_Type is array (ZZZ_Control_Fields) of ZZZ_Single_Value_Control_Type; function To_Request_Block is new Ada.Unchecked_Conversion (Source => Data_Block_Type, Target => Request_Type); Control_Data : Request_Type; Input_Data : Data_Block_Type := (others => 0); ZZZ_Control_Data : ZZZ_Control_Data_Type; begin Control_Data := To_Request_Block (Input_Data); ZZZ_Control_Data := (Date => (Date, (Month => Control_Data.Month))); Ada.Text_Io.Put_Line ("Program Completed Successfully."); exception when Constraint_Error => Ada.Text_Io.Put_Line ("Constraint Error Raised."); end Testy; ******************************************************************** This email and any attachments are confidential to the intended recipient and may also be privileged. If you are not the intended recipient please delete it from your system and notify the sender immediately by telephoning +44(1252) 373232. You should not copy it or use it for any purpose nor disclose or distribute its contents to any other person. ********************************************************************