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).
This commit is contained in:
Gary Dismukes 2023-11-07 22:16:31 +00:00 committed by Marc Poulhiès
parent e95a42ec9a
commit 8ba9430bc4

View file

@ -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);