From: Arnaud Charlet Date: Thu, 11 Apr 2013 12:38:20 +0000 (+0200) Subject: [multiple changes] X-Git-Tag: releases/gcc-4.9.0~6528 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=83851b239b0dd1af4fe3ba4c8d0ce7b74c82803d;p=thirdparty%2Fgcc.git [multiple changes] 2013-04-11 Thomas Quinot * sem_util.adb (Set_Entity_With_Style_Check): Fix logic of check for implementation defined identifiers. 2013-04-11 Yannick Moy * checks.adb (Apply_Type_Conversion_Checks): Add an explanation of why range check and length are put on different nodes. * exp_ch4.adb (Apply_Type_Conversion_Checks): Remove check marks when doing their expansion. From-SVN: r197776 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 203295010da2..cb5028589344 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,15 @@ +2013-04-11 Thomas Quinot + + * sem_util.adb (Set_Entity_With_Style_Check): Fix logic of + check for implementation defined identifiers. + +2013-04-11 Yannick Moy + + * checks.adb (Apply_Type_Conversion_Checks): Add an explanation + of why range check and length are put on different nodes. + * exp_ch4.adb (Apply_Type_Conversion_Checks): Remove check marks + when doing their expansion. + 2013-04-11 Ed Schonberg * sem_util.ads, sem_util.adb (Get_Incomplete_View_Of_Ancestor): diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 05a0c6f8c30c..640f0127c3cb 100644 --- a/gcc/ada/checks.adb +++ b/gcc/ada/checks.adb @@ -3248,7 +3248,9 @@ package body Checks is -- expansion, to take into accounts changes of representation. The -- checks become range checks on the base type or length checks on the -- subtype, depending on whether the target type is unconstrained or - -- constrained. + -- constrained. Note that the range check is put on the expression of a + -- type conversion, while the length check is put on the type conversion + -- itself. elsif Is_Array_Type (Target_Type) then if Is_Constrained (Target_Type) then diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index be011f8c7b2c..480151df7091 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -10053,6 +10053,19 @@ package body Exp_Ch4 is -- Start of processing for Expand_N_Type_Conversion begin + -- First remove check marks put by the semantic analysis on the type + -- conversion between array types. The front end expands these checks + -- explicitly, so they should not be set in the tree passed to the back + -- end. + + if Is_Array_Type (Target_Type) then + if Is_Constrained (Target_Type) then + Set_Do_Length_Check (N, False); + else + Set_Do_Range_Check (Operand, False); + end if; + end if; + -- Nothing at all to do if conversion is to the identical type so remove -- the conversion completely, it is useless, except that it may carry -- an Assignment_OK attribute, which must be propagated to the operand. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 071bdd5a20c6..2892c8800810 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -13419,9 +13419,10 @@ package body Sem_Util is -- the entities within it). if (Is_Implementation_Defined (Val) + or else + Is_Implementation_Defined (Scope (Val))) and then not (Ekind_In (Val, E_Package, E_Generic_Package) - and then Is_Library_Level_Entity (Val))) - or else Is_Implementation_Defined (Scope (Val)) + and then Is_Library_Level_Entity (Val)) then Check_Restriction (No_Implementation_Identifiers, N); end if;