1*67e74705SXin Li// RUN: %clang_cc1 -fblocks -fsyntax-only -fobjc-arc -x objective-c %s.result 2*67e74705SXin Li// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fblocks -fsyntax-only -x objective-c %s > %t 3*67e74705SXin Li// RUN: diff %t %s.result 4*67e74705SXin Li 5*67e74705SXin Li#include "Common.h" 6*67e74705SXin Li 7*67e74705SXin Liid IhaveSideEffect(); 8*67e74705SXin Li 9*67e74705SXin Li@interface Foo : NSObject { 10*67e74705SXin Li id bar; 11*67e74705SXin Li} 12*67e74705SXin Li@property (retain) id bar; 13*67e74705SXin Li-(id)test:(id)obj; 14*67e74705SXin Li-(id)something; 15*67e74705SXin Li@end 16*67e74705SXin Li 17*67e74705SXin Li#define Something_Macro(key, comment) \ 18*67e74705SXin Li [[Foo new] something] 19*67e74705SXin Li 20*67e74705SXin Li@implementation Foo 21*67e74705SXin Li 22*67e74705SXin Li@synthesize bar; 23*67e74705SXin Li 24*67e74705SXin Li-(id)something {} 25*67e74705SXin Li 26*67e74705SXin Li-(id)test:(id)obj { 27*67e74705SXin Li id x = self.bar; 28*67e74705SXin Li [x retain]; 29*67e74705SXin Li self.bar = obj; 30*67e74705SXin Li if (obj) 31*67e74705SXin Li [obj retain]; 32*67e74705SXin Li 33*67e74705SXin Li [Something_Macro(@"foo", "@bar") retain]; 34*67e74705SXin Li 35*67e74705SXin Li [IhaveSideEffect() retain]; 36*67e74705SXin Li 37*67e74705SXin Li [[self something] retain]; 38*67e74705SXin Li 39*67e74705SXin Li [[self retain] something]; 40*67e74705SXin Li 41*67e74705SXin Li [[IhaveSideEffect() retain] release]; 42*67e74705SXin Li [[x retain] release]; 43*67e74705SXin Li // do stuff with x; 44*67e74705SXin Li [x release]; 45*67e74705SXin Li return [self retain]; 46*67e74705SXin Li} 47*67e74705SXin Li 48*67e74705SXin Li- (id)test1 { 49*67e74705SXin Li id x=0; 50*67e74705SXin Li ([x retain]); 51*67e74705SXin Li return ((([x retain]))); 52*67e74705SXin Li} 53*67e74705SXin Li@end 54*67e74705SXin Li 55*67e74705SXin Liid foo (Foo *p) { 56*67e74705SXin Li p = [p retain]; 57*67e74705SXin Li return ([p retain]); 58*67e74705SXin Li} 59*67e74705SXin Li 60*67e74705SXin Livoid block_tests(Foo *p) { 61*67e74705SXin Li id (^B)() = ^() { 62*67e74705SXin Li if (p) { 63*67e74705SXin Li id (^IB)() = ^() { 64*67e74705SXin Li id bar = [p retain]; 65*67e74705SXin Li return bar; 66*67e74705SXin Li }; 67*67e74705SXin Li IB(); 68*67e74705SXin Li } 69*67e74705SXin Li return [p retain]; 70*67e74705SXin Li }; 71*67e74705SXin Li} 72