public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3498] Don't maintain a warning spec for 'UNKNOWN_LOCATION'/'BUILTINS_LOCATION' [PR101574]
@ 2021-09-13 16:40 Thomas Schwinge
0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2021-09-13 16:40 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:6c79057fae6bbb36c4a4fd61c5b7107a16b71b17
commit r12-3498-g6c79057fae6bbb36c4a4fd61c5b7107a16b71b17
Author: Thomas Schwinge <thomas@codesourcery.com>
Date: Mon Aug 30 22:36:47 2021 +0200
Don't maintain a warning spec for 'UNKNOWN_LOCATION'/'BUILTINS_LOCATION' [PR101574]
This resolves PR101574 "gcc/sparseset.h:215:20: error: suggest parentheses
around assignment used as truth value [-Werror=parentheses]", as (bogusly)
reported at commit a61f6afbee370785cf091fe46e2e022748528307:
In file included from [...]/source-gcc/gcc/lra-lives.c:43:
[...]/source-gcc/gcc/lra-lives.c: In function ‘void make_hard_regno_dead(int)’:
[...]/source-gcc/gcc/sparseset.h:215:20: error: suggest parentheses around assignment used as truth value [-Werror=parentheses]
215 | && (((ITER) = sparseset_iter_elm (SPARSESET)) || 1); \
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[...]/source-gcc/gcc/lra-lives.c:304:3: note: in expansion of macro ‘EXECUTE_IF_SET_IN_SPARSESET’
304 | EXECUTE_IF_SET_IN_SPARSESET (pseudos_live, i)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
gcc/
PR bootstrap/101574
* diagnostic-spec.c (warning_suppressed_at, copy_warning): Handle
'RESERVED_LOCATION_P' locations.
* warning-control.cc (get_nowarn_spec, suppress_warning)
(copy_warning): Likewise.
Diff:
---
gcc/diagnostic-spec.c | 22 +++++++++++++++++++---
gcc/warning-control.cc | 48 +++++++++++++++++++++++++++++++-----------------
2 files changed, 50 insertions(+), 20 deletions(-)
diff --git a/gcc/diagnostic-spec.c b/gcc/diagnostic-spec.c
index eac5a3317c8..85ffb725c02 100644
--- a/gcc/diagnostic-spec.c
+++ b/gcc/diagnostic-spec.c
@@ -115,6 +115,8 @@ GTY(()) xint_hash_map_t *nowarn_map;
bool
warning_suppressed_at (location_t loc, opt_code opt /* = all_warnings */)
{
+ gcc_checking_assert (!RESERVED_LOCATION_P (loc));
+
if (!nowarn_map)
return false;
@@ -137,6 +139,8 @@ bool
suppress_warning_at (location_t loc, opt_code opt /* = all_warnings */,
bool supp /* = true */)
{
+ gcc_checking_assert (!RESERVED_LOCATION_P (loc));
+
const nowarn_spec_t optspec (supp ? opt : opt_code ());
if (nowarn_spec_t *pspec = nowarn_map ? nowarn_map->get (loc) : NULL)
@@ -173,8 +177,20 @@ copy_warning (location_t to, location_t from)
if (!nowarn_map)
return;
- if (nowarn_spec_t *pspec = nowarn_map->get (from))
- nowarn_map->put (to, *pspec);
+ nowarn_spec_t *from_spec;
+ if (RESERVED_LOCATION_P (from))
+ from_spec = NULL;
+ else
+ from_spec = nowarn_map->get (from);
+ if (RESERVED_LOCATION_P (to))
+ /* We cannot set no-warning dispositions for 'to', so we have no chance but
+ lose those potentially set for 'from'. */
+ ;
else
- nowarn_map->remove (to);
+ {
+ if (from_spec)
+ nowarn_map->put (to, *from_spec);
+ else
+ nowarn_map->remove (to);
+ }
}
diff --git a/gcc/warning-control.cc b/gcc/warning-control.cc
index 8d6c0828445..36a47ab6bae 100644
--- a/gcc/warning-control.cc
+++ b/gcc/warning-control.cc
@@ -89,7 +89,7 @@ get_nowarn_spec (const_tree expr)
{
const location_t loc = get_location (expr);
- if (loc == UNKNOWN_LOCATION)
+ if (RESERVED_LOCATION_P (loc))
return NULL;
if (!get_no_warning_bit (expr))
@@ -105,6 +105,9 @@ get_nowarn_spec (const gimple *stmt)
{
const location_t loc = get_location (stmt);
+ if (RESERVED_LOCATION_P (loc))
+ return NULL;
+
if (!get_no_warning_bit (stmt))
return NULL;
@@ -158,7 +161,8 @@ suppress_warning (tree expr, opt_code opt /* = all_warnings */,
const location_t loc = get_location (expr);
- supp = suppress_warning_at (loc, opt, supp) || supp;
+ if (!RESERVED_LOCATION_P (loc))
+ supp = suppress_warning_at (loc, opt, supp) || supp;
set_no_warning_bit (expr, supp);
}
@@ -174,7 +178,8 @@ suppress_warning (gimple *stmt, opt_code opt /* = all_warnings */,
const location_t loc = get_location (stmt);
- supp = suppress_warning_at (loc, opt, supp) || supp;
+ if (!RESERVED_LOCATION_P (loc))
+ supp = suppress_warning_at (loc, opt, supp) || supp;
set_no_warning_bit (stmt, supp);
}
@@ -186,24 +191,33 @@ void copy_warning (ToType to, FromType from)
{
const location_t to_loc = get_location (to);
- if (nowarn_spec_t *from_map = get_nowarn_spec (from))
- {
- /* If there's an entry in the map the no-warning bit must be set. */
- gcc_assert (get_no_warning_bit (from));
+ bool supp = get_no_warning_bit (from);
- gcc_checking_assert (nowarn_map);
- nowarn_map->put (to_loc, *from_map);
- set_no_warning_bit (to, true);
- }
+ nowarn_spec_t *from_spec = get_nowarn_spec (from);
+ if (RESERVED_LOCATION_P (to_loc))
+ /* We cannot set no-warning dispositions for 'to', so we have no chance but
+ lose those potentially set for 'from'. */
+ ;
else
{
- if (nowarn_map)
- nowarn_map->remove (to_loc);
-
- /* The no-warning bit might be set even if there's no entry
- in the map. */
- set_no_warning_bit (to, get_no_warning_bit (from));
+ if (from_spec)
+ {
+ /* If there's an entry in the map the no-warning bit must be set. */
+ gcc_assert (supp);
+
+ gcc_checking_assert (nowarn_map);
+ nowarn_map->put (to_loc, *from_spec);
+ }
+ else
+ {
+ if (nowarn_map)
+ nowarn_map->remove (to_loc);
+ }
}
+
+ /* The no-warning bit might be set even if the map has not been consulted, or
+ otherwise if there's no entry in the map. */
+ set_no_warning_bit (to, supp);
}
/* Copy the warning disposition mapping from one expression to another. */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-09-13 16:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-13 16:40 [gcc r12-3498] Don't maintain a warning spec for 'UNKNOWN_LOCATION'/'BUILTINS_LOCATION' [PR101574] Thomas Schwinge
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).