sem_dim.adb (Analyze_Dimension): Analyze object declaration and identifier nodes that do not come from source...

2017-01-19  Ed Schonberg  <schonberg@adacore.com>

	* 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
This commit is contained in:
Ed Schonberg 2017-01-19 11:33:17 +00:00 committed by Arnaud Charlet
parent a57c520e2b
commit d9049d04d5
2 changed files with 23 additions and 7 deletions

View File

@ -1,3 +1,12 @@
2017-01-19 Ed Schonberg <schonberg@adacore.com>
* 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 <jakub@redhat.com> 2017-01-16 Jakub Jelinek <jakub@redhat.com>
PR driver/49726 PR driver/49726

View File

@ -1122,16 +1122,22 @@ package body Sem_Dim is
-- Aspect is an Ada 2012 feature. Note that there is no need to check -- 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 -- dimensions for nodes that don't come from source, except for subtype
-- declarations where the dimensions are inherited from the base type, -- 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 if Ada_Version < Ada_2012 then
return; return;
elsif not Comes_From_Source (N) elsif not Comes_From_Source (N) then
and then Nkind (N) /= N_Subtype_Declaration if Nkind_In (N, N_Explicit_Dereference,
and then Nkind (N) /= N_Explicit_Dereference N_Identifier,
then N_Object_Declaration,
return; N_Subtype_Declaration)
then
null;
else
return;
end if;
end if; end if;
case Nkind (N) is case Nkind (N) is
@ -2138,7 +2144,8 @@ package body Sem_Dim is
end if; end if;
end if; end if;
-- Removal of dimensions in expression -- Remove dimensions in expression after checking consistency
-- with given type.
Remove_Dimensions (Expr); Remove_Dimensions (Expr);
end if; end if;