| // RUN: %clang_cc1 %s -ffreestanding |
| // RUN: %clang_cc1 %s -ffreestanding -triple i686-unknown-linux |
| // RUN: %clang_cc1 %s -ffreestanding -triple x86_64-unknown-linux |
| // RUN: %clang_cc1 %s -ffreestanding -triple mips-unknown-linux |
| // RUN: %clang_cc1 %s -ffreestanding -triple mipsel-unknown-linux |
| // RUN: %clang_cc1 %s -ffreestanding -triple armv7-unknown-linux-gnueabi |
| // RUN: %clang_cc1 %s -ffreestanding -triple thumbv7-unknown-linux-gnueabi |
| |
| #include "stdarg.h" |
| |
| int int_accumulator = 0; |
| double double_accumulator = 0; |
| |
| int test_vprintf(const char *fmt, va_list ap) { |
| char ch; |
| int result = 0; |
| while (*fmt != '\0') { |
| ch = *fmt++; |
| if (ch != '%') { |
| continue; |
| } |
| |
| ch = *fmt++; |
| switch (ch) { |
| case 'd': |
| int_accumulator += va_arg(ap, int); |
| result++; |
| break; |
| |
| case 'f': |
| double_accumulator += va_arg(ap, double); |
| result++; |
| break; |
| |
| default: |
| break; |
| } |
| |
| if (ch == '0') { |
| break; |
| } |
| } |
| return result; |
| } |
| |
| int test_printf(const char *fmt, ...) { |
| va_list ap; |
| va_start(ap, fmt); |
| int result = test_vprintf(fmt, ap); |
| va_end(ap); |
| return result; |
| } |