Remove an assertion that was useful in debugging, but not actually
correct. Instance variables are not normally zero-sized, but some are. Examples include zero-length arrays at the end of a class, and bitfields. Fixes #30 Fixes #31main
parent
d1eb9ad91e
commit
e87b5c1503
@ -0,0 +1,69 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "Test.h"
|
||||
|
||||
|
||||
typedef uintptr_t NSUInteger;
|
||||
|
||||
@interface NSArray : Test
|
||||
{
|
||||
NSUInteger count;
|
||||
id objects[0];
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation NSArray @end
|
||||
|
||||
@interface BitfieldTest : Test
|
||||
{
|
||||
BOOL flag1:1;
|
||||
BOOL flag2:1;
|
||||
BOOL flag3:1;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation BitfieldTest @end
|
||||
|
||||
@interface BitfieldTest2 : Test
|
||||
{
|
||||
BOOL flag1:1;
|
||||
BOOL flag2:1;
|
||||
BOOL flag3:1;
|
||||
int x;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation BitfieldTest2 @end
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
Class nsarray = objc_getClass("NSArray");
|
||||
assert(nsarray);
|
||||
assert(class_getInstanceSize(nsarray) == (sizeof(Class) + sizeof(NSUInteger)));
|
||||
Ivar count = class_getInstanceVariable(nsarray, "count");
|
||||
assert(ivar_getOffset(count) == sizeof(id));
|
||||
Ivar objects = class_getInstanceVariable(nsarray, "objects");
|
||||
|
||||
Class bitfield = objc_getClass("BitfieldTest");
|
||||
assert(bitfield);
|
||||
Ivar flag1 = class_getInstanceVariable(bitfield, "flag1");
|
||||
assert(flag1);
|
||||
assert(ivar_getOffset(flag1) == sizeof(id));
|
||||
Ivar flag2 = class_getInstanceVariable(bitfield, "flag2");
|
||||
assert(flag2);
|
||||
assert(ivar_getOffset(flag2) == sizeof(id));
|
||||
Ivar flag3 = class_getInstanceVariable(bitfield, "flag3");
|
||||
assert(flag3);
|
||||
assert(ivar_getOffset(flag3) == sizeof(id));
|
||||
assert(ivar_getOffset(flag3) + sizeof(int) <= class_getInstanceSize(bitfield));
|
||||
|
||||
bitfield = objc_getClass("BitfieldTest2");
|
||||
flag1 = class_getInstanceVariable(bitfield, "flag1");
|
||||
flag3 = class_getInstanceVariable(bitfield, "flag3");
|
||||
Ivar x = class_getInstanceVariable(bitfield, "x");
|
||||
assert(ivar_getOffset(flag1) == ivar_getOffset(flag3));
|
||||
assert(ivar_getOffset(x) > ivar_getOffset(flag3));
|
||||
assert(ivar_getOffset(x) + sizeof(int) <= class_getInstanceSize(bitfield));
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue