db/fixup_kernel.sh: fix clear_user() handling
[smatch.git] / validation / builtin-overflow.c
blobc3d1d3aa8c56a490b86a11f7ead210ed9df1543e
1 enum e { OK, KO = -1 };
2 typedef _Bool bool;
4 static int test(int i, long l, long long ll, enum e e, bool b, void *p)
6 int rc = 0;
8 // should be OK
9 rc += __builtin_add_overflow(i, i, &i);
10 rc += __builtin_add_overflow(l, i, &i);
11 rc += __builtin_add_overflow(i, l, &i);
12 rc += __builtin_add_overflow(i, i, &l);
13 rc += __builtin_add_overflow(ll, i, &i);
14 rc += __builtin_add_overflow(i, ll, &i);
15 rc += __builtin_add_overflow(i, i, &ll);
17 rc += __builtin_add_overflow_p(i, i, i);
18 rc += __builtin_add_overflow_p(l, i, i);
19 rc += __builtin_add_overflow_p(i, l, i);
20 rc += __builtin_add_overflow_p(i, i, l);
21 rc += __builtin_add_overflow_p(ll, i, i);
22 rc += __builtin_add_overflow_p(i, ll, i);
23 rc += __builtin_add_overflow_p(i, i, ll);
25 rc += __builtin_sub_overflow(i, i, &i);
26 rc += __builtin_sub_overflow(l, i, &i);
27 rc += __builtin_sub_overflow(i, l, &i);
28 rc += __builtin_sub_overflow(i, i, &l);
29 rc += __builtin_sub_overflow(ll, i, &i);
30 rc += __builtin_sub_overflow(i, ll, &i);
31 rc += __builtin_sub_overflow(i, i, &ll);
33 rc += __builtin_sub_overflow_p(i, i, i);
34 rc += __builtin_sub_overflow_p(l, i, i);
35 rc += __builtin_sub_overflow_p(i, l, i);
36 rc += __builtin_sub_overflow_p(i, i, l);
37 rc += __builtin_sub_overflow_p(ll, i, i);
38 rc += __builtin_sub_overflow_p(i, ll, i);
39 rc += __builtin_sub_overflow_p(i, i, ll);
41 rc += __builtin_mul_overflow(i, i, &i);
42 rc += __builtin_mul_overflow(l, i, &i);
43 rc += __builtin_mul_overflow(i, l, &i);
44 rc += __builtin_mul_overflow(i, i, &l);
45 rc += __builtin_mul_overflow(ll, i, &i);
46 rc += __builtin_mul_overflow(i, ll, &i);
47 rc += __builtin_mul_overflow(i, i, &ll);
49 rc += __builtin_mul_overflow_p(i, i, i);
50 rc += __builtin_mul_overflow_p(l, i, i);
51 rc += __builtin_mul_overflow_p(i, l, i);
52 rc += __builtin_mul_overflow_p(i, i, l);
53 rc += __builtin_mul_overflow_p(ll, i, i);
54 rc += __builtin_mul_overflow_p(i, ll, i);
55 rc += __builtin_mul_overflow_p(i, i, ll);
57 // should be KO
58 rc += __builtin_add_overflow();
59 rc += __builtin_add_overflow(i);
60 rc += __builtin_add_overflow(i, i);
61 rc += __builtin_add_overflow(i, i, &i, i);
62 rc += __builtin_add_overflow(e, i, &i);
63 rc += __builtin_add_overflow(i, e, &i);
64 rc += __builtin_add_overflow(i, i, &e);
65 rc += __builtin_add_overflow(b, i, &i);
66 rc += __builtin_add_overflow(i, b, &i);
67 rc += __builtin_add_overflow(i, i, &b);
68 rc += __builtin_add_overflow(i, i, p);
70 rc += __builtin_add_overflow_p();
71 rc += __builtin_add_overflow_p(i);
72 rc += __builtin_add_overflow_p(i, i);
73 rc += __builtin_add_overflow_p(i, i, i, i);
74 rc += __builtin_add_overflow_p(e, i, i);
75 rc += __builtin_add_overflow_p(i, e, i);
76 rc += __builtin_add_overflow_p(i, i, e);
77 rc += __builtin_add_overflow_p(b, i, i);
78 rc += __builtin_add_overflow_p(i, b, i);
79 rc += __builtin_add_overflow_p(i, i, b);
80 rc += __builtin_add_overflow_p(i, i, p);
82 rc += __builtin_sub_overflow();
83 rc += __builtin_sub_overflow(i);
84 rc += __builtin_sub_overflow(i, i);
85 rc += __builtin_sub_overflow(i, i, &i, i);
86 rc += __builtin_sub_overflow(e, i, &i);
87 rc += __builtin_sub_overflow(i, e, &i);
88 rc += __builtin_sub_overflow(i, i, &e);
89 rc += __builtin_sub_overflow(b, i, &i);
90 rc += __builtin_sub_overflow(i, b, &i);
91 rc += __builtin_sub_overflow(i, i, &b);
92 rc += __builtin_sub_overflow(i, i, p);
94 rc += __builtin_sub_overflow_p();
95 rc += __builtin_sub_overflow_p(i);
96 rc += __builtin_sub_overflow_p(i, i);
97 rc += __builtin_sub_overflow_p(i, i, i, i);
98 rc += __builtin_sub_overflow_p(e, i, i);
99 rc += __builtin_sub_overflow_p(i, e, i);
100 rc += __builtin_sub_overflow_p(i, i, e);
101 rc += __builtin_sub_overflow_p(b, i, i);
102 rc += __builtin_sub_overflow_p(i, b, i);
103 rc += __builtin_sub_overflow_p(i, i, b);
104 rc += __builtin_sub_overflow_p(i, i, p);
106 rc += __builtin_mul_overflow();
107 rc += __builtin_mul_overflow(i);
108 rc += __builtin_mul_overflow(i, i);
109 rc += __builtin_mul_overflow(i, i, &i, i);
110 rc += __builtin_mul_overflow(e, i, &i);
111 rc += __builtin_mul_overflow(i, e, &i);
112 rc += __builtin_mul_overflow(i, i, &e);
113 rc += __builtin_mul_overflow(b, i, &i);
114 rc += __builtin_mul_overflow(i, b, &i);
115 rc += __builtin_mul_overflow(i, i, &b);
116 rc += __builtin_mul_overflow(i, i, p);
118 rc += __builtin_mul_overflow_p();
119 rc += __builtin_mul_overflow_p(i);
120 rc += __builtin_mul_overflow_p(i, i);
121 rc += __builtin_mul_overflow_p(i, i, i, i);
122 rc += __builtin_mul_overflow_p(e, i, i);
123 rc += __builtin_mul_overflow_p(i, e, i);
124 rc += __builtin_mul_overflow_p(i, i, e);
125 rc += __builtin_mul_overflow_p(b, i, i);
126 rc += __builtin_mul_overflow_p(i, b, i);
127 rc += __builtin_mul_overflow_p(i, i, b);
128 rc += __builtin_mul_overflow_p(i, i, p);
130 return rc;
134 * check-name: builtin-overflow
136 * check-error-start
137 builtin-overflow.c:58:37: error: not enough arguments for __builtin_add_overflow
138 builtin-overflow.c:59:37: error: not enough arguments for __builtin_add_overflow
139 builtin-overflow.c:60:37: error: not enough arguments for __builtin_add_overflow
140 builtin-overflow.c:61:37: error: too many arguments for __builtin_add_overflow
141 builtin-overflow.c:62:38: error: invalid type for argument 1:
142 builtin-overflow.c:62:38: int enum e e
143 builtin-overflow.c:63:41: error: invalid type for argument 2:
144 builtin-overflow.c:63:41: int enum e e
145 builtin-overflow.c:64:45: error: invalid type for argument 3:
146 builtin-overflow.c:64:45: int enum e *
147 builtin-overflow.c:65:38: error: invalid type for argument 1:
148 builtin-overflow.c:65:38: bool [usertype] b
149 builtin-overflow.c:66:41: error: invalid type for argument 2:
150 builtin-overflow.c:66:41: bool [usertype] b
151 builtin-overflow.c:67:45: error: invalid type for argument 3:
152 builtin-overflow.c:67:45: bool *
153 builtin-overflow.c:68:44: error: invalid type for argument 3:
154 builtin-overflow.c:68:44: void *p
155 builtin-overflow.c:70:39: error: not enough arguments for __builtin_add_overflow_p
156 builtin-overflow.c:71:39: error: not enough arguments for __builtin_add_overflow_p
157 builtin-overflow.c:72:39: error: not enough arguments for __builtin_add_overflow_p
158 builtin-overflow.c:73:39: error: too many arguments for __builtin_add_overflow_p
159 builtin-overflow.c:74:40: error: invalid type for argument 1:
160 builtin-overflow.c:74:40: int enum e [addressable] e
161 builtin-overflow.c:75:43: error: invalid type for argument 2:
162 builtin-overflow.c:75:43: int enum e [addressable] e
163 builtin-overflow.c:76:46: error: invalid type for argument 3:
164 builtin-overflow.c:76:46: int enum e [addressable] e
165 builtin-overflow.c:77:40: error: invalid type for argument 1:
166 builtin-overflow.c:77:40: bool [addressable] [usertype] b
167 builtin-overflow.c:78:43: error: invalid type for argument 2:
168 builtin-overflow.c:78:43: bool [addressable] [usertype] b
169 builtin-overflow.c:79:46: error: invalid type for argument 3:
170 builtin-overflow.c:79:46: bool [addressable] [usertype] b
171 builtin-overflow.c:80:46: error: invalid type for argument 3:
172 builtin-overflow.c:80:46: void *p
173 builtin-overflow.c:82:37: error: not enough arguments for __builtin_sub_overflow
174 builtin-overflow.c:83:37: error: not enough arguments for __builtin_sub_overflow
175 builtin-overflow.c:84:37: error: not enough arguments for __builtin_sub_overflow
176 builtin-overflow.c:85:37: error: too many arguments for __builtin_sub_overflow
177 builtin-overflow.c:86:38: error: invalid type for argument 1:
178 builtin-overflow.c:86:38: int enum e [addressable] e
179 builtin-overflow.c:87:41: error: invalid type for argument 2:
180 builtin-overflow.c:87:41: int enum e [addressable] e
181 builtin-overflow.c:88:45: error: invalid type for argument 3:
182 builtin-overflow.c:88:45: int enum e *
183 builtin-overflow.c:89:38: error: invalid type for argument 1:
184 builtin-overflow.c:89:38: bool [addressable] [usertype] b
185 builtin-overflow.c:90:41: error: invalid type for argument 2:
186 builtin-overflow.c:90:41: bool [addressable] [usertype] b
187 builtin-overflow.c:91:45: error: invalid type for argument 3:
188 builtin-overflow.c:91:45: bool *
189 builtin-overflow.c:92:44: error: invalid type for argument 3:
190 builtin-overflow.c:92:44: void *p
191 builtin-overflow.c:94:39: error: not enough arguments for __builtin_sub_overflow_p
192 builtin-overflow.c:95:39: error: not enough arguments for __builtin_sub_overflow_p
193 builtin-overflow.c:96:39: error: not enough arguments for __builtin_sub_overflow_p
194 builtin-overflow.c:97:39: error: too many arguments for __builtin_sub_overflow_p
195 builtin-overflow.c:98:40: error: invalid type for argument 1:
196 builtin-overflow.c:98:40: int enum e [addressable] e
197 builtin-overflow.c:99:43: error: invalid type for argument 2:
198 builtin-overflow.c:99:43: int enum e [addressable] e
199 builtin-overflow.c:100:46: error: invalid type for argument 3:
200 builtin-overflow.c:100:46: int enum e [addressable] e
201 builtin-overflow.c:101:40: error: invalid type for argument 1:
202 builtin-overflow.c:101:40: bool [addressable] [usertype] b
203 builtin-overflow.c:102:43: error: invalid type for argument 2:
204 builtin-overflow.c:102:43: bool [addressable] [usertype] b
205 builtin-overflow.c:103:46: error: invalid type for argument 3:
206 builtin-overflow.c:103:46: bool [addressable] [usertype] b
207 builtin-overflow.c:104:46: error: invalid type for argument 3:
208 builtin-overflow.c:104:46: void *p
209 builtin-overflow.c:106:37: error: not enough arguments for __builtin_mul_overflow
210 builtin-overflow.c:107:37: error: not enough arguments for __builtin_mul_overflow
211 builtin-overflow.c:108:37: error: not enough arguments for __builtin_mul_overflow
212 builtin-overflow.c:109:37: error: too many arguments for __builtin_mul_overflow
213 builtin-overflow.c:110:38: error: invalid type for argument 1:
214 builtin-overflow.c:110:38: int enum e [addressable] e
215 builtin-overflow.c:111:41: error: invalid type for argument 2:
216 builtin-overflow.c:111:41: int enum e [addressable] e
217 builtin-overflow.c:112:45: error: invalid type for argument 3:
218 builtin-overflow.c:112:45: int enum e *
219 builtin-overflow.c:113:38: error: invalid type for argument 1:
220 builtin-overflow.c:113:38: bool [addressable] [usertype] b
221 builtin-overflow.c:114:41: error: invalid type for argument 2:
222 builtin-overflow.c:114:41: bool [addressable] [usertype] b
223 builtin-overflow.c:115:45: error: invalid type for argument 3:
224 builtin-overflow.c:115:45: bool *
225 builtin-overflow.c:116:44: error: invalid type for argument 3:
226 builtin-overflow.c:116:44: void *p
227 builtin-overflow.c:118:39: error: not enough arguments for __builtin_mul_overflow_p
228 builtin-overflow.c:119:39: error: not enough arguments for __builtin_mul_overflow_p
229 builtin-overflow.c:120:39: error: not enough arguments for __builtin_mul_overflow_p
230 builtin-overflow.c:121:39: error: too many arguments for __builtin_mul_overflow_p
231 builtin-overflow.c:122:40: error: invalid type for argument 1:
232 builtin-overflow.c:122:40: int enum e [addressable] e
233 builtin-overflow.c:123:43: error: invalid type for argument 2:
234 builtin-overflow.c:123:43: int enum e [addressable] e
235 builtin-overflow.c:124:46: error: invalid type for argument 3:
236 builtin-overflow.c:124:46: int enum e [addressable] e
237 builtin-overflow.c:125:40: error: invalid type for argument 1:
238 builtin-overflow.c:125:40: bool [addressable] [usertype] b
239 builtin-overflow.c:126:43: error: invalid type for argument 2:
240 builtin-overflow.c:126:43: bool [addressable] [usertype] b
241 builtin-overflow.c:127:46: error: invalid type for argument 3:
242 builtin-overflow.c:127:46: bool [addressable] [usertype] b
243 builtin-overflow.c:128:46: error: invalid type for argument 3:
244 builtin-overflow.c:128:46: void *p
245 * check-error-end