1 /* Verify that calls to printf don't get eliminated even if their
2 result on success can be computed at compile time (they can fail).
3 The calls can still be transformed into those of other functions.
4 { dg-require-effective-target unwrapped }
5 { dg-skip-if "requires io" { freestanding } } */
6
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10
11 __attribute__ ((noipa)) void
write_file(void)12 write_file (void)
13 {
14 printf ("1");
15 printf ("%c", '2');
16 printf ("%c%c", '3', '4');
17 printf ("%s", "5");
18 printf ("%s%s", "6", "7");
19 printf ("%i", 8);
20 printf ("%.1s\n", "9x");
21 }
22
23
main(void)24 int main (void)
25 {
26 char *tmpfname = tmpnam (0);
27 FILE *f = freopen (tmpfname, "w", stdout);
28 if (!f)
29 {
30 perror ("fopen for writing");
31 return 1;
32 }
33
34 write_file ();
35 fclose (f);
36
37 f = fopen (tmpfname, "r");
38 if (!f)
39 {
40 perror ("fopen for reading");
41 remove (tmpfname);
42 return 1;
43 }
44
45 char buf[12] = "";
46 if (1 != fscanf (f, "%s", buf))
47 {
48 perror ("fscanf");
49 fclose (f);
50 remove (tmpfname);
51 return 1;
52 }
53
54 fclose (f);
55 remove (tmpfname);
56
57 if (strcmp (buf, "123456789"))
58 abort ();
59
60 return 0;
61 }
62