From: Piotr Trojanek <troja...@adacore.com> When iterating over Aspect_Specifications, we can use First/Next directly even if the Aspect_Specifications returns a No_List or the list has no items.
Code cleanup. gcc/ada/ * aspects.adb (Copy_Aspects): Style fix. * contracts.adb (Analyze_Contracts): Style fix. (Save_Global_References_In_Contract): Remove extra guards. * par_sco.adb (Traverse_Aspects): Move guard to the caller and make it consistent with Save_Global_References_In_Contract. * sem_ch12.adb (Has_Contracts): Remove extra guards. * sem_ch3.adb (Delayed_Aspect_Present, Get_Partial_View_Aspect, Check_Duplicate_Aspects): Likewise. * sem_disp.adb (Check_Dispatching_Operation): Likewise. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/aspects.adb | 1 - gcc/ada/contracts.adb | 5 +-- gcc/ada/par_sco.adb | 8 ++-- gcc/ada/sem_ch12.adb | 22 +++++------ gcc/ada/sem_ch3.adb | 91 ++++++++++++++++++++----------------------- gcc/ada/sem_disp.adb | 22 +++++------ 6 files changed, 65 insertions(+), 84 deletions(-) diff --git a/gcc/ada/aspects.adb b/gcc/ada/aspects.adb index 696ee672acd..b7262c56f3f 100644 --- a/gcc/ada/aspects.adb +++ b/gcc/ada/aspects.adb @@ -433,7 +433,6 @@ package body Aspects is ------------------- procedure Copy_Aspects (From : Node_Id; To : Node_Id) is - begin if not Has_Aspects (From) then return; diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb index 97f38735662..810b360fb94 100644 --- a/gcc/ada/contracts.adb +++ b/gcc/ada/contracts.adb @@ -512,7 +512,6 @@ package body Contracts is if Present (It) then Validate_Iterable_Aspect (E, It); end if; - if Present (I_Lit) then Validate_Literal_Aspect (E, I_Lit); end if; @@ -4980,9 +4979,7 @@ package body Contracts is Push_Scope (Gen_Id); - if Permits_Aspect_Specifications (Templ) - and then Has_Aspects (Templ) - then + if Permits_Aspect_Specifications (Templ) then Save_Global_References_In_Aspects (Templ); end if; diff --git a/gcc/ada/par_sco.adb b/gcc/ada/par_sco.adb index 83c1d001ee5..0b750a6f8de 100644 --- a/gcc/ada/par_sco.adb +++ b/gcc/ada/par_sco.adb @@ -1696,10 +1696,6 @@ package body Par_SCO is C1 : Character; begin - if not Has_Aspects (N) then - return; - end if; - AN := First (Aspect_Specifications (N)); while Present (AN) loop AE := Expression (AN); @@ -2414,7 +2410,9 @@ package body Par_SCO is end if; end case; - Traverse_Aspects (N); + if Permits_Aspect_Specifications (N) then + Traverse_Aspects (N); + end if; end Traverse_One; -- Start of processing for Traverse_Declarations_Or_Statements diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index e7b759c4e88..cb05a71e96f 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -9663,21 +9663,17 @@ package body Sem_Ch12 is A_Spec : Node_Id; A_Id : Aspect_Id; begin - if No (A_List) then - return False; - else - A_Spec := First (A_List); - while Present (A_Spec) loop - A_Id := Get_Aspect_Id (A_Spec); - if A_Id = Aspect_Pre or else A_Id = Aspect_Post then - return True; - end if; + A_Spec := First (A_List); + while Present (A_Spec) loop + A_Id := Get_Aspect_Id (A_Spec); + if A_Id = Aspect_Pre or else A_Id = Aspect_Post then + return True; + end if; - Next (A_Spec); - end loop; + Next (A_Spec); + end loop; - return False; - end if; + return False; end Has_Contracts; ---------- diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 1d95b12ff44..2bff0bb6307 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -4153,24 +4153,22 @@ package body Sem_Ch3 is A_Id : Aspect_Id; begin - if Present (Aspect_Specifications (N)) then - A := First (Aspect_Specifications (N)); + A := First (Aspect_Specifications (N)); - while Present (A) loop - A_Id := Get_Aspect_Id (Chars (Identifier (A))); + while Present (A) loop + A_Id := Get_Aspect_Id (Chars (Identifier (A))); - if A_Id = Aspect_Address then + if A_Id = Aspect_Address then - -- Set flag on object entity, for later processing at - -- the freeze point. + -- Set flag on object entity, for later processing at the + -- freeze point. - Set_Has_Delayed_Aspects (Id); - return True; - end if; + Set_Has_Delayed_Aspects (Id); + return True; + end if; - Next (A); - end loop; - end if; + Next (A); + end loop; return False; end Delayed_Aspect_Present; @@ -18013,16 +18011,14 @@ package body Sem_Ch3 is Prev_Asp : Node_Id; begin - if Present (Prev_Asps) then - Prev_Asp := First (Prev_Asps); - while Present (Prev_Asp) loop - if Get_Aspect_Id (Prev_Asp) = Asp_Id then - return Prev_Asp; - end if; + Prev_Asp := First (Prev_Asps); + while Present (Prev_Asp) loop + if Get_Aspect_Id (Prev_Asp) = Asp_Id then + return Prev_Asp; + end if; - Next (Prev_Asp); - end loop; - end if; + Next (Prev_Asp); + end loop; return Empty; end Get_Partial_View_Aspect; @@ -18036,38 +18032,35 @@ package body Sem_Ch3 is -- Start of processing for Check_Duplicate_Aspects begin - if Present (Full_Asps) then - Full_Asp := First (Full_Asps); - while Present (Full_Asp) loop - Part_Asp := Get_Partial_View_Aspect (Full_Asp); + Full_Asp := First (Full_Asps); + while Present (Full_Asp) loop + Part_Asp := Get_Partial_View_Aspect (Full_Asp); - -- An aspect and its class-wide counterpart are two distinct - -- aspects and may apply to both views of an entity. + -- An aspect and its class-wide counterpart are two distinct + -- aspects and may apply to both views of an entity. - if Present (Part_Asp) - and then Class_Present (Part_Asp) = Class_Present (Full_Asp) - then - Error_Msg_N - ("aspect already specified in private declaration", - Full_Asp); + if Present (Part_Asp) + and then Class_Present (Part_Asp) = Class_Present (Full_Asp) + then + Error_Msg_N + ("aspect already specified in private declaration", Full_Asp); - Remove (Full_Asp); - return; - end if; + Remove (Full_Asp); + return; + end if; - if Has_Discriminants (Prev) - and then not Has_Unknown_Discriminants (Prev) - and then Get_Aspect_Id (Full_Asp) = - Aspect_Implicit_Dereference - then - Error_Msg_N - ("cannot specify aspect if partial view has known " - & "discriminants", Full_Asp); - end if; + if Has_Discriminants (Prev) + and then not Has_Unknown_Discriminants (Prev) + and then Get_Aspect_Id (Full_Asp) = + Aspect_Implicit_Dereference + then + Error_Msg_N + ("cannot specify aspect if partial view has known " + & "discriminants", Full_Asp); + end if; - Next (Full_Asp); - end loop; - end if; + Next (Full_Asp); + end loop; end Check_Duplicate_Aspects; ------------------ diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb index e1b35a64ddb..525a9f7f0a1 100644 --- a/gcc/ada/sem_disp.adb +++ b/gcc/ada/sem_disp.adb @@ -1932,19 +1932,17 @@ package body Sem_Disp is Asp : Node_Id; begin - if Present (Aspect_Specifications (W_Decl)) then - Asp := First (Aspect_Specifications (W_Decl)); - while Present (Asp) loop - if Chars (Identifier (Asp)) = Name_Yield then - Error_Msg_Name_1 := Name_Yield; - Error_Msg_N - ("specification of inherited aspect% can only confirm " - & "parent value", Asp); - end if; + Asp := First (Aspect_Specifications (W_Decl)); + while Present (Asp) loop + if Chars (Identifier (Asp)) = Name_Yield then + Error_Msg_Name_1 := Name_Yield; + Error_Msg_N + ("specification of inherited aspect% can only confirm " + & "parent value", Asp); + end if; - Next (Asp); - end loop; - end if; + Next (Asp); + end loop; Set_Has_Yield_Aspect (Wrapped_Entity (Subp)); end; -- 2.43.2