Improve diagnostics and error recovery for template name lookup.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 11 May 2018 02:43:08 +0000 (02:43 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 11 May 2018 02:43:08 +0000 (02:43 +0000)
commit7981004eb7bdb6db6c3a1f7bc644acca997dc53f
treef57396e21aafc9c14f35bed1d2ddbf600f8122b5
parent82de4e6b9337d55e66b80d1b4c82dd7c413fe8e3
Improve diagnostics and error recovery for template name lookup.

For 'x::template y', consistently give a "no member named 'y' in 'x'"
diagnostic if there is no such member, and give a 'template keyword not
followed by a template' name error if there is such a member but it's not a
template. In the latter case, add a note pointing at the non-template.

Don't suggest inserting a 'template' keyword in 'X::Y<' if X is dependent
if the lookup of X::Y was actually not a dependent lookup and found only
non-templates.

llvm-svn: 332076
17 files changed:
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Sema.h
clang/lib/Parse/ParseExprCXX.cpp
clang/lib/Sema/SemaExpr.cpp
clang/lib/Sema/SemaExprMember.cpp
clang/lib/Sema/SemaTemplate.cpp
clang/lib/Sema/TreeTransform.h
clang/test/CXX/drs/dr1xx.cpp
clang/test/CXX/drs/dr3xx.cpp
clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp
clang/test/SemaCXX/invalid-template-specifier.cpp
clang/test/SemaObjCXX/parameterized_classes_subst.mm
clang/test/SemaTemplate/dependent-base-classes.cpp
clang/test/SemaTemplate/metafun-apply.cpp
clang/test/SemaTemplate/nested-name-spec-template.cpp
clang/test/SemaTemplate/template-id-expr.cpp
clang/test/SemaTemplate/typo-dependent-name.cpp