Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-apple-macosx10.8 -std=c++1y -S -emit-llvm %s -o - | FileCheck %s |
Bill Wendling | 4e3b54b | 2013-05-02 19:18:03 +0000 | [diff] [blame] | 2 | |
| 3 | // CHECK: @a = internal thread_local global |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 4 | // CHECK: @_Z2vtIiE = internal thread_local global i32 5 |
| 5 | // CHECK: @_ZZ3inlvE3loc = linkonce_odr thread_local global i32 0 |
Bill Wendling | 4e3b54b | 2013-05-02 19:18:03 +0000 | [diff] [blame] | 6 | // CHECK: @_tlv_atexit({{.*}}@_ZN1AD1Ev |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 7 | // CHECK: call i32* @_ZTW3ext() |
| 8 | // CHECK: declare i32* @_ZTW3ext() |
| 9 | // CHECK: define weak i32* @_ZTW2vtIiE() |
| 10 | // CHECK: define weak i32* @_ZTW2vtIvE() |
| 11 | // CHECK: define {{.*}} @_ZTW1a |
Bill Wendling | 4e3b54b | 2013-05-02 19:18:03 +0000 | [diff] [blame] | 12 | |
| 13 | struct A { |
| 14 | ~A(); |
| 15 | }; |
| 16 | |
| 17 | thread_local A a; |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 18 | |
| 19 | extern thread_local int ext; |
| 20 | int &get_ext() { return ext; } |
| 21 | |
| 22 | template <typename T> |
| 23 | thread_local int vt = 5; |
| 24 | |
| 25 | int get_vt() { return vt<int>; } |
| 26 | |
| 27 | inline int &inl() { |
| 28 | thread_local int loc; |
| 29 | return loc; |
| 30 | } |
| 31 | int &use_inl() { return inl(); } |
| 32 | |
| 33 | template int vt<void>; |
| 34 | int &get_vt_void() { return vt<void>; } |