]> git.ipfire.org Git - thirdparty/gcc.git/commit
analyzer: fix defaults in compound assignments from non-zero offsets [PR112969]
authorDavid Malcolm <dmalcolm@redhat.com>
Thu, 25 Jan 2024 15:06:12 +0000 (10:06 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Thu, 25 Jan 2024 15:06:12 +0000 (10:06 -0500)
commit6426d466779fa889bca170e3ff80dbfc6ea8c2e8
tree8485d8299a610e4982e91507701e574718f48a28
parent4ffcceef8137b7151ad1e779e38e4b6a3bdcaea8
analyzer: fix defaults in compound assignments from non-zero offsets [PR112969]

Confusion in binding_cluster::maybe_get_compound_binding about whether
offsets are relative to the start of the region or to the start of the
cluster was leading to incorrect handling of default values, leading
to false positives from -Wanalyzer-use-of-uninitialized-value, from
-Wanalyzer-exposure-through-uninit-copy, and other logic errors.

Fixed thusly.

gcc/analyzer/ChangeLog:
PR analyzer/112969
* store.cc (binding_cluster::maybe_get_compound_binding): When
populating default_map, express the bit-range of the default key
for REG relative to REG, rather than to the base region.

gcc/testsuite/ChangeLog:
PR analyzer/112969
* c-c++-common/analyzer/compound-assignment-5.c (test_3): Remove
xfails, reorder tests.
* c-c++-common/analyzer/compound-assignment-pr112969.c: New test.
* gcc.dg/plugin/infoleak-pr112969.c: New test.
* gcc.dg/plugin/plugin.exp: Add infoleak-pr112969.c to
analyzer_kernel_plugin.c tests.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
gcc/analyzer/store.cc
gcc/testsuite/c-c++-common/analyzer/compound-assignment-5.c
gcc/testsuite/c-c++-common/analyzer/compound-assignment-pr112969.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/plugin/infoleak-pr112969.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/plugin/plugin.exp