xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGenObjC/interface-layout-64.m (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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