xref: /aosp_15_r20/external/clang/test/CodeGen/thread-specifier.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple i686-pc-linux-gnu -emit-llvm -o - %s | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // CHECK: @b = external thread_local global
4*67e74705SXin Li // CHECK: @d.e = internal thread_local global
5*67e74705SXin Li // CHECK: @d.f = internal thread_local global
6*67e74705SXin Li // CHECK: @f.a = internal thread_local(initialexec) global
7*67e74705SXin Li // CHECK: @a = thread_local global
8*67e74705SXin Li // CHECK: @g = thread_local global
9*67e74705SXin Li // CHECK: @h = thread_local(localdynamic) global
10*67e74705SXin Li // CHECK: @i = thread_local(initialexec) global
11*67e74705SXin Li // CHECK: @j = thread_local(localexec) global
12*67e74705SXin Li 
13*67e74705SXin Li // CHECK-NOT: @_ZTW
14*67e74705SXin Li // CHECK-NOT: @_ZTH
15*67e74705SXin Li 
16*67e74705SXin Li __thread int a;
17*67e74705SXin Li extern __thread int b;
c()18*67e74705SXin Li int c() { return *&b; }
d()19*67e74705SXin Li int d() {
20*67e74705SXin Li   __thread static int e;
21*67e74705SXin Li   __thread static union {float a; int b;} f = {.b = 1};
22*67e74705SXin Li   return 0;
23*67e74705SXin Li }
24*67e74705SXin Li 
25*67e74705SXin Li __thread int g __attribute__((tls_model("global-dynamic")));
26*67e74705SXin Li __thread int h __attribute__((tls_model("local-dynamic")));
27*67e74705SXin Li __thread int i __attribute__((tls_model("initial-exec")));
28*67e74705SXin Li __thread int j __attribute__((tls_model("local-exec")));
29*67e74705SXin Li 
f()30*67e74705SXin Li int f() {
31*67e74705SXin Li   __thread static int a __attribute__((tls_model("initial-exec")));
32*67e74705SXin Li   return a++;
33*67e74705SXin Li }
34