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