annotate gcc/testsuite/gcc.c-torture/execute/fprintf-2.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* Verify that calls to fprintf don't get eliminated even if their
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 result on success can be computed at compile time (they can fail).
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 The calls can still be transformed into those of other functions.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 { dg-prune-output "warning: warning: \[^\n\r\]* possibly used unsafely" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 { dg-skip-if "requires io" { avr-*-* } }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 { dg-skip-if "requires io" { freestanding } } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 #include <stdio.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 #include <stdlib.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 #include <string.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 int main (void)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 char *tmpfname = tmpnam (0);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 FILE *f = fopen (tmpfname, "w");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 if (!f)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 perror ("fopen for writing");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 return 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 fprintf (f, "1");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 fprintf (f, "%c", '2');
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 fprintf (f, "%c%c", '3', '4');
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 fprintf (f, "%s", "5");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 fprintf (f, "%s%s", "6", "7");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 fprintf (f, "%i", 8);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 fprintf (f, "%.1s\n", "9x");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 fclose (f);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 f = fopen (tmpfname, "r");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 if (!f)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 perror ("fopen for reading");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 remove (tmpfname);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 return 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 char buf[12] = "";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 if (1 != fscanf (f, "%s", buf))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 perror ("fscanf");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 fclose (f);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 remove (tmpfname);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 return 1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 fclose (f);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 remove (tmpfname);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 if (strcmp (buf, "123456789"))
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 return 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 }