annotate clang/test/CodeGenObjC/id-isa-codegen.m @ 180:680fa57a2f20

fix compile errors.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 30 May 2020 17:44:06 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck -check-prefix CHECK-LP64 %s
anatofuz
parents:
diff changeset
2 // RUN: %clang_cc1 -triple i386-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck -check-prefix CHECK-LP32 %s
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 typedef struct objc_class *Class;
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 typedef struct objc_object {
anatofuz
parents:
diff changeset
7 Class isa;
anatofuz
parents:
diff changeset
8 } *id;
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 @interface I
anatofuz
parents:
diff changeset
11 + (Class) class;
anatofuz
parents:
diff changeset
12 - (void)meth : (id)object : (id)src_object;
anatofuz
parents:
diff changeset
13 + (unsigned char) isSubclassOfClass:(Class)aClass ;
anatofuz
parents:
diff changeset
14 @end
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 @implementation I
anatofuz
parents:
diff changeset
17 + (Class) class {return 0;}
anatofuz
parents:
diff changeset
18 + (unsigned char) isSubclassOfClass:(Class)aClass {return 0;}
anatofuz
parents:
diff changeset
19 - (void)meth : (id)object : (id)src_object {
anatofuz
parents:
diff changeset
20 [object->isa isSubclassOfClass:[I class]];
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 [(*object).isa isSubclassOfClass:[I class]];
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 object->isa = src_object->isa;
anatofuz
parents:
diff changeset
25 (*src_object).isa = (*object).isa;
anatofuz
parents:
diff changeset
26 }
anatofuz
parents:
diff changeset
27 @end
anatofuz
parents:
diff changeset
28
anatofuz
parents:
diff changeset
29
anatofuz
parents:
diff changeset
30 // rdar 7470820
anatofuz
parents:
diff changeset
31 static Class MyClass;
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 Class Test(const void *inObject1) {
anatofuz
parents:
diff changeset
34 if(((id)inObject1)->isa == MyClass)
anatofuz
parents:
diff changeset
35 return ((id)inObject1)->isa;
anatofuz
parents:
diff changeset
36 return (id)0;
anatofuz
parents:
diff changeset
37 }
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 // rdar 7609722
anatofuz
parents:
diff changeset
40 @interface Foo {
anatofuz
parents:
diff changeset
41 @public
anatofuz
parents:
diff changeset
42 id isa;
anatofuz
parents:
diff changeset
43 }
anatofuz
parents:
diff changeset
44 +(id)method;
anatofuz
parents:
diff changeset
45 @end
anatofuz
parents:
diff changeset
46
anatofuz
parents:
diff changeset
47 id Test2() {
anatofuz
parents:
diff changeset
48 if([Foo method]->isa)
anatofuz
parents:
diff changeset
49 return (*[Foo method]).isa;
anatofuz
parents:
diff changeset
50 return [Foo method]->isa;
anatofuz
parents:
diff changeset
51 }
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 // rdar 7709015
anatofuz
parents:
diff changeset
54 @interface Cat {}
anatofuz
parents:
diff changeset
55 @end
anatofuz
parents:
diff changeset
56
anatofuz
parents:
diff changeset
57 @interface SuperCat : Cat {}
anatofuz
parents:
diff changeset
58 +(void)geneticallyAlterCat:(Cat *)cat;
anatofuz
parents:
diff changeset
59 @end
anatofuz
parents:
diff changeset
60
anatofuz
parents:
diff changeset
61 @implementation SuperCat
anatofuz
parents:
diff changeset
62 + (void)geneticallyAlterCat:(Cat *)cat {
anatofuz
parents:
diff changeset
63 Class dynamicSubclass;
anatofuz
parents:
diff changeset
64 ((id)cat)->isa = dynamicSubclass;
anatofuz
parents:
diff changeset
65 }
anatofuz
parents:
diff changeset
66 @end
anatofuz
parents:
diff changeset
67 // CHECK-LP64: %{{.*}} = load i8*, i8** %
anatofuz
parents:
diff changeset
68 // CHECK-NEXT: %{{.*}} = bitcast i8* %{{.*}} to i8**
anatofuz
parents:
diff changeset
69 // CHECK-NEXT: store i8* %{{.*}}, i8** %{{.*}}
anatofuz
parents:
diff changeset
70
anatofuz
parents:
diff changeset
71 // CHECK-LP32: %{{.*}} = load i8*, i8** %
anatofuz
parents:
diff changeset
72 // CHECK-NEXT: %{{.*}} = bitcast i8* %{{.*}} to i8**
anatofuz
parents:
diff changeset
73 // CHECK-NEXT: store i8* %{{.*}}, i8** %{{.*}}