[llvm] [StringMap] Invalidate iterators on mutation (PR #202237)
Felipe de Azevedo Piovezan via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 10 07:08:41 PDT 2026
================
@@ -472,20 +490,31 @@ template <typename ValueTy, bool IsConst> class StringMapIterBase {
StringMapIterBase() = default;
- explicit StringMapIterBase(StringMapEntryBase **Bucket, bool Advance = false)
- : Ptr(Bucket) {
+ explicit StringMapIterBase(const DebugEpochBase *Epoch,
+ StringMapEntryBase **Bucket, bool Advance = false)
+ : DebugEpochBase::HandleBase(Epoch), Ptr(Bucket) {
if (Advance)
AdvancePastEmptyBuckets();
}
+ // Converting ctor from non-const to const iterators. SFINAE'd out for const
+ // sources so it doesn't shadow the implicit copy constructor.
+ template <bool IsConstSrc,
+ typename = std::enable_if_t<!IsConstSrc && IsConst>>
+ StringMapIterBase(const StringMapIterBase<ValueTy, IsConstSrc> &I)
+ : DebugEpochBase::HandleBase(I), Ptr(I.Ptr) {}
+
[[nodiscard]] reference operator*() const {
+ assert(isHandleInSync() && "invalid iterator access!");
return *static_cast<value_type *>(*Ptr);
}
[[nodiscard]] pointer operator->() const {
+ assert(isHandleInSync() && "invalid iterator access!");
return static_cast<value_type *>(*Ptr);
}
StringMapIterBase &operator++() { // Preincrement
+ assert(isHandleInSync() && "invalid iterator access!");
----------------
felipepiovezan wrote:
I think this assert is firing in an LLDB test.
https://github.com/llvm/llvm-project/pull/202237
More information about the llvm-commits
mailing list