http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50002

           Summary: class_replaceMethod does not work on class methods
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libobjc
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: nic...@gcc.gnu.org


Reported by Jonathan Schleifer --

#include <stdio.h>
#include <assert.h>

#import <objc/Object.h>
#import <objc/runtime.h>

id
alloc(Class self, SEL _cmd)
{
    puts("Foo!");
    return nil;
}

int
main()
{
    Method method = class_getClassMethod([Object class], @selector(alloc));
    assert(method != NULL);

    /* INCOMPATIBLE to Apple! class_pointer should be isa!! */
    class_replaceMethod([Object class]->class_pointer, @selector(alloc),
        (IMP)alloc, method_getTypeEncoding(method));

    [Object alloc];

    return 0;
}


> If you change Object to NSObject and class_pointer to isa, it works on OS X.

Thanks

Reply via email to