69 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck -check-prefix CHECK-LP64 %s2// RUN: %clang_cc1 -triple i386-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck -check-prefix CHECK-LP32 %s3 4typedef struct objc_class *Class;5 6typedef struct objc_object {7 Class isa;8} *id;9 10@interface I11+ (Class) class;12- (void)meth : (id)object : (id)src_object;13+ (unsigned char) isSubclassOfClass:(Class)aClass ;14@end15 16@implementation I17+ (Class) class {return 0;}18+ (unsigned char) isSubclassOfClass:(Class)aClass {return 0;}19- (void)meth : (id)object : (id)src_object {20 [object->isa isSubclassOfClass:[I class]];21 22 [(*object).isa isSubclassOfClass:[I class]];23 24 object->isa = src_object->isa;25 (*src_object).isa = (*object).isa;26}27@end28 29 30static Class MyClass;31 32Class Test(const void *inObject1) {33 if(((id)inObject1)->isa == MyClass)34 return ((id)inObject1)->isa;35 return (id)0;36}37 38@interface Foo { 39@public 40 id isa; 41} 42+(id)method;43@end44 45id Test2(void) {46 if([Foo method]->isa)47 return (*[Foo method]).isa;48 return [Foo method]->isa;49}50 51@interface Cat {}52@end53 54@interface SuperCat : Cat {}55+(void)geneticallyAlterCat:(Cat *)cat;56@end57 58@implementation SuperCat59+ (void)geneticallyAlterCat:(Cat *)cat {60 Class dynamicSubclass;61 ((id)cat)->isa = dynamicSubclass;62}63@end64// CHECK-LP64: %{{.*}} = load ptr, ptr %65// CHECK-NEXT: store ptr %{{.*}}, ptr %{{.*}}66 67// CHECK-LP32: %{{.*}} = load ptr, ptr %68// CHECK-NEXT: store ptr %{{.*}}, ptr %{{.*}}69