On 6/13/22 05:15, Richard Biener wrote:
On Fri, Jun 10, 2022 at 12:58 PM Eric Botcazou via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
Hi,
gimple_set_location is mostly invoked on newly built GIMPLE statements, so
their location is UNKNOWN_LOCATION and setting it will clobber the warning
data of the passed location, if any.
Hmm, I think instead of special-casing UNKNOWN_LOCATION
what gimple_set_location should probably do is either not copy
warnings at all or union them. Btw, gimple_set_location also
removes a previously set BLOCK (but gimple_set_block preserves
the location locus and diagnostic override).
So I'd be tempted to axe the copy_warning () completely here. Martin,
there were
probably cases that warranted it - do you remember anything specific here?
Nothing specific, just that the assumption behind the warning group
design was that a location must exist in order to suppress a warning
(a location is one of the first things that's set early on by the FE
and it makes little sense to issue a warning without one).
There was and in all likelihood still is code sets TREE_NO_WARNING
or gimple_no_warning on new trees/statements before setting their
location. That interferes with the design when the new tree or
statement is meant to be a replacement of another. I fixed a few
cases like that to set the location first but didn't have a way
of finding all such instances. My expectation was to over time
change GCC to make sure a location would always be set before
the no-warning bit, and asserting that on every call to these
routines. Adding tests like in the patch below goes in the opposite
direction and effectively papers over the problem. I can't think
of a way to make the suppression work completely reliably without
ensuring that a location is always set before suppressing
a warning.
Martin
Thanks,
Richard.
Tested on x86-64/Linux, OK for mainline and 12 branch?
2022-06-10 Eric Botcazou <ebotca...@adacore.com>
* gimple.h (gimple_set_location): Do not copy warning data from
the previous location when it is UNKNOWN_LOCATION.
2022-06-10 Eric Botcazou <ebotca...@adacore.com>
testsuite/
* c-c++-common/nonnull-1.c: Remove XFAIL for C++.
--
Eric Botcazou