// 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 |