1 | // RUN: %clang_cc1 %s -ffreestanding |
2 | // RUN: %clang_cc1 %s -ffreestanding -triple i686-unknown-linux |
3 | // RUN: %clang_cc1 %s -ffreestanding -triple x86_64-unknown-linux |
4 | // RUN: %clang_cc1 %s -ffreestanding -triple mips-unknown-linux |
5 | // RUN: %clang_cc1 %s -ffreestanding -triple mipsel-unknown-linux |
6 | // RUN: %clang_cc1 %s -ffreestanding -triple armv7-unknown-linux-gnueabi |
7 | // RUN: %clang_cc1 %s -ffreestanding -triple thumbv7-unknown-linux-gnueabi |
8 | |
9 | #include "stdarg.h" |
10 | |
11 | int int_accumulator = 0; |
12 | double double_accumulator = 0; |
13 | |
14 | int test_vprintf(const char *fmt, va_list ap) { |
15 | char ch; |
16 | int result = 0; |
17 | while (*fmt != '\0') { |
18 | ch = *fmt++; |
19 | if (ch != '%') { |
20 | continue; |
21 | } |
22 | |
23 | ch = *fmt++; |
24 | switch (ch) { |
25 | case 'd': |
26 | int_accumulator += va_arg(ap, int); |
27 | result++; |
28 | break; |
29 | |
30 | case 'f': |
31 | double_accumulator += va_arg(ap, double); |
32 | result++; |
33 | break; |
34 | |
35 | default: |
36 | break; |
37 | } |
38 | |
39 | if (ch == '0') { |
40 | break; |
41 | } |
42 | } |
43 | return result; |
44 | } |
45 | |
46 | int test_printf(const char *fmt, ...) { |
47 | va_list ap; |
48 | va_start(ap, fmt); |
49 | int result = test_vprintf(fmt, ap); |
50 | va_end(ap); |
51 | return result; |
52 | } |
53 | |