1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I3._iv2" = global i64 8, section "__DATA, __objc_ivar", align 8 4*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I3._iv3" = global i64 12, section "__DATA, __objc_ivar", align 8 5*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I3" = private global {{.*}} { i32 0, i32 8, i32 13 6*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I4._iv4" = global i64 13, section "__DATA, __objc_ivar", align 8 7*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I4" = private global {{.*}} { i32 0, i32 13, i32 14, {{.*}} 8*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I5._iv6_synth" = hidden global i64 16, section "__DATA, __objc_ivar", align 8 9*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I5._iv7_synth" = hidden global i64 20, section "__DATA, __objc_ivar", align 8 10*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I5._iv5" = global i64 14, section "__DATA, __objc_ivar", align 8 11*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I5" = private global {{.*}} { i32 0, i32 14, i32 24, {{.*}} 12*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I6.iv0" = global i64 0, section "__DATA, __objc_ivar", align 8 13*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I6" = private global {{.*}} { i32 2, i32 0, i32 1, {{.*}} 14*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I8.b" = global i64 8, section "__DATA, __objc_ivar", align 8 15*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I8" = private global {{.*}} { i32 0, i32 8, i32 16, {{.*}} 16*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I9.iv0" = global i64 0, section "__DATA, __objc_ivar", align 8 17*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I9" = private global {{.*}} { i32 2, i32 0, i32 4, {{.*}} 18*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I10.iv1" = global i64 4, section "__DATA, __objc_ivar", align 8 19*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I10" = private global {{.*}} { i32 0, i32 4, i32 5, {{.*}} 20*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I11" = private global {{.*}} { i32 0, i32 5, i32 5, {{.*}} 21*67e74705SXin Li// CHECK: @"OBJC_IVAR_$_I12.iv2" = global i64 8, section "__DATA, __objc_ivar", align 8 22*67e74705SXin Li// CHECK: _OBJC_CLASS_RO_$_I12" = private global {{.*}} { i32 0, i32 8, i32 12, {{.*}} 23*67e74705SXin Li 24*67e74705SXin Li/* 25*67e74705SXin Li Compare to: 26*67e74705SXin Li gcc -m64 -S -o - interface-layout-64.m | grep '^_OBJC_IVAR_$_*{{.*}}' -A 1 27*67e74705SXin Li and 28*67e74705SXin Li gcc -m64 -S -o - interface-layout-64.m | grep '^l{{.*}}_CLASS_RO_$_I[0-9]*' -A 3 29*67e74705SXin Li */ 30*67e74705SXin Li 31*67e74705SXin Listruct s0 { 32*67e74705SXin Li double x; 33*67e74705SXin Li}; 34*67e74705SXin Li 35*67e74705SXin Li@interface I2 { 36*67e74705SXin Li struct s0 _iv1; 37*67e74705SXin Li} 38*67e74705SXin Li@end 39*67e74705SXin Li 40*67e74705SXin Li@interface I3 : I2 { 41*67e74705SXin Li unsigned int _iv2 :1; 42*67e74705SXin Li unsigned : 0; 43*67e74705SXin Li unsigned int _iv3 : 3; 44*67e74705SXin Li} 45*67e74705SXin Li@end 46*67e74705SXin Li 47*67e74705SXin Li@interface I4 : I3 { 48*67e74705SXin Li char _iv4; 49*67e74705SXin Li} 50*67e74705SXin Li@end 51*67e74705SXin Li 52*67e74705SXin Li@interface I5 : I4 { 53*67e74705SXin Li char _iv5; 54*67e74705SXin Li} 55*67e74705SXin Li 56*67e74705SXin Li@property int prop0; 57*67e74705SXin Li@end 58*67e74705SXin Li 59*67e74705SXin Li@implementation I3 60*67e74705SXin Li@end 61*67e74705SXin Li 62*67e74705SXin Li@implementation I4 63*67e74705SXin Li@end 64*67e74705SXin Li 65*67e74705SXin Li@interface I5 () 66*67e74705SXin Li@property int prop1; 67*67e74705SXin Li@property char prop2; 68*67e74705SXin Li@end 69*67e74705SXin Li 70*67e74705SXin Li@implementation I5 71*67e74705SXin Li@synthesize prop0 = _iv6_synth; 72*67e74705SXin Li@synthesize prop1 = _iv7_synth; 73*67e74705SXin Li@synthesize prop2 = _iv5; 74*67e74705SXin Li@end 75*67e74705SXin Li 76*67e74705SXin Li// The size rounds up to the next available byte. 77*67e74705SXin Li@interface I6 { 78*67e74705SXin Li unsigned iv0 : 2; 79*67e74705SXin Li} 80*67e74705SXin Li@end 81*67e74705SXin Li@implementation I6 82*67e74705SXin Li@end 83*67e74705SXin Li 84*67e74705SXin Li// The start of the subclass includes padding for its own alignment. 85*67e74705SXin Li@interface I7 { 86*67e74705SXin Li char a; 87*67e74705SXin Li} 88*67e74705SXin Li@end 89*67e74705SXin Li@interface I8 : I7 { 90*67e74705SXin Li double b; 91*67e74705SXin Li} 92*67e74705SXin Li@end 93*67e74705SXin Li@implementation I8 94*67e74705SXin Li@end 95*67e74705SXin Li 96*67e74705SXin Li// Padding bit-fields 97*67e74705SXin Li@interface I9 { 98*67e74705SXin Li unsigned iv0 : 2; 99*67e74705SXin Li unsigned : 0; 100*67e74705SXin Li} 101*67e74705SXin Li@end 102*67e74705SXin Li@implementation I9 103*67e74705SXin Li@end 104*67e74705SXin Li@interface I10 : I9 { 105*67e74705SXin Li unsigned iv1 : 2; 106*67e74705SXin Li} 107*67e74705SXin Li@end 108*67e74705SXin Li@implementation I10 109*67e74705SXin Li@end 110*67e74705SXin Li 111*67e74705SXin Li// Empty structures 112*67e74705SXin Li@interface I11 : I10 113*67e74705SXin Li@end 114*67e74705SXin Li@implementation I11 115*67e74705SXin Li@end 116*67e74705SXin Li@interface I12 : I11 { 117*67e74705SXin Li unsigned iv2; 118*67e74705SXin Li} 119*67e74705SXin Li@end 120*67e74705SXin Li@implementation I12 121*67e74705SXin Li@end 122