svn commit: r349779 - in vendor/clang/dist-release_80: lib/AST lib/CodeGen lib/Driver/ToolChains/Arch test/CodeGenCXX test/Driver

Dimitry Andric dim at FreeBSD.org
Sat Jul 6 15:33:54 UTC 2019


Author: dim
Date: Sat Jul  6 15:33:52 2019
New Revision: 349779
URL: https://svnweb.freebsd.org/changeset/base/349779

Log:
  Vendor import of clang release_80 branch r364487:
  https://llvm.org/svn/llvm-project/cfe/branches/release_80@364487

Added:
  vendor/clang/dist-release_80/test/CodeGenCXX/debug-info-var-template-partial.cpp
Modified:
  vendor/clang/dist-release_80/lib/AST/MicrosoftMangle.cpp
  vendor/clang/dist-release_80/lib/CodeGen/CGDebugInfo.cpp
  vendor/clang/dist-release_80/lib/Driver/ToolChains/Arch/PPC.cpp
  vendor/clang/dist-release_80/test/CodeGenCXX/char8_t.cpp
  vendor/clang/dist-release_80/test/CodeGenCXX/debug-info-template-member.cpp
  vendor/clang/dist-release_80/test/Driver/netbsd.c

Modified: vendor/clang/dist-release_80/lib/AST/MicrosoftMangle.cpp
==============================================================================
--- vendor/clang/dist-release_80/lib/AST/MicrosoftMangle.cpp	Sat Jul  6 15:33:49 2019	(r349778)
+++ vendor/clang/dist-release_80/lib/AST/MicrosoftMangle.cpp	Sat Jul  6 15:33:52 2019	(r349779)
@@ -1937,8 +1937,9 @@ void MicrosoftCXXNameMangler::mangleType(const Builtin
   //                 ::= _M # unsigned __int128
   //                 ::= _N # bool
   //                     _O # <array in parameter>
-  //                 ::= _T # __float80 (Intel)
+  //                 ::= _Q # char8_t
   //                 ::= _S # char16_t
+  //                 ::= _T # __float80 (Intel)
   //                 ::= _U # char32_t
   //                 ::= _W # wchar_t
   //                 ::= _Z # __float80 (Digital Mars)
@@ -1999,6 +2000,9 @@ void MicrosoftCXXNameMangler::mangleType(const Builtin
   case BuiltinType::Bool:
     Out << "_N";
     break;
+  case BuiltinType::Char8:
+    Out << "_Q";
+    break;
   case BuiltinType::Char16:
     Out << "_S";
     break;
@@ -2094,7 +2098,6 @@ void MicrosoftCXXNameMangler::mangleType(const Builtin
   case BuiltinType::SatUShortFract:
   case BuiltinType::SatUFract:
   case BuiltinType::SatULongFract:
-  case BuiltinType::Char8:
   case BuiltinType::Float128: {
     DiagnosticsEngine &Diags = Context.getDiags();
     unsigned DiagID = Diags.getCustomDiagID(

Modified: vendor/clang/dist-release_80/lib/CodeGen/CGDebugInfo.cpp
==============================================================================
--- vendor/clang/dist-release_80/lib/CodeGen/CGDebugInfo.cpp	Sat Jul  6 15:33:49 2019	(r349778)
+++ vendor/clang/dist-release_80/lib/CodeGen/CGDebugInfo.cpp	Sat Jul  6 15:33:52 2019	(r349779)
@@ -1817,32 +1817,24 @@ CGDebugInfo::CollectFunctionTemplateParams(const Funct
 }
 
 llvm::DINodeArray CGDebugInfo::CollectVarTemplateParams(const VarDecl *VL,
-    llvm::DIFile *Unit) {
-  if (auto *TS = dyn_cast<VarTemplateSpecializationDecl>(VL)) {
-    auto T = TS->getSpecializedTemplateOrPartial();
-    auto TA = TS->getTemplateArgs().asArray();
-    // Collect parameters for a partial specialization
-    if (T.is<VarTemplatePartialSpecializationDecl *>()) {
-      const TemplateParameterList *TList =
-        T.get<VarTemplatePartialSpecializationDecl *>()
-        ->getTemplateParameters();
-      return CollectTemplateParams(TList, TA, Unit);
-    }
-
-    // Collect parameters for an explicit specialization
-    if (T.is<VarTemplateDecl *>()) {
-      const TemplateParameterList *TList = T.get<VarTemplateDecl *>()
-        ->getTemplateParameters();
-      return CollectTemplateParams(TList, TA, Unit);
-    }
-  }
-  return llvm::DINodeArray();
+                                                        llvm::DIFile *Unit) {
+  // Always get the full list of parameters, not just the ones from the
+  // specialization. A partial specialization may have fewer parameters than
+  // there are arguments.
+  auto *TS = dyn_cast<VarTemplateSpecializationDecl>(VL);
+  if (!TS)
+    return llvm::DINodeArray();
+  VarTemplateDecl *T = TS->getSpecializedTemplate();
+  const TemplateParameterList *TList = T->getTemplateParameters();
+  auto TA = TS->getTemplateArgs().asArray();
+  return CollectTemplateParams(TList, TA, Unit);
 }
 
 llvm::DINodeArray CGDebugInfo::CollectCXXTemplateParams(
     const ClassTemplateSpecializationDecl *TSpecial, llvm::DIFile *Unit) {
-  // Always get the full list of parameters, not just the ones from
-  // the specialization.
+  // Always get the full list of parameters, not just the ones from the
+  // specialization. A partial specialization may have fewer parameters than
+  // there are arguments.
   TemplateParameterList *TPList =
       TSpecial->getSpecializedTemplate()->getTemplateParameters();
   const TemplateArgumentList &TAList = TSpecial->getTemplateArgs();

Modified: vendor/clang/dist-release_80/lib/Driver/ToolChains/Arch/PPC.cpp
==============================================================================
--- vendor/clang/dist-release_80/lib/Driver/ToolChains/Arch/PPC.cpp	Sat Jul  6 15:33:49 2019	(r349778)
+++ vendor/clang/dist-release_80/lib/Driver/ToolChains/Arch/PPC.cpp	Sat Jul  6 15:33:52 2019	(r349779)
@@ -116,7 +116,7 @@ ppc::ReadGOTPtrMode ppc::getPPCReadGOTPtrMode(const Dr
                                               const ArgList &Args) {
   if (Args.getLastArg(options::OPT_msecure_plt))
     return ppc::ReadGOTPtrMode::SecurePlt;
-  if (Triple.isOSOpenBSD())
+  if (Triple.isOSNetBSD() || Triple.isOSOpenBSD())
     return ppc::ReadGOTPtrMode::SecurePlt;
   else
     return ppc::ReadGOTPtrMode::Bss;

Modified: vendor/clang/dist-release_80/test/CodeGenCXX/char8_t.cpp
==============================================================================
--- vendor/clang/dist-release_80/test/CodeGenCXX/char8_t.cpp	Sat Jul  6 15:33:49 2019	(r349778)
+++ vendor/clang/dist-release_80/test/CodeGenCXX/char8_t.cpp	Sat Jul  6 15:33:52 2019	(r349779)
@@ -1,9 +1,11 @@
-// RUN: %clang_cc1 -std=c++17 -emit-llvm -fchar8_t -triple x86_64-linux %s -o - | FileCheck %s
-// RUN: %clang_cc1 -std=c++17 -emit-llvm -fchar8_t -triple x86_64-windows %s -o - -verify
+// RUN: %clang_cc1 -std=c++17 -emit-llvm -fchar8_t -triple x86_64-linux %s -o - | FileCheck %s --check-prefix=ITANIUM
+// RUN: %clang_cc1 -std=c++17 -emit-llvm -fchar8_t -triple x86_64-windows %s -o - | FileCheck %s --check-prefix=MSABI
 
-// CHECK: define void @_Z1fDu(
-void f(char8_t c) {} // expected-error {{cannot mangle this built-in char8_t type yet}}
+// ITANIUM: define void @_Z1fDu(
+// MSABI: define {{.*}}void @"?f@@YAX_Q at Z"(
+void f(char8_t c) {}
 
-// CHECK: define weak_odr void @_Z1gIiEvDTplplcvT__ELA4_KDuELDu114EE
+// ITANIUM: define weak_odr void @_Z1gIiEvDTplplcvT__ELA4_KDuELDu114EE(
+// MSABI: define weak_odr {{.*}}void @"??$g at H@@YAXPEB_Q at Z"(
 template<typename T> void g(decltype(T() + u8"foo" + u8'r')) {}
 template void g<int>(const char8_t*);

Modified: vendor/clang/dist-release_80/test/CodeGenCXX/debug-info-template-member.cpp
==============================================================================
--- vendor/clang/dist-release_80/test/CodeGenCXX/debug-info-template-member.cpp	Sat Jul  6 15:33:49 2019	(r349778)
+++ vendor/clang/dist-release_80/test/CodeGenCXX/debug-info-template-member.cpp	Sat Jul  6 15:33:52 2019	(r349779)
@@ -30,7 +30,7 @@ inline int add3(int x) {
 // CHECK: {{![0-9]+}} = distinct !DIGlobalVariable(
 // CHECK-SAME: name: "var"
 // CHECK-SAME: templateParams: {{![0-9]+}}
-// CHECK: !DITemplateTypeParameter(name: "P", type: {{![0-9]+}})
+// CHECK: !DITemplateTypeParameter(name: "T", type: {{![0-9]+}})
 // CHECK: {{![0-9]+}} = distinct !DIGlobalVariable(
 // CHECK-SAME: name: "varray"
 // CHECK-SAME: templateParams: {{![0-9]+}}

Added: vendor/clang/dist-release_80/test/CodeGenCXX/debug-info-var-template-partial.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ vendor/clang/dist-release_80/test/CodeGenCXX/debug-info-var-template-partial.cpp	Sat Jul  6 15:33:52 2019	(r349779)
@@ -0,0 +1,17 @@
+// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu %s -o - -debug-info-kind=limited | FileCheck %s
+
+template <typename LHS, typename RHS> constexpr bool is_same_v = false;
+template <typename T> constexpr bool is_same_v<T, T> = true;
+
+template constexpr bool is_same_v<int, int>;
+static_assert(is_same_v<int, int>, "should get partial spec");
+
+// Note that the template arguments for the instantiated variable use the
+// parameter names from the primary template. The partial specialization might
+// not have enough parameters.
+
+// CHECK: distinct !DIGlobalVariable(name: "is_same_v", linkageName: "_ZL9is_same_vIiiE", {{.*}} templateParams: ![[PARAMS:[0-9]+]])
+// CHECK: ![[PARAMS]] = !{![[LHS:[0-9]+]], ![[RHS:[0-9]+]]}
+// CHECK: ![[LHS]] = !DITemplateTypeParameter(name: "LHS", type: ![[INT:[0-9]+]])
+// CHECK: ![[INT]] = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+// CHECK: ![[RHS]] = !DITemplateTypeParameter(name: "RHS", type: ![[INT]])

Modified: vendor/clang/dist-release_80/test/Driver/netbsd.c
==============================================================================
--- vendor/clang/dist-release_80/test/Driver/netbsd.c	Sat Jul  6 15:33:49 2019	(r349778)
+++ vendor/clang/dist-release_80/test/Driver/netbsd.c	Sat Jul  6 15:33:52 2019	(r349779)
@@ -446,3 +446,8 @@
 // PTHREAD-NOT: _POSIX_THREADS
 // PTHREAD:     _REENTRANT
 // PTHREAD-NOT: _POSIX_THREADS
+
+// Check PowerPC for Secure PLT
+// RUN: %clang -target powerpc-unknown-netbsd -### -c %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=POWERPC-SECUREPLT %s
+// POWERPC-SECUREPLT: "-target-feature" "+secure-plt"


More information about the svn-src-all mailing list