From 6f41f92bebfb0b5eb3a3859b1c3bb7710d1cb48b Mon Sep 17 00:00:00 2001 From: Bernd Edlinger Date: Wed, 18 Jul 2018 19:36:01 +0000 Subject: [PATCH] re PR c/69558 (glib2 warning pragmas stopped working) libcpp: 2018-07-18 Bernd Edlinger 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 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 | 10 ++++++ .../c-c++-common/cpp/diagnostic-pragma-2.c | 14 ++++++++ gcc/testsuite/c-c++-common/pr69558.c | 4 +-- gcc/testsuite/g++.dg/plugin/pragma_plugin.c | 13 ++++---- gcc/testsuite/gcc.dg/cpp/builtin-macro-1.c | 8 ++--- gcc/testsuite/gcc.dg/pr61817-1.c | 6 ++-- gcc/testsuite/gcc.dg/pr61817-2.c | 6 ++-- libcpp/ChangeLog | 7 ++++ libcpp/macro.c | 32 ++++++++----------- 9 files changed, 64 insertions(+), 36 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-2.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 95c58fb12f2..37354f3724d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2018-07-18 Bernd Edlinger + + 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 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 index 00000000000..1163bbee1bf --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/diagnostic-pragma-2.c @@ -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" } */ +} diff --git a/gcc/testsuite/c-c++-common/pr69558.c b/gcc/testsuite/c-c++-common/pr69558.c index 4c6d498351c..a9306531117 100644 --- a/gcc/testsuite/c-c++-common/pr69558.c +++ b/gcc/testsuite/c-c++-common/pr69558.c @@ -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" } */ diff --git a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c index 6f4739868d3..d72842f799a 100644 --- a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c +++ b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c @@ -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, - "% from function %qE: %s", - cfun->decl, TREE_STRING_POINTER (message)); + warning_at (loc, OPT_Wpragmas, + "% from function %qE: %s", + cfun->decl, TREE_STRING_POINTER (message)); else - warning (OPT_Wpragmas, - "% outside of function: %s", - TREE_STRING_POINTER (message)); + warning_at (loc, OPT_Wpragmas, + "% outside of function: %s", + TREE_STRING_POINTER (message)); } } diff --git a/gcc/testsuite/gcc.dg/cpp/builtin-macro-1.c b/gcc/testsuite/gcc.dg/cpp/builtin-macro-1.c index 90c2883b471..0f950038d1b 100644 --- a/gcc/testsuite/gcc.dg/cpp/builtin-macro-1.c +++ b/gcc/testsuite/gcc.dg/cpp/builtin-macro-1.c @@ -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. */ diff --git a/gcc/testsuite/gcc.dg/pr61817-1.c b/gcc/testsuite/gcc.dg/pr61817-1.c index 4230485e635..d58497fa89e 100644 --- a/gcc/testsuite/gcc.dg/pr61817-1.c +++ b/gcc/testsuite/gcc.dg/pr61817-1.c @@ -14,6 +14,6 @@ enum { ) }; -A(a == 15); -A(b == 15); -A(c == 15); +A(a == 10); +A(b == 10); +A(c == 10); diff --git a/gcc/testsuite/gcc.dg/pr61817-2.c b/gcc/testsuite/gcc.dg/pr61817-2.c index e4326b81f26..b7a860bd7db 100644 --- a/gcc/testsuite/gcc.dg/pr61817-2.c +++ b/gcc/testsuite/gcc.dg/pr61817-2.c @@ -14,6 +14,6 @@ enum { ) }; -A(a == 15); -A(b == 15); -A(c == 15); +A(a == 10); +A(b == 10); +A(c == 14); diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 3fef9c957cf..c57d546e608 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,10 @@ +2018-07-18 Bernd Edlinger + + 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 Jakub Jelinek diff --git a/libcpp/macro.c b/libcpp/macro.c index 776af7bd00e..683f918145c 100644 --- a/libcpp/macro.c +++ b/libcpp/macro.c @@ -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); } } -- 2.30.2