1*67e74705SXin Li // RUN: %clang_cc1 %s -triple=x86_64-pc-windows-gnu -emit-llvm -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li namespace std { class type_info; } 4*67e74705SXin Li extern void use(const std::type_info &rtti); 5*67e74705SXin Li 6*67e74705SXin Li struct Test1a { 7*67e74705SXin Li Test1a(); 8*67e74705SXin Li virtual void foo(); 9*67e74705SXin Li virtual void bar(); 10*67e74705SXin Li }; 11*67e74705SXin Li 12*67e74705SXin Li // V-table needs to be defined weakly. Test1a()13*67e74705SXin LiTest1a::Test1a() { use(typeid(Test1a)); } 14*67e74705SXin Li // This defines the key function. foo()15*67e74705SXin Liinline void Test1a::foo() {} 16*67e74705SXin Li 17*67e74705SXin Li // CHECK: $_ZTV6Test1a = comdat any 18*67e74705SXin Li // CHECK: $_ZTS6Test1a = comdat any 19*67e74705SXin Li // CHECK: $_ZTI6Test1a = comdat any 20*67e74705SXin Li // CHECK-NOT: $_ZTS6Test1a.1 = comdat any 21*67e74705SXin Li // CHECK-NOT: $_ZTI6Test1a.1 = comdat any 22*67e74705SXin Li 23*67e74705SXin Li // CHECK: @_ZTV6Test1a = linkonce_odr unnamed_addr constant {{.*}} ({ i8*, i8* }* @_ZTI6Test1a to i8*) 24*67e74705SXin Li // CHECK: @_ZTS6Test1a = linkonce_odr constant 25*67e74705SXin Li // CHECK: @_ZTI6Test1a = linkonce_odr constant {{.*}} [8 x i8]* @_ZTS6Test1a 26