Skip to content

Commit 180a937

Browse files
committed
Merging r354633:
------------------------------------------------------------------------ r354633 | rsmith | 2019-02-21 15:04:35 -0800 (Thu, 21 Feb 2019) | 3 lines Use _Q as MS ABI mangling for char8_t. Thanks to Yuriy Solodkyy for letting us know the mangling here. ------------------------------------------------------------------------ llvm-svn: 364487
1 parent cf7a59f commit 180a937

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

clang/lib/AST/MicrosoftMangle.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1937,8 +1937,9 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers,
19371937
// ::= _M # unsigned __int128
19381938
// ::= _N # bool
19391939
// _O # <array in parameter>
1940-
// ::= _T # __float80 (Intel)
1940+
// ::= _Q # char8_t
19411941
// ::= _S # char16_t
1942+
// ::= _T # __float80 (Intel)
19421943
// ::= _U # char32_t
19431944
// ::= _W # wchar_t
19441945
// ::= _Z # __float80 (Digital Mars)
@@ -1999,6 +2000,9 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers,
19992000
case BuiltinType::Bool:
20002001
Out << "_N";
20012002
break;
2003+
case BuiltinType::Char8:
2004+
Out << "_Q";
2005+
break;
20022006
case BuiltinType::Char16:
20032007
Out << "_S";
20042008
break;
@@ -2094,7 +2098,6 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers,
20942098
case BuiltinType::SatUShortFract:
20952099
case BuiltinType::SatUFract:
20962100
case BuiltinType::SatULongFract:
2097-
case BuiltinType::Char8:
20982101
case BuiltinType::Float128: {
20992102
DiagnosticsEngine &Diags = Context.getDiags();
21002103
unsigned DiagID = Diags.getCustomDiagID(

clang/test/CodeGenCXX/char8_t.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
// RUN: %clang_cc1 -std=c++17 -emit-llvm -fchar8_t -triple x86_64-linux %s -o - | FileCheck %s
2-
// RUN: %clang_cc1 -std=c++17 -emit-llvm -fchar8_t -triple x86_64-windows %s -o - -verify
1+
// RUN: %clang_cc1 -std=c++17 -emit-llvm -fchar8_t -triple x86_64-linux %s -o - | FileCheck %s --check-prefix=ITANIUM
2+
// RUN: %clang_cc1 -std=c++17 -emit-llvm -fchar8_t -triple x86_64-windows %s -o - | FileCheck %s --check-prefix=MSABI
33

4-
// CHECK: define void @_Z1fDu(
5-
void f(char8_t c) {} // expected-error {{cannot mangle this built-in char8_t type yet}}
4+
// ITANIUM: define void @_Z1fDu(
5+
// MSABI: define {{.*}}void @"?f@@YAX_Q@Z"(
6+
void f(char8_t c) {}
67

7-
// CHECK: define weak_odr void @_Z1gIiEvDTplplcvT__ELA4_KDuELDu114EE
8+
// ITANIUM: define weak_odr void @_Z1gIiEvDTplplcvT__ELA4_KDuELDu114EE(
9+
// MSABI: define weak_odr {{.*}}void @"??$g@H@@YAXPEB_Q@Z"(
810
template<typename T> void g(decltype(T() + u8"foo" + u8'r')) {}
911
template void g<int>(const char8_t*);

0 commit comments

Comments
 (0)