1 /* PR middle-end/77721 - -Wformat-overflow not uses arg range for converted vars
2 Test to verify that the correct range information is made available to the
3 -Wformat-lenght check to prevent warnings. */
4 /* { dg-do compile } */
5 /* { dg-options "-O2 -Wformat -Wformat-overflow -fdump-tree-optimized" } */
6
7 void abort (void);
8 int snprintf (char*, __SIZE_TYPE__, const char*, ...);
9
fuchar(unsigned char j,char * p)10 void fuchar (unsigned char j, char *p)
11 {
12 if (j > 99)
13 return;
14
15 if (3 != snprintf (p, 4, "%3hu", j))
16 abort ();
17 }
18
fschar(signed char j,char * p)19 void fschar (signed char j, char *p)
20 {
21 const unsigned char k = (unsigned char) j;
22
23 if (k > 99)
24 return;
25
26 if (3 != snprintf (p, 4, "%3hhu", k))
27 abort ();
28 }
29
fushrt(unsigned short j,char * p)30 void fushrt (unsigned short j, char *p)
31 {
32 if (j > 999)
33 return;
34
35 if (3 != snprintf (p, 4, "%3hu", j))
36 abort ();
37 }
38
fshrt(short j,char * p)39 void fshrt (short j, char *p)
40 {
41 const unsigned short k = (unsigned short) j;
42
43 if (k > 999)
44 return;
45
46 if (3 != snprintf (p, 4, "%3hu", k))
47 abort ();
48 }
49
fuint(unsigned j,char * p)50 void fuint (unsigned j, char *p)
51 {
52 if (j > 999)
53 return;
54
55 snprintf (p, 4, "%3u", j);
56 }
57
fint(int j,char * p)58 void fint (int j, char *p)
59 {
60 const unsigned k = (unsigned) j;
61
62 if (k > 999)
63 return;
64
65 snprintf (p, 4, "%3u", k);
66 }
67
fulong(unsigned long j,char * p)68 void fulong (unsigned long j, char *p)
69 {
70 if (j > 999)
71 return;
72
73 snprintf (p, 4, "%3lu", j);
74 }
75
flong(long j,char * p)76 void flong (long j, char *p)
77 {
78 const unsigned long k = (unsigned long) j;
79
80 if (k > 999)
81 return;
82
83 snprintf (p, 4, "%3lu", k);
84 }
85
fullong(unsigned long long j,char * p)86 void fullong (unsigned long long j, char *p)
87 {
88 if (j > 999)
89 return;
90
91 snprintf (p, 4, "%3llu", j);
92 }
93
fllong(long long j,char * p)94 void fllong (long long j, char *p)
95 {
96 const unsigned long long k = (unsigned long long) j;
97
98 if (k > 999)
99 return;
100
101 snprintf (p, 4, "%3llu", k);
102 }
103
104 /* { dg-final { scan-tree-dump-not "abort" "optimized" } } */
105