diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb index fa0d59a246a265093610857e310124f1423f46c8..21bbbf1219e7cf6c1aea29bb952639ebd9045568 100644 --- a/gcc/ada/contracts.adb +++ b/gcc/ada/contracts.adb @@ -2529,17 +2529,9 @@ package body Contracts is Pragma_Argument_Associations => Args, Class_Present => Class_Present); - Subp_Decl : Node_Id := Subp_Id; + Subp_Decl : constant Node_Id := Enclosing_Declaration (Subp_Id); + pragma Assert (Is_Declaration (Subp_Decl)); begin - -- Enclosing_Declaration may return, for example, - -- a N_Procedure_Specification node. Cope with this. - loop - Subp_Decl := Enclosing_Declaration (Subp_Decl); - exit when Is_Declaration (Subp_Decl); - Subp_Decl := Parent (Subp_Decl); - pragma Assert (Present (Subp_Decl)); - end loop; - Insert_After_And_Analyze (Subp_Decl, Prag); end Insert_Stable_Property_Check; diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 66fd6848a1d7a1056be4b6ce389dde0073feef26..a781f93c4ef8fcad0c4e228ac3e8cb18cbdc80df 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -8653,17 +8653,8 @@ package body Exp_Attr is -------------------------- function In_Available_Context (Ent : Entity_Id) return Boolean is - Decl : Node_Id := Enclosing_Declaration (Ent); + Decl : constant Node_Id := Enclosing_Declaration (Ent); begin - -- Enclosing_Declaration does not always return a declaration; - -- cope with this irregularity. - if Decl in N_Subprogram_Specification_Id - and then Nkind (Parent (Decl)) in - N_Subprogram_Body | N_Subprogram_Declaration - then - Decl := Parent (Decl); - end if; - if Has_Declarations (Parent (Decl)) then return In_Subtree (Attr_Ref, Root => Parent (Decl)); elsif Is_List_Member (Decl) then diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index 5408be3e1a526eede00f6413a72335b6ba98bd37..fc2fec5f2243b2875a8bc4faf36c4f1338e5df89 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -6562,16 +6562,6 @@ package body Sem_Ch8 is Decl := Enclosing_Declaration (E); - -- Enclosing_Declaration does not always return a - -- declaration; cope with this irregularity. - if Decl in N_Subprogram_Specification_Id - and then Nkind (Parent (Decl)) in - N_Subprogram_Body | N_Subprogram_Declaration - | N_Subprogram_Renaming_Declaration - then - Decl := Parent (Decl); - end if; - -- Look for the suprogram renaming declaration built -- for a generic actual subprogram. Unclear why -- Original_Node call is needed, but sometimes it is. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 9cff9e1be1635c7b7c336e7ec4e9563fbe8176ab..01be86cb41f682a3db46928ca3d506a6597f89cd 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -7386,6 +7386,11 @@ package body Sem_Util is Decl := Parent (Decl); end loop; + -- cope with oddness in definition of N_Declaration + if Nkind (Decl) in N_Subprogram_Specification then + Decl := Parent (Decl); + end if; + return Decl; end Enclosing_Declaration;