xref: /aosp_15_r20/external/clang/test/CodeGenCXX/pr18635.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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 Li int main() { x = unique_ptr<int>(new int(5)); }
22*67e74705SXin Li 
23