diff --git a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 55e175680be..8820d10a0c6 100644 --- a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -626,7 +626,9 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, cast(GV)) < 32) return UStringSection; - if (Kind.isMergeableConst()) { + // With MachO only variables whose corresponding symbol starts with 'l' or + // 'L' can be merged, so we only try merging GVs with private linkage. + if (GV->hasPrivateLinkage() && Kind.isMergeableConst()) { if (Kind.isMergeableConst4()) return FourByteConstantSection; if (Kind.isMergeableConst8()) diff --git a/test/CodeGen/X86/global-sections.ll b/test/CodeGen/X86/global-sections.ll index c763f3947e5..fa1169d8a8e 100644 --- a/test/CodeGen/X86/global-sections.ll +++ b/test/CodeGen/X86/global-sections.ll @@ -53,21 +53,20 @@ define void @F1() { ; _Complex long long const G4 = 34; -@G4 = unnamed_addr constant {i64,i64} { i64 34, i64 0 } +@G4 = private unnamed_addr constant {i64,i64} { i64 34, i64 0 } ; DARWIN: .section __TEXT,__literal16,16byte_literals -; DARWIN: _G4: +; DARWIN: L_G4: ; DARWIN: .long 34 ; DARWIN-STATIC: .section __TEXT,__literal16,16byte_literals -; DARWIN-STATIC: _G4: +; DARWIN-STATIC: L_G4: ; DARWIN-STATIC: .long 34 ; DARWIN64: .section __TEXT,__literal16,16byte_literals -; DARWIN64: _G4: +; DARWIN64: L_G4: ; DARWIN64: .quad 34 - ; int G5 = 47; @G5 = global i32 47 @@ -194,3 +193,23 @@ define void @F1() { ; WIN32-SECTIONS: L_G14: ; WIN32-SECTIONS: .asciz "foo" +; cannot be merged on MachO, but can on other formats. +@G15 = unnamed_addr constant i64 0 + +; LINUX: .section .rodata.cst8,"aM",@progbits,8 +; LINUX: G15: + +; DARWIN: .section __TEXT,__const +; DARWIN: _G15: + +; DARWIN-STATIC: .section __TEXT,__const +; DARWIN-STATIC: _G15: + +; DARWIN64: .section __TEXT,__const +; DARWIN64: _G15: + +; LINUX-SECTIONS: .section .rodata.G15,"aM",@progbits,8 +; LINUX-SECTIONS: G15: + +; WIN32-SECTIONS: .section .rdata,"rd",one_only,_G15 +; WIN32-SECTIONS: _G15: