forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			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;
 | |
| }
 |