Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.c-torture/execute/vprintf-chk-1.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
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 |