diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/ASTImporter.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 1b67fea..4e1b3a5 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -6565,6 +6565,11 @@ ExpectedDecl ASTNodeImporter::VisitVarTemplateSpecializationDecl( return D2; } + // Update InsertPos, because preceding import calls may have invalidated + // it by adding new specializations. + if (!VarTemplate->findSpecialization(TemplateArgs, InsertPos)) + VarTemplate->AddSpecialization(D2, InsertPos); + QualType T; if (Error Err = importInto(T, D->getType())) return std::move(Err); @@ -6603,8 +6608,6 @@ ExpectedDecl ASTNodeImporter::VisitVarTemplateSpecializationDecl( if (FoundSpecialization) D2->setPreviousDecl(FoundSpecialization->getMostRecentDecl()); - VarTemplate->AddSpecialization(D2, InsertPos); - addDeclToContexts(D, D2); // Import the rest of the chain. I.e. import all subsequent declarations. |