[clang] f053ff7 - [clang] Avoid invalid iterator in MergeDefinitionData (#172559)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 17 06:10:52 PST 2025
Author: Jonas Hahnfeld
Date: 2025-12-17T15:10:48+01:00
New Revision: f053ff732df810d533860815ca5150d544bc2118
URL: https://github.com/llvm/llvm-project/commit/f053ff732df810d533860815ca5150d544bc2118
DIFF: https://github.com/llvm/llvm-project/commit/f053ff732df810d533860815ca5150d544bc2118.diff
LOG: [clang] Avoid invalid iterator in MergeDefinitionData (#172559)
Change the code added in commit 0d490ae55f and modified in commit
5ee6cff90b to the pattern found in ASTReader::finishPendingActions()
that avoids the iterator returned from redecls(), which may become
invalid during iteration.
Added:
Modified:
clang/lib/Serialization/ASTReaderDecl.cpp
Removed:
################################################################################
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp
index d245a111088d5..f8e9caa3f5d1d 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2107,8 +2107,9 @@ void ASTDeclMerger::MergeDefinitionData(
auto *Def = DD.Definition;
DD = std::move(MergeDD);
DD.Definition = Def;
- for (auto *D : Def->redecls())
- cast<CXXRecordDecl>(D)->DefinitionData = ⅅ
+ for (auto *R = Reader.getMostRecentExistingDecl(Def); R;
+ R = R->getPreviousDecl())
+ cast<CXXRecordDecl>(R)->DefinitionData = ⅅ
return;
}
More information about the cfe-commits
mailing list