Home | History | Annotate | Download | only in temp.expl.spec
      1 // RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
      2 
      3 template<class T> void f(T) { /* ... */ }
      4 template<class T> inline void g(T) { /* ... */ }
      5 
      6 // CHECK: define void @_Z1gIiEvT_
      7 template<> void g<>(int) { /* ... */ }
      8 
      9 template<class T>
     10 struct X {
     11   void f() { }
     12   void g();
     13   void h();
     14 };
     15 
     16 template<class T>
     17 void X<T>::g() {
     18 }
     19 
     20 template<class T>
     21 inline void X<T>::h() {
     22 }
     23 
     24 // CHECK: define void @_ZN1XIiE1fEv
     25 template<> void X<int>::f() { }
     26 
     27 // CHECK: define void @_ZN1XIiE1hEv
     28 template<> void X<int>::h() { }
     29 
     30 // CHECK: define linkonce_odr void @_Z1fIiEvT_
     31 template<> inline void f<>(int) { /* ... */ }
     32 
     33 // CHECK: define linkonce_odr void @_ZN1XIiE1gEv
     34 template<> inline void X<int>::g() { }
     35 
     36 void test(X<int> xi) {
     37   f(17);
     38   g(17);
     39   xi.f();
     40   xi.g();
     41   xi.h();
     42 }
     43