https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84127

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-01-30
                 CC|                            |msebor at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
I can confirm that diagnostic pragmas that affect the preprocessor have no
effect in C++.  I can reproduce the same behavior with GCC 6.x as well as 7.x
and 8.0 so it doesn't seem like a recent regression.

Here's an expanded test case.  When compiled in C mode all warnings are
suppressed.  In C++ mode none is.

$ cat pr84127.c && gcc -S -Wall -Wdate-time -Wempty-body -Wexpansion-to-defined
-trigraphs -o/dev/null -xc++ pr84127.c
_Pragma ("GCC diagnostic ignored \"-Wcomment\"")
/* /* */       // -Wcomment not suppressed

_Pragma ("GCC diagnostic ignored \"-Wtrigraphs\"")
int a??(1??);  // -Wtrigraphs not suppressed

_Pragma ("GCC diagnostic ignored \"-Wdate-time\"")
const char date[] =  __DATE__;   // -Wdate-time not suppressed

_Pragma ("GCC diagnostic ignored \"-Wendif-labels\"")
_Pragma ("GCC diagnostic ignored \"-Wexpansion-to-defined\"")

#define BLA defined(FOO)
#if BLA        // -Wexpansion-to-defined not suppressed
#endif BLA     // -Wendif-labels not suppressed

void f (void)
{
  _Pragma ("GCC diagnostic ignored \"-Wempty-body\"")
  if (0) { }   // -Wempty-body suppressed (good)
}
pr84127.c:2:4: warning: "/*" within comment [-Wcomment]
 /* /* */       // -Wcomment not suppressed

pr84127.c:5:6: warning: trigraph ??( converted to [ [-Wtrigraphs]
 int a??(1??);  // -Wtrigraphs not suppressed

pr84127.c:5:8: warning: trigraph ??) converted to ] [-Wtrigraphs]
pr84127.c:8:22: warning: macro "__DATE__" might prevent reproducible builds
[-Wdate-time]
 const char date[] =  __DATE__;   // -Wdate-time not suppressed
                      ^~~~~~~~
pr84127.c:14:5: warning: this use of "defined" may not be portable
[-Wexpansion-to-defined]
 #if BLA        // -Wexpansion-to-defined not suppressed
     ^~~
pr84127.c:15:8: warning: extra tokens at end of #endif directive
[-Wendif-labels]
 #endif BLA     // -Wendif-labels not suppressed
        ^~~

Reply via email to