The freezing machinery ends up inserting a freeze node into its own Actions
list, which causes Expand_N_Freeze_Entity to enter an endless loop, because
Remove_Init_Call incorrectly returns the initialization call of a different
variable than the one for which it was invoked.
gcc/ada/ChangeLog:
* exp_util.adb (Remove_Init_Call.Find_Init_Call_In_List): Check that
the first actual denotes the expected variable modulo qualification
and conversion.
and then Is_Entity_Name (Name (Init_Call))
and then Entity (Name (Init_Call)) = Init_Proc
then
- return Init_Call;
+ declare
+ Act : constant Node_Id :=
+ Unqual_Conv (First (Parameter_Associations (Init_Call)));
+
+ begin
+ if Is_Entity_Name (Act) and then Entity (Act) = Var then
+ return Init_Call;
+ end if;
+ end;
end if;
Next (Init_Call);