summaryrefslogtreecommitdiff
path: root/absl/container/internal/raw_hash_set_test.cc
diff options
context:
space:
mode:
authorGravatar Evan Brown <ezb@google.com>2023-01-17 10:34:29 -0800
committerGravatar Copybara-Service <copybara-worker@google.com>2023-01-17 10:35:17 -0800
commite1c897f09a3ae4ed76f4c17006eacaadbd8a56f9 (patch)
tree63a7fdb86532943cac31c212f918e8671ffef416 /absl/container/internal/raw_hash_set_test.cc
parent1fb3830b1cf685999bb2bbd0294be0a53c9440a6 (diff)
In sanitizer mode, detect when references become invalidated after reserved growth runs out.
PiperOrigin-RevId: 502625638 Change-Id: I1c06b2162dbdaaa6a36cea503ac6d07cd157b2e2
Diffstat (limited to 'absl/container/internal/raw_hash_set_test.cc')
-rw-r--r--absl/container/internal/raw_hash_set_test.cc9
1 files changed, 8 insertions, 1 deletions
diff --git a/absl/container/internal/raw_hash_set_test.cc b/absl/container/internal/raw_hash_set_test.cc
index 801b758e..3d3b089c 100644
--- a/absl/container/internal/raw_hash_set_test.cc
+++ b/absl/container/internal/raw_hash_set_test.cc
@@ -20,6 +20,7 @@
#include <cstdint>
#include <deque>
#include <functional>
+#include <iostream>
#include <iterator>
#include <list>
#include <map>
@@ -2286,14 +2287,20 @@ TEST(Iterator, InvalidUseWithReserveCrashesWithSanitizers) {
t.insert(i);
EXPECT_EQ(*it, 0);
}
+ // ptr will become invalidated on rehash.
+ const int64_t* ptr = &*it;
+
// erase decreases size but does not decrease reserved growth so the next
// insertion still invalidates iterators.
t.erase(0);
- // Unreserved growth can rehash.
+ // The first insert after reserved growth is 0 is guaranteed to rehash when
+ // generations are enabled.
t.insert(10);
EXPECT_DEATH_IF_SUPPORTED(*it, kInvalidIteratorDeathMessage);
EXPECT_DEATH_IF_SUPPORTED(void(it == t.begin()),
kInvalidIteratorDeathMessage);
+ EXPECT_DEATH_IF_SUPPORTED(std::cout << *ptr,
+ "heap-use-after-free|use-of-uninitialized-value");
}
TEST(Table, ReservedGrowthUpdatesWhenTableDoesntGrow) {