diff options
Diffstat (limited to 'test/Rewriter')
117 files changed, 1449 insertions, 102 deletions
diff --git a/test/Rewriter/blockcast3.mm b/test/Rewriter/blockcast3.mm index 97f417cec9ef9..8b35528cfbeb2 100644 --- a/test/Rewriter/blockcast3.mm +++ b/test/Rewriter/blockcast3.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s // radar 7607781 diff --git a/test/Rewriter/blockstruct.m b/test/Rewriter/blockstruct.m index 977e0d6ce5a07..ef85c587b1294 100644 --- a/test/Rewriter/blockstruct.m +++ b/test/Rewriter/blockstruct.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar://8918702 diff --git a/test/Rewriter/crash.m b/test/Rewriter/crash.m index 107b7a54843d1..c61100ed0f094 100644 --- a/test/Rewriter/crash.m +++ b/test/Rewriter/crash.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc -o - %s +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi -o - %s // rdar://5950938 @interface NSArray {} + (id)arrayWithObjects:(id)firstObj, ...; diff --git a/test/Rewriter/finally.m b/test/Rewriter/finally.m index ab5d8387ccabe..8fd475cab6e21 100644 --- a/test/Rewriter/finally.m +++ b/test/Rewriter/finally.m @@ -1,8 +1,8 @@ -// RUN: %clang_cc1 -rewrite-objc -fobjc-exceptions -verify %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi -fobjc-exceptions -verify %s -o - int main() { @try { - printf("executing try"); // expected-warning{{implicitly declaring C library function 'printf' with type 'int (const char *, ...)'}} \ + printf("executing try"); // expected-warning{{implicitly declaring library function 'printf' with type 'int (const char *, ...)'}} \ // expected-note{{please include the header <stdio.h> or explicitly provide a declaration for 'printf'}} return(0); // expected-warning{{rewriter doesn't support user-specified control flow semantics for @try/@finally (code may not execute properly)}} } @finally { diff --git a/test/Rewriter/func-in-impl.m b/test/Rewriter/func-in-impl.m new file mode 100644 index 0000000000000..350a72671b666 --- /dev/null +++ b/test/Rewriter/func-in-impl.m @@ -0,0 +1,30 @@ +// RUN: %clang_cc1 -E %s -o %t.m +// RUN: %clang_cc1 -fobjc-fragile-abi -rewrite-objc %t.m -o - | FileCheck %s + +@interface I { + id _delegate; +} +-(void)foo; +@end + +@implementation I + +static void KKKK(int w); + +-(void) foo { + KKKK(0); +} + +static void KKKK(int w) { + I *self = (I *)0; + if ([self->_delegate respondsToSelector:@selector(handlePortMessage:)]) { + } +} + +-(void) foo2 { + KKKK(0); +} + +@end + +// CHECK: if (((id (*)(id, SEL, ...))(void *)objc_msgSend)((id)((struct I_IMPL *)self)->_delegate, sel_registerName("respondsToSelector:"), sel_registerName("handlePortMessage:"))) diff --git a/test/Rewriter/id-test-3.m b/test/Rewriter/id-test-3.m index 8557f2baa6679..d7a7bf3eb7a06 100644 --- a/test/Rewriter/id-test-3.m +++ b/test/Rewriter/id-test-3.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @protocol P - (id<P>) Meth: (id<P>) Arg; diff --git a/test/Rewriter/inner-block-helper-funcs.mm b/test/Rewriter/inner-block-helper-funcs.mm index 33567bc3d7aa7..d30e1dcadc876 100644 --- a/test/Rewriter/inner-block-helper-funcs.mm +++ b/test/Rewriter/inner-block-helper-funcs.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s // rdar://9846759 diff --git a/test/Rewriter/instancetype-test.mm b/test/Rewriter/instancetype-test.mm index 97fbe0950da5f..a92a3f7f7b006 100644 --- a/test/Rewriter/instancetype-test.mm +++ b/test/Rewriter/instancetype-test.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp void *sel_registerName(const char *); diff --git a/test/Rewriter/ivar-encoding-1.m b/test/Rewriter/ivar-encoding-1.m index af11ce2469399..d2949439c7332 100644 --- a/test/Rewriter/ivar-encoding-1.m +++ b/test/Rewriter/ivar-encoding-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @interface Intf { diff --git a/test/Rewriter/ivar-encoding-2.m b/test/Rewriter/ivar-encoding-2.m index 4650bdefcc6fd..da60c79e260aa 100644 --- a/test/Rewriter/ivar-encoding-2.m +++ b/test/Rewriter/ivar-encoding-2.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @implementation Intf { diff --git a/test/Rewriter/metadata-test-1.m b/test/Rewriter/metadata-test-1.m index 5dc1a33301e2c..b2d6e8daee23a 100644 --- a/test/Rewriter/metadata-test-1.m +++ b/test/Rewriter/metadata-test-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @interface Intf @end diff --git a/test/Rewriter/metadata-test-2.m b/test/Rewriter/metadata-test-2.m index 0fd0429b0b313..90399f7968ae1 100644 --- a/test/Rewriter/metadata-test-2.m +++ b/test/Rewriter/metadata-test-2.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - typedef struct _NSPoint { float x; diff --git a/test/Rewriter/method-encoding-1.m b/test/Rewriter/method-encoding-1.m index 08ee24b135c71..27abea575e074 100644 --- a/test/Rewriter/method-encoding-1.m +++ b/test/Rewriter/method-encoding-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @protocol P1 - (void) MyProtoMeth : (int **) arg1 : (void*) arg2; diff --git a/test/Rewriter/objc-bool-literal-check-modern.mm b/test/Rewriter/objc-bool-literal-check-modern.mm new file mode 100644 index 0000000000000..b28e594d72a65 --- /dev/null +++ b/test/Rewriter/objc-bool-literal-check-modern.mm @@ -0,0 +1,29 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s +// rdar://11124775 + +typedef signed char BOOL; + +BOOL yes() { + return __objc_yes; +} + +BOOL no() { + return __objc_no; +} + +BOOL which (int flag) { + return flag ? yes() : no(); +} + +int main() { + which (__objc_yes); + which (__objc_no); + return __objc_yes; +} + +// CHECK: return ((signed char)1); +// CHECK: return ((signed char)0); +// CHECK: which (((signed char)1)); +// CHECK: which (((signed char)0)); +// CHECK: return ((signed char)1); diff --git a/test/Rewriter/objc-bool-literal-modern-1.mm b/test/Rewriter/objc-bool-literal-modern-1.mm new file mode 100644 index 0000000000000..782517242e52d --- /dev/null +++ b/test/Rewriter/objc-bool-literal-modern-1.mm @@ -0,0 +1,31 @@ +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"__declspec(X)=" %t-rw.cpp +// rdar://11231426 + +typedef bool BOOL; + +BOOL yes() { + return __objc_yes; +} + +BOOL no() { + return __objc_no; +} + +BOOL which (int flag) { + return flag ? yes() : no(); +} + +int main() { + which (__objc_yes); + which (__objc_no); + return __objc_yes; +} + +void y(BOOL (^foo)()); + +void x() { + y(^{ + return __objc_yes; + }); +} diff --git a/test/Rewriter/objc-bool-literal-modern.mm b/test/Rewriter/objc-bool-literal-modern.mm new file mode 100644 index 0000000000000..6bbbb449c9071 --- /dev/null +++ b/test/Rewriter/objc-bool-literal-modern.mm @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -D"__declspec(X)=" %t-rw.cpp +// rdar://11124775 + +typedef signed char BOOL; + +BOOL yes() { + return __objc_yes; +} + +BOOL no() { + return __objc_no; +} + +BOOL which (int flag) { + return flag ? yes() : no(); +} + +int main() { + which (__objc_yes); + which (__objc_no); + return __objc_yes; +} diff --git a/test/Rewriter/objc-encoding-bug-1.m b/test/Rewriter/objc-encoding-bug-1.m index 5605b6627fac8..083b570e52d3c 100644 --- a/test/Rewriter/objc-encoding-bug-1.m +++ b/test/Rewriter/objc-encoding-bug-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - typedef struct NSMethodFrameArgInfo { struct NSMethodFrameArgInfo *subInfo; diff --git a/test/Rewriter/objc-ivar-receiver-1.m b/test/Rewriter/objc-ivar-receiver-1.m index 5fb028e808e94..51950427ca873 100644 --- a/test/Rewriter/objc-ivar-receiver-1.m +++ b/test/Rewriter/objc-ivar-receiver-1.m @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - -// RUN: %clang_cc1 -rewrite-objc %s -o - | grep 'newInv->_container' +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - | grep 'newInv->_container' @interface NSMutableArray - (void)addObject:(id)addObject; diff --git a/test/Rewriter/objc-modern-class-init-hooks.mm b/test/Rewriter/objc-modern-class-init-hooks.mm new file mode 100644 index 0000000000000..c294c79e2e0fc --- /dev/null +++ b/test/Rewriter/objc-modern-class-init-hooks.mm @@ -0,0 +1,36 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s +// rdar:// 11124354 + +@interface Root @end + +@interface Super : Root +@end + +@interface Sub : Super +@end + +@implementation Sub @end + +@implementation Root @end + +@interface Root(Cat) @end + +@interface Sub(Cat) @end + +@implementation Root(Cat) @end + +@implementation Sub(Cat) @end + + +// CHECK: #pragma section(".objc_inithooks$B", long, read, write) +// CHECK: __declspec(allocate(".objc_inithooks$B")) static void *OBJC_CLASS_SETUP[] = { +// CHECK: (void *)&OBJC_CLASS_SETUP_$_Sub, +// CHECK: (void *)&OBJC_CLASS_SETUP_$_Root, +// CHECK: }; + +// CHECK: #pragma section(".objc_inithooks$B", long, read, write) +// CHECK: __declspec(allocate(".objc_inithooks$B")) static void *OBJC_CATEGORY_SETUP[] = { +// CHECK: (void *)&OBJC_CATEGORY_SETUP_$_Root_$_Cat, +// CHECK: (void *)&OBJC_CATEGORY_SETUP_$_Sub_$_Cat, +// CHECK: }; diff --git a/test/Rewriter/objc-modern-class-init.mm b/test/Rewriter/objc-modern-class-init.mm new file mode 100644 index 0000000000000..b0326a4028132 --- /dev/null +++ b/test/Rewriter/objc-modern-class-init.mm @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar:// 11076938 + +@interface Root @end + +@interface Super : Root +@end + +@interface Sub : Super +@end + +@implementation Sub @end + +@implementation Root @end + +@interface Root(Cat) @end + +@interface Sub(Cat) @end + +@implementation Root(Cat) @end + +@implementation Sub(Cat) @end diff --git a/test/Rewriter/objc-modern-container-subscript.mm b/test/Rewriter/objc-modern-container-subscript.mm new file mode 100644 index 0000000000000..d6bb9c2eb31dd --- /dev/null +++ b/test/Rewriter/objc-modern-container-subscript.mm @@ -0,0 +1,48 @@ +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar://11203853 + +void *sel_registerName(const char *); + +typedef unsigned int size_t; +@protocol P @end + +@interface NSMutableArray +#if __has_feature(objc_subscripting) +- (id)objectAtIndexedSubscript:(size_t)index; +- (void)setObject:(id)object atIndexedSubscript:(size_t)index; +#endif +@end + +#if __has_feature(objc_subscripting) +@interface XNSMutableArray +- (id)objectAtIndexedSubscript:(size_t)index; +- (void)setObject:(id)object atIndexedSubscript:(size_t)index; +#endif +@end + +@interface NSMutableDictionary +- (id)objectForKeyedSubscript:(id)key; +- (void)setObject:(id)object forKeyedSubscript:(id)key; +@end + +@class NSString; + +int main() { + NSMutableArray<P> * array; + id oldObject = array[10]; + + array[10] = oldObject; + + id unknown_array; + oldObject = unknown_array[1]; + + unknown_array[1] = oldObject; + + NSMutableDictionary *dictionary; + NSString *key; + id newObject; + oldObject = dictionary[key]; + dictionary[key] = newObject; // replace oldObject with newObject +} + diff --git a/test/Rewriter/objc-modern-implicit-cast.mm b/test/Rewriter/objc-modern-implicit-cast.mm new file mode 100644 index 0000000000000..e6121991e56b0 --- /dev/null +++ b/test/Rewriter/objc-modern-implicit-cast.mm @@ -0,0 +1,33 @@ +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar://11202764 + +typedef void(^BL)(void); + +id return_id(void(^block)(void)) { + return block; +} + +BL return_block(id obj) { + return obj; +} + +int main() +{ + void(^block)(void); + id obj; + block = obj; // AnyPointerToBlockPointerCast + obj = block; // BlockPointerToObjCPointerCast + + id obj1 = block; + + void(^block1)(void) = obj1; + + return_id(block1); + + return_id(obj1); + + return_block(block1); + + return_block(obj1); +} diff --git a/test/Rewriter/objc-modern-ivar-receiver-1.mm b/test/Rewriter/objc-modern-ivar-receiver-1.mm new file mode 100644 index 0000000000000..a5c17a6dd45c7 --- /dev/null +++ b/test/Rewriter/objc-modern-ivar-receiver-1.mm @@ -0,0 +1,31 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s + +void *sel_registerName(const char *); + +@interface NSMutableArray +- (void)addObject:(id)addObject; +@end + +@interface NSInvocation { +@private + id _container; +} ++ (NSInvocation *)invocationWithMethodSignature; + +@end + +@implementation NSInvocation + ++ (NSInvocation *)invocationWithMethodSignature { + NSInvocation *newInv; + id obj = newInv->_container; + [newInv->_container addObject:0]; + return 0; +} +@end + +// CHECK: id obj = (*(id *)((char *)newInv + OBJC_IVAR_$_NSInvocation$_container)); +// rdar://11076938 +// CHECK: struct _class_t *superclass; +// CHECK: extern "C" __declspec(dllimport) struct objc_cache _objc_empty_cache; diff --git a/test/Rewriter/objc-modern-linkage-spec.mm b/test/Rewriter/objc-modern-linkage-spec.mm new file mode 100644 index 0000000000000..028d78702fd93 --- /dev/null +++ b/test/Rewriter/objc-modern-linkage-spec.mm @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -Wno-attributes -D"__declspec(X)=" %t-rw.cpp +// rdar://11169733 + +extern "C" __declspec(dllexport) +@interface Test @end + +@implementation Test @end + +extern "C" { +__declspec(dllexport) +@interface Test1 @end + +@implementation Test1 @end + +__declspec(dllexport) +@interface Test2 @end + +@implementation Test2 @end +}; + diff --git a/test/Rewriter/objc-modern-metadata-visibility.mm b/test/Rewriter/objc-modern-metadata-visibility.mm new file mode 100644 index 0000000000000..42adf86b0f4fa --- /dev/null +++ b/test/Rewriter/objc-modern-metadata-visibility.mm @@ -0,0 +1,40 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s +// rdar://11144048 + +@class NSString; + +@interface NSObject { + Class isa; +} +@end + +@interface Sub : NSObject { + int subIvar; + NSString *nsstring; +@private + id PrivateIvar; +} +@end + +@implementation Sub +- (id) MyNSString { return subIvar ? PrivateIvar : nsstring; } +@end + +@interface NSString @end +@implementation NSString @end + +// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$subIvar; +// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long OBJC_IVAR_$_Sub$PrivateIvar; +// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$nsstring; +// CHECK: #pragma warning(disable:4273) +// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$subIvar +// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$nsstring +// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long int OBJC_IVAR_$_Sub$PrivateIvar +// CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_METACLASS_$_NSObject; +// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_Sub +// CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_CLASS_$_NSObject; +// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_Sub +// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString; +// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_NSString +// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString diff --git a/test/Rewriter/objc-modern-numeric-literal.mm b/test/Rewriter/objc-modern-numeric-literal.mm new file mode 100644 index 0000000000000..d27d03d54e23c --- /dev/null +++ b/test/Rewriter/objc-modern-numeric-literal.mm @@ -0,0 +1,69 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s +// rdar://10803676 + +extern "C" void *sel_registerName(const char *); + +typedef signed char BOOL; +typedef long NSInteger; +typedef unsigned long NSUInteger; + +#if __has_feature(objc_bool) +#define YES __objc_yes +#define NO __objc_no +#else +#define YES ((BOOL)1) +#define NO ((BOOL)0) +#endif + +@interface NSNumber ++ (NSNumber *)numberWithChar:(char)value; ++ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; ++ (NSNumber *)numberWithShort:(short)value; ++ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; ++ (NSNumber *)numberWithInt:(int)value; ++ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; ++ (NSNumber *)numberWithLong:(long)value; ++ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; ++ (NSNumber *)numberWithLongLong:(long long)value; ++ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; ++ (NSNumber *)numberWithFloat:(float)value; ++ (NSNumber *)numberWithDouble:(double)value; ++ (NSNumber *)numberWithBool:(BOOL)value; ++ (NSNumber *)numberWithInteger:(NSInteger)value ; ++ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value ; +@end + +int main(int argc, const char *argv[]) { + // character literals. + NSNumber *theLetterZ = @'Z'; // equivalent to [NSNumber numberWithChar:'Z'] + + // integral literals. + NSNumber *fortyTwo = @42; // equivalent to [NSNumber numberWithInt:42] + NSNumber *fortyTwoUnsigned = @42U; // equivalent to [NSNumber numberWithUnsignedInt:42U] + NSNumber *fortyTwoLong = @42L; // equivalent to [NSNumber numberWithLong:42L] + NSNumber *fortyTwoLongLong = @42LL; // equivalent to [NSNumber numberWithLongLong:42LL] + + // floating point literals. + NSNumber *piFloat = @3.141592654F; // equivalent to [NSNumber numberWithFloat:3.141592654F] + NSNumber *piDouble = @3.1415926535; // equivalent to [NSNumber numberWithDouble:3.1415926535] + + // BOOL literals. + NSNumber *yesNumber = @YES; // equivalent to [NSNumber numberWithBool:YES] + NSNumber *noNumber = @NO; // equivalent to [NSNumber numberWithBool:NO] + + NSNumber *trueNumber = @true; // equivalent to [NSNumber numberWithBool:(BOOL)true] + NSNumber *falseNumber = @false; // equivalent to [NSNumber numberWithBool:(BOOL)false] +} + +// CHECK: NSNumber *theLetterZ = ((NSNumber *(*)(id, SEL, char))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithChar:"), 'Z'); +// CHECK: NSNumber *fortyTwo = ((NSNumber *(*)(id, SEL, int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithInt:"), 42); +// CHECK: NSNumber *fortyTwoUnsigned = ((NSNumber *(*)(id, SEL, unsigned int))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithUnsignedInt:"), 42U); +// CHECK: NSNumber *fortyTwoLong = ((NSNumber *(*)(id, SEL, long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLong:"), 42L); +// CHECK: NSNumber *fortyTwoLongLong = ((NSNumber *(*)(id, SEL, long long))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithLongLong:"), 42LL); +// CHECK: NSNumber *piFloat = ((NSNumber *(*)(id, SEL, float))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithFloat:"), 3.1415927); +// CHECK: NSNumber *piDouble = ((NSNumber *(*)(id, SEL, double))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithDouble:"), 3.1415926535); +// CHECK: NSNumber *yesNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), (BOOL)true); +// CHECK: NSNumber *noNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), (BOOL)false); +// CHECK: NSNumber *trueNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), (BOOL)true); +// CHECK: NSNumber *falseNumber = ((NSNumber *(*)(id, SEL, BOOL))(void *)objc_msgSend)(objc_getClass("NSNumber"), sel_registerName("numberWithBool:"), (BOOL)false); diff --git a/test/Rewriter/objc-modern-property-attributes.mm b/test/Rewriter/objc-modern-property-attributes.mm new file mode 100644 index 0000000000000..7d74a95e7d168 --- /dev/null +++ b/test/Rewriter/objc-modern-property-attributes.mm @@ -0,0 +1,35 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s + +// rdar://11095151 + +typedef void (^void_block_t)(void); + +@interface PropertyClass { + int q; + void_block_t __completion; + PropertyClass* YVAR; + id ID; +} +@property int q; +@property int r; + +@property (copy) void_block_t completionBlock; +@property (retain) PropertyClass* Yblock; +@property (copy) id ID; + +@end + +@implementation PropertyClass +@synthesize q; // attributes should be "Ti,Vq" +@dynamic r; // attributes should be "Ti,D" +@synthesize completionBlock=__completion; // "T@?,C,V__completion" +@synthesize Yblock = YVAR; // "T@\"PropertyClass\",&,VYVAR" +@synthesize ID; // "T@,C,VID" +@end + +// CHECK: Ti,Vq +// CHECK: Ti,D +// CHECK: T@?,C,V__completion +// CHECK: T@\"PropertyClass\",&,VYVAR + diff --git a/test/Rewriter/objc-string-concat-1.m b/test/Rewriter/objc-string-concat-1.m index 32b25261465fb..80a9f04651dd7 100644 --- a/test/Rewriter/objc-string-concat-1.m +++ b/test/Rewriter/objc-string-concat-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @class NSString; diff --git a/test/Rewriter/objc-super-test.m b/test/Rewriter/objc-super-test.m index 38f68b98535a9..fa95ad2fd3461 100644 --- a/test/Rewriter/objc-super-test.m +++ b/test/Rewriter/objc-super-test.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - | grep objc_msgSendSuper | grep MainMethod +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - | grep objc_msgSendSuper | grep MainMethod typedef struct objc_selector *SEL; typedef struct objc_object *id; diff --git a/test/Rewriter/objc-synchronized-1.m b/test/Rewriter/objc-synchronized-1.m index 27f2a0af8bdf9..df5553690ffc8 100644 --- a/test/Rewriter/objc-synchronized-1.m +++ b/test/Rewriter/objc-synchronized-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - id SYNCH_EXPR(); void SYNCH_BODY(); diff --git a/test/Rewriter/properties.m b/test/Rewriter/properties.m index ca4a199cc64f8..493fc3f8f4b19 100644 --- a/test/Rewriter/properties.m +++ b/test/Rewriter/properties.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fms-extensions -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp void *sel_registerName(const char *); diff --git a/test/Rewriter/property-dot-syntax.mm b/test/Rewriter/property-dot-syntax.mm index 846bd824b537b..c8ee7234b4b20 100644 --- a/test/Rewriter/property-dot-syntax.mm +++ b/test/Rewriter/property-dot-syntax.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar:// 8520727 diff --git a/test/Rewriter/protocol-rewrite-1.m b/test/Rewriter/protocol-rewrite-1.m index 440527b6737ca..687a2591611ac 100644 --- a/test/Rewriter/protocol-rewrite-1.m +++ b/test/Rewriter/protocol-rewrite-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - typedef struct MyWidget { int a; diff --git a/test/Rewriter/protocol-rewrite-2.m b/test/Rewriter/protocol-rewrite-2.m index b3eb16a5f1194..e0ec4f991b530 100644 --- a/test/Rewriter/protocol-rewrite-2.m +++ b/test/Rewriter/protocol-rewrite-2.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o %t.cpp +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o %t.cpp // RUN: %clang_cc1 -fsyntax-only %t.cpp // rdar://10234024 diff --git a/test/Rewriter/rewrite-anonymous-union.m b/test/Rewriter/rewrite-anonymous-union.m index 579a06854fe63..339524fbc8ab8 100644 --- a/test/Rewriter/rewrite-anonymous-union.m +++ b/test/Rewriter/rewrite-anonymous-union.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc -o - %s +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi -o - %s // rdar://6948022 typedef unsigned int uint32_t; diff --git a/test/Rewriter/rewrite-api-bug.m b/test/Rewriter/rewrite-api-bug.m index 03fc89f34aadb..ebaa0be13d67f 100644 --- a/test/Rewriter/rewrite-api-bug.m +++ b/test/Rewriter/rewrite-api-bug.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @interface MyDerived - (void) instanceMethod; diff --git a/test/Rewriter/rewrite-block-argument.m b/test/Rewriter/rewrite-block-argument.m index 4ebbef9abcbd8..898f9836a743c 100644 --- a/test/Rewriter/rewrite-block-argument.m +++ b/test/Rewriter/rewrite-block-argument.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" -emit-llvm -o %t %t-rw.cpp // radar 7987817 diff --git a/test/Rewriter/rewrite-block-consts.mm b/test/Rewriter/rewrite-block-consts.mm index c74873f657397..fca10edd4f611 100644 --- a/test/Rewriter/rewrite-block-consts.mm +++ b/test/Rewriter/rewrite-block-consts.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar:// 8243071 diff --git a/test/Rewriter/rewrite-block-ivar-call.mm b/test/Rewriter/rewrite-block-ivar-call.mm index 80e8caab7271b..2ec27b3eb0659 100644 --- a/test/Rewriter/rewrite-block-ivar-call.mm +++ b/test/Rewriter/rewrite-block-ivar-call.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -rewrite-objc -o - %s +// RUN: %clang_cc1 -x objective-c++ -fblocks -rewrite-objc -fobjc-fragile-abi -o - %s @interface Foo { void (^_block)(void); diff --git a/test/Rewriter/rewrite-block-literal-1.mm b/test/Rewriter/rewrite-block-literal-1.mm index 04302d17f10f1..5213f500b9862 100644 --- a/test/Rewriter/rewrite-block-literal-1.mm +++ b/test/Rewriter/rewrite-block-literal-1.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 9254348 diff --git a/test/Rewriter/rewrite-block-literal.c b/test/Rewriter/rewrite-block-literal.mm index be9c06f7db259..732d0b9f8db9d 100644 --- a/test/Rewriter/rewrite-block-literal.c +++ b/test/Rewriter/rewrite-block-literal.mm @@ -1,4 +1,9 @@ -// RUN: %clang_cc1 -rewrite-objc %s -fblocks -o - +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +// rdar: // 11006566 void I( void (^)(void)); void (^noop)(void); @@ -36,11 +41,6 @@ void test2() { } } - -void (^test3())(void) { - return ^{}; -} - void test4() { void (^noop)(void) = ^{}; void (*noop2)() = 0; @@ -61,18 +61,12 @@ void test5() { void *X; -void test_arguments() { - int y; - int (^c)(char); - (1 ? c : 0)('x'); - (1 ? 0 : c)('x'); - - (1 ? c : c)('x'); -} - static int global_x = 10; void (^global_block)(void) = ^{ printf("global x is %d\n", global_x); }; +// CHECK: static __global_block_block_impl_0 __global_global_block_block_impl_0((void *)__global_block_block_func_0, &__global_block_block_desc_0_DATA); +// CHECK: void (*global_block)(void) = (void (*)())&__global_global_block_block_impl_0; + typedef void (^void_block_t)(void); static const void_block_t myBlock = ^{ }; diff --git a/test/Rewriter/rewrite-block-pointer.mm b/test/Rewriter/rewrite-block-pointer.mm index d010a22484af1..4838b74439ff5 100644 --- a/test/Rewriter/rewrite-block-pointer.mm +++ b/test/Rewriter/rewrite-block-pointer.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7638400 diff --git a/test/Rewriter/rewrite-block-property.m b/test/Rewriter/rewrite-block-property.m index 505e04b56ca91..5c44b7dd1ee9a 100644 --- a/test/Rewriter/rewrite-block-property.m +++ b/test/Rewriter/rewrite-block-property.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar://9055596 diff --git a/test/Rewriter/rewrite-byref-in-nested-blocks.mm b/test/Rewriter/rewrite-byref-in-nested-blocks.mm index a8f5b140eaac9..b1ff46b5ce4a8 100644 --- a/test/Rewriter/rewrite-byref-in-nested-blocks.mm +++ b/test/Rewriter/rewrite-byref-in-nested-blocks.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7692350 diff --git a/test/Rewriter/rewrite-byref-vars.mm b/test/Rewriter/rewrite-byref-vars.mm index 007ab43d097be..14a182a345c37 100644 --- a/test/Rewriter/rewrite-byref-vars.mm +++ b/test/Rewriter/rewrite-byref-vars.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7540194 @@ -53,5 +53,5 @@ __declspec(dllexport) extern "C" __declspec(dllexport) void XXXXBreakTheRewriter - (void) Meth { __attribute__((__blocks__(byref))) void ** listp = (void **)list; } @end -// $CLANG -cc1 -fms-extensions -rewrite-objc -x objective-c++ -fblocks bug.mm +// $CLANG -cc1 -fms-extensions -rewrite-objc -fobjc-fragile-abi -x objective-c++ -fblocks bug.mm // g++ -c -D"__declspec(X)=" bug.cpp diff --git a/test/Rewriter/rewrite-cast-ivar-access.mm b/test/Rewriter/rewrite-cast-ivar-access.mm index c04cbab403699..ccc1cdec606ce 100644 --- a/test/Rewriter/rewrite-cast-ivar-access.mm +++ b/test/Rewriter/rewrite-cast-ivar-access.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s // radar 7575882 diff --git a/test/Rewriter/rewrite-cast-ivar-modern-access.mm b/test/Rewriter/rewrite-cast-ivar-modern-access.mm new file mode 100644 index 0000000000000..4a6cb3279fd53 --- /dev/null +++ b/test/Rewriter/rewrite-cast-ivar-modern-access.mm @@ -0,0 +1,46 @@ +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +@interface F { + int supervar; +} +@end + +@interface G : F { +@public + int ivar; +} +@end + +@implementation G +- (void)foo:(F *)arg { + int q = arg->supervar; + int v = ((G *)arg)->ivar; +} +@end + +void objc_assign_strongCast(id); +void __CFAssignWithWriteBarrier(void **location, void *value) { + objc_assign_strongCast((id)value); +} + +// radar 7607605 +@interface RealClass { + @public + int f; +} +@end + +@implementation RealClass +@end + +@interface Foo { + id reserved; +} +@end + +@implementation Foo +- (void)bar { + ((RealClass*)reserved)->f = 99; +} +@end diff --git a/test/Rewriter/rewrite-cast-to-bool.mm b/test/Rewriter/rewrite-cast-to-bool.mm index 0e9f3640fb390..b3272b6d99b39 100644 --- a/test/Rewriter/rewrite-cast-to-bool.mm +++ b/test/Rewriter/rewrite-cast-to-bool.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 9899834 diff --git a/test/Rewriter/rewrite-category-property.mm b/test/Rewriter/rewrite-category-property.mm index 6b8f076222346..b54bb67063f5e 100644 --- a/test/Rewriter/rewrite-category-property.mm +++ b/test/Rewriter/rewrite-category-property.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s // radar 7630636 diff --git a/test/Rewriter/rewrite-constructor-init.mm b/test/Rewriter/rewrite-constructor-init.mm index 534e7fa0440cc..f12de1f0329b0 100644 --- a/test/Rewriter/rewrite-constructor-init.mm +++ b/test/Rewriter/rewrite-constructor-init.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar : // 8213998 diff --git a/test/Rewriter/rewrite-eh.m b/test/Rewriter/rewrite-eh.m index 9045f7f766eff..46d1930cad955 100644 --- a/test/Rewriter/rewrite-eh.m +++ b/test/Rewriter/rewrite-eh.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc -fobjc-exceptions -o - %s +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi -fobjc-exceptions -o - %s // rdar://7522880 @interface NSException diff --git a/test/Rewriter/rewrite-elaborated-type.mm b/test/Rewriter/rewrite-elaborated-type.mm index 9867b4d6de1ee..bef56b93b9b45 100644 --- a/test/Rewriter/rewrite-elaborated-type.mm +++ b/test/Rewriter/rewrite-elaborated-type.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D_Bool=bool -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 8143056 diff --git a/test/Rewriter/rewrite-extern-c.mm b/test/Rewriter/rewrite-extern-c.mm index 1c8e90faed9fc..c6104938adab0 100644 --- a/test/Rewriter/rewrite-extern-c.mm +++ b/test/Rewriter/rewrite-extern-c.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -rewrite-objc -o - %s +// RUN: %clang_cc1 -x objective-c++ -fblocks -rewrite-objc -fobjc-fragile-abi -o - %s // radar 7546096 extern "C" { diff --git a/test/Rewriter/rewrite-foreach-1.m b/test/Rewriter/rewrite-foreach-1.m index e68b45d1df2da..f57e13c40956d 100644 --- a/test/Rewriter/rewrite-foreach-1.m +++ b/test/Rewriter/rewrite-foreach-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @protocol P @end diff --git a/test/Rewriter/rewrite-foreach-2.m b/test/Rewriter/rewrite-foreach-2.m index 5ed15a34ac07c..228612aa854c0 100644 --- a/test/Rewriter/rewrite-foreach-2.m +++ b/test/Rewriter/rewrite-foreach-2.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @protocol P @end diff --git a/test/Rewriter/rewrite-foreach-3.m b/test/Rewriter/rewrite-foreach-3.m index ffe8295954e4f..ef3803f55234e 100644 --- a/test/Rewriter/rewrite-foreach-3.m +++ b/test/Rewriter/rewrite-foreach-3.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @protocol P @end diff --git a/test/Rewriter/rewrite-foreach-4.m b/test/Rewriter/rewrite-foreach-4.m index 5b66e978bebf6..42cb2fb0c25e1 100644 --- a/test/Rewriter/rewrite-foreach-4.m +++ b/test/Rewriter/rewrite-foreach-4.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @interface MyList - (id) allKeys; diff --git a/test/Rewriter/rewrite-foreach-5.m b/test/Rewriter/rewrite-foreach-5.m index 7baccc37898cb..2940f453d932c 100644 --- a/test/Rewriter/rewrite-foreach-5.m +++ b/test/Rewriter/rewrite-foreach-5.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp void *sel_registerName(const char *); diff --git a/test/Rewriter/rewrite-foreach-6.m b/test/Rewriter/rewrite-foreach-6.m index 96b472a60eef6..968c6f4a47ecf 100644 --- a/test/Rewriter/rewrite-foreach-6.m +++ b/test/Rewriter/rewrite-foreach-6.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar://5716356 // FIXME: Should be able to pipe into clang, but code is not diff --git a/test/Rewriter/rewrite-foreach-7.m b/test/Rewriter/rewrite-foreach-7.m index 9fa6a1a9f01a3..8c9293fec9533 100644 --- a/test/Rewriter/rewrite-foreach-7.m +++ b/test/Rewriter/rewrite-foreach-7.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @class NSArray; int main() { diff --git a/test/Rewriter/rewrite-foreach-in-block.mm b/test/Rewriter/rewrite-foreach-in-block.mm index 971330c6bfe90..d0a8728310e9a 100644 --- a/test/Rewriter/rewrite-foreach-in-block.mm +++ b/test/Rewriter/rewrite-foreach-in-block.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar:// 9878420 diff --git a/test/Rewriter/rewrite-foreach-protocol-id.m b/test/Rewriter/rewrite-foreach-protocol-id.m index 85d0d0dc44733..034fb7a9bb088 100644 --- a/test/Rewriter/rewrite-foreach-protocol-id.m +++ b/test/Rewriter/rewrite-foreach-protocol-id.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar:// 9039342 diff --git a/test/Rewriter/rewrite-forward-class.m b/test/Rewriter/rewrite-forward-class.m index 1d3af6f366c3b..0ac620a058c11 100644 --- a/test/Rewriter/rewrite-forward-class.m +++ b/test/Rewriter/rewrite-forward-class.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar://6969189 diff --git a/test/Rewriter/rewrite-forward-class.mm b/test/Rewriter/rewrite-forward-class.mm index 74c0508fc78af..8e4eda63f88e3 100644 --- a/test/Rewriter/rewrite-forward-class.mm +++ b/test/Rewriter/rewrite-forward-class.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp extern "C" { diff --git a/test/Rewriter/rewrite-function-decl.mm b/test/Rewriter/rewrite-function-decl.mm index 023e55db4bbb9..883d3931d6382 100644 --- a/test/Rewriter/rewrite-function-decl.mm +++ b/test/Rewriter/rewrite-function-decl.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fms-extensions -rewrite-objc -x objective-c++ -fblocks -o - %s +// RUN: %clang_cc1 -fms-extensions -rewrite-objc -fobjc-fragile-abi -x objective-c++ -fblocks -o - %s extern "C" __declspec(dllexport) void BreakTheRewriter(void) { __block int aBlockVariable = 0; diff --git a/test/Rewriter/rewrite-implementation.mm b/test/Rewriter/rewrite-implementation.mm index c1d89a3c36877..2cc3387b32bb9 100644 --- a/test/Rewriter/rewrite-implementation.mm +++ b/test/Rewriter/rewrite-implementation.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7649577 @@ -11,3 +11,6 @@ @implementation b @end +@interface NSArray @end +@class NSArray; +@implementation NSArray @end diff --git a/test/Rewriter/rewrite-ivar-use.m b/test/Rewriter/rewrite-ivar-use.m index 82cff5b2d6335..53b07c434f376 100644 --- a/test/Rewriter/rewrite-ivar-use.m +++ b/test/Rewriter/rewrite-ivar-use.m @@ -1,6 +1,9 @@ -// RUN: %clang_cc1 -rewrite-objc -fms-extensions %s -o - +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7490331 +void *sel_registerName(const char *); + @interface Foo { int a; id b; diff --git a/test/Rewriter/rewrite-local-externs-in-block.mm b/test/Rewriter/rewrite-local-externs-in-block.mm index d1a56a89ee586..35d282bd51930 100644 --- a/test/Rewriter/rewrite-local-externs-in-block.mm +++ b/test/Rewriter/rewrite-local-externs-in-block.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7735987 diff --git a/test/Rewriter/rewrite-local-static-id.mm b/test/Rewriter/rewrite-local-static-id.mm index a0b85f4f4dfda..b002b6eefd248 100644 --- a/test/Rewriter/rewrite-local-static-id.mm +++ b/test/Rewriter/rewrite-local-static-id.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" -emit-llvm -o %t %t-rw.cpp // radar 7946975 diff --git a/test/Rewriter/rewrite-message-expr.mm b/test/Rewriter/rewrite-message-expr.mm index d909f3ef93c30..dafb31b2b543b 100644 --- a/test/Rewriter/rewrite-message-expr.mm +++ b/test/Rewriter/rewrite-message-expr.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s // radar 7617047 diff --git a/test/Rewriter/rewrite-modern-array-literal.mm b/test/Rewriter/rewrite-modern-array-literal.mm new file mode 100644 index 0000000000000..208e646eb3137 --- /dev/null +++ b/test/Rewriter/rewrite-modern-array-literal.mm @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar://10803676 + +extern "C" void *sel_registerName(const char *); +@class NSString; + +@interface NSNumber ++ (NSNumber *)numberWithChar:(char)value; ++ (NSNumber *)numberWithInt:(int)value; +@end + +typedef unsigned long NSUInteger; + +@interface NSArray ++ (id)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; +@end + +int i; +int main() { + NSArray *array = @[ @"Hello", @1234 ]; + if (i) { + NSArray *array = @[ @"Hello", @1234 ]; + } + NSArray *array1 = @[ @"Hello", @1234, @[ @"Hello", @1234 ] ]; +} + diff --git a/test/Rewriter/rewrite-modern-block-ivar-call.mm b/test/Rewriter/rewrite-modern-block-ivar-call.mm new file mode 100644 index 0000000000000..1bafbdd15babc --- /dev/null +++ b/test/Rewriter/rewrite-modern-block-ivar-call.mm @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -E %s -o %t.m +// RUN: %clang_cc1 -fblocks -rewrite-objc -fms-extensions %t.m -o %t-rw.cpp +// RUN: FileCheck --input-file=%t-rw.cpp %s +// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +@interface Foo { + void (^_block)(void); +} +@end + +@implementation Foo +- (void)bar { + _block(); +} +@end + +// CHECK: ((void (*)(struct __block_impl *))((struct __block_impl *)(*(void (**)(void))((char *)self + OBJC_IVAR_$_Foo$_block)))->FuncPtr)((struct __block_impl *)(*(void (**)(void))((char *)self + OBJC_IVAR_$_Foo$_block))); diff --git a/test/Rewriter/rewrite-modern-block.mm b/test/Rewriter/rewrite-modern-block.mm new file mode 100644 index 0000000000000..8da723d319ffc --- /dev/null +++ b/test/Rewriter/rewrite-modern-block.mm @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar://11230308 + +typedef struct { + char byte0; + char byte1; +} CFUUIDBytes; + +void x(void *); + +void y() { + __block CFUUIDBytes bytes; + + void (^bar)() = ^{ + x(&bytes); + }; +} + +// rdar://11236342 +int foo() { + __block int hello; +} diff --git a/test/Rewriter/rewrite-modern-catch.m b/test/Rewriter/rewrite-modern-catch.m new file mode 100644 index 0000000000000..1900301e91129 --- /dev/null +++ b/test/Rewriter/rewrite-modern-catch.m @@ -0,0 +1,31 @@ +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +void foo(id arg); + +@interface NSException +@end + +@interface Foo +@end + +@implementation Foo +- (void)bar { + @try { + } @catch (NSException *e) { + foo(e); + } + @catch (Foo *f) { + } + @catch (...) { + @try { + } + @catch (Foo *f1) { + foo(f1); + } + @catch (id pid) { + foo(pid); + } + } +} +@end diff --git a/test/Rewriter/rewrite-modern-class.mm b/test/Rewriter/rewrite-modern-class.mm new file mode 100644 index 0000000000000..b6be98a51d024 --- /dev/null +++ b/test/Rewriter/rewrite-modern-class.mm @@ -0,0 +1,70 @@ +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +@protocol PROTO @end + +@interface empty_root @end + +@interface root_with_ivars +{ + id ROOT_IVAR; + id ROOT1_IVAR; +} +@end + +@interface MAXIMAL : root_with_ivars<PROTO> +{ + double D_IVAR; + double D_PROPERTY; +} +- (void) V_METH; +@end + +@implementation MAXIMAL +- (void) V_METH {} +@end +//========================================= +@interface empty_class @end + +@implementation empty_class @end +//========================================= +@interface class_empty_root : empty_root @end + +@implementation class_empty_root @end +//========================================= +@interface class_with_ivars : empty_root +{ + int class_with_ivars_IVAR; +} +@end + +@implementation class_with_ivars @end +//========================================= +@interface class_has_no_ivar : root_with_ivars @end + +@implementation class_has_no_ivar @end + +//============================class needs to be synthesized here===================== +@interface SUPER { +@public + double divar; + SUPER *p_super; +} +@end + +@interface INTF @end + +@implementation INTF +- (SUPER *) Meth : (SUPER *)arg { + return arg->p_super; +} +@end + +@class FORM_CLASS; +@interface INTF_DECL { +} +@end + +double Meth(INTF_DECL *p, FORM_CLASS *f) { + return 1.34; +} diff --git a/test/Rewriter/rewrite-modern-container-literal.mm b/test/Rewriter/rewrite-modern-container-literal.mm new file mode 100644 index 0000000000000..87b9b892813d4 --- /dev/null +++ b/test/Rewriter/rewrite-modern-container-literal.mm @@ -0,0 +1,55 @@ +// RUN: %clang_cc1 -x objective-c++ -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar://10803676 + +void *sel_registerName(const char *); +typedef unsigned long NSUInteger; +typedef long NSInteger; +typedef signed char BOOL; + +@interface NSNumber ++ (NSNumber *)numberWithChar:(char)value; ++ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; ++ (NSNumber *)numberWithShort:(short)value; ++ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; ++ (NSNumber *)numberWithInt:(int)value; ++ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; ++ (NSNumber *)numberWithLong:(long)value; ++ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; ++ (NSNumber *)numberWithLongLong:(long long)value; ++ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; ++ (NSNumber *)numberWithFloat:(float)value; ++ (NSNumber *)numberWithDouble:(double)value; ++ (NSNumber *)numberWithBool:(BOOL)value; ++ (NSNumber *)numberWithInteger:(NSInteger)value ; ++ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value ; +@end + +@protocol NSCopying @end + +@interface NSDictionary ++ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id <NSCopying> [])keys count:(NSUInteger)cnt; +@end + +@interface NSArray ++ (id)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; +@end + +@interface NSString<NSCopying> +@end + +id NSUserName(); + +@interface NSDate ++ (id)date; +@end + +int main() { +NSArray *array = @[ @"Hello", NSUserName(), [NSDate date], [NSNumber numberWithInt:42]]; + +NSDictionary *dictionary = @{ @"name" : NSUserName(), @"date" : [NSDate date], @"process" : @"processInfo"}; + +NSDictionary *dict = @{ @"name":@666, @"man":@__objc_yes, @"date":@1.3 }; + +} + diff --git a/test/Rewriter/rewrite-modern-ivar-use.mm b/test/Rewriter/rewrite-modern-ivar-use.mm new file mode 100644 index 0000000000000..ec8d2c7d61594 --- /dev/null +++ b/test/Rewriter/rewrite-modern-ivar-use.mm @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw-modern.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw-modern.cpp + +void *sel_registerName(const char *); + +@interface Foo { + int a; + id b; +} +- (void)bar; +- (void)baz:(id)q; +@end + +@implementation Foo +// radar 7522803 +static void foo(id bar) { + int i = ((Foo *)bar)->a; +} + +- (void)bar { + a = 42; +} +- (void)baz:(id)q { +} +@end + diff --git a/test/Rewriter/rewrite-modern-ivars-1.mm b/test/Rewriter/rewrite-modern-ivars-1.mm new file mode 100644 index 0000000000000..376d300c7e9d6 --- /dev/null +++ b/test/Rewriter/rewrite-modern-ivars-1.mm @@ -0,0 +1,89 @@ +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +@interface NSCheapMutableString { +@private + struct S s0; + union { + char *fat; + unsigned char *thin; + } contents; + + struct { + unsigned int isFat:1; + unsigned int freeWhenDone:1; + unsigned int refs:30; + } flags; + + struct S { + int iS1; + double dS1; + } others; + + union U { + int iU1; + double dU1; + } u_others; + + enum { + One, Two + } E1; + + enum e { + Yes = 1, + No = 0 + } BoOl; + + struct S s1; + + enum e E2; + + union { + char *fat; + unsigned char *thin; + } Last_contents; + + struct { + unsigned int isFat:1; + unsigned int freeWhenDone:1; + unsigned int refs:30; + } Last_flags; +} +@end + +@interface III { +@private + struct S s0; + + union { + char *fat; + unsigned char *thin; + } contents; + + struct { + unsigned int isFat:1; + unsigned int freeWhenDone:1; + unsigned int refs:30; + } flags; + + enum { + One1 = 1000, Two1, Three1 + } E1; + + struct S s1; + + enum e E2; + + union { + char *fat; + unsigned char *thin; + } Last_contents; + + struct { + unsigned int isFat:1; + unsigned int freeWhenDone:1; + unsigned int refs:30; + } Last_flags; +} +@end + diff --git a/test/Rewriter/rewrite-modern-ivars-2.mm b/test/Rewriter/rewrite-modern-ivars-2.mm new file mode 100644 index 0000000000000..0faed5c55cc2a --- /dev/null +++ b/test/Rewriter/rewrite-modern-ivars-2.mm @@ -0,0 +1,101 @@ +// RUN: %clang_cc1 -triple i386-apple-darwin9 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +@interface B @end + +@interface A { + struct s0 { + int f0; + int f1; + } f0; + id f1; +__weak B *f2; + int f3 : 5; + struct s1 { + int *f0; + int *f1; + } f4[2][1]; +} +@end + +@interface C : A +@property int p3; +@end + +@implementation C +@synthesize p3 = _p3; +@end + +@interface A() +@property int p0; +@property (assign) __strong id p1; +@property (assign) __weak id p2; +@end + +// FIXME: Check layout for this class, once it is clear what the right +// answer is. +@implementation A +@synthesize p0 = _p0; +@synthesize p1 = _p1; +@synthesize p2 = _p2; +@end + +@interface D : A +@property int p3; +@end + +// FIXME: Check layout for this class, once it is clear what the right +// answer is. +@implementation D +@synthesize p3 = _p3; +@end + +typedef unsigned short UInt16; + + +typedef signed char BOOL; +typedef unsigned int FSCatalogInfoBitmap; + +@interface NSFileLocationComponent { + @private + + id _specifierOrStandardizedPath; + BOOL _carbonCatalogInfoAndNameAreValid; + FSCatalogInfoBitmap _carbonCatalogInfoMask; + id _name; + id _containerComponent; + id _presentableName; + id _iconAsAttributedString; +} +@end + +@implementation NSFileLocationComponent @end + +// rdar://11229770 + +@interface Foo { + int bar:26; +} +@end + +@implementation Foo +@end + +@interface Foo1 { + int bar:26; + int bar2:4; +} +@end + +@implementation Foo1 +@end + +@interface Foo3 { + int foo; + int bar:26; +} +@end + +@implementation Foo3 +@end + diff --git a/test/Rewriter/rewrite-modern-ivars.mm b/test/Rewriter/rewrite-modern-ivars.mm new file mode 100644 index 0000000000000..5e01a44e95743 --- /dev/null +++ b/test/Rewriter/rewrite-modern-ivars.mm @@ -0,0 +1,64 @@ +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +@protocol P @end +@protocol P1 @end +@interface INTF +{ + id CLASS_IVAR; + id<P, P1> Q_IVAR; + + void (^_block)(id<P>); + void (*_fptr)(void (^_block)(id<P>)); + char CLASS_EXT_IVAR; + id<P, P1> (^ext_block)(id<P>, INTF<P,P1>*, INTF*); + id IMPL_IVAR; + double D_IMPL_IVAR; + INTF<P> *(*imp_fptr)(void (^_block)(id<P>, INTF<P,P1>*)); + id arr[100]; +} +@end + +@implementation INTF @end + +@interface MISC_INTF +{ + id CLASS_IVAR; + id<P, P1> Q_IVAR; + + void (^_block)(id<P>); + void (*_fptr)(void (^_block)(id<P>)); + unsigned int BF : 8; +} +@end + +@interface MISC_INTF() +{ + char CLASS_EXT_IVAR; + id<P, P1> (^ext_block)(id<P>, MISC_INTF<P,P1>*, MISC_INTF*); +} +@end + +@interface MISC_INTF() { + int II1; + double DD1; } +@end + +@interface MISC_INTF() { int II2; double DD2; } +@end + +@interface MISC_INTF() { int II3; + double DD3; } +@end + +@interface MISC_INTF() { int II4; double DD4; +} +@end + +@implementation MISC_INTF +{ + id IMPL_IVAR; + double D_IMPL_IVAR; + MISC_INTF<P> *(*imp_fptr)(void (^_block)(id<P>, MISC_INTF<P,P1>*)); +} +@end diff --git a/test/Rewriter/rewrite-modern-nested-ivar.mm b/test/Rewriter/rewrite-modern-nested-ivar.mm new file mode 100644 index 0000000000000..13e31cd01ead4 --- /dev/null +++ b/test/Rewriter/rewrite-modern-nested-ivar.mm @@ -0,0 +1,33 @@ +// RUN: %clang_cc1 -E %s -o %t.m +// RUN: %clang_cc1 -fblocks -rewrite-objc -fms-extensions %t.m -o %t-rw.cpp +// RUN: FileCheck --input-file=%t-rw.cpp %s +// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +@interface NSURLResponse { +@public + NSURLResponse *InnerResponse; +} +@end + +@interface NSCachedURLResponseInternal +{ + @public + NSURLResponse *response; +} +@end + +@interface NSCachedURLResponse +{ + @private + NSCachedURLResponseInternal *_internal; +} +- (void) Meth; +@end + +@implementation NSCachedURLResponse +- (void) Meth { + _internal->response->InnerResponse = 0; + } +@end + +// CHECK: (*(NSURLResponse **)((char *)(*(NSURLResponse **)((char *)(*(NSCachedURLResponseInternal **)((char *)self + OBJC_IVAR_$_NSCachedURLResponse$_internal)) + OBJC_IVAR_$_NSCachedURLResponseInternal$response)) + OBJC_IVAR_$_NSURLResponse$InnerResponse)) = 0; diff --git a/test/Rewriter/rewrite-modern-protocol.mm b/test/Rewriter/rewrite-modern-protocol.mm new file mode 100644 index 0000000000000..a4bd617ba6fda --- /dev/null +++ b/test/Rewriter/rewrite-modern-protocol.mm @@ -0,0 +1,31 @@ +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +@protocol ROOT @end + +@protocol P1 @end + +@protocol P2<ROOT> @end + +@class NSObject; + +@protocol PROTO <P1, P2> +- (id) INST_METHOD; ++ (id) CLASS_METHOD : (id)ARG; +@property id Prop_in_PROTO; +@optional +- (id) opt_instance_method; ++ (id) opt_class_method; +@property (readonly, retain) NSObject *AnotherProperty; +@required +- (id) req; +@optional +- (id) X_opt_instance_method; ++ (id) X_opt_class_method; +@end + +@interface INTF <PROTO, ROOT> +@end + +@implementation INTF +@end diff --git a/test/Rewriter/rewrite-modern-struct-ivar.mm b/test/Rewriter/rewrite-modern-struct-ivar.mm new file mode 100644 index 0000000000000..09c02dffab194 --- /dev/null +++ b/test/Rewriter/rewrite-modern-struct-ivar.mm @@ -0,0 +1,24 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -fblocks -rewrite-objc -fms-extensions %t.mm -o %t-rw.cpp +// RUN: FileCheck --input-file=%t-rw.cpp %s +// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +struct S { + int i1; + double d1; + void (^block1)(); +}; + +@interface I +{ + struct S struct_ivar; + + struct S *pstruct_ivar; +} +@end + +@implementation I +- (struct S) dMeth{ return struct_ivar; } +@end + +// CHECK: return (*(struct S *)((char *)self + OBJC_IVAR_$_I$struct_ivar)); diff --git a/test/Rewriter/rewrite-modern-synchronized.m b/test/Rewriter/rewrite-modern-synchronized.m new file mode 100644 index 0000000000000..e89533930388e --- /dev/null +++ b/test/Rewriter/rewrite-modern-synchronized.m @@ -0,0 +1,35 @@ +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +typedef struct objc_class *Class; +typedef struct objc_object { + Class isa; +} *id; + +void *sel_registerName(const char *); + +id SYNCH_EXPR(); +void SYNCH_BODY(); +void SYNCH_BEFORE(); +void SYNC_AFTER(); + +void foo(id sem) +{ + SYNCH_BEFORE(); + @synchronized (SYNCH_EXPR()) { + SYNCH_BODY(); + return; + } + SYNC_AFTER(); + @synchronized ([sem self]) { + SYNCH_BODY(); + return; + } +} + +void test_sync_with_implicit_finally() { + id foo; + @synchronized (foo) { + return; // The rewriter knows how to generate code for implicit finally + } +} diff --git a/test/Rewriter/rewrite-modern-throw.m b/test/Rewriter/rewrite-modern-throw.m new file mode 100644 index 0000000000000..191238443d3d7 --- /dev/null +++ b/test/Rewriter/rewrite-modern-throw.m @@ -0,0 +1,67 @@ +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +typedef struct objc_class *Class; +typedef struct objc_object { + Class isa; +} *id; + +void *sel_registerName(const char *); + +@interface Foo @end +void TRY(); +void SPLATCH(); +void MYTRY(); +void MYCATCH(); + +void foo() { + @try { TRY(); } + @catch (...) { SPLATCH(); @throw; } +} + +int main() +{ + + @try { + MYTRY(); + } + + @catch (Foo* localException) { + MYCATCH(); + @throw localException; + } + + // no catch clause + @try { } + @finally { } +} + + +@interface INST +{ + INST* throw_val; +} + +- (id) ThrowThis; + +- (void) MainMeth; + +@end + + +@implementation INST +- (id) ThrowThis { return 0; } + +- (void) MainMeth { + @try { + MYTRY(); + } + @catch (Foo* localException) { + MYCATCH(); + @throw [self ThrowThis]; + } + @catch (...) { + @throw [throw_val ThrowThis]; + } +} +@end diff --git a/test/Rewriter/rewrite-modern-try-catch-finally.m b/test/Rewriter/rewrite-modern-try-catch-finally.m new file mode 100644 index 0000000000000..9beab7d751006 --- /dev/null +++ b/test/Rewriter/rewrite-modern-try-catch-finally.m @@ -0,0 +1,63 @@ +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +typedef struct objc_class *Class; +typedef struct objc_object { + Class isa; +} *id; + +extern int printf(const char *, ...); + +int main() { + @try { + } + @finally { + } + while (1) { + @try { + printf("executing try"); + break; + } @finally { + printf("executing finally"); + } + printf("executing after finally block"); + } + @try { + printf("executing try"); + } @finally { + printf("executing finally"); + } + return 0; +} + +void test2_try_with_implicit_finally() { + @try { + return; + } @catch (id e) { + + } +} + +void FINALLY(); +void TRY(); +void CATCH(); + +@interface NSException +@end + +@interface Foo +@end + +@implementation Foo +- (void)bar { + @try { + TRY(); + } + @catch (NSException *e) { + CATCH(); + } + @finally { + FINALLY(); + } +} +@end diff --git a/test/Rewriter/rewrite-modern-try-finally.m b/test/Rewriter/rewrite-modern-try-finally.m new file mode 100644 index 0000000000000..500133b861426 --- /dev/null +++ b/test/Rewriter/rewrite-modern-try-finally.m @@ -0,0 +1,40 @@ +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp + +typedef struct objc_class *Class; +typedef struct objc_object { + Class isa; +} *id; + +void FINALLY(); +void TRY(); +void INNER_FINALLY(); +void INNER_TRY(); +void CHECK(); + +@interface Foo +@end + +@implementation Foo +- (void)bar { + @try { + TRY(); + } + @finally { + FINALLY(); + } + CHECK(); + @try { + TRY(); + } + @finally { + @try { + INNER_TRY(); + } + @finally { + INNER_FINALLY(); + } + FINALLY(); + } +} +@end diff --git a/test/Rewriter/rewrite-nest.m b/test/Rewriter/rewrite-nest.m index ebbcded414e93..a08f9475d5d6e 100644 --- a/test/Rewriter/rewrite-nest.m +++ b/test/Rewriter/rewrite-nest.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @interface NSMapTable @end @interface NSEnumerator @end diff --git a/test/Rewriter/rewrite-nested-blocks-1.mm b/test/Rewriter/rewrite-nested-blocks-1.mm index 582f5f4c0d7c7..672486b1f9e2d 100644 --- a/test/Rewriter/rewrite-nested-blocks-1.mm +++ b/test/Rewriter/rewrite-nested-blocks-1.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7696893 diff --git a/test/Rewriter/rewrite-nested-blocks-2.mm b/test/Rewriter/rewrite-nested-blocks-2.mm index 5a8e1ccdcf953..1555767086695 100644 --- a/test/Rewriter/rewrite-nested-blocks-2.mm +++ b/test/Rewriter/rewrite-nested-blocks-2.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // grep "static void __FUNC_block_copy_" %t-rw.cpp | count 2 // rdar://8499592 diff --git a/test/Rewriter/rewrite-nested-blocks.mm b/test/Rewriter/rewrite-nested-blocks.mm index 1a6bcdde61768..6c860ef7e7209 100644 --- a/test/Rewriter/rewrite-nested-blocks.mm +++ b/test/Rewriter/rewrite-nested-blocks.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7682149 diff --git a/test/Rewriter/rewrite-nested-ivar.mm b/test/Rewriter/rewrite-nested-ivar.mm index 1787cc76af073..bab221d33f350 100644 --- a/test/Rewriter/rewrite-nested-ivar.mm +++ b/test/Rewriter/rewrite-nested-ivar.mm @@ -1,5 +1,7 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw-modern.cpp +// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw-modern.cpp // radar 7583971 diff --git a/test/Rewriter/rewrite-nested-property-in-blocks.mm b/test/Rewriter/rewrite-nested-property-in-blocks.mm index 2dffe66ab326b..6a03d7319d684 100755 --- a/test/Rewriter/rewrite-nested-property-in-blocks.mm +++ b/test/Rewriter/rewrite-nested-property-in-blocks.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fms-extensions -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 8608293 diff --git a/test/Rewriter/rewrite-no-nextline.mm b/test/Rewriter/rewrite-no-nextline.mm index 0c3657c906785..4ef37157f7482 100644 --- a/test/Rewriter/rewrite-no-nextline.mm +++ b/test/Rewriter/rewrite-no-nextline.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7946975 diff --git a/test/Rewriter/rewrite-property-attributes.mm b/test/Rewriter/rewrite-property-attributes.mm index 41f457cfbd087..c70760353f8c2 100644 --- a/test/Rewriter/rewrite-property-attributes.mm +++ b/test/Rewriter/rewrite-property-attributes.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7214439 diff --git a/test/Rewriter/rewrite-property-set-cfstring.mm b/test/Rewriter/rewrite-property-set-cfstring.mm index 5e670bf751d36..3ac90656ba04d 100644 --- a/test/Rewriter/rewrite-property-set-cfstring.mm +++ b/test/Rewriter/rewrite-property-set-cfstring.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar:// 8527018 diff --git a/test/Rewriter/rewrite-protocol-property.mm b/test/Rewriter/rewrite-protocol-property.mm index b70b54fc53818..3a53f2377fc44 100644 --- a/test/Rewriter/rewrite-protocol-property.mm +++ b/test/Rewriter/rewrite-protocol-property.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -Did="void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar:// 8558702 diff --git a/test/Rewriter/rewrite-protocol-qualified.mm b/test/Rewriter/rewrite-protocol-qualified.mm index fae11a0adfa37..f828724a1568c 100644 --- a/test/Rewriter/rewrite-protocol-qualified.mm +++ b/test/Rewriter/rewrite-protocol-qualified.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"id=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7589414 diff --git a/test/Rewriter/rewrite-protocol-type-1.m b/test/Rewriter/rewrite-protocol-type-1.m index 2bdf8e462223d..5246df45ffc60 100644 --- a/test/Rewriter/rewrite-protocol-type-1.m +++ b/test/Rewriter/rewrite-protocol-type-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @protocol MyProto1 @end diff --git a/test/Rewriter/rewrite-qualified-id.mm b/test/Rewriter/rewrite-qualified-id.mm index fe3607d41d0dd..f54bae9c37182 100644 --- a/test/Rewriter/rewrite-qualified-id.mm +++ b/test/Rewriter/rewrite-qualified-id.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7680953 diff --git a/test/Rewriter/rewrite-rewritten-initializer.mm b/test/Rewriter/rewrite-rewritten-initializer.mm index 80ad7fc4e631c..14734f9af2c31 100644 --- a/test/Rewriter/rewrite-rewritten-initializer.mm +++ b/test/Rewriter/rewrite-rewritten-initializer.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7669784 diff --git a/test/Rewriter/rewrite-static-block.mm b/test/Rewriter/rewrite-static-block.mm index c99557f52ef3b..4ee227ea91d24 100644 --- a/test/Rewriter/rewrite-static-block.mm +++ b/test/Rewriter/rewrite-static-block.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp -emit-llvm -o %t-rw.ll // RUN: FileCheck --input-file=%t-rw.ll %s diff --git a/test/Rewriter/rewrite-super-message.mm b/test/Rewriter/rewrite-super-message.mm index be0a963c55d4a..d770b33750e50 100644 --- a/test/Rewriter/rewrite-super-message.mm +++ b/test/Rewriter/rewrite-super-message.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -DKEEP_ATTRIBUTES -D"id=struct objc_object *" -D"Class=struct objc_class *" -D"SEL=void*" -D"__declspec(X)=" -emit-llvm -o - %t-rw.cpp | FileCheck %t-rw.cpp // radar 7738453 @@ -18,3 +18,34 @@ void *sel_registerName(const char *); @end // CHECK: call %struct.objc_class* @class_getSuperclass + +@class NSZone; + +@interface NSObject { +} + ++ (id)allocWithZone:(NSZone *)zone; +@end + + +@interface NSArray : NSObject +@end + +@implementation NSArray ++ (id)allocWithZone:(NSZone *)zone { + return [super allocWithZone:zone]; +} +@end + +@interface XNSArray +{ + Class isa; +} +@end + +@class XNSArray; + +@interface __NSArray0 : XNSArray +@end + +@implementation __NSArray0 @end diff --git a/test/Rewriter/rewrite-trivial-constructor.mm b/test/Rewriter/rewrite-trivial-constructor.mm index 81c7d9b8a72ed..f14f4b15b3bf4 100644 --- a/test/Rewriter/rewrite-trivial-constructor.mm +++ b/test/Rewriter/rewrite-trivial-constructor.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fms-extensions -rewrite-objc -x objective-c++ -fblocks -o - %s +// RUN: %clang_cc1 -fms-extensions -rewrite-objc -fobjc-fragile-abi -x objective-c++ -fblocks -o - %s // radar 7537770 typedef struct { diff --git a/test/Rewriter/rewrite-try-catch.m b/test/Rewriter/rewrite-try-catch.m index d0c6d2acf67d1..b4d13b6ac2fee 100644 --- a/test/Rewriter/rewrite-try-catch.m +++ b/test/Rewriter/rewrite-try-catch.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @interface Foo @end @interface GARF @end diff --git a/test/Rewriter/rewrite-typeof.mm b/test/Rewriter/rewrite-typeof.mm index b859ac3d684c7..24e3bcc55bce3 100644 --- a/test/Rewriter/rewrite-typeof.mm +++ b/test/Rewriter/rewrite-typeof.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: FileCheck -check-prefix LP --input-file=%t-rw.cpp %s extern "C" { diff --git a/test/Rewriter/rewrite-unique-block-api.mm b/test/Rewriter/rewrite-unique-block-api.mm index 130f51436542f..2c0c4a9094dbb 100644 --- a/test/Rewriter/rewrite-unique-block-api.mm +++ b/test/Rewriter/rewrite-unique-block-api.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7630551 diff --git a/test/Rewriter/rewrite-user-defined-accessors.mm b/test/Rewriter/rewrite-user-defined-accessors.mm index 366e53b832f2d..3c38e178d6198 100644 --- a/test/Rewriter/rewrite-user-defined-accessors.mm +++ b/test/Rewriter/rewrite-user-defined-accessors.mm @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -Did="void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar:// 8570020 diff --git a/test/Rewriter/rewrite-vararg.m b/test/Rewriter/rewrite-vararg.m index d45403153eed5..bd58a6acf3c39 100644 --- a/test/Rewriter/rewrite-vararg.m +++ b/test/Rewriter/rewrite-vararg.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // rdar://9056351 diff --git a/test/Rewriter/rewrite-weak-attr.m b/test/Rewriter/rewrite-weak-attr.m index 2e559ee3e3220..60c6fc881a83c 100644 --- a/test/Rewriter/rewrite-weak-attr.m +++ b/test/Rewriter/rewrite-weak-attr.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple i686-pc-win32 -fms-extensions -fblocks -Dnil=0 -rewrite-objc -o - %s +// RUN: %clang_cc1 -triple i686-pc-win32 -fms-extensions -fblocks -Dnil=0 -rewrite-objc -fobjc-fragile-abi -o - %s int main() { __weak __block id foo = nil; __block id foo2 = nil; diff --git a/test/Rewriter/static-type-protocol-1.m b/test/Rewriter/static-type-protocol-1.m index a072c9f3ca3f1..bafe2860d1c08 100644 --- a/test/Rewriter/static-type-protocol-1.m +++ b/test/Rewriter/static-type-protocol-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @protocol Proto - (void) ProtoDidget; diff --git a/test/Rewriter/undecl-objc-h.m b/test/Rewriter/undecl-objc-h.m index a60d81024ce20..5c3e6930da06d 100644 --- a/test/Rewriter/undecl-objc-h.m +++ b/test/Rewriter/undecl-objc-h.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - typedef struct S { int * pint; diff --git a/test/Rewriter/undeclared-method-1.m b/test/Rewriter/undeclared-method-1.m index 89d33ce4518a8..9b4ca1920ba02 100644 --- a/test/Rewriter/undeclared-method-1.m +++ b/test/Rewriter/undeclared-method-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @interface Derived @end diff --git a/test/Rewriter/undef-field-reference-1.m b/test/Rewriter/undef-field-reference-1.m index 039c500a2486f..9c067a80a4e90 100644 --- a/test/Rewriter/undef-field-reference-1.m +++ b/test/Rewriter/undef-field-reference-1.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - @interface MyDerived { diff --git a/test/Rewriter/unnamed-bf-modern-write.mm b/test/Rewriter/unnamed-bf-modern-write.mm new file mode 100644 index 0000000000000..892382ff973f7 --- /dev/null +++ b/test/Rewriter/unnamed-bf-modern-write.mm @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -E %s -o %t.mm +// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s + +@interface Foo { +@private + int first; + int :1; + int third :1; + int :1; + int fifth :1; +} +@end +@implementation Foo +@end + +// CHECK: struct Foo_IMPL { +// CHECK-NEXT: int first; +// CHECK-NEXT: int : 1; +// CHECK-NEXT: int third : 1; +// CHECK-NEXT: int : 1; +// CHECK-NEXT: int fifth : 1; +// CHECK-NEXT: char : 0; +// CHECK-NEXT: }; diff --git a/test/Rewriter/va-method.m b/test/Rewriter/va-method.m index 366552fd56ab2..c232d23594137 100644 --- a/test/Rewriter/va-method.m +++ b/test/Rewriter/va-method.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -rewrite-objc -fobjc-fragile-abi %s -o - #include <stdarg.h> diff --git a/test/Rewriter/weak_byref_objects.m b/test/Rewriter/weak_byref_objects.m index a0ebe88eaf16e..1b9efbe573b43 100644 --- a/test/Rewriter/weak_byref_objects.m +++ b/test/Rewriter/weak_byref_objects.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fblocks -triple i386-apple-darwin9 -fobjc-gc -rewrite-objc %s -o - +// RUN: %clang_cc1 -fblocks -triple i386-apple-darwin9 -fobjc-gc -rewrite-objc -fobjc-fragile-abi %s -o - #define nil 0 int main() { |