summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/function-template-specialization.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-12-16 04:52:14 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-12-16 04:52:14 +0000
commit9963adeaefaf0dca48b8c207a3ed7098528f338c (patch)
treebd0cbced341e0970c7f18f4ae5ff0eba696e8aa9 /clang/test/CodeGenCXX/function-template-specialization.cpp
parent731089bbce16d5d40e0c89c24cbc9923623240c9 (diff)
downloadbcm5719-llvm-9963adeaefaf0dca48b8c207a3ed7098528f338c.tar.gz
bcm5719-llvm-9963adeaefaf0dca48b8c207a3ed7098528f338c.zip
AST: Fix the linkage of static vars in fn template specializations
We that static variables in function template specializations were externally visible. The manglers assumed that externally visible static variables were numbered in Sema. We would end up mangling static variables in the same specialization with the same mangling number which would give all of them the same name. This fixes PR21904. llvm-svn: 224316
Diffstat (limited to 'clang/test/CodeGenCXX/function-template-specialization.cpp')
-rw-r--r--clang/test/CodeGenCXX/function-template-specialization.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/function-template-specialization.cpp b/clang/test/CodeGenCXX/function-template-specialization.cpp
index eb099df14d0..7728f3dc746 100644
--- a/clang/test/CodeGenCXX/function-template-specialization.cpp
+++ b/clang/test/CodeGenCXX/function-template-specialization.cpp
@@ -1,4 +1,8 @@
// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple %s -o - | FileCheck %s
+
+// CHECK-DAG: _ZZN7PR219047GetDataIiEERKibE1i = internal global i32 4
+// CHECK-DAG: _ZZN7PR219047GetDataIiEERKibE1i_0 = internal global i32 2
+
template<typename T, typename U>
T* next(T* ptr, const U& diff);
@@ -24,3 +28,18 @@ void test2(int *iptr, double *dptr, int diff) {
// CHECK: _Z4nextIdiEPT_S1_RKT0_
dptr = next(dptr, diff);
}
+
+namespace PR21904 {
+template <typename>
+const int &GetData(bool);
+
+template <>
+const int &GetData<int>(bool b) {
+ static int i = 4;
+ if (b) {
+ static int i = 2;
+ return i;
+ }
+ return i;
+}
+}
OpenPOWER on IntegriCloud