aboutsummaryrefslogtreecommitdiff
path: root/gcc/hash-map-tests.c
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2019-12-09 20:54:11 +0000
committerMartin Sebor <msebor@gcc.gnu.org>2019-12-09 13:54:11 -0700
commit49070d06708a8d8ae3af767f89ac40c4c12dca7b (patch)
treea61f278fe57a15598a51858bffa5b56ac45978df /gcc/hash-map-tests.c
parentca6932ad0ccbbbe3c788cd71595d9a25b8ae0d20 (diff)
downloadgcc-49070d06708a8d8ae3af767f89ac40c4c12dca7b.zip
gcc-49070d06708a8d8ae3af767f89ac40c4c12dca7b.tar.gz
gcc-49070d06708a8d8ae3af767f89ac40c4c12dca7b.tar.bz2
PR middle-end/92761 - hash_table::expand invokes assignment on invalid objects
PR middle-end/92761 - hash_table::expand invokes assignment on invalid objects PR middle-end/92762 - hash_table::empty_slow invokes assignment on invalid objects gcc/ChangeLog: PR middle-end/92761 PR middle-end/92762 * hash-map-tests.c (test_map_of_type_with_ctor_and_dtor): Tighten up tests. * hash-table.h (hash_table::expand): Use placement new to copy construct objects in uninitialized storage. (hash_table::empty_slow): Avoid invoking copy assignment on uninitialized objects. From-SVN: r279139
Diffstat (limited to 'gcc/hash-map-tests.c')
-rw-r--r--gcc/hash-map-tests.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/gcc/hash-map-tests.c b/gcc/hash-map-tests.c
index f3b216b..a42eac2 100644
--- a/gcc/hash-map-tests.c
+++ b/gcc/hash-map-tests.c
@@ -117,23 +117,26 @@ public:
++ndefault;
}
- hash_map_test_val_t (const hash_map_test_val_t &)
+ hash_map_test_val_t (const hash_map_test_val_t &rhs)
: ptr (&ptr)
{
++ncopy;
+ gcc_assert (rhs.ptr == &rhs.ptr);
}
- hash_map_test_val_t& operator= (const hash_map_test_val_t &)
- {
- ++nassign;
- return *this;
- }
+ hash_map_test_val_t& operator= (const hash_map_test_val_t &rhs)
+ {
+ ++nassign;
+ gcc_assert (ptr == &ptr);
+ gcc_assert (rhs.ptr == &rhs.ptr);
+ return *this;
+ }
~hash_map_test_val_t ()
- {
- gcc_assert (ptr == &ptr);
- ++ndtor;
- }
+ {
+ gcc_assert (ptr == &ptr);
+ ++ndtor;
+ }
void *ptr;
} val_t;
@@ -184,7 +187,6 @@ test_map_of_type_with_ctor_and_dtor ()
ASSERT_TRUE (nassign == val_t::nassign);
ASSERT_TRUE (&rv1 != pv2);
- ASSERT_TRUE (pv2->ptr == &pv2->ptr);
}
ASSERT_TRUE (val_t::ndefault + val_t::ncopy == val_t::ndtor);
@@ -207,7 +209,6 @@ test_map_of_type_with_ctor_and_dtor ()
ASSERT_TRUE (nassign + 1 == val_t::nassign);
ASSERT_TRUE (&rv1 != pv2);
- ASSERT_TRUE (pv2->ptr == &pv2->ptr);
}
ASSERT_TRUE (val_t::ndefault + val_t::ncopy == val_t::ndtor);