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