diff options
author | Jakub Jelinek <jakub@redhat.com> | 2024-10-16 17:46:06 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2024-10-16 17:46:06 +0200 |
commit | 6756250fcbed4a214c30de94e4ec68ea130528d5 (patch) | |
tree | 9fa6ae4f2558f5c6e52f127b2ae3dccfd8cc2994 /gcc | |
parent | f5224caf53a4f17b190497c00c505977d358bef9 (diff) | |
download | gcc-6756250fcbed4a214c30de94e4ec68ea130528d5.zip gcc-6756250fcbed4a214c30de94e4ec68ea130528d5.tar.gz gcc-6756250fcbed4a214c30de94e4ec68ea130528d5.tar.bz2 |
c: Add some checking asserts to named loops handling code
Jonathan mentioned an unnamed static analyzer reported issue in
c_finish_bc_name.
It is actually a false positive, because the construction of the
loop_names vector guarantees that the last element of the vector
(if the vector is non-empty) always has either
C_DECL_LOOP_NAME (l) or C_DECL_SWITCH_NAME (l) (or both) flags
set, so c will be always non-NULL after the if at the start of the
loops.
The following patch is an attempt to help those static analyzers
(though dunno if it actually helps), by adding a checking assert.
2024-10-16 Jakub Jelinek <jakub@redhat.com>
* c-decl.cc (c_get_loop_names): Add checking assert that
c is non-NULL in the loop.
(c_finish_bc_name): Likewise.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c/c-decl.cc | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 888966c..1827bbf 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -13881,6 +13881,7 @@ c_get_loop_names (tree before_labels, bool switch_p, tree *last_p) { if (C_DECL_LOOP_NAME (l) || C_DECL_SWITCH_NAME (l)) c = l; + gcc_checking_assert (c); loop_names_hash->put (l, c); if (i == first) break; @@ -13952,6 +13953,7 @@ c_finish_bc_name (location_t loc, tree name, bool is_break) { if (C_DECL_LOOP_NAME (l) || C_DECL_SWITCH_NAME (l)) c = l; + gcc_checking_assert (c); if (l == lab) { label = c; @@ -13970,6 +13972,7 @@ c_finish_bc_name (location_t loc, tree name, bool is_break) { if (C_DECL_LOOP_NAME (l) || C_DECL_SWITCH_NAME (l)) c = l; + gcc_checking_assert (c); if (is_break || C_DECL_LOOP_NAME (c)) candidates.safe_push (IDENTIFIER_POINTER (DECL_NAME (l))); } |