From df407c337cd3a20ceed31138fbef25d9a28a908e Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian <fjahanian@apple.com> Date: Wed, 25 Apr 2012 20:48:00 +0000 Subject: [PATCH] objective-c modern translator: more tests. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155585 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../rewrite-byref-in-nested-blocks.mm | 2 +- test/Rewriter/rewrite-modern-block-consts.mm | 19 ++++++++++ .../rewrite-modern-captured-nested-bvar.mm | 35 +++++++++++++++++++ .../rewrite-modern-extern-c-func-decl.mm | 24 +++++++++++++ .../Rewriter/rewrite-rewritten-initializer.mm | 2 ++ 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 test/Rewriter/rewrite-modern-block-consts.mm create mode 100644 test/Rewriter/rewrite-modern-captured-nested-bvar.mm diff --git a/test/Rewriter/rewrite-byref-in-nested-blocks.mm b/test/Rewriter/rewrite-byref-in-nested-blocks.mm index a6593834563..0b7f23e2136 100644 --- a/test/Rewriter/rewrite-byref-in-nested-blocks.mm +++ b/test/Rewriter/rewrite-byref-in-nested-blocks.mm @@ -1,7 +1,7 @@ // 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 // RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-modern-rw.cpp -// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-modern-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -Werror -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-modern-rw.cpp // radar 7692350 void f(void (^block)(void)); diff --git a/test/Rewriter/rewrite-modern-block-consts.mm b/test/Rewriter/rewrite-modern-block-consts.mm new file mode 100644 index 00000000000..7761db5b7ce --- /dev/null +++ b/test/Rewriter/rewrite-modern-block-consts.mm @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-modern-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -Werror -Wno-address-of-temporary -D"__declspec(X)=" %t-modern-rw.cpp +// rdar:// 8243071 + +void x(int y) {} +void f() { + const int bar = 3; + int baz = 4; + __block int bab = 4; + __block const int bas = 5; + void (^b)() = ^{ + x(bar); + x(baz); + x(bab); + x(bas); + b(); + }; + b(); +} diff --git a/test/Rewriter/rewrite-modern-captured-nested-bvar.mm b/test/Rewriter/rewrite-modern-captured-nested-bvar.mm new file mode 100644 index 00000000000..a8fd1807337 --- /dev/null +++ b/test/Rewriter/rewrite-modern-captured-nested-bvar.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://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: {(void*)0,(__Block_byref_BYREF_VAR_CHECK_0 *)&BYREF_VAR_CHECK, 0, sizeof(__Block_byref_BYREF_VAR_CHECK_0), 'a'} +// CHECK: __Block_byref_BYREF_VAR_CHECK_0 *)&BYREF_VAR_CHECK, (__Block_byref_d_1 *)&d, 570425344)); diff --git a/test/Rewriter/rewrite-modern-extern-c-func-decl.mm b/test/Rewriter/rewrite-modern-extern-c-func-decl.mm index 590a4d4346f..07fed038131 100644 --- a/test/Rewriter/rewrite-modern-extern-c-func-decl.mm +++ b/test/Rewriter/rewrite-modern-extern-c-func-decl.mm @@ -70,3 +70,27 @@ static void initStatics2() { // rdar://11314329 static inline const void *auto_zone_base_pointer(void *zone, const void *ptr) { return 0; } + +@interface I +{ + id list; +} +- (void) Meth; +// radar 7589385 use before definition +- (void) allObjects; +@end + +@implementation I +// radar 7589385 use before definition +- (void) allObjects { + __attribute__((__blocks__(byref))) id *listp; + + void (^B)(void) = ^(void) { + *listp++ = 0; + }; + + B(); +} +- (void) Meth { __attribute__((__blocks__(byref))) void ** listp = (void **)list; } +@end + diff --git a/test/Rewriter/rewrite-rewritten-initializer.mm b/test/Rewriter/rewrite-rewritten-initializer.mm index 14734f9af2c..f2b0c5a173d 100644 --- a/test/Rewriter/rewrite-rewritten-initializer.mm +++ b/test/Rewriter/rewrite-rewritten-initializer.mm @@ -1,5 +1,7 @@ // 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 +// 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 -Werror -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw-modern.cpp // radar 7669784 typedef void * id; -- GitLab