This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/69558] [6/7/8/9 Regression] glib2 warning pragmas stopped working
- From: "bernd.edlinger at hotmail dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 04 Jul 2018 16:54:15 +0000
- Subject: [Bug c/69558] [6/7/8/9 Regression] glib2 warning pragmas stopped working
- Auto-submitted: auto-generated
- References: <bug-69558-4@http.gcc.gnu.org/bugzilla/>
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"