http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48062
momchil at xaxo dot eu changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |momchil at xaxo dot eu --- Comment #2 from momchil at xaxo dot eu 2011-06-09 01:46:43 UTC --- Hi, there is an ambiguity here, consider the following examples: $ cat > 1.c int main(void) { int i; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" { int i; } #pragma GCC diagnostic pop } $ gcc46 -Wshadow 1.c 1.c: In function 'main': 1.c:4:6: warning: shadowed declaration is here [-Wshadow] Here I would suppose to see no warning at all, because I have turned it off for the case that shadows. But: $ cat > 2.c int main(void) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" int i; #pragma GCC diagnostic pop {int i;} } $ gcc46 -Wshadow 2.c 2.c: In function 'main': 2.c:9:7: warning: declaration of 'i' shadows a previous local [-Wshadow] And it is something that I whould also not expect. And now: $ cat > 3.c int main(void) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" int i; #pragma GCC diagnostic pop #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" { int i; } #pragma GCC diagnostic pop } $ gcc46 -Wshadow 3.c Produces no warning. So for me it is a bit confusing, since the warning setting refers to pieces of code and not to variables.