aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2023-11-07 22:16:31 +0000
committerMarc Poulhiès <poulhies@adacore.com>2023-11-28 10:35:47 +0100
commit8ba9430bc41fcf60de936746ebfa27928bcdabc3 (patch)
tree45f7ba4167b4514cb50b6d788dbe442f4c401a34
parente95a42ec9a6be3edb6d8e31273ffcf64a40c0d3d (diff)
downloadgcc-8ba9430bc41fcf60de936746ebfa27928bcdabc3.zip
gcc-8ba9430bc41fcf60de936746ebfa27928bcdabc3.tar.gz
gcc-8ba9430bc41fcf60de936746ebfa27928bcdabc3.tar.bz2
ada: Type error on container aggregate with loop_parameter_specification
The compiler incorrectly reported a type error on a container aggregate for a Vector type with a loop_parameter_specification specifying a nonstatic upper bound, complaining that it expected the Vector index type, but instead found type Count_Type. The expansion of the aggregate was incorrectly passing a size temporary of type Count_Type to the function associated with the New_Indexed part of the container type's Aggregate aspect (New_Vector in the case of Vectors), which has two formals of the container index type. The fix is to convert the size temporary to the expected index type. gcc/ada/ * exp_aggr.adb (Expand_Container_Aggregate): Apply a conversion to the size temp object passed as the second actual parameter on the call to the New_Indexed_Subp function, to convert it to the index type of the container type (taken from the first formal parameter of the function).
-rw-r--r--gcc/ada/exp_aggr.adb10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb
index 691430a..513fc2d 100644
--- a/gcc/ada/exp_aggr.adb
+++ b/gcc/ada/exp_aggr.adb
@@ -6984,8 +6984,14 @@ package body Exp_Aggr is
Parameter_Associations =>
New_List (
Make_Integer_Literal (Loc, 1),
- New_Occurrence_Of
- (Defining_Identifier (Siz_Decl), Loc))));
+ Make_Type_Conversion (Loc,
+ Subtype_Mark =>
+ New_Occurrence_Of
+ (Etype (First_Formal (Entity (New_Indexed_Subp))),
+ Loc),
+ Expression => New_Occurrence_Of
+ (Defining_Identifier (Siz_Decl),
+ Loc)))));
end if;
Append (Init_Stat, Aggr_Code);