1//
2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
3// See https://llvm.org/LICENSE.txt for license information.
4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5
6/*
7 * variadic.c
8 * testObjects
9 *
10 * Created by Blaine Garst on 2/17/09.
11 *
12 */
13
14// PURPOSE Test that variadic arguments compile and work for Blocks
15// CONFIG
16
17#include <stdarg.h>
18#include <stdio.h>
19
20int main(int argc, char *argv[]) {
21
22 long (^addthem)(const char *, ...) = ^long (const char *format, ...){
23 va_list argp;
24 const char *p;
25 int i;
26 char c;
27 double d;
28 long result = 0;
29 va_start(argp, format);
30 //printf("starting...\n");
31 for (p = format; *p; p++) switch (*p) {
32 case 'i':
33 i = va_arg(argp, int);
34 //printf("i: %d\n", i);
35 result += i;
36 break;
37 case 'd':
38 d = va_arg(argp, double);
39 //printf("d: %g\n", d);
40 result += (int)d;
41 break;
42 case 'c':
43 c = va_arg(argp, int);
44 //printf("c: '%c'\n", c);
45 result += c;
46 break;
47 }
48 //printf("...done\n\n");
49 return result;
50 };
51 long testresult = addthem("ii", 10, 20);
52 if (testresult != 30) {
53 printf(format: "got wrong result: %ld\n", testresult);
54 return 1;
55 }
56 testresult = addthem("idc", 30, 40.0, 'a');
57 if (testresult != (70+'a')) {
58 printf(format: "got different wrong result: %ld\n", testresult);
59 return 1;
60 }
61 printf(format: "%s: Success\n", argv[0]);
62 return 0;
63}
64
65
66

source code of compiler-rt/test/BlocksRuntime/variadic.c