From: Argyrios Kyrtzidis Date: Wed, 16 Jan 2013 17:42:07 +0000 (+0000) Subject: [PCH/Modules] The iterator may become invalidated because a new macro can be added X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f7f12646e8f8a45abea3ebcb81928fbe08187f97;p=clang [PCH/Modules] The iterator may become invalidated because a new macro can be added while deserializing a macro, make sure to copy/move what we need from it. Fixes clang-x86_64-debian-fast bot. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172629 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index 5b1c5cd6e5..d71bce5286 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -6854,11 +6854,13 @@ void ASTReader::finishPendingActions() { // Note that new macros may be added while deserializing a macro. for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) { PendingMacroIDsMap::iterator PMIt = PendingMacroIDs.begin() + I; - SmallVector &MacroIDs = PMIt->second; + IdentifierInfo *II = PMIt->first; + SmallVector MacroIDs; + MacroIDs.swap(PMIt->second); for (SmallVectorImpl::iterator MIt = MacroIDs.begin(), ME = MacroIDs.end(); MIt != ME; ++MIt) { MacroInfo *MI = getMacro(*MIt); - PP.addLoadedMacroInfo(PMIt->first, MI); + PP.addLoadedMacroInfo(II, MI); } } PendingMacroIDs.clear();