blob: 1b8cc979d91d5be6948340aef04666d775c65058 [file] [log] [blame]
/* APPLE LOCAL file radar 5435299 */
/* Enforce order of generated ivars */
/* { dg-options "-m64 -lobjc" { target i?86*-*-darwin* } } */
/* { dg-options "-fobjc-new-property -lobjc" { target arm*-*-darwin* } } */
/* { dg-do run { target i?86*-*-darwin* arm*-*-darwin* } } */
#ifdef __OBJC2__
#import <objc/Object.h>
#import <objc/runtime.h>
#include <assert.h>
@interface Test8 : Object
{
int ivar1;
int ivar2;
}
// order of @property declarations has no effect on ivar order
@property int prop5;
@property int prop4;
@property int prop6;
@property int prop1;
@property int prop3;
@property int prop2;
@end
@implementation Test8
// resulting ivar order should be: { ivar1; ivar2; prop3; prop4; prop5; prop6; }
@synthesize prop1 = ivar1;
@synthesize prop5; // prop5 ivar is generated 1st after ivar2
@synthesize prop2 = ivar2;
@synthesize prop3, prop4, prop6;
@end
int main() {
Ivar ivar, ivar2, ivar3, ivar4, ivar5, ivar6;
ivar = class_getInstanceVariable([Test8 class], "ivar1");
assert(ivar);
ivar2 = class_getInstanceVariable([Test8 class], "ivar2");
assert(ivar2);
assert(ivar_getOffset(ivar) < ivar_getOffset(ivar2));
ivar3 = class_getInstanceVariable([Test8 class], "prop5");
assert(ivar3);
assert(ivar_getOffset(ivar2) < ivar_getOffset(ivar3));
ivar4 = class_getInstanceVariable([Test8 class], "prop3");
assert(ivar4);
assert(ivar_getOffset(ivar3) < ivar_getOffset(ivar4));
ivar5 = class_getInstanceVariable([Test8 class], "prop4");
assert(ivar5);
assert(ivar_getOffset(ivar4) < ivar_getOffset(ivar5));
ivar6 = class_getInstanceVariable([Test8 class], "prop6");
assert(ivar6);
assert(ivar_getOffset(ivar5) < ivar_getOffset(ivar6));
return 0;
}
#endif