summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/block-return.c
diff options
context:
space:
mode:
authorMike Stump <mrs@apple.com>2009-02-04 22:31:32 +0000
committerMike Stump <mrs@apple.com>2009-02-04 22:31:32 +0000
commit82f071faa7340828da5729736e1d2b3180f3b63e (patch)
treef8777a19bfbe8e9ea24232f0d968c0cc37954cb7 /clang/test/Sema/block-return.c
parent46353ece1893148d92f29d55e1b577b272df501a (diff)
downloadbcm5719-llvm-82f071faa7340828da5729736e1d2b3180f3b63e.tar.gz
bcm5719-llvm-82f071faa7340828da5729736e1d2b3180f3b63e.zip
Add support for blocks with explicit return types.
llvm-svn: 63784
Diffstat (limited to 'clang/test/Sema/block-return.c')
-rw-r--r--clang/test/Sema/block-return.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/clang/test/Sema/block-return.c b/clang/test/Sema/block-return.c
index e835c963172..64c29935f5f 100644
--- a/clang/test/Sema/block-return.c
+++ b/clang/test/Sema/block-return.c
@@ -3,24 +3,23 @@
typedef void (^CL)(void);
CL foo() {
-
- short y;
-
+ short y;
short (^add1)(void) = ^{ return y+1; }; // expected-warning {{incompatible block pointer types initializing 'int (^)(void)', expected 'short (^)(void)'}}
- CL X = ^{
- if (2)
- return;
+ CL X = ^{
+ if (2)
+ return;
return 1; // expected-error {{void block should not return a value}}
};
- int (^Y) (void) = ^{
+
+ int (^Y) (void) = ^{
if (3)
return 1;
else
return; // expected-error {{non-void block should return a value}}
};
- char *(^Z)(void) = ^{
+ char *(^Z)(void) = ^{
if (3)
return "";
else
@@ -28,20 +27,20 @@ CL foo() {
};
double (^A)(void) = ^ { // expected-warning {{incompatible block pointer types initializing 'float (^)(void)', expected 'double (^)(void)'}}
- if (1)
- return (float)1.0;
+ if (1)
+ return (float)1.0;
else
if (2)
- return (double)2.0; // expected-error {{incompatible type returning 'double', expected 'float'}}
- return 1; // expected-error {{incompatible type returning 'int', expected 'float'}}
+ return (double)2.0;
+ return 1;
};
-
- char *(^B)(void) = ^{
+ char *(^B)(void) = ^{
if (3)
return "";
else
- return 2; // expected-error {{incompatible type returning 'int', expected 'char *'}}
+ 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}}
}
OpenPOWER on IntegriCloud