[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