From e3eeb614011658cb419896e61d0d3610b0a1de16 Mon Sep 17 00:00:00 2001 From: Chaoren Lin Date: Wed, 20 Apr 2016 22:12:07 +0000 Subject: [PATCH] [Tooling] Fix getting fully qualified names of template alias types. Reviewers: rsmith, rnk Subscribers: cfe-commits, klimek Differential Revision: http://reviews.llvm.org/D19253 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266925 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Tooling/Core/QualTypeNames.cpp | 2 ++ unittests/Tooling/QualTypeNamesTest.cpp | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/Tooling/Core/QualTypeNames.cpp b/lib/Tooling/Core/QualTypeNames.cpp index 02773be2a1..cfb9e9a19d 100644 --- a/lib/Tooling/Core/QualTypeNames.cpp +++ b/lib/Tooling/Core/QualTypeNames.cpp @@ -304,6 +304,8 @@ static NestedNameSpecifier *createNestedNameSpecifierForScopeOf( Decl = TDT->getDecl(); } else if (const auto *TagDeclType = dyn_cast(TypePtr)) { Decl = TagDeclType->getDecl(); + } else if (const auto *TST = dyn_cast(TypePtr)) { + Decl = TST->getTemplateName().getAsTemplateDecl(); } else { Decl = TypePtr->getAsCXXRecordDecl(); } diff --git a/unittests/Tooling/QualTypeNamesTest.cpp b/unittests/Tooling/QualTypeNamesTest.cpp index d7e7de52e8..2015c6863c 100644 --- a/unittests/Tooling/QualTypeNamesTest.cpp +++ b/unittests/Tooling/QualTypeNamesTest.cpp @@ -87,13 +87,19 @@ TEST(QualTypeNameTest, getFullyQualifiedName) { Visitor.ExpectedQualTypeNames["non_dependent_type_var"] = "Foo::non_dependent_type"; Visitor.ExpectedQualTypeNames["AnEnumVar"] = "EnumScopeClass::AnEnum"; + Visitor.ExpectedQualTypeNames["AliasTypeVal"] = "A::B::C::InnerAlias"; Visitor.runOver( "int CheckInt;\n" + "template \n" + "class OuterTemplateClass { };\n" "namespace A {\n" " namespace B {\n" " class Class0 { };\n" " namespace C {\n" " typedef int MyInt;" + " template \n" + " using InnerAlias = OuterTemplateClass;\n" + " InnerAlias AliasTypeVal;\n" " }\n" " template class Template0;" " template class Template1;" @@ -148,7 +154,8 @@ TEST(QualTypeNameTest, getFullyQualifiedName) { "public:\n" " enum AnEnum { ZERO, ONE };\n" "};\n" - "EnumScopeClass::AnEnum AnEnumVar;\n" + "EnumScopeClass::AnEnum AnEnumVar;\n", + TypeNameVisitor::Lang_CXX11 ); TypeNameVisitor Complex; -- 2.40.0