Commit bf5899e7 by Hristian Kirtchev Committed by Pierre-Marie de Rodat

[Ada] Spurious range check with Initialize_Scalars

This patch modifies the expansion of default-initialized array objects when
pragma Initialize_Scalars or Normalize_Scalars is in effect to suppress the
generation of checks on the constructed in-place aggregate. The aggregate
intentionally contains invalid values which may not necessarily fit the
constraints of a particular component type. Check suppression ensures that
no spurious checks are generated, and that the effects of the pragmas are
carried out.

------------
-- Source --
------------

--  gnat.adc

pragma Initialize_Scalars;

--  init_scalar.adb

with Ada.Text_IO; use Ada.Text_IO;

procedure Init_Scalar is
   type Fixed is delta 0.25 range -12.0 .. 1270.0;
   type Fixed_Array is array (1 .. 1) of Fixed;

begin
   begin
      declare
         Obj : Fixed;
         pragma Unreferenced (Obj);
      begin null; end;
   exception
      when others => Put_Line ("ERROR: Fixed raised exception");
   end;

   begin
      declare
         Obj : Fixed_Array;
         pragma Unreferenced (Obj);
      begin null; end;
   exception
      when others => Put_Line ("ERROR: Fixed_Array raised exception");
   end;
end Init_Scalar;

-----------------
-- Compilation --
-----------------

$ gnatmake -q init_scalar.adb
$ ./init_scalar

2018-05-25  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

	* exp_ch3.adb (Default_Initialize_Object): Ensure that the analysis of
	the in-place initialization aggregate created for pragmas
	Initialize_Scalars or Normalize_Scalars is performed with checks
	suppressed.

From-SVN: r260740
parent f70b0116
2018-05-25 Hristian Kirtchev <kirtchev@adacore.com>
* exp_ch3.adb (Default_Initialize_Object): Ensure that the analysis of
the in-place initialization aggregate created for pragmas
Initialize_Scalars or Normalize_Scalars is performed with checks
suppressed.
2018-05-25 Arnaud Charlet <charlet@adacore.com>
* exp_aggr.adb (Convert_To_Positional): Bump default for
......
......@@ -6109,7 +6109,8 @@ package body Exp_Ch3 is
N => Obj_Def,
Size => Esize (Def_Id)));
Analyze_And_Resolve (Expression (N), Typ);
Analyze_And_Resolve
(Expression (N), Typ, Suppress => All_Checks);
-- Otherwise invoke the type init proc, generate:
-- Type_Init_Proc (Obj);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment