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 | 8078a5a4497ee2b5a18e5694557fe61a9082755e (patch) | |
tree | f00fe68b0ace1e2fd63254603c95240ba97c81cc /clang/lib/Serialization | |
parent | 949e82216c5c15270e5931c4d213401f9f675f2d (diff) | |
download | bcm5719-llvm-8078a5a4497ee2b5a18e5694557fe61a9082755e.tar.gz bcm5719-llvm-8078a5a4497ee2b5a18e5694557fe61a9082755e.zip |
[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.
llvm-svn: 172629
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 5b1c5cd6e53..d71bce5286a 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/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(); |