+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>
* exp_ch4.adb (Expand_N_Allocator): Add condition to detect
if Ada_Version < Ada_2012 then
return;
+ -- Inlined bodies have already been checked for dimensionality
+
+ elsif In_Inlined_Body then
+ return;
+
elsif not Comes_From_Source (N) then
if Nkind_In (N, N_Explicit_Dereference,
N_Identifier,
-- Aspect is an Ada 2012 feature. Nothing to do here if the component
-- 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
-- original array aggregate may not have been entirely decorated.
if Ada_Version < Ada_2012
+ or else In_Inlined_Body
or else not Comes_From_Source (Original_Node (N))
or else not Has_Dimension_System (Base_Type (Comp_Typ))
then
begin
-- 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
- -- have semantic errors.
+ -- dimensions for calls in inlined bodies, or calls that don't come
+ -- from source, or those that may have semantic errors.
if Ada_Version < Ada_2012
+ or else In_Inlined_Body
or else not Comes_From_Source (N)
or else Error_Posted (N)
then
begin
-- 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
- -- within an initialization procedure, whose expressions have been
- -- checked at the point of record declaration.
+ -- dimensions in inlined bodies, or for aggregates that don't come
+ -- from source, or if we are within an initialization procedure, whose
+ -- expressions have been checked at the point of record declaration.
if Ada_Version < Ada_2012
+ or else In_Inlined_Body
or else not Comes_From_Source (N)
or else Inside_Init_Proc
then
-- Check the dimensions of the actuals in the call. For function calls,
-- propagate the dimensions from the returned type to N.
- if not In_Inlined_Body then
- Analyze_Dimension_Call (N, Nam);
- end if;
+ Analyze_Dimension_Call (N, Nam);
-- All done, evaluate call and deal with elaboration issues