https://github.com/alexfh updated 
https://github.com/llvm/llvm-project/pull/142988

>From c7154b0b2bd6457d908bb7fbedc028219f8b5e6d Mon Sep 17 00:00:00 2001
From: Alexander Kornienko <ale...@google.com>
Date: Thu, 5 Jun 2025 15:10:39 +0000
Subject: [PATCH 1/3] Fix an error introduced in #138518

---
 clang/lib/Sema/SemaExprCXX.cpp              |  5 +++++
 clang/test/SemaCXX/paren-list-init-expr.cpp | 23 +++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 clang/test/SemaCXX/paren-list-init-expr.cpp

diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 84521a3f80ff4..516015302bb39 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -2160,6 +2160,11 @@ ExprResult Sema::BuildCXXNew(SourceRange Range, bool 
UseGlobal,
            "paren init for non-call init");
     Exprs = MultiExprArg(List->getExprs(), List->getNumExprs());
   }
+  if (auto *List = dyn_cast_or_null<CXXParenListInitExpr>(Initializer)) {
+    assert(InitStyle == CXXNewInitializationStyle::Parens &&
+           "paren init for non-call init");
+    Exprs = List->getInitExprs();
+  }
 
   // C++11 [expr.new]p15:
   //   A new-expression that creates an object of type T initializes that
diff --git a/clang/test/SemaCXX/paren-list-init-expr.cpp 
b/clang/test/SemaCXX/paren-list-init-expr.cpp
new file mode 100644
index 0000000000000..7d7f46be7a8fd
--- /dev/null
+++ b/clang/test/SemaCXX/paren-list-init-expr.cpp
@@ -0,0 +1,23 @@
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -ast-dump %s | FileCheck %s
+struct Node {
+  long val;
+};
+template <bool>
+void CallNew() {
+    new Node(0);
+}
+// CHECK-LABEL: FunctionTemplateDecl {{.*}} CallNew
+// CHECK: |-FunctionDecl {{.*}} CallNew 'void ()'
+// CHECK:  `-CXXNewExpr {{.*}} 'operator new' 'void *(unsigned long)'
+// CHECK:  `-CXXParenListInitExpr {{.*}} 'Node'
+// CHECK:  `-ImplicitCastExpr {{.*}} 'long' <IntegralCast>
+// CHECK:  `-IntegerLiteral {{.*}} 'int' 0
+// CHECK: `-FunctionDecl {{.*}} used CallNew 'void ()' implicit_instantiation
+// CHECK:   |-TemplateArgument integral 'true'
+// CHECK:   `-CXXNewExpr {{.*}} 'operator new' 'void *(unsigned long)'
+// CHECK:   `-CXXParenListInitExpr {{.*}} 'Node'
+// CHECK:   `-ImplicitCastExpr {{.*}} 'long' <IntegralCast>
+// CHECK:   `-IntegerLiteral {{.*}} 'int' 0
+void f() {
+    (void)CallNew<true>; 
+}

>From 42abe65ef24c41e09a2e3bb5a77eb49f4fcf26ac Mon Sep 17 00:00:00 2001
From: Alexander Kornienko <ale...@google.com>
Date: Thu, 5 Jun 2025 15:23:39 +0000
Subject: [PATCH 2/3] Address review comment.

---
 clang/lib/Sema/SemaExprCXX.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 516015302bb39..2546ab5c0a342 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -2159,8 +2159,7 @@ ExprResult Sema::BuildCXXNew(SourceRange Range, bool 
UseGlobal,
     assert(InitStyle == CXXNewInitializationStyle::Parens &&
            "paren init for non-call init");
     Exprs = MultiExprArg(List->getExprs(), List->getNumExprs());
-  }
-  if (auto *List = dyn_cast_or_null<CXXParenListInitExpr>(Initializer)) {
+  } else if (auto *List = dyn_cast_or_null<CXXParenListInitExpr>(Initializer)) 
{
     assert(InitStyle == CXXNewInitializationStyle::Parens &&
            "paren init for non-call init");
     Exprs = List->getInitExprs();

>From 3b2c75ebecf52ae45ebad1af8b8e6825fd83f4db Mon Sep 17 00:00:00 2001
From: Alexander Kornienko <ale...@google.com>
Date: Thu, 5 Jun 2025 16:29:38 +0000
Subject: [PATCH 3/3] Don't make assumptions about the underlying type of
 size_t.

This fixes Windows CI.
---
 clang/test/SemaCXX/paren-list-init-expr.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/test/SemaCXX/paren-list-init-expr.cpp 
b/clang/test/SemaCXX/paren-list-init-expr.cpp
index 7d7f46be7a8fd..c47239ed0f32c 100644
--- a/clang/test/SemaCXX/paren-list-init-expr.cpp
+++ b/clang/test/SemaCXX/paren-list-init-expr.cpp
@@ -8,13 +8,13 @@ void CallNew() {
 }
 // CHECK-LABEL: FunctionTemplateDecl {{.*}} CallNew
 // CHECK: |-FunctionDecl {{.*}} CallNew 'void ()'
-// CHECK:  `-CXXNewExpr {{.*}} 'operator new' 'void *(unsigned long)'
+// CHECK:  `-CXXNewExpr {{.*}} 'operator new'
 // CHECK:  `-CXXParenListInitExpr {{.*}} 'Node'
 // CHECK:  `-ImplicitCastExpr {{.*}} 'long' <IntegralCast>
 // CHECK:  `-IntegerLiteral {{.*}} 'int' 0
 // CHECK: `-FunctionDecl {{.*}} used CallNew 'void ()' implicit_instantiation
 // CHECK:   |-TemplateArgument integral 'true'
-// CHECK:   `-CXXNewExpr {{.*}} 'operator new' 'void *(unsigned long)'
+// CHECK:   `-CXXNewExpr {{.*}} 'operator new'
 // CHECK:   `-CXXParenListInitExpr {{.*}} 'Node'
 // CHECK:   `-ImplicitCastExpr {{.*}} 'long' <IntegralCast>
 // CHECK:   `-IntegerLiteral {{.*}} 'int' 0

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to