annotate gcc/testsuite/gcc.c-torture/execute/fprintf-chk-1.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-skip-if "requires io" { freestanding } } */
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 #include <stdio.h>
kono
parents:
diff changeset
4 #include <stdlib.h>
kono
parents:
diff changeset
5 #include <stdarg.h>
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 volatile int should_optimize;
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 int
kono
parents:
diff changeset
10 __attribute__((noinline))
kono
parents:
diff changeset
11 __fprintf_chk (FILE *f, int flag, const char *fmt, ...)
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 va_list ap;
kono
parents:
diff changeset
14 int ret;
kono
parents:
diff changeset
15 #ifdef __OPTIMIZE__
kono
parents:
diff changeset
16 if (should_optimize)
kono
parents:
diff changeset
17 abort ();
kono
parents:
diff changeset
18 #endif
kono
parents:
diff changeset
19 should_optimize = 1;
kono
parents:
diff changeset
20 va_start (ap, fmt);
kono
parents:
diff changeset
21 ret = vfprintf (f, fmt, ap);
kono
parents:
diff changeset
22 va_end (ap);
kono
parents:
diff changeset
23 return ret;
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 int
kono
parents:
diff changeset
27 main (void)
kono
parents:
diff changeset
28 {
kono
parents:
diff changeset
29 #define test(ret, opt, args...) \
kono
parents:
diff changeset
30 should_optimize = opt; \
kono
parents:
diff changeset
31 __fprintf_chk (stdout, 1, args); \
kono
parents:
diff changeset
32 if (!should_optimize) \
kono
parents:
diff changeset
33 abort (); \
kono
parents:
diff changeset
34 should_optimize = 0; \
kono
parents:
diff changeset
35 if (__fprintf_chk (stdout, 1, args) != ret) \
kono
parents:
diff changeset
36 abort (); \
kono
parents:
diff changeset
37 if (!should_optimize) \
kono
parents:
diff changeset
38 abort ();
kono
parents:
diff changeset
39 test (5, 1, "hello");
kono
parents:
diff changeset
40 test (6, 1, "hello\n");
kono
parents:
diff changeset
41 test (1, 1, "a");
kono
parents:
diff changeset
42 test (0, 1, "");
kono
parents:
diff changeset
43 test (5, 1, "%s", "hello");
kono
parents:
diff changeset
44 test (6, 1, "%s", "hello\n");
kono
parents:
diff changeset
45 test (1, 1, "%s", "a");
kono
parents:
diff changeset
46 test (0, 1, "%s", "");
kono
parents:
diff changeset
47 test (1, 1, "%c", 'x');
kono
parents:
diff changeset
48 test (7, 0, "%s\n", "hello\n");
kono
parents:
diff changeset
49 test (2, 0, "%d\n", 0);
kono
parents:
diff changeset
50 return 0;
kono
parents:
diff changeset
51 }