| // RUN: %clang_cc1 -fobjc-exceptions -fblocks -fsyntax-only -fobjc-arc -x objective-c %s.result |
| // RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fobjc-exceptions -fblocks -fsyntax-only -x objective-c %s > %t |
| // RUN: diff %t %s.result |
| |
| #define nil 0 |
| |
| typedef int BOOL; |
| |
| id IhaveSideEffect(); |
| |
| @protocol NSObject |
| - (BOOL)isEqual:(id)object; |
| - (id)retain; |
| - (oneway void)release; |
| @end |
| |
| @interface NSObject <NSObject> {} |
| @end |
| |
| @interface Foo : NSObject { |
| id bar; |
| } |
| @property (strong) id bar; |
| -(void)test:(id)obj; |
| @end |
| |
| @implementation Foo |
| |
| @synthesize bar; |
| |
| -(void)test:(id)obj { |
| id x = self.bar; |
| self.bar = obj; |
| // do stuff with x; |
| |
| IhaveSideEffect(); |
| |
| x = 0; |
| |
| @try { |
| } @finally { |
| x = nil; |
| } |
| } |
| |
| @end |
| |
| void func(Foo *p) { |
| } |
| |
| @interface Baz { |
| id <NSObject> _foo; |
| } |
| @end |
| |
| @implementation Baz |
| @end |
| |
| void block_test(Foo *p) { |
| id (^B)() = ^() { |
| if (p) { |
| id (^IB)() = ^() { |
| id bar = p; |
| return bar; |
| }; |
| IB(); |
| } |
| return p; |
| }; |
| } |
| |
| #define RELEASE_MACRO(x) [x release] |
| #define RELEASE_MACRO2(x) RELEASE_MACRO(x) |
| |
| void test2(id p) { |
| } |
| |
| @implementation Foo2 |
| |
| static id internal_var = 0; |
| |
| + (void)setIt:(id)newone { |
| if (internal_var != newone) { |
| internal_var = newone; |
| } |
| } |
| @end |