re PR c/69558 (glib2 warning pragmas stopped working)
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Wed, 18 Jul 2018 19:36:01 +0000 (19:36 +0000)
committerBernd Edlinger <edlinger@gcc.gnu.org>
Wed, 18 Jul 2018 19:36:01 +0000 (19:36 +0000)
libcpp:
2018-07-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR 69558
        * macro.c (enter_macro_context): Change the location info for builtin
        macros and _Pragma from location of the closing parenthesis to location
        of the macro expansion point.

testsuite:
2018-07-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR 69558
        * c-c++-common/cpp/diagnostic-pragma-2.c: New test.
        * c-c++-common/pr69558.c: Remove xfail.
        * gcc.dg/cpp/builtin-macro-1.c: Adjust test expectations.
        * gcc.dg/pr61817-1.c: Likewise.
        * gcc.dg/pr61817-2.c: Likewise.
        * g++.dg/plugin/pragma_plugin.c: Warn at expansion_point_location.

From-SVN: r262861

gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-2.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr69558.c
gcc/testsuite/g++.dg/plugin/pragma_plugin.c
gcc/testsuite/gcc.dg/cpp/builtin-macro-1.c
gcc/testsuite/gcc.dg/pr61817-1.c
gcc/testsuite/gcc.dg/pr61817-2.c
libcpp/ChangeLog
libcpp/macro.c

index 95c58fb12f27c652ba8278c689d8ff2ab65d6e36..37354f3724dafe69b1ef0278563d43abbb9bb418 100644 (file)
@@ -1,3 +1,13 @@
+2018-07-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       PR 69558
+       * c-c++-common/cpp/diagnostic-pragma-2.c: New test.
+       * c-c++-common/pr69558.c: Remove xfail.
+       * gcc.dg/cpp/builtin-macro-1.c: Adjust test expectations.
+       * gcc.dg/pr61817-1.c: Likewise.
+       * gcc.dg/pr61817-2.c: Likewise.
+       * g++.dg/plugin/pragma_plugin.c: Warn at expansion_point_location.
+
 2018-07-18  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/85599
diff --git a/gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-2.c b/gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-2.c
new file mode 100644 (file)
index 0000000..1163bbe
--- /dev/null
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+
+#define B _Pragma("GCC diagnostic push") \
+         _Pragma("GCC diagnostic ignored \"-Wattributes\"")
+#define E _Pragma("GCC diagnostic pop")
+
+#define X() B int __attribute((unknown_attr)) x; E /* { dg-bogus "attribute directive ignored" } */
+#define Y   B int __attribute((unknown_attr)) y; E /* { dg-bogus "attribute directive ignored" } */
+
+void test1(void)
+{
+    X()  /* { dg-bogus "in expansion of macro" } */
+    Y    /* { dg-bogus "in expansion of macro" } */
+}
index 4c6d498351c3223d39e2f5f7dc77d429e4e44452..a930653111751a1c4cdd0250453aa224d0cc0feb 100644 (file)
@@ -11,9 +11,9 @@
   _Pragma ("GCC diagnostic pop")
 #define C(x) \
   A \
-  static inline void bar (void) { x (); } /* { dg-bogus "in definition of|deprecated" "" { xfail { c++ } } } */ \
+  static inline void bar (void) { x (); } /* { dg-bogus "in definition of|deprecated" "" } */ \
   B
 
-__attribute__((deprecated)) void foo (void); /* { dg-bogus "declared here" "" { xfail { c++ } } } */
+__attribute__((deprecated)) void foo (void); /* { dg-bogus "declared here" "" } */
 
 C (foo) /* { dg-bogus "is deprecated" } */
index 6f4739868d3fff4fb63641366c92861b0d6e9a8b..d72842f799a1f9e25e39c5e5cb6519f96407fdbe 100644 (file)
@@ -33,14 +33,15 @@ handle_pragma_sayhello (cpp_reader *dummy)
     }
   if (TREE_STRING_LENGTH (message) > 1)
     {
+      location_t loc = expansion_point_location (input_location);
       if (cfun)
-        warning (OPT_Wpragmas, 
-               "%<pragma GCCPLUGIN sayhello%> from function %qE: %s",
-               cfun->decl, TREE_STRING_POINTER (message));
+       warning_at (loc, OPT_Wpragmas, 
+                   "%<pragma GCCPLUGIN sayhello%> from function %qE: %s",
+                   cfun->decl, TREE_STRING_POINTER (message));
       else
-        warning (OPT_Wpragmas, 
-                "%<pragma GCCPLUGIN sayhello%> outside of function: %s",
-                TREE_STRING_POINTER (message));
+       warning_at (loc, OPT_Wpragmas, 
+                   "%<pragma GCCPLUGIN sayhello%> outside of function: %s",
+                   TREE_STRING_POINTER (message));
     }
 }
 
