Improve recovery from invalid template-ids.
authorRichard Smith <richard@metafoo.co.uk>
Sat, 28 Mar 2020 00:08:26 +0000 (17:08 -0700)
committerRichard Smith <richard@metafoo.co.uk>
Sat, 28 Mar 2020 00:11:04 +0000 (17:11 -0700)
commitb3f6e3d6d64d77a9c840b8407b7e3c49b62b46dd
treee895b196f86f66c63f133bf648951ee78f75fec8
parent569e4f9bc99a755cc30f0102b29b1eefd4fa33b4
Improve recovery from invalid template-ids.

Instead of bailing out of parsing when we encounter an invalid
template-name or template arguments in a template-id, produce an
annotation token describing the invalid construct.

This avoids duplicate errors and generally allows us to recover better.
In principle we should be able to extend this to store some kinds of
invalid template-id in the AST for tooling use, but that isn't handled
as part of this change.
27 files changed:
clang/include/clang/Sema/Ownership.h
clang/include/clang/Sema/ParsedTemplate.h
clang/lib/Parse/ParseCXXInlineMethods.cpp
clang/lib/Parse/ParseDecl.cpp
clang/lib/Parse/ParseDeclCXX.cpp
clang/lib/Parse/ParseExprCXX.cpp
clang/lib/Parse/ParseTemplate.cpp
clang/lib/Parse/ParseTentative.cpp
clang/lib/Parse/Parser.cpp
clang/lib/Sema/DeclSpec.cpp
clang/test/CXX/drs/dr3xx.cpp
clang/test/CXX/temp/p3.cpp
clang/test/Parser/cxx-ambig-init-templ.cpp
clang/test/Parser/cxx-class.cpp
clang/test/Parser/cxx-member-initializers.cpp
clang/test/Parser/cxx-template-decl.cpp
clang/test/Parser/eof2.cpp
clang/test/Parser/recovery.cpp
clang/test/SemaCXX/PR20705.cpp
clang/test/SemaCXX/PR9459.cpp
clang/test/SemaCXX/builtins.cpp
clang/test/SemaCXX/implicit-exception-spec.cpp
clang/test/SemaCXX/injected-class-name-crash.cpp
clang/test/SemaCXX/invalid-member-expr.cpp
clang/test/SemaTemplate/ms-delayed-default-template-args.cpp
clang/test/SemaTemplate/temp_arg.cpp
clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp