[all-commits] [llvm/llvm-project] 6163aa: PR45239: Don't deallocate TemplateIdAnnotations if...

Richard Smith via All-commits all-commits at lists.llvm.org
Sun Apr 5 23:23:30 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 6163aa96799cbad7f2f58e02c5bebee9647056a5
      https://github.com/llvm/llvm-project/commit/6163aa96799cbad7f2f58e02c5bebee9647056a5
  Author: Richard Smith <richard at metafoo.co.uk>
  Date:   2020-04-05 (Sun, 05 Apr 2020)

  Changed paths:
    M clang/include/clang/Lex/Preprocessor.h
    M clang/include/clang/Parse/Parser.h
    M clang/include/clang/Parse/RAIIObjectsForParser.h
    M clang/lib/Parse/ParseDeclCXX.cpp
    M clang/lib/Parse/ParseStmt.cpp
    M clang/lib/Parse/ParseTemplate.cpp
    M clang/lib/Parse/Parser.cpp
    M clang/test/Parser/cxx-template-decl.cpp

  Log Message:
  -----------
  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.




More information about the All-commits mailing list