Revert "Fix for PR32990"

This reverts commit r321239. It broke the Chromium DLL build:

[8834/50217] LINK(DLL) icui18n.dll icui18n.dll.lib icui18n.dll.pdb
FAILED: icui18n.dll icui18n.dll.lib icui18n.dll.pdb
zrule.obj : error LNK2001: unresolved external symbol
"__declspec(dllimport) public: void __cdecl icu_60::UnicodeString::`vbase destructor'(void)"
(__imp_??_DUnicodeString@icu_60@@QEAAXXZ)

llvm-svn: 321298
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 053c71d8..5bdf81a 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -856,25 +856,14 @@
   GVALinkage Linkage = getContext().GetGVALinkageForFunction(D);
 
   if (isa<CXXDestructorDecl>(D) &&
-      Context.getTargetInfo().getCXXABI().isMicrosoft()) {
-    switch (GD.getDtorType()) {
-    case CXXDtorType::Dtor_Base:
-      break;
-    case CXXDtorType::Dtor_Comdat:
-    case CXXDtorType::Dtor_Complete:
-      if (D->hasAttr<DLLImportAttr>() &&
-	  (cast<CXXDestructorDecl>(D)->getParent()->getNumVBases() ||
-	   (Linkage == GVA_AvailableExternally ||
-	    Linkage == GVA_StrongExternal)))
-	return llvm::Function::AvailableExternallyLinkage;
-      else
-        return Linkage == GVA_Internal ? llvm::GlobalValue::InternalLinkage
-                                       : llvm::GlobalValue::LinkOnceODRLinkage;
-    case CXXDtorType::Dtor_Deleting:
-      return Linkage == GVA_Internal ? llvm::GlobalValue::InternalLinkage
-                                     : llvm::GlobalValue::LinkOnceODRLinkage;
-    }
+      getCXXABI().useThunkForDtorVariant(cast<CXXDestructorDecl>(D),
+                                         GD.getDtorType())) {
+    // Destructor variants in the Microsoft C++ ABI are always internal or
+    // linkonce_odr thunks emitted on an as-needed basis.
+    return Linkage == GVA_Internal ? llvm::GlobalValue::InternalLinkage
+                                   : llvm::GlobalValue::LinkOnceODRLinkage;
   }
+
   if (isa<CXXConstructorDecl>(D) &&
       cast<CXXConstructorDecl>(D)->isInheritingConstructor() &&
       Context.getTargetInfo().getCXXABI().isMicrosoft()) {
@@ -890,25 +879,12 @@
 void CodeGenModule::setFunctionDLLStorageClass(GlobalDecl GD, llvm::Function *F) {
   const auto *FD = cast<FunctionDecl>(GD.getDecl());
 
-  if (dyn_cast_or_null<CXXDestructorDecl>(FD)) {
-    switch (GD.getDtorType()) {
-    case CXXDtorType::Dtor_Comdat:
-    case CXXDtorType::Dtor_Deleting: {
+  if (const auto *Dtor = dyn_cast_or_null<CXXDestructorDecl>(FD)) {
+    if (getCXXABI().useThunkForDtorVariant(Dtor, GD.getDtorType())) {
       // Don't dllexport/import destructor thunks.
       F->setDLLStorageClass(llvm::GlobalValue::DefaultStorageClass);
       return;
     }
-    case CXXDtorType::Dtor_Complete:
-      if (FD->hasAttr<DLLImportAttr>())
-        F->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
-      else if (FD->hasAttr<DLLExportAttr>())
-        F->setDLLStorageClass(llvm::GlobalVariable::DLLExportStorageClass);
-      else
-        F->setDLLStorageClass(llvm::GlobalVariable::DefaultStorageClass);
-      return;
-    case CXXDtorType::Dtor_Base:
-      break;
-    }
   }
 
   if (FD->hasAttr<DLLImportAttr>())