From 19e7eae5b917d782d20d59f3cbe3c344a06aafb7 Mon Sep 17 00:00:00 2001 From: Bob Duff Date: Fri, 10 Sep 2021 11:18:47 -0400 Subject: [Ada] Renamed_Or_Alias cleanup gcc/ada/ * einfo-utils.ads, einfo-utils.adb (Alias, Set_Alias, Renamed_Entity, Set_Renamed_Entity, Renamed_Object, Set_Renamed_Object): Add assertions that reflect how these are supposed to be used and what they are supposed to return. (Renamed_Entity_Or_Object): New getter. (Set_Renamed_Object_Of_Possibly_Void): Setter that allows N to be E_Void. * checks.adb (Ensure_Valid): Use Renamed_Entity_Or_Object because this is called for both cases. * exp_dbug.adb (Debug_Renaming_Declaration): Use Renamed_Entity_Or_Object because this is called for both cases. Add assertions. * exp_util.adb (Possible_Bit_Aligned_Component): Likewise. * freeze.adb (Freeze_All_Ent): Likewise. * sem_ch5.adb (Within_Function): Likewise. * exp_attr.adb (Calculate_Header_Size): Call Renamed_Entity instead of Renamed_Object. * exp_ch11.adb (Expand_N_Raise_Statement): Likewise. * repinfo.adb (Find_Declaration): Likewise. * sem_ch10.adb (Same_Unit, Process_Spec_Clauses, Analyze_With_Clause, Install_Parents): Likewise. * sem_ch12.adb (Build_Local_Package, Needs_Body_Instantiated, Build_Subprogram_Renaming, Check_Formal_Package_Instance, Check_Generic_Actuals, In_Enclosing_Instance, Denotes_Formal_Package, Process_Nested_Formal, Check_Initialized_Types, Map_Formal_Package_Entities, Restore_Nested_Formal): Likewise. * sem_ch6.adb (Report_Conflict): Likewise. * sem_ch8.adb (Analyze_Exception_Renaming, Analyze_Generic_Renaming, Analyze_Package_Renaming, Is_Primitive_Operator_In_Use, Declared_In_Actual, Note_Redundant_Use): Likewise. * sem_warn.adb (Find_Package_Renaming): Likewise. * sem_elab.adb (Ultimate_Variable): Call Renamed_Object instead of Renamed_Entity. * exp_ch6.adb (Get_Function_Id): Call Set_Renamed_Object_Of_Possibly_Void, because the defining identifer is still E_Void at this point. * sem_util.adb (Function_Call_Or_Allocator_Level): Likewise. Remove redundant (unreachable) code. (Is_Object_Renaming, Is_Valid_Renaming): Call Renamed_Object instead of Renamed_Entity. (Get_Fullest_View): Call Renamed_Entity instead of Renamed_Object. (Copy_Node_With_Replacement): Call Set_Renamed_Object_Of_Possibly_Void because the defining entity is sometimes E_Void. * exp_ch5.adb (Expand_N_Assignment_Statement): Protect a call to Renamed_Object with Is_Object to avoid assertion failure. * einfo.ads: Minor comment fixes. * inline.adb: Minor comment fixes. * tbuild.ads: Minor comment fixes. --- gcc/ada/einfo-utils.adb | 75 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 6 deletions(-) (limited to 'gcc/ada/einfo-utils.adb') diff --git a/gcc/ada/einfo-utils.adb b/gcc/ada/einfo-utils.adb index 0c89c82..eb90d18 100644 --- a/gcc/ada/einfo-utils.adb +++ b/gcc/ada/einfo-utils.adb @@ -43,24 +43,87 @@ package body Einfo.Utils is -- Determine whether abstract state State_Id has particular option denoted -- by the name Option_Nam. - ----------------------------------- - -- Renamings of Renamed_Or_Alias -- - ----------------------------------- + ------------------------------------------- + -- Aliases/Renamings of Renamed_Or_Alias -- + ------------------------------------------- function Alias (N : Entity_Id) return Node_Id is begin - pragma Assert - (Is_Overloadable (N) or else Ekind (N) = E_Subprogram_Type); - return Renamed_Or_Alias (N); + return Val : constant Node_Id := Renamed_Or_Alias (N) do + pragma Assert + (Is_Overloadable (N) or else Ekind (N) = E_Subprogram_Type); + pragma Assert (Val in N_Entity_Id | N_Empty_Id); + end return; end Alias; procedure Set_Alias (N : Entity_Id; Val : Node_Id) is begin pragma Assert (Is_Overloadable (N) or else Ekind (N) = E_Subprogram_Type); + pragma Assert (Val in N_Entity_Id | N_Empty_Id); + Set_Renamed_Or_Alias (N, Val); end Set_Alias; + function Renamed_Entity (N : Entity_Id) return Node_Id is + begin + return Val : constant Node_Id := Renamed_Or_Alias (N) do + pragma Assert (not Is_Object (N) or else Etype (N) = Any_Type); + pragma Assert (Val in N_Entity_Id | N_Empty_Id); + end return; + end Renamed_Entity; + + procedure Set_Renamed_Entity (N : Entity_Id; Val : Node_Id) is + begin + pragma Assert (not Is_Object (N)); + pragma Assert (Val in N_Entity_Id); + + Set_Renamed_Or_Alias (N, Val); + end Set_Renamed_Entity; + + function Renamed_Object (N : Entity_Id) return Node_Id is + begin + return Val : constant Node_Id := Renamed_Or_Alias (N) do + -- Formal_Kind uses the entity, not a name of it. This happens + -- in front-end inlining, which also sets to Empty. Also in + -- Exp_Ch9, where formals are renamed for the benefit of gdb. + + if Ekind (N) not in Formal_Kind then + pragma Assert (Is_Object (N)); + pragma Assert (Val in N_Subexpr_Id | N_Empty_Id); + null; + end if; + end return; + end Renamed_Object; + + procedure Set_Renamed_Object (N : Entity_Id; Val : Node_Id) is + begin + if Ekind (N) not in Formal_Kind then + pragma Assert (Is_Object (N)); + pragma Assert (Val in N_Subexpr_Id | N_Empty_Id); + null; + end if; + + Set_Renamed_Or_Alias (N, Val); + end Set_Renamed_Object; + + function Renamed_Entity_Or_Object (N : Entity_Id) return Node_Id is + begin + if Is_Object (N) then + return Renamed_Object (N); + else + return Renamed_Entity (N); + end if; + end Renamed_Entity_Or_Object; + + procedure Set_Renamed_Object_Of_Possibly_Void + (N : Entity_Id; Val : Node_Id) + is + begin + pragma Assert (Val in N_Subexpr_Id); + Set_Renamed_Or_Alias (N, Val); + end Set_Renamed_Object_Of_Possibly_Void; + ---------------- -- Has_Option -- ---------------- -- cgit v1.1