diff options
author | Evan Brown <ezb@google.com> | 2023-01-05 12:05:45 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2023-01-05 22:48:50 -0800 |
commit | 05109783621601b680cf33217edde6a8e484327b (patch) | |
tree | a47bdff5f7a9adf8ac906fb851c84aca02104bef /absl/container/internal/raw_hash_set_test.cc | |
parent | 797f265d3dd464f1ebb6d43c9671596fc4208cf3 (diff) | |
download | abseil-05109783621601b680cf33217edde6a8e484327b.tar.gz abseil-05109783621601b680cf33217edde6a8e484327b.tar.bz2 abseil-05109783621601b680cf33217edde6a8e484327b.zip |
In sanitizer mode, detect when invalidated iterators are compared.
PiperOrigin-RevId: 499964205
Change-Id: I45a1d62a5e093921946e7c3c7ab31480252b330e
Diffstat (limited to 'absl/container/internal/raw_hash_set_test.cc')
-rw-r--r-- | absl/container/internal/raw_hash_set_test.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/absl/container/internal/raw_hash_set_test.cc b/absl/container/internal/raw_hash_set_test.cc index 8096567c..801b758e 100644 --- a/absl/container/internal/raw_hash_set_test.cc +++ b/absl/container/internal/raw_hash_set_test.cc @@ -1819,7 +1819,6 @@ TEST(Table, HeterogeneousLookupOverloads) { EXPECT_TRUE((VerifyResultOf<CallCount, TransparentTable>())); } -// TODO(alkis): Expand iterator tests. TEST(Iterator, IsDefaultConstructible) { StringTable::iterator i; EXPECT_TRUE(i == StringTable::iterator()); @@ -2249,7 +2248,8 @@ TEST(Table, AlignOne) { // Invalid iterator use can trigger heap-use-after-free in asan, // use-of-uninitialized-value in msan, or invalidated iterator assertions. constexpr const char* kInvalidIteratorDeathMessage = - "heap-use-after-free|use-of-uninitialized-value|invalidated iterator"; + "heap-use-after-free|use-of-uninitialized-value|invalidated " + "iterator|Invalid iterator"; #if defined(__clang__) && defined(_MSC_VER) constexpr bool kLexan = true; @@ -2257,7 +2257,7 @@ constexpr bool kLexan = true; constexpr bool kLexan = false; #endif -TEST(Table, InvalidIteratorUse) { +TEST(Iterator, InvalidUseCrashesWithSanitizers) { if (!SwisstableGenerationsEnabled()) GTEST_SKIP() << "Generations disabled."; if (kLexan) GTEST_SKIP() << "Lexan doesn't support | in regexp."; @@ -2268,10 +2268,12 @@ TEST(Table, InvalidIteratorUse) { auto it = t.begin(); t.insert(i); EXPECT_DEATH_IF_SUPPORTED(*it, kInvalidIteratorDeathMessage); + EXPECT_DEATH_IF_SUPPORTED(void(it == t.begin()), + kInvalidIteratorDeathMessage); } } -TEST(Table, InvalidIteratorUseWithReserve) { +TEST(Iterator, InvalidUseWithReserveCrashesWithSanitizers) { if (!SwisstableGenerationsEnabled()) GTEST_SKIP() << "Generations disabled."; if (kLexan) GTEST_SKIP() << "Lexan doesn't support | in regexp."; @@ -2290,6 +2292,8 @@ TEST(Table, InvalidIteratorUseWithReserve) { // Unreserved growth can rehash. t.insert(10); EXPECT_DEATH_IF_SUPPORTED(*it, kInvalidIteratorDeathMessage); + EXPECT_DEATH_IF_SUPPORTED(void(it == t.begin()), + kInvalidIteratorDeathMessage); } TEST(Table, ReservedGrowthUpdatesWhenTableDoesntGrow) { |