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; } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
