]> granicus.if.org Git - clang/commitdiff
[ms-cxxabi] Mangle nullptr template arguments
authorDavid Majnemer <david.majnemer@gmail.com>
Mon, 5 Aug 2013 21:33:59 +0000 (21:33 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Mon, 5 Aug 2013 21:33:59 +0000 (21:33 +0000)
MSVC mangles nullptr template arguments identically to zero literals.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187741 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/MicrosoftMangle.cpp
test/CodeGenCXX/mangle-ms-templates.cpp

index 64e27f1f4bab0917b167ecbe35f594df9fd830e4..68f57a9212903e7cb134cb28c47b6387e2c2488a 100644 (file)
@@ -889,6 +889,9 @@ void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD,
     mangleIntegerLiteral(TA.getAsIntegral(),
                          TA.getIntegralType()->isBooleanType());
     break;
+  case TemplateArgument::NullPtr:
+    Out << "$0A@";
+    break;
   case TemplateArgument::Expression:
     mangleExpression(TA.getAsExpr());
     break;
@@ -901,8 +904,7 @@ void MicrosoftCXXNameMangler::mangleTemplateArg(const TemplateDecl *TD,
       mangleTemplateArg(TD, *I, ArgIndex);
     break;
   case TemplateArgument::Template:
-  case TemplateArgument::TemplateExpansion:
-  case TemplateArgument::NullPtr: {
+  case TemplateArgument::TemplateExpansion: {
     // Issue a diagnostic.
     DiagnosticsEngine &Diags = Context.getDiags();
     unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
index 363583a65f4113163a66c332a6f7f28a2ed754a6..6e5be6582420b3545479fa822d915d0b502271ee 100644 (file)
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -emit-llvm %s -o - -cxx-abi microsoft -triple=i386-pc-win32 | FileCheck %s
-// RUN: %clang_cc1 -emit-llvm %s -o - -cxx-abi microsoft -triple=x86_64-pc-win32 | FileCheck -check-prefix X64 %s
+// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -cxx-abi microsoft -triple=i386-pc-win32 | FileCheck %s
+// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -cxx-abi microsoft -triple=x86_64-pc-win32 | FileCheck -check-prefix X64 %s
 
 template<typename T>
 class Class {
@@ -156,3 +156,8 @@ void variadic_class_instantiate() {
 }
 // CHECK: call {{.*}} @"\01??0?$VariadicClass@HD_N@@QAE@XZ"
 // CHECK: call {{.*}} @"\01??0?$VariadicClass@_NDH@@QAE@XZ"
+
+// PR16788
+template <decltype(nullptr)> struct S1 {};
+void f(S1<nullptr>) {}
+// CHECK: "\01?f@@YAXU?$S1@$0A@@@@Z"