summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/static-data-member-single-emission.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2015-04-11 01:25:36 +0000
committerReid Kleckner <reid@kleckner.net>2015-04-11 01:25:36 +0000
commit620d0ce55c5f8f797a292c7c5e01d1906bc148e5 (patch)
tree761cb4519e8aa6e09d36e5699eee31c6669615e2 /clang/test/CodeGenCXX/static-data-member-single-emission.cpp
parent63ffa21d9026e1478fd0fe3080454aacae2da0f7 (diff)
downloadbcm5719-llvm-620d0ce55c5f8f797a292c7c5e01d1906bc148e5.tar.gz
bcm5719-llvm-620d0ce55c5f8f797a292c7c5e01d1906bc148e5.zip
Only notify consumers about static data members of class templates once
llvm-svn: 234675
Diffstat (limited to 'clang/test/CodeGenCXX/static-data-member-single-emission.cpp')
-rw-r--r--clang/test/CodeGenCXX/static-data-member-single-emission.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/static-data-member-single-emission.cpp b/clang/test/CodeGenCXX/static-data-member-single-emission.cpp
new file mode 100644
index 00000000000..2b821a90b23
--- /dev/null
+++ b/clang/test/CodeGenCXX/static-data-member-single-emission.cpp
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
+
+template <typename T>
+struct HasStaticInit {
+static const int index;
+};
+int the_count = 0;
+template <typename T>
+const int HasStaticInit<T>::index = the_count++;
+
+template <typename T> int func_tmpl1() { return HasStaticInit<T>::index; }
+template <typename T> int func_tmpl2() { return HasStaticInit<T>::index; }
+template <typename T> int func_tmpl3() { return HasStaticInit<T>::index; }
+void useit() {
+ func_tmpl1<int>();
+ func_tmpl2<int>();
+ func_tmpl3<int>();
+}
+
+// Throw in a final explicit instantiation to see that it doesn't screw things
+// up.
+template struct HasStaticInit<int>;
+
+// There should only be one entry, not 3.
+// CHECK: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }]
+
+// There should only be one update to @the_count.
+// CHECK-NOT: store i32 %{{.*}}, i32* @the_count
+// CHECK: store i32 %{{.*}}, i32* @the_count
+// CHECK-NOT: store i32 %{{.*}}, i32* @the_count
OpenPOWER on IntegriCloud