diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2012-01-26 20:57:58 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2012-01-26 20:57:58 +0000 |
commit | bbdfad581fa300fa0d162d968ec14de3c95fc760 (patch) | |
tree | c468af2a59e7ce91a89022b916319c2147b60ac9 /test/ARCMT | |
parent | e8c904ff343f440e213b88e6963f5ebfbec7ae60 (diff) |
objc-arc: introduce -no-finalize-removal which in gc mode,
leaves "finalize' behind and in arc mode, does not
include it. This allows the migrated source to be compiled
in both gc and arc mode. // rdar://10532441
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149079 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/ARCMT')
-rw-r--r-- | test/ARCMT/GC-no-finalize-removal.m | 92 | ||||
-rw-r--r-- | test/ARCMT/GC-no-finalize-removal.m.result | 100 |
2 files changed, 192 insertions, 0 deletions
diff --git a/test/ARCMT/GC-no-finalize-removal.m b/test/ARCMT/GC-no-finalize-removal.m new file mode 100644 index 0000000000..d9739376f2 --- /dev/null +++ b/test/ARCMT/GC-no-finalize-removal.m @@ -0,0 +1,92 @@ +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-runtime-has-weak -fobjc-arc -x objective-c %s.result +// RUN: arcmt-test --args -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-gc-only -no-finalize-removal -x objective-c %s > %t +// RUN: diff %t %s.result +// RUN: arcmt-test --args -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-gc-only -no-finalize-removal -x objective-c++ %s > %t +// RUN: diff %t %s.result +// DISABLE: mingw32 + +#include "Common.h" +#include "GC.h" + +void test1(CFTypeRef *cft) { + id x = NSMakeCollectable(cft); +} + +@interface I1 { + __strong I1 *myivar; +} +@end + +@implementation I1 +-(void)dealloc { + // dealloc + test1(0); +} + +-(void)finalize { + // finalize + test1(0); +} +@end + +@interface I2 +@property (retain) id prop; +@end + +@implementation I2 +@synthesize prop; + +-(void)finalize { + self.prop = 0; + // finalize + test1(0); +} +@end + +__attribute__((objc_arc_weak_reference_unavailable)) +@interface QQ { + __weak id s; + __weak QQ *q; +} +@end + +@interface I3 +@property (assign) I3 *__weak pw1, *__weak pw2; +@property (assign) I3 *__strong ps; +@property (assign) I3 * pds; +@end + +@interface I4Impl { + I4Impl *pds2; + I4Impl *pds3; + __weak I4Impl *pw3; + __weak I4Impl *pw4; +} +@property (assign) I4Impl *__weak pw1, *__weak pw2; +@property (assign) I4Impl *__strong ps; +@property (assign) I4Impl * pds; +@property (assign) I4Impl * pds2; +@property (readwrite) I4Impl * pds3; +@property (readonly) I4Impl * pds4; +@property (readonly) __weak I4Impl *pw3; +@property (assign) __weak I4Impl *pw4; +@end + +@implementation I4Impl +@synthesize pw1, pw2, pw3, pw4, ps, pds, pds2, pds3, pds4; + +-(void)test1:(CFTypeRef *)cft { + id x = NSMakeCollectable(cft); +} +@end + +// rdar://10532449 +@interface rdar10532449 +@property (assign) id assign_prop; +@property (assign, readonly) id __strong strong_readonly_prop; +@property (assign) id __weak weak_prop; +@end + +@implementation rdar10532449 +@synthesize assign_prop, strong_readonly_prop, weak_prop; +@end diff --git a/test/ARCMT/GC-no-finalize-removal.m.result b/test/ARCMT/GC-no-finalize-removal.m.result new file mode 100644 index 0000000000..38aabc32ae --- /dev/null +++ b/test/ARCMT/GC-no-finalize-removal.m.result @@ -0,0 +1,100 @@ +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-runtime-has-weak -fobjc-arc -x objective-c %s.result +// RUN: arcmt-test --args -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-gc-only -no-finalize-removal -x objective-c %s > %t +// RUN: diff %t %s.result +// RUN: arcmt-test --args -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-gc-only -no-finalize-removal -x objective-c++ %s > %t +// RUN: diff %t %s.result +// DISABLE: mingw32 + +#include "Common.h" +#include "GC.h" + +void test1(CFTypeRef *cft) { + id x = CFBridgingRelease(cft); +} + +@interface I1 { + I1 *myivar; +} +@end + +@implementation I1 +-(void)dealloc { + // dealloc + test1(0); +} + +#if !__has_feature(objc_arc) +-(void)finalize { + // finalize + test1(0); +} +#endif +@end + +@interface I2 +@property (strong) id prop; +@end + +@implementation I2 +@synthesize prop; + +#if !__has_feature(objc_arc) +-(void)finalize { + self.prop = 0; + // finalize + test1(0); +} +#endif +-(void)dealloc { + // finalize + test1(0); +} +@end + +__attribute__((objc_arc_weak_reference_unavailable)) +@interface QQ { + __weak id s; + __unsafe_unretained QQ *q; +} +@end + +@interface I3 +@property (weak) I3 * pw1, * pw2; +@property (strong) I3 * ps; +@property (assign) I3 * pds; +@end + +@interface I4Impl { + I4Impl *__strong pds2; + I4Impl *pds3; + __weak I4Impl *pw3; + __weak I4Impl *pw4; +} +@property (weak) I4Impl * pw1, * pw2; +@property (strong) I4Impl * ps; +@property (strong) I4Impl * pds; +@property (strong) I4Impl * pds2; +@property (readwrite) I4Impl * pds3; +@property (readonly) I4Impl * pds4; +@property (weak, readonly) I4Impl *pw3; +@property (weak) I4Impl *pw4; +@end + +@implementation I4Impl +@synthesize pw1, pw2, pw3, pw4, ps, pds, pds2, pds3, pds4; + +-(void)test1:(CFTypeRef *)cft { + id x = CFBridgingRelease(cft); +} +@end + +// rdar://10532449 +@interface rdar10532449 +@property (strong) id assign_prop; +@property (strong, readonly) id strong_readonly_prop; +@property (weak) id weak_prop; +@end + +@implementation rdar10532449 +@synthesize assign_prop, strong_readonly_prop, weak_prop; +@end |