r260572 - in /trunk/gcc/ada: ChangeLog exp_ch3....
pmderodat@gcc.gnu.org
pmderodat@gcc.gnu.org
Wed May 23 10:21:00 GMT 2018
Author: pmderodat
Date: Wed May 23 10:21:42 2018
New Revision: 260572
URL: https://gcc.gnu.org/viewcvs?rev=260572&root=gcc&view=rev
Log:
[Ada] Initialize_Scalars optimization causes spurious runtime check failure
This patch suppresses the optimization of scalar arrays when pragma
Initialize_Scalars is in effect if the component type is subject to
predicates. Since the scalar array is initialized with invalid values,
these values may violate the predicate or a validity check within the
predicate.
------------
-- Source --
------------
-- gnat.adc
pragma Initialize_Scalars;
-- types.ads
with System; use System;
package Types is
type Byte is mod System.Storage_Unit;
subtype Inter_Byte is Byte;
function Always_OK (B : Inter_Byte) return Boolean is (True);
function Is_OK (B : Inter_Byte) return Boolean is (Always_OK (B));
subtype Final_Byte is Byte with Predicate => Is_OK (Final_Byte);
type Bytes is array (1 .. 5) of Final_Byte;
Obj : Bytes;
end Types;
-- main.adb
with Types; use Types;
procedure Main is begin null; end Main;
-----------------
-- Compilation --
-----------------
$ gnatmake -q -gnata -gnatVa main.adb
$ ./main
2018-05-23 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch3.adb (Default_Initialize_Object): Do not optimize scalar array
initialization when the component type has predicates.
* exp_ch4.adb (Expand_N_Allocator): Do not optimize scalar array
allocation when the component type has predicates.
Modified:
trunk/gcc/ada/ChangeLog
trunk/gcc/ada/exp_ch3.adb
trunk/gcc/ada/exp_ch4.adb
More information about the Gcc-cvs
mailing list