// RUN: %clang_cc1 -triple x86_64-apple-macosx10.8 -std=c++1y -S -emit-llvm %s -o - | FileCheck %s

// CHECK: @a = internal thread_local global
// CHECK: @_Z2vtIiE = internal thread_local global i32 5
// CHECK: @_ZZ3inlvE3loc = linkonce_odr thread_local global i32 0
// CHECK: @_tlv_atexit({{.*}}@_ZN1AD1Ev
// CHECK: call i32* @_ZTW3ext()
// CHECK: declare i32* @_ZTW3ext()
// CHECK: define weak i32* @_ZTW2vtIiE()
// CHECK: define weak i32* @_ZTW2vtIvE()
// CHECK: define {{.*}} @_ZTW1a

struct A {
  ~A();
};

thread_local A a;

extern thread_local int ext;
int &get_ext() { return ext; }

template <typename T>
thread_local int vt = 5;

int get_vt() { return vt<int>; }

inline int &inl() {
  thread_local int loc;
  return loc;
}
int &use_inl() { return inl(); }

template int vt<void>;
int &get_vt_void() { return vt<void>; }
