IRA: Ignore debug insns for uses in split_live_ranges_for_shrink_wrap. [PR116179]
[official-gcc.git] / gcc / testsuite / c-c++-common / analyzer / memset-1.c
blobd6695d494111c92452ce3ddae4a263c5153f8a4b
1 #include <string.h>
2 #include "analyzer-decls.h"
4 /* Zero-fill of uninitialized buffer. */
6 void test_1 (void)
8 char buf[256];
9 void *p = memset (buf, 0, 256);
10 __analyzer_eval (buf[42] == 0); /* { dg-warning "TRUE" } */
11 __analyzer_eval (p == buf); /* { dg-warning "TRUE" } */
14 /* As above, but with __builtin_memset. */
16 void test_1a (void)
18 char buf[256];
19 __builtin_memset (buf, 0, 256);
20 __analyzer_eval (buf[42] == 0); /* { dg-warning "TRUE" } */
23 /* Zero-fill of partially initialized buffer. */
25 void test_2 (void)
27 char buf[256];
28 buf[42] = 'A';
29 __analyzer_eval (buf[42] == 'A'); /* { dg-warning "TRUE" } */
30 memset (buf, 0, 256);
31 __analyzer_eval (buf[42] == '\0'); /* { dg-warning "TRUE" } */
34 /* A "memset" with known non-zero value. */
36 void test_3 (int val)
38 char buf[256];
39 memset (buf, 'A', 256);
40 __analyzer_eval (buf[42] == 'A'); /* { dg-warning "TRUE" } */
43 /* A "memset" with unknown value. */
45 void test_4 (char val)
47 char buf[256];
48 memset (buf, val, 256);
49 __analyzer_eval (buf[42] == (char)val); /* { dg-warning "TRUE" } */
52 /* A "memset" with unknown num bytes. */
54 void test_5 (int n)
56 char buf[256];
57 buf[42] = 'A';
58 __analyzer_eval (buf[42] == 'A'); /* { dg-warning "TRUE" } */
59 memset (buf, 0, n);
61 /* We can't know if buf[42] was overwritten by the memset or not. */
62 __analyzer_eval (buf[42] == 'A'); /* { dg-warning "UNKNOWN" } */
63 __analyzer_eval (buf[42] == '\0'); /* { dg-warning "UNKNOWN" } */
66 /* As test_5, but with "__builtin___memset_chk". */
68 void test_5a (int n)
70 char buf[256];
71 buf[42] = 'A';
72 __analyzer_eval (buf[42] == 'A'); /* { dg-warning "TRUE" } */
73 __builtin___memset_chk (buf, 0, n, __builtin_object_size (buf, 0));
75 /* We can't know if buf[42] was overwritten by the memset or not. */
76 __analyzer_eval (buf[42] == 'A'); /* { dg-warning "UNKNOWN" } */
77 __analyzer_eval (buf[42] == '\0'); /* { dg-warning "UNKNOWN" } */
80 /* A "memset" with unknown value, but with zero size. */
82 static size_t __attribute__((noinline))
83 get_zero (void)
85 return 0;
88 void test_6 (int val)
90 char buf[256];
91 buf[42] = 'A';
92 memset (buf, 'B', get_zero ());
93 __analyzer_eval (buf[42] == 'A'); /* { dg-warning "TRUE" } */
96 void test_6b (int val)
98 char buf[256];
99 memset (buf, 'A', sizeof (buf));
100 memset (buf, 'B', get_zero ());
101 __analyzer_eval (buf[42] == 'A'); /* { dg-warning "TRUE" } */
104 /* A "memset" of known size that's not the full buffer. */
106 void test_7 (void)
108 char buf[256];
109 buf[128] = 'A';
110 memset (buf, 0, 128);
111 __analyzer_eval (buf[0] == '\0'); /* { dg-warning "TRUE" } */
112 __analyzer_eval (buf[127] == '\0'); /* { dg-warning "TRUE" } */
113 __analyzer_eval (buf[128] == 'A'); /* { dg-warning "TRUE" } */
116 void test_8 (void)
118 char buf[20];
119 memset (buf + 0, 0, 1);
120 memset (buf + 1, 1, 1);
121 memset (buf + 2, 2, 1);
122 memset (buf + 3, 3, 1);
123 memset (buf + 4, 4, 2);
124 memset (buf + 6, 6, 2);
125 memset (buf + 8, 8, 4);
126 memset (buf + 12, 12, 8);
127 __analyzer_eval (buf[0] == 0); /* { dg-warning "TRUE" } */
128 __analyzer_eval (buf[1] == 1); /* { dg-warning "TRUE" } */
129 __analyzer_eval (buf[2] == 2); /* { dg-warning "TRUE" } */
130 __analyzer_eval (buf[3] == 3); /* { dg-warning "TRUE" } */
131 __analyzer_eval (buf[4] == 4); /* { dg-warning "TRUE" } */
132 __analyzer_eval (buf[5] == 4); /* { dg-warning "TRUE" } */
133 __analyzer_eval (buf[6] == 6); /* { dg-warning "TRUE" } */
134 __analyzer_eval (buf[7] == 6); /* { dg-warning "TRUE" } */
135 __analyzer_eval (buf[8] == 8); /* { dg-warning "TRUE" } */
136 __analyzer_eval (buf[9] == 8); /* { dg-warning "TRUE" } */
137 __analyzer_eval (buf[10] == 8); /* { dg-warning "TRUE" } */
138 __analyzer_eval (buf[11] == 8); /* { dg-warning "TRUE" } */
139 __analyzer_eval (buf[12] == 12); /* { dg-warning "TRUE" } */
140 __analyzer_eval (buf[13] == 12); /* { dg-warning "TRUE" } */
141 __analyzer_eval (buf[14] == 12); /* { dg-warning "TRUE" } */
142 __analyzer_eval (buf[15] == 12); /* { dg-warning "TRUE" } */
143 __analyzer_eval (buf[16] == 12); /* { dg-warning "TRUE" } */
144 __analyzer_eval (buf[17] == 12); /* { dg-warning "TRUE" } */
145 __analyzer_eval (buf[18] == 12); /* { dg-warning "TRUE" } */
146 __analyzer_eval (buf[19] == 12); /* { dg-warning "TRUE" } */
149 /* Various overlapping memset calls with different sizes and values. */
151 void test_9 (void)
153 char buf[8];
154 memset (buf, 0, 8);
155 __analyzer_eval (buf[0] == 0); /* { dg-warning "TRUE" } */
156 __analyzer_eval (buf[1] == 0); /* { dg-warning "TRUE" } */
157 __analyzer_eval (buf[2] == 0); /* { dg-warning "TRUE" } */
158 __analyzer_eval (buf[3] == 0); /* { dg-warning "TRUE" } */
159 __analyzer_eval (buf[4] == 0); /* { dg-warning "TRUE" } */
160 __analyzer_eval (buf[5] == 0); /* { dg-warning "TRUE" } */
161 __analyzer_eval (buf[6] == 0); /* { dg-warning "TRUE" } */
162 __analyzer_eval (buf[7] == 0); /* { dg-warning "TRUE" } */
164 memset (buf + 1, 1, 4);
165 __analyzer_eval (buf[0] == 0); /* { dg-warning "TRUE" } */
166 __analyzer_eval (buf[1] == 1); /* { dg-warning "TRUE" } */
167 __analyzer_eval (buf[2] == 1); /* { dg-warning "TRUE" } */
168 __analyzer_eval (buf[3] == 1); /* { dg-warning "TRUE" } */
169 __analyzer_eval (buf[4] == 1); /* { dg-warning "TRUE" } */
170 __analyzer_eval (buf[5] == 0); /* { dg-warning "TRUE" } */
171 __analyzer_eval (buf[6] == 0); /* { dg-warning "TRUE" } */
172 __analyzer_eval (buf[7] == 0); /* { dg-warning "TRUE" } */
174 memset (buf + 2, 2, 4);
175 __analyzer_eval (buf[0] == 0); /* { dg-warning "TRUE" } */
176 __analyzer_eval (buf[1] == 1); /* { dg-warning "TRUE" } */
177 __analyzer_eval (buf[2] == 2); /* { dg-warning "TRUE" } */
178 __analyzer_eval (buf[3] == 2); /* { dg-warning "TRUE" } */
179 __analyzer_eval (buf[4] == 2); /* { dg-warning "TRUE" } */
180 __analyzer_eval (buf[5] == 2); /* { dg-warning "TRUE" } */
181 __analyzer_eval (buf[6] == 0); /* { dg-warning "TRUE" } */
182 __analyzer_eval (buf[7] == 0); /* { dg-warning "TRUE" } */
184 memset (buf + 4, 3, 3);
185 __analyzer_eval (buf[0] == 0); /* { dg-warning "TRUE" } */
186 __analyzer_eval (buf[1] == 1); /* { dg-warning "TRUE" } */
187 __analyzer_eval (buf[2] == 2); /* { dg-warning "TRUE" } */
188 __analyzer_eval (buf[3] == 2); /* { dg-warning "TRUE" } */
189 __analyzer_eval (buf[4] == 3); /* { dg-warning "TRUE" } */
190 __analyzer_eval (buf[5] == 3); /* { dg-warning "TRUE" } */
191 __analyzer_eval (buf[6] == 3); /* { dg-warning "TRUE" } */
192 __analyzer_eval (buf[7] == 0); /* { dg-warning "TRUE" } */
194 memset (buf + 0, 4, 3);
195 __analyzer_eval (buf[0] == 4); /* { dg-warning "TRUE" } */
196 __analyzer_eval (buf[1] == 4); /* { dg-warning "TRUE" } */
197 __analyzer_eval (buf[2] == 4); /* { dg-warning "TRUE" } */
198 __analyzer_eval (buf[3] == 2); /* { dg-warning "TRUE" } */
199 __analyzer_eval (buf[4] == 3); /* { dg-warning "TRUE" } */
200 __analyzer_eval (buf[5] == 3); /* { dg-warning "TRUE" } */
201 __analyzer_eval (buf[6] == 3); /* { dg-warning "TRUE" } */
202 __analyzer_eval (buf[7] == 0); /* { dg-warning "TRUE" } */