aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/Linker/comdat-nonprevailing-decl.ll
blob: 30dd0e0abf8c56cb07853d001fd2332677c40ef9 (plain)
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
49
50
51
52
53
54
; RUN: rm -rf %t && split-file %s %t
; RUN: llvm-link -S %t/1.ll %t/1-aux.ll -o - | FileCheck %s
; RUN: llvm-link -S %t/2.ll %t/2-aux.ll -o - | FileCheck %s --check-prefix=CHECK2

;--- 1.ll
$c = comdat any

@v = global i32 0, comdat ($c)

; CHECK: @v = global i32 0, comdat($c)
; CHECK: @v3 = external global i32
; CHECK: @v2 = external dllexport global i32

;--- 1-aux.ll
$c = comdat any

@v2 = weak dllexport global i32 0, comdat ($c)
define ptr @f2() {
  ret ptr @v2
}

@v3 = weak alias i32, ptr @v2
define ptr @f3() {
  ret ptr @v3
}

;--- 2.ll
;; Check that a private global variable from a non-prevailing comdat group is
;; converted into 'available_externally' and excluded from the comdat group.

; CHECK2: $__profc_foo = comdat any
; CHECK2: @llvm.compiler.used = appending global [2 x ptr] [ptr @__profd_foo.[[SUFFIX:[0-9]+]], ptr @__profd_foo]
; CHECK2: @__profd_foo.[[SUFFIX]] = private global ptr @__profc_foo, comdat($__profc_foo)
; CHECK2: @__profc_foo = linkonce_odr global i64 1, comdat
; CHECK2: @__profd_foo = available_externally dso_local global ptr @__profc_foo{{$}}

$__profc_foo = comdat any
@__profc_foo = linkonce_odr global i64 1, comdat
@__profd_foo = private global ptr @__profc_foo, comdat($__profc_foo)
@llvm.compiler.used = appending global [1 x ptr] [ ptr @__profd_foo ]

define ptr @bar() {
  ret ptr @__profc_foo
}

;--- 2-aux.ll
$__profc_foo = comdat any
@__profc_foo = linkonce_odr global i64 1, comdat
@__profd_foo = private global ptr @__profc_foo, comdat($__profc_foo)
@llvm.compiler.used = appending global [1 x ptr] [ ptr @__profd_foo ]

define ptr @baz() {
  ret ptr @__profc_foo
}