associative-comdat.s
1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# REQUIRES: x86
# RUN: llvm-mc -triple=x86_64-windows-msvc %s -filetype=obj -o %t1.obj
# RUN: llvm-mc -triple=x86_64-windows-msvc %S/Inputs/associative-comdat-2.s -filetype=obj -o %t2.obj
# RUN: lld-link -entry:main %t1.obj %t2.obj -out:%t.gc.exe
# RUN: llvm-readobj --sections %t.gc.exe | FileCheck %s
# RUN: lld-link -entry:main %t1.obj %t2.obj -opt:noref -out:%t.nogc.exe
# RUN: llvm-readobj --sections %t.nogc.exe | FileCheck %s
# CHECK: Sections [
# CHECK: Section {
# CHECK: Number: 2
# CHECK-LABEL: Name: .rdata (2E 72 64 61 74 61 00 00)
# This is the critical check to show that only *one* definition of
# foo_assoc was retained. This *must* be 8, not 16.
# CHECK-NEXT: VirtualSize: 0x8
# CHECK: Section {
# CHECK: Number: 3
# CHECK-LABEL: Name: .data (2E 64 61 74 61 00 00 00)
# CHECK-NEXT: VirtualSize: 0x4
.text
.def main;
.scl 2;
.type 32;
.endef
.globl main # -- Begin function main
.p2align 4, 0x90
main: # @main
# BB#0:
movl foo(%rip), %eax
retq
# -- End function
# Defines foo and foo_assoc globals. foo is comdat, and foo_assoc is comdat
# associative with it. foo_assoc should be discarded iff foo is discarded,
# either by linker GC or normal comdat merging.
.section .rdata,"dr",associative,foo
.p2align 3
.quad foo
.section .data,"dw",discard,foo
.globl foo # @foo
.p2align 2
foo:
.long 42