https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69543
Bug ID: 69543 Summary: _Pragma does not apply within macro Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: preprocessor Assignee: unassigned at gcc dot gnu.org Reporter: dmalcolm at gcc dot gnu.org Target Milestone: --- https://gcc.gnu.org/ml/gcc-patches/2016-01/msg02243.html reported a regression introduced by r232893 (for PR preprocessor/69126) Minimal reproducer seems to be: $ cat /tmp/test.c # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") void test (char yylval) { char *yyvsp; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END } $ ./xgcc -B. -c /tmp/test.c -Wall /tmp/test.c: In function 'test': /tmp/test.c:12:12: warning: 'yyvsp' is used uninitialized in this function [-Wuninitialized] *++yyvsp = yylval; ~~~~~~~~~^~~~~~~~ $ ./xgcc -B. -c /tmp/test.c -save-temps $ ./xgcc -B. -c test.i -Wall (compiles with no warnings)