On Wed, 22 Jun 2016, David Malcolm wrote: > PR c/71613 identifies a problem where we fail to report this enum: > > enum { e1 = LLONG_MIN }; > > with -pedantic, due to LLONG_MIN being inside a system header. > > This patch updates the C and C++ frontends to use the location of the > name as the primary location in the diagnostic, supplying the location > of the value as a secondary location, fixing the issue. > > Before: > $ gcc -c /tmp/test.c -Wpedantic > /tmp/test.c: In function 'main': > /tmp/test.c:3:14: warning: ISO C restricts enumerator values to range of > 'int' [-Wpedantic] > enum { c = -3000000000 }; > ^ > > After: > $ ./xgcc -B. -c /tmp/test.c -Wpedantic > /tmp/test.c: In function 'main': > /tmp/test.c:3:10: warning: ISO C restricts enumerator values to range of > 'int' [-Wpedantic] > enum { c = -3000000000 }; > ^ ~~~~~~~~~~~ > > Successfully bootstrapped®retested on x86_64-pc-linux-gnu; > adds 13 PASS results to gcc.sum and 9 PASS results to g++.sum. > > OK for trunk?
The C front-end changes are OK for the diagnostic improvement, although I think piecemeal fixes make no sense for the issue of missing diagnostics - in the absence of a clear strategy to identify which cases should or should get diagnostics when a macro from a system header is expanded outside a system header, we need to make the default to give the diagnostics if the expansion location is outside a system header. (This applies both to the general diagnostic disabling outside system headers, and to specific tests for being in system headers in front ends - those specific tests may or may not be relics left over from before the general disabling was added.) -- Joseph S. Myers jos...@codesourcery.com