diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-01-16 17:42:07 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-01-16 17:42:07 +0000 |
commit | f7f12646e8f8a45abea3ebcb81928fbe08187f97 (patch) | |
tree | 0836c975773829d422d1d873f9d3d628ab365692 /lib/Serialization/ASTReader.cpp | |
parent | 7dfd18275259df609f8574a25302fc73a000aa64 (diff) |
[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
Diffstat (limited to 'lib/Serialization/ASTReader.cpp')
-rw-r--r-- | lib/Serialization/ASTReader.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
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<serialization::MacroID, 2> &MacroIDs = PMIt->second; + IdentifierInfo *II = PMIt->first; + SmallVector<serialization::MacroID, 2> MacroIDs; + MacroIDs.swap(PMIt->second); for (SmallVectorImpl<serialization::MacroID>::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(); |