[COMMITTED] ada: Fix iteration over component items with pragmas
Checks
Commit Message
From: Piotr Trojanek <trojanek@adacore.com>
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.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/exp_dist.adb | 4 ++--
gcc/ada/sem_ch3.adb | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
@@ -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
@@ -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;