]> granicus.if.org Git - clang/commitdiff
Don't try to use C5/D5 comdats in COFF.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 16 Sep 2014 20:19:43 +0000 (20:19 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 16 Sep 2014 20:19:43 +0000 (20:19 +0000)
This should fix the mingw bootstrap.

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

lib/CodeGen/ItaniumCXXABI.cpp
test/CodeGenCXX/ctor-dtor-alias.cpp

index 038d890c9d68eb9bd7131aa72f2bebc47fa97836..4a24e77139f72bc08fb1ff5ffffb2bbb89911a59 100644 (file)
@@ -3029,8 +3029,12 @@ static StructorCodegen getCodegenToUse(CodeGenModule &CGM,
   if (!llvm::GlobalAlias::isValidLinkage(Linkage))
     return StructorCodegen::RAUW;
 
-  if (llvm::GlobalValue::isWeakForLinker(Linkage))
-    return StructorCodegen::COMDAT;
+  if (llvm::GlobalValue::isWeakForLinker(Linkage)) {
+    // Only ELF supports COMDATs with arbitrary names (C5/D5).
+    if (CGM.getTarget().getTriple().isOSBinFormatELF())
+      return StructorCodegen::COMDAT;
+    return StructorCodegen::Emit;
+  }
 
   return StructorCodegen::Alias;
 }
index 10923d1bc7932afceb79108a0bc411f1248905d8..1ae9eada78cc104ae3ce6ab7bb31d4455f91c733 100644 (file)
@@ -8,6 +8,8 @@
 // RUN: FileCheck --check-prefix=CHECK5 --input-file=%t %s
 // RUN: FileCheck --check-prefix=CHECK6 --input-file=%t %s
 
+// RUN: %clang_cc1 %s -triple i686-pc-windows-gnu -emit-llvm -o - -mconstructor-aliases -O1 -disable-llvm-optzns | FileCheck --check-prefix=COFF %s
+
 namespace test1 {
 // Test that we produce the apropriate comdats when creating aliases to
 // weak_odr constructors and destructors.
@@ -19,6 +21,9 @@ namespace test1 {
 // CHECK1: define weak_odr void @_ZN5test16foobarIvED0Ev({{.*}} comdat $_ZN5test16foobarIvED5Ev
 // CHECK1-NOT: comdat
 
+// COFF doesn't support comdats with arbitrary names (C5/D5).
+// COFF-NOT: comdat
+
 template <typename T>
 struct foobar {
   foobar() {}