[all-commits] [llvm/llvm-project] 4a792e: [clang] Fix new-expression with elaborated-type-sp...

Mariya Podchishchaeva via All-commits all-commits at lists.llvm.org
Mon Jul 3 03:13:53 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 4a792e06e8e72f4c14e5a5251e71051d7a984820
      https://github.com/llvm/llvm-project/commit/4a792e06e8e72f4c14e5a5251e71051d7a984820
  Author: Mariya Podchishchaeva <mariya.podchishchaeva at intel.com>
  Date:   2023-07-03 (Mon, 03 Jul 2023)

  Changed paths:
    M clang/docs/ReleaseNotes.rst
    M clang/include/clang/Parse/Parser.h
    M clang/lib/Parse/ParseDecl.cpp
    M clang/lib/Parse/ParseExprCXX.cpp
    M clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp
    M clang/test/CXX/drs/dr19xx.cpp
    M clang/test/CXX/drs/dr21xx.cpp
    M clang/test/CXX/drs/dr6xx.cpp
    M clang/test/Parser/cxx11-type-specifier.cpp
    M clang/www/cxx_dr_status.html

  Log Message:
  -----------
  [clang] Fix new-expression with elaborated-type-specifier

Expressions like
```
struct A {};
...
new struct A {};
struct A* b = (1 == 1) ? new struct A : new struct A;

```
were parsed as redefinitions of `struct A` and failed, however as clarified by
`CWG2141` new-expression cannot define a type, so both these examples
should be considered as references to the previously declared `struct A`.
The patch adds a "new" kind context for parsing declaration specifiers in
addition to already existing declarator context in order to track that
the parser is inside of a new expression.

Fixes https://github.com/llvm/llvm-project/issues/34341

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D153857




More information about the All-commits mailing list