| // RUN: %clang_cc1 -triple i686-pc-linux-gnu -emit-llvm -o - %s | FileCheck %s |
| |
| // CHECK: @b = external thread_local global |
| // CHECK: @d.e = internal thread_local global |
| // CHECK: @d.f = internal thread_local global |
| // CHECK: @f.a = internal thread_local(initialexec) global |
| // CHECK: @a = thread_local global |
| // CHECK: @g = thread_local global |
| // CHECK: @h = thread_local(localdynamic) global |
| // CHECK: @i = thread_local(initialexec) global |
| // CHECK: @j = thread_local(localexec) global |
| |
| // CHECK-NOT: @_ZTW |
| // CHECK-NOT: @_ZTH |
| |
| __thread int a; |
| extern __thread int b; |
| int c() { return *&b; } |
| int d() { |
| __thread static int e; |
| __thread static union {float a; int b;} f = {.b = 1}; |
| return 0; |
| } |
| |
| __thread int g __attribute__((tls_model("global-dynamic"))); |
| __thread int h __attribute__((tls_model("local-dynamic"))); |
| __thread int i __attribute__((tls_model("initial-exec"))); |
| __thread int j __attribute__((tls_model("local-exec"))); |
| |
| int f() { |
| __thread static int a __attribute__((tls_model("initial-exec"))); |
| return a++; |
| } |