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