1 // 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 // STATIC-DAG: @thread_var = external thread_local global i32
8 // STATIC-DAG: @local_thread_var = dso_local thread_local global i32 42
9 
10 // RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie -mpie-copy-relocations %s -o - | FileCheck --check-prefix=PIE-COPY %s
11 // PIE-COPY-DAG: @bar = external dso_local global i32
12 // PIE-COPY-DAG: @weak_bar = extern_weak global i32
13 // PIE-COPY-DAG: declare void @foo()
14 // PIE-COPY-DAG: @baz = dso_local global i32 42
15 // PIE-COPY-DAG: define dso_local i32* @zed()
16 // PIE-COPY-DAG: @thread_var = external thread_local global i32
17 // PIE-COPY-DAG: @local_thread_var = dso_local thread_local global i32 42
18 
19 // RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie %s -o - | FileCheck --check-prefix=PIE %s
20 // PIE-DAG: @bar = external global i32
21 // PIE-DAG: @weak_bar = extern_weak global i32
22 // PIE-DAG: declare void @foo()
23 // PIE-DAG: @baz = dso_local global i32 42
24 // PIE-DAG: define dso_local i32* @zed()
25 // PIE-DAG: @thread_var = external thread_local global i32
26 // PIE-DAG: @local_thread_var = dso_local thread_local global i32 42
27 
28 // RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -mrelocation-model static -fno-plt %s -o - | FileCheck --check-prefix=NOPLT %s
29 // NOPLT-DAG: @bar = external dso_local global i32
30 // NOPLT-DAG: @weak_bar = extern_weak dso_local global i32
31 // NOPLT-DAG: declare void @foo()
32 // NOPLT-DAG: @baz = dso_local global i32 42
33 // NOPLT-DAG: define dso_local i32* @zed()
34 // NOPLT-DAG: @thread_var = external thread_local global i32
35 // NOPLT-DAG: @local_thread_var = dso_local thread_local global i32 42
36 
37 // 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
38 // PIE-COPY-NOPLT-DAG: @bar = external dso_local global i32
39 // PIE-COPY-NOPLT-DAG: @weak_bar = extern_weak global i32
40 // PIE-COPY-NOPLT-DAG: declare void @foo()
41 // PIE-COPY-NOPLT-DAG: @baz = dso_local global i32 42
42 // PIE-COPY-NOPLT-DAG: define dso_local i32* @zed()
43 // PIE-COPY-NOPLT-DAG: @thread_var = external thread_local global i32
44 // PIE-COPY-NOPLT-DAG: @local_thread_var = dso_local thread_local global i32 42
45 
46 // RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie -fno-plt %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s
47 // RUN: %clang_cc1 -triple powerpc64le-pc-linux -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s
48 // PIE-NO-PLT-DAG: @bar = external global i32
49 // PIE-NO-PLT-DAG: @weak_bar = extern_weak global i32
50 // PIE-NO-PLT-DAG: declare void @foo()
51 // PIE-NO-PLT-DAG: @baz = dso_local global i32 42
52 // PIE-NO-PLT-DAG: define dso_local i32* @zed()
53 // PIE-NO-PLT-DAG: @thread_var = external thread_local global i32
54 // PIE-NO-PLT-DAG: @local_thread_var = dso_local thread_local global i32 42
55 
56 // RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm %s -o - | FileCheck --check-prefix=SHARED %s
57 // SHARED-DAG: @bar = external global i32
58 // SHARED-DAG: @weak_bar = extern_weak global i32
59 // SHARED-DAG: declare void @foo()
60 // SHARED-DAG: @baz = global i32 42
61 // SHARED-DAG: define i32* @zed()
62 // SHARED-DAG: @thread_var = external thread_local global i32
63 // SHARED-DAG: @local_thread_var = thread_local global i32 42
64 
65 extern int bar;
66 __attribute__((weak)) extern int weak_bar;
67 void foo(void);
68 
69 int baz = 42;
70 int *zed() {
71   foo();
72   return baz ? &weak_bar : &bar;
73 }
74 
75 extern __thread int thread_var;
76 __thread int local_thread_var = 42;
77 int *get_thread_var(int a) {
78   return a ? &thread_var : &local_thread_var;
79 }
80