Index: lib/Sema/SemaTemplate.cpp =================================================================== --- lib/Sema/SemaTemplate.cpp +++ lib/Sema/SemaTemplate.cpp @@ -2375,7 +2375,7 @@ // The template-id must name a variable template. VarTemplateDecl *VarTemplate = - dyn_cast(Name.getAsTemplateDecl()); + dyn_cast_or_null(Name.getAsTemplateDecl()); if (!VarTemplate) return Diag(D.getIdentifierLoc(), diag::err_var_spec_no_template) << IsPartialSpecialization; Index: test/SemaCXX/cxx1y-variable-templates_top_level.cpp =================================================================== --- test/SemaCXX/cxx1y-variable-templates_top_level.cpp +++ test/SemaCXX/cxx1y-variable-templates_top_level.cpp @@ -448,3 +448,9 @@ static_assert(x == 1, ""); #endif } + +namespace PR19169 { + template int* f(); + template void f(); + template<> int f; // expected-error {{no variable template matches specialization}} +}