1 2 @protocol NSObject 3 - (id)retain; 4 - (unsigned)retainCount; 5 - (oneway void)release; 6 - (id)autorelease; 7 @end 8 9 @interface NSObject <NSObject> {} 10 - (id)init; 11 12 + (id)new; 13 + (id)alloc; 14 - (void)dealloc; 15 16 - (void)finalize; 17 18 - (id)copy; 19 - (id)mutableCopy; 20 @end 21 22 @interface A : NSObject 23 @end 24 25 struct UnsafeS { 26 A *__unsafe_unretained unsafeObj; 27 }; 28 29 id global_foo; 30 31 void test1(A *a, struct UnsafeS *unsafeS) { 32 [unsafeS->unsafeObj retain]; 33 id foo = [unsafeS->unsafeObj retain]; // no warning. 34 [global_foo retain]; 35 [a retainCount]; 36 } 37 38 // RUN: not %clang_cc1 -arcmt-check -triple x86_64-apple-darwin10 %s -serialize-diagnostic-file %t.diag 39 // RUN: c-index-test -read-diagnostics %t.diag > %t 2>&1 40 // RUN: FileCheck --input-file=%t %s 41 42 // CHECK: {{.*}}check-with-serialized-diag.m:32:4: error: [rewriter] it is not safe to remove 'retain' message on an __unsafe_unretained type 43 // CHECK-NEXT: Number FIXITs = 0 44 // CHECK-NEXT: {{.*}}check-with-serialized-diag.m:34:4: error: [rewriter] it is not safe to remove 'retain' message on a global variable 45 // CHECK-NEXT: Number FIXITs = 0 46 // CHECK-NEXT: {{.*}}check-with-serialized-diag.m:32:4: error: ARC forbids explicit message send of 'retain' 47 // CHECK-NEXT: Range: {{.*}}check-with-serialized-diag.m:32:23 {{.*}}check-with-serialized-diag.m:32:29 48 // CHECK-NEXT: Number FIXITs = 0 49 // CHECK-NEXT: {{.*}}check-with-serialized-diag.m:34:4: error: ARC forbids explicit message send of 'retain' 50 // CHECK-NEXT: Range: {{.*}}check-with-serialized-diag.m:34:15 {{.*}}check-with-serialized-diag.m:34:21 51 // CHECK-NEXT: Number FIXITs = 0 52 // CHECK-NEXT: {{.*}}check-with-serialized-diag.m:35:4: error: ARC forbids explicit message send of 'retainCount' 53 // CHECK-NEXT: Range: {{.*}}check-with-serialized-diag.m:35:6 {{.*}}check-with-serialized-diag.m:35:17 54 // CHECK-NEXT: Number FIXITs = 0 55 56