modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/fprintf-chk-1.c (about) 1 /* { dg-skip-if "requires io" { freestanding } } */ 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <stdarg.h> 6 7 volatile int should_optimize; 8 9 int 10 __attribute__((noinline)) 11 __fprintf_chk (FILE *f, int flag, const char *fmt, ...) 12 { 13 va_list ap; 14 int ret; 15 #ifdef __OPTIMIZE__ 16 if (should_optimize) 17 abort (); 18 #endif 19 should_optimize = 1; 20 va_start (ap, fmt); 21 ret = vfprintf (f, fmt, ap); 22 va_end (ap); 23 return ret; 24 } 25 26 int 27 main (void) 28 { 29 #define test(ret, opt, args...) \ 30 should_optimize = opt; \ 31 __fprintf_chk (stdout, 1, args); \ 32 if (!should_optimize) \ 33 abort (); \ 34 should_optimize = 0; \ 35 if (__fprintf_chk (stdout, 1, args) != ret) \ 36 abort (); \ 37 if (!should_optimize) \ 38 abort (); 39 test (5, 1, "hello"); 40 test (6, 1, "hello\n"); 41 test (1, 1, "a"); 42 test (0, 1, ""); 43 test (5, 1, "%s", "hello"); 44 test (6, 1, "%s", "hello\n"); 45 test (1, 1, "%s", "a"); 46 test (0, 1, "%s", ""); 47 test (1, 1, "%c", 'x'); 48 test (7, 0, "%s\n", "hello\n"); 49 test (2, 0, "%d\n", 0); 50 return 0; 51 }