From: Ed Schonberg Date: Thu, 19 Jan 2017 11:33:17 +0000 (+0000) Subject: sem_dim.adb (Analyze_Dimension): Analyze object declaration and identifier nodes... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d9049d04d5fa172848374e395bf283c164a0f7fd;p=gcc.git sem_dim.adb (Analyze_Dimension): Analyze object declaration and identifier nodes that do not come from source... 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. From-SVN: r244614 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 5b224435335..625643f21fe 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 44794ba1e0a..2c57bcb5227 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;