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