xref: /llvm-project/clang/test/Sema/variadic-block.c (revision c6e68daac0fa6e77a89f3ca72f266a528503dd1c)
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