1*67e74705SXin Li // RUN: %clang_cc1 %s -fno-rtti -triple=i386-pc-win32 -fms-extensions -emit-llvm -o - -O1 -disable-llvm-optzns | FileCheck %s -check-prefix=NO-RTTI 2*67e74705SXin Li // RUN: %clang_cc1 %s -triple=i386-pc-win32 -fms-extensions -emit-llvm -o - -O1 -disable-llvm-optzns | FileCheck %s -check-prefix=RTTI 3*67e74705SXin Li 4*67e74705SXin Li // RTTI-DAG: $"\01??_7S@@6B@" = comdat largest 5*67e74705SXin Li // RTTI-DAG: $"\01??_7V@@6B@" = comdat largest 6*67e74705SXin Li 7*67e74705SXin Li struct S { 8*67e74705SXin Li virtual ~S(); 9*67e74705SXin Li } s; 10*67e74705SXin Li 11*67e74705SXin Li // RTTI-DAG: [[VTABLE_S:@.*]] = private unnamed_addr constant [2 x i8*] [i8* bitcast ({{.*}} @"\01??_R4S@@6B@" to i8*), i8* bitcast ({{.*}} @"\01??_GS@@UAEPAXI@Z" to i8*)], comdat($"\01??_7S@@6B@") 12*67e74705SXin Li // RTTI-DAG: @"\01??_7S@@6B@" = unnamed_addr alias i8*, getelementptr inbounds ([2 x i8*], [2 x i8*]* [[VTABLE_S]], i32 0, i32 1) 13*67e74705SXin Li 14*67e74705SXin Li // NO-RTTI-DAG: @"\01??_7S@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GS@@UAEPAXI@Z" to i8*)] 15*67e74705SXin Li 16*67e74705SXin Li struct __declspec(dllimport) U { 17*67e74705SXin Li virtual ~U(); 18*67e74705SXin Li } u; 19*67e74705SXin Li 20*67e74705SXin Li // RTTI-DAG: [[VTABLE_U:@.*]] = private unnamed_addr constant [2 x i8*] [i8* bitcast ({{.*}} @"\01??_R4U@@6B@" to i8*), i8* bitcast ({{.*}} @"\01??_GU@@UAEPAXI@Z" to i8*)] 21*67e74705SXin Li // RTTI-DAG: @"\01??_SU@@6B@" = unnamed_addr alias i8*, getelementptr inbounds ([2 x i8*], [2 x i8*]* [[VTABLE_U]], i32 0, i32 1) 22*67e74705SXin Li 23*67e74705SXin Li // NO-RTTI-DAG: @"\01??_SU@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GU@@UAEPAXI@Z" to i8*)] 24*67e74705SXin Li 25*67e74705SXin Li struct __declspec(dllexport) V { 26*67e74705SXin Li virtual ~V(); 27*67e74705SXin Li } v; 28*67e74705SXin Li 29*67e74705SXin Li // RTTI-DAG: [[VTABLE_V:@.*]] = private unnamed_addr constant [2 x i8*] [i8* bitcast ({{.*}} @"\01??_R4V@@6B@" to i8*), i8* bitcast ({{.*}} @"\01??_GV@@UAEPAXI@Z" to i8*)], comdat($"\01??_7V@@6B@") 30*67e74705SXin Li // RTTI-DAG: @"\01??_7V@@6B@" = dllexport unnamed_addr alias i8*, getelementptr inbounds ([2 x i8*], [2 x i8*]* [[VTABLE_V]], i32 0, i32 1) 31*67e74705SXin Li 32*67e74705SXin Li // NO-RTTI-DAG: @"\01??_7V@@6B@" = weak_odr dllexport unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GV@@UAEPAXI@Z" to i8*)] 33*67e74705SXin Li 34*67e74705SXin Li namespace { 35*67e74705SXin Li struct W { ~W__anonfd96ce850111::W36*67e74705SXin Li virtual ~W() {} 37*67e74705SXin Li } w; 38*67e74705SXin Li } 39*67e74705SXin Li // RTTI-DAG: [[VTABLE_W:@.*]] = private unnamed_addr constant [2 x i8*] [i8* bitcast ({{.*}} @"\01??_R4W@?A@@6B@" to i8*), i8* bitcast ({{.*}} @"\01??_GW@?A@@UAEPAXI@Z" to i8*)] 40*67e74705SXin Li // RTTI-DAG: @"\01??_7W@?A@@6B@" = internal unnamed_addr alias i8*, getelementptr inbounds ([2 x i8*], [2 x i8*]* [[VTABLE_W]], i32 0, i32 1) 41*67e74705SXin Li 42*67e74705SXin Li // NO-RTTI-DAG: @"\01??_7W@?A@@6B@" = internal unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GW@?A@@UAEPAXI@Z" to i8*)] 43*67e74705SXin Li 44*67e74705SXin Li struct X {}; 45*67e74705SXin Li template <class> struct Y : virtual X { YY46*67e74705SXin Li Y() {} 47*67e74705SXin Li virtual ~Y(); 48*67e74705SXin Li }; 49*67e74705SXin Li 50*67e74705SXin Li extern template class Y<int>; 51*67e74705SXin Li template Y<int>::Y(); 52*67e74705SXin Li // RTTI-DAG: [[VTABLE_Y:@.*]] = private unnamed_addr constant [2 x i8*] [i8* bitcast (%rtti.CompleteObjectLocator* @"\01??_R4?$Y@H@@6B@" to i8*), i8* bitcast (i8* (%struct.Y*, i32)* @"\01??_G?$Y@H@@UAEPAXI@Z" to i8*)], comdat($"\01??_7?$Y@H@@6B@") 53*67e74705SXin Li // RTTI-DAG: @"\01??_7?$Y@H@@6B@" = unnamed_addr alias i8*, getelementptr inbounds ([2 x i8*], [2 x i8*]* [[VTABLE_Y]], i32 0, i32 1) 54*67e74705SXin Li 55*67e74705SXin Li // NO-RTTI-DAG: @"\01??_7?$Y@H@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast (i8* (%struct.Y*, i32)* @"\01??_G?$Y@H@@UAEPAXI@Z" to i8*)], comdat 56