53 lines · cpp
1// RUN: %clang_cc1 %s -ffreestanding2// RUN: %clang_cc1 %s -ffreestanding -triple i686-unknown-linux3// RUN: %clang_cc1 %s -ffreestanding -triple x86_64-unknown-linux4// RUN: %clang_cc1 %s -ffreestanding -triple mips-unknown-linux5// RUN: %clang_cc1 %s -ffreestanding -triple mipsel-unknown-linux6// RUN: %clang_cc1 %s -ffreestanding -triple armv7-unknown-linux-gnueabi7// RUN: %clang_cc1 %s -ffreestanding -triple thumbv7-unknown-linux-gnueabi8 9#include "stdarg.h"10 11int int_accumulator = 0;12double double_accumulator = 0;13 14int 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 46int 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