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