From: Piotr Trojanek Date: Tue, 21 Mar 2023 08:46:57 +0000 (+0100) Subject: ada: Fix iteration over component items with pragmas X-Git-Tag: basepoints/gcc-15~8870 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16c320507774ca38e0eb3d1c4116c9dcb3f2e598;p=thirdparty%2Fgcc.git ada: Fix iteration over component items with pragmas Component items in a record declaration might include pragmas, which must be ignored when detecting components with default expressions. More a code cleanup than a bugfix, as it only affects artificial corner cases. Found while fixing missing legality checks for variant component declarations. gcc/ada/ * sem_ch3.adb (Check_CPP_Type_Has_No_Defaults): Iterate with First_Non_Pragma and Next_Non_Pragma. * exp_dist.adb (Append_Record_Traversal): Likewise. --- diff --git a/gcc/ada/exp_dist.adb b/gcc/ada/exp_dist.adb index 8f62bef2c649..f025b5656c6c 100644 --- a/gcc/ada/exp_dist.adb +++ b/gcc/ada/exp_dist.adb @@ -8304,7 +8304,7 @@ package body Exp_Dist is CI := Component_Items (Clist); VP := Variant_Part (Clist); - Item := First (CI); + Item := First_Non_Pragma (CI); while Present (Item) loop Def := Defining_Identifier (Item); @@ -8313,7 +8313,7 @@ package body Exp_Dist is (Stmts, Container, Counter, Rec, Def); end if; - Next (Item); + Next_Non_Pragma (Item); end loop; if Present (VP) then diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 9e32dea5c02c..fb4f5badd4e7 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -12312,7 +12312,7 @@ package body Sem_Ch3 is -- Check all components to ensure no default expressions if Present (Clist) then - Comp := First (Component_Items (Clist)); + Comp := First_Non_Pragma (Component_Items (Clist)); while Present (Comp) loop if Present (Expression (Comp)) then Error_Msg_N @@ -12320,7 +12320,7 @@ package body Sem_Ch3 is & "default expression", Expression (Comp)); end if; - Next (Comp); + Next_Non_Pragma (Comp); end loop; end if; end Check_CPP_Type_Has_No_Defaults;