Home | History | Annotate | Download | only in ARCMT
      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 (strong) 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   self.bar = obj;
     34   // do stuff with x;
     35 
     36   IhaveSideEffect();
     37 
     38   x = 0;
     39 
     40   @try {
     41   } @finally {
     42     x = nil;
     43   }
     44 }
     45   
     46 @end
     47 
     48 void func(Foo *p) {
     49 }
     50 
     51 @interface Baz {
     52 	id <NSObject> _foo;
     53 }
     54 @end
     55 
     56 @implementation Baz
     57 @end
     58 
     59 void block_test(Foo *p) {
     60   id (^B)() = ^() {
     61     if (p) {
     62       id (^IB)() = ^() {
     63         id bar = p;
     64         return bar;
     65       };
     66       IB();
     67     }
     68     return p;
     69   };
     70 }
     71 
     72 #define RELEASE_MACRO(x) [x release]
     73 #define RELEASE_MACRO2(x) RELEASE_MACRO(x)
     74 
     75 void test2(id p) {
     76 }
     77 
     78 @implementation Foo2
     79 
     80 static id internal_var = 0;
     81 
     82 + (void)setIt:(id)newone {
     83     if (internal_var != newone) {
     84         internal_var = newone;
     85     }
     86 }
     87 @end
     88