diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/discr45.adb | 44 |
2 files changed, 48 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 85dff2e..d6956cf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-10-31 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/discr45.adb: New test. + 2015-10-31 Tom de Vries <tom@codesourcery.com> * gfortran.dg/assumed_type_2.f90: Update test. diff --git a/gcc/testsuite/gnat.dg/discr45.adb b/gcc/testsuite/gnat.dg/discr45.adb new file mode 100644 index 0000000..0d0b4dc --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr45.adb @@ -0,0 +1,44 @@ +-- { dg-do run } +-- { dg-options "-O2 -gnatws" } + +procedure Discr45 is + + function Ident_Int (I : Integer) return Integer is + begin + return I; + end; + + procedure Proc (Signal : Boolean) is + + subtype Index is Integer range 1..10; + + type My_Arr is array (Index range <>) OF Integer; + + type Rec (D3 : Integer := Ident_Int(1)) is record + case D3 is + when -5..10 => C1 : My_Arr(D3..Ident_Int(11)); + when Others => C2 : Integer := Ident_Int(5); + end case; + end record; + + X : Rec; + + function Value return Rec; + pragma No_Inline (Value); + + function Value return Rec is + begin + return X; + end; + + begin + if X /= Value then + raise Constraint_Error; + elsif Signal then + raise Program_Error; + end if; + end; + +begin + Proc (True); +end; |