diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gnat.dg/opt31.adb | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gnat.dg/opt31.adb')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gnat.dg/opt31.adb | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gnat.dg/opt31.adb b/gcc-4.9/gcc/testsuite/gnat.dg/opt31.adb new file mode 100644 index 000000000..51aa3556c --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gnat.dg/opt31.adb @@ -0,0 +1,43 @@ +-- { dg-do run } +-- { dg-options "-O" } + +with Interfaces; use Interfaces; +with Unchecked_Conversion; + +procedure Opt31 is + + type Unsigned_24 is new Unsigned_32 range 0 .. 2**24 - 1; + subtype Time_T is Unsigned_24 range 0 .. 24 * 60 * 60 * 128 - 1; + + type Messages_T is array (Positive range <>) of Unsigned_8; + subtype T_3Bytes is Messages_T (1 .. 3); + + type Rec1 is record + F : Time_T; + end record; + for Rec1 use record + F at 0 range 0 .. 23; + end record; + for Rec1'Size use 24; + + type Rec2 is record + I1,I2,I3,I4 : Integer; + R1 : Rec1; + end record; + + function Conv is new Unchecked_Conversion (T_3Bytes, Rec1); + + procedure Decode (M : Messages_T) is + My_Rec2 : Rec2; + begin + My_Rec2.R1 := Conv (M (1 .. 3)); + if not My_Rec2.R1.F'Valid then + raise Program_Error; + end if; + end; + + Message : Messages_T (1 .. 4) := (16#18#, 16#0C#, 16#0C#, 16#18#); + +begin + Decode (Message); +end; |