]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUILD: cebtree: silence a bogus gcc warning on impossible code paths
authorWilly Tarreau <w@1wt.eu>
Tue, 17 Sep 2024 15:27:44 +0000 (17:27 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 18 Sep 2024 15:42:52 +0000 (17:42 +0200)
commit8df44eea6dd1203218936fec7b571ab04b16ce91
tree00ec7a41e67c3dc48e325ca25f36f8ac30e559da
parentfcd6d29acf108c55e1e1c17c04aeae621327adff
BUILD: cebtree: silence a bogus gcc warning on impossible code paths

gcc-12 and above report a wrong warning about a negative length being
passed to memcmp() on an impossible code path when built at -O0. The
pattern is the same at a few places, basically:

  int foo(int op, const void *a, const void *b, size_t size, size_t arg)
  {
      if (op == 1) // arg is a strict multiple of size
          return memcmp(a, b, arg - size);
      return 0;
  }
  ...
  int bar()
  {
     return foo(0, a, b, sizeof(something), 0);
  }

It *might* be possible to invent dummy values for the "len" argument
above in the real code, but that significantly complexifies it and as
usual can easily result in introducing undesired bugs.

Here we take a different approach consisting in shutting the
-Wstringop-overread warning on gcc>=12 at -O0 since that's the only
condition that triggers it. The issue was reported to and confirmed by
the gcc team here:  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114622

No backport needed, but this should be upstreamed into cebtree after
checking that all involved macros are available.
include/import/cebtree-prv.h