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@U__SVInt8_t@__clang@@@@@Z"
 void f1(S<__SVInt8_t>) {}
+// CHECK: void @"?f2@@YAXU?$S@U__SVInt32_t@__clang@@@@@Z"
+void f2(S<__SVInt32_t>) {}
+// CHECK: void @"?f3@@YAXU?$S@U__SVBool_t@__clang@@@@@Z"
+void f3(S<__SVBool_t>) {}
+// CHECK: void @"?f4@@YAXU?$S@U__clang_svfloat64x4_t@__clang@@@@@Z"
+void f4(S<__clang_svfloat64x4_t>) {}


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

Reply via email to