Slight tweak to alias template error handling: don't guess that a template-id in an alias declaration was meant to be a specialization. Use a generic, but more accurate, diagnostic.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130961 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp
index ae6b3ff..9c464bc 100644
--- a/lib/Parse/ParseDeclCXX.cpp
+++ b/lib/Parse/ParseDeclCXX.cpp
@@ -396,7 +396,8 @@
 
     // Type alias templates cannot be specialized.
     int SpecKind = -1;
-    if (Name.getKind() == UnqualifiedId::IK_TemplateId)
+    if (TemplateInfo.Kind == ParsedTemplateInfo::Template &&
+        Name.getKind() == UnqualifiedId::IK_TemplateId)
       SpecKind = 0;
     if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitSpecialization)
       SpecKind = 1;
diff --git a/test/CXX/temp/temp.decls/p3.cpp b/test/CXX/temp/temp.decls/p3.cpp
index 21c82e6..54800e4 100644
--- a/test/CXX/temp/temp.decls/p3.cpp
+++ b/test/CXX/temp/temp.decls/p3.cpp
@@ -4,5 +4,4 @@
 template<typename T> using A<T*> = char; // expected-error {{partial specialization of alias templates is not permitted}}
 template<> using A<char> = char; // expected-error {{explicit specialization of alias templates is not permitted}}
 template using A<char> = char; // expected-error {{explicit instantiation of alias templates is not permitted}}
-// Best guess as to what the user was trying to do: missing template<>.
-using A<char> = char; // expected-error {{partial specialization of alias templates is not permitted}}
+using A<char> = char; // expected-error {{name defined in alias declaration must be an identifier}}