https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98306
Bug ID: 98306
Summary: invalid use of incomplete type 'struct grammar'
Product: gcc
Version: 10.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: slyfox at gcc dot gnu.org
Target Milestone: ---
Noticed error-looking warning when was reducing unrelated boost ICE. Minimal
reproducer:
// $ cat bug.cpp
extern struct grammar *target_grammar;
template <typename T> void define(void) { target_grammar->derived(); }
$ g++-11.0.0 -c bug.cpp; echo $?
bug.cpp: In function 'void define()':
bug.cpp:3:57: warning: invalid use of incomplete type 'struct grammar'
3 | template <typename T> void define(void) { target_grammar->derived(); }
| ^~
bug.cpp:1:15: note: forward declaration of 'struct grammar'
1 | extern struct grammar *target_grammar;
| ^~~~~~~
0
$ clang++ -c bug.cpp; echo $?
clang++
bug.cpp:3:57: error: member access into incomplete type 'struct grammar'
template <typename T> void define(void) { target_grammar->derived(); }
^
bug.cpp:1:15: note: forward declaration of 'grammar'
extern struct grammar *target_grammar;
^
1 error generated.
1
I read the diagnostic with "invalid use" as clearly incorrect code. Should g++
error out instead of generating a warning?