From: Rafael Espindola Date: Tue, 16 Sep 2014 20:19:43 +0000 (+0000) Subject: Don't try to use C5/D5 comdats in COFF. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=969bdb509e88634c8bd77d7524493a3c5d8b777d;p=clang Don't try to use C5/D5 comdats in COFF. This should fix the mingw bootstrap. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@217897 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/ItaniumCXXABI.cpp b/lib/CodeGen/ItaniumCXXABI.cpp index 038d890c9d..4a24e77139 100644 --- a/lib/CodeGen/ItaniumCXXABI.cpp +++ b/lib/CodeGen/ItaniumCXXABI.cpp @@ -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; } diff --git a/test/CodeGenCXX/ctor-dtor-alias.cpp b/test/CodeGenCXX/ctor-dtor-alias.cpp index 10923d1bc7..1ae9eada78 100644 --- a/test/CodeGenCXX/ctor-dtor-alias.cpp +++ b/test/CodeGenCXX/ctor-dtor-alias.cpp @@ -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 struct foobar { foobar() {}