objc2-ivar-offset.mm   [plain text]


/* APPLE LOCAL file 5724385 */
/* { dg-options "-mmacosx-version-min=10.5 -m64 -lobjc" { target powerpc*-*-darwin* i?86*-*-darwin* } } */
/* { dg-do run { target *-*-darwin* } } */

#include <objc/runtime.h>
#include <stdint.h>
#include <stdio.h>

@interface Foo {
@private
    int first;
    int :1;
    int third :1;
    int :1;
    int fifth :1;
}
@end
@implementation Foo 
+(void)initialize { }
@end

int main()
{
    Class cls = objc_getClass("Foo");
    unsigned int count;
    Ivar *iv_list = class_copyIvarList(cls, &count);
    fprintf(stderr, "count %d\n", count);
    for (unsigned int i = 0; i < count; i++) {
        const char *ivarname = ivar_getName(iv_list[i]);
        fprintf(stderr, "ivar: %s (%p)\n", ivarname ? ivarname : "", iv_list[i]);
        const char *ivartype = ivar_getTypeEncoding(iv_list[i]);
        fprintf(stderr, "type: %s\n", ivartype);
        ptrdiff_t ivaroffset = ivar_getOffset(iv_list[i]);
	/* APPLE LOCAL default to Wformat-security 5764921 */
        fprintf(stderr, "offset: %x\n", (int)ivaroffset);
        fprintf(stderr, "\n");
    }
    return 0;
}