From: Anders Carlsson Date: Thu, 4 Nov 2010 04:31:32 +0000 (+0000) Subject: Mangle std::nullptr_t as specified by the Itanium C++ ABI. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e292368afa63337f5ff64c967857a898d6f868da;p=clang Mangle std::nullptr_t as specified by the Itanium C++ ABI. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118236 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index 37ecf28598..d1e3a98789 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -1219,9 +1219,8 @@ void CXXNameMangler::mangleType(const BuiltinType *T) { // UNSUPPORTED: ::= Dh # IEEE 754r half-precision floating point (16 bits) // ::= Di # char32_t // ::= Ds # char16_t + // ::= Dn # std::nullptr_t (i.e., decltype(nullptr)) // ::= u # vendor extended type - // From our point of view, std::nullptr_t is a builtin, but as far as mangling - // is concerned, it's a type called std::nullptr_t. switch (T->getKind()) { case BuiltinType::Void: Out << 'v'; break; case BuiltinType::Bool: Out << 'b'; break; @@ -1244,7 +1243,7 @@ void CXXNameMangler::mangleType(const BuiltinType *T) { case BuiltinType::Float: Out << 'f'; break; case BuiltinType::Double: Out << 'd'; break; case BuiltinType::LongDouble: Out << 'e'; break; - case BuiltinType::NullPtr: Out << "St9nullptr_t"; break; + case BuiltinType::NullPtr: Out << "Dn"; break; case BuiltinType::Overload: case BuiltinType::Dependent: diff --git a/test/CodeGenCXX/mangle.cpp b/test/CodeGenCXX/mangle.cpp index e78ad3996e..b5207a1712 100644 --- a/test/CodeGenCXX/mangle.cpp +++ b/test/CodeGenCXX/mangle.cpp @@ -630,3 +630,8 @@ namespace test21 { // CHECK: define void @_ZN6test2112vla_arg_funcEiPA_i( void vla_arg_func(int X, int a[X][X]) {} } + +namespace test22 { + // CHECK: define void @_ZN6test221fEDn( + void f(decltype(nullptr)) { } +}