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


Reply via email to