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