diff options
author | Evan Brown <ezb@google.com> | 2023-01-17 10:34:29 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2023-01-17 10:35:17 -0800 |
commit | e1c897f09a3ae4ed76f4c17006eacaadbd8a56f9 (patch) | |
tree | 63a7fdb86532943cac31c212f918e8671ffef416 /absl/container/internal/raw_hash_set_test.cc | |
parent | 1fb3830b1cf685999bb2bbd0294be0a53c9440a6 (diff) | |
download | abseil-e1c897f09a3ae4ed76f4c17006eacaadbd8a56f9.tar.gz abseil-e1c897f09a3ae4ed76f4c17006eacaadbd8a56f9.tar.bz2 abseil-e1c897f09a3ae4ed76f4c17006eacaadbd8a56f9.zip |
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.cc | 9 |
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) { |