From 72c53a837c70288ab4e06a5cae11c63276ebe157 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 19 Mar 2010 07:18:47 +0000 Subject: [PATCH] re PR ada/43106 (optimization error in a case statement) PR ada/43106 * gnat.dg/case_optimization2.adb: New test. * gnat.dg/case_optimization_pkg2.ad[sb]: New helper. From-SVN: r157558 --- gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/gnat.dg/case_optimization2.adb | 14 +++++++++++ .../gnat.dg/case_optimization_pkg2.adb | 23 +++++++++++++++++++ .../gnat.dg/case_optimization_pkg2.ads | 23 +++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 gcc/testsuite/gnat.dg/case_optimization2.adb create mode 100644 gcc/testsuite/gnat.dg/case_optimization_pkg2.adb create mode 100644 gcc/testsuite/gnat.dg/case_optimization_pkg2.ads diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ef33f4cab91..482b3853c99 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-03-19 Eric Botcazou + + PR ada/43106 + * gnat.dg/case_optimization2.adb: New test. + * gnat.dg/case_optimization_pkg2.ad[sb]: New helper. + 2010-03-11 Francois-Xavier Coudert Jack Howarth diff --git a/gcc/testsuite/gnat.dg/case_optimization2.adb b/gcc/testsuite/gnat.dg/case_optimization2.adb new file mode 100644 index 00000000000..f548a848801 --- /dev/null +++ b/gcc/testsuite/gnat.dg/case_optimization2.adb @@ -0,0 +1,14 @@ +-- PR ada/43106 +-- Testcase by Bill Neven + +-- { dg-do run } +-- { dg-options "-O" } + +with Case_Optimization_Pkg2; use Case_Optimization_Pkg2; + +procedure Case_Optimization2 is + Radar : Radar_T; +begin + Radar.Sensor_Type := radcmb; + Initialize (Radar); +end; diff --git a/gcc/testsuite/gnat.dg/case_optimization_pkg2.adb b/gcc/testsuite/gnat.dg/case_optimization_pkg2.adb new file mode 100644 index 00000000000..57f9224e5e7 --- /dev/null +++ b/gcc/testsuite/gnat.dg/case_optimization_pkg2.adb @@ -0,0 +1,23 @@ +package body Case_Optimization_Pkg2 is + + procedure Initialize (Radar : in Radar_T) is + Antenna1 : Antenna_Type_T; + Antenna2 : Antenna_Type_T; + begin + case Radar.Sensor_Type is + when radpr | radssr => + Antenna1 := Radar.Sensor_Type; + Antenna2 := Radar.Sensor_Type; + when radcmb => + Antenna1 := radpr; + Antenna2 := radssr; + when others => + Antenna1 := radpr; + Antenna2 := radssr; + end case; + if Antenna1 /= radpr or Antenna2 /= radssr then + raise Program_Error; + end if; + end Initialize; + +end Case_Optimization_Pkg2; diff --git a/gcc/testsuite/gnat.dg/case_optimization_pkg2.ads b/gcc/testsuite/gnat.dg/case_optimization_pkg2.ads new file mode 100644 index 00000000000..c41a05c2605 --- /dev/null +++ b/gcc/testsuite/gnat.dg/case_optimization_pkg2.ads @@ -0,0 +1,23 @@ +package Case_Optimization_Pkg2 is + + type Unsigned_64 is mod 2 ** 64; + + type Associated_Report_T is (miss, radpr, radssr, radcmb); + + -- sensor type : primary, secondary, co-rotating (combined) + subtype Sensor_Type_T is Associated_Report_T; -- range radpr .. radcmb; + subtype Antenna_Type_T is Sensor_Type_T range radpr .. radssr; + + type Filtering_Level_T is (none, pr_in_clutter, ssr_plots, pr_plots); + type Filtering_Levels_T is array (Filtering_Level_T) of boolean; + + type Radar_T is record + External_Sensor_ID : Unsigned_64; + Dual_Radar_Index : Integer; + Compatible_Filtering_Levels : Filtering_Levels_T; + Sensor_Type : Sensor_Type_T; + end record; + + procedure Initialize (Radar : in Radar_T); + +end Case_Optimization_Pkg2;