forked from OSchip/llvm-project
Fix to make sure that a comdat group gets generated correctly for a static member
of instantiated C++ templates. Patch by Kristof Beyls! llvm-svn: 151250
This commit is contained in:
parent
585dda99f6
commit
a22828e085
|
@ -188,6 +188,7 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||
static const char *getSectionPrefixForGlobal(SectionKind Kind) {
|
||||
if (Kind.isText()) return ".text.";
|
||||
if (Kind.isReadOnly()) return ".rodata.";
|
||||
if (Kind.isBSS()) return ".bss.";
|
||||
|
||||
if (Kind.isThreadData()) return ".tdata.";
|
||||
if (Kind.isThreadBSS()) return ".tbss.";
|
||||
|
@ -216,7 +217,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||
// If this global is linkonce/weak and the target handles this by emitting it
|
||||
// into a 'uniqued' section name, create and return the section now.
|
||||
if ((GV->isWeakForLinker() || EmitUniquedSection) &&
|
||||
!Kind.isCommon() && !Kind.isBSS()) {
|
||||
!Kind.isCommon()) {
|
||||
const char *Prefix;
|
||||
Prefix = getSectionPrefixForGlobal(Kind);
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
; RUN: llc < %s -mtriple=arm-linux-gnueabi | FileCheck %s -check-prefix=ARMGNUEABI
|
||||
|
||||
; Checking that a comdat group gets generated correctly for a static member
|
||||
; of instantiated C++ templates.
|
||||
; see http://sourcery.mentor.com/public/cxx-abi/abi.html#vague-itemplate
|
||||
; section 5.2.6 Instantiated templates
|
||||
; "Any static member data object is emitted in a COMDAT identified by its mangled
|
||||
; name, in any object file with a reference to its name symbol."
|
||||
|
||||
; Case 1: variable is not explicitly initialized, and ends up in a .bss section
|
||||
; ARMGNUEABI: .section .bss._ZN1CIiE1iE,"aGw",%nobits,_ZN1CIiE1iE,comdat
|
||||
@_ZN1CIiE1iE = weak_odr global i32 0, align 4
|
||||
|
||||
; Case 2: variable is explicitly initialized, and ends up in a .data section
|
||||
; ARMGNUEABI: .section .data._ZN1CIiE1jE,"aGw",%progbits,_ZN1CIiE1jE,comdat
|
||||
@_ZN1CIiE1jE = weak_odr global i32 12, align 4
|
|
@ -0,0 +1,16 @@
|
|||
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s -check-prefix=X86LINUX
|
||||
|
||||
; Checking that a comdat group gets generated correctly for a static member
|
||||
; of instantiated C++ templates.
|
||||
; see http://sourcery.mentor.com/public/cxx-abi/abi.html#vague-itemplate
|
||||
; section 5.2.6 Instantiated templates
|
||||
; "Any static member data object is emitted in a COMDAT identified by its mangled
|
||||
; name, in any object file with a reference to its name symbol."
|
||||
|
||||
; Case 1: variable is not explicitly initialized, and ends up in a .bss section
|
||||
; X86LINUX: .section .bss._ZN1CIiE1iE,"aGw",@nobits,_ZN1CIiE1iE,comdat
|
||||
@_ZN1CIiE1iE = weak_odr global i32 0, align 4
|
||||
|
||||
; Case 2: variable is explicitly initialized, and ends up in a .data section
|
||||
; X86LINUX: .section .data._ZN1CIiE1jE,"aGw",@progbits,_ZN1CIiE1jE,comdat
|
||||
@_ZN1CIiE1jE = weak_odr global i32 12, align 4
|
Loading…
Reference in New Issue