1 | // RUN: %clang_cc1 %s -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %s |
2 | |
3 | template<class T> class A { |
4 | public: |
5 | A() {} |
6 | virtual void a() {} |
7 | }; |
8 | class B : A<int> { |
9 | B(); |
10 | }; |
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 {{(dso_local )?}}unnamed_addr constant |
20 | // CHECK: @_ZTV1AIlE = weak_odr {{(dso_local )?}}unnamed_addr constant |
21 | // CHECK: @_ZTV1AIsE = weak_odr {{(dso_local )?}}unnamed_addr constant |
22 | // CHECK: @_ZTV1AIiE = linkonce_odr {{(dso_local )?}}unnamed_addr constant |
23 | |
24 | template<class T> struct C { |
25 | virtual void c() {} |
26 | }; |
27 | struct D : C<int> { |
28 | virtual void d(); |
29 | }; |
30 | void D::d() {} |
31 | |
32 | // CHECK: define {{.*}}@_ZN1CIiE1cEv( |
33 | |