[ASTImporter] Fix ClassTemplateSpecialization in wrong DC

Summary:
ClassTemplateSpecialization is put in the wrong DeclContex if implicitly
instantiated. This patch fixes it.

Reviewers: a.sidorin, r.stahl, xazax.hun

Subscribers: rnkovacs, dkrupp, cfe-commits

Differential Revision: https://reviews.llvm.org/D47058

llvm-svn: 333269
This commit is contained in:
Gabor Marton 2018-05-25 11:21:24 +00:00
parent b4a70b9f47
commit b14056b7aa
2 changed files with 7 additions and 3 deletions

View File

@ -4320,9 +4320,13 @@ Decl *ASTNodeImporter::VisitClassTemplateSpecializationDecl(
D2->setTemplateSpecializationKind(D->getTemplateSpecializationKind());
// Add the specialization to this context.
// Set the context of this specialization/instantiation.
D2->setLexicalDeclContext(LexicalDC);
LexicalDC->addDeclInternal(D2);
// Add to the DC only if it was an explicit specialization/instantiation.
if (D2->isExplicitInstantiationOrSpecialization()) {
LexicalDC->addDeclInternal(D2);
}
}
Importer.Imported(D, D2);
if (D->isCompleteDefinition() && ImportDefinition(D, D2))

View File

@ -1214,7 +1214,7 @@ TEST_P(ASTImporterTestBase, TUshouldNotContainTemplatedDeclOfTypeAlias) {
TEST_P(
ASTImporterTestBase,
DISABLED_TUshouldNotContainClassTemplateSpecializationOfImplicitInstantiation) {
TUshouldNotContainClassTemplateSpecializationOfImplicitInstantiation) {
Decl *From, *To;
std::tie(From, To) = getImportedDecl(