From: Piotr Trojanek <troja...@adacore.com> Code cleanup following a fix for aspect Exclusive_Functions; semantics is unaffected.
gcc/ada/ * exp_ch9.adb (Build_Protected_Subprogram_Body, Build_Protected_Subprogram_Call_Cleanup): Reuse refactored routine. * sem_util.adb (Has_Enabled_Aspect): Refactored repeated code. (Is_Static_Function): Reuse refactored routine. * sem_util.ads (Has_Enabled_Aspect): New query routine refactored from repeated code. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/exp_ch9.adb | 19 +++---------------- gcc/ada/sem_util.adb | 28 +++++++++++++++++++++++----- gcc/ada/sem_util.ads | 6 ++++++ 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb index 1b231b8bf2c..a89e3247647 100644 --- a/gcc/ada/exp_ch9.adb +++ b/gcc/ada/exp_ch9.adb @@ -3835,13 +3835,7 @@ package body Exp_Ch9 is Expression => New_Occurrence_Of (R, Loc)); end if; - if Has_Aspect (Pid, Aspect_Exclusive_Functions) - and then - (No (Find_Value_Of_Aspect (Pid, Aspect_Exclusive_Functions)) - or else - Is_True (Static_Boolean (Find_Value_Of_Aspect - (Pid, Aspect_Exclusive_Functions)))) - then + if Has_Enabled_Aspect (Pid, Aspect_Exclusive_Functions) then Lock_Kind := RE_Lock; else Lock_Kind := RE_Lock_Read_Only; @@ -4041,16 +4035,9 @@ package body Exp_Ch9 is if (Nkind (Op_Spec) = N_Procedure_Specification or else (Nkind (Op_Spec) = N_Function_Specification - and then Has_Aspect (Conc_Typ, Aspect_Exclusive_Functions) and then - (No - (Find_Value_Of_Aspect (Conc_Typ, - Aspect_Exclusive_Functions)) - or else - Is_True - (Static_Boolean - (Find_Value_Of_Aspect - (Conc_Typ, Aspect_Exclusive_Functions)))))) + Has_Enabled_Aspect + (Conc_Typ, Aspect_Exclusive_Functions))) and then Has_Entries (Conc_Typ) then case Corresponding_Runtime_Package (Conc_Typ) is diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index b30cbcd57e9..e9ab6650dac 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -13484,6 +13484,28 @@ package body Sem_Util is return False; end Has_Effectively_Volatile_Component; + ------------------------ + -- Has_Enabled_Aspect -- + ------------------------ + + function Has_Enabled_Aspect + (Id : Entity_Id; + A : Aspect_Id) + return Boolean + is + Asp : constant Node_Id := Find_Aspect (Id, A); + begin + if Present (Asp) then + if Present (Expression (Asp)) then + return Is_True (Static_Boolean (Expression (Asp))); + else + return True; + end if; + else + return False; + end if; + end Has_Enabled_Aspect; + ---------------------------- -- Has_Volatile_Component -- ---------------------------- @@ -20356,11 +20378,7 @@ package body Sem_Util is -- for efficiency. return Ada_Version >= Ada_2022 - and then Has_Aspect (Subp, Aspect_Static) - and then - (No (Find_Value_Of_Aspect (Subp, Aspect_Static)) - or else Is_True (Static_Boolean - (Find_Value_Of_Aspect (Subp, Aspect_Static)))); + and then Has_Enabled_Aspect (Subp, Aspect_Static); end Is_Static_Function; ----------------------------- diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index a5eb1ecd7c1..527b1075c3f 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -1559,6 +1559,12 @@ package Sem_Util is -- Given arbitrary type Typ, determine whether it contains at least one -- effectively volatile component. + function Has_Enabled_Aspect (Id : Entity_Id; A : Aspect_Id) return Boolean + with Pre => A in Boolean_Aspects; + -- Returns True if a Boolean-valued aspect is enabled on entity Id; i.e. it + -- is present and either has no aspect definition or its aspect definition + -- statically evaluates to True. + function Has_Volatile_Component (Typ : Entity_Id) return Boolean; -- Given arbitrary type Typ, determine whether it contains at least one -- volatile component. -- 2.43.2