| // RUN: %clang_cc1 %s -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %s | |
| template<class T> class A { | |
| public: | |
| A() {} | |
| virtual void a() {} | |
| }; | |
| class B : A<int> { | |
| B(); | |
| }; | |
| B::B() {} | |
| template class A<long>; | |
| extern template class A<short>; | |
| template class A<short>; | |
| // CHECK: @_ZTV1B = linkonce_odr {{(dso_local )?}}unnamed_addr constant | |
| // CHECK: @_ZTV1AIlE = weak_odr {{(dso_local )?}}unnamed_addr constant | |
| // CHECK: @_ZTV1AIsE = weak_odr {{(dso_local )?}}unnamed_addr constant | |
| // CHECK: @_ZTV1AIiE = linkonce_odr {{(dso_local )?}}unnamed_addr constant | |
| template<class T> struct C { | |
| virtual void c() {} | |
| }; | |
| struct D : C<int> { | |
| virtual void d(); | |
| }; | |
| void D::d() {} | |
| // CHECK: define {{.*}}@_ZN1CIiE1cEv( |