1// RUN: %clang_cc1 %s -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %s
2
3template<class T> class A {
4public:
5  A() {}
6  virtual void a() {}
7};
8class B : A<int> {
9  B();
10};
11B::B() {}
12
13template class A<long>;
14
15extern template class A<short>;
16template 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
24template<class T> struct C {
25  virtual void c() {}
26};
27struct D : C<int> {
28  virtual void d();
29};
30void D::d() {}
31
32// CHECK: define {{.*}}@_ZN1CIiE1cEv(
33