[clang] 12f8bf3 - [AArch64] Add MSVC-style mangling for SVE types. (#141887)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 3 16:22:34 PDT 2025
Author: Eli Friedman
Date: 2025-06-03T16:22:30-07:00
New Revision: 12f8bf34c3e56f30bda11e0edd92b4ac5914ec47
URL: https://github.com/llvm/llvm-project/commit/12f8bf34c3e56f30bda11e0edd92b4ac5914ec47
DIFF: https://github.com/llvm/llvm-project/commit/12f8bf34c3e56f30bda11e0edd92b4ac5914ec47.diff
LOG: [AArch64] Add MSVC-style mangling for SVE types. (#141887)
No released version of MSVC supports these types, so make up a mangling
that's unlikely to conflict, for now.
Added:
Modified:
clang/lib/AST/MicrosoftMangle.cpp
clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index 290521a9bd531..d6339029a65c9 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -2828,6 +2828,13 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers,
break;
#include "clang/Basic/HLSLIntangibleTypes.def"
+#define SVE_TYPE(Name, Id, SingletonId) \
+ case BuiltinType::Id: \
+ mangleArtificialTagType(TagTypeKind::Struct, #Name, {"__clang"}); \
+ break;
+#define SVE_SCALAR_TYPE(Name, MangledName, Id, SingletonId, Bits)
+#include "clang/Basic/AArch64ACLETypes.def"
+
// Issue an error for any type not explicitly handled.
default:
Error(Range.getBegin(), "built-in type: ",
diff --git a/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp b/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
index 435feec774ece..3ed75b9494c2a 100644
--- a/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
+++ b/clang/test/CodeGenCXX/aarch64-mangle-sve-vectors-msvc.cpp
@@ -1,7 +1,13 @@
-// RUN: not %clang_cc1 -triple aarch64-unknown-windows-msvc %s -emit-llvm \
-// RUN: -o - 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -triple aarch64-unknown-windows-msvc %s -emit-llvm \
+// RUN: -o - | FileCheck %s
template<typename T> struct S {};
-// CHECK: cannot mangle this built-in type: __SVInt8_t yet
+// CHECK: void @"?f1@@YAXU?$S at U__SVInt8_t@__clang@@@@@Z"
void f1(S<__SVInt8_t>) {}
+// CHECK: void @"?f2@@YAXU?$S at U__SVInt32_t@__clang@@@@@Z"
+void f2(S<__SVInt32_t>) {}
+// CHECK: void @"?f3@@YAXU?$S at U__SVBool_t@__clang@@@@@Z"
+void f3(S<__SVBool_t>) {}
+// CHECK: void @"?f4@@YAXU?$S at U__clang_svfloat64x4_t@__clang@@@@@Z"
+void f4(S<__clang_svfloat64x4_t>) {}
More information about the cfe-commits
mailing list