aboutsummaryrefslogtreecommitdiff
path: root/gcc/analyzer/store.h
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2021-08-23 14:01:01 -0400
committerDavid Malcolm <dmalcolm@redhat.com>2021-08-23 14:01:01 -0400
commit4892b3087412e6afc261cc9977ef4b54c799660f (patch)
tree9c0804943ad79b2480c8b575b71d8bc21161e405 /gcc/analyzer/store.h
parent38757aa88735ab2e511bc428e2407a5a5e9fa0be (diff)
downloadgcc-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.h5
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;