diff options
Diffstat (limited to 'test/Rewriter')
-rw-r--r-- | test/Rewriter/blockstruct.m | 17 | ||||
-rw-r--r-- | test/Rewriter/dllimport-typedef.c | 2 | ||||
-rw-r--r-- | test/Rewriter/finally.m | 2 | ||||
-rw-r--r-- | test/Rewriter/properties.m | 7 | ||||
-rw-r--r-- | test/Rewriter/property-dot-syntax.mm | 46 | ||||
-rw-r--r-- | test/Rewriter/rewrite-block-pointer.mm | 30 | ||||
-rw-r--r-- | test/Rewriter/rewrite-captured-nested-bvar.c | 35 | ||||
-rw-r--r-- | test/Rewriter/rewrite-nested-blocks-2.mm | 18 | ||||
-rwxr-xr-x | test/Rewriter/rewrite-nested-property-in-blocks.mm | 52 | ||||
-rw-r--r-- | test/Rewriter/rewrite-property-set-cfstring.mm | 21 | ||||
-rw-r--r-- | test/Rewriter/rewrite-protocol-property.mm | 22 | ||||
-rw-r--r-- | test/Rewriter/rewrite-protocol-qualified.mm | 18 | ||||
-rw-r--r-- | test/Rewriter/rewrite-user-defined-accessors.mm | 30 |
13 files changed, 296 insertions, 4 deletions
diff --git a/test/Rewriter/blockstruct.m b/test/Rewriter/blockstruct.m new file mode 100644 index 000000000000..977e0d6ce5a0 --- /dev/null +++ b/test/Rewriter/blockstruct.m @@ -0,0 +1,17 @@ +// 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"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar://8918702 + +typedef void (^b_t)(void); +void a(b_t work) { } +struct _s { + int a; +}; +struct _s *r(); + +void f() { + __block struct _s *s = 0; + a(^{ + s = (struct _s *)r(); + }); +} diff --git a/test/Rewriter/dllimport-typedef.c b/test/Rewriter/dllimport-typedef.c index 441f49866817..72cea70cf2d6 100644 --- a/test/Rewriter/dllimport-typedef.c +++ b/test/Rewriter/dllimport-typedef.c @@ -11,7 +11,7 @@ void bar() { return 1; } // CHECK-NEG: error: void function 'bar' should not return a value // CHECK-NEG: 1 error generated -// CHECK-POS: warning: 'dllimport' attribute only applies to variable and function type +// CHECK-POS: warning: 'dllimport' attribute only applies to variables and functions // CHECK-POS: error: void function 'bar' should not return a value // CHECK-POS: 1 warning and 1 error generated diff --git a/test/Rewriter/finally.m b/test/Rewriter/finally.m index 67774b5d9cda..7d160cfbdd2b 100644 --- a/test/Rewriter/finally.m +++ b/test/Rewriter/finally.m @@ -2,7 +2,7 @@ int main() { @try { - printf("executing try"); // expected-warning{{implicitly declaring C library function 'printf' with type 'int (char const *, ...)'}} \ + printf("executing try"); // expected-warning{{implicitly declaring C 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/properties.m b/test/Rewriter/properties.m index 44c55b1b69c4..ca4a199cc64f 100644 --- a/test/Rewriter/properties.m +++ b/test/Rewriter/properties.m @@ -1,4 +1,7 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %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 *); @interface Foo { int i; @@ -35,7 +38,7 @@ @implementation Bar -static int func(int i); +static int func(int i) { return 0; } - (void)baz { Foo *obj1, *obj2; diff --git a/test/Rewriter/property-dot-syntax.mm b/test/Rewriter/property-dot-syntax.mm new file mode 100644 index 000000000000..846bd824b537 --- /dev/null +++ b/test/Rewriter/property-dot-syntax.mm @@ -0,0 +1,46 @@ +// 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"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar:// 8520727 + +void *sel_registerName(const char *); + +@class NSString; + +@protocol CoreDAVAccountInfoProvider +- (NSString *)userAgentHeader; +@end + +@interface CoreDAVTask +{ + id<CoreDAVAccountInfoProvider> _accountInfoProvider; +} +- (void)METHOD; +@end + +@implementation CoreDAVTask +- (void)METHOD { + if ([_accountInfoProvider userAgentHeader]) { + } + if (_accountInfoProvider.userAgentHeader) { + } +} +@end + +//rdar: // 8541517 +@interface A { } +@property (retain) NSString *scheme; +@end + +@interface B : A { + NSString* _schemeName; +} +@end + + +@implementation B +-(void) test { + B *b; + b.scheme = _schemeName; // error because of this line +} +@end + diff --git a/test/Rewriter/rewrite-block-pointer.mm b/test/Rewriter/rewrite-block-pointer.mm index 212b2365dfcc..abb2f136183c 100644 --- a/test/Rewriter/rewrite-block-pointer.mm +++ b/test/Rewriter/rewrite-block-pointer.mm @@ -58,3 +58,33 @@ typedef void (^void_block_t)(void); @end +// rdar: //8608902 +@protocol CoreDAVAccountInfoProvider; +@protocol CodeProvider; +typedef void (^BDVDiscoveryCompletionHandler)(int success, id<CoreDAVAccountInfoProvider> discoveredInfo); +typedef void (^BDVDiscoveryCompletion)(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo); +typedef void (^BDVDiscovery)(int success); +typedef void (^BDVDisc)(id<CoreDAVAccountInfoProvider> discoveredInfo, id<CodeProvider> codeInfo, + int success, id<CoreDAVAccountInfoProvider, CodeProvider> Info); +typedef void (^BLOCK)(id, id<CoreDAVAccountInfoProvider>, id<CodeProvider> codeInfo); +typedef void (^EMPTY_BLOCK)(); +typedef void (^ BDVDiscoveryCompletion1 )(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo); + +void (^BL)(void(^arg1)(), int i1, void(^arg)(int)); + +typedef void (^iscoveryCompletionHandler)(void(^arg1)(), id<CoreDAVAccountInfoProvider> discoveredInfo); + +typedef void (^DVDisc)(id<CoreDAVAccountInfoProvider> discoveredInfo, id<CodeProvider> codeInfo, + void(^arg1)(), int i1, void(^arg)(id<CoreDAVAccountInfoProvider>), + int success, id<CoreDAVAccountInfoProvider, CodeProvider> Info); + + +@interface I @end +@interface INTF @end +void (^BLINT)(I<CoreDAVAccountInfoProvider>* ARG, INTF<CodeProvider, CoreDAVAccountInfoProvider>* ARG1); + +void test8608902() { + BDVDiscoveryCompletionHandler ppp; + ppp(1, 0); +} + diff --git a/test/Rewriter/rewrite-captured-nested-bvar.c b/test/Rewriter/rewrite-captured-nested-bvar.c new file mode 100644 index 000000000000..a48de4bbeae3 --- /dev/null +++ b/test/Rewriter/rewrite-captured-nested-bvar.c @@ -0,0 +1,35 @@ +// RUN: %clang_cc1 -x c -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: FileCheck --input-file=%t-rw.cpp %s +// rdar://9006279 + +void q(void (^p)(void)) { + p(); +} + +void f() { + __block char BYREF_VAR_CHECK = 'a'; + __block char d = 'd'; + q(^{ + q(^{ + __block char e = 'e'; + char l = 'l'; + BYREF_VAR_CHECK = 'b'; + d = 'd'; + q(^{ + e = '1'; + BYREF_VAR_CHECK = '2'; + d = '3'; + } + ); + }); + }); +} + +int main() { + f(); + return 0; +} + +// CHECK 2: (__Block_byref_BYREF_VAR_CHECK_0 *)BYREF_VAR_CHECK +// CHECK: (__Block_byref_BYREF_VAR_CHECK_0 *)&BYREF_VAR_CHECK +// CHECK: (struct __Block_byref_BYREF_VAR_CHECK_0 *)&BYREF_VAR_CHECK, (struct __Block_byref_d_1 *)&d, 570425344)); diff --git a/test/Rewriter/rewrite-nested-blocks-2.mm b/test/Rewriter/rewrite-nested-blocks-2.mm new file mode 100644 index 000000000000..5a8e1ccdcf95 --- /dev/null +++ b/test/Rewriter/rewrite-nested-blocks-2.mm @@ -0,0 +1,18 @@ +// 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"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// grep "static void __FUNC_block_copy_" %t-rw.cpp | count 2 +// rdar://8499592 + +void Outer(void (^bk)()); +void Inner(void (^bk)()); +void INNER_FUNC(id d); + +void FUNC() { + + id bar = (id)42; + Outer(^{ + Inner(^{ + INNER_FUNC(bar); + }); + }); +} diff --git a/test/Rewriter/rewrite-nested-property-in-blocks.mm b/test/Rewriter/rewrite-nested-property-in-blocks.mm new file mode 100755 index 000000000000..2dffe66ab326 --- /dev/null +++ b/test/Rewriter/rewrite-nested-property-in-blocks.mm @@ -0,0 +1,52 @@ +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %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 + +void *sel_registerName(const char *); + +extern "C" void nowarn(id); + +extern "C" void noblockwarn(void (^)()); + +@interface INTFOFPROP +@property (readwrite, retain) INTFOFPROP *outer; +@property (readwrite, retain) id inner; +@end + +@interface NSSet +- (NSSet *)objectsPassingTest:(char (^)(id obj, char *stop))predicate ; +@end + +@interface INTF +- (NSSet *)Meth; +@end + +@implementation INTF + +- (NSSet *)Meth +{ + NSSet *aces; + + noblockwarn(^() { + INTFOFPROP *ace; + nowarn(ace.outer.inner); + noblockwarn(^() { + INTFOFPROP *ace; + nowarn(ace.outer.inner); + }); + }); + + noblockwarn(^() { + INTFOFPROP *ace; + nowarn(ace.outer.inner); + }); + +return [aces objectsPassingTest:^(id obj, char *stop) + { + INTFOFPROP *ace = (INTFOFPROP *)obj; + nowarn(ace.outer.inner); + return (char)0; + }]; + +} +@end diff --git a/test/Rewriter/rewrite-property-set-cfstring.mm b/test/Rewriter/rewrite-property-set-cfstring.mm new file mode 100644 index 000000000000..5e670bf751d3 --- /dev/null +++ b/test/Rewriter/rewrite-property-set-cfstring.mm @@ -0,0 +1,21 @@ +// 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"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar:// 8527018 + +void *sel_registerName(const char *); + +@class NSString; +@interface CoreDAVDiscoveryAccountInfo { + NSString *_scheme; +} +@property (retain) NSString *scheme; +- (void) Meth ; +@end + +@implementation CoreDAVDiscoveryAccountInfo +@synthesize scheme=_scheme; +- (void) Meth { + CoreDAVDiscoveryAccountInfo *discoveryInfo; + discoveryInfo.scheme = @"https"; +} +@end diff --git a/test/Rewriter/rewrite-protocol-property.mm b/test/Rewriter/rewrite-protocol-property.mm new file mode 100644 index 000000000000..b70b54fc5381 --- /dev/null +++ b/test/Rewriter/rewrite-protocol-property.mm @@ -0,0 +1,22 @@ +// 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 -Did="void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar:// 8558702 + +@class NSString; +@interface NSObject @end + +@protocol P +@property (retain) NSString* test; +@end + + +@interface A : NSObject <P> { + NSString* _test; +} +@end + + +@implementation A +@synthesize test=_test; +@end + diff --git a/test/Rewriter/rewrite-protocol-qualified.mm b/test/Rewriter/rewrite-protocol-qualified.mm index 5f12010afd4e..fae11a0adfa3 100644 --- a/test/Rewriter/rewrite-protocol-qualified.mm +++ b/test/Rewriter/rewrite-protocol-qualified.mm @@ -30,3 +30,21 @@ void f() { id a; id b = bar((id <Proto>)a); } + +// rdar://8472487 +@protocol NSObject @end +@class NSRunLoop; + +@protocol CoreDAVTaskManager <NSObject> + @property (retain) NSRunLoop *workRunLoop; +@end + + +// rdar://8475819 +@protocol some_protocol; + +void foo (int n) +{ + id<some_protocol> array[n]; +} + diff --git a/test/Rewriter/rewrite-user-defined-accessors.mm b/test/Rewriter/rewrite-user-defined-accessors.mm new file mode 100644 index 000000000000..366e53b832f2 --- /dev/null +++ b/test/Rewriter/rewrite-user-defined-accessors.mm @@ -0,0 +1,30 @@ +// 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 -Did="void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// rdar:// 8570020 + +@interface Foo { + Foo *foo; +} + +@property (retain, nonatomic) Foo *foo; + +@end + +@implementation Foo + +- (Foo *)foo { + if (!foo) { + foo = 0; + } + return foo; +} + + +- (void) setFoo : (Foo *) arg { + foo = arg; +} + +@synthesize foo; + +@end + |