https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96077
Bug ID: 96077 Summary: GCC accepts ill-legal local enum definition Product: gcc Version: 11.0 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: haoxintu at gmail dot com Target Milestone: --- Hi, all. This code, test.cc, has a grammar issue in "missing ')'", but GCC accepts it well. $cat test.cc enum { a = ( 1 ) ? ( 2 ) : ( 2 + 1 } g_e; //reject int main () { enum { a = ( 1 ) ? ( 2 ) : ( 2 + 1 /* missing ")" here */ } l_e; //accept return 0; } $g++ test.cc test.cc:1:35: error: expected ‘)’ before ‘}’ token 1 | enum { a = ( 1 ) ? ( 2 ) : ( 2 + 1 } g_e; //reject | ~ ^~ | ) GCC only rejects line 1 but accepts line 3. While in Clang $clang++ test.cc test.cc:1:36: error: expected ')' enum { a = ( 1 ) ? ( 2 ) : ( 2 + 1 } g_e; //reject ^ test.cc:1:28: note: to match this '(' enum { a = ( 1 ) ? ( 2 ) : ( 2 + 1 } g_e; //reject ^ test.cc:3:63: error: expected ')' enum { a = ( 1 ) ? ( 2 ) : ( 2 + 1 /* missing ")" here */ } l_e; //accept ^ test.cc:3:32: note: to match this '(' enum { a = ( 1 ) ? ( 2 ) : ( 2 + 1 /* missing ")" here */ } l_e; //accept ^ 2 errors generated. $g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/home/haoxin/corpus-compilers/gcc-trunk/gcc-master/build/libexec/gcc/x86_64-pc-linux-gnu/11.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../configure --prefix=/home/haoxin/corpus-compilers/gcc-trunk/gcc-master/build/ --enable-languages=c,c++ CC=gcc CXX=g++ Thread model: posix Supported LTO compression algorithms: zlib gcc version 11.0.0 20200630 (experimental) (GCC)