index 90c2883b4711aba63d5a23704f11a8b7669fbd25..0f950038d1bd52dfbc24b8b9369507c2adcbc97f 100644 (file)
@@ -1,8 +1,8 @@
 /* Origin PR preprocessor/64803
 
    This test ensures that the value the __LINE__ macro expands to is
-   constant and corresponds to the line of the closing parenthesis of
-   the top-most function-like macro expansion it's part of.
+   constant and corresponds to the line of the macro expansion point
+   the function-like macro expansion it's part of.
 
    { dg-do run }
    { do-options -no-integrated-cpp }  */
@@ -19,8 +19,8 @@ main()
   M(a
     );
 
-  assert(L20 == 20);           /* 20 is the line number of the
-                                  closing parenthesis of the
+  assert(L19 == 19);           /* 19 is the line number of the
+                                  macro expansion point of the
                                   invocation of the M macro.  Please
                                   adjust in case the layout of this
                                   file changes.  */
index 4230485e635e16c1bdf2ae467e7b12c82f634f18..d58497fa89e07b6d142214ee3a5a87ba30614eec 100644 (file)
@@ -14,6 +14,6 @@ enum {
       )
 };
 
-A(a == 15);
-A(b == 15);
-A(c == 15);
+A(a == 10);
+A(b == 10);
+A(c == 10);
index e4326b81f26e3abe4300f3b01083bcc051b2d847..b7a860bd7dbefb0900b47b25442e1a7a26f095be 100644 (file)
@@ -14,6 +14,6 @@ enum {
       )
 };
 
-A(a == 15);
-A(b == 15);
-A(c == 15);
+A(a == 10);
+A(b == 10);
+A(c == 14);
index 3fef9c957cf2cdbdc2260ee849db7938676341cb..c57d546e608c3c513b95602d0a7cf3bc906e949d 100644 (file)
@@ -1,3 +1,10 @@
+2018-07-18  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       PR 69558
+       * macro.c (enter_macro_context): Change the location info for builtin
+       macros and _Pragma from location of the closing parenthesis to location
+       of the macro expansion point.
+
 2018-07-17  Jason Franklin  <j_fra@fastmail.us>
            Jakub Jelinek  <jakub@redhat.com>
 
index 776af7bd00eae4f0571f61c36ceaa1a276c256d3..683f918145cd357d937b1c104bb3dcdbb1d560c9 100644 (file)
@@ -1410,29 +1410,25 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
   pfile->about_to_expand_macro_p = false;
   /* Handle built-in macros and the _Pragma operator.  */
   {
-    source_location loc, expand_loc;
+    source_location expand_loc;
 
     if (/* The top-level macro invocation that triggered the expansion
-          we are looking at is with a standard macro ...*/
+          we are looking at is with a standard macro ...  */
        !(pfile->top_most_macro_node->flags & NODE_BUILTIN)
-       /* ... and it's a function-like macro invocation.  */
-       && pfile->top_most_macro_node->value.macro->fun_like)
-      {
-       /* Then the location of the end of the macro invocation is the
-          location of the closing parenthesis.  */
-       loc = pfile->cur_token[-1].src_loc;
-       expand_loc = loc;
-      }
+       /* ... and it's a function-like macro invocation,  */
+       && pfile->top_most_macro_node->value.macro->fun_like
+       /* ... and we are tracking the macro expansion.  */
+       && CPP_OPTION (pfile, track_macro_expansion))
+      /* Then the location of the end of the macro invocation is the
+        location of the expansion point of this macro.  */
+      expand_loc = location;
     else
-      {
-       /* Otherwise, the location of the end of the macro invocation is
-          the location of the expansion point of that top-level macro
-          invocation.  */
-       loc = location;
-       expand_loc = pfile->invocation_location;
-      }
+      /* Otherwise, the location of the end of the macro invocation is
+        the location of the expansion point of that top-level macro
+        invocation.  */
+      expand_loc = pfile->invocation_location;
 
-    return builtin_macro (pfile, node, loc, expand_loc);
+    return builtin_macro (pfile, node, location, expand_loc);
   }
 }