https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119983
Nathaniel Shead <nshead at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |nshead at gcc dot gnu.org
Keywords| |ice-on-invalid-code
Status|UNCONFIRMED |RESOLVED
Resolution|--- |INVALID
--- Comment #2 from Nathaniel Shead <nshead at gcc dot gnu.org> ---
Thanks for the report! As Andrew noted, the ICE is fixed for 14.3 by
r14-10825-g01d3a974fe3474c37cd52b595c29dddafad954dc.
The code is ill-formed, however:
export module M;
struct {} instance;
is not legal in a module interface, because of
https://eel.is/c++draft/basic.link#15.2 (the type of the unnamed struct is
TU-local), https://eel.is/c++draft/basic.link#14 (the declaration of the
variable exposes the TU-local type), and https://eel.is/c++draft/basic.link#17
(the variable is not TU-local, so this is ill-formed).
We don't check this in GCC 14 (so 14.3 will accept this code), but for GCC 15
we properly implement https://wg21.link/p1815 and so error in this case:
<source>:2:11: error: 'instance' exposes TU-local entity 'struct<unnamed>'
2 | struct {} instance;
| ^~~~~~~~
<source>:2:8: note: '<unnamed struct>' has no name and is not defined within a
class, function, or initializer
2 | struct {} instance;
| ^