1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm -std=c++11 -triple x86_64-pc-linux-gnu -o- %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // Global @x: 4*67e74705SXin Li // CHECK: [[X_GLOBAL:@[^ ]+]]{{.*}}thread_local global 5*67e74705SXin Li 6*67e74705SXin Li // returned somewhere in TLS wrapper: 7*67e74705SXin Li // CHECK: ret{{.*}}[[X_GLOBAL]] 8*67e74705SXin Li 9*67e74705SXin Li template <typename T> class unique_ptr { 10*67e74705SXin Li template <typename F, typename S> struct pair { 11*67e74705SXin Li F first; 12*67e74705SXin Li S second; 13*67e74705SXin Li }; 14*67e74705SXin Li pair<T *, int> data; 15*67e74705SXin Li public: unique_ptr()16*67e74705SXin Li constexpr unique_ptr() noexcept : data() {} unique_ptr(T * p)17*67e74705SXin Li explicit unique_ptr(T *p) noexcept : data() {} 18*67e74705SXin Li }; 19*67e74705SXin Li 20*67e74705SXin Li thread_local unique_ptr<int> x; main()21*67e74705SXin Liint main() { x = unique_ptr<int>(new int(5)); } 22*67e74705SXin Li 23