block-args.c revision 1f3b0d5ccabbc47aef525baec10c15d9fd1c6236
1// RUN: clang %s -fsyntax-only -verify 2 3void take(void*); 4 5void test() { 6 take(^(int x){}); 7 take(^(int x, int y){}); 8 take(^(int x, int y){}); 9 take(^(int x, int x){}); // expected-error {{redefinition of parameter 'x'}} 10 11 12 take(^(int x) { return x+1; }); 13 14 int (^CP)(int) = ^(int x) { return x*x; }; 15 take(CP); 16 17 int arg; 18 ^{return 1;}(); 19 ^{return 2;}(arg); // expected-error {{too many arguments to block call}} 20 ^(void){return 3;}(1); // expected-error {{too many arguments to block call}} 21 ^(){return 4;}(arg); // C style (...), ok. 22 ^(int x, ...){return 5;}(arg, arg); // Explicit varargs, ok. 23} 24 25