| # 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 |