vtable-linkage.cpp revision 31b7f52d8c8d459e80d2a72176cc7fcc4b7d8d38
1// RUN: clang-cc %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s 2 3namespace { 4 struct A { 5 virtual void f() { } 6 }; 7} 8 9void f() { A b; } 10 11struct B { 12 B(); 13 virtual void f(); 14}; 15 16B::B() { } 17 18struct C { 19 C(); 20 virtual void f() { } 21}; 22 23C::C() { } 24 25struct D { 26 virtual void f(); 27}; 28 29void D::f() { } 30 31// B has a key function that is not defined in this translation unit so its vtable 32// has external linkage. 33// CHECK: @_ZTV1B = external constant 34 35// C has no key function, so its vtable should have weak_odr linkage. 36// CHECK: @_ZTS1C = weak_odr constant 37// CHECK: @_ZTI1C = weak_odr constant 38// CHECK: @_ZTV1C = weak_odr constant 39 40// D has a key function that is defined in this translation unit so its vtable is 41// defined in the translation unit. 42// CHECK: @_ZTS1D = constant 43// CHECK: @_ZTI1D = constant 44// CHECK: @_ZTV1D = constant 45 46// The A vtable should have internal linkage since it is inside an anonymous 47// namespace. 48// CHECK: @_ZTSN12_GLOBAL__N_11AE = internal constant 49// CHECK: @_ZTIN12_GLOBAL__N_11AE = internal constant 50// CHECK: @_ZTVN12_GLOBAL__N_11AE = internal constant 51