This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/69558] [6/7/8/9 Regression] glib2 warning pragmas stopped working


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69558

Bernd Edlinger <bernd.edlinger at hotmail dot de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bernd.edlinger at hotmail dot de

--- Comment #24 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
(In reply to Jakub Jelinek from comment #4)
> Reverting one minor part of those changes fixes both of the PRs though:
> --- 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
> @@ -819,7 +819,7 @@ handle_pragma_diagnostic(cpp_reader *ARG
>      arg = option_string + 1 + cl_options[option_index].opt_len;
>    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);
>  }
> I have no idea why, but if it doesn't break anything else, I think it would
> be better to revert it.  The ChangeLog nor gcc-patches post doesn't mention
> that change anywhere.

FYI, I was there as well, and found the following.
loc points to the location of ")" in "C (foo)",
while input_location points to "C" in the C FE and to ")" in the C++ FE :-)

The reason why this does still not work in C++ is, that
the source code is sorted by location in this way:
"void foo (void) _Pragma ("GCC diagnostic push")
 Pragma ("GCC diagnostic ignored")"

at the time when the warning is issued.
while your patch fixed the C FE, by using the location of the macro expansion
pint for the _Pragma,
and therefore the stack looked again way:
"_Pragma ("push") _Pragma ("ignored") void foo (void)"
This works only because the warning is printed immediately.
For late warnings the situation would look like
"_Pragma ("push") _Pragma ("ignored") _Pragma ("pop") warning_location"

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]