diff options
author | Mike Stump <mrs@apple.com> | 2009-04-17 00:09:41 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-04-17 00:09:41 +0000 |
commit | 5c3285b6fb9a0a70ed0e839eabfff267ab03326a (patch) | |
tree | 88f36cd0a0460d8ff9145305c5f35b51a19ab047 /clang/test/Sema/block-return.c | |
parent | b7f8f594f39db622ba89a570079a895c213ef651 (diff) | |
download | bcm5719-llvm-5c3285b6fb9a0a70ed0e839eabfff267ab03326a.tar.gz bcm5719-llvm-5c3285b6fb9a0a70ed0e839eabfff267ab03326a.zip |
Fixup semantic analysis for nested blocks, and allow block literal
expressions that can be of static duration to be returned.
Radar 6786551
llvm-svn: 69331
Diffstat (limited to 'clang/test/Sema/block-return.c')
-rw-r--r-- | clang/test/Sema/block-return.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/clang/test/Sema/block-return.c b/clang/test/Sema/block-return.c index d7717b38ca3..3eee002b603 100644 --- a/clang/test/Sema/block-return.c +++ b/clang/test/Sema/block-return.c @@ -41,13 +41,13 @@ CL foo() { return 2; // expected-warning {{incompatible integer to pointer conversion returning 'int', expected 'char *'}} }; - return ^{ return 1; }; // expected-warning {{incompatible block pointer types returning 'int (^)(void)', expected 'CL'}} expected-error {{returning block that lives on the local stack}} + return ^{ return 1; }; // expected-warning {{incompatible block pointer types returning 'int (^)(void)', expected 'CL'}} } typedef int (^CL2)(void); CL2 foo2() { - return ^{ return 1; }; // expected-error {{returning block that lives on the local stack}} + return ^{ return 1; }; } typedef unsigned int * uintptr_t; @@ -83,3 +83,12 @@ void foo4() { int (^nested)(char *s) = ^(char *str) { void (^nest)(void) = ^(void) { printf("%s\n", str); }; next(); return 1; }; // expected-warning{{implicitly declaring C library function 'printf' with type 'int (char const *, ...)'}} \ // expected-note{{please include the header <stdio.h> or explicitly provide a declaration for 'printf'}} } + +typedef void (^bptr)(void); + +bptr foo5(int j) { + __block int i; + if (j) + return ^{ ^{ i=0; }(); }; // expected-error {{returning block that lives on the local stack}} + return ^{ i=0; }; // expected-error {{returning block that lives on the local stack}} +} |