Changes from Git (git http://labmaster3.local/git/llvm-project.git)


  1. PR45239: Don't deallocate TemplateIdAnnotations if they might still be (details)
Commit 6163aa96799cbad7f2f58e02c5bebee9647056a5 by richard
PR45239: Don't deallocate TemplateIdAnnotations if they might still be
in the token stream.

Previously we deleted all template-id annotations at the end of each
top-level declaration. That doesn't work: we can do some lookahead and
form a template-id annotation, and then roll back that lookahead, parse,
and decide that we're missing a semicolon at the end of a top-level
declaration, before we reach the annotation token. In that situation,
we'd end up parsing the annotation token after deleting its associated
data, leading to various forms of badness.

We now only delete template-id annotations if the preprocessor can
assure us that there are no annotation tokens left in the token stream
(or if we're already at EOF). This lets us delete the annotation tokens
earlier in a lot of cases; we now clean them up at the end of each
statement and class member, not just after each top-level declaration.
This also permitted some simplification of the delay-parsed templates
cleanup code.
The file was modifiedclang/lib/Parse/ParseDeclCXX.cpp
The file was modifiedclang/test/Parser/cxx-template-decl.cpp
The file was modifiedclang/lib/Parse/ParseTemplate.cpp
The file was modifiedclang/include/clang/Parse/RAIIObjectsForParser.h
The file was modifiedclang/lib/Parse/Parser.cpp
The file was modifiedclang/include/clang/Lex/Preprocessor.h
The file was modifiedclang/include/clang/Parse/Parser.h
The file was modifiedclang/lib/Parse/ParseStmt.cpp