1 /* BZ #5424 */
2 #include <stdio.h>
3 #include <errno.h>
4 #include <libc-diag.h>
5
6 /* INT_MAX + 1 */
7 #define N 2147483648
8
9 /* (INT_MAX / 2) + 2 */
10 #define N2 1073741825
11
12 /* INT_MAX - 3 */
13 #define N3 2147483644
14
15 #define STRINGIFY(S) #S
16 #define MAKE_STR(S) STRINGIFY(S)
17
18 #define SN MAKE_STR(N)
19 #define SN2 MAKE_STR(N2)
20 #define SN3 MAKE_STR(N3)
21
22 static int
do_test(void)23 do_test (void)
24 {
25 int ret;
26
27 FILE *fp = fopen ("/dev/null", "w");
28 if (fp == NULL)
29 {
30 puts ("cannot open /dev/null");
31 return 1;
32 }
33
34 /* GCC 9 warns about output of more than INT_MAX characters; this is
35 deliberately tested here. */
36 DIAG_PUSH_NEEDS_COMMENT;
37 #if __GNUC_PREREQ (7, 0)
38 DIAG_IGNORE_NEEDS_COMMENT (9, "-Wformat-overflow=");
39 #endif
40 ret = fprintf (fp, "%" SN "d", 1);
41 DIAG_POP_NEEDS_COMMENT;
42 printf ("ret = %d\n", ret);
43 if (ret != -1 || errno != EOVERFLOW)
44 return 1;
45
46 /* GCC 9 warns about output of more than INT_MAX characters; this is
47 deliberately tested here. */
48 DIAG_PUSH_NEEDS_COMMENT;
49 #if __GNUC_PREREQ (7, 0)
50 DIAG_IGNORE_NEEDS_COMMENT (9, "-Wformat-overflow=");
51 #endif
52 ret = fprintf (fp, "%." SN "d", 1);
53 DIAG_POP_NEEDS_COMMENT;
54 printf ("ret = %d\n", ret);
55 if (ret != -1 || errno != EOVERFLOW)
56 return 1;
57
58 ret = fprintf (fp, "%." SN3 "d", 1);
59 printf ("ret = %d\n", ret);
60 if (ret != N3)
61 return 1;
62
63 /* GCC 9 warns about output of more than INT_MAX characters; this is
64 deliberately tested here. */
65 DIAG_PUSH_NEEDS_COMMENT;
66 #if __GNUC_PREREQ (7, 0)
67 DIAG_IGNORE_NEEDS_COMMENT (9, "-Wformat-overflow=");
68 #endif
69 ret = fprintf (fp, "%" SN2 "d%" SN2 "d", 1, 1);
70 DIAG_POP_NEEDS_COMMENT;
71 printf ("ret = %d\n", ret);
72
73 return ret != -1 || errno != EOVERFLOW;
74 }
75
76 #define TIMEOUT 60
77 #define TEST_FUNCTION do_test ()
78 #include "../test-skeleton.c"
79