1// RUN: %clang_cc1 -fblocks -fsyntax-only -fobjc-arc -x objective-c %s.result 2// RUN: cat %s > %t 3// RUN: %clang_cc1 -arcmt-modify -triple x86_64-apple-macosx10.6 -x objective-c %t 4// RUN: diff %t %s.result 5// RUN: rm %t 6 7typedef int BOOL; 8 9id 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 (retain) 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 [x retain]; 34 self.bar = obj; 35 // do stuff with x; 36 [x release]; 37 38 [IhaveSideEffect() release]; 39 40 [x release], x = 0; 41} 42 43@end 44 45void func(Foo *p) { 46 [p release]; 47 (([p release])); 48} 49 50@interface Baz { 51 id <NSObject> _foo; 52} 53@end 54 55@implementation Baz 56- (void) dealloc { 57 [_foo release]; 58} 59@end 60 61#define RELEASE_MACRO(x) [x release] 62#define RELEASE_MACRO2(x) RELEASE_MACRO(x) 63 64void test2(id p) { 65 RELEASE_MACRO(p); 66 RELEASE_MACRO2(p); 67} 68