analyzer: fix hashing of bit_range_region::key_t [PR104452]
gcc/analyzer/ChangeLog: PR analyzer/104452 * region-model.cc (selftest::test_bit_range_regions): New. (selftest::analyzer_region_model_cc_tests): Call it. * region.h (bit_range_region::key_t::hash): Fix hashing of m_bits to avoid using uninitialized data. gcc/testsuite/ChangeLog: PR analyzer/104452 * gcc.dg/analyzer/pr104452.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
This commit is contained in:
parent
53cac72cf0
commit
391512ade5
3 changed files with 30 additions and 1 deletions
|
@ -4710,6 +4710,23 @@ test_descendent_of_p ()
|
|||
ASSERT_TRUE (cast_reg->descendent_of_p (x_reg));
|
||||
}
|
||||
|
||||
/* Verify that bit_range_region works as expected. */
|
||||
|
||||
static void
|
||||
test_bit_range_regions ()
|
||||
{
|
||||
tree x = build_global_decl ("x", integer_type_node);
|
||||
region_model_manager mgr;
|
||||
const region *x_reg = mgr.get_region_for_global (x);
|
||||
const region *byte0
|
||||
= mgr.get_bit_range (x_reg, char_type_node, bit_range (0, 8));
|
||||
const region *byte1
|
||||
= mgr.get_bit_range (x_reg, char_type_node, bit_range (8, 8));
|
||||
ASSERT_TRUE (byte0->descendent_of_p (x_reg));
|
||||
ASSERT_TRUE (byte1->descendent_of_p (x_reg));
|
||||
ASSERT_NE (byte0, byte1);
|
||||
}
|
||||
|
||||
/* Verify that simple assignments work as expected. */
|
||||
|
||||
static void
|
||||
|
@ -6009,6 +6026,7 @@ analyzer_region_model_cc_tests ()
|
|||
test_binop_svalue_folding ();
|
||||
test_sub_svalue_folding ();
|
||||
test_descendent_of_p ();
|
||||
test_bit_range_regions ();
|
||||
test_assignment ();
|
||||
test_compound_assignment ();
|
||||
test_stack_frames ();
|
||||
|
|
|
@ -1156,7 +1156,8 @@ public:
|
|||
inchash::hash hstate;
|
||||
hstate.add_ptr (m_parent);
|
||||
hstate.add_ptr (m_type);
|
||||
hstate.add (&m_bits, sizeof (m_bits));
|
||||
hstate.add_wide_int (m_bits.m_start_bit_offset);
|
||||
hstate.add_wide_int (m_bits.m_size_in_bits);
|
||||
return hstate.end ();
|
||||
}
|
||||
|
||||
|
|
10
gcc/testsuite/gcc.dg/analyzer/pr104452.c
Normal file
10
gcc/testsuite/gcc.dg/analyzer/pr104452.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-additional-options "-O" } */
|
||||
|
||||
void
|
||||
test_1 (void)
|
||||
{
|
||||
int __attribute__((__vector_size__ (16))) x;
|
||||
for (unsigned i = 0; i < 4;)
|
||||
if (x[i]) /* { dg-warning "use of uninitialized value" } */
|
||||
__builtin_abort ();
|
||||
}
|
Loading…
Add table
Reference in a new issue