1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-apple-macosx10.8 -std=c++1y -S -emit-llvm %s -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // CHECK: @a = internal thread_local global 4*67e74705SXin Li // CHECK: @_Z2vtIiE = linkonce_odr thread_local global i32 5 5*67e74705SXin Li // CHECK: @_ZZ3inlvE3loc = linkonce_odr thread_local global i32 0 6*67e74705SXin Li // CHECK: @_tlv_atexit({{.*}}@_ZN1AD1Ev 7*67e74705SXin Li // CHECK: call cxx_fast_tlscc i32* @_ZTW3ext() 8*67e74705SXin Li // CHECK: declare cxx_fast_tlscc i32* @_ZTW3ext() 9*67e74705SXin Li // CHECK: define weak_odr hidden cxx_fast_tlscc i32* @_ZTW2vtIiE() 10*67e74705SXin Li // CHECK: define weak_odr hidden cxx_fast_tlscc i32* @_ZTW2vtIvE() 11*67e74705SXin Li // CHECK: define {{.*}} @_ZTW1a 12*67e74705SXin Li 13*67e74705SXin Li struct A { 14*67e74705SXin Li ~A(); 15*67e74705SXin Li }; 16*67e74705SXin Li 17*67e74705SXin Li thread_local A a; 18*67e74705SXin Li 19*67e74705SXin Li extern thread_local int ext; get_ext()20*67e74705SXin Liint &get_ext() { return ext; } 21*67e74705SXin Li 22*67e74705SXin Li template <typename T> 23*67e74705SXin Li thread_local int vt = 5; 24*67e74705SXin Li get_vt()25*67e74705SXin Liint get_vt() { return vt<int>; } 26*67e74705SXin Li inl()27*67e74705SXin Liinline int &inl() { 28*67e74705SXin Li thread_local int loc; 29*67e74705SXin Li return loc; 30*67e74705SXin Li } use_inl()31*67e74705SXin Liint &use_inl() { return inl(); } 32*67e74705SXin Li 33*67e74705SXin Li template int vt<void>; get_vt_void()34*67e74705SXin Liint &get_vt_void() { return vt<void>; } 35