f4a2713ac8
Change-Id: Ia40e9ffdf29b5dab2f122f673ff6802a58bc690f
77 lines
1.8 KiB
Objective-C
77 lines
1.8 KiB
Objective-C
// RUN: %clang_cc1 -fsyntax-only %s -verify -fblocks
|
|
// FIXME: should compile
|
|
// Test for blocks with explicit return type specified.
|
|
|
|
typedef float * PF;
|
|
float gf;
|
|
|
|
@interface NSView
|
|
- (id) some_method_that_returns_id;
|
|
@end
|
|
|
|
NSView *some_object;
|
|
|
|
void some_func (NSView * (^) (id));
|
|
|
|
typedef struct dispatch_item_s *dispatch_item_t;
|
|
typedef void (^completion_block_t)(void);
|
|
|
|
typedef double (^myblock)(int);
|
|
double test(myblock I);
|
|
|
|
int main() {
|
|
__block int x = 1;
|
|
__block int y = 2;
|
|
|
|
(void)^void *{ return 0; };
|
|
|
|
(void)^float(float y){ return y; };
|
|
|
|
(void)^double (float y, double d) {
|
|
if (y)
|
|
return d;
|
|
else
|
|
return y;
|
|
};
|
|
|
|
const char * (^chb) (int flag, const char *arg, char *arg1) = ^ const char * (int flag, const char *arg, char *arg1) {
|
|
if (flag)
|
|
return 0;
|
|
if (flag == 1)
|
|
return arg;
|
|
else if (flag == 2)
|
|
return "";
|
|
return arg1;
|
|
};
|
|
|
|
(void)^PF { return &gf; };
|
|
|
|
some_func(^ NSView * (id whatever) { return [some_object some_method_that_returns_id]; });
|
|
|
|
double res = test(^(int z){x = y+z; return (double)z; });
|
|
}
|
|
|
|
void func() {
|
|
completion_block_t X;
|
|
|
|
completion_block_t (^blockx)(dispatch_item_t) = ^completion_block_t (dispatch_item_t item) {
|
|
return X;
|
|
};
|
|
|
|
completion_block_t (^blocky)(dispatch_item_t) = ^(dispatch_item_t item) {
|
|
return X;
|
|
};
|
|
|
|
blockx = blocky;
|
|
}
|
|
|
|
|
|
// intent: block taking int returning block that takes char,int and returns int
|
|
int (^(^block)(double x))(char, short);
|
|
|
|
void foo() {
|
|
int one = 1;
|
|
block = ^(double x){ return ^(char c, short y) { return one + c + y; };}; // expected-error {{returning block that lives on the local stack}}
|
|
// or:
|
|
block = ^(double x){ return ^(char c, short y) { return one + (int)c + y; };}; // expected-error {{returning block that lives on the local stack}}
|
|
}
|