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