summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-10-12 21:21:22 +0000
committerDouglas Gregor <dgregor@apple.com>2009-10-12 21:21:22 +0000
commita2fe1fe208499acff9a9d1ea1a1ceed1056acf2b (patch)
treed0076f5c934228d7f3c5df840d7787c2ac8d727c
parent1d116976b4d6357b2c3be099fbf5d718b1d5cea7 (diff)
downloadbcm5719-llvm-a2fe1fe208499acff9a9d1ea1a1ceed1056acf2b.tar.gz
bcm5719-llvm-a2fe1fe208499acff9a9d1ea1a1ceed1056acf2b.zip
Yet another test for explicit specialization, this one involving linkage
llvm-svn: 83901
-rw-r--r--clang/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/clang/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp b/clang/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp
new file mode 100644
index 00000000000..a5d5b9e3c41
--- /dev/null
+++ b/clang/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp
@@ -0,0 +1,42 @@
+// RUN: clang-cc -emit-llvm -o - %s | FileCheck %s
+
+template<class T> void f(T) { /* ... */ }
+template<class T> inline void g(T) { /* ... */ }
+
+// CHECK: define void @_Z1gIiEvT_
+template<> void g<>(int) { /* ... */ }
+
+template<class T>
+struct X {
+ void f() { }
+ void g();
+ void h();
+};
+
+template<class T>
+void X<T>::g() {
+}
+
+template<class T>
+inline void X<T>::h() {
+}
+
+// CHECK: define void @_ZN1XIiE1fEv
+template<> void X<int>::f() { }
+
+// CHECK: define void @_ZN1XIiE1hEv
+template<> void X<int>::h() { }
+
+// CHECK: define linkonce_odr void @_Z1fIiEvT_
+template<> inline void f<>(int) { /* ... */ }
+
+// CHECK: define linkonce_odr void @_ZN1XIiE1gEv
+template<> inline void X<int>::g() { }
+
+void test(X<int> xi) {
+ f(17);
+ g(17);
+ xi.f();
+ xi.g();
+ xi.h();
+}
OpenPOWER on IntegriCloud