53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
|
// 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;
|
||
|
}
|