Home | History | Annotate | Download | only in ARCMT
      1 // RUN: %clang_cc1 -fobjc-nonfragile-abi -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 -fobjc-nonfragile-abi -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 - dealloc {
     62   [_foo release];
     63   return 0;
     64 }
     65 @end
     66 
     67 void block_test(Foo *p) {
     68   id (^B)() = ^() {
     69     if (p) {
     70       id (^IB)() = ^() {
     71         id bar = [p retain];
     72 	      [p release];
     73         return bar;
     74       };
     75       IB();
     76     }
     77     return [p retain];
     78   };
     79 }
     80 
     81 #define RELEASE_MACRO(x) [x release]
     82 #define RELEASE_MACRO2(x) RELEASE_MACRO(x)
     83 
     84 void test2(id p) {
     85   RELEASE_MACRO(p);
     86   RELEASE_MACRO2(p);
     87 }
     88