[cfe-commits] r83901 - /cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp

Douglas Gregor dgregor at apple.com
Mon Oct 12 14:21:22 PDT 2009


Author: dgregor
Date: Mon Oct 12 16:21:22 2009
New Revision: 83901

URL: http://llvm.org/viewvc/llvm-project?rev=83901&view=rev
Log:
Yet another test for explicit specialization, this one involving linkage

Added:
    cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp

Added: cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp?rev=83901&view=auto

==============================================================================
--- cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp (added)
+++ cfe/trunk/test/CXX/temp/temp.spec/temp.expl.spec/p14.cpp Mon Oct 12 16:21:22 2009
@@ -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();
+}





More information about the cfe-commits mailing list