/** The problem looks like clang getting confused when a single translation unit contains a protocol with a property and two classes that implement that protocol and synthesize the property. */ #import #include @protocol Proto @property (assign) id prop; @end @interface Foo : NSObject { id prop; } @end @interface Bar : NSObject { id prop; } @end @implementation Foo @synthesize prop; @end @implementation Bar @synthesize prop; @end int main() { IMP Foo_prop = class_getMethodImplementation([Foo class], @selector(prop)); IMP Bar_prop = class_getMethodImplementation([Bar class], @selector(prop)); assert(Foo_prop != Bar_prop); return 0; }