From: Javier Miranda Date: Fri, 22 May 2020 19:29:57 +0000 (-0400) Subject: [Ada] Fix recent regression on _Master declaration X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3aabbc7d979edae5e618776ba865d71f3e586089;p=thirdparty%2Fgcc.git [Ada] Fix recent regression on _Master declaration gcc/ada/ * exp_ch9.adb (Build_Class_Wide_Master): Insert the declaration of _Master before its use; required to avoid assertion failure in the backend. --- diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 70fdf1d1851d..c4b98822684e 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -1215,10 +1215,21 @@ package body Exp_Ch9 is if not Has_Master_Entity (Master_Scope) or else No (Current_Entity_In_Scope (Name_Id)) then + declare + Ins_Nod : Node_Id; + begin Set_Has_Master_Entity (Master_Scope); Master_Decl := Build_Master_Declaration (Loc); - Insert_Action (Find_Hook_Context (Related_Node), Master_Decl); + + -- Ensure that the master declaration is placed before its use + + Ins_Nod := Find_Hook_Context (Related_Node); + while not Is_List_Member (Ins_Nod) loop + Ins_Nod := Parent (Ins_Nod); + end loop; + + Insert_Before (First (List_Containing (Ins_Nod)), Master_Decl); Analyze (Master_Decl); -- Mark the containing scope as a task master. Masters associated