1*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-pc-linux-gnu -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-GD 2*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-pc-linux-gnu -ftls-model=global-dynamic -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-GD 3*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-pc-linux-gnu -ftls-model=local-dynamic -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-LD 4*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-pc-linux-gnu -ftls-model=initial-exec -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-IE 5*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-pc-linux-gnu -ftls-model=local-exec -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-LE 6*67e74705SXin Li // 7*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-pc-linux-gnu -femulated-tls -emit-llvm -o - 2>&1 | \ 8*67e74705SXin Li // RUN: FileCheck %s -check-prefix=CHECK-GD 9*67e74705SXin Li 10*67e74705SXin Li int z1 = 0; 11*67e74705SXin Li int z2; 12*67e74705SXin Li int __thread x; f()13*67e74705SXin Liint f() { 14*67e74705SXin Li static int __thread y; 15*67e74705SXin Li return y++; 16*67e74705SXin Li } 17*67e74705SXin Li int __thread __attribute__((tls_model("initial-exec"))) z; 18*67e74705SXin Li 19*67e74705SXin Li // Note that unlike normal C uninitialized global variables, 20*67e74705SXin Li // uninitialized TLS variables do NOT have COMMON linkage. 21*67e74705SXin Li 22*67e74705SXin Li // CHECK-GD: @z1 = global i32 0 23*67e74705SXin Li // CHECK-GD: @f.y = internal thread_local global i32 0 24*67e74705SXin Li // CHECK-GD: @z2 = common global i32 0 25*67e74705SXin Li // CHECK-GD: @x = thread_local global i32 0 26*67e74705SXin Li // CHECK-GD: @z = thread_local(initialexec) global i32 0 27*67e74705SXin Li 28*67e74705SXin Li // CHECK-LD: @z1 = global i32 0 29*67e74705SXin Li // CHECK-LD: @f.y = internal thread_local(localdynamic) global i32 0 30*67e74705SXin Li // CHECK-LD: @z2 = common global i32 0 31*67e74705SXin Li // CHECK-LD: @x = thread_local(localdynamic) global i32 0 32*67e74705SXin Li // CHECK-LD: @z = thread_local(initialexec) global i32 0 33*67e74705SXin Li 34*67e74705SXin Li // CHECK-IE: @z1 = global i32 0 35*67e74705SXin Li // CHECK-IE: @f.y = internal thread_local(initialexec) global i32 0 36*67e74705SXin Li // CHECK-IE: @z2 = common global i32 0 37*67e74705SXin Li // CHECK-IE: @x = thread_local(initialexec) global i32 0 38*67e74705SXin Li // CHECK-IE: @z = thread_local(initialexec) global i32 0 39*67e74705SXin Li 40*67e74705SXin Li // CHECK-LE: @z1 = global i32 0 41*67e74705SXin Li // CHECK-LE: @f.y = internal thread_local(localexec) global i32 0 42*67e74705SXin Li // CHECK-LE: @z2 = common global i32 0 43*67e74705SXin Li // CHECK-LE: @x = thread_local(localexec) global i32 0 44*67e74705SXin Li // CHECK-LE: @z = thread_local(initialexec) global i32 0 45