• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
2 template<typename T> struct A {
fA3   virtual void f(T) { }
gA4   inline void g() { }
5 };
6 
7 // Explicit instantiations have external linkage.
8 
9 // CHECK: define weak_odr void @_ZN1AIiE1gEv(
10 template void A<int>::g();
11 
12 // CHECK: define weak_odr void @_ZN1AIfE1fEf(
13 // CHECK: define weak_odr void @_ZN1AIfE1gEv(
14 // FIXME: This should also emit the vtable.
15 template struct A<float>;
16 
17 // CHECK: define weak_odr void @_Z1fIiEvT_
f(T)18 template <typename T> void f(T) { }
19 template void f<int>(int);
20 
21 // CHECK: define weak_odr void @_Z1gIiEvT_
g(T)22 template <typename T> inline void g(T) { }
23 template void g<int>(int);
24 
25 template<typename T>
26 struct X0 {
~X0X027   virtual ~X0() { }
28 };
29 
30 template<typename T>
31 struct X1 : X0<T> {
32   virtual void blarg();
33 };
34 
blarg()35 template<typename T> void X1<T>::blarg() { }
36 
37 extern template struct X0<char>;
38 extern template struct X1<char>;
39 
40 // CHECK: define linkonce_odr void @_ZN2X1IcED1Ev(%struct.X1* %this) unnamed_addr
test_X1()41 void test_X1() {
42   X1<char> i1c;
43 }
44 
45