diff options
author | David Malcolm <dmalcolm@redhat.com> | 2021-08-23 14:01:01 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2021-08-23 14:01:01 -0400 |
commit | 4892b3087412e6afc261cc9977ef4b54c799660f (patch) | |
tree | 9c0804943ad79b2480c8b575b71d8bc21161e405 /gcc/analyzer/store.h | |
parent | 38757aa88735ab2e511bc428e2407a5a5e9fa0be (diff) | |
download | gcc-4892b3087412e6afc261cc9977ef4b54c799660f.zip gcc-4892b3087412e6afc261cc9977ef4b54c799660f.tar.gz gcc-4892b3087412e6afc261cc9977ef4b54c799660f.tar.bz2 |
analyzer: fix uninit false positive on overlapping bindings
gcc/analyzer/ChangeLog:
* store.cc (bit_range::intersects_p): New overload.
(bit_range::operator-): New.
(binding_cluster::maybe_get_compound_binding): Handle the partial
overlap case.
(selftest::test_bit_range_intersects_p): Add test coverage for
new overload of bit_range::intersects_p.
* store.h (bit_range::intersects_p): New overload.
(bit_range::operator-): New.
gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/data-model-22.c: New test.
* gcc.dg/analyzer/uninit-6.c: New test.
* gcc.dg/analyzer/uninit-6b.c: New test.
Diffstat (limited to 'gcc/analyzer/store.h')
-rw-r--r-- | gcc/analyzer/store.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/analyzer/store.h b/gcc/analyzer/store.h index b75691e..da82bd1 100644 --- a/gcc/analyzer/store.h +++ b/gcc/analyzer/store.h @@ -269,9 +269,14 @@ struct bit_range return (get_start_bit_offset () < other.get_next_bit_offset () && other.get_start_bit_offset () < get_next_bit_offset ()); } + bool intersects_p (const bit_range &other, + bit_range *out_this, + bit_range *out_other) const; static int cmp (const bit_range &br1, const bit_range &br2); + bit_range operator- (bit_offset_t offset) const; + static bool from_mask (unsigned HOST_WIDE_INT mask, bit_range *out); bool as_byte_range (byte_range *out) const; |