diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 5b2244353358..625643f21fe2 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,12 @@ +2017-01-19 Ed Schonberg + + * sem_dim.adb (Analyze_Dimension): Analyze object declaration and + identifier nodes that do not come from source, to handle properly + dimensionality check within an inlined body which inclddes both + original operands and rewritten operands. This removes spurious + dimensionality errors in the presence of front-end inlining, + as well as in SPARK mode. + 2017-01-16 Jakub Jelinek PR driver/49726 diff --git a/gcc/ada/sem_dim.adb b/gcc/ada/sem_dim.adb index 44794ba1e0a5..2c57bcb52271 100644 --- a/gcc/ada/sem_dim.adb +++ b/gcc/ada/sem_dim.adb @@ -1122,16 +1122,22 @@ package body Sem_Dim is -- Aspect is an Ada 2012 feature. Note that there is no need to check -- dimensions for nodes that don't come from source, except for subtype -- declarations where the dimensions are inherited from the base type, - -- and for explicit dereferences generated when expanding iterators. + -- for explicit dereferences generated when expanding iterators, and + -- for object declarations generated for inlining. if Ada_Version < Ada_2012 then return; - elsif not Comes_From_Source (N) - and then Nkind (N) /= N_Subtype_Declaration - and then Nkind (N) /= N_Explicit_Dereference - then - return; + elsif not Comes_From_Source (N) then + if Nkind_In (N, N_Explicit_Dereference, + N_Identifier, + N_Object_Declaration, + N_Subtype_Declaration) + then + null; + else + return; + end if; end if; case Nkind (N) is @@ -2138,7 +2144,8 @@ package body Sem_Dim is end if; end if; - -- Removal of dimensions in expression + -- Remove dimensions in expression after checking consistency + -- with given type. Remove_Dimensions (Expr); end if;