From: James Clarke Date: Tue, 8 Oct 2019 02:28:57 +0000 (+0000) Subject: [ItaniumMangle] Fix mangling of GNU __null in an expression to match GCC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8910a5422cbc941bfb7c7af7cf8a2da3025c51c4;p=clang [ItaniumMangle] Fix mangling of GNU __null in an expression to match GCC Reviewers: rsmith Reviewed By: rsmith Subscribers: erik.pilkington, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D68368 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@374013 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ItaniumMangle.cpp b/lib/AST/ItaniumMangle.cpp index bea96dec9d..c6f7143251 100644 --- a/lib/AST/ItaniumMangle.cpp +++ b/lib/AST/ItaniumMangle.cpp @@ -4273,8 +4273,11 @@ recurse: } case Expr::GNUNullExprClass: - // FIXME: should this really be mangled the same as nullptr? - // fallthrough + // Mangle as if an integer literal 0. + Out << 'L'; + mangleType(E->getType()); + Out << "0E"; + break; case Expr::CXXNullPtrLiteralExprClass: { Out << "LDnE"; diff --git a/test/CodeGenCXX/mangle-exprs.cpp b/test/CodeGenCXX/mangle-exprs.cpp index 6c46402694..1b99272b7f 100644 --- a/test/CodeGenCXX/mangle-exprs.cpp +++ b/test/CodeGenCXX/mangle-exprs.cpp @@ -373,3 +373,19 @@ namespace designated_init { template void f(decltype(T{.a.b[3][1 ... 4] = 9}) x) {} void use_f(A a) { f(a); } } + +namespace null { + template + void cpp_nullptr(typename enable_if

::type* = 0) { + } + + template + void gnu_null(typename enable_if

::type* = 0) { + } + + // CHECK-LABEL: define {{.*}} @_ZN4null11cpp_nullptrILDn0EEEvPN9enable_ifIXeqT_LDnEEvE4typeE + template void cpp_nullptr(void *); + + // CHECK-LABEL: define {{.*}} @_ZN4null8gnu_nullILPv0EEEvPN9enable_ifIXeqT_Ll0EEvE4typeE + template void gnu_null(void *); +}