modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/vprintf-chk-1.c (about) 1 /* { dg-skip-if "requires io" { freestanding } } */ 2 3 #ifndef test 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <stdarg.h> 7 8 volatile int should_optimize; 9 10 int 11 __attribute__((noinline)) 12 __vprintf_chk (int flag, const char *fmt, va_list ap) 13 { 14 #ifdef __OPTIMIZE__ 15 if (should_optimize) 16 abort (); 17 #endif 18 should_optimize = 1; 19 return vprintf (fmt, ap); 20 } 21 22 void 23 inner (int x, ...) 24 { 25 va_list ap, ap2; 26 va_start (ap, x); 27 va_start (ap2, x); 28 29 switch (x) 30 { 31 #define test(n, ret, opt, fmt, args) \ 32 case n: \ 33 should_optimize = opt; \ 34 __vprintf_chk (1, fmt, ap); \ 35 if (! should_optimize) \ 36 abort (); \ 37 should_optimize = 0; \ 38 if (__vprintf_chk (1, fmt, ap2) != ret) \ 39 abort (); \ 40 if (! should_optimize) \ 41 abort (); \ 42 break; 43 #include "vprintf-chk-1.c" 44 #undef test 45 default: 46 abort (); 47 } 48 49 va_end (ap); 50 va_end (ap2); 51 } 52 53 int 54 main (void) 55 { 56 #define test(n, ret, opt, fmt, args) \ 57 inner args; 58 #include "vprintf-chk-1.c" 59 #undef test 60 return 0; 61 } 62 63 #else 64 test (0, 5, 0, "hello", (0)); 65 test (1, 6, 1, "hello\n", (1)); 66 test (2, 1, 1, "a", (2)); 67 test (3, 0, 1, "", (3)); 68 test (4, 5, 0, "%s", (4, "hello")); 69 test (5, 6, 0, "%s", (5, "hello\n")); 70 test (6, 1, 0, "%s", (6, "a")); 71 test (7, 0, 0, "%s", (7, "")); 72 test (8, 1, 0, "%c", (8, 'x')); 73 test (9, 7, 0, "%s\n", (9, "hello\n")); 74 test (10, 2, 0, "%d\n", (10, 0)); 75 #endif