From d368d3d64993b27f483a51de3d458b7cbdc2c544 Mon Sep 17 00:00:00 2001 From: Evan Brown Date: Mon, 16 Oct 2023 11:57:00 -0700 Subject: Add iterator invalidation checking for when the hashtable is moved. Motivation: once we enable small object optimization in swisstable, iterators can be invalidated when the table is moved. PiperOrigin-RevId: 573884505 Change-Id: I4278129829143d3747dfd0ef0ff92f321c2633dc --- absl/container/internal/raw_hash_set_test.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'absl/container/internal/raw_hash_set_test.cc') diff --git a/absl/container/internal/raw_hash_set_test.cc b/absl/container/internal/raw_hash_set_test.cc index 61eb6d95..d194ca1b 100644 --- a/absl/container/internal/raw_hash_set_test.cc +++ b/absl/container/internal/raw_hash_set_test.cc @@ -2370,6 +2370,19 @@ TEST(Iterator, InvalidUseWithReserveCrashesWithSanitizers) { #endif } +TEST(Iterator, InvalidUseWithMoveCrashesWithSanitizers) { + if (!SwisstableGenerationsEnabled()) GTEST_SKIP() << "Generations disabled."; + if (kMsvc) GTEST_SKIP() << "MSVC doesn't support | in regexp."; + + IntTable t1, t2; + t1.insert(1); + auto it = t1.begin(); + t2 = std::move(t1); + EXPECT_DEATH_IF_SUPPORTED(*it, kInvalidIteratorDeathMessage); + EXPECT_DEATH_IF_SUPPORTED(void(it == t2.begin()), + kInvalidIteratorDeathMessage); +} + TEST(Table, ReservedGrowthUpdatesWhenTableDoesntGrow) { IntTable t; for (int i = 0; i < 8; ++i) t.insert(i); -- cgit v1.2.3