]> granicus.if.org Git - clang/commitdiff
[Tooling] Fix getting fully qualified names of template alias types.
authorChaoren Lin <chaorenl@google.com>
Wed, 20 Apr 2016 22:12:07 +0000 (22:12 +0000)
committerChaoren Lin <chaorenl@google.com>
Wed, 20 Apr 2016 22:12:07 +0000 (22:12 +0000)
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
unittests/Tooling/QualTypeNamesTest.cpp

index 02773be2a1819eb36d68f75794f5c55956757715..cfb9e9a19d2499cdb9b389d80de2e7c85abedd8c 100644 (file)
@@ -304,6 +304,8 @@ static NestedNameSpecifier *createNestedNameSpecifierForScopeOf(
     Decl = TDT->getDecl();
   } else if (const auto *TagDeclType = dyn_cast<TagType>(TypePtr)) {
     Decl = TagDeclType->getDecl();
+  } else if (const auto *TST = dyn_cast<TemplateSpecializationType>(TypePtr)) {
+    Decl = TST->getTemplateName().getAsTemplateDecl();
   } else {
     Decl = TypePtr->getAsCXXRecordDecl();
   }
index d7e7de52e88fc6c41d95ee368e626ff7e1f5e08d..2015c6863c4d32d7d72ec5a4d4876f3c2c0f2f11 100644 (file)
@@ -87,13 +87,19 @@ TEST(QualTypeNameTest, getFullyQualifiedName) {
   Visitor.ExpectedQualTypeNames["non_dependent_type_var"] =
       "Foo<X>::non_dependent_type";
   Visitor.ExpectedQualTypeNames["AnEnumVar"] = "EnumScopeClass::AnEnum";
+  Visitor.ExpectedQualTypeNames["AliasTypeVal"] = "A::B::C::InnerAlias<int>";
   Visitor.runOver(
       "int CheckInt;\n"
+      "template <typename T>\n"
+      "class OuterTemplateClass { };\n"
       "namespace A {\n"
       " namespace B {\n"
       "   class Class0 { };\n"
       "   namespace C {\n"
       "     typedef int MyInt;"
+      "     template <typename T>\n"
+      "     using InnerAlias = OuterTemplateClass<T>;\n"
+      "     InnerAlias<int> AliasTypeVal;\n"
       "   }\n"
       "   template<class X, class Y> class Template0;"
       "   template<class X, class Y> 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;