Hi!

This patch reverts one tiny change from r228049 changes (which hasn't been
mentioned in the ChangeLog or patch description).  We definitely need to
revisit this for GCC 7, but stage4 is probably not the right time for that,
and the patch fixes e.g. tons of warnings (or with -Werror errors on
including pretty much all glib2 headers).

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2016-01-29  Jakub Jelinek  <ja...@redhat.com>

        PR preprocessor/69543
        PR c/69558
        * c-pragma.c (handle_pragma_diagnostic): Pass input_location
        instead of loc to control_warning_option.

        * gcc.dg/pr69543.c: New test.
        * gcc.dg/pr69558.c: New test.

--- gcc/c-family/c-pragma.c.jj  2016-01-15 21:57:00.000000000 +0100
+++ gcc/c-family/c-pragma.c     2016-01-29 18:34:51.743943283 +0100
@@ -817,9 +817,12 @@ handle_pragma_diagnostic(cpp_reader *ARG
   const char *arg = NULL;
   if (cl_options[option_index].flags & CL_JOINED)
     arg = option_string + 1 + cl_options[option_index].opt_len;
+  /* FIXME: input_location isn't the best location here, but it is
+     what we used to do here before and changing it breaks e.g.
+     PR69543 and PR69558.  */
   control_warning_option (option_index, (int) kind,
                          arg, kind != DK_IGNORED,
-                         loc, lang_mask, &handlers,
+                         input_location, lang_mask, &handlers,
                          &global_options, &global_options_set,
                          global_dc);
 }
--- gcc/testsuite/gcc.dg/pr69558.c.jj   2016-01-29 18:43:32.191665058 +0100
+++ gcc/testsuite/gcc.dg/pr69558.c      2016-01-29 18:40:05.000000000 +0100
@@ -0,0 +1,17 @@
+/* PR c/69558 */
+/* { dg-do compile } */
+/* { dg-options "-Wdeprecated-declarations" } */
+
+#define A \
+  _Pragma ("GCC diagnostic push") \
+  _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+#define B \
+  _Pragma ("GCC diagnostic pop")
+#define C(x) \
+  A \
+  static inline void bar (void) { x (); } \
+  B
+
+__attribute__((deprecated)) void foo (void); /* { dg-bogus "declared here" } */
+
+C (foo) /* { dg-bogus "is deprecated" } */
--- gcc/testsuite/gcc.dg/pr69543.c.jj   2016-01-29 18:45:09.520323395 +0100
+++ gcc/testsuite/gcc.dg/pr69543.c      2016-01-29 18:44:56.000000000 +0100
@@ -0,0 +1,18 @@
+/* PR preprocessor/69543 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wuninitialized" } */
+
+# 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
+}

        Jakub

Reply via email to