Index: lib/CodeGen/TargetLoweringObjectFileImpl.cpp =================================================================== --- lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -1350,7 +1350,10 @@ MCSection *TargetLoweringObjectFileCOFF::getSectionForConstant( const DataLayout &DL, SectionKind Kind, const Constant *C, unsigned &Align) const { - if (Kind.isMergeableConst() && C) { + if (Kind.isMergeableConst() && C && + getContext().getAsmInfo()->hasCOFFAssociativeComdats()) { + // GNU binutils doesn't support the kind of symbol with a null + // storage class that this generates. const unsigned Characteristics = COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_LNK_COMDAT; Index: test/CodeGen/X86/win_cst_pool.ll =================================================================== --- test/CodeGen/X86/win_cst_pool.ll +++ test/CodeGen/X86/win_cst_pool.ll @@ -1,4 +1,5 @@ ; RUN: llc < %s -mtriple=x86_64-win32 -mattr=sse2 -mattr=avx | FileCheck %s +; RUN: llc < %s -mtriple=x86_64-win32-gnu -mattr=sse2 -mattr=avx | FileCheck -check-prefix=MINGW %s target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc" @@ -14,6 +15,14 @@ ; CHECK: movsd __real@0000000000800000(%rip), %xmm0 ; CHECK-NEXT: ret +; MINGW: .section .rdata,"dr" +; MINGW-NEXT: .p2align 3 +; MINGW-NEXT: [[LABEL:\.LC.*]]: +; MINGW-NEXT: .quad 8388608 +; MINGW: double: +; MINGW: movsd [[LABEL]](%rip), %xmm0 +; MINGW-NEXT: ret + define <4 x i32> @vec1() { ret <4 x i32> }