summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/cxx11-thread-local-reference.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-04-19 16:42:07 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-04-19 16:42:07 +0000
commit2fd1d7aee3cc168e0d9b78ca53fb2c1fc6684705 (patch)
tree62e445b7ece6c358846e067997a9d3ac2cb084c0 /clang/test/CodeGenCXX/cxx11-thread-local-reference.cpp
parent6ac9d13e610dc9005660594ee4325483d2c97fb4 (diff)
downloadbcm5719-llvm-2fd1d7aee3cc168e0d9b78ca53fb2c1fc6684705.tar.gz
bcm5719-llvm-2fd1d7aee3cc168e0d9b78ca53fb2c1fc6684705.zip
Implement CodeGen for C++11 thread_local, following the Itanium ABI specification as discussed on cxx-abi-dev.
llvm-svn: 179858
Diffstat (limited to 'clang/test/CodeGenCXX/cxx11-thread-local-reference.cpp')
-rw-r--r--clang/test/CodeGenCXX/cxx11-thread-local-reference.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/cxx11-thread-local-reference.cpp b/clang/test/CodeGenCXX/cxx11-thread-local-reference.cpp
new file mode 100644
index 00000000000..2ea9acda481
--- /dev/null
+++ b/clang/test/CodeGenCXX/cxx11-thread-local-reference.cpp
@@ -0,0 +1,26 @@
+// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s
+
+int &f();
+
+// CHECK: @r = thread_local global i32* null
+thread_local int &r = f();
+
+// CHECK: @_ZTH1r = alias void ()* @__tls_init
+
+int &g() { return r; }
+
+// CHECK: define {{.*}} @[[R_INIT:.*]]()
+// CHECK: call i32* @_Z1fv()
+// CHECK: store i32* %{{.*}}, i32** @r, align 8
+
+// CHECK: define i32* @_Z1gv()
+// CHECK: call i32* @_ZTW1r()
+// CHECK: ret i32* %{{.*}}
+
+// CHECK: define weak_odr hidden i32* @_ZTW1r() {
+// CHECK: call void @_ZTH1r()
+// CHECK: load i32** @r, align 8
+// CHECK: ret i32* %{{.*}}
+
+// CHECK: define internal void @__tls_init()
+// CHECK: call void @[[R_INIT]]()
OpenPOWER on IntegriCloud