[PATCH] AST: Mangle nullptr properly in template args for the Itanium ABI

David Majnemer david.majnemer at gmail.com
Sat Sep 7 02:39:32 PDT 2013


Hi rsmith, rjmccall, eli.friedman, doug.gregor,

We would previously treat nullptr literals as we were mangling the for
the null pointer value of the template parameter's type instead.

This fixes PR17141.

http://llvm-reviews.chandlerc.com/D1625

Files:
  lib/AST/ItaniumMangle.cpp
  test/CodeGenCXX/mangle-nullptr-arg.cpp
  test/CodeGenCXX/visibility.cpp

Index: lib/AST/ItaniumMangle.cpp
===================================================================
--- lib/AST/ItaniumMangle.cpp
+++ lib/AST/ItaniumMangle.cpp
@@ -3337,10 +3337,8 @@
     break;
   }
   case TemplateArgument::NullPtr: {
-    //  <expr-primary> ::= L <type> 0 E
-    Out << 'L';
-    mangleType(A.getNullPtrType());
-    Out << "0E";
+    //  <expr-primary> ::= L <nullptr type> E
+    Out << "LDnE";
     break;
   }
   case TemplateArgument::Pack: {
Index: test/CodeGenCXX/mangle-nullptr-arg.cpp
===================================================================
--- test/CodeGenCXX/mangle-nullptr-arg.cpp
+++ test/CodeGenCXX/mangle-nullptr-arg.cpp
@@ -2,15 +2,15 @@
 
 template<int *ip> struct IP {};
 
-// CHECK-LABEL: define void @_Z5test12IPILPi0EE
+// CHECK-LABEL: define void @_Z5test12IPILDnEE
 void test1(IP<nullptr>) {}
 
 struct X{ };
 template<int X::*pm> struct PM {};
 
-// CHECK-LABEL: define void @_Z5test22PMILM1Xi0EE
+// CHECK-LABEL: define void @_Z5test22PMILDnEE
 void test2(PM<nullptr>) { }
 
-// CHECK-LABEL: define void @_Z5test316DependentTypePtrIPiLS0_0EE
+// CHECK-LABEL: define void @_Z5test316DependentTypePtrIPiLDnEE
 template<typename T, T x> struct DependentTypePtr {};
 void test3(DependentTypePtr<int*,nullptr>) { }
Index: test/CodeGenCXX/visibility.cpp
===================================================================
--- test/CodeGenCXX/visibility.cpp
+++ test/CodeGenCXX/visibility.cpp
@@ -971,8 +971,8 @@
   void f() {
     zed<nullptr>();
   }
-  // CHECK-LABEL: define internal void @_ZN6test523zedILPNS_12_GLOBAL__N_13fooE0EEEvv
-  // CHECK-HIDDEN-LABEL: define internal void @_ZN6test523zedILPNS_12_GLOBAL__N_13fooE0EEEvv
+  // CHECK-LABEL: define internal void @_ZN6test523zedILDnEEEvv
+  // CHECK-HIDDEN-LABEL: define internal void @_ZN6test523zedILDnEEEvv
 }
 
 namespace test53 {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1625.1.patch
Type: text/x-patch
Size: 1847 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130907/b6ed6166/attachment.bin>


More information about the cfe-commits mailing list