https://github.com/xakep8 updated https://github.com/llvm/llvm-project/pull/232629
>From 22812779aac2e6857a85d4b4c46a4f2f1fe6a010 Mon Sep 17 00:00:00 2001 From: Kunal Dubey <[email protected]> Date: Fri, 16 Oct 2026 12:32:04 +0530 Subject: [PATCH] [Clang] Fix Incorrect mangling for "new std::initializer_list<int>{1}" --- clang/lib/AST/ItaniumMangle.cpp | 2 ++ clang/test/CodeGenCXX/mangle-exprs.cpp | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index ddde9d48606df3..441aad41edc0d2 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -5344,6 +5344,8 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity, else Out << "pi"; const Expr *Init = New->getInitializer(); + if (const auto *SILE = dyn_cast<CXXStdInitializerListExpr>(Init)) + Init = SILE->getSubExpr()->IgnoreImplicit(); if (const CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init)) { // Directly inline the initializers. for (CXXConstructExpr::const_arg_iterator I = CCE->arg_begin(), diff --git a/clang/test/CodeGenCXX/mangle-exprs.cpp b/clang/test/CodeGenCXX/mangle-exprs.cpp index b75f2cf3607b3f..574cd81952d9ae 100644 --- a/clang/test/CodeGenCXX/mangle-exprs.cpp +++ b/clang/test/CodeGenCXX/mangle-exprs.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -Wno-error=return-type -std=c++11 -fclang-abi-compat=latest -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s +// RUN: %clang_cc1 -Wno-error=return-type -Wno-dangling-initializer-list -std=c++11 -fclang-abi-compat=latest -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s namespace std { typedef decltype(sizeof(int)) size_t; @@ -212,6 +212,24 @@ namespace test4 { } +namespace new_std_initializer_list { + template <int N> + void empty(decltype((N, new std::initializer_list<int>{}))) {} + + template <int N> + void one(decltype((N, new std::initializer_list<int>{1}))) {} + + template <int N> + void two(decltype((N, new std::initializer_list<int>{1, 2}))) {} + + // CHECK-LABEL: define {{.*}} @_ZN24new_std_initializer_list5emptyILi0EEEvDTcmT_nw_St16initializer_listIiEilEE + template void empty<0>(std::initializer_list<int> *); + // CHECK-LABEL: define {{.*}} @_ZN24new_std_initializer_list3oneILi0EEEvDTcmT_nw_St16initializer_listIiEilLi1EEE + template void one<0>(std::initializer_list<int> *); + // CHECK-LABEL: define {{.*}} @_ZN24new_std_initializer_list3twoILi0EEEvDTcmT_nw_St16initializer_listIiEilLi1ELi2EEE + template void two<0>(std::initializer_list<int> *); +} + namespace test5 { template <typename T> void a(decltype(noexcept(T()))) {} template void a<int>(decltype(noexcept(int()))); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
