diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-02-01 23:36:07 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-02-01 23:36:07 +0100 |
commit | e1b81f2ba000a61a3d845f0d3bb038b62d43673f (patch) | |
tree | 4804a0cc9d344020d642b070a4d01995e66ec630 | |
parent | bf672ee50f33f845c71a456984b9faf10e86b407 (diff) | |
download | gcc-e1b81f2ba000a61a3d845f0d3bb038b62d43673f.zip gcc-e1b81f2ba000a61a3d845f0d3bb038b62d43673f.tar.gz gcc-e1b81f2ba000a61a3d845f0d3bb038b62d43673f.tar.bz2 |
re PR preprocessor/69543 (_Pragma does not apply within macro)
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
-rw-r--r-- | gcc/c-family/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-family/c-pragma.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr69543.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr69558.c | 17 |
5 files changed, 53 insertions, 1 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 5bd7d3b..abe9701 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -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. diff --git a/gcc/c-family/c-pragma.c b/gcc/c-family/c-pragma.c index 4e72f65..38aabc0 100644 --- a/gcc/c-family/c-pragma.c +++ b/gcc/c-family/c-pragma.c @@ -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); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e356e6e..73b0ce8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..0bb5da0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69543.c @@ -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 index 0000000..3be8cf9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69558.c @@ -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" } */ |