aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gnat.dg/opt31.adb
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gnat.dg/opt31.adb
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_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.adb43
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;