18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 %s -verify -fsyntax-only -fblocks
2*c6e68daaSAndy Gibbs // expected-no-diagnostics
3439a3e41SSteve Naroff
4439a3e41SSteve Naroff #include <stdarg.h>
5439a3e41SSteve Naroff
main(int argc,char * argv[])6439a3e41SSteve Naroff int main(int argc, char *argv[]) {
7439a3e41SSteve Naroff
8439a3e41SSteve Naroff long (^addthem)(const char *, ...) = ^long (const char *format, ...){
9439a3e41SSteve Naroff va_list argp;
10439a3e41SSteve Naroff const char *p;
11439a3e41SSteve Naroff int i;
12439a3e41SSteve Naroff char c;
13439a3e41SSteve Naroff double d;
14439a3e41SSteve Naroff long result = 0;
15439a3e41SSteve Naroff va_start(argp, format);
16439a3e41SSteve Naroff for (p = format; *p; p++) switch (*p) {
17439a3e41SSteve Naroff case 'i':
18439a3e41SSteve Naroff i = va_arg(argp, int);
19439a3e41SSteve Naroff result += i;
20439a3e41SSteve Naroff break;
21439a3e41SSteve Naroff case 'd':
22439a3e41SSteve Naroff d = va_arg(argp, double);
23439a3e41SSteve Naroff result += (int)d;
24439a3e41SSteve Naroff break;
25439a3e41SSteve Naroff case 'c':
26439a3e41SSteve Naroff c = va_arg(argp, int);
27439a3e41SSteve Naroff result += c;
28439a3e41SSteve Naroff break;
29439a3e41SSteve Naroff }
30439a3e41SSteve Naroff return result;
31439a3e41SSteve Naroff };
32439a3e41SSteve Naroff long testresult = addthem("ii", 10, 20);
33439a3e41SSteve Naroff if (testresult != 30) {
34439a3e41SSteve Naroff return 1;
35439a3e41SSteve Naroff }
36439a3e41SSteve Naroff testresult = addthem("idc", 30, 40.0, 'a');
37439a3e41SSteve Naroff if (testresult != (70+'a')) {
38439a3e41SSteve Naroff return 1;
39439a3e41SSteve Naroff }
40439a3e41SSteve Naroff return 0;
41439a3e41SSteve Naroff }
42439a3e41SSteve Naroff
43