From e06124799b20ea006d7c32973c86f961f0dc396f Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 21 Nov 2014 05:16:13 +0000 Subject: [PATCH] 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 --- clang/lib/Serialization/ASTReader.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 1bbadfc..c0f2284 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); + } + } } } -- 2.7.4