1 // RUN: %clang_cc1 %s -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %s
2
3 template<class T> class A {
4 public:
A()5 A() {}
a()6 virtual void a() {}
7 };
8 class B : A<int> {
9 B();
10 };
B()11 B::B() {}
12
13 template class A<long>;
14
15 extern template class A<short>;
16 template class A<short>;
17
18
19 // CHECK: @_ZTV1B = linkonce_odr unnamed_addr constant
20 // CHECK: @_ZTV1AIlE = weak_odr unnamed_addr constant
21 // CHECK: @_ZTV1AIsE = weak_odr unnamed_addr constant
22 // CHECK: @_ZTV1AIiE = linkonce_odr unnamed_addr constant
23
24 template<class T> struct C {
cC25 virtual void c() {}
26 };
27 struct D : C<int> {
28 virtual void d();
29 };
d()30 void D::d() {}
31
32 // CHECK: define {{.*}}@_ZN1CIiE1cEv(
33