1 // RUN: %clang_cc1 -fobjc-exceptions -fblocks -fsyntax-only -fobjc-arc -x objective-c %s.result 2 // RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fobjc-exceptions -fblocks -fsyntax-only -x objective-c %s > %t 3 // RUN: diff %t %s.result 4 5 #define nil 0 6 7 typedef int BOOL; 8 9 id IhaveSideEffect(); 10 11 @protocol NSObject 12 - (BOOL)isEqual:(id)object; 13 - (id)retain; 14 - (oneway void)release; 15 @end 16 17 @interface NSObject <NSObject> {} 18 @end 19 20 @interface Foo : NSObject { 21 id bar; 22 } 23 @property (retain) id bar; 24 -(void)test:(id)obj; 25 @end 26 27 @implementation Foo 28 29 @synthesize bar; 30 31 -(void)test:(id)obj { 32 id x = self.bar; 33 [x retain]; 34 self.bar = obj; 35 // do stuff with x; 36 [x release]; 37 38 [IhaveSideEffect() release]; 39 40 [x release], x = 0; 41 42 @try { 43 } @finally { 44 [x release]; 45 } 46 } 47 48 @end 49 50 void func(Foo *p) { 51 [p release]; 52 (([p release])); 53 } 54 55 @interface Baz { 56 id <NSObject> _foo; 57 } 58 @end 59 60 @implementation Baz 61 - (void) dealloc { 62 [_foo release]; 63 } 64 @end 65 66 void block_test(Foo *p) { 67 id (^B)() = ^() { 68 if (p) { 69 id (^IB)() = ^() { 70 id bar = [p retain]; 71 [p release]; 72 return bar; 73 }; 74 IB(); 75 } 76 return [p retain]; 77 }; 78 } 79 80 #define RELEASE_MACRO(x) [x release] 81 #define RELEASE_MACRO2(x) RELEASE_MACRO(x) 82 83 void test2(id p) { 84 RELEASE_MACRO(p); 85 RELEASE_MACRO2(p); 86 } 87 88 @implementation Foo2 89 90 static id internal_var = 0; 91 92 + (void)setIt:(id)newone { 93 if (internal_var != newone) { 94 [internal_var release]; 95 internal_var = [newone retain]; 96 } 97 } 98 @end 99