https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118082
Bug ID: 118082 Summary: Types from other packages are not visible inside aggregate and reduction expressions inside generic bodies Product: gcc Version: 14.2.1 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: --- It appears that any types declared in other packages are not visible inside aggregate and reduction expressions inside generic package bodies, but are visible inside generic package specifications. This bug occurs on at least 13.3, 14.2, and mainline. This may be a duplicate of PR48039 but it is not clear if this issue has the same cause. Refer to the comments in the following code: pragma Ada_2022; procedure Tmp is package A is subtype T is Integer range 1..5; end A; package B is function F return Integer; end B; package body B is function F return Integer is begin if A.T'First < 3 then return [for X in A.T => X]'Reduce ("+", 0); -- No errors here, as expected. end if; end F; end B; generic package C is function F return Integer; function G return Integer is ([for X in A.T => X]'Reduce ("+", 0)); -- No errors here, as expected. end C; package body C is function F return Integer is begin if A.T'First < 3 then -- A.T is visible above. return [for X in A.T => X]'Reduce ("+", 0); -- The above causes 'error: "A" is undefined'. -- The same error occurs if we define F as an expression function. end if; end F; end C; package D is new C; -- If the package is not instantiated then no error is reported. begin null; end Tmp;