]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR preprocessor/69543 (_Pragma does not apply within macro)
authorJakub Jelinek <jakub@redhat.com>
Mon, 1 Feb 2016 22:36:07 +0000 (23:36 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 1 Feb 2016 22:36:07 +0000 (23:36 +0100)
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.

From-SVN: r233058

gcc/c-family/ChangeLog
gcc/c-family/c-pragma.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr69543.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr69558.c [new file with mode: 0644]

index 5bd7d3ba691afc19f4ce6e2d83113fe37dac36d5..abe970193ffef4649290e5510824998f21156a39 100644 (file)
@@ -1,3 +1,10 @@
+2016-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/69543
+       PR c/69558
+       * c-pragma.c (handle_pragma_diagnostic): Pass input_location
+       instead of loc to control_warning_option.
+
 2016-02-01  Nathan Sidwell  <nathan@codesourcery.com>
 
        * c.opt (fopenacc-dim=): New option.
index 4e72f65581c1f49c17e88d0e12841260e27ae16b..38aabc0ddcc41c0e55d09745b8c0ad52ade9640b 100644 (file)
@@ -817,9 +817,12 @@ handle_pragma_diagnostic(cpp_reader *ARG_UNUSED(dummy))
   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);
 }
index e356e6e65f41e6f4719340f2bba365cb7d6fed09..73b0ce8e55e099568010c5daaa25567b1f9f59cb 100644 (file)
@@ -1,3 +1,10 @@
+2016-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/69543
+       PR c/69558
+       * gcc.dg/pr69543.c: New test.
+       * gcc.dg/pr69558.c: New test.
+
 2016-02-01  Uros Bizjak  <ubizjak@gmail.com>
 
        PR testsuite/65940
diff --git a/gcc/testsuite/gcc.dg/pr69543.c b/gcc/testsuite/gcc.dg/pr69543.c
new file mode 100644 (file)
index 0000000..0bb5da0
--- /dev/null
@@ -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
+}
diff --git a/gcc/testsuite/gcc.dg/pr69558.c b/gcc/testsuite/gcc.dg/pr69558.c
new file mode 100644 (file)
index 0000000..3be8cf9
--- /dev/null
@@ -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" } */