// RUN: %clang_cc1 -fblocks -fsyntax-only -fobjc-arc -x objective-c %s.result | |
// RUN: cp %s %t | |
// RUN: %clang_cc1 -arcmt-modify -triple x86_64-apple-macosx10.6 -x objective-c %t | |
// RUN: diff %t %s.result | |
// RUN: rm %t | |
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 (retain) id bar; | |
-(void)test:(id)obj; | |
@end | |
@implementation Foo | |
@synthesize bar; | |
-(void)test:(id)obj { | |
id x = self.bar; | |
[x retain]; | |
self.bar = obj; | |
// do stuff with x; | |
[x release]; | |
[IhaveSideEffect() release]; | |
[x release], x = 0; | |
} | |
@end | |
void func(Foo *p) { | |
[p release]; | |
(([p release])); | |
} | |
@interface Baz { | |
id <NSObject> _foo; | |
} | |
@end | |
@implementation Baz | |
- (void) dealloc { | |
[_foo release]; | |
} | |
@end | |
#define RELEASE_MACRO(x) [x release] | |
#define RELEASE_MACRO2(x) RELEASE_MACRO(x) | |
void test2(id p) { | |
RELEASE_MACRO(p); | |
RELEASE_MACRO2(p); | |
} |