block-args.c revision 9a66c303c7024967a48877106384bf315c84e80e
1// RUN: %clang_cc1 %s -fsyntax-only -verify -fblocks 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); // expected-error {{too many arguments to block call}} 22 ^(int x, ...){return 5;}(arg, arg); // Explicit varargs, ok. 23} 24 25int main(int argc, char** argv) { 26 ^(int argCount) { 27 argCount = 3; 28 }(argc); 29} 30 31// radar 7528255 32void f0() { 33 ^(int, double d, char) {}(1, 1.34, 'a'); // expected-error {{parameter name omitted}} \ 34 // expected-error {{parameter name omitted}} 35} 36