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
This commit is contained in:
parent
945d7f58bd
commit
e06124799b
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue