summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-02-01 21:41:18 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-02-01 21:41:18 +0000
commit3411fbff0be4fddf69dc85d1f42233963588d6ed (patch)
tree978fda904d80ca8b21a2119bc047f1dbfb766167
parent2b0cd30ce50b308f2f380d43582b6444e81f243f (diff)
downloadbcm5719-llvm-3411fbff0be4fddf69dc85d1f42233963588d6ed.tar.gz
bcm5719-llvm-3411fbff0be4fddf69dc85d1f42233963588d6ed.zip
Repoint 'missing typename' diagnostic to the location where 'typename' should be added.
llvm-svn: 293817
-rw-r--r--clang/lib/Sema/SemaTemplate.cpp2
-rw-r--r--clang/test/CXX/temp/temp.res/p3.cpp3
2 files changed, 3 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index c565ab7c617..4c1acaadcba 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -2440,7 +2440,7 @@ Sema::ActOnTemplateIdType(CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
// qualified-id denotes a type, forming an
// elaborated-type-specifier (7.1.5.3).
if (!LookupCtx && isDependentScopeSpecifier(SS)) {
- Diag(TemplateIILoc, diag::err_typename_missing_template)
+ Diag(SS.getBeginLoc(), diag::err_typename_missing_template)
<< SS.getScopeRep() << TemplateII->getName();
// Recover as if 'typename' were specified.
// FIXME: This is not quite correct recovery as we don't transform SS
diff --git a/clang/test/CXX/temp/temp.res/p3.cpp b/clang/test/CXX/temp/temp.res/p3.cpp
index a836ff1b1b4..ea87b8d1054 100644
--- a/clang/test/CXX/temp/temp.res/p3.cpp
+++ b/clang/test/CXX/temp/temp.res/p3.cpp
@@ -12,7 +12,8 @@ struct X {
};
};
-template<typename T> A<T>::B<T> f1(); // expected-error {{missing 'typename' prior to dependent type template name 'A<T>::B'}}
+template<typename T> A // expected-error {{missing 'typename' prior to dependent type template name 'A<T>::B'}}
+ <T>::B<T> f1();
template<typename T> A<T>::C<T> f2(); // expected-error {{missing 'typename' prior to dependent type template name 'A<T>::C'}}
// FIXME: Should these cases really be valid? There doesn't appear to be a rule prohibiting them...
OpenPOWER on IntegriCloud