Home | History | Annotate | Download | only in SemaCXX
      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