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
This commit is contained in:
Eric Botcazou 2010-03-19 07:18:47 +00:00 committed by Eric Botcazou
parent 9fd52c6c0f
commit 72c53a837c
4 changed files with 66 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2010-03-19 Eric Botcazou <ebotcazou@adacore.com>
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 <fxcoudert@gcc.gnu.org>
Jack Howarth <howarth@bromo.med.uc.edu>

View file

@ -0,0 +1,14 @@
-- PR ada/43106
-- Testcase by Bill Neven <neven@hitt.nl>
-- { 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;

View file

@ -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;

View file

@ -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;