]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c: Add some checking asserts to named loops handling code
authorJakub Jelinek <jakub@redhat.com>
Wed, 16 Oct 2024 15:46:06 +0000 (17:46 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 16 Oct 2024 15:46:06 +0000 (17:46 +0200)
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.

gcc/c/c-decl.cc

index 888966cb7109dbed2bf6b6fb3917f289de89d938..1827bbf06465db62d9f4af66fa2be13bb3bfa6c9 100644 (file)
@@ -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)));
        }