llvm-capstone/clang/test/ARCMT/releases-driver.m
Fariborz Jahanian b7f03c191c objective-c arc: ARC IRGen correctly assumes result
type of generated call to super dealloc is 'void'
and asserts if user's dealloc is not of 'void type.
This rule must be enforced in clang front-end (with a 
fixit) if this is not the case, instead of asserting in CodeGen.
// rdar://11987838

llvm-svn: 160993
2012-07-30 20:52:48 +00:00

68 lines
1012 B
Objective-C

// 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);
}