diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-11-21 05:16:13 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-11-21 05:16:13 +0000 |
| commit | e06124799b20ea006d7c32973c86f961f0dc396f (patch) | |
| tree | 5e0cdf7dae83ce82ebfffb7fcb0b30d685ece1c8 /clang/lib/Serialization | |
| parent | 945d7f58bde660b2523945962ec98aa258137d6f (diff) | |
| download | bcm5719-llvm-e06124799b20ea006d7c32973c86f961f0dc396f.tar.gz bcm5719-llvm-e06124799b20ea006d7c32973c86f961f0dc396f.zip | |
PR21323: Fix iterator invalidation issue when looking for redeclarations of a
special member function.
No test yet: the only testcases we have for this issue are extremely complex.
Testcase will be added once I get a reasonable reduction.
llvm-svn: 222506
Diffstat (limited to 'clang/lib/Serialization')
| -rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 1bbadfcee75..c0f22846787 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -6574,9 +6574,14 @@ ASTReader::FindExternalVisibleDeclsByName(const DeclContext *DC, (Kind == DeclarationName::CXXOperatorName && Name.getCXXOverloadedOperator() == OO_Equal)) { auto Merged = MergedLookups.find(DC); - if (Merged != MergedLookups.end()) - for (auto *MergedDC : Merged->second) - LookUpInContexts(MergedDC); + if (Merged != MergedLookups.end()) { + for (unsigned I = 0; I != Merged->second.size(); ++I) { + LookUpInContexts(Merged->second[I]); + // We might have just added some more merged lookups. If so, our + // iterator is now invalid, so grab a fresh one before continuing. + Merged = MergedLookups.find(DC); + } + } } } |

