blob: 2fbdb0773d0687ba3f25b95afc595b8cbe35d212 [file] [log] [blame]
Rafael Espindolafa9874c2018-02-07 19:16:49 +00001// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=STATIC %s
2// STATIC-DAG: @bar = external dso_local global i32
3// STATIC-DAG: @weak_bar = extern_weak dso_local global i32
4// STATIC-DAG: declare dso_local void @foo()
5// STATIC-DAG: @baz = dso_local global i32 42
6// STATIC-DAG: define dso_local i32* @zed()
7
8// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie -mpie-copy-relocations %s -o - | FileCheck --check-prefix=PIE-COPY %s
9// PIE-COPY-DAG: @bar = external dso_local global i32
10// PIE-COPY-DAG: @weak_bar = extern_weak global i32
11// PIE-COPY-DAG: declare dso_local void @foo()
12// PIE-COPY-DAG: @baz = dso_local global i32 42
13// PIE-COPY-DAG: define dso_local i32* @zed()
14
15// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie %s -o - | FileCheck --check-prefix=PIE %s
16// PIE-DAG: @bar = external global i32
17// PIE-DAG: @weak_bar = extern_weak global i32
18// PIE-DAG: declare dso_local void @foo()
19// PIE-DAG: @baz = dso_local global i32 42
20// PIE-DAG: define dso_local i32* @zed()
21
22// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -mrelocation-model static -fno-plt %s -o - | FileCheck --check-prefix=NOPLT %s
23// NOPLT-DAG: @bar = external dso_local global i32
24// NOPLT-DAG: @weak_bar = extern_weak dso_local global i32
25// NOPLT-DAG: declare void @foo()
26// NOPLT-DAG: @baz = dso_local global i32 42
27// NOPLT-DAG: define dso_local i32* @zed()
28
29// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -fno-plt -pic-is-pie -mpie-copy-relocations %s -o - | FileCheck --check-prefix=PIE-COPY-NOPLT %s
30// PIE-COPY-NOPLT-DAG: @bar = external dso_local global i32
31// PIE-COPY-NOPLT-DAG: @weak_bar = extern_weak global i32
32// PIE-COPY-NOPLT-DAG: declare void @foo()
33// PIE-COPY-NOPLT-DAG: @baz = dso_local global i32 42
34// PIE-COPY-NOPLT-DAG: define dso_local i32* @zed()
35
36// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie -fno-plt %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s
37// RUN: %clang_cc1 -triple powerpc64le-pc-linux -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s
38// PIE-NO-PLT-DAG: @bar = external global i32
39// PIE-NO-PLT-DAG: @weak_bar = extern_weak global i32
40// PIE-NO-PLT-DAG: declare void @foo()
41// PIE-NO-PLT-DAG: @baz = dso_local global i32 42
42// PIE-NO-PLT-DAG: define dso_local i32* @zed()
43
44// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm %s -o - | FileCheck --check-prefix=SHARED %s
45// SHARED-DAG: @bar = external global i32
46// SHARED-DAG: @weak_bar = extern_weak global i32
47// SHARED-DAG: declare void @foo()
48// SHARED-DAG: @baz = global i32 42
49// SHARED-DAG: define i32* @zed()
50
51extern int bar;
52__attribute__((weak)) extern int weak_bar;
53void foo(void);
54
55int baz = 42;
56int *zed() {
57 foo();
58 return baz ? &weak_bar : &bar;
59}