diff options
Diffstat (limited to 'gcc/testsuite/gnat.dg/sso5.adb')
-rw-r--r-- | gcc/testsuite/gnat.dg/sso5.adb | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/testsuite/gnat.dg/sso5.adb b/gcc/testsuite/gnat.dg/sso5.adb new file mode 100644 index 00000000000..b755846dfb0 --- /dev/null +++ b/gcc/testsuite/gnat.dg/sso5.adb @@ -0,0 +1,52 @@ +-- { dg-do run } + +with System; + +procedure SSO5 is + + type Short_Int is mod 2**16; + + type Rec1 is record + F1 : Short_Int; + F2 : Short_Int; + end record; + for Rec1 use record + F1 at 0 range 0 .. 15; + F2 at 0 range 16 .. 31; + end record; + for Rec1'Bit_Order use System.High_Order_First; + for Rec1'Scalar_Storage_Order use System.High_Order_First; + + type Rec2 is record + R1 : Rec1; + end record; + for Rec2 use record + R1 at 0 range 1 .. 32; + end record; + for Rec2'Bit_Order use System.High_Order_First; + for Rec2'Scalar_Storage_Order use System.High_Order_First; + + type Rec3 is record + Data : Rec1; + end record; + for Rec3 use record + Data at 0 range 0 .. 31; + end record; + for Rec3'Bit_Order use System.High_Order_First; + for Rec3'Scalar_Storage_Order use System.High_Order_First; + + procedure Copy (Message : in Rec3) is + Local : Rec2; + begin + Local := (R1 => Message.Data); + if Local.R1 /= Message.Data then + raise Program_Error; + end if; + end; + + Message : Rec3; + +begin + Message := (Data => (2, 3)); + Copy(Message); +end; |