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