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