diff options
author | Steve Naroff <snaroff@apple.com> | 2008-09-24 22:26:48 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-09-24 22:26:48 +0000 |
commit | c60873ce44253fdee24f3f6982701837b1ef2bf5 (patch) | |
tree | 57a132c804ad68f8faeacf6af1a4ed312c25459d /clang/test/Sema/block-return.c | |
parent | 2d59db7ae401c4686476671afcceb54312b4133e (diff) | |
download | bcm5719-llvm-c60873ce44253fdee24f3f6982701837b1ef2bf5.tar.gz bcm5719-llvm-c60873ce44253fdee24f3f6982701837b1ef2bf5.zip |
Fix <rdar://problem/6243788> clang: Incorrect return statement for Blocks?
llvm-svn: 56590
Diffstat (limited to 'clang/test/Sema/block-return.c')
-rw-r--r-- | clang/test/Sema/block-return.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/test/Sema/block-return.c b/clang/test/Sema/block-return.c index 93511dbd7e3..2110f2ce452 100644 --- a/clang/test/Sema/block-return.c +++ b/clang/test/Sema/block-return.c @@ -50,3 +50,23 @@ typedef int (^CL2)(void); CL2 foo2() { return ^{ return 1; }; // expected-error {{returning block that lives on the local stack}} } + +typedef unsigned int * uintptr_t; +typedef char Boolean; +typedef int CFBasicHash; + +#define INVOKE_CALLBACK2(P, A, B) (P)(A, B) + +typedef struct { + Boolean (^isEqual)(const CFBasicHash *, uintptr_t stack_value_or_key1, uintptr_t stack_value_or_key2, Boolean is_key); +} CFBasicHashCallbacks; + +int foo3() { + CFBasicHashCallbacks cb; + + Boolean (*value_equal)(uintptr_t, uintptr_t) = 0; + + cb.isEqual = ^(const CFBasicHash *table, uintptr_t stack_value_or_key1, uintptr_t stack_value_or_key2, Boolean is_key) { + return (Boolean)(uintptr_t)INVOKE_CALLBACK2(value_equal, (uintptr_t)stack_value_or_key1, (uintptr_t)stack_value_or_key2); + }; +} |