1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck --check-prefix=CHECK --check-prefix=LINUX %s 2*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple x86_64-apple-darwin12 | FileCheck --check-prefix=CHECK --check-prefix=DARWIN %s 3*67e74705SXin Li 4*67e74705SXin Li int &f(); 5*67e74705SXin Li 6*67e74705SXin Li // LINUX: @r = thread_local global i32* null 7*67e74705SXin Li // DARWIN: @r = internal thread_local global i32* null 8*67e74705SXin Li thread_local int &r = f(); 9*67e74705SXin Li 10*67e74705SXin Li // LINUX: @_ZTH1r = alias void (), void ()* @__tls_init 11*67e74705SXin Li // DARWIN: @_ZTH1r = internal alias void (), void ()* @__tls_init 12*67e74705SXin Li g()13*67e74705SXin Liint &g() { return r; } 14*67e74705SXin Li 15*67e74705SXin Li // CHECK: define {{.*}} @[[R_INIT:.*]]() 16*67e74705SXin Li // CHECK: call dereferenceable({{[0-9]+}}) i32* @_Z1fv() 17*67e74705SXin Li // CHECK: store i32* %{{.*}}, i32** @r, align 8 18*67e74705SXin Li 19*67e74705SXin Li // CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z1gv() 20*67e74705SXin Li // LINUX: call i32* @_ZTW1r() 21*67e74705SXin Li // DARWIN: call cxx_fast_tlscc i32* @_ZTW1r() 22*67e74705SXin Li // CHECK: ret i32* %{{.*}} 23*67e74705SXin Li 24*67e74705SXin Li // LINUX: define weak_odr hidden i32* @_ZTW1r() [[ATTR0:#[0-9]+]] { 25*67e74705SXin Li // DARWIN: define cxx_fast_tlscc i32* @_ZTW1r() [[ATTR1:#[0-9]+]] { 26*67e74705SXin Li // LINUX: call void @_ZTH1r() 27*67e74705SXin Li // DARWIN: call cxx_fast_tlscc void @_ZTH1r() 28*67e74705SXin Li // CHECK: load i32*, i32** @r, align 8 29*67e74705SXin Li // CHECK: ret i32* %{{.*}} 30*67e74705SXin Li 31*67e74705SXin Li // LINUX-LABEL: define internal void @__tls_init() 32*67e74705SXin Li // DARWIN-LABEL: define internal cxx_fast_tlscc void @__tls_init() 33*67e74705SXin Li // CHECK: call void @[[R_INIT]]() 34*67e74705SXin Li 35*67e74705SXin Li // LINUX: attributes [[ATTR0]] = { {{.*}}"target-features"{{.*}} } 36*67e74705SXin Li // DARWIN: attributes [[ATTR1]] = { {{.*}}nounwind{{.*}}"target-features"{{.*}} } 37