Commit fa0c3ab8 by Yannick Moy Committed by Pierre-Marie de Rodat

[Ada] Avoid spurious errors on dimensionality checking in GNATprove

Complete the partial treatment that was started in r273405.  Instead of
checking for the special case of nodes inside inlined bodies at the call
site, check for this condition inside the top-level procedures called
for dimensionality checking.

There is no impact on compilation.

2019-08-13  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_dim.adb (Analyze_Dimension,
	Analyze_Dimension_Array_Aggregate, Analyze_Dimension_Call,
	Analyze_Dimension_Extension_Or_Record_Aggregate): Return
	immediately when inside an inlined body.
	* sem_res.adb (Resolve_Call): Remove special checking now done
	inside Analyze_Dimension_Call.

From-SVN: r274339
parent 943c82d7
2019-08-13 Yannick Moy <moy@adacore.com>
* sem_dim.adb (Analyze_Dimension,
Analyze_Dimension_Array_Aggregate, Analyze_Dimension_Call,
Analyze_Dimension_Extension_Or_Record_Aggregate): Return
immediately when inside an inlined body.
* sem_res.adb (Resolve_Call): Remove special checking now done
inside Analyze_Dimension_Call.
2019-08-13 Justin Squirek <squirek@adacore.com> 2019-08-13 Justin Squirek <squirek@adacore.com>
* exp_ch4.adb (Expand_N_Allocator): Add condition to detect * exp_ch4.adb (Expand_N_Allocator): Add condition to detect
......
...@@ -1142,6 +1142,11 @@ package body Sem_Dim is ...@@ -1142,6 +1142,11 @@ package body Sem_Dim is
if Ada_Version < Ada_2012 then if Ada_Version < Ada_2012 then
return; return;
-- Inlined bodies have already been checked for dimensionality
elsif In_Inlined_Body then
return;
elsif not Comes_From_Source (N) then elsif not Comes_From_Source (N) then
if Nkind_In (N, N_Explicit_Dereference, if Nkind_In (N, N_Explicit_Dereference,
N_Identifier, N_Identifier,
...@@ -1245,10 +1250,13 @@ package body Sem_Dim is ...@@ -1245,10 +1250,13 @@ package body Sem_Dim is
-- Aspect is an Ada 2012 feature. Nothing to do here if the component -- Aspect is an Ada 2012 feature. Nothing to do here if the component
-- base type is not a dimensioned type. -- base type is not a dimensioned type.
-- Inlined bodies have already been checked for dimensionality.
-- Note that here the original node must come from source since the -- Note that here the original node must come from source since the
-- original array aggregate may not have been entirely decorated. -- original array aggregate may not have been entirely decorated.
if Ada_Version < Ada_2012 if Ada_Version < Ada_2012
or else In_Inlined_Body
or else not Comes_From_Source (Original_Node (N)) or else not Comes_From_Source (Original_Node (N))
or else not Has_Dimension_System (Base_Type (Comp_Typ)) or else not Has_Dimension_System (Base_Type (Comp_Typ))
then then
...@@ -1634,10 +1642,11 @@ package body Sem_Dim is ...@@ -1634,10 +1642,11 @@ package body Sem_Dim is
begin begin
-- 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 calls that don't come from source, or those that may -- dimensions for calls in inlined bodies, or calls that don't come
-- have semantic errors. -- from source, or those that may have semantic errors.
if Ada_Version < Ada_2012 if Ada_Version < Ada_2012
or else In_Inlined_Body
or else not Comes_From_Source (N) or else not Comes_From_Source (N)
or else Error_Posted (N) or else Error_Posted (N)
then then
...@@ -1966,11 +1975,12 @@ package body Sem_Dim is ...@@ -1966,11 +1975,12 @@ package body Sem_Dim is
begin begin
-- 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 aggregates that don't come from source, or if we are -- dimensions in inlined bodies, or for aggregates that don't come
-- within an initialization procedure, whose expressions have been -- from source, or if we are within an initialization procedure, whose
-- checked at the point of record declaration. -- expressions have been checked at the point of record declaration.
if Ada_Version < Ada_2012 if Ada_Version < Ada_2012
or else In_Inlined_Body
or else not Comes_From_Source (N) or else not Comes_From_Source (N)
or else Inside_Init_Proc or else Inside_Init_Proc
then then
......
...@@ -6952,9 +6952,7 @@ package body Sem_Res is ...@@ -6952,9 +6952,7 @@ package body Sem_Res is
-- Check the dimensions of the actuals in the call. For function calls, -- Check the dimensions of the actuals in the call. For function calls,
-- propagate the dimensions from the returned type to N. -- propagate the dimensions from the returned type to N.
if not In_Inlined_Body then
Analyze_Dimension_Call (N, Nam); Analyze_Dimension_Call (N, Nam);
end if;
-- All done, evaluate call and deal with elaboration issues -- All done, evaluate call and deal with elaboration issues
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment