https://gcc.gnu.org/g:a8372ce676a2394285927ec69b46f8ef31cc4181
commit r17-729-ga8372ce676a2394285927ec69b46f8ef31cc4181 Author: Eric Botcazou <[email protected]> Date: Thu Jan 8 21:58:05 2026 +0100 ada: Fix endless loop on Address aspect for object with dynamic address 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. Diff: --- gcc/ada/exp_util.adb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 7605ff9e576c..d93e3b10017d 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -12542,7 +12542,15 @@ package body Exp_Util is 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);
