https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121316
Bug ID: 121316
Summary: Representation clauses silently cause iterator filters
to be ignored
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ada
Assignee: unassigned at gcc dot gnu.org
Reporter: liam at liampwll dot com
CC: dkm at gcc dot gnu.org
Target Milestone: ---
The following code enters the loop in all cases despite the iterator filter.
This only occurs when the representation clause is present. This occurs on all
versions from 13.2 through to current trunk. 13.1 instead crashes. All versions
crash if `Use_Foo (F)'Image` is replaced with `Use_Foo'Image`.
procedure Example is
type Foo is (A, B, C);
for Foo use (A => 1, B => 2, C => 3);
type Use_Foo_Type is array (Foo) of Boolean;
Use_Foo : Use_Foo_Type := (A => True, B => False, C => True);
begin
for F in Foo when Use_Foo (F) loop
Put_Line (F'Image);
Put_Line (Use_Foo (F)'Image);
end loop;
end Example;