131
|
1 // PR tree-optimization/84468 - bogus -Wstringop-truncation despite
|
|
2 // assignment after conditional strncpy
|
|
3 // Compile with -g to verify the warning deals properly with debug
|
|
4 // statements.
|
|
5 // { dg-do compile }
|
|
6 // { dg-options "-O2 -Wstringop-truncation -g" }
|
|
7
|
|
8 extern "C" char* strncpy (char*, const char*, __SIZE_TYPE__);
|
|
9
|
|
10 char d[3];
|
|
11
|
|
12 void g ();
|
|
13
|
|
14 void fnowarn1 (const char *s)
|
|
15 {
|
|
16 // Update dummy but never actually use it so it's eliminated
|
|
17 // but causes debugging statements to be emitted for each
|
|
18 // modification.
|
|
19 int dummy = 0;
|
|
20
|
|
21 try
|
|
22 {
|
|
23 g ();
|
|
24 strncpy (d, s, sizeof d); // { dg-bogus "\\\[-Wstringop-truncation]" }
|
|
25 ++dummy;
|
|
26 }
|
|
27 catch (...)
|
|
28 {
|
|
29 ++dummy;
|
|
30 d[0] = 0;
|
|
31 }
|
|
32
|
|
33 ++dummy;
|
|
34 d[sizeof d - 1] = 0;
|
|
35 }
|
|
36
|
|
37 void fnowarn2 (const char *s)
|
|
38 {
|
|
39 int dummy = 0;
|
|
40
|
|
41 try
|
|
42 {
|
|
43 g ();
|
|
44 strncpy (d, s, sizeof d);
|
|
45 ++dummy;
|
|
46 }
|
|
47 catch (...)
|
|
48 {
|
|
49 ++dummy;
|
|
50 return;
|
|
51 }
|
|
52
|
|
53 ++dummy;
|
|
54 d[sizeof d - 1] = 0;
|
|
55 }
|
|
56
|
|
57 void fnowarn3 (const char *s)
|
|
58 {
|
|
59 int dummy = 0;
|
|
60
|
|
61 try
|
|
62 {
|
|
63 g ();
|
|
64 strncpy (d, s, sizeof d);
|
|
65 ++dummy;
|
|
66 try
|
|
67 {
|
|
68 ++dummy;
|
|
69 d[sizeof d - 1] = 0;
|
|
70 g ();
|
|
71 }
|
|
72 catch (...)
|
|
73 {
|
|
74 ++dummy;
|
|
75 }
|
|
76 }
|
|
77 catch (...)
|
|
78 {
|
|
79 ++dummy;
|
|
80 return;
|
|
81 }
|
|
82
|
|
83 ++dummy;
|
|
84 d[sizeof d - 1] = 0;
|
|
85 }
|
|
86
|
|
87 void fnowarn4 (const char *s)
|
|
88 {
|
|
89 int dummy = 0;
|
|
90
|
|
91 try
|
|
92 {
|
|
93 g ();
|
|
94 }
|
|
95 catch (...)
|
|
96 {
|
|
97 strncpy (d, s, sizeof d); // { dg-bogus "\\\[-Wstringop-truncation]" "bug 84468" { xfail *-*-*} }
|
|
98 ++dummy;
|
|
99 }
|
|
100
|
|
101 ++dummy;
|
|
102 d[sizeof d - 1] = 0;
|
|
103 }
|
|
104
|
|
105 void fwarn1 (const char *s)
|
|
106 {
|
|
107 int dummy = 0;
|
|
108
|
|
109 try
|
|
110 {
|
|
111 ++dummy;
|
|
112 g ();
|
|
113 ++dummy;
|
|
114 strncpy (d, s, sizeof d); // { dg-warning "\\\[-Wstringop-truncation]" }
|
|
115 ++dummy;
|
|
116 }
|
|
117 catch (...)
|
|
118 {
|
|
119 ++dummy;
|
|
120 }
|
|
121
|
|
122 ++dummy;
|
|
123 }
|
|
124
|
|
125 void fwarn2 (const char *s)
|
|
126 {
|
|
127 int dummy = 0;
|
|
128
|
|
129 try
|
|
130 {
|
|
131 ++dummy;
|
|
132 strncpy (d, s, sizeof d); // { dg-warning "\\\[-Wstringop-truncation]" }
|
|
133 ++dummy;
|
|
134 g ();
|
|
135 ++dummy;
|
|
136 }
|
|
137 catch (...)
|
|
138 {
|
|
139 ++dummy;
|
|
140 }
|
|
141
|
|
142 ++dummy;
|
|
143 }
|
|
144
|
|
145 void fwarn3 (const char *s)
|
|
146 {
|
|
147 int dummy = 0;
|
|
148
|
|
149 try
|
|
150 {
|
|
151 ++dummy;
|
|
152 g ();
|
|
153 ++dummy;
|
|
154 strncpy (d, s, sizeof d); // { dg-warning "\\\[-Wstringop-truncation]" }
|
|
155 ++dummy;
|
|
156 }
|
|
157 catch (...)
|
|
158 {
|
|
159 ++dummy;
|
|
160 d[0] = 0;
|
|
161 }
|
|
162
|
|
163 ++dummy;
|
|
164 }
|