1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // rdar://20636558 4*67e74705SXin Li 5*67e74705SXin Li #pragma GCC diagnostic ignored "-Wincompatible-ms-struct" 6*67e74705SXin Li #define ATTR __attribute__((__ms_struct__)) 7*67e74705SXin Li 8*67e74705SXin Li struct ATTR VBase { 9*67e74705SXin Li virtual void foo() = 0; 10*67e74705SXin Li }; 11*67e74705SXin Li 12*67e74705SXin Li struct ATTR Base : virtual VBase { 13*67e74705SXin Li virtual void bar() = 0; 14*67e74705SXin Li }; 15*67e74705SXin Li 16*67e74705SXin Li struct ATTR Derived : Base { 17*67e74705SXin Li Derived(); 18*67e74705SXin Li void foo(); 19*67e74705SXin Li void bar(); 20*67e74705SXin Li int value; 21*67e74705SXin Li }; 22*67e74705SXin Li 23*67e74705SXin Li // CHECK: [[DERIVED:%.*]] = type <{ [[BASE:%.*]], i32, [4 x i8] }> 24*67e74705SXin Li // CHECK: [[BASE]] = type { [[VBASE:%.*]] } 25*67e74705SXin Li // CHECK: [[VBASE]] = type { i32 (...)** } 26*67e74705SXin Li 27*67e74705SXin Li // CHECK: define void @_ZN7DerivedC2Ev 28*67e74705SXin Li // CHECK: [[SELF:%.*]] = load [[DERIVED]]* 29*67e74705SXin Li // CHECK: [[T0:%.*]] = bitcast [[DERIVED]]* [[SELF]] to [[BASE]]* 30*67e74705SXin Li // CHECK: call void @_ZN4BaseC2Ev([[BASE]]* [[T0]], i8** 31*67e74705SXin Li // CHECK: [[T0:%.*]] = getelementptr inbounds {{.*}} [[SELF]], i32 0, i32 1 32*67e74705SXin Li // CHECK: store i32 20, i32* [[T0]], Derived()33*67e74705SXin LiDerived::Derived() : value(20) {} 34