File: | build/gcc/c-family/c-common.cc |
Warning: | line 1201, column 29 Division by zero |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* Subroutines shared by all languages that are variants of C. | ||||||
2 | Copyright (C) 1992-2023 Free Software Foundation, Inc. | ||||||
3 | |||||||
4 | This file is part of GCC. | ||||||
5 | |||||||
6 | GCC is free software; you can redistribute it and/or modify it under | ||||||
7 | the terms of the GNU General Public License as published by the Free | ||||||
8 | Software Foundation; either version 3, or (at your option) any later | ||||||
9 | version. | ||||||
10 | |||||||
11 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY | ||||||
12 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||||
13 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||||||
14 | for more details. | ||||||
15 | |||||||
16 | You should have received a copy of the GNU General Public License | ||||||
17 | along with GCC; see the file COPYING3. If not see | ||||||
18 | <http://www.gnu.org/licenses/>. */ | ||||||
19 | |||||||
20 | #define GCC_C_COMMON_C | ||||||
21 | |||||||
22 | #include "config.h" | ||||||
23 | #include "system.h" | ||||||
24 | #include "coretypes.h" | ||||||
25 | #include "target.h" | ||||||
26 | #include "function.h" | ||||||
27 | #include "tree.h" | ||||||
28 | #include "memmodel.h" | ||||||
29 | #include "c-common.h" | ||||||
30 | #include "gimple-expr.h" | ||||||
31 | #include "tm_p.h" | ||||||
32 | #include "stringpool.h" | ||||||
33 | #include "cgraph.h" | ||||||
34 | #include "diagnostic.h" | ||||||
35 | #include "intl.h" | ||||||
36 | #include "stor-layout.h" | ||||||
37 | #include "calls.h" | ||||||
38 | #include "attribs.h" | ||||||
39 | #include "varasm.h" | ||||||
40 | #include "trans-mem.h" | ||||||
41 | #include "c-objc.h" | ||||||
42 | #include "common/common-target.h" | ||||||
43 | #include "langhooks.h" | ||||||
44 | #include "tree-inline.h" | ||||||
45 | #include "toplev.h" | ||||||
46 | #include "tree-iterator.h" | ||||||
47 | #include "opts.h" | ||||||
48 | #include "gimplify.h" | ||||||
49 | #include "substring-locations.h" | ||||||
50 | #include "spellcheck.h" | ||||||
51 | #include "c-spellcheck.h" | ||||||
52 | #include "selftest.h" | ||||||
53 | #include "debug.h" | ||||||
54 | #include "tree-vector-builder.h" | ||||||
55 | #include "vec-perm-indices.h" | ||||||
56 | |||||||
57 | cpp_reader *parse_in; /* Declared in c-pragma.h. */ | ||||||
58 | |||||||
59 | /* Mode used to build pointers (VOIDmode means ptr_mode). */ | ||||||
60 | |||||||
61 | machine_mode c_default_pointer_mode = VOIDmode((void) 0, E_VOIDmode); | ||||||
62 | |||||||
63 | /* The following symbols are subsumed in the c_global_trees array, and | ||||||
64 | listed here individually for documentation purposes. | ||||||
65 | |||||||
66 | INTEGER_TYPE and REAL_TYPE nodes for the standard data types. | ||||||
67 | |||||||
68 | tree short_integer_type_node; | ||||||
69 | tree long_integer_type_node; | ||||||
70 | tree long_long_integer_type_node; | ||||||
71 | |||||||
72 | tree short_unsigned_type_node; | ||||||
73 | tree long_unsigned_type_node; | ||||||
74 | tree long_long_unsigned_type_node; | ||||||
75 | |||||||
76 | tree truthvalue_type_node; | ||||||
77 | tree truthvalue_false_node; | ||||||
78 | tree truthvalue_true_node; | ||||||
79 | |||||||
80 | tree ptrdiff_type_node; | ||||||
81 | |||||||
82 | tree unsigned_char_type_node; | ||||||
83 | tree signed_char_type_node; | ||||||
84 | tree wchar_type_node; | ||||||
85 | |||||||
86 | tree char8_type_node; | ||||||
87 | tree char16_type_node; | ||||||
88 | tree char32_type_node; | ||||||
89 | |||||||
90 | tree float_type_node; | ||||||
91 | tree double_type_node; | ||||||
92 | tree long_double_type_node; | ||||||
93 | |||||||
94 | tree complex_integer_type_node; | ||||||
95 | tree complex_float_type_node; | ||||||
96 | tree complex_double_type_node; | ||||||
97 | tree complex_long_double_type_node; | ||||||
98 | |||||||
99 | tree dfloat32_type_node; | ||||||
100 | tree dfloat64_type_node; | ||||||
101 | tree_dfloat128_type_node; | ||||||
102 | |||||||
103 | tree intQI_type_node; | ||||||
104 | tree intHI_type_node; | ||||||
105 | tree intSI_type_node; | ||||||
106 | tree intDI_type_node; | ||||||
107 | tree intTI_type_node; | ||||||
108 | |||||||
109 | tree unsigned_intQI_type_node; | ||||||
110 | tree unsigned_intHI_type_node; | ||||||
111 | tree unsigned_intSI_type_node; | ||||||
112 | tree unsigned_intDI_type_node; | ||||||
113 | tree unsigned_intTI_type_node; | ||||||
114 | |||||||
115 | tree widest_integer_literal_type_node; | ||||||
116 | tree widest_unsigned_literal_type_node; | ||||||
117 | |||||||
118 | Nodes for types `void *' and `const void *'. | ||||||
119 | |||||||
120 | tree ptr_type_node, const_ptr_type_node; | ||||||
121 | |||||||
122 | Nodes for types `char *' and `const char *'. | ||||||
123 | |||||||
124 | tree string_type_node, const_string_type_node; | ||||||
125 | |||||||
126 | Type `char[SOMENUMBER]'. | ||||||
127 | Used when an array of char is needed and the size is irrelevant. | ||||||
128 | |||||||
129 | tree char_array_type_node; | ||||||
130 | |||||||
131 | Type `wchar_t[SOMENUMBER]' or something like it. | ||||||
132 | Used when a wide string literal is created. | ||||||
133 | |||||||
134 | tree wchar_array_type_node; | ||||||
135 | |||||||
136 | Type `char8_t[SOMENUMBER]' or something like it. | ||||||
137 | Used when a UTF-8 string literal is created. | ||||||
138 | |||||||
139 | tree char8_array_type_node; | ||||||
140 | |||||||
141 | Type `char16_t[SOMENUMBER]' or something like it. | ||||||
142 | Used when a UTF-16 string literal is created. | ||||||
143 | |||||||
144 | tree char16_array_type_node; | ||||||
145 | |||||||
146 | Type `char32_t[SOMENUMBER]' or something like it. | ||||||
147 | Used when a UTF-32 string literal is created. | ||||||
148 | |||||||
149 | tree char32_array_type_node; | ||||||
150 | |||||||
151 | Type `int ()' -- used for implicit declaration of functions. | ||||||
152 | |||||||
153 | tree default_function_type; | ||||||
154 | |||||||
155 | A VOID_TYPE node, packaged in a TREE_LIST. | ||||||
156 | |||||||
157 | tree void_list_node; | ||||||
158 | |||||||
159 | The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__, | ||||||
160 | and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__ | ||||||
161 | VAR_DECLS, but C++ does.) | ||||||
162 | |||||||
163 | tree function_name_decl_node; | ||||||
164 | tree pretty_function_name_decl_node; | ||||||
165 | tree c99_function_name_decl_node; | ||||||
166 | |||||||
167 | Stack of nested function name VAR_DECLs. | ||||||
168 | |||||||
169 | tree saved_function_name_decls; | ||||||
170 | |||||||
171 | */ | ||||||
172 | |||||||
173 | tree c_global_trees[CTI_MAX]; | ||||||
174 | |||||||
175 | /* Switches common to the C front ends. */ | ||||||
176 | |||||||
177 | /* Nonzero means don't output line number information. */ | ||||||
178 | |||||||
179 | char flag_no_line_commands; | ||||||
180 | |||||||
181 | /* Nonzero causes -E output not to be done, but directives such as | ||||||
182 | #define that have side effects are still obeyed. */ | ||||||
183 | |||||||
184 | char flag_no_output; | ||||||
185 | |||||||
186 | /* Nonzero means dump macros in some fashion. */ | ||||||
187 | |||||||
188 | char flag_dump_macros; | ||||||
189 | |||||||
190 | /* Nonzero means pass #include lines through to the output. */ | ||||||
191 | |||||||
192 | char flag_dump_includes; | ||||||
193 | |||||||
194 | /* Nonzero means process PCH files while preprocessing. */ | ||||||
195 | |||||||
196 | bool flag_pch_preprocess; | ||||||
197 | |||||||
198 | /* The file name to which we should write a precompiled header, or | ||||||
199 | NULL if no header will be written in this compile. */ | ||||||
200 | |||||||
201 | const char *pch_file; | ||||||
202 | |||||||
203 | /* Nonzero if an ISO standard was selected. It rejects macros in the | ||||||
204 | user's namespace. */ | ||||||
205 | int flag_iso; | ||||||
206 | |||||||
207 | /* C/ObjC language option variables. */ | ||||||
208 | |||||||
209 | |||||||
210 | /* Nonzero means allow type mismatches in conditional expressions; | ||||||
211 | just make their values `void'. */ | ||||||
212 | |||||||
213 | int flag_cond_mismatch; | ||||||
214 | |||||||
215 | /* Nonzero means enable C89 Amendment 1 features. */ | ||||||
216 | |||||||
217 | int flag_isoc94; | ||||||
218 | |||||||
219 | /* Nonzero means use the ISO C99 (or C11) dialect of C. */ | ||||||
220 | |||||||
221 | int flag_isoc99; | ||||||
222 | |||||||
223 | /* Nonzero means use the ISO C11 dialect of C. */ | ||||||
224 | |||||||
225 | int flag_isoc11; | ||||||
226 | |||||||
227 | /* Nonzero means use the ISO C2X dialect of C. */ | ||||||
228 | |||||||
229 | int flag_isoc2x; | ||||||
230 | |||||||
231 | /* Nonzero means that we have builtin functions, and main is an int. */ | ||||||
232 | |||||||
233 | int flag_hosted = 1; | ||||||
234 | |||||||
235 | |||||||
236 | /* ObjC language option variables. */ | ||||||
237 | |||||||
238 | |||||||
239 | /* Tells the compiler that this is a special run. Do not perform any | ||||||
240 | compiling, instead we are to test some platform dependent features | ||||||
241 | and output a C header file with appropriate definitions. */ | ||||||
242 | |||||||
243 | int print_struct_values; | ||||||
244 | |||||||
245 | /* Tells the compiler what is the constant string class for ObjC. */ | ||||||
246 | |||||||
247 | const char *constant_string_class_name; | ||||||
248 | |||||||
249 | |||||||
250 | /* C++ language option variables. */ | ||||||
251 | |||||||
252 | /* The reference version of the ABI for -Wabi. */ | ||||||
253 | |||||||
254 | int warn_abi_version = -1; | ||||||
255 | |||||||
256 | /* The C++ dialect being used. Default set in c_common_post_options. */ | ||||||
257 | |||||||
258 | enum cxx_dialect cxx_dialect = cxx_unset; | ||||||
259 | |||||||
260 | /* Maximum template instantiation depth. This limit exists to limit the | ||||||
261 | time it takes to notice excessively recursive template instantiations. | ||||||
262 | |||||||
263 | The default is lower than the 1024 recommended by the C++0x standard | ||||||
264 | because G++ runs out of stack before 1024 with highly recursive template | ||||||
265 | argument deduction substitution (g++.dg/cpp0x/enum11.C). */ | ||||||
266 | |||||||
267 | int max_tinst_depth = 900; | ||||||
268 | |||||||
269 | /* The elements of `ridpointers' are identifier nodes for the reserved | ||||||
270 | type names and storage classes. It is indexed by a RID_... value. */ | ||||||
271 | tree *ridpointers; | ||||||
272 | |||||||
273 | tree (*make_fname_decl) (location_t, tree, int); | ||||||
274 | |||||||
275 | /* Nonzero means don't warn about problems that occur when the code is | ||||||
276 | executed. */ | ||||||
277 | int c_inhibit_evaluation_warnings; | ||||||
278 | |||||||
279 | /* Whether we are building a boolean conversion inside | ||||||
280 | convert_for_assignment, or some other late binary operation. If | ||||||
281 | build_binary_op is called for C (from code shared by C and C++) in | ||||||
282 | this case, then the operands have already been folded and the | ||||||
283 | result will not be folded again, so C_MAYBE_CONST_EXPR should not | ||||||
284 | be generated. */ | ||||||
285 | bool in_late_binary_op; | ||||||
286 | |||||||
287 | /* Depending on which phase of processing we are in, we may need | ||||||
288 | to prefer input_location to libcpp's locations. (Specifically, | ||||||
289 | after the C++ lexer is done lexing tokens, but prior to calling | ||||||
290 | cpp_finish (), we need to do so. */ | ||||||
291 | bool override_libcpp_locations; | ||||||
292 | |||||||
293 | /* Information about how a function name is generated. */ | ||||||
294 | struct fname_var_t | ||||||
295 | { | ||||||
296 | tree *const decl; /* pointer to the VAR_DECL. */ | ||||||
297 | const unsigned rid; /* RID number for the identifier. */ | ||||||
298 | const int pretty; /* How pretty is it? */ | ||||||
299 | }; | ||||||
300 | |||||||
301 | /* The three ways of getting then name of the current function. */ | ||||||
302 | |||||||
303 | const struct fname_var_t fname_vars[] = | ||||||
304 | { | ||||||
305 | /* C99 compliant __func__, must be first. */ | ||||||
306 | {&c99_function_name_decl_nodec_global_trees[CTI_C99_FUNCTION_NAME_DECL], RID_C99_FUNCTION_NAME, 0}, | ||||||
307 | /* GCC __FUNCTION__ compliant. */ | ||||||
308 | {&function_name_decl_nodec_global_trees[CTI_FUNCTION_NAME_DECL], RID_FUNCTION_NAME, 0}, | ||||||
309 | /* GCC __PRETTY_FUNCTION__ compliant. */ | ||||||
310 | {&pretty_function_name_decl_nodec_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL], RID_PRETTY_FUNCTION_NAME, 1}, | ||||||
311 | {NULL__null, 0, 0}, | ||||||
312 | }; | ||||||
313 | |||||||
314 | /* Global visibility options. */ | ||||||
315 | struct visibility_flags visibility_options; | ||||||
316 | |||||||
317 | static tree check_case_value (location_t, tree); | ||||||
318 | |||||||
319 | |||||||
320 | static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INTlong); | ||||||
321 | static bool nonnull_check_p (tree, unsigned HOST_WIDE_INTlong); | ||||||
322 | |||||||
323 | /* Reserved words. The third field is a mask: keywords are disabled | ||||||
324 | if they match the mask. | ||||||
325 | |||||||
326 | Masks for languages: | ||||||
327 | C --std=c89: D_C99 | D_C2X | D_CXXONLY | D_OBJC | D_CXX_OBJC | ||||||
328 | C --std=c99: D_C2X | D_CXXONLY | D_OBJC | ||||||
329 | C --std=c17: D_C2X | D_CXXONLY | D_OBJC | ||||||
330 | C --std=c2x: D_CXXONLY | D_OBJC | ||||||
331 | ObjC is like C except that D_OBJC and D_CXX_OBJC are not set | ||||||
332 | C++ --std=c++98: D_CONLY | D_CXX11 | D_CXX20 | D_OBJC | ||||||
333 | C++ --std=c++11: D_CONLY | D_CXX20 | D_OBJC | ||||||
334 | C++ --std=c++20: D_CONLY | D_OBJC | ||||||
335 | ObjC++ is like C++ except that D_OBJC is not set | ||||||
336 | |||||||
337 | If -fno-asm is used, D_ASM is added to the mask. If | ||||||
338 | -fno-gnu-keywords is used, D_EXT is added. If -fno-asm and C in | ||||||
339 | C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords. | ||||||
340 | In C with -Wc++-compat, we warn if D_CXXWARN is set. | ||||||
341 | |||||||
342 | Note the complication of the D_CXX_OBJC keywords. These are | ||||||
343 | reserved words such as 'class'. In C++, 'class' is a reserved | ||||||
344 | word. In Objective-C++ it is too. In Objective-C, it is a | ||||||
345 | reserved word too, but only if it follows an '@' sign. | ||||||
346 | */ | ||||||
347 | const struct c_common_resword c_common_reswords[] = | ||||||
348 | { | ||||||
349 | { "_Alignas", RID_ALIGNAS, D_CONLY0x0001 }, | ||||||
350 | { "_Alignof", RID_ALIGNOF, D_CONLY0x0001 }, | ||||||
351 | { "_Atomic", RID_ATOMIC, D_CONLY0x0001 }, | ||||||
352 | { "_Bool", RID_BOOL, D_CONLY0x0001 }, | ||||||
353 | { "_Complex", RID_COMPLEX, 0 }, | ||||||
354 | { "_Imaginary", RID_IMAGINARY, D_CONLY0x0001 }, | ||||||
355 | { "_Float16", RID_FLOAT16, 0 }, | ||||||
356 | { "_Float32", RID_FLOAT32, 0 }, | ||||||
357 | { "_Float64", RID_FLOAT64, 0 }, | ||||||
358 | { "_Float128", RID_FLOAT128, 0 }, | ||||||
359 | { "_Float32x", RID_FLOAT32X, 0 }, | ||||||
360 | { "_Float64x", RID_FLOAT64X, 0 }, | ||||||
361 | { "_Float128x", RID_FLOAT128X, 0 }, | ||||||
362 | { "_Decimal32", RID_DFLOAT32, D_CONLY0x0001 }, | ||||||
363 | { "_Decimal64", RID_DFLOAT64, D_CONLY0x0001 }, | ||||||
364 | { "_Decimal128", RID_DFLOAT128, D_CONLY0x0001 }, | ||||||
365 | { "_Fract", RID_FRACT, D_CONLY0x0001 | D_EXT0x0020 }, | ||||||
366 | { "_Accum", RID_ACCUM, D_CONLY0x0001 | D_EXT0x0020 }, | ||||||
367 | { "_Sat", RID_SAT, D_CONLY0x0001 | D_EXT0x0020 }, | ||||||
368 | { "_Static_assert", RID_STATIC_ASSERT, D_CONLY0x0001 }, | ||||||
369 | { "_Noreturn", RID_NORETURN, D_CONLY0x0001 }, | ||||||
370 | { "_Generic", RID_GENERIC, D_CONLY0x0001 }, | ||||||
371 | { "_Thread_local", RID_THREAD, D_CONLY0x0001 }, | ||||||
372 | { "__FUNCTION__", RID_FUNCTION_NAME, 0 }, | ||||||
373 | { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 }, | ||||||
374 | { "__alignof", RID_ALIGNOF, 0 }, | ||||||
375 | { "__alignof__", RID_ALIGNOF, 0 }, | ||||||
376 | { "__asm", RID_ASM, 0 }, | ||||||
377 | { "__asm__", RID_ASM, 0 }, | ||||||
378 | { "__attribute", RID_ATTRIBUTE, 0 }, | ||||||
379 | { "__attribute__", RID_ATTRIBUTE, 0 }, | ||||||
380 | { "__auto_type", RID_AUTO_TYPE, D_CONLY0x0001 }, | ||||||
381 | { "__builtin_addressof", RID_ADDRESSOF, D_CXXONLY0x0002 }, | ||||||
382 | { "__builtin_bit_cast", RID_BUILTIN_BIT_CAST, D_CXXONLY0x0002 }, | ||||||
383 | { "__builtin_call_with_static_chain", | ||||||
384 | RID_BUILTIN_CALL_WITH_STATIC_CHAIN, D_CONLY0x0001 }, | ||||||
385 | { "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY0x0001 }, | ||||||
386 | { "__builtin_complex", RID_BUILTIN_COMPLEX, D_CONLY0x0001 }, | ||||||
387 | { "__builtin_convertvector", RID_BUILTIN_CONVERTVECTOR, 0 }, | ||||||
388 | { "__builtin_has_attribute", RID_BUILTIN_HAS_ATTRIBUTE, 0 }, | ||||||
389 | { "__builtin_launder", RID_BUILTIN_LAUNDER, D_CXXONLY0x0002 }, | ||||||
390 | { "__builtin_assoc_barrier", RID_BUILTIN_ASSOC_BARRIER, 0 }, | ||||||
391 | { "__builtin_shuffle", RID_BUILTIN_SHUFFLE, 0 }, | ||||||
392 | { "__builtin_shufflevector", RID_BUILTIN_SHUFFLEVECTOR, 0 }, | ||||||
393 | { "__builtin_tgmath", RID_BUILTIN_TGMATH, D_CONLY0x0001 }, | ||||||
394 | { "__builtin_offsetof", RID_OFFSETOF, 0 }, | ||||||
395 | { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY0x0001 }, | ||||||
396 | { "__builtin_va_arg", RID_VA_ARG, 0 }, | ||||||
397 | { "__complex", RID_COMPLEX, 0 }, | ||||||
398 | { "__complex__", RID_COMPLEX, 0 }, | ||||||
399 | { "__const", RID_CONST, 0 }, | ||||||
400 | { "__const__", RID_CONST, 0 }, | ||||||
401 | { "__constinit", RID_CONSTINIT, D_CXXONLY0x0002 }, | ||||||
402 | { "__decltype", RID_DECLTYPE, D_CXXONLY0x0002 }, | ||||||
403 | { "__extension__", RID_EXTENSION, 0 }, | ||||||
404 | { "__func__", RID_C99_FUNCTION_NAME, 0 }, | ||||||
405 | { "__imag", RID_IMAGPART, 0 }, | ||||||
406 | { "__imag__", RID_IMAGPART, 0 }, | ||||||
407 | { "__inline", RID_INLINE, 0 }, | ||||||
408 | { "__inline__", RID_INLINE, 0 }, | ||||||
409 | { "__label__", RID_LABEL, 0 }, | ||||||
410 | { "__null", RID_NULL, 0 }, | ||||||
411 | { "__real", RID_REALPART, 0 }, | ||||||
412 | { "__real__", RID_REALPART, 0 }, | ||||||
413 | { "__restrict", RID_RESTRICT, 0 }, | ||||||
414 | { "__restrict__", RID_RESTRICT, 0 }, | ||||||
415 | { "__signed", RID_SIGNED, 0 }, | ||||||
416 | { "__signed__", RID_SIGNED, 0 }, | ||||||
417 | { "__thread", RID_THREAD, 0 }, | ||||||
418 | { "__transaction_atomic", RID_TRANSACTION_ATOMIC, 0 }, | ||||||
419 | { "__transaction_relaxed", RID_TRANSACTION_RELAXED, 0 }, | ||||||
420 | { "__transaction_cancel", RID_TRANSACTION_CANCEL, 0 }, | ||||||
421 | { "__typeof", RID_TYPEOF, 0 }, | ||||||
422 | { "__typeof__", RID_TYPEOF, 0 }, | ||||||
423 | { "__volatile", RID_VOLATILE, 0 }, | ||||||
424 | { "__volatile__", RID_VOLATILE, 0 }, | ||||||
425 | { "__GIMPLE", RID_GIMPLE, D_CONLY0x0001 }, | ||||||
426 | { "__PHI", RID_PHI, D_CONLY0x0001 }, | ||||||
427 | { "__RTL", RID_RTL, D_CONLY0x0001 }, | ||||||
428 | { "alignas", RID_ALIGNAS, D_C2X0x0008 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
429 | { "alignof", RID_ALIGNOF, D_C2X0x0008 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
430 | { "asm", RID_ASM, D_ASM0x0100 }, | ||||||
431 | { "auto", RID_AUTO, 0 }, | ||||||
432 | { "bool", RID_BOOL, D_C2X0x0008 | D_CXXWARN0x0800 }, | ||||||
433 | { "break", RID_BREAK, 0 }, | ||||||
434 | { "case", RID_CASE, 0 }, | ||||||
435 | { "catch", RID_CATCH, D_CXX_OBJC0x0400 | D_CXXWARN0x0800 }, | ||||||
436 | { "char", RID_CHAR, 0 }, | ||||||
437 | { "char8_t", RID_CHAR8, D_CXX_CHAR8_T_FLAGS0x0002 | 0x4000 | D_CXXWARN0x0800 }, | ||||||
438 | { "char16_t", RID_CHAR16, D_CXXONLY0x0002 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
439 | { "char32_t", RID_CHAR32, D_CXXONLY0x0002 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
440 | { "class", RID_CLASS, D_CXX_OBJC0x0400 | D_CXXWARN0x0800 }, | ||||||
441 | { "const", RID_CONST, 0 }, | ||||||
442 | { "consteval", RID_CONSTEVAL, D_CXXONLY0x0002 | D_CXX200x8000 | D_CXXWARN0x0800 }, | ||||||
443 | { "constexpr", RID_CONSTEXPR, D_C2X0x0008 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
444 | { "constinit", RID_CONSTINIT, D_CXXONLY0x0002 | D_CXX200x8000 | D_CXXWARN0x0800 }, | ||||||
445 | { "const_cast", RID_CONSTCAST, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
446 | { "continue", RID_CONTINUE, 0 }, | ||||||
447 | { "decltype", RID_DECLTYPE, D_CXXONLY0x0002 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
448 | { "default", RID_DEFAULT, 0 }, | ||||||
449 | { "delete", RID_DELETE, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
450 | { "do", RID_DO, 0 }, | ||||||
451 | { "double", RID_DOUBLE, 0 }, | ||||||
452 | { "dynamic_cast", RID_DYNCAST, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
453 | { "else", RID_ELSE, 0 }, | ||||||
454 | { "enum", RID_ENUM, 0 }, | ||||||
455 | { "explicit", RID_EXPLICIT, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
456 | { "export", RID_EXPORT, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
457 | { "extern", RID_EXTERN, 0 }, | ||||||
458 | { "false", RID_FALSE, D_C2X0x0008 | D_CXXWARN0x0800 }, | ||||||
459 | { "float", RID_FLOAT, 0 }, | ||||||
460 | { "for", RID_FOR, 0 }, | ||||||
461 | { "friend", RID_FRIEND, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
462 | { "goto", RID_GOTO, 0 }, | ||||||
463 | { "if", RID_IF, 0 }, | ||||||
464 | { "inline", RID_INLINE, D_EXT890x0040 }, | ||||||
465 | { "int", RID_INT, 0 }, | ||||||
466 | { "long", RID_LONG, 0 }, | ||||||
467 | { "mutable", RID_MUTABLE, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
468 | { "namespace", RID_NAMESPACE, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
469 | { "new", RID_NEW, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
470 | { "noexcept", RID_NOEXCEPT, D_CXXONLY0x0002 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
471 | { "nullptr", RID_NULLPTR, D_C2X0x0008 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
472 | { "operator", RID_OPERATOR, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
473 | { "private", RID_PRIVATE, D_CXX_OBJC0x0400 | D_CXXWARN0x0800 }, | ||||||
474 | { "protected", RID_PROTECTED, D_CXX_OBJC0x0400 | D_CXXWARN0x0800 }, | ||||||
475 | { "public", RID_PUBLIC, D_CXX_OBJC0x0400 | D_CXXWARN0x0800 }, | ||||||
476 | { "register", RID_REGISTER, 0 }, | ||||||
477 | { "reinterpret_cast", RID_REINTCAST, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
478 | { "restrict", RID_RESTRICT, D_CONLY0x0001 | D_C990x0004 }, | ||||||
479 | { "return", RID_RETURN, 0 }, | ||||||
480 | { "short", RID_SHORT, 0 }, | ||||||
481 | { "signed", RID_SIGNED, 0 }, | ||||||
482 | { "sizeof", RID_SIZEOF, 0 }, | ||||||
483 | { "static", RID_STATIC, 0 }, | ||||||
484 | { "static_assert", RID_STATIC_ASSERT, D_C2X0x0008 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
485 | { "static_cast", RID_STATCAST, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
486 | { "struct", RID_STRUCT, 0 }, | ||||||
487 | { "switch", RID_SWITCH, 0 }, | ||||||
488 | { "template", RID_TEMPLATE, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
489 | { "this", RID_THIS, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
490 | { "thread_local", RID_THREAD, D_C2X0x0008 | D_CXX110x0010 | D_CXXWARN0x0800 }, | ||||||
491 | { "throw", RID_THROW, D_CXX_OBJC0x0400 | D_CXXWARN0x0800 }, | ||||||
492 | { "true", RID_TRUE, D_C2X0x0008 | D_CXXWARN0x0800 }, | ||||||
493 | { "try", RID_TRY, D_CXX_OBJC0x0400 | D_CXXWARN0x0800 }, | ||||||
494 | { "typedef", RID_TYPEDEF, 0 }, | ||||||
495 | { "typename", RID_TYPENAME, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
496 | { "typeid", RID_TYPEID, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
497 | { "typeof", RID_TYPEOF, D_EXT110x0080 }, | ||||||
498 | { "typeof_unqual", RID_TYPEOF_UNQUAL, D_CONLY0x0001 | D_C2X0x0008 }, | ||||||
499 | { "union", RID_UNION, 0 }, | ||||||
500 | { "unsigned", RID_UNSIGNED, 0 }, | ||||||
501 | { "using", RID_USING, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
502 | { "virtual", RID_VIRTUAL, D_CXXONLY0x0002 | D_CXXWARN0x0800 }, | ||||||
503 | { "void", RID_VOID, 0 }, | ||||||
504 | { "volatile", RID_VOLATILE, 0 }, | ||||||
505 | { "wchar_t", RID_WCHAR, D_CXXONLY0x0002 }, | ||||||
506 | { "while", RID_WHILE, 0 }, | ||||||
507 | |||||||
508 | #define DEFTRAIT(TCC, CODE, NAME, ARITY) \ | ||||||
509 | { NAME, RID_##CODE, D_CXXONLY0x0002 }, | ||||||
510 | #include "cp/cp-trait.def" | ||||||
511 | #undef DEFTRAIT | ||||||
512 | /* An alias for __is_same. */ | ||||||
513 | { "__is_same_as", RID_IS_SAME, D_CXXONLY0x0002 }, | ||||||
514 | |||||||
515 | /* C++ transactional memory. */ | ||||||
516 | { "synchronized", RID_SYNCHRONIZED, D_CXX_OBJC0x0400 | D_TRANSMEM0x2000 }, | ||||||
517 | { "atomic_noexcept", RID_ATOMIC_NOEXCEPT, D_CXXONLY0x0002 | D_TRANSMEM0x2000 }, | ||||||
518 | { "atomic_cancel", RID_ATOMIC_CANCEL, D_CXXONLY0x0002 | D_TRANSMEM0x2000 }, | ||||||
519 | { "atomic_commit", RID_TRANSACTION_ATOMIC, D_CXXONLY0x0002 | D_TRANSMEM0x2000 }, | ||||||
520 | |||||||
521 | /* Concepts-related keywords */ | ||||||
522 | { "concept", RID_CONCEPT, D_CXX_CONCEPTS_FLAGS0x0002 | 0x1000 | D_CXXWARN0x0800 }, | ||||||
523 | { "requires", RID_REQUIRES, D_CXX_CONCEPTS_FLAGS0x0002 | 0x1000 | D_CXXWARN0x0800 }, | ||||||
524 | |||||||
525 | /* Modules-related keywords, these are internal unspellable tokens, | ||||||
526 | created by the preprocessor. */ | ||||||
527 | { "module ", RID__MODULE, D_CXX_MODULES_FLAGS(0x0002 | 0x20000) | D_CXXWARN0x0800 }, | ||||||
528 | { "import ", RID__IMPORT, D_CXX_MODULES_FLAGS(0x0002 | 0x20000) | D_CXXWARN0x0800 }, | ||||||
529 | { "export ", RID__EXPORT, D_CXX_MODULES_FLAGS(0x0002 | 0x20000) | D_CXXWARN0x0800 }, | ||||||
530 | |||||||
531 | /* Coroutines-related keywords */ | ||||||
532 | { "co_await", RID_CO_AWAIT, D_CXX_COROUTINES_FLAGS(0x0002 | 0x10000) | D_CXXWARN0x0800 }, | ||||||
533 | { "co_yield", RID_CO_YIELD, D_CXX_COROUTINES_FLAGS(0x0002 | 0x10000) | D_CXXWARN0x0800 }, | ||||||
534 | { "co_return", RID_CO_RETURN, D_CXX_COROUTINES_FLAGS(0x0002 | 0x10000) | D_CXXWARN0x0800 }, | ||||||
535 | |||||||
536 | /* These Objective-C keywords are recognized only immediately after | ||||||
537 | an '@'. */ | ||||||
538 | { "compatibility_alias", RID_AT_ALIAS, D_OBJC0x0200 }, | ||||||
539 | { "defs", RID_AT_DEFS, D_OBJC0x0200 }, | ||||||
540 | { "encode", RID_AT_ENCODE, D_OBJC0x0200 }, | ||||||
541 | { "end", RID_AT_END, D_OBJC0x0200 }, | ||||||
542 | { "implementation", RID_AT_IMPLEMENTATION, D_OBJC0x0200 }, | ||||||
543 | { "interface", RID_AT_INTERFACE, D_OBJC0x0200 }, | ||||||
544 | { "protocol", RID_AT_PROTOCOL, D_OBJC0x0200 }, | ||||||
545 | { "selector", RID_AT_SELECTOR, D_OBJC0x0200 }, | ||||||
546 | { "finally", RID_AT_FINALLY, D_OBJC0x0200 }, | ||||||
547 | { "optional", RID_AT_OPTIONAL, D_OBJC0x0200 }, | ||||||
548 | { "required", RID_AT_REQUIRED, D_OBJC0x0200 }, | ||||||
549 | { "property", RID_AT_PROPERTY, D_OBJC0x0200 }, | ||||||
550 | { "package", RID_AT_PACKAGE, D_OBJC0x0200 }, | ||||||
551 | { "synthesize", RID_AT_SYNTHESIZE, D_OBJC0x0200 }, | ||||||
552 | { "dynamic", RID_AT_DYNAMIC, D_OBJC0x0200 }, | ||||||
553 | /* These are recognized only in protocol-qualifier context | ||||||
554 | (see above) */ | ||||||
555 | { "bycopy", RID_BYCOPY, D_OBJC0x0200 }, | ||||||
556 | { "byref", RID_BYREF, D_OBJC0x0200 }, | ||||||
557 | { "in", RID_IN, D_OBJC0x0200 }, | ||||||
558 | { "inout", RID_INOUT, D_OBJC0x0200 }, | ||||||
559 | { "oneway", RID_ONEWAY, D_OBJC0x0200 }, | ||||||
560 | { "out", RID_OUT, D_OBJC0x0200 }, | ||||||
561 | /* These are recognized inside a property attribute list */ | ||||||
562 | { "assign", RID_ASSIGN, D_OBJC0x0200 }, | ||||||
563 | { "atomic", RID_PROPATOMIC, D_OBJC0x0200 }, | ||||||
564 | { "copy", RID_COPY, D_OBJC0x0200 }, | ||||||
565 | { "getter", RID_GETTER, D_OBJC0x0200 }, | ||||||
566 | { "nonatomic", RID_NONATOMIC, D_OBJC0x0200 }, | ||||||
567 | { "readonly", RID_READONLY, D_OBJC0x0200 }, | ||||||
568 | { "readwrite", RID_READWRITE, D_OBJC0x0200 }, | ||||||
569 | { "retain", RID_RETAIN, D_OBJC0x0200 }, | ||||||
570 | { "setter", RID_SETTER, D_OBJC0x0200 }, | ||||||
571 | /* These are Objective C implementation of nullability, accepted only in | ||||||
572 | specific contexts. */ | ||||||
573 | { "null_unspecified", RID_NULL_UNSPECIFIED, D_OBJC0x0200 }, | ||||||
574 | { "nullable", RID_NULLABLE, D_OBJC0x0200 }, | ||||||
575 | { "nonnull", RID_NONNULL, D_OBJC0x0200 }, | ||||||
576 | { "null_resettable", RID_NULL_RESETTABLE, D_OBJC0x0200 }, | ||||||
577 | }; | ||||||
578 | |||||||
579 | const unsigned int num_c_common_reswords = ARRAY_SIZE (c_common_reswords)(sizeof (c_common_reswords) / sizeof ((c_common_reswords)[0]) ); | ||||||
580 | |||||||
581 | /* Return identifier for address space AS. */ | ||||||
582 | |||||||
583 | const char * | ||||||
584 | c_addr_space_name (addr_space_t as) | ||||||
585 | { | ||||||
586 | int rid = RID_FIRST_ADDR_SPACE + as; | ||||||
587 | gcc_assert (ridpointers [rid])((void)(!(ridpointers [rid]) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 587, __FUNCTION__), 0 : 0)); | ||||||
588 | return IDENTIFIER_POINTER (ridpointers [rid])((const char *) (tree_check ((ridpointers [rid]), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 588, __FUNCTION__, (IDENTIFIER_NODE)))->identifier.id.str ); | ||||||
589 | } | ||||||
590 | |||||||
591 | /* Push current bindings for the function name VAR_DECLS. */ | ||||||
592 | |||||||
593 | void | ||||||
594 | start_fname_decls (void) | ||||||
595 | { | ||||||
596 | unsigned ix; | ||||||
597 | tree saved = NULL_TREE(tree) __null; | ||||||
598 | |||||||
599 | for (ix = 0; fname_vars[ix].decl; ix++) | ||||||
600 | { | ||||||
601 | tree decl = *fname_vars[ix].decl; | ||||||
602 | |||||||
603 | if (decl) | ||||||
604 | { | ||||||
605 | saved = tree_cons (decl, build_int_cst (integer_type_nodeinteger_types[itk_int], ix), | ||||||
606 | saved); | ||||||
607 | *fname_vars[ix].decl = NULL_TREE(tree) __null; | ||||||
608 | } | ||||||
609 | } | ||||||
610 | if (saved || saved_function_name_declsc_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]) | ||||||
611 | /* Normally they'll have been NULL, so only push if we've got a | ||||||
612 | stack, or they are non-NULL. */ | ||||||
613 | saved_function_name_declsc_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS] = tree_cons (saved, NULL_TREE(tree) __null, | ||||||
614 | saved_function_name_declsc_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]); | ||||||
615 | } | ||||||
616 | |||||||
617 | /* Finish up the current bindings, adding them into the current function's | ||||||
618 | statement tree. This must be done _before_ finish_stmt_tree is called. | ||||||
619 | If there is no current function, we must be at file scope and no statements | ||||||
620 | are involved. Pop the previous bindings. */ | ||||||
621 | |||||||
622 | void | ||||||
623 | finish_fname_decls (void) | ||||||
624 | { | ||||||
625 | unsigned ix; | ||||||
626 | tree stmts = NULL_TREE(tree) __null; | ||||||
627 | tree stack = saved_function_name_declsc_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]; | ||||||
628 | |||||||
629 | for (; stack && TREE_VALUE (stack)((tree_check ((stack), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 629, __FUNCTION__, (TREE_LIST)))->list.value); stack = TREE_CHAIN (stack)((contains_struct_check ((stack), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 629, __FUNCTION__))->common.chain)) | ||||||
630 | append_to_statement_list (TREE_VALUE (stack)((tree_check ((stack), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 630, __FUNCTION__, (TREE_LIST)))->list.value), &stmts); | ||||||
631 | |||||||
632 | if (stmts) | ||||||
633 | { | ||||||
634 | tree *bodyp = &DECL_SAVED_TREE (current_function_decl)((tree_check ((current_function_decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 634, __FUNCTION__, (FUNCTION_DECL)))->function_decl.saved_tree ); | ||||||
635 | |||||||
636 | if (TREE_CODE (*bodyp)((enum tree_code) (*bodyp)->base.code) == BIND_EXPR) | ||||||
637 | bodyp = &BIND_EXPR_BODY (*bodyp)((*((const_cast<tree*> (tree_operand_check (((tree_check ((*bodyp), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 637, __FUNCTION__, (BIND_EXPR)))), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 637, __FUNCTION__)))))); | ||||||
638 | |||||||
639 | append_to_statement_list_force (*bodyp, &stmts); | ||||||
640 | *bodyp = stmts; | ||||||
641 | } | ||||||
642 | |||||||
643 | for (ix = 0; fname_vars[ix].decl; ix++) | ||||||
644 | *fname_vars[ix].decl = NULL_TREE(tree) __null; | ||||||
645 | |||||||
646 | if (stack) | ||||||
647 | { | ||||||
648 | /* We had saved values, restore them. */ | ||||||
649 | tree saved; | ||||||
650 | |||||||
651 | for (saved = TREE_PURPOSE (stack)((tree_check ((stack), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 651, __FUNCTION__, (TREE_LIST)))->list.purpose); saved; saved = TREE_CHAIN (saved)((contains_struct_check ((saved), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 651, __FUNCTION__))->common.chain)) | ||||||
652 | { | ||||||
653 | tree decl = TREE_PURPOSE (saved)((tree_check ((saved), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 653, __FUNCTION__, (TREE_LIST)))->list.purpose); | ||||||
654 | unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved))((unsigned long) (*tree_int_cst_elt_check ((((tree_check ((saved ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 654, __FUNCTION__, (TREE_LIST)))->list.value)), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 654, __FUNCTION__))); | ||||||
655 | |||||||
656 | *fname_vars[ix].decl = decl; | ||||||
657 | } | ||||||
658 | stack = TREE_CHAIN (stack)((contains_struct_check ((stack), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 658, __FUNCTION__))->common.chain); | ||||||
659 | } | ||||||
660 | saved_function_name_declsc_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS] = stack; | ||||||
661 | } | ||||||
662 | |||||||
663 | /* Return the text name of the current function, suitably prettified | ||||||
664 | by PRETTY_P. Return string must be freed by caller. */ | ||||||
665 | |||||||
666 | const char * | ||||||
667 | fname_as_string (int pretty_p) | ||||||
668 | { | ||||||
669 | const char *name = "top level"; | ||||||
670 | char *namep; | ||||||
671 | int vrb = 2, len; | ||||||
672 | cpp_string cstr = { 0, 0 }, strname; | ||||||
673 | |||||||
674 | if (!pretty_p) | ||||||
675 | { | ||||||
676 | name = ""; | ||||||
677 | vrb = 0; | ||||||
678 | } | ||||||
679 | |||||||
680 | if (current_function_decl) | ||||||
681 | name = lang_hooks.decl_printable_name (current_function_decl, vrb); | ||||||
682 | |||||||
683 | len = strlen (name) + 3; /* Two for '"'s. One for NULL. */ | ||||||
684 | |||||||
685 | namep = XNEWVEC (char, len)((char *) xmalloc (sizeof (char) * (len))); | ||||||
686 | snprintf (namep, len, "\"%s\"", name); | ||||||
687 | strname.text = (unsigned char *) namep; | ||||||
688 | strname.len = len - 1; | ||||||
689 | |||||||
690 | if (cpp_interpret_string (parse_in, &strname, 1, &cstr, CPP_STRING)) | ||||||
691 | { | ||||||
692 | XDELETEVEC (namep)free ((void*) (namep)); | ||||||
693 | return (const char *) cstr.text; | ||||||
694 | } | ||||||
695 | |||||||
696 | return namep; | ||||||
697 | } | ||||||
698 | |||||||
699 | /* Return the VAR_DECL for a const char array naming the current | ||||||
700 | function. If the VAR_DECL has not yet been created, create it | ||||||
701 | now. RID indicates how it should be formatted and IDENTIFIER_NODE | ||||||
702 | ID is its name (unfortunately C and C++ hold the RID values of | ||||||
703 | keywords in different places, so we can't derive RID from ID in | ||||||
704 | this language independent code. LOC is the location of the | ||||||
705 | function. */ | ||||||
706 | |||||||
707 | tree | ||||||
708 | fname_decl (location_t loc, unsigned int rid, tree id) | ||||||
709 | { | ||||||
710 | unsigned ix; | ||||||
711 | tree decl = NULL_TREE(tree) __null; | ||||||
712 | |||||||
713 | for (ix = 0; fname_vars[ix].decl; ix++) | ||||||
714 | if (fname_vars[ix].rid == rid) | ||||||
715 | break; | ||||||
716 | |||||||
717 | decl = *fname_vars[ix].decl; | ||||||
718 | if (!decl) | ||||||
719 | { | ||||||
720 | /* If a tree is built here, it would normally have the lineno of | ||||||
721 | the current statement. Later this tree will be moved to the | ||||||
722 | beginning of the function and this line number will be wrong. | ||||||
723 | To avoid this problem set the lineno to 0 here; that prevents | ||||||
724 | it from appearing in the RTL. */ | ||||||
725 | tree stmts; | ||||||
726 | location_t saved_location = input_location; | ||||||
727 | input_location = UNKNOWN_LOCATION((location_t) 0); | ||||||
728 | |||||||
729 | stmts = push_stmt_list (); | ||||||
730 | decl = (*make_fname_decl) (loc, id, fname_vars[ix].pretty); | ||||||
731 | stmts = pop_stmt_list (stmts); | ||||||
732 | if (!IS_EMPTY_STMT (stmts)(((enum tree_code) (stmts)->base.code) == NOP_EXPR && (((enum tree_code) (((contains_struct_check ((stmts), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 732, __FUNCTION__))->typed.type))->base.code) == VOID_TYPE ) && integer_zerop ((*((const_cast<tree*> (tree_operand_check ((stmts), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 732, __FUNCTION__)))))))) | ||||||
733 | saved_function_name_declsc_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS] | ||||||
734 | = tree_cons (decl, stmts, saved_function_name_declsc_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]); | ||||||
735 | *fname_vars[ix].decl = decl; | ||||||
736 | input_location = saved_location; | ||||||
737 | } | ||||||
738 | if (!ix && !current_function_decl) | ||||||
739 | pedwarn (loc, 0, "%qD is not defined outside of function scope", decl); | ||||||
740 | |||||||
741 | return decl; | ||||||
742 | } | ||||||
743 | |||||||
744 | /* Given a STRING_CST, give it a suitable array-of-chars data type. */ | ||||||
745 | |||||||
746 | tree | ||||||
747 | fix_string_type (tree value) | ||||||
748 | { | ||||||
749 | int length = TREE_STRING_LENGTH (value)((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 749, __FUNCTION__, (STRING_CST)))->string.length); | ||||||
750 | int nchars, charsz; | ||||||
751 | tree e_type, i_type, a_type; | ||||||
752 | |||||||
753 | /* Compute the number of elements, for the array type. */ | ||||||
754 | if (TREE_TYPE (value)((contains_struct_check ((value), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 754, __FUNCTION__))->typed.type) == char_array_type_nodec_global_trees[CTI_CHAR_ARRAY_TYPE] || !TREE_TYPE (value)((contains_struct_check ((value), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 754, __FUNCTION__))->typed.type)) | ||||||
755 | { | ||||||
756 | charsz = 1; | ||||||
757 | e_type = char_type_nodeinteger_types[itk_char]; | ||||||
758 | } | ||||||
759 | else if (flag_char8_tglobal_options.x_flag_char8_t && TREE_TYPE (value)((contains_struct_check ((value), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 759, __FUNCTION__))->typed.type) == char8_array_type_nodec_global_trees[CTI_CHAR8_ARRAY_TYPE]) | ||||||
760 | { | ||||||
761 | charsz = TYPE_PRECISION (char8_type_node)((tree_class_check ((c_global_trees[CTI_CHAR8_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 761, __FUNCTION__))->type_common.precision) / BITS_PER_UNIT(8); | ||||||
762 | e_type = char8_type_nodec_global_trees[CTI_CHAR8_TYPE]; | ||||||
763 | } | ||||||
764 | else if (TREE_TYPE (value)((contains_struct_check ((value), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 764, __FUNCTION__))->typed.type) == char16_array_type_nodec_global_trees[CTI_CHAR16_ARRAY_TYPE]) | ||||||
765 | { | ||||||
766 | charsz = TYPE_PRECISION (char16_type_node)((tree_class_check ((c_global_trees[CTI_CHAR16_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 766, __FUNCTION__))->type_common.precision) / BITS_PER_UNIT(8); | ||||||
767 | e_type = char16_type_nodec_global_trees[CTI_CHAR16_TYPE]; | ||||||
768 | } | ||||||
769 | else if (TREE_TYPE (value)((contains_struct_check ((value), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 769, __FUNCTION__))->typed.type) == char32_array_type_nodec_global_trees[CTI_CHAR32_ARRAY_TYPE]) | ||||||
770 | { | ||||||
771 | charsz = TYPE_PRECISION (char32_type_node)((tree_class_check ((c_global_trees[CTI_CHAR32_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 771, __FUNCTION__))->type_common.precision) / BITS_PER_UNIT(8); | ||||||
772 | e_type = char32_type_nodec_global_trees[CTI_CHAR32_TYPE]; | ||||||
773 | } | ||||||
774 | else | ||||||
775 | { | ||||||
776 | charsz = TYPE_PRECISION (wchar_type_node)((tree_class_check ((c_global_trees[CTI_WCHAR_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 776, __FUNCTION__))->type_common.precision) / BITS_PER_UNIT(8); | ||||||
777 | e_type = wchar_type_nodec_global_trees[CTI_WCHAR_TYPE]; | ||||||
778 | } | ||||||
779 | |||||||
780 | /* This matters only for targets where ssizetype has smaller precision | ||||||
781 | than 32 bits. */ | ||||||
782 | if (wi::lts_p (wi::to_wide (TYPE_MAX_VALUE (ssizetype)((tree_check5 ((sizetype_tab[(int) stk_ssizetype]), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 782, __FUNCTION__, (INTEGER_TYPE), (ENUMERAL_TYPE), (BOOLEAN_TYPE ), (REAL_TYPE), (FIXED_POINT_TYPE)))->type_non_common.maxval )), length)) | ||||||
783 | { | ||||||
784 | error ("size of string literal is too large"); | ||||||
785 | length = tree_to_shwi (TYPE_MAX_VALUE (ssizetype)((tree_check5 ((sizetype_tab[(int) stk_ssizetype]), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 785, __FUNCTION__, (INTEGER_TYPE), (ENUMERAL_TYPE), (BOOLEAN_TYPE ), (REAL_TYPE), (FIXED_POINT_TYPE)))->type_non_common.maxval )) / charsz * charsz; | ||||||
786 | char *str = CONST_CAST (char *, TREE_STRING_POINTER (value))(const_cast<char *> ((((const char *)((tree_check ((value ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 786, __FUNCTION__, (STRING_CST)))->string.str))))); | ||||||
787 | memset (str + length, '\0', | ||||||
788 | MIN (TREE_STRING_LENGTH (value) - length, charsz)((((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 788, __FUNCTION__, (STRING_CST)))->string.length) - length ) < (charsz) ? (((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 788, __FUNCTION__, (STRING_CST)))->string.length) - length ) : (charsz))); | ||||||
789 | TREE_STRING_LENGTH (value)((tree_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 789, __FUNCTION__, (STRING_CST)))->string.length) = length; | ||||||
790 | } | ||||||
791 | nchars = length / charsz; | ||||||
792 | |||||||
793 | /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous | ||||||
794 | limit in C++98 Annex B is very large (65536) and is not normative, | ||||||
795 | so we do not diagnose it (warn_overlength_strings is forced off | ||||||
796 | in c_common_post_options). */ | ||||||
797 | if (warn_overlength_stringsglobal_options.x_warn_overlength_strings) | ||||||
798 | { | ||||||
799 | const int nchars_max = flag_isoc99 ? 4095 : 509; | ||||||
800 | const int relevant_std = flag_isoc99 ? 99 : 90; | ||||||
801 | if (nchars - 1 > nchars_max) | ||||||
802 | /* Translators: The %d after 'ISO C' will be 90 or 99. Do not | ||||||
803 | separate the %d from the 'C'. 'ISO' should not be | ||||||
804 | translated, but it may be moved after 'C%d' in languages | ||||||
805 | where modifiers follow nouns. */ | ||||||
806 | pedwarn (input_location, OPT_Woverlength_strings, | ||||||
807 | "string length %qd is greater than the length %qd " | ||||||
808 | "ISO C%d compilers are required to support", | ||||||
809 | nchars - 1, nchars_max, relevant_std); | ||||||
810 | } | ||||||
811 | |||||||
812 | /* Create the array type for the string constant. The ISO C++ | ||||||
813 | standard says that a string literal has type `const char[N]' or | ||||||
814 | `const wchar_t[N]'. We use the same logic when invoked as a C | ||||||
815 | front-end with -Wwrite-strings. | ||||||
816 | ??? We should change the type of an expression depending on the | ||||||
817 | state of a warning flag. We should just be warning -- see how | ||||||
818 | this is handled in the C++ front-end for the deprecated implicit | ||||||
819 | conversion from string literals to `char*' or `wchar_t*'. | ||||||
820 | |||||||
821 | The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified | ||||||
822 | array type being the unqualified version of that type. | ||||||
823 | Therefore, if we are constructing an array of const char, we must | ||||||
824 | construct the matching unqualified array type first. The C front | ||||||
825 | end does not require this, but it does no harm, so we do it | ||||||
826 | unconditionally. */ | ||||||
827 | i_type = build_index_type (size_int (nchars - 1)size_int_kind (nchars - 1, stk_sizetype)); | ||||||
828 | a_type = build_array_type (e_type, i_type); | ||||||
829 | if (c_dialect_cxx()((c_language & clk_cxx) != 0) || warn_write_stringsglobal_options.x_warn_write_strings) | ||||||
830 | a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST); | ||||||
831 | |||||||
832 | TREE_TYPE (value)((contains_struct_check ((value), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 832, __FUNCTION__))->typed.type) = a_type; | ||||||
833 | TREE_CONSTANT (value)((non_type_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 833, __FUNCTION__))->base.constant_flag) = 1; | ||||||
834 | TREE_READONLY (value)((non_type_check ((value), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 834, __FUNCTION__))->base.readonly_flag) = 1; | ||||||
835 | TREE_STATIC (value)((value)->base.static_flag) = 1; | ||||||
836 | return value; | ||||||
837 | } | ||||||
838 | |||||||
839 | /* Given a string of type STRING_TYPE, determine what kind of string | ||||||
840 | token would give an equivalent execution encoding: CPP_STRING, | ||||||
841 | CPP_STRING16, or CPP_STRING32. Return CPP_OTHER in case of error. | ||||||
842 | This may not be exactly the string token type that initially created | ||||||
843 | the string, since CPP_WSTRING is indistinguishable from the 16/32 bit | ||||||
844 | string type, and CPP_UTF8STRING is indistinguishable from CPP_STRING | ||||||
845 | at this point. | ||||||
846 | |||||||
847 | This effectively reverses part of the logic in lex_string and | ||||||
848 | fix_string_type. */ | ||||||
849 | |||||||
850 | static enum cpp_ttype | ||||||
851 | get_cpp_ttype_from_string_type (tree string_type) | ||||||
852 | { | ||||||
853 | gcc_assert (string_type)((void)(!(string_type) ? fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 853, __FUNCTION__), 0 : 0)); | ||||||
854 | if (TREE_CODE (string_type)((enum tree_code) (string_type)->base.code) == POINTER_TYPE) | ||||||
855 | string_type = TREE_TYPE (string_type)((contains_struct_check ((string_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 855, __FUNCTION__))->typed.type); | ||||||
856 | |||||||
857 | if (TREE_CODE (string_type)((enum tree_code) (string_type)->base.code) != ARRAY_TYPE) | ||||||
858 | return CPP_OTHER; | ||||||
859 | |||||||
860 | tree element_type = TREE_TYPE (string_type)((contains_struct_check ((string_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 860, __FUNCTION__))->typed.type); | ||||||
861 | if (TREE_CODE (element_type)((enum tree_code) (element_type)->base.code) != INTEGER_TYPE) | ||||||
862 | return CPP_OTHER; | ||||||
863 | |||||||
864 | int bits_per_character = TYPE_PRECISION (element_type)((tree_class_check ((element_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 864, __FUNCTION__))->type_common.precision); | ||||||
865 | switch (bits_per_character) | ||||||
866 | { | ||||||
867 | case 8: | ||||||
868 | return CPP_STRING; /* It could have also been CPP_UTF8STRING. */ | ||||||
869 | case 16: | ||||||
870 | return CPP_STRING16; | ||||||
871 | case 32: | ||||||
872 | return CPP_STRING32; | ||||||
873 | } | ||||||
874 | |||||||
875 | return CPP_OTHER; | ||||||
876 | } | ||||||
877 | |||||||
878 | /* The global record of string concatentations, for use in | ||||||
879 | extracting locations within string literals. */ | ||||||
880 | |||||||
881 | GTY(()) string_concat_db *g_string_concat_db; | ||||||
882 | |||||||
883 | /* Implementation of LANG_HOOKS_GET_SUBSTRING_LOCATION. */ | ||||||
884 | |||||||
885 | const char * | ||||||
886 | c_get_substring_location (const substring_loc &substr_loc, | ||||||
887 | location_t *out_loc) | ||||||
888 | { | ||||||
889 | enum cpp_ttype tok_type | ||||||
890 | = get_cpp_ttype_from_string_type (substr_loc.get_string_type ()); | ||||||
891 | if (tok_type == CPP_OTHER) | ||||||
892 | return "unrecognized string type"; | ||||||
893 | |||||||
894 | return get_location_within_string (parse_in, g_string_concat_db, | ||||||
895 | substr_loc.get_fmt_string_loc (), | ||||||
896 | tok_type, | ||||||
897 | substr_loc.get_caret_idx (), | ||||||
898 | substr_loc.get_start_idx (), | ||||||
899 | substr_loc.get_end_idx (), | ||||||
900 | out_loc); | ||||||
901 | } | ||||||
902 | |||||||
903 | |||||||
904 | /* Return true iff T is a boolean promoted to int. */ | ||||||
905 | |||||||
906 | bool | ||||||
907 | bool_promoted_to_int_p (tree t) | ||||||
908 | { | ||||||
909 | return (CONVERT_EXPR_P (t)((((enum tree_code) (t)->base.code)) == NOP_EXPR || (((enum tree_code) (t)->base.code)) == CONVERT_EXPR) | ||||||
910 | && TREE_TYPE (t)((contains_struct_check ((t), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 910, __FUNCTION__))->typed.type) == integer_type_nodeinteger_types[itk_int] | ||||||
911 | && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0)))((enum tree_code) (((contains_struct_check (((*((const_cast< tree*> (tree_operand_check ((t), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 911, __FUNCTION__)))))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 911, __FUNCTION__))->typed.type))->base.code) == BOOLEAN_TYPE); | ||||||
912 | } | ||||||
913 | |||||||
914 | /* vector_targets_convertible_p is used for vector pointer types. The | ||||||
915 | callers perform various checks that the qualifiers are satisfactory, | ||||||
916 | while OTOH vector_targets_convertible_p ignores the number of elements | ||||||
917 | in the vectors. That's fine with vector pointers as we can consider, | ||||||
918 | say, a vector of 8 elements as two consecutive vectors of 4 elements, | ||||||
919 | and that does not require and conversion of the pointer values. | ||||||
920 | In contrast, vector_types_convertible_p and | ||||||
921 | vector_types_compatible_elements_p are used for vector value types. */ | ||||||
922 | /* True if pointers to distinct types T1 and T2 can be converted to | ||||||
923 | each other without an explicit cast. Only returns true for opaque | ||||||
924 | vector types. */ | ||||||
925 | bool | ||||||
926 | vector_targets_convertible_p (const_tree t1, const_tree t2) | ||||||
927 | { | ||||||
928 | if (VECTOR_TYPE_P (t1)(((enum tree_code) (t1)->base.code) == VECTOR_TYPE) && VECTOR_TYPE_P (t2)(((enum tree_code) (t2)->base.code) == VECTOR_TYPE) | ||||||
929 | && (TYPE_VECTOR_OPAQUE (t1)((tree_check ((t1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 929, __FUNCTION__, (VECTOR_TYPE)))->base.default_def_flag ) || TYPE_VECTOR_OPAQUE (t2)((tree_check ((t2), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 929, __FUNCTION__, (VECTOR_TYPE)))->base.default_def_flag )) | ||||||
930 | && tree_int_cst_equal (TYPE_SIZE (t1)((tree_class_check ((t1), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 930, __FUNCTION__))->type_common.size), TYPE_SIZE (t2)((tree_class_check ((t2), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 930, __FUNCTION__))->type_common.size))) | ||||||
931 | return true; | ||||||
932 | |||||||
933 | return false; | ||||||
934 | } | ||||||
935 | |||||||
936 | /* vector_types_convertible_p is used for vector value types. | ||||||
937 | It could in principle call vector_targets_convertible_p as a subroutine, | ||||||
938 | but then the check for vector type would be duplicated with its callers, | ||||||
939 | and also the purpose of vector_targets_convertible_p would become | ||||||
940 | muddled. | ||||||
941 | Where vector_types_convertible_p returns true, a conversion might still be | ||||||
942 | needed to make the types match. | ||||||
943 | In contrast, vector_targets_convertible_p is used for vector pointer | ||||||
944 | values, and vector_types_compatible_elements_p is used specifically | ||||||
945 | in the context for binary operators, as a check if use is possible without | ||||||
946 | conversion. */ | ||||||
947 | /* True if vector types T1 and T2 can be converted to each other | ||||||
948 | without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2 | ||||||
949 | can only be converted with -flax-vector-conversions yet that is not | ||||||
950 | in effect, emit a note telling the user about that option if such | ||||||
951 | a note has not previously been emitted. */ | ||||||
952 | bool | ||||||
953 | vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note) | ||||||
954 | { | ||||||
955 | static bool emitted_lax_note = false; | ||||||
956 | bool convertible_lax; | ||||||
957 | |||||||
958 | if ((TYPE_VECTOR_OPAQUE (t1)((tree_check ((t1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 958, __FUNCTION__, (VECTOR_TYPE)))->base.default_def_flag ) || TYPE_VECTOR_OPAQUE (t2)((tree_check ((t2), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 958, __FUNCTION__, (VECTOR_TYPE)))->base.default_def_flag )) | ||||||
959 | && tree_int_cst_equal (TYPE_SIZE (t1)((tree_class_check ((t1), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 959, __FUNCTION__))->type_common.size), TYPE_SIZE (t2)((tree_class_check ((t2), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 959, __FUNCTION__))->type_common.size))) | ||||||
960 | return true; | ||||||
961 | |||||||
962 | convertible_lax = | ||||||
963 | (tree_int_cst_equal (TYPE_SIZE (t1)((tree_class_check ((t1), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 963, __FUNCTION__))->type_common.size), TYPE_SIZE (t2)((tree_class_check ((t2), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 963, __FUNCTION__))->type_common.size)) | ||||||
964 | && (TREE_CODE (TREE_TYPE (t1))((enum tree_code) (((contains_struct_check ((t1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 964, __FUNCTION__))->typed.type))->base.code) != REAL_TYPE | ||||||
965 | || known_eq (TYPE_VECTOR_SUBPARTS (t1),(!maybe_ne (TYPE_VECTOR_SUBPARTS (t1), TYPE_VECTOR_SUBPARTS ( t2))) | ||||||
966 | TYPE_VECTOR_SUBPARTS (t2))(!maybe_ne (TYPE_VECTOR_SUBPARTS (t1), TYPE_VECTOR_SUBPARTS ( t2)))) | ||||||
967 | && (INTEGRAL_TYPE_P (TREE_TYPE (t1))(((enum tree_code) (((contains_struct_check ((t1), (TS_TYPED) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 967, __FUNCTION__))->typed.type))->base.code) == ENUMERAL_TYPE || ((enum tree_code) (((contains_struct_check ((t1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 967, __FUNCTION__))->typed.type))->base.code) == BOOLEAN_TYPE || ((enum tree_code) (((contains_struct_check ((t1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 967, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE ) | ||||||
968 | == INTEGRAL_TYPE_P (TREE_TYPE (t2))(((enum tree_code) (((contains_struct_check ((t2), (TS_TYPED) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 968, __FUNCTION__))->typed.type))->base.code) == ENUMERAL_TYPE || ((enum tree_code) (((contains_struct_check ((t2), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 968, __FUNCTION__))->typed.type))->base.code) == BOOLEAN_TYPE || ((enum tree_code) (((contains_struct_check ((t2), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 968, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE ))); | ||||||
969 | |||||||
970 | if (!convertible_lax || flag_lax_vector_conversionsglobal_options.x_flag_lax_vector_conversions) | ||||||
971 | return convertible_lax; | ||||||
972 | |||||||
973 | if (known_eq (TYPE_VECTOR_SUBPARTS (t1), TYPE_VECTOR_SUBPARTS (t2))(!maybe_ne (TYPE_VECTOR_SUBPARTS (t1), TYPE_VECTOR_SUBPARTS ( t2))) | ||||||
974 | && lang_hooks.types_compatible_p (TREE_TYPE (t1)((contains_struct_check ((t1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 974, __FUNCTION__))->typed.type), TREE_TYPE (t2)((contains_struct_check ((t2), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 974, __FUNCTION__))->typed.type))) | ||||||
975 | return true; | ||||||
976 | |||||||
977 | if (emit_lax_note && !emitted_lax_note) | ||||||
978 | { | ||||||
979 | emitted_lax_note = true; | ||||||
980 | inform (input_location, "use %<-flax-vector-conversions%> to permit " | ||||||
981 | "conversions between vectors with differing " | ||||||
982 | "element types or numbers of subparts"); | ||||||
983 | } | ||||||
984 | |||||||
985 | return false; | ||||||
986 | } | ||||||
987 | |||||||
988 | /* Build a VEC_PERM_EXPR if V0, V1 and MASK are not error_mark_nodes | ||||||
989 | and have vector types, V0 has the same type as V1, and the number of | ||||||
990 | elements of V0, V1, MASK is the same. | ||||||
991 | |||||||
992 | In case V1 is a NULL_TREE it is assumed that __builtin_shuffle was | ||||||
993 | called with two arguments. In this case implementation passes the | ||||||
994 | first argument twice in order to share the same tree code. This fact | ||||||
995 | could enable the mask-values being twice the vector length. This is | ||||||
996 | an implementation accident and this semantics is not guaranteed to | ||||||
997 | the user. */ | ||||||
998 | tree | ||||||
999 | c_build_vec_perm_expr (location_t loc, tree v0, tree v1, tree mask, | ||||||
1000 | bool complain) | ||||||
1001 | { | ||||||
1002 | tree ret; | ||||||
1003 | bool wrap = true; | ||||||
1004 | bool maybe_const = false; | ||||||
1005 | bool two_arguments = false; | ||||||
1006 | |||||||
1007 | if (v1 == NULL_TREE(tree) __null) | ||||||
1008 | { | ||||||
1009 | two_arguments = true; | ||||||
1010 | v1 = v0; | ||||||
1011 | } | ||||||
1012 | |||||||
1013 | if (v0 == error_mark_nodeglobal_trees[TI_ERROR_MARK] || v1 == error_mark_nodeglobal_trees[TI_ERROR_MARK] | ||||||
1014 | || mask == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
1015 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1016 | |||||||
1017 | if (!gnu_vector_type_p (TREE_TYPE (mask)((contains_struct_check ((mask), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1017, __FUNCTION__))->typed.type)) | ||||||
1018 | || !VECTOR_INTEGER_TYPE_P (TREE_TYPE (mask))((((enum tree_code) (((contains_struct_check ((mask), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1018, __FUNCTION__))->typed.type))->base.code) == VECTOR_TYPE ) && ((enum tree_code) (((contains_struct_check ((((contains_struct_check ((mask), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1018, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1018, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE )) | ||||||
1019 | { | ||||||
1020 | if (complain) | ||||||
1021 | error_at (loc, "%<__builtin_shuffle%> last argument must " | ||||||
1022 | "be an integer vector"); | ||||||
1023 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1024 | } | ||||||
1025 | |||||||
1026 | if (!gnu_vector_type_p (TREE_TYPE (v0)((contains_struct_check ((v0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1026, __FUNCTION__))->typed.type)) | ||||||
1027 | || !gnu_vector_type_p (TREE_TYPE (v1)((contains_struct_check ((v1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1027, __FUNCTION__))->typed.type))) | ||||||
1028 | { | ||||||
1029 | if (complain) | ||||||
1030 | error_at (loc, "%<__builtin_shuffle%> arguments must be vectors"); | ||||||
1031 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1032 | } | ||||||
1033 | |||||||
1034 | if (TYPE_MAIN_VARIANT (TREE_TYPE (v0))((tree_class_check ((((contains_struct_check ((v0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1034, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1034, __FUNCTION__))->type_common.main_variant) != TYPE_MAIN_VARIANT (TREE_TYPE (v1))((tree_class_check ((((contains_struct_check ((v1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1034, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1034, __FUNCTION__))->type_common.main_variant)) | ||||||
1035 | { | ||||||
1036 | if (complain) | ||||||
1037 | error_at (loc, "%<__builtin_shuffle%> argument vectors must be of " | ||||||
1038 | "the same type"); | ||||||
1039 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1040 | } | ||||||
1041 | |||||||
1042 | if (maybe_ne (TYPE_VECTOR_SUBPARTS (TREE_TYPE (v0)((contains_struct_check ((v0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1042, __FUNCTION__))->typed.type)), | ||||||
1043 | TYPE_VECTOR_SUBPARTS (TREE_TYPE (mask)((contains_struct_check ((mask), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1043, __FUNCTION__))->typed.type))) | ||||||
1044 | && maybe_ne (TYPE_VECTOR_SUBPARTS (TREE_TYPE (v1)((contains_struct_check ((v1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1044, __FUNCTION__))->typed.type)), | ||||||
1045 | TYPE_VECTOR_SUBPARTS (TREE_TYPE (mask)((contains_struct_check ((mask), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1045, __FUNCTION__))->typed.type)))) | ||||||
1046 | { | ||||||
1047 | if (complain) | ||||||
1048 | error_at (loc, "%<__builtin_shuffle%> number of elements of the " | ||||||
1049 | "argument vector(s) and the mask vector should " | ||||||
1050 | "be the same"); | ||||||
1051 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1052 | } | ||||||
1053 | |||||||
1054 | if (GET_MODE_BITSIZE (SCALAR_TYPE_MODE (TREE_TYPE (TREE_TYPE (v0)))(as_a <scalar_mode> ((tree_class_check ((((contains_struct_check ((((contains_struct_check ((v0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1054, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1054, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1054, __FUNCTION__))->type_common.mode))) | ||||||
1055 | != GET_MODE_BITSIZE (SCALAR_TYPE_MODE (TREE_TYPE (TREE_TYPE (mask)))(as_a <scalar_mode> ((tree_class_check ((((contains_struct_check ((((contains_struct_check ((mask), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1055, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1055, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1055, __FUNCTION__))->type_common.mode)))) | ||||||
1056 | { | ||||||
1057 | if (complain) | ||||||
1058 | error_at (loc, "%<__builtin_shuffle%> argument vector(s) inner type " | ||||||
1059 | "must have the same size as inner type of the mask"); | ||||||
1060 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1061 | } | ||||||
1062 | |||||||
1063 | if (!c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
1064 | { | ||||||
1065 | /* Avoid C_MAYBE_CONST_EXPRs inside VEC_PERM_EXPR. */ | ||||||
1066 | v0 = c_fully_fold (v0, false, &maybe_const); | ||||||
1067 | wrap &= maybe_const; | ||||||
1068 | |||||||
1069 | if (two_arguments) | ||||||
1070 | v1 = v0 = save_expr (v0); | ||||||
1071 | else | ||||||
1072 | { | ||||||
1073 | v1 = c_fully_fold (v1, false, &maybe_const); | ||||||
1074 | wrap &= maybe_const; | ||||||
1075 | } | ||||||
1076 | |||||||
1077 | mask = c_fully_fold (mask, false, &maybe_const); | ||||||
1078 | wrap &= maybe_const; | ||||||
1079 | } | ||||||
1080 | else if (two_arguments) | ||||||
1081 | v1 = v0 = save_expr (v0); | ||||||
1082 | |||||||
1083 | ret = build3_loc (loc, VEC_PERM_EXPR, TREE_TYPE (v0)((contains_struct_check ((v0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1083, __FUNCTION__))->typed.type), v0, v1, mask); | ||||||
1084 | |||||||
1085 | if (!c_dialect_cxx ()((c_language & clk_cxx) != 0) && !wrap) | ||||||
1086 | ret = c_wrap_maybe_const (ret, true); | ||||||
1087 | |||||||
1088 | return ret; | ||||||
1089 | } | ||||||
1090 | |||||||
1091 | /* Build a VEC_PERM_EXPR if V0, V1 are not error_mark_nodes | ||||||
1092 | and have vector types, V0 has the same element type as V1, and the | ||||||
1093 | number of elements the result is that of MASK. */ | ||||||
1094 | tree | ||||||
1095 | c_build_shufflevector (location_t loc, tree v0, tree v1, | ||||||
1096 | const vec<tree> &mask, bool complain) | ||||||
1097 | { | ||||||
1098 | tree ret; | ||||||
1099 | bool wrap = true; | ||||||
1100 | bool maybe_const = false; | ||||||
1101 | |||||||
1102 | if (v0 == error_mark_nodeglobal_trees[TI_ERROR_MARK] || v1 == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
| |||||||
1103 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1104 | |||||||
1105 | if (!gnu_vector_type_p (TREE_TYPE (v0)((contains_struct_check ((v0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1105, __FUNCTION__))->typed.type)) | ||||||
1106 | || !gnu_vector_type_p (TREE_TYPE (v1)((contains_struct_check ((v1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1106, __FUNCTION__))->typed.type))) | ||||||
1107 | { | ||||||
1108 | if (complain) | ||||||
1109 | error_at (loc, "%<__builtin_shufflevector%> arguments must be vectors"); | ||||||
1110 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1111 | } | ||||||
1112 | |||||||
1113 | /* ??? In principle one could select a constant part of a variable size | ||||||
1114 | vector but things get a bit awkward with trying to support this here. */ | ||||||
1115 | unsigned HOST_WIDE_INTlong v0n, v1n; | ||||||
1116 | if (!TYPE_VECTOR_SUBPARTS (TREE_TYPE (v0)((contains_struct_check ((v0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1116, __FUNCTION__))->typed.type)).is_constant (&v0n) | ||||||
1117 | || !TYPE_VECTOR_SUBPARTS (TREE_TYPE (v1)((contains_struct_check ((v1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1117, __FUNCTION__))->typed.type)).is_constant (&v1n)) | ||||||
1118 | { | ||||||
1119 | if (complain) | ||||||
1120 | error_at (loc, "%<__builtin_shufflevector%> arguments must be constant" | ||||||
1121 | " size vectors"); | ||||||
1122 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1123 | } | ||||||
1124 | |||||||
1125 | if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (v0)))((tree_class_check ((((contains_struct_check ((((contains_struct_check ((v0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1125, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1125, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1125, __FUNCTION__))->type_common.main_variant) | ||||||
1126 | != TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (v1)))((tree_class_check ((((contains_struct_check ((((contains_struct_check ((v1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1126, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1126, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1126, __FUNCTION__))->type_common.main_variant)) | ||||||
1127 | { | ||||||
1128 | if (complain) | ||||||
1129 | error_at (loc, "%<__builtin_shufflevector%> argument vectors must " | ||||||
1130 | "have the same element type"); | ||||||
1131 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1132 | } | ||||||
1133 | |||||||
1134 | if (!pow2p_hwi (mask.length ())) | ||||||
1135 | { | ||||||
1136 | if (complain) | ||||||
1137 | error_at (loc, "%<__builtin_shufflevector%> must specify a result " | ||||||
1138 | "with a power of two number of elements"); | ||||||
1139 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1140 | } | ||||||
1141 | |||||||
1142 | if (!c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
1143 | { | ||||||
1144 | /* Avoid C_MAYBE_CONST_EXPRs inside VEC_PERM_EXPR. */ | ||||||
1145 | v0 = c_fully_fold (v0, false, &maybe_const); | ||||||
1146 | wrap &= maybe_const; | ||||||
1147 | |||||||
1148 | v1 = c_fully_fold (v1, false, &maybe_const); | ||||||
1149 | wrap &= maybe_const; | ||||||
1150 | } | ||||||
1151 | |||||||
1152 | unsigned HOST_WIDE_INTlong maskl = MAX (mask.length (), MAX (v0n, v1n))((mask.length ()) > (((v0n) > (v1n) ? (v0n) : (v1n))) ? (mask.length ()) : (((v0n) > (v1n) ? (v0n) : (v1n)))); | ||||||
1153 | unsigned HOST_WIDE_INTlong pad = (v0n < maskl ? maskl - v0n : 0); | ||||||
1154 | vec_perm_builder sel (maskl, maskl, 1); | ||||||
1155 | unsigned i; | ||||||
1156 | for (i = 0; i < mask.length (); ++i) | ||||||
1157 | { | ||||||
1158 | tree idx = mask[i]; | ||||||
1159 | if (!tree_fits_shwi_p (idx)) | ||||||
1160 | { | ||||||
1161 | if (complain) | ||||||
1162 | error_at (loc, "invalid element index %qE to " | ||||||
1163 | "%<__builtin_shufflevector%>", idx); | ||||||
1164 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1165 | } | ||||||
1166 | HOST_WIDE_INTlong iidx = tree_to_shwi (idx); | ||||||
1167 | if (iidx < -1 | ||||||
1168 | || (iidx != -1 | ||||||
1169 | && (unsigned HOST_WIDE_INTlong) iidx >= v0n + v1n)) | ||||||
1170 | { | ||||||
1171 | if (complain) | ||||||
1172 | error_at (loc, "invalid element index %qE to " | ||||||
1173 | "%<__builtin_shufflevector%>", idx); | ||||||
1174 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1175 | } | ||||||
1176 | /* ??? Our VEC_PERM_EXPR does not allow for -1 yet. */ | ||||||
1177 | if (iidx == -1) | ||||||
1178 | iidx = i; | ||||||
1179 | /* ??? Our VEC_PERM_EXPR does not allow different sized inputs, | ||||||
1180 | so pad out a smaller v0. */ | ||||||
1181 | else if ((unsigned HOST_WIDE_INTlong) iidx >= v0n) | ||||||
1182 | iidx += pad; | ||||||
1183 | sel.quick_push (iidx); | ||||||
1184 | } | ||||||
1185 | /* ??? VEC_PERM_EXPR does not support a result that is smaller than | ||||||
1186 | the inputs, so we have to pad id out. */ | ||||||
1187 | for (; i < maskl; ++i) | ||||||
1188 | sel.quick_push (i); | ||||||
1189 | |||||||
1190 | vec_perm_indices indices (sel, 2, maskl); | ||||||
1191 | |||||||
1192 | tree ret_type = build_vector_type (TREE_TYPE (TREE_TYPE (v0))((contains_struct_check ((((contains_struct_check ((v0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1192, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1192, __FUNCTION__))->typed.type), maskl); | ||||||
1193 | tree mask_type = build_vector_type (build_nonstandard_integer_type | ||||||
1194 | (TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (ret_type)))((unsigned long) (*tree_int_cst_elt_check ((((tree_class_check ((((contains_struct_check ((ret_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1194, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1194, __FUNCTION__))->type_common.size)), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1194, __FUNCTION__))), 1), | ||||||
1195 | maskl); | ||||||
1196 | /* Pad out arguments to the common vector size. */ | ||||||
1197 | if (v0n
| ||||||
1198 | { | ||||||
1199 | constructor_elt elt = { NULL_TREE(tree) __null, build_zero_cst (TREE_TYPE (v0)((contains_struct_check ((v0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1199, __FUNCTION__))->typed.type)) }; | ||||||
1200 | v0 = build_constructor_single (ret_type, NULL_TREE(tree) __null, v0); | ||||||
1201 | for (i = 1; i < maskl / v0n; ++i) | ||||||
| |||||||
1202 | vec_safe_push (CONSTRUCTOR_ELTS (v0)((tree_check ((v0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1202, __FUNCTION__, (CONSTRUCTOR)))->constructor.elts), elt); | ||||||
1203 | } | ||||||
1204 | if (v1n < maskl) | ||||||
1205 | { | ||||||
1206 | constructor_elt elt = { NULL_TREE(tree) __null, build_zero_cst (TREE_TYPE (v1)((contains_struct_check ((v1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1206, __FUNCTION__))->typed.type)) }; | ||||||
1207 | v1 = build_constructor_single (ret_type, NULL_TREE(tree) __null, v1); | ||||||
1208 | for (i = 1; i < maskl / v1n; ++i) | ||||||
1209 | vec_safe_push (CONSTRUCTOR_ELTS (v1)((tree_check ((v1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1209, __FUNCTION__, (CONSTRUCTOR)))->constructor.elts), elt); | ||||||
1210 | } | ||||||
1211 | ret = build3_loc (loc, VEC_PERM_EXPR, ret_type, v0, v1, | ||||||
1212 | vec_perm_indices_to_tree (mask_type, indices)); | ||||||
1213 | /* Get the lowpart we are interested in. */ | ||||||
1214 | if (mask.length () < maskl) | ||||||
1215 | { | ||||||
1216 | tree lpartt = build_vector_type (TREE_TYPE (ret_type)((contains_struct_check ((ret_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1216, __FUNCTION__))->typed.type), mask.length ()); | ||||||
1217 | ret = build3_loc (loc, BIT_FIELD_REF, | ||||||
1218 | lpartt, ret, TYPE_SIZE (lpartt)((tree_class_check ((lpartt), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1218, __FUNCTION__))->type_common.size), bitsize_zero_nodeglobal_trees[TI_BITSIZE_ZERO]); | ||||||
1219 | /* Wrap the lowpart operation in a TARGET_EXPR so it gets a separate | ||||||
1220 | temporary during gimplification. See PR101530 for cases where | ||||||
1221 | we'd otherwise end up with non-toplevel BIT_FIELD_REFs. */ | ||||||
1222 | tree tem = create_tmp_var_raw (lpartt); | ||||||
1223 | DECL_CONTEXT (tem)((contains_struct_check ((tem), (TS_DECL_MINIMAL), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1223, __FUNCTION__))->decl_minimal.context) = current_function_decl; | ||||||
1224 | ret = build4 (TARGET_EXPR, lpartt, tem, ret, NULL_TREE(tree) __null, NULL_TREE(tree) __null); | ||||||
1225 | TREE_SIDE_EFFECTS (ret)((non_type_check ((ret), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1225, __FUNCTION__))->base.side_effects_flag) = 1; | ||||||
1226 | } | ||||||
1227 | |||||||
1228 | if (!c_dialect_cxx ()((c_language & clk_cxx) != 0) && !wrap) | ||||||
1229 | ret = c_wrap_maybe_const (ret, true); | ||||||
1230 | |||||||
1231 | return ret; | ||||||
1232 | } | ||||||
1233 | |||||||
1234 | /* Build a VEC_CONVERT ifn for __builtin_convertvector builtin. */ | ||||||
1235 | |||||||
1236 | tree | ||||||
1237 | c_build_vec_convert (location_t loc1, tree expr, location_t loc2, tree type, | ||||||
1238 | bool complain) | ||||||
1239 | { | ||||||
1240 | if (error_operand_p (type)) | ||||||
1241 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1242 | if (error_operand_p (expr)) | ||||||
1243 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1244 | |||||||
1245 | if (!gnu_vector_type_p (TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1245, __FUNCTION__))->typed.type)) | ||||||
1246 | || (!VECTOR_INTEGER_TYPE_P (TREE_TYPE (expr))((((enum tree_code) (((contains_struct_check ((expr), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1246, __FUNCTION__))->typed.type))->base.code) == VECTOR_TYPE ) && ((enum tree_code) (((contains_struct_check ((((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1246, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1246, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE ) | ||||||
1247 | && !VECTOR_FLOAT_TYPE_P (TREE_TYPE (expr))((((enum tree_code) (((contains_struct_check ((expr), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1247, __FUNCTION__))->typed.type))->base.code) == VECTOR_TYPE ) && ((enum tree_code) (((contains_struct_check ((((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1247, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1247, __FUNCTION__))->typed.type))->base.code) == REAL_TYPE ))) | ||||||
1248 | { | ||||||
1249 | if (complain) | ||||||
1250 | error_at (loc1, "%<__builtin_convertvector%> first argument must " | ||||||
1251 | "be an integer or floating vector"); | ||||||
1252 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1253 | } | ||||||
1254 | |||||||
1255 | if (!gnu_vector_type_p (type) | ||||||
1256 | || (!VECTOR_INTEGER_TYPE_P (type)((((enum tree_code) (type)->base.code) == VECTOR_TYPE) && ((enum tree_code) (((contains_struct_check ((type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1256, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE ) && !VECTOR_FLOAT_TYPE_P (type)((((enum tree_code) (type)->base.code) == VECTOR_TYPE) && ((enum tree_code) (((contains_struct_check ((type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1256, __FUNCTION__))->typed.type))->base.code) == REAL_TYPE ))) | ||||||
1257 | { | ||||||
1258 | if (complain) | ||||||
1259 | error_at (loc2, "%<__builtin_convertvector%> second argument must " | ||||||
1260 | "be an integer or floating vector type"); | ||||||
1261 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1262 | } | ||||||
1263 | |||||||
1264 | if (maybe_ne (TYPE_VECTOR_SUBPARTS (TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1264, __FUNCTION__))->typed.type)), | ||||||
1265 | TYPE_VECTOR_SUBPARTS (type))) | ||||||
1266 | { | ||||||
1267 | if (complain) | ||||||
1268 | error_at (loc1, "%<__builtin_convertvector%> number of elements " | ||||||
1269 | "of the first argument vector and the second argument " | ||||||
1270 | "vector type should be the same"); | ||||||
1271 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
1272 | } | ||||||
1273 | |||||||
1274 | if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (expr)))((tree_class_check ((((contains_struct_check ((((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1274, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1274, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1274, __FUNCTION__))->type_common.main_variant) | ||||||
1275 | == TYPE_MAIN_VARIANT (TREE_TYPE (type))((tree_class_check ((((contains_struct_check ((type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1275, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1275, __FUNCTION__))->type_common.main_variant)) | ||||||
1276 | || (VECTOR_INTEGER_TYPE_P (TREE_TYPE (expr))((((enum tree_code) (((contains_struct_check ((expr), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1276, __FUNCTION__))->typed.type))->base.code) == VECTOR_TYPE ) && ((enum tree_code) (((contains_struct_check ((((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1276, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1276, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE ) | ||||||
1277 | && VECTOR_INTEGER_TYPE_P (type)((((enum tree_code) (type)->base.code) == VECTOR_TYPE) && ((enum tree_code) (((contains_struct_check ((type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1277, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE ) | ||||||
1278 | && (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (expr)))((tree_class_check ((((contains_struct_check ((((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1278, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1278, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1278, __FUNCTION__))->type_common.precision) | ||||||
1279 | == TYPE_PRECISION (TREE_TYPE (type))((tree_class_check ((((contains_struct_check ((type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1279, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1279, __FUNCTION__))->type_common.precision)))) | ||||||
1280 | return build1_loc (loc1, VIEW_CONVERT_EXPR, type, expr); | ||||||
1281 | |||||||
1282 | bool wrap = true; | ||||||
1283 | bool maybe_const = false; | ||||||
1284 | tree ret; | ||||||
1285 | if (!c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
1286 | { | ||||||
1287 | /* Avoid C_MAYBE_CONST_EXPRs inside of VEC_CONVERT argument. */ | ||||||
1288 | expr = c_fully_fold (expr, false, &maybe_const); | ||||||
1289 | wrap &= maybe_const; | ||||||
1290 | } | ||||||
1291 | |||||||
1292 | ret = build_call_expr_internal_loc (loc1, IFN_VEC_CONVERT, type, 1, expr); | ||||||
1293 | |||||||
1294 | if (!wrap) | ||||||
1295 | ret = c_wrap_maybe_const (ret, true); | ||||||
1296 | |||||||
1297 | return ret; | ||||||
1298 | } | ||||||
1299 | |||||||
1300 | /* Like tree.cc:get_narrower, but retain conversion from C++0x scoped enum | ||||||
1301 | to integral type. */ | ||||||
1302 | |||||||
1303 | tree | ||||||
1304 | c_common_get_narrower (tree op, int *unsignedp_ptr) | ||||||
1305 | { | ||||||
1306 | op = get_narrower (op, unsignedp_ptr); | ||||||
1307 | |||||||
1308 | if (TREE_CODE (TREE_TYPE (op))((enum tree_code) (((contains_struct_check ((op), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1308, __FUNCTION__))->typed.type))->base.code) == ENUMERAL_TYPE | ||||||
1309 | && ENUM_IS_SCOPED (TREE_TYPE (op))((tree_check ((((contains_struct_check ((op), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1309, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1309, __FUNCTION__, (ENUMERAL_TYPE)))->base.static_flag)) | ||||||
1310 | { | ||||||
1311 | /* C++0x scoped enumerations don't implicitly convert to integral | ||||||
1312 | type; if we stripped an explicit conversion to a larger type we | ||||||
1313 | need to replace it so common_type will still work. */ | ||||||
1314 | tree type = c_common_type_for_size (TYPE_PRECISION (TREE_TYPE (op))((tree_class_check ((((contains_struct_check ((op), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1314, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1314, __FUNCTION__))->type_common.precision), | ||||||
1315 | TYPE_UNSIGNED (TREE_TYPE (op))((tree_class_check ((((contains_struct_check ((op), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1315, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1315, __FUNCTION__))->base.u.bits.unsigned_flag)); | ||||||
1316 | op = fold_convert (type, op)fold_convert_loc (((location_t) 0), type, op); | ||||||
1317 | } | ||||||
1318 | return op; | ||||||
1319 | } | ||||||
1320 | |||||||
1321 | /* This is a helper function of build_binary_op. | ||||||
1322 | |||||||
1323 | For certain operations if both args were extended from the same | ||||||
1324 | smaller type, do the arithmetic in that type and then extend. | ||||||
1325 | |||||||
1326 | BITWISE indicates a bitwise operation. | ||||||
1327 | For them, this optimization is safe only if | ||||||
1328 | both args are zero-extended or both are sign-extended. | ||||||
1329 | Otherwise, we might change the result. | ||||||
1330 | Eg, (short)-1 | (unsigned short)-1 is (int)-1 | ||||||
1331 | but calculated in (unsigned short) it would be (unsigned short)-1. | ||||||
1332 | */ | ||||||
1333 | tree | ||||||
1334 | shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise) | ||||||
1335 | { | ||||||
1336 | int unsigned0, unsigned1; | ||||||
1337 | tree arg0, arg1; | ||||||
1338 | int uns; | ||||||
1339 | tree type; | ||||||
1340 | |||||||
1341 | /* Cast OP0 and OP1 to RESULT_TYPE. Doing so prevents | ||||||
1342 | excessive narrowing when we call get_narrower below. For | ||||||
1343 | example, suppose that OP0 is of unsigned int extended | ||||||
1344 | from signed char and that RESULT_TYPE is long long int. | ||||||
1345 | If we explicitly cast OP0 to RESULT_TYPE, OP0 would look | ||||||
1346 | like | ||||||
1347 | |||||||
1348 | (long long int) (unsigned int) signed_char | ||||||
1349 | |||||||
1350 | which get_narrower would narrow down to | ||||||
1351 | |||||||
1352 | (unsigned int) signed char | ||||||
1353 | |||||||
1354 | If we do not cast OP0 first, get_narrower would return | ||||||
1355 | signed_char, which is inconsistent with the case of the | ||||||
1356 | explicit cast. */ | ||||||
1357 | op0 = convert (result_type, op0); | ||||||
1358 | op1 = convert (result_type, op1); | ||||||
1359 | |||||||
1360 | arg0 = c_common_get_narrower (op0, &unsigned0); | ||||||
1361 | arg1 = c_common_get_narrower (op1, &unsigned1); | ||||||
1362 | |||||||
1363 | /* UNS is 1 if the operation to be done is an unsigned one. */ | ||||||
1364 | uns = TYPE_UNSIGNED (result_type)((tree_class_check ((result_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1364, __FUNCTION__))->base.u.bits.unsigned_flag); | ||||||
1365 | |||||||
1366 | /* Handle the case that OP0 (or OP1) does not *contain* a conversion | ||||||
1367 | but it *requires* conversion to FINAL_TYPE. */ | ||||||
1368 | |||||||
1369 | if ((TYPE_PRECISION (TREE_TYPE (op0))((tree_class_check ((((contains_struct_check ((op0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1369, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1369, __FUNCTION__))->type_common.precision) | ||||||
1370 | == TYPE_PRECISION (TREE_TYPE (arg0))((tree_class_check ((((contains_struct_check ((arg0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1370, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1370, __FUNCTION__))->type_common.precision)) | ||||||
1371 | && TREE_TYPE (op0)((contains_struct_check ((op0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1371, __FUNCTION__))->typed.type) != result_type) | ||||||
1372 | unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0))((tree_class_check ((((contains_struct_check ((op0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1372, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1372, __FUNCTION__))->base.u.bits.unsigned_flag); | ||||||
1373 | if ((TYPE_PRECISION (TREE_TYPE (op1))((tree_class_check ((((contains_struct_check ((op1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1373, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1373, __FUNCTION__))->type_common.precision) | ||||||
1374 | == TYPE_PRECISION (TREE_TYPE (arg1))((tree_class_check ((((contains_struct_check ((arg1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1374, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1374, __FUNCTION__))->type_common.precision)) | ||||||
1375 | && TREE_TYPE (op1)((contains_struct_check ((op1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1375, __FUNCTION__))->typed.type) != result_type) | ||||||
1376 | unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1))((tree_class_check ((((contains_struct_check ((op1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1376, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1376, __FUNCTION__))->base.u.bits.unsigned_flag); | ||||||
1377 | |||||||
1378 | /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */ | ||||||
1379 | |||||||
1380 | /* For bitwise operations, signedness of nominal type | ||||||
1381 | does not matter. Consider only how operands were extended. */ | ||||||
1382 | if (bitwise) | ||||||
1383 | uns = unsigned0; | ||||||
1384 | |||||||
1385 | /* Note that in all three cases below we refrain from optimizing | ||||||
1386 | an unsigned operation on sign-extended args. | ||||||
1387 | That would not be valid. */ | ||||||
1388 | |||||||
1389 | /* Both args variable: if both extended in same way | ||||||
1390 | from same width, do it in that width. | ||||||
1391 | Do it unsigned if args were zero-extended. */ | ||||||
1392 | if ((TYPE_PRECISION (TREE_TYPE (arg0))((tree_class_check ((((contains_struct_check ((arg0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1392, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1392, __FUNCTION__))->type_common.precision) | ||||||
1393 | < TYPE_PRECISION (result_type)((tree_class_check ((result_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1393, __FUNCTION__))->type_common.precision)) | ||||||
1394 | && (TYPE_PRECISION (TREE_TYPE (arg1))((tree_class_check ((((contains_struct_check ((arg1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1394, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1394, __FUNCTION__))->type_common.precision) | ||||||
1395 | == TYPE_PRECISION (TREE_TYPE (arg0))((tree_class_check ((((contains_struct_check ((arg0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1395, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1395, __FUNCTION__))->type_common.precision)) | ||||||
1396 | && unsigned0 == unsigned1 | ||||||
1397 | && (unsigned0 || !uns)) | ||||||
1398 | { | ||||||
1399 | tree ctype = common_type (TREE_TYPE (arg0)((contains_struct_check ((arg0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1399, __FUNCTION__))->typed.type), TREE_TYPE (arg1)((contains_struct_check ((arg1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1399, __FUNCTION__))->typed.type)); | ||||||
1400 | if (ctype != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
1401 | return c_common_signed_or_unsigned_type (unsigned0, ctype); | ||||||
1402 | } | ||||||
1403 | |||||||
1404 | else if (TREE_CODE (arg0)((enum tree_code) (arg0)->base.code) == INTEGER_CST | ||||||
1405 | && (unsigned1 || !uns) | ||||||
1406 | && (TYPE_PRECISION (TREE_TYPE (arg1))((tree_class_check ((((contains_struct_check ((arg1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1406, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1406, __FUNCTION__))->type_common.precision) | ||||||
1407 | < TYPE_PRECISION (result_type)((tree_class_check ((result_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1407, __FUNCTION__))->type_common.precision)) | ||||||
1408 | && (type | ||||||
1409 | = c_common_signed_or_unsigned_type (unsigned1, | ||||||
1410 | TREE_TYPE (arg1)((contains_struct_check ((arg1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1410, __FUNCTION__))->typed.type))) | ||||||
1411 | && !POINTER_TYPE_P (type)(((enum tree_code) (type)->base.code) == POINTER_TYPE || ( (enum tree_code) (type)->base.code) == REFERENCE_TYPE) | ||||||
1412 | && int_fits_type_p (arg0, type)) | ||||||
1413 | return type; | ||||||
1414 | |||||||
1415 | else if (TREE_CODE (arg1)((enum tree_code) (arg1)->base.code) == INTEGER_CST | ||||||
1416 | && (unsigned0 || !uns) | ||||||
1417 | && (TYPE_PRECISION (TREE_TYPE (arg0))((tree_class_check ((((contains_struct_check ((arg0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1417, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1417, __FUNCTION__))->type_common.precision) | ||||||
1418 | < TYPE_PRECISION (result_type)((tree_class_check ((result_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1418, __FUNCTION__))->type_common.precision)) | ||||||
1419 | && (type | ||||||
1420 | = c_common_signed_or_unsigned_type (unsigned0, | ||||||
1421 | TREE_TYPE (arg0)((contains_struct_check ((arg0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1421, __FUNCTION__))->typed.type))) | ||||||
1422 | && !POINTER_TYPE_P (type)(((enum tree_code) (type)->base.code) == POINTER_TYPE || ( (enum tree_code) (type)->base.code) == REFERENCE_TYPE) | ||||||
1423 | && int_fits_type_p (arg1, type)) | ||||||
1424 | return type; | ||||||
1425 | |||||||
1426 | return result_type; | ||||||
1427 | } | ||||||
1428 | |||||||
1429 | /* Returns true iff any integer value of type FROM_TYPE can be represented as | ||||||
1430 | real of type TO_TYPE. This is a helper function for unsafe_conversion_p. */ | ||||||
1431 | |||||||
1432 | static bool | ||||||
1433 | int_safely_convertible_to_real_p (const_tree from_type, const_tree to_type) | ||||||
1434 | { | ||||||
1435 | tree type_low_bound = TYPE_MIN_VALUE (from_type)((tree_check5 ((from_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1435, __FUNCTION__, (INTEGER_TYPE), (ENUMERAL_TYPE), (BOOLEAN_TYPE ), (REAL_TYPE), (FIXED_POINT_TYPE)))->type_non_common.minval ); | ||||||
1436 | tree type_high_bound = TYPE_MAX_VALUE (from_type)((tree_check5 ((from_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1436, __FUNCTION__, (INTEGER_TYPE), (ENUMERAL_TYPE), (BOOLEAN_TYPE ), (REAL_TYPE), (FIXED_POINT_TYPE)))->type_non_common.maxval ); | ||||||
1437 | REAL_VALUE_TYPEstruct real_value real_low_bound = | ||||||
1438 | real_value_from_int_cst (0, type_low_bound); | ||||||
1439 | REAL_VALUE_TYPEstruct real_value real_high_bound = | ||||||
1440 | real_value_from_int_cst (0, type_high_bound); | ||||||
1441 | |||||||
1442 | return exact_real_truncate (TYPE_MODE (to_type)((((enum tree_code) ((tree_class_check ((to_type), (tcc_type) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1442, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (to_type) : (to_type)->type_common.mode), &real_low_bound) | ||||||
1443 | && exact_real_truncate (TYPE_MODE (to_type)((((enum tree_code) ((tree_class_check ((to_type), (tcc_type) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1443, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (to_type) : (to_type)->type_common.mode), &real_high_bound); | ||||||
1444 | } | ||||||
1445 | |||||||
1446 | /* Checks if expression EXPR of complex/real/integer type cannot be converted | ||||||
1447 | to the complex/real/integer type TYPE. Function returns non-zero when: | ||||||
1448 | * EXPR is a constant which cannot be exactly converted to TYPE. | ||||||
1449 | * EXPR is not a constant and size of EXPR's type > than size of TYPE, | ||||||
1450 | for EXPR type and TYPE being both integers or both real, or both | ||||||
1451 | complex. | ||||||
1452 | * EXPR is not a constant of complex type and TYPE is a real or | ||||||
1453 | an integer. | ||||||
1454 | * EXPR is not a constant of real type and TYPE is an integer. | ||||||
1455 | * EXPR is not a constant of integer type which cannot be | ||||||
1456 | exactly converted to real type. | ||||||
1457 | |||||||
1458 | Function allows conversions between types of different signedness if | ||||||
1459 | CHECK_SIGN is false and can return SAFE_CONVERSION (zero) in that | ||||||
1460 | case. Function can return UNSAFE_SIGN if CHECK_SIGN is true. | ||||||
1461 | |||||||
1462 | RESULT, when non-null is the result of the conversion. When constant | ||||||
1463 | it is included in the text of diagnostics. | ||||||
1464 | |||||||
1465 | Function allows conversions from complex constants to non-complex types, | ||||||
1466 | provided that imaginary part is zero and real part can be safely converted | ||||||
1467 | to TYPE. */ | ||||||
1468 | |||||||
1469 | enum conversion_safety | ||||||
1470 | unsafe_conversion_p (tree type, tree expr, tree result, bool check_sign) | ||||||
1471 | { | ||||||
1472 | enum conversion_safety give_warning = SAFE_CONVERSION; /* is 0 or false */ | ||||||
1473 | tree expr_type = TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1473, __FUNCTION__))->typed.type); | ||||||
1474 | |||||||
1475 | expr = fold_for_warn (expr); | ||||||
1476 | |||||||
1477 | if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == REAL_CST || TREE_CODE (expr)((enum tree_code) (expr)->base.code) == INTEGER_CST) | ||||||
1478 | { | ||||||
1479 | /* If type is complex, we are interested in compatibility with | ||||||
1480 | underlying type. */ | ||||||
1481 | if (TREE_CODE (type)((enum tree_code) (type)->base.code) == COMPLEX_TYPE) | ||||||
1482 | type = TREE_TYPE (type)((contains_struct_check ((type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1482, __FUNCTION__))->typed.type); | ||||||
1483 | |||||||
1484 | /* Warn for real constant that is not an exact integer converted | ||||||
1485 | to integer type. */ | ||||||
1486 | if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == REAL_TYPE | ||||||
1487 | && TREE_CODE (type)((enum tree_code) (type)->base.code) == INTEGER_TYPE) | ||||||
1488 | { | ||||||
1489 | if (!real_isinteger (TREE_REAL_CST_PTR (expr)(&(tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1489, __FUNCTION__, (REAL_CST)))->real_cst.value), TYPE_MODE (expr_type)((((enum tree_code) ((tree_class_check ((expr_type), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1489, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (expr_type) : (expr_type)->type_common.mode))) | ||||||
1490 | give_warning = UNSAFE_REAL; | ||||||
1491 | } | ||||||
1492 | /* Warn for an integer constant that does not fit into integer type. */ | ||||||
1493 | else if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == INTEGER_TYPE | ||||||
1494 | && TREE_CODE (type)((enum tree_code) (type)->base.code) == INTEGER_TYPE | ||||||
1495 | && !int_fits_type_p (expr, type)) | ||||||
1496 | { | ||||||
1497 | if (TYPE_UNSIGNED (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1497, __FUNCTION__))->base.u.bits.unsigned_flag) && !TYPE_UNSIGNED (expr_type)((tree_class_check ((expr_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1497, __FUNCTION__))->base.u.bits.unsigned_flag) | ||||||
1498 | && tree_int_cst_sgn (expr) < 0) | ||||||
1499 | { | ||||||
1500 | if (check_sign) | ||||||
1501 | give_warning = UNSAFE_SIGN; | ||||||
1502 | } | ||||||
1503 | else if (!TYPE_UNSIGNED (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1503, __FUNCTION__))->base.u.bits.unsigned_flag) && TYPE_UNSIGNED (expr_type)((tree_class_check ((expr_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1503, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
1504 | { | ||||||
1505 | if (check_sign) | ||||||
1506 | give_warning = UNSAFE_SIGN; | ||||||
1507 | } | ||||||
1508 | else | ||||||
1509 | give_warning = UNSAFE_OTHER; | ||||||
1510 | } | ||||||
1511 | else if (TREE_CODE (type)((enum tree_code) (type)->base.code) == REAL_TYPE) | ||||||
1512 | { | ||||||
1513 | /* Warn for an integer constant that does not fit into real type. */ | ||||||
1514 | if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == INTEGER_TYPE) | ||||||
1515 | { | ||||||
1516 | REAL_VALUE_TYPEstruct real_value a = real_value_from_int_cst (0, expr); | ||||||
1517 | if (!exact_real_truncate (TYPE_MODE (type)((((enum tree_code) ((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1517, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (type) : (type)->type_common.mode), &a)) | ||||||
1518 | give_warning = UNSAFE_REAL; | ||||||
1519 | } | ||||||
1520 | /* Warn for a real constant that does not fit into a smaller | ||||||
1521 | real type. */ | ||||||
1522 | else if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == REAL_TYPE | ||||||
1523 | && TYPE_PRECISION (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1523, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (expr_type)((tree_class_check ((expr_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1523, __FUNCTION__))->type_common.precision)) | ||||||
1524 | { | ||||||
1525 | REAL_VALUE_TYPEstruct real_value a = TREE_REAL_CST (expr)(*(&(tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1525, __FUNCTION__, (REAL_CST)))->real_cst.value)); | ||||||
1526 | if (!exact_real_truncate (TYPE_MODE (type)((((enum tree_code) ((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1526, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (type) : (type)->type_common.mode), &a)) | ||||||
1527 | give_warning = UNSAFE_REAL; | ||||||
1528 | } | ||||||
1529 | } | ||||||
1530 | } | ||||||
1531 | |||||||
1532 | else if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == COMPLEX_CST) | ||||||
1533 | { | ||||||
1534 | tree imag_part = TREE_IMAGPART (expr)((tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1534, __FUNCTION__, (COMPLEX_CST)))->complex.imag); | ||||||
1535 | /* Conversion from complex constant with zero imaginary part, | ||||||
1536 | perform check for conversion of real part. */ | ||||||
1537 | if ((TREE_CODE (imag_part)((enum tree_code) (imag_part)->base.code) == REAL_CST | ||||||
1538 | && real_zerop (imag_part)) | ||||||
1539 | || (TREE_CODE (imag_part)((enum tree_code) (imag_part)->base.code) == INTEGER_CST | ||||||
1540 | && integer_zerop (imag_part))) | ||||||
1541 | /* Note: in this branch we use recursive call to unsafe_conversion_p | ||||||
1542 | with different type of EXPR, but it is still safe, because when EXPR | ||||||
1543 | is a constant, it's type is not used in text of generated warnings | ||||||
1544 | (otherwise they could sound misleading). */ | ||||||
1545 | return unsafe_conversion_p (type, TREE_REALPART (expr)((tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1545, __FUNCTION__, (COMPLEX_CST)))->complex.real), result, | ||||||
1546 | check_sign); | ||||||
1547 | /* Conversion from complex constant with non-zero imaginary part. */ | ||||||
1548 | else | ||||||
1549 | { | ||||||
1550 | /* Conversion to complex type. | ||||||
1551 | Perform checks for both real and imaginary parts. */ | ||||||
1552 | if (TREE_CODE (type)((enum tree_code) (type)->base.code) == COMPLEX_TYPE) | ||||||
1553 | { | ||||||
1554 | enum conversion_safety re_safety = | ||||||
1555 | unsafe_conversion_p (type, TREE_REALPART (expr)((tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1555, __FUNCTION__, (COMPLEX_CST)))->complex.real), | ||||||
1556 | result, check_sign); | ||||||
1557 | enum conversion_safety im_safety = | ||||||
1558 | unsafe_conversion_p (type, imag_part, result, check_sign); | ||||||
1559 | |||||||
1560 | /* Merge the results into appropriate single warning. */ | ||||||
1561 | |||||||
1562 | /* Note: this case includes SAFE_CONVERSION, i.e. success. */ | ||||||
1563 | if (re_safety == im_safety) | ||||||
1564 | give_warning = re_safety; | ||||||
1565 | else if (!re_safety && im_safety) | ||||||
1566 | give_warning = im_safety; | ||||||
1567 | else if (re_safety && !im_safety) | ||||||
1568 | give_warning = re_safety; | ||||||
1569 | else | ||||||
1570 | give_warning = UNSAFE_OTHER; | ||||||
1571 | } | ||||||
1572 | /* Warn about conversion from complex to real or integer type. */ | ||||||
1573 | else | ||||||
1574 | give_warning = UNSAFE_IMAGINARY; | ||||||
1575 | } | ||||||
1576 | } | ||||||
1577 | |||||||
1578 | /* Checks for remaining case: EXPR is not constant. */ | ||||||
1579 | else | ||||||
1580 | { | ||||||
1581 | /* Warn for real types converted to integer types. */ | ||||||
1582 | if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == REAL_TYPE | ||||||
1583 | && TREE_CODE (type)((enum tree_code) (type)->base.code) == INTEGER_TYPE) | ||||||
1584 | give_warning = UNSAFE_REAL; | ||||||
1585 | |||||||
1586 | else if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == INTEGER_TYPE | ||||||
1587 | && TREE_CODE (type)((enum tree_code) (type)->base.code) == INTEGER_TYPE) | ||||||
1588 | { | ||||||
1589 | /* Don't warn about unsigned char y = 0xff, x = (int) y; */ | ||||||
1590 | expr = get_unwidened (expr, 0); | ||||||
1591 | expr_type = TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1591, __FUNCTION__))->typed.type); | ||||||
1592 | |||||||
1593 | /* Don't warn for short y; short x = ((int)y & 0xff); */ | ||||||
1594 | if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == BIT_AND_EXPR | ||||||
1595 | || TREE_CODE (expr)((enum tree_code) (expr)->base.code) == BIT_IOR_EXPR | ||||||
1596 | || TREE_CODE (expr)((enum tree_code) (expr)->base.code) == BIT_XOR_EXPR) | ||||||
1597 | { | ||||||
1598 | /* If both args were extended from a shortest type, | ||||||
1599 | use that type if that is safe. */ | ||||||
1600 | expr_type = shorten_binary_op (expr_type, | ||||||
1601 | TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1601, __FUNCTION__))))), | ||||||
1602 | TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1602, __FUNCTION__))))), | ||||||
1603 | /* bitwise */1); | ||||||
1604 | |||||||
1605 | if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == BIT_AND_EXPR) | ||||||
1606 | { | ||||||
1607 | tree op0 = TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1607, __FUNCTION__))))); | ||||||
1608 | tree op1 = TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1608, __FUNCTION__))))); | ||||||
1609 | bool unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0))((tree_class_check ((((contains_struct_check ((op0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1609, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1609, __FUNCTION__))->base.u.bits.unsigned_flag); | ||||||
1610 | bool unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1))((tree_class_check ((((contains_struct_check ((op1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1610, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1610, __FUNCTION__))->base.u.bits.unsigned_flag); | ||||||
1611 | |||||||
1612 | /* If one of the operands is a non-negative constant | ||||||
1613 | that fits in the target type, then the type of the | ||||||
1614 | other operand does not matter. */ | ||||||
1615 | if ((TREE_CODE (op0)((enum tree_code) (op0)->base.code) == INTEGER_CST | ||||||
1616 | && int_fits_type_p (op0, c_common_signed_type (type)) | ||||||
1617 | && int_fits_type_p (op0, c_common_unsigned_type (type))) | ||||||
1618 | || (TREE_CODE (op1)((enum tree_code) (op1)->base.code) == INTEGER_CST | ||||||
1619 | && int_fits_type_p (op1, c_common_signed_type (type)) | ||||||
1620 | && int_fits_type_p (op1, | ||||||
1621 | c_common_unsigned_type (type)))) | ||||||
1622 | return SAFE_CONVERSION; | ||||||
1623 | /* If constant is unsigned and fits in the target | ||||||
1624 | type, then the result will also fit. */ | ||||||
1625 | else if ((TREE_CODE (op0)((enum tree_code) (op0)->base.code) == INTEGER_CST | ||||||
1626 | && unsigned0 | ||||||
1627 | && int_fits_type_p (op0, type)) | ||||||
1628 | || (TREE_CODE (op1)((enum tree_code) (op1)->base.code) == INTEGER_CST | ||||||
1629 | && unsigned1 | ||||||
1630 | && int_fits_type_p (op1, type))) | ||||||
1631 | return SAFE_CONVERSION; | ||||||
1632 | } | ||||||
1633 | } | ||||||
1634 | /* Warn for integer types converted to smaller integer types. */ | ||||||
1635 | if (TYPE_PRECISION (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1635, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (expr_type)((tree_class_check ((expr_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1635, __FUNCTION__))->type_common.precision)) | ||||||
1636 | give_warning = UNSAFE_OTHER; | ||||||
1637 | |||||||
1638 | /* When they are the same width but different signedness, | ||||||
1639 | then the value may change. */ | ||||||
1640 | else if (((TYPE_PRECISION (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1640, __FUNCTION__))->type_common.precision) == TYPE_PRECISION (expr_type)((tree_class_check ((expr_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1640, __FUNCTION__))->type_common.precision) | ||||||
1641 | && TYPE_UNSIGNED (expr_type)((tree_class_check ((expr_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1641, __FUNCTION__))->base.u.bits.unsigned_flag) != TYPE_UNSIGNED (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1641, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
1642 | /* Even when converted to a bigger type, if the type is | ||||||
1643 | unsigned but expr is signed, then negative values | ||||||
1644 | will be changed. */ | ||||||
1645 | || (TYPE_UNSIGNED (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1645, __FUNCTION__))->base.u.bits.unsigned_flag) && !TYPE_UNSIGNED (expr_type)((tree_class_check ((expr_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1645, __FUNCTION__))->base.u.bits.unsigned_flag))) | ||||||
1646 | && check_sign) | ||||||
1647 | give_warning = UNSAFE_SIGN; | ||||||
1648 | } | ||||||
1649 | |||||||
1650 | /* Warn for integer types converted to real types if and only if | ||||||
1651 | all the range of values of the integer type cannot be | ||||||
1652 | represented by the real type. */ | ||||||
1653 | else if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == INTEGER_TYPE | ||||||
1654 | && TREE_CODE (type)((enum tree_code) (type)->base.code) == REAL_TYPE) | ||||||
1655 | { | ||||||
1656 | /* Don't warn about char y = 0xff; float x = (int) y; */ | ||||||
1657 | expr = get_unwidened (expr, 0); | ||||||
1658 | expr_type = TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1658, __FUNCTION__))->typed.type); | ||||||
1659 | |||||||
1660 | if (!int_safely_convertible_to_real_p (expr_type, type)) | ||||||
1661 | give_warning = UNSAFE_OTHER; | ||||||
1662 | } | ||||||
1663 | |||||||
1664 | /* Warn for real types converted to smaller real types. */ | ||||||
1665 | else if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == REAL_TYPE | ||||||
1666 | && TREE_CODE (type)((enum tree_code) (type)->base.code) == REAL_TYPE | ||||||
1667 | && TYPE_PRECISION (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1667, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (expr_type)((tree_class_check ((expr_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1667, __FUNCTION__))->type_common.precision)) | ||||||
1668 | give_warning = UNSAFE_REAL; | ||||||
1669 | |||||||
1670 | /* Check conversion between two complex types. */ | ||||||
1671 | else if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == COMPLEX_TYPE | ||||||
1672 | && TREE_CODE (type)((enum tree_code) (type)->base.code) == COMPLEX_TYPE) | ||||||
1673 | { | ||||||
1674 | /* Extract underlying types (i.e., type of real and imaginary | ||||||
1675 | parts) of expr_type and type. */ | ||||||
1676 | tree from_type = TREE_TYPE (expr_type)((contains_struct_check ((expr_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1676, __FUNCTION__))->typed.type); | ||||||
1677 | tree to_type = TREE_TYPE (type)((contains_struct_check ((type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1677, __FUNCTION__))->typed.type); | ||||||
1678 | |||||||
1679 | /* Warn for real types converted to integer types. */ | ||||||
1680 | if (TREE_CODE (from_type)((enum tree_code) (from_type)->base.code) == REAL_TYPE | ||||||
1681 | && TREE_CODE (to_type)((enum tree_code) (to_type)->base.code) == INTEGER_TYPE) | ||||||
1682 | give_warning = UNSAFE_REAL; | ||||||
1683 | |||||||
1684 | /* Warn for real types converted to smaller real types. */ | ||||||
1685 | else if (TREE_CODE (from_type)((enum tree_code) (from_type)->base.code) == REAL_TYPE | ||||||
1686 | && TREE_CODE (to_type)((enum tree_code) (to_type)->base.code) == REAL_TYPE | ||||||
1687 | && TYPE_PRECISION (to_type)((tree_class_check ((to_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1687, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (from_type)((tree_class_check ((from_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1687, __FUNCTION__))->type_common.precision)) | ||||||
1688 | give_warning = UNSAFE_REAL; | ||||||
1689 | |||||||
1690 | /* Check conversion for complex integer types. Here implementation | ||||||
1691 | is simpler than for real-domain integers because it does not | ||||||
1692 | involve sophisticated cases, such as bitmasks, casts, etc. */ | ||||||
1693 | else if (TREE_CODE (from_type)((enum tree_code) (from_type)->base.code) == INTEGER_TYPE | ||||||
1694 | && TREE_CODE (to_type)((enum tree_code) (to_type)->base.code) == INTEGER_TYPE) | ||||||
1695 | { | ||||||
1696 | /* Warn for integer types converted to smaller integer types. */ | ||||||
1697 | if (TYPE_PRECISION (to_type)((tree_class_check ((to_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1697, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (from_type)((tree_class_check ((from_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1697, __FUNCTION__))->type_common.precision)) | ||||||
1698 | give_warning = UNSAFE_OTHER; | ||||||
1699 | |||||||
1700 | /* Check for different signedness, see case for real-domain | ||||||
1701 | integers (above) for a more detailed comment. */ | ||||||
1702 | else if (((TYPE_PRECISION (to_type)((tree_class_check ((to_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1702, __FUNCTION__))->type_common.precision) == TYPE_PRECISION (from_type)((tree_class_check ((from_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1702, __FUNCTION__))->type_common.precision) | ||||||
1703 | && TYPE_UNSIGNED (to_type)((tree_class_check ((to_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1703, __FUNCTION__))->base.u.bits.unsigned_flag) != TYPE_UNSIGNED (from_type)((tree_class_check ((from_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1703, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
1704 | || (TYPE_UNSIGNED (to_type)((tree_class_check ((to_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1704, __FUNCTION__))->base.u.bits.unsigned_flag) && !TYPE_UNSIGNED (from_type)((tree_class_check ((from_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1704, __FUNCTION__))->base.u.bits.unsigned_flag))) | ||||||
1705 | && check_sign) | ||||||
1706 | give_warning = UNSAFE_SIGN; | ||||||
1707 | } | ||||||
1708 | else if (TREE_CODE (from_type)((enum tree_code) (from_type)->base.code) == INTEGER_TYPE | ||||||
1709 | && TREE_CODE (to_type)((enum tree_code) (to_type)->base.code) == REAL_TYPE | ||||||
1710 | && !int_safely_convertible_to_real_p (from_type, to_type)) | ||||||
1711 | give_warning = UNSAFE_OTHER; | ||||||
1712 | } | ||||||
1713 | |||||||
1714 | /* Warn for complex types converted to real or integer types. */ | ||||||
1715 | else if (TREE_CODE (expr_type)((enum tree_code) (expr_type)->base.code) == COMPLEX_TYPE | ||||||
1716 | && TREE_CODE (type)((enum tree_code) (type)->base.code) != COMPLEX_TYPE) | ||||||
1717 | give_warning = UNSAFE_IMAGINARY; | ||||||
1718 | } | ||||||
1719 | |||||||
1720 | return give_warning; | ||||||
1721 | } | ||||||
1722 | |||||||
1723 | |||||||
1724 | /* Convert EXPR to TYPE, warning about conversion problems with constants. | ||||||
1725 | Invoke this function on every expression that is converted implicitly, | ||||||
1726 | i.e. because of language rules and not because of an explicit cast. | ||||||
1727 | INIT_CONST is true if the conversion is for arithmetic types for a static | ||||||
1728 | initializer and folding must apply accordingly (discarding floating-point | ||||||
1729 | exceptions and assuming the default rounding mode is in effect). */ | ||||||
1730 | |||||||
1731 | tree | ||||||
1732 | convert_and_check (location_t loc, tree type, tree expr, bool init_const) | ||||||
1733 | { | ||||||
1734 | tree result; | ||||||
1735 | tree expr_for_warning; | ||||||
1736 | |||||||
1737 | /* Convert from a value with possible excess precision rather than | ||||||
1738 | via the semantic type, but do not warn about values not fitting | ||||||
1739 | exactly in the semantic type. */ | ||||||
1740 | if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == EXCESS_PRECISION_EXPR) | ||||||
1741 | { | ||||||
1742 | tree orig_type = TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1742, __FUNCTION__))->typed.type); | ||||||
1743 | expr = TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1743, __FUNCTION__))))); | ||||||
1744 | expr_for_warning = (init_const | ||||||
1745 | ? convert_init (orig_type, expr) | ||||||
1746 | : convert (orig_type, expr)); | ||||||
1747 | if (orig_type == type) | ||||||
1748 | return expr_for_warning; | ||||||
1749 | } | ||||||
1750 | else | ||||||
1751 | expr_for_warning = expr; | ||||||
1752 | |||||||
1753 | if (TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1753, __FUNCTION__))->typed.type) == type) | ||||||
1754 | return expr; | ||||||
1755 | |||||||
1756 | result = init_const ? convert_init (type, expr) : convert (type, expr); | ||||||
1757 | |||||||
1758 | if (c_inhibit_evaluation_warnings == 0 | ||||||
1759 | && !TREE_OVERFLOW_P (expr)((tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (expr)->base.code))] == tcc_constant) && ((tree_class_check ((expr), (tcc_constant), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1759, __FUNCTION__))->base.public_flag)) | ||||||
1760 | && result != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
1761 | warnings_for_convert_and_check (loc, type, expr_for_warning, result); | ||||||
1762 | |||||||
1763 | return result; | ||||||
1764 | } | ||||||
1765 | |||||||
1766 | /* A node in a list that describes references to variables (EXPR), which are | ||||||
1767 | either read accesses if WRITER is zero, or write accesses, in which case | ||||||
1768 | WRITER is the parent of EXPR. */ | ||||||
1769 | struct tlist | ||||||
1770 | { | ||||||
1771 | struct tlist *next; | ||||||
1772 | tree expr, writer; | ||||||
1773 | }; | ||||||
1774 | |||||||
1775 | /* Used to implement a cache the results of a call to verify_tree. We only | ||||||
1776 | use this for SAVE_EXPRs. */ | ||||||
1777 | struct tlist_cache | ||||||
1778 | { | ||||||
1779 | struct tlist_cache *next; | ||||||
1780 | struct tlist *cache_before_sp; | ||||||
1781 | struct tlist *cache_after_sp; | ||||||
1782 | tree expr; | ||||||
1783 | }; | ||||||
1784 | |||||||
1785 | /* Obstack to use when allocating tlist structures, and corresponding | ||||||
1786 | firstobj. */ | ||||||
1787 | static struct obstack tlist_obstack; | ||||||
1788 | static char *tlist_firstobj = 0; | ||||||
1789 | |||||||
1790 | /* Keep track of the identifiers we've warned about, so we can avoid duplicate | ||||||
1791 | warnings. */ | ||||||
1792 | static struct tlist *warned_ids; | ||||||
1793 | /* SAVE_EXPRs need special treatment. We process them only once and then | ||||||
1794 | cache the results. */ | ||||||
1795 | static struct tlist_cache *save_expr_cache; | ||||||
1796 | |||||||
1797 | static void add_tlist (struct tlist **, struct tlist *, tree, int); | ||||||
1798 | static void merge_tlist (struct tlist **, struct tlist *, int); | ||||||
1799 | static void verify_tree (tree, struct tlist **, struct tlist **, tree); | ||||||
1800 | static bool warning_candidate_p (tree); | ||||||
1801 | static bool candidate_equal_p (const_tree, const_tree); | ||||||
1802 | static void warn_for_collisions (struct tlist *); | ||||||
1803 | static void warn_for_collisions_1 (tree, tree, struct tlist *, int); | ||||||
1804 | static struct tlist *new_tlist (struct tlist *, tree, tree); | ||||||
1805 | |||||||
1806 | /* Create a new struct tlist and fill in its fields. */ | ||||||
1807 | static struct tlist * | ||||||
1808 | new_tlist (struct tlist *next, tree t, tree writer) | ||||||
1809 | { | ||||||
1810 | struct tlist *l; | ||||||
1811 | l = XOBNEW (&tlist_obstack, struct tlist)((struct tlist *) __extension__ ({ struct obstack *__h = ((& tlist_obstack)); __extension__ ({ struct obstack *__o = (__h) ; size_t __len = ((sizeof (struct tlist))); if (__extension__ ({ struct obstack const *__o1 = (__o); (size_t) (__o1->chunk_limit - __o1->next_free); }) < __len) _obstack_newchunk (__o , __len); ((void) ((__o)->next_free += (__len))); }); __extension__ ({ struct obstack *__o1 = (__h); void *__value = (void *) __o1 ->object_base; if (__o1->next_free == __value) __o1-> maybe_empty_object = 1; __o1->next_free = (sizeof (ptrdiff_t ) < sizeof (void *) ? ((__o1->object_base) + (((__o1-> next_free) - (__o1->object_base) + (__o1->alignment_mask )) & ~(__o1->alignment_mask))) : (char *) (((ptrdiff_t ) (__o1->next_free) + (__o1->alignment_mask)) & ~(__o1 ->alignment_mask))); if ((size_t) (__o1->next_free - (char *) __o1->chunk) > (size_t) (__o1->chunk_limit - (char *) __o1->chunk)) __o1->next_free = __o1->chunk_limit ; __o1->object_base = __o1->next_free; __value; }); })); | ||||||
1812 | l->next = next; | ||||||
1813 | l->expr = t; | ||||||
1814 | l->writer = writer; | ||||||
1815 | return l; | ||||||
1816 | } | ||||||
1817 | |||||||
1818 | /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER | ||||||
1819 | is nonnull, we ignore any node we find which has a writer equal to it. */ | ||||||
1820 | |||||||
1821 | static void | ||||||
1822 | add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy) | ||||||
1823 | { | ||||||
1824 | while (add) | ||||||
1825 | { | ||||||
1826 | struct tlist *next = add->next; | ||||||
1827 | if (!copy) | ||||||
1828 | add->next = *to; | ||||||
1829 | if (!exclude_writer || !candidate_equal_p (add->writer, exclude_writer)) | ||||||
1830 | *to = copy ? new_tlist (*to, add->expr, add->writer) : add; | ||||||
1831 | add = next; | ||||||
1832 | } | ||||||
1833 | } | ||||||
1834 | |||||||
1835 | /* Merge the nodes of ADD into TO. This merging process is done so that for | ||||||
1836 | each variable that already exists in TO, no new node is added; however if | ||||||
1837 | there is a write access recorded in ADD, and an occurrence on TO is only | ||||||
1838 | a read access, then the occurrence in TO will be modified to record the | ||||||
1839 | write. */ | ||||||
1840 | |||||||
1841 | static void | ||||||
1842 | merge_tlist (struct tlist **to, struct tlist *add, int copy) | ||||||
1843 | { | ||||||
1844 | struct tlist **end = to; | ||||||
1845 | |||||||
1846 | while (*end) | ||||||
1847 | end = &(*end)->next; | ||||||
1848 | |||||||
1849 | while (add) | ||||||
1850 | { | ||||||
1851 | int found = 0; | ||||||
1852 | struct tlist *tmp2; | ||||||
1853 | struct tlist *next = add->next; | ||||||
1854 | |||||||
1855 | for (tmp2 = *to; tmp2; tmp2 = tmp2->next) | ||||||
1856 | if (candidate_equal_p (tmp2->expr, add->expr)) | ||||||
1857 | { | ||||||
1858 | found = 1; | ||||||
1859 | if (!tmp2->writer) | ||||||
1860 | tmp2->writer = add->writer; | ||||||
1861 | } | ||||||
1862 | if (!found) | ||||||
1863 | { | ||||||
1864 | *end = copy ? new_tlist (NULL__null, add->expr, add->writer) : add; | ||||||
1865 | end = &(*end)->next; | ||||||
1866 | *end = 0; | ||||||
1867 | } | ||||||
1868 | add = next; | ||||||
1869 | } | ||||||
1870 | } | ||||||
1871 | |||||||
1872 | /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable | ||||||
1873 | references in list LIST conflict with it, excluding reads if ONLY writers | ||||||
1874 | is nonzero. */ | ||||||
1875 | |||||||
1876 | static void | ||||||
1877 | warn_for_collisions_1 (tree written, tree writer, struct tlist *list, | ||||||
1878 | int only_writes) | ||||||
1879 | { | ||||||
1880 | struct tlist *tmp; | ||||||
1881 | |||||||
1882 | /* Avoid duplicate warnings. */ | ||||||
1883 | for (tmp = warned_ids; tmp; tmp = tmp->next) | ||||||
1884 | if (candidate_equal_p (tmp->expr, written)) | ||||||
1885 | return; | ||||||
1886 | |||||||
1887 | while (list) | ||||||
1888 | { | ||||||
1889 | if (candidate_equal_p (list->expr, written) | ||||||
1890 | && !candidate_equal_p (list->writer, writer) | ||||||
1891 | && (!only_writes || list->writer)) | ||||||
1892 | { | ||||||
1893 | warned_ids = new_tlist (warned_ids, written, NULL_TREE(tree) __null); | ||||||
1894 | warning_at (EXPR_LOC_OR_LOC (writer, input_location)((((IS_ADHOC_LOC (((((writer)) && ((tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) ((writer) )->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) ((writer) )->base.code))]) <= tcc_expression)) ? (writer)->exp .locus : ((location_t) 0)))) ? get_location_from_adhoc_loc (line_table , ((((writer)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((writer))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((writer))->base.code))]) <= tcc_expression )) ? (writer)->exp.locus : ((location_t) 0))) : (((((writer )) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((writer))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((writer))->base.code))]) <= tcc_expression )) ? (writer)->exp.locus : ((location_t) 0)))) != ((location_t ) 0)) ? (writer)->exp.locus : (input_location)), | ||||||
1895 | OPT_Wsequence_point, "operation on %qE may be undefined", | ||||||
1896 | list->expr); | ||||||
1897 | } | ||||||
1898 | list = list->next; | ||||||
1899 | } | ||||||
1900 | } | ||||||
1901 | |||||||
1902 | /* Given a list LIST of references to variables, find whether any of these | ||||||
1903 | can cause conflicts due to missing sequence points. */ | ||||||
1904 | |||||||
1905 | static void | ||||||
1906 | warn_for_collisions (struct tlist *list) | ||||||
1907 | { | ||||||
1908 | struct tlist *tmp; | ||||||
1909 | |||||||
1910 | for (tmp = list; tmp; tmp = tmp->next) | ||||||
1911 | { | ||||||
1912 | if (tmp->writer) | ||||||
1913 | warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0); | ||||||
1914 | } | ||||||
1915 | } | ||||||
1916 | |||||||
1917 | /* Return nonzero if X is a tree that can be verified by the sequence point | ||||||
1918 | warnings. */ | ||||||
1919 | |||||||
1920 | static bool | ||||||
1921 | warning_candidate_p (tree x) | ||||||
1922 | { | ||||||
1923 | if (DECL_P (x)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (x)->base.code))] == tcc_declaration) && DECL_ARTIFICIAL (x)((contains_struct_check ((x), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1923, __FUNCTION__))->decl_common.artificial_flag)) | ||||||
1924 | return false; | ||||||
1925 | |||||||
1926 | if (TREE_CODE (x)((enum tree_code) (x)->base.code) == BLOCK) | ||||||
1927 | return false; | ||||||
1928 | |||||||
1929 | /* VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.cc | ||||||
1930 | (lvalue_p) crash on TRY/CATCH. */ | ||||||
1931 | if (TREE_TYPE (x)((contains_struct_check ((x), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1931, __FUNCTION__))->typed.type) == NULL_TREE(tree) __null || VOID_TYPE_P (TREE_TYPE (x))(((enum tree_code) (((contains_struct_check ((x), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 1931, __FUNCTION__))->typed.type))->base.code) == VOID_TYPE )) | ||||||
1932 | return false; | ||||||
1933 | |||||||
1934 | if (!lvalue_p (x)) | ||||||
1935 | return false; | ||||||
1936 | |||||||
1937 | /* No point to track non-const calls, they will never satisfy | ||||||
1938 | operand_equal_p. */ | ||||||
1939 | if (TREE_CODE (x)((enum tree_code) (x)->base.code) == CALL_EXPR && (call_expr_flags (x) & ECF_CONST(1 << 0)) == 0) | ||||||
1940 | return false; | ||||||
1941 | |||||||
1942 | if (TREE_CODE (x)((enum tree_code) (x)->base.code) == STRING_CST) | ||||||
1943 | return false; | ||||||
1944 | |||||||
1945 | return true; | ||||||
1946 | } | ||||||
1947 | |||||||
1948 | /* Return nonzero if X and Y appear to be the same candidate (or NULL) */ | ||||||
1949 | static bool | ||||||
1950 | candidate_equal_p (const_tree x, const_tree y) | ||||||
1951 | { | ||||||
1952 | return (x == y) || (x && y && operand_equal_p (x, y, 0)); | ||||||
1953 | } | ||||||
1954 | |||||||
1955 | /* Walk the tree X, and record accesses to variables. If X is written by the | ||||||
1956 | parent tree, WRITER is the parent. | ||||||
1957 | We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this | ||||||
1958 | expression or its only operand forces a sequence point, then everything up | ||||||
1959 | to the sequence point is stored in PBEFORE_SP. Everything else gets stored | ||||||
1960 | in PNO_SP. | ||||||
1961 | Once we return, we will have emitted warnings if any subexpression before | ||||||
1962 | such a sequence point could be undefined. On a higher level, however, the | ||||||
1963 | sequence point may not be relevant, and we'll merge the two lists. | ||||||
1964 | |||||||
1965 | Example: (b++, a) + b; | ||||||
1966 | The call that processes the COMPOUND_EXPR will store the increment of B | ||||||
1967 | in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that | ||||||
1968 | processes the PLUS_EXPR will need to merge the two lists so that | ||||||
1969 | eventually, all accesses end up on the same list (and we'll warn about the | ||||||
1970 | unordered subexpressions b++ and b. | ||||||
1971 | |||||||
1972 | A note on merging. If we modify the former example so that our expression | ||||||
1973 | becomes | ||||||
1974 | (b++, b) + a | ||||||
1975 | care must be taken not simply to add all three expressions into the final | ||||||
1976 | PNO_SP list. The function merge_tlist takes care of that by merging the | ||||||
1977 | before-SP list of the COMPOUND_EXPR into its after-SP list in a special | ||||||
1978 | way, so that no more than one access to B is recorded. */ | ||||||
1979 | |||||||
1980 | static void | ||||||
1981 | verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp, | ||||||
1982 | tree writer) | ||||||
1983 | { | ||||||
1984 | struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3; | ||||||
1985 | enum tree_code code; | ||||||
1986 | enum tree_code_class cl; | ||||||
1987 | |||||||
1988 | restart: | ||||||
1989 | /* X may be NULL if it is the operand of an empty statement expression | ||||||
1990 | ({ }). */ | ||||||
1991 | if (x == NULL__null) | ||||||
1992 | return; | ||||||
1993 | |||||||
1994 | code = TREE_CODE (x)((enum tree_code) (x)->base.code); | ||||||
1995 | cl = TREE_CODE_CLASS (code)tree_code_type_tmpl <0>::tree_code_type[(int) (code)]; | ||||||
1996 | |||||||
1997 | if (warning_candidate_p (x)) | ||||||
1998 | *pno_sp = new_tlist (*pno_sp, x, writer); | ||||||
1999 | |||||||
2000 | switch (code) | ||||||
2001 | { | ||||||
2002 | case CONSTRUCTOR: | ||||||
2003 | case SIZEOF_EXPR: | ||||||
2004 | case PAREN_SIZEOF_EXPR: | ||||||
2005 | return; | ||||||
2006 | |||||||
2007 | case COMPOUND_EXPR: | ||||||
2008 | case TRUTH_ANDIF_EXPR: | ||||||
2009 | case TRUTH_ORIF_EXPR: | ||||||
2010 | sequenced_binary: | ||||||
2011 | tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0; | ||||||
2012 | verify_tree (TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2012, __FUNCTION__))))), &tmp_before, &tmp_nosp, NULL_TREE(tree) __null); | ||||||
2013 | warn_for_collisions (tmp_nosp); | ||||||
2014 | merge_tlist (pbefore_sp, tmp_before, 0); | ||||||
2015 | merge_tlist (pbefore_sp, tmp_nosp, 0); | ||||||
2016 | verify_tree (TREE_OPERAND (x, 1)(*((const_cast<tree*> (tree_operand_check ((x), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2016, __FUNCTION__))))), &tmp_list3, &tmp_list2, NULL_TREE(tree) __null); | ||||||
2017 | warn_for_collisions (tmp_list2); | ||||||
2018 | merge_tlist (pbefore_sp, tmp_list3, 0); | ||||||
2019 | merge_tlist (pno_sp, tmp_list2, 0); | ||||||
2020 | return; | ||||||
2021 | |||||||
2022 | case COND_EXPR: | ||||||
2023 | tmp_before = tmp_list2 = 0; | ||||||
2024 | verify_tree (TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2024, __FUNCTION__))))), &tmp_before, &tmp_list2, NULL_TREE(tree) __null); | ||||||
2025 | warn_for_collisions (tmp_list2); | ||||||
2026 | merge_tlist (pbefore_sp, tmp_before, 0); | ||||||
2027 | merge_tlist (pbefore_sp, tmp_list2, 0); | ||||||
2028 | |||||||
2029 | tmp_list3 = tmp_nosp = 0; | ||||||
2030 | verify_tree (TREE_OPERAND (x, 1)(*((const_cast<tree*> (tree_operand_check ((x), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2030, __FUNCTION__))))), &tmp_list3, &tmp_nosp, NULL_TREE(tree) __null); | ||||||
2031 | warn_for_collisions (tmp_nosp); | ||||||
2032 | merge_tlist (pbefore_sp, tmp_list3, 0); | ||||||
2033 | |||||||
2034 | tmp_list3 = tmp_list2 = 0; | ||||||
2035 | verify_tree (TREE_OPERAND (x, 2)(*((const_cast<tree*> (tree_operand_check ((x), (2), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2035, __FUNCTION__))))), &tmp_list3, &tmp_list2, NULL_TREE(tree) __null); | ||||||
2036 | warn_for_collisions (tmp_list2); | ||||||
2037 | merge_tlist (pbefore_sp, tmp_list3, 0); | ||||||
2038 | /* Rather than add both tmp_nosp and tmp_list2, we have to merge the | ||||||
2039 | two first, to avoid warning for (a ? b++ : b++). */ | ||||||
2040 | merge_tlist (&tmp_nosp, tmp_list2, 0); | ||||||
2041 | add_tlist (pno_sp, tmp_nosp, NULL_TREE(tree) __null, 0); | ||||||
2042 | return; | ||||||
2043 | |||||||
2044 | case PREDECREMENT_EXPR: | ||||||
2045 | case PREINCREMENT_EXPR: | ||||||
2046 | case POSTDECREMENT_EXPR: | ||||||
2047 | case POSTINCREMENT_EXPR: | ||||||
2048 | verify_tree (TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2048, __FUNCTION__))))), pno_sp, pno_sp, x); | ||||||
2049 | return; | ||||||
2050 | |||||||
2051 | case MODIFY_EXPR: | ||||||
2052 | tmp_before = tmp_nosp = tmp_list3 = 0; | ||||||
2053 | verify_tree (TREE_OPERAND (x, 1)(*((const_cast<tree*> (tree_operand_check ((x), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2053, __FUNCTION__))))), &tmp_before, &tmp_nosp, NULL_TREE(tree) __null); | ||||||
2054 | verify_tree (TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2054, __FUNCTION__))))), &tmp_list3, &tmp_list3, x); | ||||||
2055 | /* Expressions inside the LHS are not ordered wrt. the sequence points | ||||||
2056 | in the RHS. Example: | ||||||
2057 | *a = (a++, 2) | ||||||
2058 | Despite the fact that the modification of "a" is in the before_sp | ||||||
2059 | list (tmp_before), it conflicts with the use of "a" in the LHS. | ||||||
2060 | We can handle this by adding the contents of tmp_list3 | ||||||
2061 | to those of tmp_before, and redoing the collision warnings for that | ||||||
2062 | list. */ | ||||||
2063 | add_tlist (&tmp_before, tmp_list3, x, 1); | ||||||
2064 | warn_for_collisions (tmp_before); | ||||||
2065 | /* Exclude the LHS itself here; we first have to merge it into the | ||||||
2066 | tmp_nosp list. This is done to avoid warning for "a = a"; if we | ||||||
2067 | didn't exclude the LHS, we'd get it twice, once as a read and once | ||||||
2068 | as a write. */ | ||||||
2069 | add_tlist (pno_sp, tmp_list3, x, 0); | ||||||
2070 | warn_for_collisions_1 (TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2070, __FUNCTION__))))), x, tmp_nosp, 1); | ||||||
2071 | |||||||
2072 | merge_tlist (pbefore_sp, tmp_before, 0); | ||||||
2073 | if (warning_candidate_p (TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2073, __FUNCTION__))))))) | ||||||
2074 | merge_tlist (&tmp_nosp, new_tlist (NULL__null, TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2074, __FUNCTION__))))), x), 0); | ||||||
2075 | add_tlist (pno_sp, tmp_nosp, NULL_TREE(tree) __null, 1); | ||||||
2076 | return; | ||||||
2077 | |||||||
2078 | case CALL_EXPR: | ||||||
2079 | /* We need to warn about conflicts among arguments and conflicts between | ||||||
2080 | args and the function address. Side effects of the function address, | ||||||
2081 | however, are not ordered by the sequence point of the call. */ | ||||||
2082 | { | ||||||
2083 | call_expr_arg_iterator iter; | ||||||
2084 | tree arg; | ||||||
2085 | tmp_before = tmp_nosp = 0; | ||||||
2086 | verify_tree (CALL_EXPR_FN (x)(*((const_cast<tree*> (tree_operand_check (((tree_check ((x), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2086, __FUNCTION__, (CALL_EXPR)))), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2086, __FUNCTION__))))), &tmp_before, &tmp_nosp, NULL_TREE(tree) __null); | ||||||
2087 | FOR_EACH_CALL_EXPR_ARG (arg, iter, x)for ((arg) = first_call_expr_arg ((x), &(iter)); (arg); ( arg) = next_call_expr_arg (&(iter))) | ||||||
2088 | { | ||||||
2089 | tmp_list2 = tmp_list3 = 0; | ||||||
2090 | verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE(tree) __null); | ||||||
2091 | merge_tlist (&tmp_list3, tmp_list2, 0); | ||||||
2092 | add_tlist (&tmp_before, tmp_list3, NULL_TREE(tree) __null, 0); | ||||||
2093 | } | ||||||
2094 | add_tlist (&tmp_before, tmp_nosp, NULL_TREE(tree) __null, 0); | ||||||
2095 | warn_for_collisions (tmp_before); | ||||||
2096 | add_tlist (pbefore_sp, tmp_before, NULL_TREE(tree) __null, 0); | ||||||
2097 | return; | ||||||
2098 | } | ||||||
2099 | |||||||
2100 | case TREE_LIST: | ||||||
2101 | /* Scan all the list, e.g. indices of multi dimensional array. */ | ||||||
2102 | while (x) | ||||||
2103 | { | ||||||
2104 | tmp_before = tmp_nosp = 0; | ||||||
2105 | verify_tree (TREE_VALUE (x)((tree_check ((x), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2105, __FUNCTION__, (TREE_LIST)))->list.value), &tmp_before, &tmp_nosp, NULL_TREE(tree) __null); | ||||||
2106 | merge_tlist (&tmp_nosp, tmp_before, 0); | ||||||
2107 | add_tlist (pno_sp, tmp_nosp, NULL_TREE(tree) __null, 0); | ||||||
2108 | x = TREE_CHAIN (x)((contains_struct_check ((x), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2108, __FUNCTION__))->common.chain); | ||||||
2109 | } | ||||||
2110 | return; | ||||||
2111 | |||||||
2112 | case SAVE_EXPR: | ||||||
2113 | { | ||||||
2114 | struct tlist_cache *t; | ||||||
2115 | for (t = save_expr_cache; t; t = t->next) | ||||||
2116 | if (candidate_equal_p (t->expr, x)) | ||||||
2117 | break; | ||||||
2118 | |||||||
2119 | if (!t) | ||||||
2120 | { | ||||||
2121 | t = XOBNEW (&tlist_obstack, struct tlist_cache)((struct tlist_cache *) __extension__ ({ struct obstack *__h = ((&tlist_obstack)); __extension__ ({ struct obstack *__o = (__h); size_t __len = ((sizeof (struct tlist_cache))); if ( __extension__ ({ struct obstack const *__o1 = (__o); (size_t) (__o1->chunk_limit - __o1->next_free); }) < __len) _obstack_newchunk (__o, __len); ((void) ((__o)->next_free += (__len))); }); __extension__ ({ struct obstack *__o1 = (__h); void *__value = (void *) __o1->object_base; if (__o1->next_free == __value ) __o1->maybe_empty_object = 1; __o1->next_free = (sizeof (ptrdiff_t) < sizeof (void *) ? ((__o1->object_base) + (((__o1->next_free) - (__o1->object_base) + (__o1-> alignment_mask)) & ~(__o1->alignment_mask))) : (char * ) (((ptrdiff_t) (__o1->next_free) + (__o1->alignment_mask )) & ~(__o1->alignment_mask))); if ((size_t) (__o1-> next_free - (char *) __o1->chunk) > (size_t) (__o1-> chunk_limit - (char *) __o1->chunk)) __o1->next_free = __o1 ->chunk_limit; __o1->object_base = __o1->next_free; __value ; }); })); | ||||||
2122 | t->next = save_expr_cache; | ||||||
2123 | t->expr = x; | ||||||
2124 | save_expr_cache = t; | ||||||
2125 | |||||||
2126 | tmp_before = tmp_nosp = 0; | ||||||
2127 | verify_tree (TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2127, __FUNCTION__))))), &tmp_before, &tmp_nosp, NULL_TREE(tree) __null); | ||||||
2128 | warn_for_collisions (tmp_nosp); | ||||||
2129 | |||||||
2130 | tmp_list3 = 0; | ||||||
2131 | merge_tlist (&tmp_list3, tmp_nosp, 0); | ||||||
2132 | t->cache_before_sp = tmp_before; | ||||||
2133 | t->cache_after_sp = tmp_list3; | ||||||
2134 | } | ||||||
2135 | merge_tlist (pbefore_sp, t->cache_before_sp, 1); | ||||||
2136 | add_tlist (pno_sp, t->cache_after_sp, NULL_TREE(tree) __null, 1); | ||||||
2137 | return; | ||||||
2138 | } | ||||||
2139 | |||||||
2140 | case ADDR_EXPR: | ||||||
2141 | x = TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2141, __FUNCTION__))))); | ||||||
2142 | if (DECL_P (x)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (x)->base.code))] == tcc_declaration)) | ||||||
2143 | return; | ||||||
2144 | writer = 0; | ||||||
2145 | goto restart; | ||||||
2146 | |||||||
2147 | case VIEW_CONVERT_EXPR: | ||||||
2148 | if (location_wrapper_p (x)) | ||||||
2149 | { | ||||||
2150 | x = TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2150, __FUNCTION__))))); | ||||||
2151 | goto restart; | ||||||
2152 | } | ||||||
2153 | goto do_default; | ||||||
2154 | |||||||
2155 | case LSHIFT_EXPR: | ||||||
2156 | case RSHIFT_EXPR: | ||||||
2157 | case COMPONENT_REF: | ||||||
2158 | case ARRAY_REF: | ||||||
2159 | if (cxx_dialect >= cxx17) | ||||||
2160 | goto sequenced_binary; | ||||||
2161 | goto do_default; | ||||||
2162 | |||||||
2163 | default: | ||||||
2164 | do_default: | ||||||
2165 | /* For other expressions, simply recurse on their operands. | ||||||
2166 | Manual tail recursion for unary expressions. | ||||||
2167 | Other non-expressions need not be processed. */ | ||||||
2168 | if (cl == tcc_unary) | ||||||
2169 | { | ||||||
2170 | x = TREE_OPERAND (x, 0)(*((const_cast<tree*> (tree_operand_check ((x), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2170, __FUNCTION__))))); | ||||||
2171 | writer = 0; | ||||||
2172 | goto restart; | ||||||
2173 | } | ||||||
2174 | else if (IS_EXPR_CODE_CLASS (cl)((cl) >= tcc_reference && (cl) <= tcc_expression )) | ||||||
2175 | { | ||||||
2176 | int lp; | ||||||
2177 | int max = TREE_OPERAND_LENGTH (x)tree_operand_length (x); | ||||||
2178 | for (lp = 0; lp < max; lp++) | ||||||
2179 | { | ||||||
2180 | tmp_before = tmp_nosp = 0; | ||||||
2181 | verify_tree (TREE_OPERAND (x, lp)(*((const_cast<tree*> (tree_operand_check ((x), (lp), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2181, __FUNCTION__))))), &tmp_before, &tmp_nosp, 0); | ||||||
2182 | merge_tlist (&tmp_nosp, tmp_before, 0); | ||||||
2183 | add_tlist (pno_sp, tmp_nosp, NULL_TREE(tree) __null, 0); | ||||||
2184 | } | ||||||
2185 | } | ||||||
2186 | return; | ||||||
2187 | } | ||||||
2188 | } | ||||||
2189 | |||||||
2190 | static constexpr size_t verify_sequence_points_limit = 1024; | ||||||
2191 | |||||||
2192 | /* Called from verify_sequence_points via walk_tree. */ | ||||||
2193 | |||||||
2194 | static tree | ||||||
2195 | verify_tree_lim_r (tree *tp, int *walk_subtrees, void *data) | ||||||
2196 | { | ||||||
2197 | if (++*((size_t *) data) > verify_sequence_points_limit) | ||||||
2198 | return integer_zero_nodeglobal_trees[TI_INTEGER_ZERO]; | ||||||
2199 | |||||||
2200 | if (TYPE_P (*tp)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (*tp)->base.code))] == tcc_type)) | ||||||
2201 | *walk_subtrees = 0; | ||||||
2202 | |||||||
2203 | return NULL_TREE(tree) __null; | ||||||
2204 | } | ||||||
2205 | |||||||
2206 | /* Try to warn for undefined behavior in EXPR due to missing sequence | ||||||
2207 | points. */ | ||||||
2208 | |||||||
2209 | void | ||||||
2210 | verify_sequence_points (tree expr) | ||||||
2211 | { | ||||||
2212 | tlist *before_sp = nullptr, *after_sp = nullptr; | ||||||
2213 | |||||||
2214 | /* verify_tree is highly recursive, and merge_tlist is O(n^2), | ||||||
2215 | so we return early if the expression is too big. */ | ||||||
2216 | size_t n = 0; | ||||||
2217 | if (walk_tree (&expr, verify_tree_lim_r, &n, nullptr)walk_tree_1 (&expr, verify_tree_lim_r, &n, nullptr, __null )) | ||||||
2218 | return; | ||||||
2219 | |||||||
2220 | warned_ids = nullptr; | ||||||
2221 | save_expr_cache = nullptr; | ||||||
2222 | if (!tlist_firstobj) | ||||||
2223 | { | ||||||
2224 | gcc_obstack_init (&tlist_obstack)_obstack_begin (((&tlist_obstack)), (memory_block_pool::block_size ), (0), (mempool_obstack_chunk_alloc), (mempool_obstack_chunk_free )); | ||||||
2225 | tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0)__extension__ ({ struct obstack *__h = (&tlist_obstack); __extension__ ({ struct obstack *__o = (__h); size_t __len = ((0)); if (__extension__ ({ struct obstack const *__o1 = (__o); (size_t) (__o1->chunk_limit - __o1->next_free); }) < __len) _obstack_newchunk (__o , __len); ((void) ((__o)->next_free += (__len))); }); __extension__ ({ struct obstack *__o1 = (__h); void *__value = (void *) __o1 ->object_base; if (__o1->next_free == __value) __o1-> maybe_empty_object = 1; __o1->next_free = (sizeof (ptrdiff_t ) < sizeof (void *) ? ((__o1->object_base) + (((__o1-> next_free) - (__o1->object_base) + (__o1->alignment_mask )) & ~(__o1->alignment_mask))) : (char *) (((ptrdiff_t ) (__o1->next_free) + (__o1->alignment_mask)) & ~(__o1 ->alignment_mask))); if ((size_t) (__o1->next_free - (char *) __o1->chunk) > (size_t) (__o1->chunk_limit - (char *) __o1->chunk)) __o1->next_free = __o1->chunk_limit ; __o1->object_base = __o1->next_free; __value; }); }); | ||||||
2226 | } | ||||||
2227 | |||||||
2228 | verify_tree (expr, &before_sp, &after_sp, NULL_TREE(tree) __null); | ||||||
2229 | warn_for_collisions (after_sp); | ||||||
2230 | obstack_free (&tlist_obstack, tlist_firstobj)__extension__ ({ struct obstack *__o = (&tlist_obstack); void *__obj = (void *) (tlist_firstobj); if (__obj > (void *) __o ->chunk && __obj < (void *) __o->chunk_limit ) __o->next_free = __o->object_base = (char *) __obj; else _obstack_free (__o, __obj); }); | ||||||
2231 | } | ||||||
2232 | |||||||
2233 | /* Validate the expression after `case' and apply default promotions. */ | ||||||
2234 | |||||||
2235 | static tree | ||||||
2236 | check_case_value (location_t loc, tree value) | ||||||
2237 | { | ||||||
2238 | if (value == NULL_TREE(tree) __null) | ||||||
2239 | return value; | ||||||
2240 | |||||||
2241 | if (INTEGRAL_TYPE_P (TREE_TYPE (value))(((enum tree_code) (((contains_struct_check ((value), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2241, __FUNCTION__))->typed.type))->base.code) == ENUMERAL_TYPE || ((enum tree_code) (((contains_struct_check ((value), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2241, __FUNCTION__))->typed.type))->base.code) == BOOLEAN_TYPE || ((enum tree_code) (((contains_struct_check ((value), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2241, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE ) | ||||||
2242 | && TREE_CODE (value)((enum tree_code) (value)->base.code) == INTEGER_CST) | ||||||
2243 | /* Promote char or short to int. */ | ||||||
2244 | value = perform_integral_promotions (value); | ||||||
2245 | else if (value != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
2246 | { | ||||||
2247 | error_at (loc, "case label does not reduce to an integer constant"); | ||||||
2248 | value = error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
2249 | } | ||||||
2250 | |||||||
2251 | constant_expression_warning (value); | ||||||
2252 | |||||||
2253 | return value; | ||||||
2254 | } | ||||||
2255 | |||||||
2256 | /* Return an integer type with BITS bits of precision, | ||||||
2257 | that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */ | ||||||
2258 | |||||||
2259 | tree | ||||||
2260 | c_common_type_for_size (unsigned int bits, int unsignedp) | ||||||
2261 | { | ||||||
2262 | int i; | ||||||
2263 | |||||||
2264 | if (bits == TYPE_PRECISION (integer_type_node)((tree_class_check ((integer_types[itk_int]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2264, __FUNCTION__))->type_common.precision)) | ||||||
2265 | return unsignedp ? unsigned_type_nodeinteger_types[itk_unsigned_int] : integer_type_nodeinteger_types[itk_int]; | ||||||
2266 | |||||||
2267 | if (bits == TYPE_PRECISION (signed_char_type_node)((tree_class_check ((integer_types[itk_signed_char]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2267, __FUNCTION__))->type_common.precision)) | ||||||
2268 | return unsignedp ? unsigned_char_type_nodeinteger_types[itk_unsigned_char] : signed_char_type_nodeinteger_types[itk_signed_char]; | ||||||
2269 | |||||||
2270 | if (bits == TYPE_PRECISION (short_integer_type_node)((tree_class_check ((integer_types[itk_short]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2270, __FUNCTION__))->type_common.precision)) | ||||||
2271 | return unsignedp ? short_unsigned_type_nodeinteger_types[itk_unsigned_short] : short_integer_type_nodeinteger_types[itk_short]; | ||||||
2272 | |||||||
2273 | if (bits == TYPE_PRECISION (long_integer_type_node)((tree_class_check ((integer_types[itk_long]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2273, __FUNCTION__))->type_common.precision)) | ||||||
2274 | return unsignedp ? long_unsigned_type_nodeinteger_types[itk_unsigned_long] : long_integer_type_nodeinteger_types[itk_long]; | ||||||
2275 | |||||||
2276 | if (bits == TYPE_PRECISION (long_long_integer_type_node)((tree_class_check ((integer_types[itk_long_long]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2276, __FUNCTION__))->type_common.precision)) | ||||||
2277 | return (unsignedp ? long_long_unsigned_type_nodeinteger_types[itk_unsigned_long_long] | ||||||
2278 | : long_long_integer_type_nodeinteger_types[itk_long_long]); | ||||||
2279 | |||||||
2280 | for (i = 0; i < NUM_INT_N_ENTS1; i ++) | ||||||
2281 | if (int_n_enabled_p[i] | ||||||
2282 | && bits == int_n_data[i].bitsize) | ||||||
2283 | return (unsignedp ? int_n_trees[i].unsigned_type | ||||||
2284 | : int_n_trees[i].signed_type); | ||||||
2285 | |||||||
2286 | if (bits == TYPE_PRECISION (widest_integer_literal_type_node)((tree_class_check ((c_global_trees[CTI_WIDEST_INT_LIT_TYPE]) , (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2286, __FUNCTION__))->type_common.precision)) | ||||||
2287 | return (unsignedp ? widest_unsigned_literal_type_nodec_global_trees[CTI_WIDEST_UINT_LIT_TYPE] | ||||||
2288 | : widest_integer_literal_type_nodec_global_trees[CTI_WIDEST_INT_LIT_TYPE]); | ||||||
2289 | |||||||
2290 | if (bits <= TYPE_PRECISION (intQI_type_node)((tree_class_check ((global_trees[TI_INTQI_TYPE]), (tcc_type) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2290, __FUNCTION__))->type_common.precision)) | ||||||
2291 | return unsignedp ? unsigned_intQI_type_nodeglobal_trees[TI_UINTQI_TYPE] : intQI_type_nodeglobal_trees[TI_INTQI_TYPE]; | ||||||
2292 | |||||||
2293 | if (bits <= TYPE_PRECISION (intHI_type_node)((tree_class_check ((global_trees[TI_INTHI_TYPE]), (tcc_type) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2293, __FUNCTION__))->type_common.precision)) | ||||||
2294 | return unsignedp ? unsigned_intHI_type_nodeglobal_trees[TI_UINTHI_TYPE] : intHI_type_nodeglobal_trees[TI_INTHI_TYPE]; | ||||||
2295 | |||||||
2296 | if (bits <= TYPE_PRECISION (intSI_type_node)((tree_class_check ((global_trees[TI_INTSI_TYPE]), (tcc_type) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2296, __FUNCTION__))->type_common.precision)) | ||||||
2297 | return unsignedp ? unsigned_intSI_type_nodeglobal_trees[TI_UINTSI_TYPE] : intSI_type_nodeglobal_trees[TI_INTSI_TYPE]; | ||||||
2298 | |||||||
2299 | if (bits <= TYPE_PRECISION (intDI_type_node)((tree_class_check ((global_trees[TI_INTDI_TYPE]), (tcc_type) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2299, __FUNCTION__))->type_common.precision)) | ||||||
2300 | return unsignedp ? unsigned_intDI_type_nodeglobal_trees[TI_UINTDI_TYPE] : intDI_type_nodeglobal_trees[TI_INTDI_TYPE]; | ||||||
2301 | |||||||
2302 | if (bits <= TYPE_PRECISION (widest_integer_literal_type_node)((tree_class_check ((c_global_trees[CTI_WIDEST_INT_LIT_TYPE]) , (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2302, __FUNCTION__))->type_common.precision)) | ||||||
2303 | return (unsignedp ? widest_unsigned_literal_type_nodec_global_trees[CTI_WIDEST_UINT_LIT_TYPE] | ||||||
2304 | : widest_integer_literal_type_nodec_global_trees[CTI_WIDEST_INT_LIT_TYPE]); | ||||||
2305 | |||||||
2306 | return NULL_TREE(tree) __null; | ||||||
2307 | } | ||||||
2308 | |||||||
2309 | /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits | ||||||
2310 | that is unsigned if UNSIGNEDP is nonzero, otherwise signed; | ||||||
2311 | and saturating if SATP is nonzero, otherwise not saturating. */ | ||||||
2312 | |||||||
2313 | tree | ||||||
2314 | c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit, | ||||||
2315 | int unsignedp, int satp) | ||||||
2316 | { | ||||||
2317 | enum mode_class mclass; | ||||||
2318 | if (ibit == 0) | ||||||
2319 | mclass = unsignedp ? MODE_UFRACT : MODE_FRACT; | ||||||
2320 | else | ||||||
2321 | mclass = unsignedp ? MODE_UACCUM : MODE_ACCUM; | ||||||
2322 | |||||||
2323 | opt_scalar_mode opt_mode; | ||||||
2324 | scalar_mode mode; | ||||||
2325 | FOR_EACH_MODE_IN_CLASS (opt_mode, mclass)for (mode_iterator::start (&(opt_mode), mclass); mode_iterator ::iterate_p (&(opt_mode)); mode_iterator::get_next (& (opt_mode))) | ||||||
2326 | { | ||||||
2327 | mode = opt_mode.require (); | ||||||
2328 | if (GET_MODE_IBIT (mode)mode_ibit[mode] >= ibit && GET_MODE_FBIT (mode)mode_fbit[mode] >= fbit) | ||||||
2329 | break; | ||||||
2330 | } | ||||||
2331 | |||||||
2332 | if (!opt_mode.exists (&mode) || !targetm.scalar_mode_supported_p (mode)) | ||||||
2333 | { | ||||||
2334 | sorry ("GCC cannot support operators with integer types and " | ||||||
2335 | "fixed-point types that have too many integral and " | ||||||
2336 | "fractional bits together"); | ||||||
2337 | return NULL_TREE(tree) __null; | ||||||
2338 | } | ||||||
2339 | |||||||
2340 | return c_common_type_for_mode (mode, satp); | ||||||
2341 | } | ||||||
2342 | |||||||
2343 | /* Used for communication between c_common_type_for_mode and | ||||||
2344 | c_register_builtin_type. */ | ||||||
2345 | tree registered_builtin_types; | ||||||
2346 | |||||||
2347 | /* Return a data type that has machine mode MODE. | ||||||
2348 | If the mode is an integer, | ||||||
2349 | then UNSIGNEDP selects between signed and unsigned types. | ||||||
2350 | If the mode is a fixed-point mode, | ||||||
2351 | then UNSIGNEDP selects between saturating and nonsaturating types. */ | ||||||
2352 | |||||||
2353 | tree | ||||||
2354 | c_common_type_for_mode (machine_mode mode, int unsignedp) | ||||||
2355 | { | ||||||
2356 | tree t; | ||||||
2357 | int i; | ||||||
2358 | |||||||
2359 | if (mode == TYPE_MODE (integer_type_node)((((enum tree_code) ((tree_class_check ((integer_types[itk_int ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2359, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (integer_types[itk_int]) : (integer_types[itk_int])->type_common .mode)) | ||||||
2360 | return unsignedp ? unsigned_type_nodeinteger_types[itk_unsigned_int] : integer_type_nodeinteger_types[itk_int]; | ||||||
2361 | |||||||
2362 | if (mode == TYPE_MODE (signed_char_type_node)((((enum tree_code) ((tree_class_check ((integer_types[itk_signed_char ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2362, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (integer_types[itk_signed_char]) : (integer_types[itk_signed_char ])->type_common.mode)) | ||||||
2363 | return unsignedp ? unsigned_char_type_nodeinteger_types[itk_unsigned_char] : signed_char_type_nodeinteger_types[itk_signed_char]; | ||||||
2364 | |||||||
2365 | if (mode == TYPE_MODE (short_integer_type_node)((((enum tree_code) ((tree_class_check ((integer_types[itk_short ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2365, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (integer_types[itk_short]) : (integer_types[itk_short])-> type_common.mode)) | ||||||
2366 | return unsignedp ? short_unsigned_type_nodeinteger_types[itk_unsigned_short] : short_integer_type_nodeinteger_types[itk_short]; | ||||||
2367 | |||||||
2368 | if (mode == TYPE_MODE (long_integer_type_node)((((enum tree_code) ((tree_class_check ((integer_types[itk_long ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2368, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (integer_types[itk_long]) : (integer_types[itk_long])->type_common .mode)) | ||||||
2369 | return unsignedp ? long_unsigned_type_nodeinteger_types[itk_unsigned_long] : long_integer_type_nodeinteger_types[itk_long]; | ||||||
2370 | |||||||
2371 | if (mode == TYPE_MODE (long_long_integer_type_node)((((enum tree_code) ((tree_class_check ((integer_types[itk_long_long ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2371, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (integer_types[itk_long_long]) : (integer_types[itk_long_long ])->type_common.mode)) | ||||||
2372 | return unsignedp ? long_long_unsigned_type_nodeinteger_types[itk_unsigned_long_long] : long_long_integer_type_nodeinteger_types[itk_long_long]; | ||||||
2373 | |||||||
2374 | for (i = 0; i < NUM_INT_N_ENTS1; i ++) | ||||||
2375 | if (int_n_enabled_p[i] | ||||||
2376 | && mode == int_n_data[i].m) | ||||||
2377 | return (unsignedp ? int_n_trees[i].unsigned_type | ||||||
2378 | : int_n_trees[i].signed_type); | ||||||
2379 | |||||||
2380 | if (mode == QImode(scalar_int_mode ((scalar_int_mode::from_int) E_QImode))) | ||||||
2381 | return unsignedp ? unsigned_intQI_type_nodeglobal_trees[TI_UINTQI_TYPE] : intQI_type_nodeglobal_trees[TI_INTQI_TYPE]; | ||||||
2382 | |||||||
2383 | if (mode == HImode(scalar_int_mode ((scalar_int_mode::from_int) E_HImode))) | ||||||
2384 | return unsignedp ? unsigned_intHI_type_nodeglobal_trees[TI_UINTHI_TYPE] : intHI_type_nodeglobal_trees[TI_INTHI_TYPE]; | ||||||
2385 | |||||||
2386 | if (mode == SImode(scalar_int_mode ((scalar_int_mode::from_int) E_SImode))) | ||||||
2387 | return unsignedp ? unsigned_intSI_type_nodeglobal_trees[TI_UINTSI_TYPE] : intSI_type_nodeglobal_trees[TI_INTSI_TYPE]; | ||||||
2388 | |||||||
2389 | if (mode == DImode(scalar_int_mode ((scalar_int_mode::from_int) E_DImode))) | ||||||
2390 | return unsignedp ? unsigned_intDI_type_nodeglobal_trees[TI_UINTDI_TYPE] : intDI_type_nodeglobal_trees[TI_INTDI_TYPE]; | ||||||
2391 | |||||||
2392 | #if HOST_BITS_PER_WIDE_INT64 >= 64 | ||||||
2393 | if (mode == TYPE_MODE (intTI_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_INTTI_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2393, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_INTTI_TYPE]) : (global_trees[TI_INTTI_TYPE] )->type_common.mode)) | ||||||
2394 | return unsignedp ? unsigned_intTI_type_nodeglobal_trees[TI_UINTTI_TYPE] : intTI_type_nodeglobal_trees[TI_INTTI_TYPE]; | ||||||
2395 | #endif | ||||||
2396 | |||||||
2397 | if (mode == TYPE_MODE (float_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_FLOAT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2397, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_FLOAT_TYPE]) : (global_trees[TI_FLOAT_TYPE] )->type_common.mode)) | ||||||
2398 | return float_type_nodeglobal_trees[TI_FLOAT_TYPE]; | ||||||
2399 | |||||||
2400 | if (mode == TYPE_MODE (double_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_DOUBLE_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2400, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_DOUBLE_TYPE]) : (global_trees[TI_DOUBLE_TYPE ])->type_common.mode)) | ||||||
2401 | return double_type_nodeglobal_trees[TI_DOUBLE_TYPE]; | ||||||
2402 | |||||||
2403 | if (mode == TYPE_MODE (long_double_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_LONG_DOUBLE_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2403, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_LONG_DOUBLE_TYPE]) : (global_trees[TI_LONG_DOUBLE_TYPE ])->type_common.mode)) | ||||||
2404 | return long_double_type_nodeglobal_trees[TI_LONG_DOUBLE_TYPE]; | ||||||
2405 | |||||||
2406 | for (i = 0; i < NUM_FLOATN_NX_TYPES(TI_FLOATN_NX_TYPE_LAST - TI_FLOATN_NX_TYPE_FIRST + 1); i++) | ||||||
2407 | if (FLOATN_NX_TYPE_NODE (i)global_trees[TI_FLOATN_NX_TYPE_FIRST + (i)] != NULL_TREE(tree) __null | ||||||
2408 | && mode == TYPE_MODE (FLOATN_NX_TYPE_NODE (i))((((enum tree_code) ((tree_class_check ((global_trees[TI_FLOATN_NX_TYPE_FIRST + (i)]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2408, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_FLOATN_NX_TYPE_FIRST + (i)]) : (global_trees [TI_FLOATN_NX_TYPE_FIRST + (i)])->type_common.mode)) | ||||||
2409 | return FLOATN_NX_TYPE_NODE (i)global_trees[TI_FLOATN_NX_TYPE_FIRST + (i)]; | ||||||
2410 | |||||||
2411 | if (mode == TYPE_MODE (void_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_VOID_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2411, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_VOID_TYPE]) : (global_trees[TI_VOID_TYPE])-> type_common.mode)) | ||||||
2412 | return void_type_nodeglobal_trees[TI_VOID_TYPE]; | ||||||
2413 | |||||||
2414 | if (mode == TYPE_MODE (build_pointer_type (char_type_node))((((enum tree_code) ((tree_class_check ((build_pointer_type ( integer_types[itk_char])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2414, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (build_pointer_type (integer_types[itk_char])) : (build_pointer_type (integer_types[itk_char]))->type_common.mode) | ||||||
2415 | || mode == TYPE_MODE (build_pointer_type (integer_type_node))((((enum tree_code) ((tree_class_check ((build_pointer_type ( integer_types[itk_int])), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2415, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (build_pointer_type (integer_types[itk_int])) : (build_pointer_type (integer_types[itk_int]))->type_common.mode)) | ||||||
2416 | { | ||||||
2417 | unsigned int precision | ||||||
2418 | = GET_MODE_PRECISION (as_a <scalar_int_mode> (mode)); | ||||||
2419 | return (unsignedp | ||||||
2420 | ? make_unsigned_type (precision) | ||||||
2421 | : make_signed_type (precision)); | ||||||
2422 | } | ||||||
2423 | |||||||
2424 | if (COMPLEX_MODE_P (mode)(((enum mode_class) mode_class[mode]) == MODE_COMPLEX_INT || ( (enum mode_class) mode_class[mode]) == MODE_COMPLEX_FLOAT)) | ||||||
2425 | { | ||||||
2426 | machine_mode inner_mode; | ||||||
2427 | tree inner_type; | ||||||
2428 | |||||||
2429 | if (mode == TYPE_MODE (complex_float_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_COMPLEX_FLOAT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2429, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_COMPLEX_FLOAT_TYPE]) : (global_trees[TI_COMPLEX_FLOAT_TYPE ])->type_common.mode)) | ||||||
2430 | return complex_float_type_nodeglobal_trees[TI_COMPLEX_FLOAT_TYPE]; | ||||||
2431 | if (mode == TYPE_MODE (complex_double_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_COMPLEX_DOUBLE_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2431, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_COMPLEX_DOUBLE_TYPE]) : (global_trees[TI_COMPLEX_DOUBLE_TYPE ])->type_common.mode)) | ||||||
2432 | return complex_double_type_nodeglobal_trees[TI_COMPLEX_DOUBLE_TYPE]; | ||||||
2433 | if (mode == TYPE_MODE (complex_long_double_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2433, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]) : (global_trees[ TI_COMPLEX_LONG_DOUBLE_TYPE])->type_common.mode)) | ||||||
2434 | return complex_long_double_type_nodeglobal_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]; | ||||||
2435 | |||||||
2436 | for (i = 0; i < NUM_FLOATN_NX_TYPES(TI_FLOATN_NX_TYPE_LAST - TI_FLOATN_NX_TYPE_FIRST + 1); i++) | ||||||
2437 | if (COMPLEX_FLOATN_NX_TYPE_NODE (i)global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (i)] != NULL_TREE(tree) __null | ||||||
2438 | && mode == TYPE_MODE (COMPLEX_FLOATN_NX_TYPE_NODE (i))((((enum tree_code) ((tree_class_check ((global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (i)]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2438, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (i)]) : (global_trees [TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (i)])->type_common.mode )) | ||||||
2439 | return COMPLEX_FLOATN_NX_TYPE_NODE (i)global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (i)]; | ||||||
2440 | |||||||
2441 | if (mode == TYPE_MODE (complex_integer_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_COMPLEX_INTEGER_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2441, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_COMPLEX_INTEGER_TYPE]) : (global_trees[TI_COMPLEX_INTEGER_TYPE ])->type_common.mode) && !unsignedp) | ||||||
2442 | return complex_integer_type_nodeglobal_trees[TI_COMPLEX_INTEGER_TYPE]; | ||||||
2443 | |||||||
2444 | inner_mode = GET_MODE_INNER (mode)(mode_to_inner (mode)); | ||||||
2445 | inner_type = c_common_type_for_mode (inner_mode, unsignedp); | ||||||
2446 | if (inner_type != NULL_TREE(tree) __null) | ||||||
2447 | return build_complex_type (inner_type); | ||||||
2448 | } | ||||||
2449 | else if (GET_MODE_CLASS (mode)((enum mode_class) mode_class[mode]) == MODE_VECTOR_BOOL | ||||||
2450 | && valid_vector_subparts_p (GET_MODE_NUNITS (mode))) | ||||||
2451 | { | ||||||
2452 | unsigned int elem_bits = vector_element_size (GET_MODE_BITSIZE (mode),(exact_div (GET_MODE_BITSIZE (mode), GET_MODE_NUNITS (mode)). to_constant ()) | ||||||
2453 | GET_MODE_NUNITS (mode))(exact_div (GET_MODE_BITSIZE (mode), GET_MODE_NUNITS (mode)). to_constant ()); | ||||||
2454 | tree bool_type = build_nonstandard_boolean_type (elem_bits); | ||||||
2455 | return build_vector_type_for_mode (bool_type, mode); | ||||||
2456 | } | ||||||
2457 | else if (VECTOR_MODE_P (mode)(((enum mode_class) mode_class[mode]) == MODE_VECTOR_BOOL || ( (enum mode_class) mode_class[mode]) == MODE_VECTOR_INT || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_FLOAT || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_FRACT || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_UFRACT || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_ACCUM || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_UACCUM) | ||||||
2458 | && valid_vector_subparts_p (GET_MODE_NUNITS (mode))) | ||||||
2459 | { | ||||||
2460 | machine_mode inner_mode = GET_MODE_INNER (mode)(mode_to_inner (mode)); | ||||||
2461 | tree inner_type = c_common_type_for_mode (inner_mode, unsignedp); | ||||||
2462 | if (inner_type != NULL_TREE(tree) __null) | ||||||
2463 | return build_vector_type_for_mode (inner_type, mode); | ||||||
2464 | } | ||||||
2465 | |||||||
2466 | if (dfloat32_type_nodeglobal_trees[TI_DFLOAT32_TYPE] != NULL_TREE(tree) __null | ||||||
2467 | && mode == TYPE_MODE (dfloat32_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_DFLOAT32_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2467, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_DFLOAT32_TYPE]) : (global_trees[TI_DFLOAT32_TYPE ])->type_common.mode)) | ||||||
2468 | return dfloat32_type_nodeglobal_trees[TI_DFLOAT32_TYPE]; | ||||||
2469 | if (dfloat64_type_nodeglobal_trees[TI_DFLOAT64_TYPE] != NULL_TREE(tree) __null | ||||||
2470 | && mode == TYPE_MODE (dfloat64_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_DFLOAT64_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2470, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_DFLOAT64_TYPE]) : (global_trees[TI_DFLOAT64_TYPE ])->type_common.mode)) | ||||||
2471 | return dfloat64_type_nodeglobal_trees[TI_DFLOAT64_TYPE]; | ||||||
2472 | if (dfloat128_type_nodeglobal_trees[TI_DFLOAT128_TYPE] != NULL_TREE(tree) __null | ||||||
2473 | && mode == TYPE_MODE (dfloat128_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_DFLOAT128_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2473, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_DFLOAT128_TYPE]) : (global_trees[TI_DFLOAT128_TYPE ])->type_common.mode)) | ||||||
2474 | return dfloat128_type_nodeglobal_trees[TI_DFLOAT128_TYPE]; | ||||||
2475 | |||||||
2476 | if (ALL_SCALAR_FIXED_POINT_MODE_P (mode)(((((enum mode_class) mode_class[mode]) == MODE_FRACT) || ((( enum mode_class) mode_class[mode]) == MODE_ACCUM)) || ((((enum mode_class) mode_class[mode]) == MODE_UFRACT) || (((enum mode_class ) mode_class[mode]) == MODE_UACCUM)))) | ||||||
2477 | { | ||||||
2478 | if (mode == TYPE_MODE (short_fract_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_SFRACT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2478, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_SFRACT_TYPE]) : (global_trees[TI_SFRACT_TYPE ])->type_common.mode)) | ||||||
2479 | return unsignedp ? sat_short_fract_type_nodeglobal_trees[TI_SAT_SFRACT_TYPE] : short_fract_type_nodeglobal_trees[TI_SFRACT_TYPE]; | ||||||
2480 | if (mode == TYPE_MODE (fract_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_FRACT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2480, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_FRACT_TYPE]) : (global_trees[TI_FRACT_TYPE] )->type_common.mode)) | ||||||
2481 | return unsignedp ? sat_fract_type_nodeglobal_trees[TI_SAT_FRACT_TYPE] : fract_type_nodeglobal_trees[TI_FRACT_TYPE]; | ||||||
2482 | if (mode == TYPE_MODE (long_fract_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_LFRACT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2482, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_LFRACT_TYPE]) : (global_trees[TI_LFRACT_TYPE ])->type_common.mode)) | ||||||
2483 | return unsignedp ? sat_long_fract_type_nodeglobal_trees[TI_SAT_LFRACT_TYPE] : long_fract_type_nodeglobal_trees[TI_LFRACT_TYPE]; | ||||||
2484 | if (mode == TYPE_MODE (long_long_fract_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_LLFRACT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2484, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_LLFRACT_TYPE]) : (global_trees[TI_LLFRACT_TYPE ])->type_common.mode)) | ||||||
2485 | return unsignedp ? sat_long_long_fract_type_nodeglobal_trees[TI_SAT_LLFRACT_TYPE] | ||||||
2486 | : long_long_fract_type_nodeglobal_trees[TI_LLFRACT_TYPE]; | ||||||
2487 | |||||||
2488 | if (mode == TYPE_MODE (unsigned_short_fract_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_USFRACT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2488, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_USFRACT_TYPE]) : (global_trees[TI_USFRACT_TYPE ])->type_common.mode)) | ||||||
2489 | return unsignedp ? sat_unsigned_short_fract_type_nodeglobal_trees[TI_SAT_USFRACT_TYPE] | ||||||
2490 | : unsigned_short_fract_type_nodeglobal_trees[TI_USFRACT_TYPE]; | ||||||
2491 | if (mode == TYPE_MODE (unsigned_fract_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_UFRACT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2491, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_UFRACT_TYPE]) : (global_trees[TI_UFRACT_TYPE ])->type_common.mode)) | ||||||
2492 | return unsignedp ? sat_unsigned_fract_type_nodeglobal_trees[TI_SAT_UFRACT_TYPE] | ||||||
2493 | : unsigned_fract_type_nodeglobal_trees[TI_UFRACT_TYPE]; | ||||||
2494 | if (mode == TYPE_MODE (unsigned_long_fract_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_ULFRACT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2494, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_ULFRACT_TYPE]) : (global_trees[TI_ULFRACT_TYPE ])->type_common.mode)) | ||||||
2495 | return unsignedp ? sat_unsigned_long_fract_type_nodeglobal_trees[TI_SAT_ULFRACT_TYPE] | ||||||
2496 | : unsigned_long_fract_type_nodeglobal_trees[TI_ULFRACT_TYPE]; | ||||||
2497 | if (mode == TYPE_MODE (unsigned_long_long_fract_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_ULLFRACT_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2497, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_ULLFRACT_TYPE]) : (global_trees[TI_ULLFRACT_TYPE ])->type_common.mode)) | ||||||
2498 | return unsignedp ? sat_unsigned_long_long_fract_type_nodeglobal_trees[TI_SAT_ULLFRACT_TYPE] | ||||||
2499 | : unsigned_long_long_fract_type_nodeglobal_trees[TI_ULLFRACT_TYPE]; | ||||||
2500 | |||||||
2501 | if (mode == TYPE_MODE (short_accum_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_SACCUM_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2501, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_SACCUM_TYPE]) : (global_trees[TI_SACCUM_TYPE ])->type_common.mode)) | ||||||
2502 | return unsignedp ? sat_short_accum_type_nodeglobal_trees[TI_SAT_SACCUM_TYPE] : short_accum_type_nodeglobal_trees[TI_SACCUM_TYPE]; | ||||||
2503 | if (mode == TYPE_MODE (accum_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_ACCUM_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2503, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_ACCUM_TYPE]) : (global_trees[TI_ACCUM_TYPE] )->type_common.mode)) | ||||||
2504 | return unsignedp ? sat_accum_type_nodeglobal_trees[TI_SAT_ACCUM_TYPE] : accum_type_nodeglobal_trees[TI_ACCUM_TYPE]; | ||||||
2505 | if (mode == TYPE_MODE (long_accum_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_LACCUM_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2505, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_LACCUM_TYPE]) : (global_trees[TI_LACCUM_TYPE ])->type_common.mode)) | ||||||
2506 | return unsignedp ? sat_long_accum_type_nodeglobal_trees[TI_SAT_LACCUM_TYPE] : long_accum_type_nodeglobal_trees[TI_LACCUM_TYPE]; | ||||||
2507 | if (mode == TYPE_MODE (long_long_accum_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_LLACCUM_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2507, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_LLACCUM_TYPE]) : (global_trees[TI_LLACCUM_TYPE ])->type_common.mode)) | ||||||
2508 | return unsignedp ? sat_long_long_accum_type_nodeglobal_trees[TI_SAT_LLACCUM_TYPE] | ||||||
2509 | : long_long_accum_type_nodeglobal_trees[TI_LLACCUM_TYPE]; | ||||||
2510 | |||||||
2511 | if (mode == TYPE_MODE (unsigned_short_accum_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_USACCUM_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2511, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_USACCUM_TYPE]) : (global_trees[TI_USACCUM_TYPE ])->type_common.mode)) | ||||||
2512 | return unsignedp ? sat_unsigned_short_accum_type_nodeglobal_trees[TI_SAT_USACCUM_TYPE] | ||||||
2513 | : unsigned_short_accum_type_nodeglobal_trees[TI_USACCUM_TYPE]; | ||||||
2514 | if (mode == TYPE_MODE (unsigned_accum_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_UACCUM_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2514, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_UACCUM_TYPE]) : (global_trees[TI_UACCUM_TYPE ])->type_common.mode)) | ||||||
2515 | return unsignedp ? sat_unsigned_accum_type_nodeglobal_trees[TI_SAT_UACCUM_TYPE] | ||||||
2516 | : unsigned_accum_type_nodeglobal_trees[TI_UACCUM_TYPE]; | ||||||
2517 | if (mode == TYPE_MODE (unsigned_long_accum_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_ULACCUM_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2517, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_ULACCUM_TYPE]) : (global_trees[TI_ULACCUM_TYPE ])->type_common.mode)) | ||||||
2518 | return unsignedp ? sat_unsigned_long_accum_type_nodeglobal_trees[TI_SAT_ULACCUM_TYPE] | ||||||
2519 | : unsigned_long_accum_type_nodeglobal_trees[TI_ULACCUM_TYPE]; | ||||||
2520 | if (mode == TYPE_MODE (unsigned_long_long_accum_type_node)((((enum tree_code) ((tree_class_check ((global_trees[TI_ULLACCUM_TYPE ]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2520, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (global_trees[TI_ULLACCUM_TYPE]) : (global_trees[TI_ULLACCUM_TYPE ])->type_common.mode)) | ||||||
2521 | return unsignedp ? sat_unsigned_long_long_accum_type_nodeglobal_trees[TI_SAT_ULLACCUM_TYPE] | ||||||
2522 | : unsigned_long_long_accum_type_nodeglobal_trees[TI_ULLACCUM_TYPE]; | ||||||
2523 | |||||||
2524 | if (mode == QQmode(scalar_mode ((scalar_mode::from_int) E_QQmode))) | ||||||
2525 | return unsignedp ? sat_qq_type_nodeglobal_trees[TI_SAT_QQ_TYPE] : qq_type_nodeglobal_trees[TI_QQ_TYPE]; | ||||||
2526 | if (mode == HQmode(scalar_mode ((scalar_mode::from_int) E_HQmode))) | ||||||
2527 | return unsignedp ? sat_hq_type_nodeglobal_trees[TI_SAT_HQ_TYPE] : hq_type_nodeglobal_trees[TI_HQ_TYPE]; | ||||||
2528 | if (mode == SQmode(scalar_mode ((scalar_mode::from_int) E_SQmode))) | ||||||
2529 | return unsignedp ? sat_sq_type_nodeglobal_trees[TI_SAT_SQ_TYPE] : sq_type_nodeglobal_trees[TI_SQ_TYPE]; | ||||||
2530 | if (mode == DQmode(scalar_mode ((scalar_mode::from_int) E_DQmode))) | ||||||
2531 | return unsignedp ? sat_dq_type_nodeglobal_trees[TI_SAT_DQ_TYPE] : dq_type_nodeglobal_trees[TI_DQ_TYPE]; | ||||||
2532 | if (mode == TQmode(scalar_mode ((scalar_mode::from_int) E_TQmode))) | ||||||
2533 | return unsignedp ? sat_tq_type_nodeglobal_trees[TI_SAT_TQ_TYPE] : tq_type_nodeglobal_trees[TI_TQ_TYPE]; | ||||||
2534 | |||||||
2535 | if (mode == UQQmode(scalar_mode ((scalar_mode::from_int) E_UQQmode))) | ||||||
2536 | return unsignedp ? sat_uqq_type_nodeglobal_trees[TI_SAT_UQQ_TYPE] : uqq_type_nodeglobal_trees[TI_UQQ_TYPE]; | ||||||
2537 | if (mode == UHQmode(scalar_mode ((scalar_mode::from_int) E_UHQmode))) | ||||||
2538 | return unsignedp ? sat_uhq_type_nodeglobal_trees[TI_SAT_UHQ_TYPE] : uhq_type_nodeglobal_trees[TI_UHQ_TYPE]; | ||||||
2539 | if (mode == USQmode(scalar_mode ((scalar_mode::from_int) E_USQmode))) | ||||||
2540 | return unsignedp ? sat_usq_type_nodeglobal_trees[TI_SAT_USQ_TYPE] : usq_type_nodeglobal_trees[TI_USQ_TYPE]; | ||||||
2541 | if (mode == UDQmode(scalar_mode ((scalar_mode::from_int) E_UDQmode))) | ||||||
2542 | return unsignedp ? sat_udq_type_nodeglobal_trees[TI_SAT_UDQ_TYPE] : udq_type_nodeglobal_trees[TI_UDQ_TYPE]; | ||||||
2543 | if (mode == UTQmode(scalar_mode ((scalar_mode::from_int) E_UTQmode))) | ||||||
2544 | return unsignedp ? sat_utq_type_nodeglobal_trees[TI_SAT_UTQ_TYPE] : utq_type_nodeglobal_trees[TI_UTQ_TYPE]; | ||||||
2545 | |||||||
2546 | if (mode == HAmode(scalar_mode ((scalar_mode::from_int) E_HAmode))) | ||||||
2547 | return unsignedp ? sat_ha_type_nodeglobal_trees[TI_SAT_HA_TYPE] : ha_type_nodeglobal_trees[TI_HA_TYPE]; | ||||||
2548 | if (mode == SAmode(scalar_mode ((scalar_mode::from_int) E_SAmode))) | ||||||
2549 | return unsignedp ? sat_sa_type_nodeglobal_trees[TI_SAT_SA_TYPE] : sa_type_nodeglobal_trees[TI_SA_TYPE]; | ||||||
2550 | if (mode == DAmode(scalar_mode ((scalar_mode::from_int) E_DAmode))) | ||||||
2551 | return unsignedp ? sat_da_type_nodeglobal_trees[TI_SAT_DA_TYPE] : da_type_nodeglobal_trees[TI_DA_TYPE]; | ||||||
2552 | if (mode == TAmode(scalar_mode ((scalar_mode::from_int) E_TAmode))) | ||||||
2553 | return unsignedp ? sat_ta_type_nodeglobal_trees[TI_SAT_TA_TYPE] : ta_type_nodeglobal_trees[TI_TA_TYPE]; | ||||||
2554 | |||||||
2555 | if (mode == UHAmode(scalar_mode ((scalar_mode::from_int) E_UHAmode))) | ||||||
2556 | return unsignedp ? sat_uha_type_nodeglobal_trees[TI_SAT_UHA_TYPE] : uha_type_nodeglobal_trees[TI_UHA_TYPE]; | ||||||
2557 | if (mode == USAmode(scalar_mode ((scalar_mode::from_int) E_USAmode))) | ||||||
2558 | return unsignedp ? sat_usa_type_nodeglobal_trees[TI_SAT_USA_TYPE] : usa_type_nodeglobal_trees[TI_USA_TYPE]; | ||||||
2559 | if (mode == UDAmode(scalar_mode ((scalar_mode::from_int) E_UDAmode))) | ||||||
2560 | return unsignedp ? sat_uda_type_nodeglobal_trees[TI_SAT_UDA_TYPE] : uda_type_nodeglobal_trees[TI_UDA_TYPE]; | ||||||
2561 | if (mode == UTAmode(scalar_mode ((scalar_mode::from_int) E_UTAmode))) | ||||||
2562 | return unsignedp ? sat_uta_type_nodeglobal_trees[TI_SAT_UTA_TYPE] : uta_type_nodeglobal_trees[TI_UTA_TYPE]; | ||||||
2563 | } | ||||||
2564 | |||||||
2565 | for (t = registered_builtin_types; t; t = TREE_CHAIN (t)((contains_struct_check ((t), (TS_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2565, __FUNCTION__))->common.chain)) | ||||||
2566 | { | ||||||
2567 | tree type = TREE_VALUE (t)((tree_check ((t), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2567, __FUNCTION__, (TREE_LIST)))->list.value); | ||||||
2568 | if (TYPE_MODE (type)((((enum tree_code) ((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2568, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (type) : (type)->type_common.mode) == mode | ||||||
2569 | && VECTOR_TYPE_P (type)(((enum tree_code) (type)->base.code) == VECTOR_TYPE) == VECTOR_MODE_P (mode)(((enum mode_class) mode_class[mode]) == MODE_VECTOR_BOOL || ( (enum mode_class) mode_class[mode]) == MODE_VECTOR_INT || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_FLOAT || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_FRACT || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_UFRACT || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_ACCUM || ((enum mode_class) mode_class[mode]) == MODE_VECTOR_UACCUM) | ||||||
2570 | && !!unsignedp == !!TYPE_UNSIGNED (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2570, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
2571 | return type; | ||||||
2572 | } | ||||||
2573 | return NULL_TREE(tree) __null; | ||||||
2574 | } | ||||||
2575 | |||||||
2576 | tree | ||||||
2577 | c_common_unsigned_type (tree type) | ||||||
2578 | { | ||||||
2579 | return c_common_signed_or_unsigned_type (1, type); | ||||||
2580 | } | ||||||
2581 | |||||||
2582 | /* Return a signed type the same as TYPE in other respects. */ | ||||||
2583 | |||||||
2584 | tree | ||||||
2585 | c_common_signed_type (tree type) | ||||||
2586 | { | ||||||
2587 | return c_common_signed_or_unsigned_type (0, type); | ||||||
2588 | } | ||||||
2589 | |||||||
2590 | /* Return a type the same as TYPE except unsigned or | ||||||
2591 | signed according to UNSIGNEDP. */ | ||||||
2592 | |||||||
2593 | tree | ||||||
2594 | c_common_signed_or_unsigned_type (int unsignedp, tree type) | ||||||
2595 | { | ||||||
2596 | tree type1; | ||||||
2597 | int i; | ||||||
2598 | |||||||
2599 | /* This block of code emulates the behavior of the old | ||||||
2600 | c_common_unsigned_type. In particular, it returns | ||||||
2601 | long_unsigned_type_node if passed a long, even when a int would | ||||||
2602 | have the same size. This is necessary for warnings to work | ||||||
2603 | correctly in archs where sizeof(int) == sizeof(long) */ | ||||||
2604 | |||||||
2605 | type1 = TYPE_MAIN_VARIANT (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2605, __FUNCTION__))->type_common.main_variant); | ||||||
2606 | if (type1 == signed_char_type_nodeinteger_types[itk_signed_char] || type1 == char_type_nodeinteger_types[itk_char] || type1 == unsigned_char_type_nodeinteger_types[itk_unsigned_char]) | ||||||
2607 | return unsignedp ? unsigned_char_type_nodeinteger_types[itk_unsigned_char] : signed_char_type_nodeinteger_types[itk_signed_char]; | ||||||
2608 | if (type1 == integer_type_nodeinteger_types[itk_int] || type1 == unsigned_type_nodeinteger_types[itk_unsigned_int]) | ||||||
2609 | return unsignedp ? unsigned_type_nodeinteger_types[itk_unsigned_int] : integer_type_nodeinteger_types[itk_int]; | ||||||
2610 | if (type1 == short_integer_type_nodeinteger_types[itk_short] || type1 == short_unsigned_type_nodeinteger_types[itk_unsigned_short]) | ||||||
2611 | return unsignedp ? short_unsigned_type_nodeinteger_types[itk_unsigned_short] : short_integer_type_nodeinteger_types[itk_short]; | ||||||
2612 | if (type1 == long_integer_type_nodeinteger_types[itk_long] || type1 == long_unsigned_type_nodeinteger_types[itk_unsigned_long]) | ||||||
2613 | return unsignedp ? long_unsigned_type_nodeinteger_types[itk_unsigned_long] : long_integer_type_nodeinteger_types[itk_long]; | ||||||
2614 | if (type1 == long_long_integer_type_nodeinteger_types[itk_long_long] || type1 == long_long_unsigned_type_nodeinteger_types[itk_unsigned_long_long]) | ||||||
2615 | return unsignedp ? long_long_unsigned_type_nodeinteger_types[itk_unsigned_long_long] : long_long_integer_type_nodeinteger_types[itk_long_long]; | ||||||
2616 | |||||||
2617 | for (i = 0; i < NUM_INT_N_ENTS1; i ++) | ||||||
2618 | if (int_n_enabled_p[i] | ||||||
2619 | && (type1 == int_n_trees[i].unsigned_type | ||||||
2620 | || type1 == int_n_trees[i].signed_type)) | ||||||
2621 | return (unsignedp ? int_n_trees[i].unsigned_type | ||||||
2622 | : int_n_trees[i].signed_type); | ||||||
2623 | |||||||
2624 | #if HOST_BITS_PER_WIDE_INT64 >= 64 | ||||||
2625 | if (type1 == intTI_type_nodeglobal_trees[TI_INTTI_TYPE] || type1 == unsigned_intTI_type_nodeglobal_trees[TI_UINTTI_TYPE]) | ||||||
2626 | return unsignedp ? unsigned_intTI_type_nodeglobal_trees[TI_UINTTI_TYPE] : intTI_type_nodeglobal_trees[TI_INTTI_TYPE]; | ||||||
2627 | #endif | ||||||
2628 | if (type1 == intDI_type_nodeglobal_trees[TI_INTDI_TYPE] || type1 == unsigned_intDI_type_nodeglobal_trees[TI_UINTDI_TYPE]) | ||||||
2629 | return unsignedp ? unsigned_intDI_type_nodeglobal_trees[TI_UINTDI_TYPE] : intDI_type_nodeglobal_trees[TI_INTDI_TYPE]; | ||||||
2630 | if (type1 == intSI_type_nodeglobal_trees[TI_INTSI_TYPE] || type1 == unsigned_intSI_type_nodeglobal_trees[TI_UINTSI_TYPE]) | ||||||
2631 | return unsignedp ? unsigned_intSI_type_nodeglobal_trees[TI_UINTSI_TYPE] : intSI_type_nodeglobal_trees[TI_INTSI_TYPE]; | ||||||
2632 | if (type1 == intHI_type_nodeglobal_trees[TI_INTHI_TYPE] || type1 == unsigned_intHI_type_nodeglobal_trees[TI_UINTHI_TYPE]) | ||||||
2633 | return unsignedp ? unsigned_intHI_type_nodeglobal_trees[TI_UINTHI_TYPE] : intHI_type_nodeglobal_trees[TI_INTHI_TYPE]; | ||||||
2634 | if (type1 == intQI_type_nodeglobal_trees[TI_INTQI_TYPE] || type1 == unsigned_intQI_type_nodeglobal_trees[TI_UINTQI_TYPE]) | ||||||
2635 | return unsignedp ? unsigned_intQI_type_nodeglobal_trees[TI_UINTQI_TYPE] : intQI_type_nodeglobal_trees[TI_INTQI_TYPE]; | ||||||
2636 | |||||||
2637 | #define C_COMMON_FIXED_TYPES(NAME)if (type1 == short_NAME_type_node || type1 == unsigned_short_NAME_type_node ) return unsignedp ? unsigned_short_NAME_type_node : short_NAME_type_node ; if (type1 == NAME_type_node || type1 == unsigned_NAME_type_node ) return unsignedp ? unsigned_NAME_type_node : NAME_type_node ; if (type1 == long_NAME_type_node || type1 == unsigned_long_NAME_type_node ) return unsignedp ? unsigned_long_NAME_type_node : long_NAME_type_node ; if (type1 == long_long_NAME_type_node || type1 == unsigned_long_long_NAME_type_node ) return unsignedp ? unsigned_long_long_NAME_type_node : long_long_NAME_type_node ; \ | ||||||
2638 | if (type1 == short_ ## NAME ## _type_node \ | ||||||
2639 | || type1 == unsigned_short_ ## NAME ## _type_node) \ | ||||||
2640 | return unsignedp ? unsigned_short_ ## NAME ## _type_node \ | ||||||
2641 | : short_ ## NAME ## _type_node; \ | ||||||
2642 | if (type1 == NAME ## _type_node \ | ||||||
2643 | || type1 == unsigned_ ## NAME ## _type_node) \ | ||||||
2644 | return unsignedp ? unsigned_ ## NAME ## _type_node \ | ||||||
2645 | : NAME ## _type_node; \ | ||||||
2646 | if (type1 == long_ ## NAME ## _type_node \ | ||||||
2647 | || type1 == unsigned_long_ ## NAME ## _type_node) \ | ||||||
2648 | return unsignedp ? unsigned_long_ ## NAME ## _type_node \ | ||||||
2649 | : long_ ## NAME ## _type_node; \ | ||||||
2650 | if (type1 == long_long_ ## NAME ## _type_node \ | ||||||
2651 | || type1 == unsigned_long_long_ ## NAME ## _type_node) \ | ||||||
2652 | return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \ | ||||||
2653 | : long_long_ ## NAME ## _type_node; | ||||||
2654 | |||||||
2655 | #define C_COMMON_FIXED_MODE_TYPES(NAME)if (type1 == NAME_type_node || type1 == uNAME_type_node) return unsignedp ? uNAME_type_node : NAME_type_node; \ | ||||||
2656 | if (type1 == NAME ## _type_node \ | ||||||
2657 | || type1 == u ## NAME ## _type_node) \ | ||||||
2658 | return unsignedp ? u ## NAME ## _type_node \ | ||||||
2659 | : NAME ## _type_node; | ||||||
2660 | |||||||
2661 | #define C_COMMON_FIXED_TYPES_SAT(NAME)if (type1 == sat_short_NAME_type_node || type1 == sat_unsigned_short_NAME_type_node ) return unsignedp ? sat_unsigned_short_NAME_type_node : sat_short_NAME_type_node ; if (type1 == sat_NAME_type_node || type1 == sat_unsigned_NAME_type_node ) return unsignedp ? sat_unsigned_NAME_type_node : sat_NAME_type_node ; if (type1 == sat_long_NAME_type_node || type1 == sat_unsigned_long_NAME_type_node ) return unsignedp ? sat_unsigned_long_NAME_type_node : sat_long_NAME_type_node ; if (type1 == sat_long_long_NAME_type_node || type1 == sat_unsigned_long_long_NAME_type_node ) return unsignedp ? sat_unsigned_long_long_NAME_type_node : sat_long_long_NAME_type_node ; \ | ||||||
2662 | if (type1 == sat_ ## short_ ## NAME ## _type_node \ | ||||||
2663 | || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \ | ||||||
2664 | return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \ | ||||||
2665 | : sat_ ## short_ ## NAME ## _type_node; \ | ||||||
2666 | if (type1 == sat_ ## NAME ## _type_node \ | ||||||
2667 | || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \ | ||||||
2668 | return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \ | ||||||
2669 | : sat_ ## NAME ## _type_node; \ | ||||||
2670 | if (type1 == sat_ ## long_ ## NAME ## _type_node \ | ||||||
2671 | || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \ | ||||||
2672 | return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \ | ||||||
2673 | : sat_ ## long_ ## NAME ## _type_node; \ | ||||||
2674 | if (type1 == sat_ ## long_long_ ## NAME ## _type_node \ | ||||||
2675 | || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \ | ||||||
2676 | return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \ | ||||||
2677 | : sat_ ## long_long_ ## NAME ## _type_node; | ||||||
2678 | |||||||
2679 | #define C_COMMON_FIXED_MODE_TYPES_SAT(NAME)if (type1 == sat_NAME_type_node || type1 == sat_uNAME_type_node ) return unsignedp ? sat_uNAME_type_node : sat_NAME_type_node ; \ | ||||||
2680 | if (type1 == sat_ ## NAME ## _type_node \ | ||||||
2681 | || type1 == sat_ ## u ## NAME ## _type_node) \ | ||||||
2682 | return unsignedp ? sat_ ## u ## NAME ## _type_node \ | ||||||
2683 | : sat_ ## NAME ## _type_node; | ||||||
2684 | |||||||
2685 | C_COMMON_FIXED_TYPES (fract)if (type1 == global_trees[TI_SFRACT_TYPE] || type1 == global_trees [TI_USFRACT_TYPE]) return unsignedp ? global_trees[TI_USFRACT_TYPE ] : global_trees[TI_SFRACT_TYPE]; if (type1 == global_trees[TI_FRACT_TYPE ] || type1 == global_trees[TI_UFRACT_TYPE]) return unsignedp ? global_trees[TI_UFRACT_TYPE] : global_trees[TI_FRACT_TYPE]; if (type1 == global_trees[TI_LFRACT_TYPE] || type1 == global_trees [TI_ULFRACT_TYPE]) return unsignedp ? global_trees[TI_ULFRACT_TYPE ] : global_trees[TI_LFRACT_TYPE]; if (type1 == global_trees[TI_LLFRACT_TYPE ] || type1 == global_trees[TI_ULLFRACT_TYPE]) return unsignedp ? global_trees[TI_ULLFRACT_TYPE] : global_trees[TI_LLFRACT_TYPE ];; | ||||||
2686 | C_COMMON_FIXED_TYPES_SAT (fract)if (type1 == global_trees[TI_SAT_SFRACT_TYPE] || type1 == global_trees [TI_SAT_USFRACT_TYPE]) return unsignedp ? global_trees[TI_SAT_USFRACT_TYPE ] : global_trees[TI_SAT_SFRACT_TYPE]; if (type1 == global_trees [TI_SAT_FRACT_TYPE] || type1 == global_trees[TI_SAT_UFRACT_TYPE ]) return unsignedp ? global_trees[TI_SAT_UFRACT_TYPE] : global_trees [TI_SAT_FRACT_TYPE]; if (type1 == global_trees[TI_SAT_LFRACT_TYPE ] || type1 == global_trees[TI_SAT_ULFRACT_TYPE]) return unsignedp ? global_trees[TI_SAT_ULFRACT_TYPE] : global_trees[TI_SAT_LFRACT_TYPE ]; if (type1 == global_trees[TI_SAT_LLFRACT_TYPE] || type1 == global_trees[TI_SAT_ULLFRACT_TYPE]) return unsignedp ? global_trees [TI_SAT_ULLFRACT_TYPE] : global_trees[TI_SAT_LLFRACT_TYPE];; | ||||||
2687 | C_COMMON_FIXED_TYPES (accum)if (type1 == global_trees[TI_SACCUM_TYPE] || type1 == global_trees [TI_USACCUM_TYPE]) return unsignedp ? global_trees[TI_USACCUM_TYPE ] : global_trees[TI_SACCUM_TYPE]; if (type1 == global_trees[TI_ACCUM_TYPE ] || type1 == global_trees[TI_UACCUM_TYPE]) return unsignedp ? global_trees[TI_UACCUM_TYPE] : global_trees[TI_ACCUM_TYPE]; if (type1 == global_trees[TI_LACCUM_TYPE] || type1 == global_trees [TI_ULACCUM_TYPE]) return unsignedp ? global_trees[TI_ULACCUM_TYPE ] : global_trees[TI_LACCUM_TYPE]; if (type1 == global_trees[TI_LLACCUM_TYPE ] || type1 == global_trees[TI_ULLACCUM_TYPE]) return unsignedp ? global_trees[TI_ULLACCUM_TYPE] : global_trees[TI_LLACCUM_TYPE ];; | ||||||
2688 | C_COMMON_FIXED_TYPES_SAT (accum)if (type1 == global_trees[TI_SAT_SACCUM_TYPE] || type1 == global_trees [TI_SAT_USACCUM_TYPE]) return unsignedp ? global_trees[TI_SAT_USACCUM_TYPE ] : global_trees[TI_SAT_SACCUM_TYPE]; if (type1 == global_trees [TI_SAT_ACCUM_TYPE] || type1 == global_trees[TI_SAT_UACCUM_TYPE ]) return unsignedp ? global_trees[TI_SAT_UACCUM_TYPE] : global_trees [TI_SAT_ACCUM_TYPE]; if (type1 == global_trees[TI_SAT_LACCUM_TYPE ] || type1 == global_trees[TI_SAT_ULACCUM_TYPE]) return unsignedp ? global_trees[TI_SAT_ULACCUM_TYPE] : global_trees[TI_SAT_LACCUM_TYPE ]; if (type1 == global_trees[TI_SAT_LLACCUM_TYPE] || type1 == global_trees[TI_SAT_ULLACCUM_TYPE]) return unsignedp ? global_trees [TI_SAT_ULLACCUM_TYPE] : global_trees[TI_SAT_LLACCUM_TYPE];; | ||||||
2689 | |||||||
2690 | C_COMMON_FIXED_MODE_TYPES (qq)if (type1 == global_trees[TI_QQ_TYPE] || type1 == global_trees [TI_UQQ_TYPE]) return unsignedp ? global_trees[TI_UQQ_TYPE] : global_trees[TI_QQ_TYPE];; | ||||||
2691 | C_COMMON_FIXED_MODE_TYPES (hq)if (type1 == global_trees[TI_HQ_TYPE] || type1 == global_trees [TI_UHQ_TYPE]) return unsignedp ? global_trees[TI_UHQ_TYPE] : global_trees[TI_HQ_TYPE];; | ||||||
2692 | C_COMMON_FIXED_MODE_TYPES (sq)if (type1 == global_trees[TI_SQ_TYPE] || type1 == global_trees [TI_USQ_TYPE]) return unsignedp ? global_trees[TI_USQ_TYPE] : global_trees[TI_SQ_TYPE];; | ||||||
2693 | C_COMMON_FIXED_MODE_TYPES (dq)if (type1 == global_trees[TI_DQ_TYPE] || type1 == global_trees [TI_UDQ_TYPE]) return unsignedp ? global_trees[TI_UDQ_TYPE] : global_trees[TI_DQ_TYPE];; | ||||||
2694 | C_COMMON_FIXED_MODE_TYPES (tq)if (type1 == global_trees[TI_TQ_TYPE] || type1 == global_trees [TI_UTQ_TYPE]) return unsignedp ? global_trees[TI_UTQ_TYPE] : global_trees[TI_TQ_TYPE];; | ||||||
2695 | C_COMMON_FIXED_MODE_TYPES_SAT (qq)if (type1 == global_trees[TI_SAT_QQ_TYPE] || type1 == global_trees [TI_SAT_UQQ_TYPE]) return unsignedp ? global_trees[TI_SAT_UQQ_TYPE ] : global_trees[TI_SAT_QQ_TYPE];; | ||||||
2696 | C_COMMON_FIXED_MODE_TYPES_SAT (hq)if (type1 == global_trees[TI_SAT_HQ_TYPE] || type1 == global_trees [TI_SAT_UHQ_TYPE]) return unsignedp ? global_trees[TI_SAT_UHQ_TYPE ] : global_trees[TI_SAT_HQ_TYPE];; | ||||||
2697 | C_COMMON_FIXED_MODE_TYPES_SAT (sq)if (type1 == global_trees[TI_SAT_SQ_TYPE] || type1 == global_trees [TI_SAT_USQ_TYPE]) return unsignedp ? global_trees[TI_SAT_USQ_TYPE ] : global_trees[TI_SAT_SQ_TYPE];; | ||||||
2698 | C_COMMON_FIXED_MODE_TYPES_SAT (dq)if (type1 == global_trees[TI_SAT_DQ_TYPE] || type1 == global_trees [TI_SAT_UDQ_TYPE]) return unsignedp ? global_trees[TI_SAT_UDQ_TYPE ] : global_trees[TI_SAT_DQ_TYPE];; | ||||||
2699 | C_COMMON_FIXED_MODE_TYPES_SAT (tq)if (type1 == global_trees[TI_SAT_TQ_TYPE] || type1 == global_trees [TI_SAT_UTQ_TYPE]) return unsignedp ? global_trees[TI_SAT_UTQ_TYPE ] : global_trees[TI_SAT_TQ_TYPE];; | ||||||
2700 | C_COMMON_FIXED_MODE_TYPES (ha)if (type1 == global_trees[TI_HA_TYPE] || type1 == global_trees [TI_UHA_TYPE]) return unsignedp ? global_trees[TI_UHA_TYPE] : global_trees[TI_HA_TYPE];; | ||||||
2701 | C_COMMON_FIXED_MODE_TYPES (sa)if (type1 == global_trees[TI_SA_TYPE] || type1 == global_trees [TI_USA_TYPE]) return unsignedp ? global_trees[TI_USA_TYPE] : global_trees[TI_SA_TYPE];; | ||||||
2702 | C_COMMON_FIXED_MODE_TYPES (da)if (type1 == global_trees[TI_DA_TYPE] || type1 == global_trees [TI_UDA_TYPE]) return unsignedp ? global_trees[TI_UDA_TYPE] : global_trees[TI_DA_TYPE];; | ||||||
2703 | C_COMMON_FIXED_MODE_TYPES (ta)if (type1 == global_trees[TI_TA_TYPE] || type1 == global_trees [TI_UTA_TYPE]) return unsignedp ? global_trees[TI_UTA_TYPE] : global_trees[TI_TA_TYPE];; | ||||||
2704 | C_COMMON_FIXED_MODE_TYPES_SAT (ha)if (type1 == global_trees[TI_SAT_HA_TYPE] || type1 == global_trees [TI_SAT_UHA_TYPE]) return unsignedp ? global_trees[TI_SAT_UHA_TYPE ] : global_trees[TI_SAT_HA_TYPE];; | ||||||
2705 | C_COMMON_FIXED_MODE_TYPES_SAT (sa)if (type1 == global_trees[TI_SAT_SA_TYPE] || type1 == global_trees [TI_SAT_USA_TYPE]) return unsignedp ? global_trees[TI_SAT_USA_TYPE ] : global_trees[TI_SAT_SA_TYPE];; | ||||||
2706 | C_COMMON_FIXED_MODE_TYPES_SAT (da)if (type1 == global_trees[TI_SAT_DA_TYPE] || type1 == global_trees [TI_SAT_UDA_TYPE]) return unsignedp ? global_trees[TI_SAT_UDA_TYPE ] : global_trees[TI_SAT_DA_TYPE];; | ||||||
2707 | C_COMMON_FIXED_MODE_TYPES_SAT (ta)if (type1 == global_trees[TI_SAT_TA_TYPE] || type1 == global_trees [TI_SAT_UTA_TYPE]) return unsignedp ? global_trees[TI_SAT_UTA_TYPE ] : global_trees[TI_SAT_TA_TYPE];; | ||||||
2708 | |||||||
2709 | /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not | ||||||
2710 | the precision; they have precision set to match their range, but | ||||||
2711 | may use a wider mode to match an ABI. If we change modes, we may | ||||||
2712 | wind up with bad conversions. For INTEGER_TYPEs in C, must check | ||||||
2713 | the precision as well, so as to yield correct results for | ||||||
2714 | bit-field types. C++ does not have these separate bit-field | ||||||
2715 | types, and producing a signed or unsigned variant of an | ||||||
2716 | ENUMERAL_TYPE may cause other problems as well. */ | ||||||
2717 | |||||||
2718 | if (!INTEGRAL_TYPE_P (type)(((enum tree_code) (type)->base.code) == ENUMERAL_TYPE || ( (enum tree_code) (type)->base.code) == BOOLEAN_TYPE || ((enum tree_code) (type)->base.code) == INTEGER_TYPE) | ||||||
2719 | || TYPE_UNSIGNED (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2719, __FUNCTION__))->base.u.bits.unsigned_flag) == unsignedp) | ||||||
2720 | return type; | ||||||
2721 | |||||||
2722 | #define TYPE_OK(node) \ | ||||||
2723 | (TYPE_MODE (type)((((enum tree_code) ((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2723, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (type) : (type)->type_common.mode) == TYPE_MODE (node)((((enum tree_code) ((tree_class_check ((node), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2723, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (node) : (node)->type_common.mode) \ | ||||||
2724 | && TYPE_PRECISION (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2724, __FUNCTION__))->type_common.precision) == TYPE_PRECISION (node)((tree_class_check ((node), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2724, __FUNCTION__))->type_common.precision)) | ||||||
2725 | if (TYPE_OK (signed_char_type_nodeinteger_types[itk_signed_char])) | ||||||
2726 | return unsignedp ? unsigned_char_type_nodeinteger_types[itk_unsigned_char] : signed_char_type_nodeinteger_types[itk_signed_char]; | ||||||
2727 | if (TYPE_OK (integer_type_nodeinteger_types[itk_int])) | ||||||
2728 | return unsignedp ? unsigned_type_nodeinteger_types[itk_unsigned_int] : integer_type_nodeinteger_types[itk_int]; | ||||||
2729 | if (TYPE_OK (short_integer_type_nodeinteger_types[itk_short])) | ||||||
2730 | return unsignedp ? short_unsigned_type_nodeinteger_types[itk_unsigned_short] : short_integer_type_nodeinteger_types[itk_short]; | ||||||
2731 | if (TYPE_OK (long_integer_type_nodeinteger_types[itk_long])) | ||||||
2732 | return unsignedp ? long_unsigned_type_nodeinteger_types[itk_unsigned_long] : long_integer_type_nodeinteger_types[itk_long]; | ||||||
2733 | if (TYPE_OK (long_long_integer_type_nodeinteger_types[itk_long_long])) | ||||||
2734 | return (unsignedp ? long_long_unsigned_type_nodeinteger_types[itk_unsigned_long_long] | ||||||
2735 | : long_long_integer_type_nodeinteger_types[itk_long_long]); | ||||||
2736 | |||||||
2737 | for (i = 0; i < NUM_INT_N_ENTS1; i ++) | ||||||
2738 | if (int_n_enabled_p[i] | ||||||
2739 | && TYPE_MODE (type)((((enum tree_code) ((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2739, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (type) : (type)->type_common.mode) == int_n_data[i].m | ||||||
2740 | && TYPE_PRECISION (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2740, __FUNCTION__))->type_common.precision) == int_n_data[i].bitsize) | ||||||
2741 | return (unsignedp ? int_n_trees[i].unsigned_type | ||||||
2742 | : int_n_trees[i].signed_type); | ||||||
2743 | |||||||
2744 | #if HOST_BITS_PER_WIDE_INT64 >= 64 | ||||||
2745 | if (TYPE_OK (intTI_type_nodeglobal_trees[TI_INTTI_TYPE])) | ||||||
2746 | return unsignedp ? unsigned_intTI_type_nodeglobal_trees[TI_UINTTI_TYPE] : intTI_type_nodeglobal_trees[TI_INTTI_TYPE]; | ||||||
2747 | #endif | ||||||
2748 | if (TYPE_OK (intDI_type_nodeglobal_trees[TI_INTDI_TYPE])) | ||||||
2749 | return unsignedp ? unsigned_intDI_type_nodeglobal_trees[TI_UINTDI_TYPE] : intDI_type_nodeglobal_trees[TI_INTDI_TYPE]; | ||||||
2750 | if (TYPE_OK (intSI_type_nodeglobal_trees[TI_INTSI_TYPE])) | ||||||
2751 | return unsignedp ? unsigned_intSI_type_nodeglobal_trees[TI_UINTSI_TYPE] : intSI_type_nodeglobal_trees[TI_INTSI_TYPE]; | ||||||
2752 | if (TYPE_OK (intHI_type_nodeglobal_trees[TI_INTHI_TYPE])) | ||||||
2753 | return unsignedp ? unsigned_intHI_type_nodeglobal_trees[TI_UINTHI_TYPE] : intHI_type_nodeglobal_trees[TI_INTHI_TYPE]; | ||||||
2754 | if (TYPE_OK (intQI_type_nodeglobal_trees[TI_INTQI_TYPE])) | ||||||
2755 | return unsignedp ? unsigned_intQI_type_nodeglobal_trees[TI_UINTQI_TYPE] : intQI_type_nodeglobal_trees[TI_INTQI_TYPE]; | ||||||
2756 | #undef TYPE_OK | ||||||
2757 | |||||||
2758 | return build_nonstandard_integer_type (TYPE_PRECISION (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2758, __FUNCTION__))->type_common.precision), unsignedp); | ||||||
2759 | } | ||||||
2760 | |||||||
2761 | /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */ | ||||||
2762 | |||||||
2763 | tree | ||||||
2764 | c_build_bitfield_integer_type (unsigned HOST_WIDE_INTlong width, int unsignedp) | ||||||
2765 | { | ||||||
2766 | int i; | ||||||
2767 | |||||||
2768 | /* Extended integer types of the same width as a standard type have | ||||||
2769 | lesser rank, so those of the same width as int promote to int or | ||||||
2770 | unsigned int and are valid for printf formats expecting int or | ||||||
2771 | unsigned int. To avoid such special cases, avoid creating | ||||||
2772 | extended integer types for bit-fields if a standard integer type | ||||||
2773 | is available. */ | ||||||
2774 | if (width == TYPE_PRECISION (integer_type_node)((tree_class_check ((integer_types[itk_int]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2774, __FUNCTION__))->type_common.precision)) | ||||||
2775 | return unsignedp ? unsigned_type_nodeinteger_types[itk_unsigned_int] : integer_type_nodeinteger_types[itk_int]; | ||||||
2776 | if (width == TYPE_PRECISION (signed_char_type_node)((tree_class_check ((integer_types[itk_signed_char]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2776, __FUNCTION__))->type_common.precision)) | ||||||
2777 | return unsignedp ? unsigned_char_type_nodeinteger_types[itk_unsigned_char] : signed_char_type_nodeinteger_types[itk_signed_char]; | ||||||
2778 | if (width == TYPE_PRECISION (short_integer_type_node)((tree_class_check ((integer_types[itk_short]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2778, __FUNCTION__))->type_common.precision)) | ||||||
2779 | return unsignedp ? short_unsigned_type_nodeinteger_types[itk_unsigned_short] : short_integer_type_nodeinteger_types[itk_short]; | ||||||
2780 | if (width == TYPE_PRECISION (long_integer_type_node)((tree_class_check ((integer_types[itk_long]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2780, __FUNCTION__))->type_common.precision)) | ||||||
2781 | return unsignedp ? long_unsigned_type_nodeinteger_types[itk_unsigned_long] : long_integer_type_nodeinteger_types[itk_long]; | ||||||
2782 | if (width == TYPE_PRECISION (long_long_integer_type_node)((tree_class_check ((integer_types[itk_long_long]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2782, __FUNCTION__))->type_common.precision)) | ||||||
2783 | return (unsignedp ? long_long_unsigned_type_nodeinteger_types[itk_unsigned_long_long] | ||||||
2784 | : long_long_integer_type_nodeinteger_types[itk_long_long]); | ||||||
2785 | for (i = 0; i < NUM_INT_N_ENTS1; i ++) | ||||||
2786 | if (int_n_enabled_p[i] | ||||||
2787 | && width == int_n_data[i].bitsize) | ||||||
2788 | return (unsignedp ? int_n_trees[i].unsigned_type | ||||||
2789 | : int_n_trees[i].signed_type); | ||||||
2790 | return build_nonstandard_integer_type (width, unsignedp); | ||||||
2791 | } | ||||||
2792 | |||||||
2793 | /* The C version of the register_builtin_type langhook. */ | ||||||
2794 | |||||||
2795 | void | ||||||
2796 | c_register_builtin_type (tree type, const char* name) | ||||||
2797 | { | ||||||
2798 | tree decl; | ||||||
2799 | |||||||
2800 | decl = build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
2801 | TYPE_DECL, get_identifier (name)(__builtin_constant_p (name) ? get_identifier_with_length ((name ), strlen (name)) : get_identifier (name)), type); | ||||||
2802 | DECL_ARTIFICIAL (decl)((contains_struct_check ((decl), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2802, __FUNCTION__))->decl_common.artificial_flag) = 1; | ||||||
2803 | if (!TYPE_NAME (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2803, __FUNCTION__))->type_common.name)) | ||||||
2804 | TYPE_NAME (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2804, __FUNCTION__))->type_common.name) = decl; | ||||||
2805 | lang_hooks.decls.pushdecl (decl); | ||||||
2806 | |||||||
2807 | registered_builtin_types = tree_cons (0, type, registered_builtin_types); | ||||||
2808 | } | ||||||
2809 | |||||||
2810 | /* Print an error message for invalid operands to arith operation | ||||||
2811 | CODE with TYPE0 for operand 0, and TYPE1 for operand 1. | ||||||
2812 | RICHLOC is a rich location for the message, containing either | ||||||
2813 | three separate locations for each of the operator and operands | ||||||
2814 | |||||||
2815 | lhs op rhs | ||||||
2816 | ~~~ ^~ ~~~ | ||||||
2817 | |||||||
2818 | (C FE), or one location ranging over all over them | ||||||
2819 | |||||||
2820 | lhs op rhs | ||||||
2821 | ~~~~^~~~~~ | ||||||
2822 | |||||||
2823 | (C++ FE). */ | ||||||
2824 | |||||||
2825 | void | ||||||
2826 | binary_op_error (rich_location *richloc, enum tree_code code, | ||||||
2827 | tree type0, tree type1) | ||||||
2828 | { | ||||||
2829 | const char *opname; | ||||||
2830 | |||||||
2831 | switch (code) | ||||||
2832 | { | ||||||
2833 | case PLUS_EXPR: | ||||||
2834 | opname = "+"; break; | ||||||
2835 | case MINUS_EXPR: | ||||||
2836 | opname = "-"; break; | ||||||
2837 | case MULT_EXPR: | ||||||
2838 | opname = "*"; break; | ||||||
2839 | case MAX_EXPR: | ||||||
2840 | opname = "max"; break; | ||||||
2841 | case MIN_EXPR: | ||||||
2842 | opname = "min"; break; | ||||||
2843 | case EQ_EXPR: | ||||||
2844 | opname = "=="; break; | ||||||
2845 | case NE_EXPR: | ||||||
2846 | opname = "!="; break; | ||||||
2847 | case LE_EXPR: | ||||||
2848 | opname = "<="; break; | ||||||
2849 | case GE_EXPR: | ||||||
2850 | opname = ">="; break; | ||||||
2851 | case LT_EXPR: | ||||||
2852 | opname = "<"; break; | ||||||
2853 | case GT_EXPR: | ||||||
2854 | opname = ">"; break; | ||||||
2855 | case LSHIFT_EXPR: | ||||||
2856 | opname = "<<"; break; | ||||||
2857 | case RSHIFT_EXPR: | ||||||
2858 | opname = ">>"; break; | ||||||
2859 | case TRUNC_MOD_EXPR: | ||||||
2860 | case FLOOR_MOD_EXPR: | ||||||
2861 | opname = "%"; break; | ||||||
2862 | case TRUNC_DIV_EXPR: | ||||||
2863 | case FLOOR_DIV_EXPR: | ||||||
2864 | opname = "/"; break; | ||||||
2865 | case BIT_AND_EXPR: | ||||||
2866 | opname = "&"; break; | ||||||
2867 | case BIT_IOR_EXPR: | ||||||
2868 | opname = "|"; break; | ||||||
2869 | case TRUTH_ANDIF_EXPR: | ||||||
2870 | opname = "&&"; break; | ||||||
2871 | case TRUTH_ORIF_EXPR: | ||||||
2872 | opname = "||"; break; | ||||||
2873 | case BIT_XOR_EXPR: | ||||||
2874 | opname = "^"; break; | ||||||
2875 | default: | ||||||
2876 | gcc_unreachable ()(fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2876, __FUNCTION__)); | ||||||
2877 | } | ||||||
2878 | error_at (richloc, | ||||||
2879 | "invalid operands to binary %s (have %qT and %qT)", | ||||||
2880 | opname, type0, type1); | ||||||
2881 | } | ||||||
2882 | |||||||
2883 | /* Given an expression as a tree, return its original type. Do this | ||||||
2884 | by stripping any conversion that preserves the sign and precision. */ | ||||||
2885 | static tree | ||||||
2886 | expr_original_type (tree expr) | ||||||
2887 | { | ||||||
2888 | STRIP_SIGN_NOPS (expr)(expr) = tree_strip_sign_nop_conversions ((const_cast<union tree_node *> (((expr))))); | ||||||
2889 | return TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2889, __FUNCTION__))->typed.type); | ||||||
2890 | } | ||||||
2891 | |||||||
2892 | /* Subroutine of build_binary_op, used for comparison operations. | ||||||
2893 | See if the operands have both been converted from subword integer types | ||||||
2894 | and, if so, perhaps change them both back to their original type. | ||||||
2895 | This function is also responsible for converting the two operands | ||||||
2896 | to the proper common type for comparison. | ||||||
2897 | |||||||
2898 | The arguments of this function are all pointers to local variables | ||||||
2899 | of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1, | ||||||
2900 | RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE. | ||||||
2901 | |||||||
2902 | LOC is the location of the comparison. | ||||||
2903 | |||||||
2904 | If this function returns non-NULL_TREE, it means that the comparison has | ||||||
2905 | a constant value. What this function returns is an expression for | ||||||
2906 | that value. */ | ||||||
2907 | |||||||
2908 | tree | ||||||
2909 | shorten_compare (location_t loc, tree *op0_ptr, tree *op1_ptr, | ||||||
2910 | tree *restype_ptr, enum tree_code *rescode_ptr) | ||||||
2911 | { | ||||||
2912 | tree type; | ||||||
2913 | tree op0 = *op0_ptr; | ||||||
2914 | tree op1 = *op1_ptr; | ||||||
2915 | int unsignedp0, unsignedp1; | ||||||
2916 | int real1, real2; | ||||||
2917 | tree primop0, primop1; | ||||||
2918 | enum tree_code code = *rescode_ptr; | ||||||
2919 | |||||||
2920 | /* Throw away any conversions to wider types | ||||||
2921 | already present in the operands. */ | ||||||
2922 | |||||||
2923 | primop0 = c_common_get_narrower (op0, &unsignedp0); | ||||||
2924 | primop1 = c_common_get_narrower (op1, &unsignedp1); | ||||||
2925 | |||||||
2926 | /* If primopN is first sign-extended from primopN's precision to opN's | ||||||
2927 | precision, then zero-extended from opN's precision to | ||||||
2928 | *restype_ptr precision, shortenings might be invalid. */ | ||||||
2929 | if (TYPE_PRECISION (TREE_TYPE (primop0))((tree_class_check ((((contains_struct_check ((primop0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2929, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2929, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (TREE_TYPE (op0))((tree_class_check ((((contains_struct_check ((op0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2929, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2929, __FUNCTION__))->type_common.precision) | ||||||
2930 | && TYPE_PRECISION (TREE_TYPE (op0))((tree_class_check ((((contains_struct_check ((op0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2930, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2930, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2930, __FUNCTION__))->type_common.precision) | ||||||
2931 | && !unsignedp0 | ||||||
2932 | && TYPE_UNSIGNED (TREE_TYPE (op0))((tree_class_check ((((contains_struct_check ((op0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2932, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2932, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
2933 | primop0 = op0; | ||||||
2934 | if (TYPE_PRECISION (TREE_TYPE (primop1))((tree_class_check ((((contains_struct_check ((primop1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2934, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2934, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (TREE_TYPE (op1))((tree_class_check ((((contains_struct_check ((op1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2934, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2934, __FUNCTION__))->type_common.precision) | ||||||
2935 | && TYPE_PRECISION (TREE_TYPE (op1))((tree_class_check ((((contains_struct_check ((op1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2935, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2935, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2935, __FUNCTION__))->type_common.precision) | ||||||
2936 | && !unsignedp1 | ||||||
2937 | && TYPE_UNSIGNED (TREE_TYPE (op1))((tree_class_check ((((contains_struct_check ((op1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2937, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2937, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
2938 | primop1 = op1; | ||||||
2939 | |||||||
2940 | /* Handle the case that OP0 does not *contain* a conversion | ||||||
2941 | but it *requires* conversion to FINAL_TYPE. */ | ||||||
2942 | |||||||
2943 | if (op0 == primop0 && TREE_TYPE (op0)((contains_struct_check ((op0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2943, __FUNCTION__))->typed.type) != *restype_ptr) | ||||||
2944 | unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0))((tree_class_check ((((contains_struct_check ((op0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2944, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2944, __FUNCTION__))->base.u.bits.unsigned_flag); | ||||||
2945 | if (op1 == primop1 && TREE_TYPE (op1)((contains_struct_check ((op1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2945, __FUNCTION__))->typed.type) != *restype_ptr) | ||||||
2946 | unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1))((tree_class_check ((((contains_struct_check ((op1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2946, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2946, __FUNCTION__))->base.u.bits.unsigned_flag); | ||||||
2947 | |||||||
2948 | /* If one of the operands must be floated, we cannot optimize. */ | ||||||
2949 | real1 = TREE_CODE (TREE_TYPE (primop0))((enum tree_code) (((contains_struct_check ((primop0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2949, __FUNCTION__))->typed.type))->base.code) == REAL_TYPE; | ||||||
2950 | real2 = TREE_CODE (TREE_TYPE (primop1))((enum tree_code) (((contains_struct_check ((primop1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2950, __FUNCTION__))->typed.type))->base.code) == REAL_TYPE; | ||||||
2951 | |||||||
2952 | /* If first arg is constant, swap the args (changing operation | ||||||
2953 | so value is preserved), for canonicalization. Don't do this if | ||||||
2954 | the second arg is 0. */ | ||||||
2955 | |||||||
2956 | if (TREE_CONSTANT (primop0)((non_type_check ((primop0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 2956, __FUNCTION__))->base.constant_flag) | ||||||
2957 | && !integer_zerop (primop1) && !real_zerop (primop1) | ||||||
2958 | && !fixed_zerop (primop1)) | ||||||
2959 | { | ||||||
2960 | std::swap (primop0, primop1); | ||||||
2961 | std::swap (op0, op1); | ||||||
2962 | *op0_ptr = op0; | ||||||
2963 | *op1_ptr = op1; | ||||||
2964 | std::swap (unsignedp0, unsignedp1); | ||||||
2965 | std::swap (real1, real2); | ||||||
2966 | |||||||
2967 | switch (code) | ||||||
2968 | { | ||||||
2969 | case LT_EXPR: | ||||||
2970 | code = GT_EXPR; | ||||||
2971 | break; | ||||||
2972 | case GT_EXPR: | ||||||
2973 | code = LT_EXPR; | ||||||
2974 | break; | ||||||
2975 | case LE_EXPR: | ||||||
2976 | code = GE_EXPR; | ||||||
2977 | break; | ||||||
2978 | case GE_EXPR: | ||||||
2979 | code = LE_EXPR; | ||||||
2980 | break; | ||||||
2981 | default: | ||||||
2982 | break; | ||||||
2983 | } | ||||||
2984 | *rescode_ptr = code; | ||||||
2985 | } | ||||||
2986 | |||||||
2987 | /* If comparing an integer against a constant more bits wide, | ||||||
2988 | maybe we can deduce a value of 1 or 0 independent of the data. | ||||||
2989 | Or else truncate the constant now | ||||||
2990 | rather than extend the variable at run time. | ||||||
2991 | |||||||
2992 | This is only interesting if the constant is the wider arg. | ||||||
2993 | Also, it is not safe if the constant is unsigned and the | ||||||
2994 | variable arg is signed, since in this case the variable | ||||||
2995 | would be sign-extended and then regarded as unsigned. | ||||||
2996 | Our technique fails in this case because the lowest/highest | ||||||
2997 | possible unsigned results don't follow naturally from the | ||||||
2998 | lowest/highest possible values of the variable operand. | ||||||
2999 | For just EQ_EXPR and NE_EXPR there is another technique that | ||||||
3000 | could be used: see if the constant can be faithfully represented | ||||||
3001 | in the other operand's type, by truncating it and reextending it | ||||||
3002 | and see if that preserves the constant's value. */ | ||||||
3003 | |||||||
3004 | if (!real1 && !real2 | ||||||
3005 | && TREE_CODE (TREE_TYPE (primop0))((enum tree_code) (((contains_struct_check ((primop0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3005, __FUNCTION__))->typed.type))->base.code) != FIXED_POINT_TYPE | ||||||
3006 | && TREE_CODE (primop1)((enum tree_code) (primop1)->base.code) == INTEGER_CST | ||||||
3007 | && TYPE_PRECISION (TREE_TYPE (primop0))((tree_class_check ((((contains_struct_check ((primop0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3007, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3007, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3007, __FUNCTION__))->type_common.precision)) | ||||||
3008 | { | ||||||
3009 | int min_gt, max_gt, min_lt, max_lt; | ||||||
3010 | tree maxval, minval; | ||||||
3011 | /* 1 if comparison is nominally unsigned. */ | ||||||
3012 | int unsignedp = TYPE_UNSIGNED (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3012, __FUNCTION__))->base.u.bits.unsigned_flag); | ||||||
3013 | tree val; | ||||||
3014 | |||||||
3015 | type = c_common_signed_or_unsigned_type (unsignedp0, | ||||||
3016 | TREE_TYPE (primop0)((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3016, __FUNCTION__))->typed.type)); | ||||||
3017 | |||||||
3018 | maxval = TYPE_MAX_VALUE (type)((tree_check5 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3018, __FUNCTION__, (INTEGER_TYPE), (ENUMERAL_TYPE), (BOOLEAN_TYPE ), (REAL_TYPE), (FIXED_POINT_TYPE)))->type_non_common.maxval ); | ||||||
3019 | minval = TYPE_MIN_VALUE (type)((tree_check5 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3019, __FUNCTION__, (INTEGER_TYPE), (ENUMERAL_TYPE), (BOOLEAN_TYPE ), (REAL_TYPE), (FIXED_POINT_TYPE)))->type_non_common.minval ); | ||||||
3020 | |||||||
3021 | if (unsignedp && !unsignedp0) | ||||||
3022 | *restype_ptr = c_common_signed_type (*restype_ptr); | ||||||
3023 | |||||||
3024 | if (TREE_TYPE (primop1)((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3024, __FUNCTION__))->typed.type) != *restype_ptr) | ||||||
3025 | { | ||||||
3026 | /* Convert primop1 to target type, but do not introduce | ||||||
3027 | additional overflow. We know primop1 is an int_cst. */ | ||||||
3028 | primop1 = force_fit_type (*restype_ptr, | ||||||
3029 | wi::to_wide | ||||||
3030 | (primop1, | ||||||
3031 | TYPE_PRECISION (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3031, __FUNCTION__))->type_common.precision)), | ||||||
3032 | 0, TREE_OVERFLOW (primop1)((tree_class_check ((primop1), (tcc_constant), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3032, __FUNCTION__))->base.public_flag)); | ||||||
3033 | } | ||||||
3034 | if (type != *restype_ptr) | ||||||
3035 | { | ||||||
3036 | minval = convert (*restype_ptr, minval); | ||||||
3037 | maxval = convert (*restype_ptr, maxval); | ||||||
3038 | } | ||||||
3039 | |||||||
3040 | min_gt = tree_int_cst_lt (primop1, minval); | ||||||
3041 | max_gt = tree_int_cst_lt (primop1, maxval); | ||||||
3042 | min_lt = tree_int_cst_lt (minval, primop1); | ||||||
3043 | max_lt = tree_int_cst_lt (maxval, primop1); | ||||||
3044 | |||||||
3045 | val = 0; | ||||||
3046 | /* This used to be a switch, but Genix compiler can't handle that. */ | ||||||
3047 | if (code == NE_EXPR) | ||||||
3048 | { | ||||||
3049 | if (max_lt || min_gt) | ||||||
3050 | val = truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]; | ||||||
3051 | } | ||||||
3052 | else if (code == EQ_EXPR) | ||||||
3053 | { | ||||||
3054 | if (max_lt || min_gt) | ||||||
3055 | val = truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]; | ||||||
3056 | } | ||||||
3057 | else if (code == LT_EXPR) | ||||||
3058 | { | ||||||
3059 | if (max_lt) | ||||||
3060 | val = truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]; | ||||||
3061 | if (!min_lt) | ||||||
3062 | val = truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]; | ||||||
3063 | } | ||||||
3064 | else if (code == GT_EXPR) | ||||||
3065 | { | ||||||
3066 | if (min_gt) | ||||||
3067 | val = truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]; | ||||||
3068 | if (!max_gt) | ||||||
3069 | val = truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]; | ||||||
3070 | } | ||||||
3071 | else if (code == LE_EXPR) | ||||||
3072 | { | ||||||
3073 | if (!max_gt) | ||||||
3074 | val = truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]; | ||||||
3075 | if (min_gt) | ||||||
3076 | val = truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]; | ||||||
3077 | } | ||||||
3078 | else if (code == GE_EXPR) | ||||||
3079 | { | ||||||
3080 | if (!min_lt) | ||||||
3081 | val = truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]; | ||||||
3082 | if (max_lt) | ||||||
3083 | val = truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]; | ||||||
3084 | } | ||||||
3085 | |||||||
3086 | /* If primop0 was sign-extended and unsigned comparison specd, | ||||||
3087 | we did a signed comparison above using the signed type bounds. | ||||||
3088 | But the comparison we output must be unsigned. | ||||||
3089 | |||||||
3090 | Also, for inequalities, VAL is no good; but if the signed | ||||||
3091 | comparison had *any* fixed result, it follows that the | ||||||
3092 | unsigned comparison just tests the sign in reverse | ||||||
3093 | (positive values are LE, negative ones GE). | ||||||
3094 | So we can generate an unsigned comparison | ||||||
3095 | against an extreme value of the signed type. */ | ||||||
3096 | |||||||
3097 | if (unsignedp && !unsignedp0) | ||||||
3098 | { | ||||||
3099 | if (val != 0) | ||||||
3100 | switch (code) | ||||||
3101 | { | ||||||
3102 | case LT_EXPR: | ||||||
3103 | case GE_EXPR: | ||||||
3104 | primop1 = TYPE_MIN_VALUE (type)((tree_check5 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3104, __FUNCTION__, (INTEGER_TYPE), (ENUMERAL_TYPE), (BOOLEAN_TYPE ), (REAL_TYPE), (FIXED_POINT_TYPE)))->type_non_common.minval ); | ||||||
3105 | val = 0; | ||||||
3106 | break; | ||||||
3107 | |||||||
3108 | case LE_EXPR: | ||||||
3109 | case GT_EXPR: | ||||||
3110 | primop1 = TYPE_MAX_VALUE (type)((tree_check5 ((type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3110, __FUNCTION__, (INTEGER_TYPE), (ENUMERAL_TYPE), (BOOLEAN_TYPE ), (REAL_TYPE), (FIXED_POINT_TYPE)))->type_non_common.maxval ); | ||||||
3111 | val = 0; | ||||||
3112 | break; | ||||||
3113 | |||||||
3114 | default: | ||||||
3115 | break; | ||||||
3116 | } | ||||||
3117 | type = c_common_unsigned_type (type); | ||||||
3118 | } | ||||||
3119 | |||||||
3120 | if (TREE_CODE (primop0)((enum tree_code) (primop0)->base.code) != INTEGER_CST | ||||||
3121 | /* Don't warn if it's from a (non-system) macro. */ | ||||||
3122 | && !(from_macro_expansion_at | ||||||
3123 | (expansion_point_location_if_in_system_header | ||||||
3124 | (EXPR_LOCATION (primop0)((((primop0)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((primop0))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((primop0))->base.code))]) <= tcc_expression)) ? (primop0)->exp.locus : ((location_t) 0 )))))) | ||||||
3125 | { | ||||||
3126 | if (val == truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]) | ||||||
3127 | warning_at (loc, OPT_Wtype_limits, | ||||||
3128 | "comparison is always false due to limited range of data type"); | ||||||
3129 | if (val == truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]) | ||||||
3130 | warning_at (loc, OPT_Wtype_limits, | ||||||
3131 | "comparison is always true due to limited range of data type"); | ||||||
3132 | } | ||||||
3133 | |||||||
3134 | if (val != 0) | ||||||
3135 | { | ||||||
3136 | /* Don't forget to evaluate PRIMOP0 if it has side effects. */ | ||||||
3137 | if (TREE_SIDE_EFFECTS (primop0)((non_type_check ((primop0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3137, __FUNCTION__))->base.side_effects_flag)) | ||||||
3138 | return build2 (COMPOUND_EXPR, TREE_TYPE (val)((contains_struct_check ((val), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3138, __FUNCTION__))->typed.type), primop0, val); | ||||||
3139 | return val; | ||||||
3140 | } | ||||||
3141 | |||||||
3142 | /* Value is not predetermined, but do the comparison | ||||||
3143 | in the type of the operand that is not constant. | ||||||
3144 | TYPE is already properly set. */ | ||||||
3145 | } | ||||||
3146 | |||||||
3147 | /* If either arg is decimal float and the other is float, find the | ||||||
3148 | proper common type to use for comparison. */ | ||||||
3149 | else if (real1 && real2 | ||||||
3150 | && DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))(((enum mode_class) mode_class[((((enum tree_code) ((tree_class_check ((((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3150, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3150, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3150, __FUNCTION__))->typed.type)) : (((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3150, __FUNCTION__))->typed.type))->type_common.mode) ]) == MODE_DECIMAL_FLOAT) | ||||||
3151 | && DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))(((enum mode_class) mode_class[((((enum tree_code) ((tree_class_check ((((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3151, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3151, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3151, __FUNCTION__))->typed.type)) : (((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3151, __FUNCTION__))->typed.type))->type_common.mode) ]) == MODE_DECIMAL_FLOAT)) | ||||||
3152 | type = common_type (TREE_TYPE (primop0)((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3152, __FUNCTION__))->typed.type), TREE_TYPE (primop1)((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3152, __FUNCTION__))->typed.type)); | ||||||
3153 | |||||||
3154 | /* If either arg is decimal float and the other is float, fail. */ | ||||||
3155 | else if (real1 && real2 | ||||||
3156 | && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))(((enum mode_class) mode_class[((((enum tree_code) ((tree_class_check ((((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3156, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3156, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3156, __FUNCTION__))->typed.type)) : (((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3156, __FUNCTION__))->typed.type))->type_common.mode) ]) == MODE_DECIMAL_FLOAT) | ||||||
3157 | || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))(((enum mode_class) mode_class[((((enum tree_code) ((tree_class_check ((((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3157, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3157, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3157, __FUNCTION__))->typed.type)) : (((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3157, __FUNCTION__))->typed.type))->type_common.mode) ]) == MODE_DECIMAL_FLOAT))) | ||||||
3158 | { | ||||||
3159 | type = *restype_ptr; | ||||||
3160 | primop0 = op0; | ||||||
3161 | primop1 = op1; | ||||||
3162 | } | ||||||
3163 | |||||||
3164 | else if (real1 && real2 | ||||||
3165 | && (TYPE_PRECISION (TREE_TYPE (primop0))((tree_class_check ((((contains_struct_check ((primop0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3165, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3165, __FUNCTION__))->type_common.precision) | ||||||
3166 | == TYPE_PRECISION (TREE_TYPE (primop1))((tree_class_check ((((contains_struct_check ((primop1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3166, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3166, __FUNCTION__))->type_common.precision))) | ||||||
3167 | type = TREE_TYPE (primop0)((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3167, __FUNCTION__))->typed.type); | ||||||
3168 | |||||||
3169 | /* If args' natural types are both narrower than nominal type | ||||||
3170 | and both extend in the same manner, compare them | ||||||
3171 | in the type of the wider arg. | ||||||
3172 | Otherwise must actually extend both to the nominal | ||||||
3173 | common type lest different ways of extending | ||||||
3174 | alter the result. | ||||||
3175 | (eg, (short)-1 == (unsigned short)-1 should be 0.) */ | ||||||
3176 | |||||||
3177 | else if (unsignedp0 == unsignedp1 && real1 == real2 | ||||||
3178 | && TYPE_PRECISION (TREE_TYPE (primop0))((tree_class_check ((((contains_struct_check ((primop0), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3178, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3178, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3178, __FUNCTION__))->type_common.precision) | ||||||
3179 | && TYPE_PRECISION (TREE_TYPE (primop1))((tree_class_check ((((contains_struct_check ((primop1), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3179, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3179, __FUNCTION__))->type_common.precision) < TYPE_PRECISION (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3179, __FUNCTION__))->type_common.precision) | ||||||
3180 | && (type = common_type (TREE_TYPE (primop0)((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3180, __FUNCTION__))->typed.type), TREE_TYPE (primop1)((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3180, __FUNCTION__))->typed.type))) | ||||||
3181 | != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
3182 | { | ||||||
3183 | type = c_common_signed_or_unsigned_type (unsignedp0 | ||||||
3184 | || TYPE_UNSIGNED (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3184, __FUNCTION__))->base.u.bits.unsigned_flag), | ||||||
3185 | type); | ||||||
3186 | /* Make sure shorter operand is extended the right way | ||||||
3187 | to match the longer operand. */ | ||||||
3188 | primop0 | ||||||
3189 | = convert (c_common_signed_or_unsigned_type (unsignedp0, | ||||||
3190 | TREE_TYPE (primop0)((contains_struct_check ((primop0), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3190, __FUNCTION__))->typed.type)), | ||||||
3191 | primop0); | ||||||
3192 | primop1 | ||||||
3193 | = convert (c_common_signed_or_unsigned_type (unsignedp1, | ||||||
3194 | TREE_TYPE (primop1)((contains_struct_check ((primop1), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3194, __FUNCTION__))->typed.type)), | ||||||
3195 | primop1); | ||||||
3196 | } | ||||||
3197 | else | ||||||
3198 | { | ||||||
3199 | /* Here we must do the comparison on the nominal type | ||||||
3200 | using the args exactly as we received them. */ | ||||||
3201 | type = *restype_ptr; | ||||||
3202 | primop0 = op0; | ||||||
3203 | primop1 = op1; | ||||||
3204 | |||||||
3205 | /* We want to fold unsigned comparisons of >= and < against zero. | ||||||
3206 | For these, we may also issue a warning if we have a non-constant | ||||||
3207 | compared against zero, where the zero was spelled as "0" (rather | ||||||
3208 | than merely folding to it). | ||||||
3209 | If we have at least one constant, then op1 is constant | ||||||
3210 | and we may have a non-constant expression as op0. */ | ||||||
3211 | if (!real1 && !real2 && integer_zerop (primop1) | ||||||
3212 | && TYPE_UNSIGNED (*restype_ptr)((tree_class_check ((*restype_ptr), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3212, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
3213 | { | ||||||
3214 | tree value = NULL_TREE(tree) __null; | ||||||
3215 | /* All unsigned values are >= 0, so we warn. However, | ||||||
3216 | if OP0 is a constant that is >= 0, the signedness of | ||||||
3217 | the comparison isn't an issue, so suppress the | ||||||
3218 | warning. */ | ||||||
3219 | tree folded_op0 = fold_for_warn (op0); | ||||||
3220 | bool warn = | ||||||
3221 | warn_type_limitsglobal_options.x_warn_type_limits && !in_system_header_at (loc) | ||||||
3222 | && !(TREE_CODE (folded_op0)((enum tree_code) (folded_op0)->base.code) == INTEGER_CST | ||||||
3223 | && !TREE_OVERFLOW (convert (c_common_signed_type (type),((tree_class_check ((convert (c_common_signed_type (type), folded_op0 )), (tcc_constant), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3224, __FUNCTION__))->base.public_flag) | ||||||
3224 | folded_op0))((tree_class_check ((convert (c_common_signed_type (type), folded_op0 )), (tcc_constant), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3224, __FUNCTION__))->base.public_flag)) | ||||||
3225 | /* Do not warn for enumeration types. */ | ||||||
3226 | && (TREE_CODE (expr_original_type (folded_op0))((enum tree_code) (expr_original_type (folded_op0))->base. code) != ENUMERAL_TYPE); | ||||||
3227 | |||||||
3228 | switch (code) | ||||||
3229 | { | ||||||
3230 | case GE_EXPR: | ||||||
3231 | if (warn) | ||||||
3232 | warning_at (loc, OPT_Wtype_limits, | ||||||
3233 | "comparison of unsigned expression in %<>= 0%> " | ||||||
3234 | "is always true"); | ||||||
3235 | value = truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]; | ||||||
3236 | break; | ||||||
3237 | |||||||
3238 | case LT_EXPR: | ||||||
3239 | if (warn) | ||||||
3240 | warning_at (loc, OPT_Wtype_limits, | ||||||
3241 | "comparison of unsigned expression in %<< 0%> " | ||||||
3242 | "is always false"); | ||||||
3243 | value = truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]; | ||||||
3244 | break; | ||||||
3245 | |||||||
3246 | default: | ||||||
3247 | break; | ||||||
3248 | } | ||||||
3249 | |||||||
3250 | if (value != NULL_TREE(tree) __null) | ||||||
3251 | { | ||||||
3252 | /* Don't forget to evaluate PRIMOP0 if it has side effects. */ | ||||||
3253 | if (TREE_SIDE_EFFECTS (primop0)((non_type_check ((primop0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3253, __FUNCTION__))->base.side_effects_flag)) | ||||||
3254 | return build2 (COMPOUND_EXPR, TREE_TYPE (value)((contains_struct_check ((value), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3254, __FUNCTION__))->typed.type), | ||||||
3255 | primop0, value); | ||||||
3256 | return value; | ||||||
3257 | } | ||||||
3258 | } | ||||||
3259 | } | ||||||
3260 | |||||||
3261 | *op0_ptr = convert (type, primop0); | ||||||
3262 | *op1_ptr = convert (type, primop1); | ||||||
3263 | |||||||
3264 | *restype_ptr = truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE]; | ||||||
3265 | |||||||
3266 | return NULL_TREE(tree) __null; | ||||||
3267 | } | ||||||
3268 | |||||||
3269 | /* Return a tree for the sum or difference (RESULTCODE says which) | ||||||
3270 | of pointer PTROP and integer INTOP. */ | ||||||
3271 | |||||||
3272 | tree | ||||||
3273 | pointer_int_sum (location_t loc, enum tree_code resultcode, | ||||||
3274 | tree ptrop, tree intop, bool complain) | ||||||
3275 | { | ||||||
3276 | tree size_exp, ret; | ||||||
3277 | |||||||
3278 | /* The result is a pointer of the same type that is being added. */ | ||||||
3279 | tree result_type = TREE_TYPE (ptrop)((contains_struct_check ((ptrop), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3279, __FUNCTION__))->typed.type); | ||||||
3280 | |||||||
3281 | if (TREE_CODE (TREE_TYPE (result_type))((enum tree_code) (((contains_struct_check ((result_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3281, __FUNCTION__))->typed.type))->base.code) == VOID_TYPE) | ||||||
3282 | { | ||||||
3283 | if (complain && warn_pointer_arithglobal_options.x_warn_pointer_arith) | ||||||
3284 | pedwarn (loc, OPT_Wpointer_arith, | ||||||
3285 | "pointer of type %<void *%> used in arithmetic"); | ||||||
3286 | else if (!complain) | ||||||
3287 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
3288 | size_exp = integer_one_nodeglobal_trees[TI_INTEGER_ONE]; | ||||||
3289 | } | ||||||
3290 | else if (TREE_CODE (TREE_TYPE (result_type))((enum tree_code) (((contains_struct_check ((result_type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3290, __FUNCTION__))->typed.type))->base.code) == FUNCTION_TYPE) | ||||||
3291 | { | ||||||
3292 | if (complain && warn_pointer_arithglobal_options.x_warn_pointer_arith) | ||||||
3293 | pedwarn (loc, OPT_Wpointer_arith, | ||||||
3294 | "pointer to a function used in arithmetic"); | ||||||
3295 | else if (!complain) | ||||||
3296 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
3297 | size_exp = integer_one_nodeglobal_trees[TI_INTEGER_ONE]; | ||||||
3298 | } | ||||||
3299 | else if (!verify_type_context (loc, TCTX_POINTER_ARITH, | ||||||
3300 | TREE_TYPE (result_type)((contains_struct_check ((result_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3300, __FUNCTION__))->typed.type))) | ||||||
3301 | size_exp = integer_one_nodeglobal_trees[TI_INTEGER_ONE]; | ||||||
3302 | else | ||||||
3303 | { | ||||||
3304 | if (!complain && !COMPLETE_TYPE_P (TREE_TYPE (result_type))(((tree_class_check ((((contains_struct_check ((result_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3304, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3304, __FUNCTION__))->type_common.size) != (tree) __null )) | ||||||
3305 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
3306 | size_exp = size_in_bytes_loc (loc, TREE_TYPE (result_type)((contains_struct_check ((result_type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3306, __FUNCTION__))->typed.type)); | ||||||
3307 | /* Wrap the pointer expression in a SAVE_EXPR to make sure it | ||||||
3308 | is evaluated first when the size expression may depend | ||||||
3309 | on it for VM types. */ | ||||||
3310 | if (TREE_SIDE_EFFECTS (size_exp)((non_type_check ((size_exp), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3310, __FUNCTION__))->base.side_effects_flag) | ||||||
3311 | && TREE_SIDE_EFFECTS (ptrop)((non_type_check ((ptrop), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3311, __FUNCTION__))->base.side_effects_flag) | ||||||
3312 | && variably_modified_type_p (TREE_TYPE (ptrop)((contains_struct_check ((ptrop), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3312, __FUNCTION__))->typed.type), NULL__null)) | ||||||
3313 | { | ||||||
3314 | ptrop = save_expr (ptrop); | ||||||
3315 | size_exp = build2 (COMPOUND_EXPR, TREE_TYPE (intop)((contains_struct_check ((intop), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3315, __FUNCTION__))->typed.type), ptrop, size_exp); | ||||||
3316 | } | ||||||
3317 | } | ||||||
3318 | |||||||
3319 | /* We are manipulating pointer values, so we don't need to warn | ||||||
3320 | about relying on undefined signed overflow. We disable the | ||||||
3321 | warning here because we use integer types so fold won't know that | ||||||
3322 | they are really pointers. */ | ||||||
3323 | fold_defer_overflow_warnings (); | ||||||
3324 | |||||||
3325 | /* If what we are about to multiply by the size of the elements | ||||||
3326 | contains a constant term, apply distributive law | ||||||
3327 | and multiply that constant term separately. | ||||||
3328 | This helps produce common subexpressions. */ | ||||||
3329 | if ((TREE_CODE (intop)((enum tree_code) (intop)->base.code) == PLUS_EXPR || TREE_CODE (intop)((enum tree_code) (intop)->base.code) == MINUS_EXPR) | ||||||
3330 | && !TREE_CONSTANT (intop)((non_type_check ((intop), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3330, __FUNCTION__))->base.constant_flag) | ||||||
3331 | && TREE_CONSTANT (TREE_OPERAND (intop, 1))((non_type_check (((*((const_cast<tree*> (tree_operand_check ((intop), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3331, __FUNCTION__)))))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3331, __FUNCTION__))->base.constant_flag) | ||||||
3332 | && TREE_CONSTANT (size_exp)((non_type_check ((size_exp), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3332, __FUNCTION__))->base.constant_flag) | ||||||
3333 | /* If the constant comes from pointer subtraction, | ||||||
3334 | skip this optimization--it would cause an error. */ | ||||||
3335 | && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0)))((enum tree_code) (((contains_struct_check (((*((const_cast< tree*> (tree_operand_check ((intop), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3335, __FUNCTION__)))))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3335, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE | ||||||
3336 | /* If the constant is unsigned, and smaller than the pointer size, | ||||||
3337 | then we must skip this optimization. This is because it could cause | ||||||
3338 | an overflow error if the constant is negative but INTOP is not. */ | ||||||
3339 | && (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (intop))((((enum tree_code) (((contains_struct_check ((intop), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3339, __FUNCTION__))->typed.type))->base.code) == POINTER_TYPE || ((enum tree_code) (((contains_struct_check ((intop), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3339, __FUNCTION__))->typed.type))->base.code) == REFERENCE_TYPE ) ? !global_options.x_flag_wrapv_pointer : (!(any_integral_type_check ((((contains_struct_check ((intop), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3339, __FUNCTION__))->typed.type)), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3339, __FUNCTION__))->base.u.bits.unsigned_flag && !global_options.x_flag_wrapv && !global_options.x_flag_trapv )) | ||||||
3340 | || (TYPE_PRECISION (TREE_TYPE (intop))((tree_class_check ((((contains_struct_check ((intop), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3340, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3340, __FUNCTION__))->type_common.precision) | ||||||
3341 | == TYPE_PRECISION (TREE_TYPE (ptrop))((tree_class_check ((((contains_struct_check ((ptrop), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3341, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3341, __FUNCTION__))->type_common.precision)))) | ||||||
3342 | { | ||||||
3343 | enum tree_code subcode = resultcode; | ||||||
3344 | tree int_type = TREE_TYPE (intop)((contains_struct_check ((intop), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3344, __FUNCTION__))->typed.type); | ||||||
3345 | if (TREE_CODE (intop)((enum tree_code) (intop)->base.code) == MINUS_EXPR) | ||||||
3346 | subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR); | ||||||
3347 | /* Convert both subexpression types to the type of intop, | ||||||
3348 | because weird cases involving pointer arithmetic | ||||||
3349 | can result in a sum or difference with different type args. */ | ||||||
3350 | ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1))(((((*((const_cast<tree*> (tree_operand_check ((intop), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3350, __FUNCTION__))))))) && ((tree_code_type_tmpl < 0>::tree_code_type[(int) (((enum tree_code) (((*((const_cast <tree*> (tree_operand_check ((intop), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3350, __FUNCTION__)))))))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) (((*((const_cast<tree*> (tree_operand_check ((intop), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3350, __FUNCTION__)))))))->base.code))]) <= tcc_expression )) ? ((*((const_cast<tree*> (tree_operand_check ((intop ), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3350, __FUNCTION__))))))->exp.locus : ((location_t) 0)), | ||||||
3351 | subcode, ptrop, | ||||||
3352 | convert (int_type, TREE_OPERAND (intop, 1)(*((const_cast<tree*> (tree_operand_check ((intop), (1) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3352, __FUNCTION__)))))), | ||||||
3353 | true); | ||||||
3354 | intop = convert (int_type, TREE_OPERAND (intop, 0)(*((const_cast<tree*> (tree_operand_check ((intop), (0) , "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3354, __FUNCTION__)))))); | ||||||
3355 | } | ||||||
3356 | |||||||
3357 | /* Convert the integer argument to a type the same size as sizetype | ||||||
3358 | so the multiply won't overflow spuriously. */ | ||||||
3359 | if (TYPE_PRECISION (TREE_TYPE (intop))((tree_class_check ((((contains_struct_check ((intop), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3359, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3359, __FUNCTION__))->type_common.precision) != TYPE_PRECISION (sizetype)((tree_class_check ((sizetype_tab[(int) stk_sizetype]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3359, __FUNCTION__))->type_common.precision) | ||||||
3360 | || TYPE_UNSIGNED (TREE_TYPE (intop))((tree_class_check ((((contains_struct_check ((intop), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3360, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3360, __FUNCTION__))->base.u.bits.unsigned_flag) != TYPE_UNSIGNED (sizetype)((tree_class_check ((sizetype_tab[(int) stk_sizetype]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3360, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
3361 | intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype)((tree_class_check ((sizetype_tab[(int) stk_sizetype]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3361, __FUNCTION__))->type_common.precision), | ||||||
3362 | TYPE_UNSIGNED (sizetype)((tree_class_check ((sizetype_tab[(int) stk_sizetype]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3362, __FUNCTION__))->base.u.bits.unsigned_flag)), intop); | ||||||
3363 | |||||||
3364 | /* Replace the integer argument with a suitable product by the object size. | ||||||
3365 | Do this multiplication as signed, then convert to the appropriate type | ||||||
3366 | for the pointer operation and disregard an overflow that occurred only | ||||||
3367 | because of the sign-extension change in the latter conversion. */ | ||||||
3368 | { | ||||||
3369 | tree t = fold_build2_loc (loc, MULT_EXPR, TREE_TYPE (intop)((contains_struct_check ((intop), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3369, __FUNCTION__))->typed.type), intop, | ||||||
3370 | convert (TREE_TYPE (intop)((contains_struct_check ((intop), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3370, __FUNCTION__))->typed.type), size_exp)); | ||||||
3371 | intop = convert (sizetypesizetype_tab[(int) stk_sizetype], t); | ||||||
3372 | if (TREE_OVERFLOW_P (intop)((tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code) (intop)->base.code))] == tcc_constant) && ((tree_class_check ((intop), (tcc_constant), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3372, __FUNCTION__))->base.public_flag)) && !TREE_OVERFLOW (t)((tree_class_check ((t), (tcc_constant), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3372, __FUNCTION__))->base.public_flag)) | ||||||
3373 | intop = wide_int_to_tree (TREE_TYPE (intop)((contains_struct_check ((intop), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3373, __FUNCTION__))->typed.type), wi::to_wide (intop)); | ||||||
3374 | } | ||||||
3375 | |||||||
3376 | /* Create the sum or difference. */ | ||||||
3377 | if (resultcode == MINUS_EXPR) | ||||||
3378 | intop = fold_build1_loc (loc, NEGATE_EXPR, sizetypesizetype_tab[(int) stk_sizetype], intop); | ||||||
3379 | |||||||
3380 | ret = fold_build_pointer_plus_loc (loc, ptrop, intop); | ||||||
3381 | |||||||
3382 | fold_undefer_and_ignore_overflow_warnings (); | ||||||
3383 | |||||||
3384 | return ret; | ||||||
3385 | } | ||||||
3386 | |||||||
3387 | /* Wrap a C_MAYBE_CONST_EXPR around an expression that is fully folded | ||||||
3388 | and if NON_CONST is known not to be permitted in an evaluated part | ||||||
3389 | of a constant expression. */ | ||||||
3390 | |||||||
3391 | tree | ||||||
3392 | c_wrap_maybe_const (tree expr, bool non_const) | ||||||
3393 | { | ||||||
3394 | location_t loc = EXPR_LOCATION (expr)((((expr)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((expr))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((expr))->base.code))]) <= tcc_expression )) ? (expr)->exp.locus : ((location_t) 0)); | ||||||
3395 | |||||||
3396 | /* This should never be called for C++. */ | ||||||
3397 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
3398 | gcc_unreachable ()(fancy_abort ("/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3398, __FUNCTION__)); | ||||||
3399 | |||||||
3400 | /* The result of folding may have a NOP_EXPR to set TREE_NO_WARNING. */ | ||||||
3401 | STRIP_TYPE_NOPS (expr)while ((((((enum tree_code) (expr)->base.code)) == NOP_EXPR || (((enum tree_code) (expr)->base.code)) == CONVERT_EXPR ) || ((enum tree_code) (expr)->base.code) == NON_LVALUE_EXPR ) && (*((const_cast<tree*> (tree_operand_check ( (expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3401, __FUNCTION__))))) != global_trees[TI_ERROR_MARK] && (((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3401, __FUNCTION__))->typed.type) == ((contains_struct_check (((*((const_cast<tree*> (tree_operand_check ((expr), ( 0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3401, __FUNCTION__)))))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3401, __FUNCTION__))->typed.type))) (expr) = (*((const_cast <tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3401, __FUNCTION__))))); | ||||||
3402 | expr = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3402, __FUNCTION__))->typed.type), NULL__null, expr); | ||||||
3403 | C_MAYBE_CONST_EXPR_NON_CONST (expr)((tree_not_check2 (((tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3403, __FUNCTION__, (C_MAYBE_CONST_EXPR)))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3403, __FUNCTION__, (TREE_VEC), (SSA_NAME)))->base.u.bits .lang_flag_1) = non_const; | ||||||
3404 | protected_set_expr_location (expr, loc); | ||||||
3405 | |||||||
3406 | return expr; | ||||||
3407 | } | ||||||
3408 | |||||||
3409 | /* Return whether EXPR is a declaration whose address can never be NULL. | ||||||
3410 | The address of the first struct member could be NULL only if it were | ||||||
3411 | accessed through a NULL pointer, and such an access would be invalid. | ||||||
3412 | The address of a weak symbol may be null unless it has a definition. */ | ||||||
3413 | |||||||
3414 | bool | ||||||
3415 | decl_with_nonnull_addr_p (const_tree expr) | ||||||
3416 | { | ||||||
3417 | if (!DECL_P (expr)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (expr)->base.code))] == tcc_declaration)) | ||||||
3418 | return false; | ||||||
3419 | |||||||
3420 | if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == FIELD_DECL | ||||||
3421 | || TREE_CODE (expr)((enum tree_code) (expr)->base.code) == PARM_DECL | ||||||
3422 | || TREE_CODE (expr)((enum tree_code) (expr)->base.code) == LABEL_DECL) | ||||||
3423 | return true; | ||||||
3424 | |||||||
3425 | if (!VAR_OR_FUNCTION_DECL_P (expr)(((enum tree_code) (expr)->base.code) == VAR_DECL || ((enum tree_code) (expr)->base.code) == FUNCTION_DECL)) | ||||||
3426 | return false; | ||||||
3427 | |||||||
3428 | if (!DECL_WEAK (expr)((contains_struct_check ((expr), (TS_DECL_WITH_VIS), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3428, __FUNCTION__))->decl_with_vis.weak_flag)) | ||||||
3429 | /* Ordinary (non-weak) symbols have nonnull addresses. */ | ||||||
3430 | return true; | ||||||
3431 | |||||||
3432 | if (DECL_INITIAL (expr)((contains_struct_check ((expr), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3432, __FUNCTION__))->decl_common.initial) && DECL_INITIAL (expr)((contains_struct_check ((expr), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3432, __FUNCTION__))->decl_common.initial) != error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
3433 | /* Initialized weak symbols have nonnull addresses. */ | ||||||
3434 | return true; | ||||||
3435 | |||||||
3436 | if (DECL_EXTERNAL (expr)((contains_struct_check ((expr), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3436, __FUNCTION__))->decl_common.decl_flag_1) || !TREE_STATIC (expr)((expr)->base.static_flag)) | ||||||
3437 | /* Uninitialized extern weak symbols and weak symbols with no | ||||||
3438 | allocated storage might have a null address. */ | ||||||
3439 | return false; | ||||||
3440 | |||||||
3441 | tree attribs = DECL_ATTRIBUTES (expr)((contains_struct_check ((expr), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3441, __FUNCTION__))->decl_common.attributes); | ||||||
3442 | if (lookup_attribute ("weakref", attribs)) | ||||||
3443 | /* Weakref symbols might have a null address unless their referent | ||||||
3444 | is known not to. Don't bother following weakref targets here. */ | ||||||
3445 | return false; | ||||||
3446 | |||||||
3447 | return true; | ||||||
3448 | } | ||||||
3449 | |||||||
3450 | /* Prepare expr to be an argument of a TRUTH_NOT_EXPR, | ||||||
3451 | or for an `if' or `while' statement or ?..: exp. It should already | ||||||
3452 | have been validated to be of suitable type; otherwise, a bad | ||||||
3453 | diagnostic may result. | ||||||
3454 | |||||||
3455 | The EXPR is located at LOCATION. | ||||||
3456 | |||||||
3457 | This preparation consists of taking the ordinary | ||||||
3458 | representation of an expression expr and producing a valid tree | ||||||
3459 | boolean expression describing whether expr is nonzero. We could | ||||||
3460 | simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1), | ||||||
3461 | but we optimize comparisons, &&, ||, and !. | ||||||
3462 | |||||||
3463 | The resulting type should always be `truthvalue_type_node'. */ | ||||||
3464 | |||||||
3465 | tree | ||||||
3466 | c_common_truthvalue_conversion (location_t location, tree expr) | ||||||
3467 | { | ||||||
3468 | STRIP_ANY_LOCATION_WRAPPER (expr)(expr) = tree_strip_any_location_wrapper ((const_cast<union tree_node *> (((expr))))); | ||||||
3469 | switch (TREE_CODE (expr)((enum tree_code) (expr)->base.code)) | ||||||
3470 | { | ||||||
3471 | case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR: | ||||||
3472 | case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR: | ||||||
3473 | case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR: | ||||||
3474 | case ORDERED_EXPR: case UNORDERED_EXPR: | ||||||
3475 | if (TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3475, __FUNCTION__))->typed.type) == truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE]) | ||||||
3476 | return expr; | ||||||
3477 | expr = build2 (TREE_CODE (expr)((enum tree_code) (expr)->base.code), truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE], | ||||||
3478 | TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3478, __FUNCTION__))))), TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3478, __FUNCTION__)))))); | ||||||
3479 | goto ret; | ||||||
3480 | |||||||
3481 | case TRUTH_ANDIF_EXPR: | ||||||
3482 | case TRUTH_ORIF_EXPR: | ||||||
3483 | case TRUTH_AND_EXPR: | ||||||
3484 | case TRUTH_OR_EXPR: | ||||||
3485 | case TRUTH_XOR_EXPR: | ||||||
3486 | if (TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3486, __FUNCTION__))->typed.type) == truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE]) | ||||||
3487 | return expr; | ||||||
3488 | expr = build2 (TREE_CODE (expr)((enum tree_code) (expr)->base.code), truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE], | ||||||
3489 | c_common_truthvalue_conversion (location, | ||||||
3490 | TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3490, __FUNCTION__)))))), | ||||||
3491 | c_common_truthvalue_conversion (location, | ||||||
3492 | TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3492, __FUNCTION__))))))); | ||||||
3493 | goto ret; | ||||||
3494 | |||||||
3495 | case TRUTH_NOT_EXPR: | ||||||
3496 | if (TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3496, __FUNCTION__))->typed.type) == truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE]) | ||||||
3497 | return expr; | ||||||
3498 | expr = build1 (TREE_CODE (expr)((enum tree_code) (expr)->base.code), truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE], | ||||||
3499 | c_common_truthvalue_conversion (location, | ||||||
3500 | TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3500, __FUNCTION__))))))); | ||||||
3501 | goto ret; | ||||||
3502 | |||||||
3503 | case ERROR_MARK: | ||||||
3504 | return expr; | ||||||
3505 | |||||||
3506 | case INTEGER_CST: | ||||||
3507 | if (TREE_CODE (TREE_TYPE (expr))((enum tree_code) (((contains_struct_check ((expr), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3507, __FUNCTION__))->typed.type))->base.code) == ENUMERAL_TYPE | ||||||
3508 | && !integer_zerop (expr) | ||||||
3509 | && !integer_onep (expr)) | ||||||
3510 | warning_at (location, OPT_Wint_in_bool_context, | ||||||
3511 | "enum constant in boolean context"); | ||||||
3512 | return integer_zerop (expr) ? truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE] | ||||||
3513 | : truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]; | ||||||
3514 | |||||||
3515 | case REAL_CST: | ||||||
3516 | return real_compare (NE_EXPR, &TREE_REAL_CST (expr)(*(&(tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3516, __FUNCTION__, (REAL_CST)))->real_cst.value)), &dconst0) | ||||||
3517 | ? truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE] | ||||||
3518 | : truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]; | ||||||
3519 | |||||||
3520 | case FIXED_CST: | ||||||
3521 | return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr)(*((tree_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3521, __FUNCTION__, (FIXED_CST)))->fixed_cst.fixed_cst_ptr )), | ||||||
3522 | &FCONST0 (TYPE_MODE (TREE_TYPE (expr)))fconst0[((((enum tree_code) ((tree_class_check ((((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3522, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3522, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3522, __FUNCTION__))->typed.type)) : (((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3522, __FUNCTION__))->typed.type))->type_common.mode) - (scalar_mode ((scalar_mode::from_int) E_QQmode))]) | ||||||
3523 | ? truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE] | ||||||
3524 | : truthvalue_false_nodec_global_trees[CTI_TRUTHVALUE_FALSE]; | ||||||
3525 | |||||||
3526 | case FUNCTION_DECL: | ||||||
3527 | expr = build_unary_op (location, ADDR_EXPR, expr, false); | ||||||
3528 | /* Fall through. */ | ||||||
3529 | |||||||
3530 | case ADDR_EXPR: | ||||||
3531 | { | ||||||
3532 | tree inner = TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3532, __FUNCTION__))))); | ||||||
3533 | if (decl_with_nonnull_addr_p (inner) | ||||||
3534 | /* Check both EXPR and INNER for suppression. */ | ||||||
3535 | && !warning_suppressed_p (expr, OPT_Waddress) | ||||||
3536 | && !warning_suppressed_p (inner, OPT_Waddress)) | ||||||
3537 | { | ||||||
3538 | /* Common Ada programmer's mistake. */ | ||||||
3539 | warning_at (location, | ||||||
3540 | OPT_Waddress, | ||||||
3541 | "the address of %qD will always evaluate as %<true%>", | ||||||
3542 | inner); | ||||||
3543 | suppress_warning (inner, OPT_Waddress); | ||||||
3544 | return truthvalue_true_nodec_global_trees[CTI_TRUTHVALUE_TRUE]; | ||||||
3545 | } | ||||||
3546 | break; | ||||||
3547 | } | ||||||
3548 | |||||||
3549 | case COMPLEX_EXPR: | ||||||
3550 | expr = build_binary_op (EXPR_LOCATION (expr)((((expr)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((expr))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((expr))->base.code))]) <= tcc_expression )) ? (expr)->exp.locus : ((location_t) 0)), | ||||||
3551 | (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))((non_type_check (((*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3551, __FUNCTION__)))))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3551, __FUNCTION__))->base.side_effects_flag) | ||||||
3552 | ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR), | ||||||
3553 | c_common_truthvalue_conversion (location, | ||||||
3554 | TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3554, __FUNCTION__)))))), | ||||||
3555 | c_common_truthvalue_conversion (location, | ||||||
3556 | TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3556, __FUNCTION__)))))), | ||||||
3557 | false); | ||||||
3558 | goto ret; | ||||||
3559 | |||||||
3560 | case NEGATE_EXPR: | ||||||
3561 | case ABS_EXPR: | ||||||
3562 | case ABSU_EXPR: | ||||||
3563 | case FLOAT_EXPR: | ||||||
3564 | case EXCESS_PRECISION_EXPR: | ||||||
3565 | /* These don't change whether an object is nonzero or zero. */ | ||||||
3566 | return c_common_truthvalue_conversion (location, TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3566, __FUNCTION__)))))); | ||||||
3567 | |||||||
3568 | case LROTATE_EXPR: | ||||||
3569 | case RROTATE_EXPR: | ||||||
3570 | /* These don't change whether an object is zero or nonzero, but | ||||||
3571 | we can't ignore them if their second arg has side-effects. */ | ||||||
3572 | if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))((non_type_check (((*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3572, __FUNCTION__)))))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3572, __FUNCTION__))->base.side_effects_flag)) | ||||||
3573 | { | ||||||
3574 | expr = build2 (COMPOUND_EXPR, truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE], | ||||||
3575 | TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3575, __FUNCTION__))))), | ||||||
3576 | c_common_truthvalue_conversion | ||||||
3577 | (location, TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3577, __FUNCTION__))))))); | ||||||
3578 | goto ret; | ||||||
3579 | } | ||||||
3580 | else | ||||||
3581 | return c_common_truthvalue_conversion (location, | ||||||
3582 | TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3582, __FUNCTION__)))))); | ||||||
3583 | |||||||
3584 | case MULT_EXPR: | ||||||
3585 | warning_at (EXPR_LOCATION (expr)((((expr)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((expr))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((expr))->base.code))]) <= tcc_expression )) ? (expr)->exp.locus : ((location_t) 0)), OPT_Wint_in_bool_context, | ||||||
3586 | "%<*%> in boolean context, suggest %<&&%> instead"); | ||||||
3587 | break; | ||||||
3588 | |||||||
3589 | case LSHIFT_EXPR: | ||||||
3590 | /* We will only warn on signed shifts here, because the majority of | ||||||
3591 | false positive warnings happen in code where unsigned arithmetic | ||||||
3592 | was used in anticipation of a possible overflow. | ||||||
3593 | Furthermore, if we see an unsigned type here we know that the | ||||||
3594 | result of the shift is not subject to integer promotion rules. */ | ||||||
3595 | if (TREE_CODE (TREE_TYPE (expr))((enum tree_code) (((contains_struct_check ((expr), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3595, __FUNCTION__))->typed.type))->base.code) == INTEGER_TYPE | ||||||
3596 | && !TYPE_UNSIGNED (TREE_TYPE (expr))((tree_class_check ((((contains_struct_check ((expr), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3596, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3596, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
3597 | warning_at (EXPR_LOCATION (expr)((((expr)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((expr))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((expr))->base.code))]) <= tcc_expression )) ? (expr)->exp.locus : ((location_t) 0)), OPT_Wint_in_bool_context, | ||||||
3598 | "%<<<%> in boolean context, did you mean %<<%>?"); | ||||||
3599 | break; | ||||||
3600 | |||||||
3601 | case COND_EXPR: | ||||||
3602 | if (warn_int_in_bool_contextglobal_options.x_warn_int_in_bool_context | ||||||
3603 | && !from_macro_definition_at (EXPR_LOCATION (expr)((((expr)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((expr))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((expr))->base.code))]) <= tcc_expression )) ? (expr)->exp.locus : ((location_t) 0)))) | ||||||
3604 | { | ||||||
3605 | tree val1 = fold_for_warn (TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3605, __FUNCTION__)))))); | ||||||
3606 | tree val2 = fold_for_warn (TREE_OPERAND (expr, 2)(*((const_cast<tree*> (tree_operand_check ((expr), (2), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3606, __FUNCTION__)))))); | ||||||
3607 | if (TREE_CODE (val1)((enum tree_code) (val1)->base.code) == INTEGER_CST | ||||||
3608 | && TREE_CODE (val2)((enum tree_code) (val2)->base.code) == INTEGER_CST | ||||||
3609 | && !integer_zerop (val1) | ||||||
3610 | && !integer_zerop (val2) | ||||||
3611 | && (!integer_onep (val1) | ||||||
3612 | || !integer_onep (val2))) | ||||||
3613 | warning_at (EXPR_LOCATION (expr)((((expr)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((expr))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((expr))->base.code))]) <= tcc_expression )) ? (expr)->exp.locus : ((location_t) 0)), OPT_Wint_in_bool_context, | ||||||
3614 | "%<?:%> using integer constants in boolean context, " | ||||||
3615 | "the expression will always evaluate to %<true%>"); | ||||||
3616 | else if ((TREE_CODE (val1)((enum tree_code) (val1)->base.code) == INTEGER_CST | ||||||
3617 | && !integer_zerop (val1) | ||||||
3618 | && !integer_onep (val1)) | ||||||
3619 | || (TREE_CODE (val2)((enum tree_code) (val2)->base.code) == INTEGER_CST | ||||||
3620 | && !integer_zerop (val2) | ||||||
3621 | && !integer_onep (val2))) | ||||||
3622 | warning_at (EXPR_LOCATION (expr)((((expr)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((expr))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((expr))->base.code))]) <= tcc_expression )) ? (expr)->exp.locus : ((location_t) 0)), OPT_Wint_in_bool_context, | ||||||
3623 | "%<?:%> using integer constants in boolean context"); | ||||||
3624 | } | ||||||
3625 | /* Distribute the conversion into the arms of a COND_EXPR. */ | ||||||
3626 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
3627 | /* Avoid premature folding. */ | ||||||
3628 | break; | ||||||
3629 | else | ||||||
3630 | { | ||||||
3631 | int w = warn_int_in_bool_contextglobal_options.x_warn_int_in_bool_context; | ||||||
3632 | warn_int_in_bool_contextglobal_options.x_warn_int_in_bool_context = 0; | ||||||
3633 | /* Folding will happen later for C. */ | ||||||
3634 | expr = build3 (COND_EXPR, truthvalue_type_nodec_global_trees[CTI_TRUTHVALUE_TYPE], | ||||||
3635 | TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3635, __FUNCTION__))))), | ||||||
3636 | c_common_truthvalue_conversion (location, | ||||||
3637 | TREE_OPERAND (expr, 1)(*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3637, __FUNCTION__)))))), | ||||||
3638 | c_common_truthvalue_conversion (location, | ||||||
3639 | TREE_OPERAND (expr, 2)(*((const_cast<tree*> (tree_operand_check ((expr), (2), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3639, __FUNCTION__))))))); | ||||||
3640 | warn_int_in_bool_contextglobal_options.x_warn_int_in_bool_context = w; | ||||||
3641 | goto ret; | ||||||
3642 | } | ||||||
3643 | |||||||
3644 | CASE_CONVERTcase NOP_EXPR: case CONVERT_EXPR: | ||||||
3645 | { | ||||||
3646 | tree totype = TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3646, __FUNCTION__))->typed.type); | ||||||
3647 | tree fromtype = TREE_TYPE (TREE_OPERAND (expr, 0))((contains_struct_check (((*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3647, __FUNCTION__)))))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3647, __FUNCTION__))->typed.type); | ||||||
3648 | |||||||
3649 | if (POINTER_TYPE_P (totype)(((enum tree_code) (totype)->base.code) == POINTER_TYPE || ((enum tree_code) (totype)->base.code) == REFERENCE_TYPE) | ||||||
3650 | && !c_inhibit_evaluation_warnings | ||||||
3651 | && TREE_CODE (fromtype)((enum tree_code) (fromtype)->base.code) == REFERENCE_TYPE) | ||||||
3652 | { | ||||||
3653 | tree inner = expr; | ||||||
3654 | STRIP_NOPS (inner)(inner) = tree_strip_nop_conversions ((const_cast<union tree_node *> (((inner))))); | ||||||
3655 | |||||||
3656 | if (DECL_P (inner)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (inner)->base.code))] == tcc_declaration)) | ||||||
3657 | warning_at (location, | ||||||
3658 | OPT_Waddress, | ||||||
3659 | "the compiler can assume that the address of " | ||||||
3660 | "%qD will always evaluate to %<true%>", | ||||||
3661 | inner); | ||||||
3662 | } | ||||||
3663 | |||||||
3664 | /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE, | ||||||
3665 | since that affects how `default_conversion' will behave. */ | ||||||
3666 | if (TREE_CODE (totype)((enum tree_code) (totype)->base.code) == REFERENCE_TYPE | ||||||
3667 | || TREE_CODE (fromtype)((enum tree_code) (fromtype)->base.code) == REFERENCE_TYPE) | ||||||
3668 | break; | ||||||
3669 | /* Don't strip a conversion from C++0x scoped enum, since they | ||||||
3670 | don't implicitly convert to other types. */ | ||||||
3671 | if (TREE_CODE (fromtype)((enum tree_code) (fromtype)->base.code) == ENUMERAL_TYPE | ||||||
3672 | && ENUM_IS_SCOPED (fromtype)((tree_check ((fromtype), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3672, __FUNCTION__, (ENUMERAL_TYPE)))->base.static_flag)) | ||||||
3673 | break; | ||||||
3674 | /* If this isn't narrowing the argument, we can ignore it. */ | ||||||
3675 | if (TYPE_PRECISION (totype)((tree_class_check ((totype), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3675, __FUNCTION__))->type_common.precision) >= TYPE_PRECISION (fromtype)((tree_class_check ((fromtype), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3675, __FUNCTION__))->type_common.precision)) | ||||||
3676 | { | ||||||
3677 | tree op0 = TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3677, __FUNCTION__))))); | ||||||
3678 | if ((TREE_CODE (fromtype)((enum tree_code) (fromtype)->base.code) == POINTER_TYPE | ||||||
3679 | && TREE_CODE (totype)((enum tree_code) (totype)->base.code) == INTEGER_TYPE) | ||||||
3680 | || warning_suppressed_p (expr, OPT_Waddress)) | ||||||
3681 | /* Suppress -Waddress for casts to intptr_t, propagating | ||||||
3682 | any suppression from the enclosing expression to its | ||||||
3683 | operand. */ | ||||||
3684 | suppress_warning (op0, OPT_Waddress); | ||||||
3685 | return c_common_truthvalue_conversion (location, op0); | ||||||
3686 | } | ||||||
3687 | } | ||||||
3688 | break; | ||||||
3689 | |||||||
3690 | case MODIFY_EXPR: | ||||||
3691 | if (!warning_suppressed_p (expr, OPT_Wparentheses) | ||||||
3692 | && warn_parenthesesglobal_options.x_warn_parentheses | ||||||
3693 | && warning_at (location, OPT_Wparentheses, | ||||||
3694 | "suggest parentheses around assignment used as " | ||||||
3695 | "truth value")) | ||||||
3696 | suppress_warning (expr, OPT_Wparentheses); | ||||||
3697 | break; | ||||||
3698 | |||||||
3699 | case CONST_DECL: | ||||||
3700 | { | ||||||
3701 | tree folded_expr = fold_for_warn (expr); | ||||||
3702 | if (folded_expr != expr) | ||||||
3703 | return c_common_truthvalue_conversion (location, folded_expr); | ||||||
3704 | } | ||||||
3705 | break; | ||||||
3706 | |||||||
3707 | default: | ||||||
3708 | break; | ||||||
3709 | } | ||||||
3710 | |||||||
3711 | if (TREE_CODE (TREE_TYPE (expr))((enum tree_code) (((contains_struct_check ((expr), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3711, __FUNCTION__))->typed.type))->base.code) == COMPLEX_TYPE) | ||||||
3712 | { | ||||||
3713 | tree t = save_expr (expr); | ||||||
3714 | expr = (build_binary_op | ||||||
3715 | (EXPR_LOCATION (expr)((((expr)) && ((tree_code_type_tmpl <0>::tree_code_type [(int) (((enum tree_code) ((expr))->base.code))]) >= tcc_reference && (tree_code_type_tmpl <0>::tree_code_type[(int ) (((enum tree_code) ((expr))->base.code))]) <= tcc_expression )) ? (expr)->exp.locus : ((location_t) 0)), | ||||||
3716 | (TREE_SIDE_EFFECTS (expr)((non_type_check ((expr), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3716, __FUNCTION__))->base.side_effects_flag) | ||||||
3717 | ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR), | ||||||
3718 | c_common_truthvalue_conversion | ||||||
3719 | (location, | ||||||
3720 | build_unary_op (location, REALPART_EXPR, t, false)), | ||||||
3721 | c_common_truthvalue_conversion | ||||||
3722 | (location, | ||||||
3723 | build_unary_op (location, IMAGPART_EXPR, t, false)), | ||||||
3724 | false)); | ||||||
3725 | goto ret; | ||||||
3726 | } | ||||||
3727 | |||||||
3728 | if (TREE_CODE (TREE_TYPE (expr))((enum tree_code) (((contains_struct_check ((expr), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3728, __FUNCTION__))->typed.type))->base.code) == FIXED_POINT_TYPE) | ||||||
3729 | { | ||||||
3730 | tree fixed_zero_node = build_fixed (TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3730, __FUNCTION__))->typed.type), | ||||||
3731 | FCONST0 (TYPE_MODEfconst0[((((enum tree_code) ((tree_class_check ((((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3732, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3732, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3732, __FUNCTION__))->typed.type)) : (((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3732, __FUNCTION__))->typed.type))->type_common.mode) - (scalar_mode ((scalar_mode::from_int) E_QQmode))] | ||||||
3732 | (TREE_TYPE (expr)))fconst0[((((enum tree_code) ((tree_class_check ((((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3732, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3732, __FUNCTION__)))->base.code) == VECTOR_TYPE) ? vector_type_mode (((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3732, __FUNCTION__))->typed.type)) : (((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3732, __FUNCTION__))->typed.type))->type_common.mode) - (scalar_mode ((scalar_mode::from_int) E_QQmode))]); | ||||||
3733 | return build_binary_op (location, NE_EXPR, expr, fixed_zero_node, true); | ||||||
3734 | } | ||||||
3735 | else | ||||||
3736 | return build_binary_op (location, NE_EXPR, expr, integer_zero_nodeglobal_trees[TI_INTEGER_ZERO], true); | ||||||
3737 | |||||||
3738 | ret: | ||||||
3739 | protected_set_expr_location (expr, location); | ||||||
3740 | return expr; | ||||||
3741 | } | ||||||
3742 | |||||||
3743 | static void def_builtin_1 (enum built_in_function fncode, | ||||||
3744 | const char *name, | ||||||
3745 | enum built_in_class fnclass, | ||||||
3746 | tree fntype, tree libtype, | ||||||
3747 | bool both_p, bool fallback_p, bool nonansi_p, | ||||||
3748 | tree fnattrs, bool implicit_p); | ||||||
3749 | |||||||
3750 | |||||||
3751 | /* Apply the TYPE_QUALS to the new DECL. */ | ||||||
3752 | |||||||
3753 | void | ||||||
3754 | c_apply_type_quals_to_decl (int type_quals, tree decl) | ||||||
3755 | { | ||||||
3756 | tree type = TREE_TYPE (decl)((contains_struct_check ((decl), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3756, __FUNCTION__))->typed.type); | ||||||
3757 | |||||||
3758 | if (type == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
3759 | return; | ||||||
3760 | |||||||
3761 | if ((type_quals & TYPE_QUAL_CONST) | ||||||
3762 | || (type && TREE_CODE (type)((enum tree_code) (type)->base.code) == REFERENCE_TYPE)) | ||||||
3763 | /* We used to check TYPE_NEEDS_CONSTRUCTING here, but now a constexpr | ||||||
3764 | constructor can produce constant init, so rely on cp_finish_decl to | ||||||
3765 | clear TREE_READONLY if the variable has non-constant init. */ | ||||||
3766 | TREE_READONLY (decl)((non_type_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3766, __FUNCTION__))->base.readonly_flag) = 1; | ||||||
3767 | if (type_quals & TYPE_QUAL_VOLATILE) | ||||||
3768 | { | ||||||
3769 | TREE_SIDE_EFFECTS (decl)((non_type_check ((decl), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3769, __FUNCTION__))->base.side_effects_flag) = 1; | ||||||
3770 | TREE_THIS_VOLATILE (decl)((decl)->base.volatile_flag) = 1; | ||||||
3771 | } | ||||||
3772 | if (type_quals & TYPE_QUAL_RESTRICT) | ||||||
3773 | { | ||||||
3774 | while (type && TREE_CODE (type)((enum tree_code) (type)->base.code) == ARRAY_TYPE) | ||||||
3775 | /* Allow 'restrict' on arrays of pointers. | ||||||
3776 | FIXME currently we just ignore it. */ | ||||||
3777 | type = TREE_TYPE (type)((contains_struct_check ((type), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3777, __FUNCTION__))->typed.type); | ||||||
3778 | if (!type | ||||||
3779 | || !POINTER_TYPE_P (type)(((enum tree_code) (type)->base.code) == POINTER_TYPE || ( (enum tree_code) (type)->base.code) == REFERENCE_TYPE) | ||||||
3780 | || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))(!(((enum tree_code) (((contains_struct_check ((type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3780, __FUNCTION__))->typed.type))->base.code) == FUNCTION_TYPE ))) | ||||||
3781 | error ("invalid use of %<restrict%>"); | ||||||
3782 | } | ||||||
3783 | } | ||||||
3784 | |||||||
3785 | /* Return the typed-based alias set for T, which may be an expression | ||||||
3786 | or a type. Return -1 if we don't do anything special. */ | ||||||
3787 | |||||||
3788 | alias_set_type | ||||||
3789 | c_common_get_alias_set (tree t) | ||||||
3790 | { | ||||||
3791 | /* For VLAs, use the alias set of the element type rather than the | ||||||
3792 | default of alias set 0 for types compared structurally. */ | ||||||
3793 | if (TYPE_P (t)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (t)->base.code))] == tcc_type) && TYPE_STRUCTURAL_EQUALITY_P (t)(((tree_class_check ((t), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3793, __FUNCTION__))->type_common.canonical) == (tree) __null )) | ||||||
3794 | { | ||||||
3795 | if (TREE_CODE (t)((enum tree_code) (t)->base.code) == ARRAY_TYPE) | ||||||
3796 | return get_alias_set (TREE_TYPE (t)((contains_struct_check ((t), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3796, __FUNCTION__))->typed.type)); | ||||||
3797 | return -1; | ||||||
3798 | } | ||||||
3799 | |||||||
3800 | /* That's all the expressions we handle specially. */ | ||||||
3801 | if (!TYPE_P (t)(tree_code_type_tmpl <0>::tree_code_type[(int) (((enum tree_code ) (t)->base.code))] == tcc_type)) | ||||||
3802 | return -1; | ||||||
3803 | |||||||
3804 | /* Unlike char, char8_t doesn't alias. */ | ||||||
3805 | if (flag_char8_tglobal_options.x_flag_char8_t && t == char8_type_nodec_global_trees[CTI_CHAR8_TYPE]) | ||||||
3806 | return -1; | ||||||
3807 | |||||||
3808 | /* The C standard guarantees that any object may be accessed via an | ||||||
3809 | lvalue that has narrow character type (except char8_t). */ | ||||||
3810 | if (t == char_type_nodeinteger_types[itk_char] | ||||||
3811 | || t == signed_char_type_nodeinteger_types[itk_signed_char] | ||||||
3812 | || t == unsigned_char_type_nodeinteger_types[itk_unsigned_char]) | ||||||
3813 | return 0; | ||||||
3814 | |||||||
3815 | /* The C standard specifically allows aliasing between signed and | ||||||
3816 | unsigned variants of the same type. We treat the signed | ||||||
3817 | variant as canonical. */ | ||||||
3818 | if (TREE_CODE (t)((enum tree_code) (t)->base.code) == INTEGER_TYPE && TYPE_UNSIGNED (t)((tree_class_check ((t), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3818, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
3819 | { | ||||||
3820 | tree t1 = c_common_signed_type (t); | ||||||
3821 | |||||||
3822 | /* t1 == t can happen for boolean nodes which are always unsigned. */ | ||||||
3823 | if (t1 != t) | ||||||
3824 | return get_alias_set (t1); | ||||||
3825 | } | ||||||
3826 | |||||||
3827 | return -1; | ||||||
3828 | } | ||||||
3829 | |||||||
3830 | /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where | ||||||
3831 | the IS_SIZEOF parameter indicates which operator is being applied. | ||||||
3832 | The COMPLAIN flag controls whether we should diagnose possibly | ||||||
3833 | ill-formed constructs or not. LOC is the location of the SIZEOF or | ||||||
3834 | TYPEOF operator. If MIN_ALIGNOF, the least alignment required for | ||||||
3835 | a type in any context should be returned, rather than the normal | ||||||
3836 | alignment for that type. */ | ||||||
3837 | |||||||
3838 | tree | ||||||
3839 | c_sizeof_or_alignof_type (location_t loc, | ||||||
3840 | tree type, bool is_sizeof, bool min_alignof, | ||||||
3841 | int complain) | ||||||
3842 | { | ||||||
3843 | const char *op_name; | ||||||
3844 | tree value = NULL__null; | ||||||
3845 | enum tree_code type_code = TREE_CODE (type)((enum tree_code) (type)->base.code); | ||||||
3846 | |||||||
3847 | op_name = is_sizeof ? "sizeof" : "__alignof__"; | ||||||
3848 | |||||||
3849 | if (type_code == FUNCTION_TYPE) | ||||||
3850 | { | ||||||
3851 | if (is_sizeof) | ||||||
3852 | { | ||||||
3853 | if (complain && warn_pointer_arithglobal_options.x_warn_pointer_arith) | ||||||
3854 | pedwarn (loc, OPT_Wpointer_arith, | ||||||
3855 | "invalid application of %<sizeof%> to a function type"); | ||||||
3856 | else if (!complain) | ||||||
3857 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
3858 | value = size_one_nodeglobal_trees[TI_SIZE_ONE]; | ||||||
3859 | } | ||||||
3860 | else | ||||||
3861 | { | ||||||
3862 | if (complain) | ||||||
3863 | { | ||||||
3864 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
3865 | pedwarn (loc, OPT_Wpedantic, "ISO C++ does not permit " | ||||||
3866 | "%<alignof%> applied to a function type"); | ||||||
3867 | else | ||||||
3868 | pedwarn (loc, OPT_Wpedantic, "ISO C does not permit " | ||||||
3869 | "%<_Alignof%> applied to a function type"); | ||||||
3870 | } | ||||||
3871 | value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT)size_int_kind (8 / (8), stk_sizetype); | ||||||
3872 | } | ||||||
3873 | } | ||||||
3874 | else if (type_code == VOID_TYPE || type_code == ERROR_MARK) | ||||||
3875 | { | ||||||
3876 | if (type_code == VOID_TYPE | ||||||
3877 | && complain && warn_pointer_arithglobal_options.x_warn_pointer_arith) | ||||||
3878 | pedwarn (loc, OPT_Wpointer_arith, | ||||||
3879 | "invalid application of %qs to a void type", op_name); | ||||||
3880 | else if (!complain) | ||||||
3881 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
3882 | value = size_one_nodeglobal_trees[TI_SIZE_ONE]; | ||||||
3883 | } | ||||||
3884 | else if (!COMPLETE_TYPE_P (type)(((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3884, __FUNCTION__))->type_common.size) != (tree) __null ) | ||||||
3885 | && (!c_dialect_cxx ()((c_language & clk_cxx) != 0) || is_sizeof || type_code != ARRAY_TYPE)) | ||||||
3886 | { | ||||||
3887 | if (complain) | ||||||
3888 | error_at (loc, "invalid application of %qs to incomplete type %qT", | ||||||
3889 | op_name, type); | ||||||
3890 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
3891 | } | ||||||
3892 | else if (c_dialect_cxx ()((c_language & clk_cxx) != 0) && type_code == ARRAY_TYPE | ||||||
3893 | && !COMPLETE_TYPE_P (TREE_TYPE (type))(((tree_class_check ((((contains_struct_check ((type), (TS_TYPED ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3893, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3893, __FUNCTION__))->type_common.size) != (tree) __null )) | ||||||
3894 | { | ||||||
3895 | if (complain) | ||||||
3896 | error_at (loc, "invalid application of %qs to array type %qT of " | ||||||
3897 | "incomplete element type", op_name, type); | ||||||
3898 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
3899 | } | ||||||
3900 | else if (!verify_type_context (loc, is_sizeof ? TCTX_SIZEOF : TCTX_ALIGNOF, | ||||||
3901 | type, !complain)) | ||||||
3902 | { | ||||||
3903 | if (!complain) | ||||||
3904 | return error_mark_nodeglobal_trees[TI_ERROR_MARK]; | ||||||
3905 | value = size_one_nodeglobal_trees[TI_SIZE_ONE]; | ||||||
3906 | } | ||||||
3907 | else | ||||||
3908 | { | ||||||
3909 | if (is_sizeof) | ||||||
3910 | /* Convert in case a char is more than one unit. */ | ||||||
3911 | value = size_binop_loc (loc, CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type)((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3911, __FUNCTION__))->type_common.size_unit), | ||||||
3912 | size_int (TYPE_PRECISION (char_type_node)size_int_kind (((tree_class_check ((integer_types[itk_char]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3912, __FUNCTION__))->type_common.precision) / (8), stk_sizetype ) | ||||||
3913 | / BITS_PER_UNIT)size_int_kind (((tree_class_check ((integer_types[itk_char]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3912, __FUNCTION__))->type_common.precision) / (8), stk_sizetype )); | ||||||
3914 | else if (min_alignof) | ||||||
3915 | value = size_int (min_align_of_type (type))size_int_kind (min_align_of_type (type), stk_sizetype); | ||||||
3916 | else | ||||||
3917 | value = size_int (TYPE_ALIGN_UNIT (type))size_int_kind (((((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3917, __FUNCTION__))->type_common.align) ? ((unsigned)1) << (((tree_class_check ((type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3917, __FUNCTION__))->type_common.align) - 1) : 0) / (8) ), stk_sizetype); | ||||||
3918 | } | ||||||
3919 | |||||||
3920 | /* VALUE will have the middle-end integer type sizetype. | ||||||
3921 | However, we should really return a value of type `size_t', | ||||||
3922 | which is just a typedef for an ordinary integer type. */ | ||||||
3923 | value = fold_convert_loc (loc, size_type_nodeglobal_trees[TI_SIZE_TYPE], value); | ||||||
3924 | |||||||
3925 | return value; | ||||||
3926 | } | ||||||
3927 | |||||||
3928 | /* Implement the __alignof keyword: Return the minimum required | ||||||
3929 | alignment of EXPR, measured in bytes. For VAR_DECLs, | ||||||
3930 | FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set | ||||||
3931 | from an "aligned" __attribute__ specification). LOC is the | ||||||
3932 | location of the ALIGNOF operator. */ | ||||||
3933 | |||||||
3934 | tree | ||||||
3935 | c_alignof_expr (location_t loc, tree expr) | ||||||
3936 | { | ||||||
3937 | tree t; | ||||||
3938 | |||||||
3939 | if (!verify_type_context (loc, TCTX_ALIGNOF, TREE_TYPE (expr)((contains_struct_check ((expr), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3939, __FUNCTION__))->typed.type))) | ||||||
3940 | t = size_one_nodeglobal_trees[TI_SIZE_ONE]; | ||||||
3941 | |||||||
3942 | else if (VAR_OR_FUNCTION_DECL_P (expr)(((enum tree_code) (expr)->base.code) == VAR_DECL || ((enum tree_code) (expr)->base.code) == FUNCTION_DECL)) | ||||||
3943 | t = size_int (DECL_ALIGN_UNIT (expr))size_int_kind (((((contains_struct_check ((expr), (TS_DECL_COMMON ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3943, __FUNCTION__))->decl_common.align) ? ((unsigned)1) << (((contains_struct_check ((expr), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3943, __FUNCTION__))->decl_common.align) - 1) : 0) / (8) ), stk_sizetype); | ||||||
3944 | |||||||
3945 | else if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == COMPONENT_REF | ||||||
3946 | && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1))(((contains_struct_check (((tree_check (((*((const_cast<tree *> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3946, __FUNCTION__)))))), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3946, __FUNCTION__, (FIELD_DECL)))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3946, __FUNCTION__))->decl_common.lang_flag_4) == 1)) | ||||||
3947 | { | ||||||
3948 | error_at (loc, "%<__alignof%> applied to a bit-field"); | ||||||
3949 | t = size_one_nodeglobal_trees[TI_SIZE_ONE]; | ||||||
3950 | } | ||||||
3951 | else if (TREE_CODE (expr)((enum tree_code) (expr)->base.code) == COMPONENT_REF | ||||||
3952 | && TREE_CODE (TREE_OPERAND (expr, 1))((enum tree_code) ((*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3952, __FUNCTION__))))))->base.code) == FIELD_DECL) | ||||||
3953 | t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)))size_int_kind (((((contains_struct_check (((*((const_cast< tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3953, __FUNCTION__)))))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3953, __FUNCTION__))->decl_common.align) ? ((unsigned)1) << (((contains_struct_check (((*((const_cast<tree*> (tree_operand_check ((expr), (1), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3953, __FUNCTION__)))))), (TS_DECL_COMMON), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3953, __FUNCTION__))->decl_common.align) - 1) : 0) / (8) ), stk_sizetype); | ||||||
3954 | |||||||
3955 | else if (INDIRECT_REF_P (expr)(((enum tree_code) (expr)->base.code) == INDIRECT_REF)) | ||||||
3956 | { | ||||||
3957 | tree t = TREE_OPERAND (expr, 0)(*((const_cast<tree*> (tree_operand_check ((expr), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3957, __FUNCTION__))))); | ||||||
3958 | tree best = t; | ||||||
3959 | int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)))(((tree_class_check ((((contains_struct_check ((((contains_struct_check ((t), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3959, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3959, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3959, __FUNCTION__))->type_common.align) ? ((unsigned)1) << (((tree_class_check ((((contains_struct_check ((((contains_struct_check ((t), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3959, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3959, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3959, __FUNCTION__))->type_common.align) - 1) : 0); | ||||||
3960 | |||||||
3961 | while (CONVERT_EXPR_P (t)((((enum tree_code) (t)->base.code)) == NOP_EXPR || (((enum tree_code) (t)->base.code)) == CONVERT_EXPR) | ||||||
3962 | && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0)))((enum tree_code) (((contains_struct_check (((*((const_cast< tree*> (tree_operand_check ((t), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3962, __FUNCTION__)))))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3962, __FUNCTION__))->typed.type))->base.code) == POINTER_TYPE) | ||||||
3963 | { | ||||||
3964 | int thisalign; | ||||||
3965 | |||||||
3966 | t = TREE_OPERAND (t, 0)(*((const_cast<tree*> (tree_operand_check ((t), (0), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3966, __FUNCTION__))))); | ||||||
3967 | thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)))(((tree_class_check ((((contains_struct_check ((((contains_struct_check ((t), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3967, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3967, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3967, __FUNCTION__))->type_common.align) ? ((unsigned)1) << (((tree_class_check ((((contains_struct_check ((((contains_struct_check ((t), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3967, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3967, __FUNCTION__))->typed.type)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3967, __FUNCTION__))->type_common.align) - 1) : 0); | ||||||
3968 | if (thisalign > bestalign) | ||||||
3969 | best = t, bestalign = thisalign; | ||||||
3970 | } | ||||||
3971 | return c_alignof (loc, TREE_TYPE (TREE_TYPE (best)))c_sizeof_or_alignof_type (loc, ((contains_struct_check ((((contains_struct_check ((best), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3971, __FUNCTION__))->typed.type)), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3971, __FUNCTION__))->typed.type), false, false, 1); | ||||||
3972 | } | ||||||
3973 | else | ||||||
3974 | return c_alignof (loc, TREE_TYPE (expr))c_sizeof_or_alignof_type (loc, ((contains_struct_check ((expr ), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 3974, __FUNCTION__))->typed.type), false, false, 1); | ||||||
3975 | |||||||
3976 | return fold_convert_loc (loc, size_type_nodeglobal_trees[TI_SIZE_TYPE], t); | ||||||
3977 | } | ||||||
3978 | |||||||
3979 | /* Handle C and C++ default attributes. */ | ||||||
3980 | |||||||
3981 | enum built_in_attribute | ||||||
3982 | { | ||||||
3983 | #define DEF_ATTR_NULL_TREE(ENUM) ENUM, | ||||||
3984 | #define DEF_ATTR_INT(ENUM, VALUE) ENUM, | ||||||
3985 | #define DEF_ATTR_STRING(ENUM, VALUE)built_in_attributes[(int) ENUM] = build_string (strlen (VALUE ), VALUE); ENUM, | ||||||
3986 | #define DEF_ATTR_IDENT(ENUM, STRING) ENUM, | ||||||
3987 | #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM, | ||||||
3988 | #include "builtin-attrs.def" | ||||||
3989 | #undef DEF_ATTR_NULL_TREE | ||||||
3990 | #undef DEF_ATTR_INT | ||||||
3991 | #undef DEF_ATTR_STRING | ||||||
3992 | #undef DEF_ATTR_IDENT | ||||||
3993 | #undef DEF_ATTR_TREE_LIST | ||||||
3994 | ATTR_LAST | ||||||
3995 | }; | ||||||
3996 | |||||||
3997 | static GTY(()) tree built_in_attributes[(int) ATTR_LAST]; | ||||||
3998 | |||||||
3999 | static void c_init_attributes (void); | ||||||
4000 | |||||||
4001 | enum c_builtin_type | ||||||
4002 | { | ||||||
4003 | #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME, | ||||||
4004 | #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME, | ||||||
4005 | #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME, | ||||||
4006 | #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME, | ||||||
4007 | #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME, | ||||||
4008 | #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME, | ||||||
4009 | #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME, | ||||||
4010 | #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4011 | ARG6) NAME, | ||||||
4012 | #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4013 | ARG6, ARG7) NAME, | ||||||
4014 | #define DEF_FUNCTION_TYPE_8(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4015 | ARG6, ARG7, ARG8) NAME, | ||||||
4016 | #define DEF_FUNCTION_TYPE_9(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4017 | ARG6, ARG7, ARG8, ARG9) NAME, | ||||||
4018 | #define DEF_FUNCTION_TYPE_10(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4019 | ARG6, ARG7, ARG8, ARG9, ARG10) NAME, | ||||||
4020 | #define DEF_FUNCTION_TYPE_11(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4021 | ARG6, ARG7, ARG8, ARG9, ARG10, ARG11) NAME, | ||||||
4022 | #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME, | ||||||
4023 | #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME, | ||||||
4024 | #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME, | ||||||
4025 | #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME, | ||||||
4026 | #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME, | ||||||
4027 | #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \ | ||||||
4028 | NAME, | ||||||
4029 | #define DEF_FUNCTION_TYPE_VAR_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4030 | ARG6) NAME, | ||||||
4031 | #define DEF_FUNCTION_TYPE_VAR_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4032 | ARG6, ARG7) NAME, | ||||||
4033 | #define DEF_POINTER_TYPE(NAME, TYPE) NAME, | ||||||
4034 | #include "builtin-types.def" | ||||||
4035 | #undef DEF_PRIMITIVE_TYPE | ||||||
4036 | #undef DEF_FUNCTION_TYPE_0 | ||||||
4037 | #undef DEF_FUNCTION_TYPE_1 | ||||||
4038 | #undef DEF_FUNCTION_TYPE_2 | ||||||
4039 | #undef DEF_FUNCTION_TYPE_3 | ||||||
4040 | #undef DEF_FUNCTION_TYPE_4 | ||||||
4041 | #undef DEF_FUNCTION_TYPE_5 | ||||||
4042 | #undef DEF_FUNCTION_TYPE_6 | ||||||
4043 | #undef DEF_FUNCTION_TYPE_7 | ||||||
4044 | #undef DEF_FUNCTION_TYPE_8 | ||||||
4045 | #undef DEF_FUNCTION_TYPE_9 | ||||||
4046 | #undef DEF_FUNCTION_TYPE_10 | ||||||
4047 | #undef DEF_FUNCTION_TYPE_11 | ||||||
4048 | #undef DEF_FUNCTION_TYPE_VAR_0 | ||||||
4049 | #undef DEF_FUNCTION_TYPE_VAR_1 | ||||||
4050 | #undef DEF_FUNCTION_TYPE_VAR_2 | ||||||
4051 | #undef DEF_FUNCTION_TYPE_VAR_3 | ||||||
4052 | #undef DEF_FUNCTION_TYPE_VAR_4 | ||||||
4053 | #undef DEF_FUNCTION_TYPE_VAR_5 | ||||||
4054 | #undef DEF_FUNCTION_TYPE_VAR_6 | ||||||
4055 | #undef DEF_FUNCTION_TYPE_VAR_7 | ||||||
4056 | #undef DEF_POINTER_TYPE | ||||||
4057 | BT_LAST | ||||||
4058 | }; | ||||||
4059 | |||||||
4060 | typedef enum c_builtin_type builtin_type; | ||||||
4061 | |||||||
4062 | /* A temporary array for c_common_nodes_and_builtins. Used in | ||||||
4063 | communication with def_fn_type. */ | ||||||
4064 | static tree builtin_types[(int) BT_LAST + 1]; | ||||||
4065 | |||||||
4066 | /* A helper function for c_common_nodes_and_builtins. Build function type | ||||||
4067 | for DEF with return type RET and N arguments. If VAR is true, then the | ||||||
4068 | function should be variadic after those N arguments, or, if N is zero, | ||||||
4069 | unprototyped. | ||||||
4070 | |||||||
4071 | Takes special care not to ICE if any of the types involved are | ||||||
4072 | error_mark_node, which indicates that said type is not in fact available | ||||||
4073 | (see builtin_type_for_size). In which case the function type as a whole | ||||||
4074 | should be error_mark_node. */ | ||||||
4075 | |||||||
4076 | static void | ||||||
4077 | def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...) | ||||||
4078 | { | ||||||
4079 | tree t; | ||||||
4080 | tree *args = XALLOCAVEC (tree, n)((tree *) __builtin_alloca(sizeof (tree) * (n))); | ||||||
4081 | va_list list; | ||||||
4082 | int i; | ||||||
4083 | |||||||
4084 | va_start (list, n)__builtin_va_start(list, n); | ||||||
4085 | for (i = 0; i < n; ++i) | ||||||
4086 | { | ||||||
4087 | builtin_type a = (builtin_type) va_arg (list, int)__builtin_va_arg(list, int); | ||||||
4088 | t = builtin_types[a]; | ||||||
4089 | if (t == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
4090 | goto egress; | ||||||
4091 | args[i] = t; | ||||||
4092 | } | ||||||
4093 | |||||||
4094 | t = builtin_types[ret]; | ||||||
4095 | if (t == error_mark_nodeglobal_trees[TI_ERROR_MARK]) | ||||||
4096 | goto egress; | ||||||
4097 | if (var) | ||||||
4098 | if (n == 0) | ||||||
4099 | t = build_function_type (t, NULL_TREE(tree) __null); | ||||||
4100 | else | ||||||
4101 | t = build_varargs_function_type_array (t, n, args); | ||||||
4102 | else | ||||||
4103 | t = build_function_type_array (t, n, args); | ||||||
4104 | |||||||
4105 | egress: | ||||||
4106 | builtin_types[def] = t; | ||||||
4107 | va_end (list)__builtin_va_end(list); | ||||||
4108 | } | ||||||
4109 | |||||||
4110 | /* Build builtin functions common to both C and C++ language | ||||||
4111 | frontends. */ | ||||||
4112 | |||||||
4113 | static void | ||||||
4114 | c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node) | ||||||
4115 | { | ||||||
4116 | #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \ | ||||||
4117 | builtin_types[ENUM] = VALUE; | ||||||
4118 | #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \ | ||||||
4119 | def_fn_type (ENUM, RETURN, 0, 0); | ||||||
4120 | #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \ | ||||||
4121 | def_fn_type (ENUM, RETURN, 0, 1, ARG1); | ||||||
4122 | #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \ | ||||||
4123 | def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2); | ||||||
4124 | #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \ | ||||||
4125 | def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3); | ||||||
4126 | #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \ | ||||||
4127 | def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4); | ||||||
4128 | #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \ | ||||||
4129 | def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5); | ||||||
4130 | #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4131 | ARG6) \ | ||||||
4132 | def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); | ||||||
4133 | #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4134 | ARG6, ARG7) \ | ||||||
4135 | def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7); | ||||||
4136 | #define DEF_FUNCTION_TYPE_8(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4137 | ARG6, ARG7, ARG8) \ | ||||||
4138 | def_fn_type (ENUM, RETURN, 0, 8, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, \ | ||||||
4139 | ARG7, ARG8); | ||||||
4140 | #define DEF_FUNCTION_TYPE_9(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4141 | ARG6, ARG7, ARG8, ARG9) \ | ||||||
4142 | def_fn_type (ENUM, RETURN, 0, 9, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, \ | ||||||
4143 | ARG7, ARG8, ARG9); | ||||||
4144 | #define DEF_FUNCTION_TYPE_10(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4145 | ARG6, ARG7, ARG8, ARG9, ARG10) \ | ||||||
4146 | def_fn_type (ENUM, RETURN, 0, 10, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, \ | ||||||
4147 | ARG7, ARG8, ARG9, ARG10); | ||||||
4148 | #define DEF_FUNCTION_TYPE_11(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4149 | ARG6, ARG7, ARG8, ARG9, ARG10, ARG11) \ | ||||||
4150 | def_fn_type (ENUM, RETURN, 0, 11, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, \ | ||||||
4151 | ARG7, ARG8, ARG9, ARG10, ARG11); | ||||||
4152 | #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \ | ||||||
4153 | def_fn_type (ENUM, RETURN, 1, 0); | ||||||
4154 | #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \ | ||||||
4155 | def_fn_type (ENUM, RETURN, 1, 1, ARG1); | ||||||
4156 | #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \ | ||||||
4157 | def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2); | ||||||
4158 | #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \ | ||||||
4159 | def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3); | ||||||
4160 | #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \ | ||||||
4161 | def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4); | ||||||
4162 | #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \ | ||||||
4163 | def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5); | ||||||
4164 | #define DEF_FUNCTION_TYPE_VAR_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4165 | ARG6) \ | ||||||
4166 | def_fn_type (ENUM, RETURN, 1, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); | ||||||
4167 | #define DEF_FUNCTION_TYPE_VAR_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \ | ||||||
4168 | ARG6, ARG7) \ | ||||||
4169 | def_fn_type (ENUM, RETURN, 1, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7); | ||||||
4170 | #define DEF_POINTER_TYPE(ENUM, TYPE) \ | ||||||
4171 | builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]); | ||||||
4172 | |||||||
4173 | #include "builtin-types.def" | ||||||
4174 | |||||||
4175 | #undef DEF_PRIMITIVE_TYPE | ||||||
4176 | #undef DEF_FUNCTION_TYPE_0 | ||||||
4177 | #undef DEF_FUNCTION_TYPE_1 | ||||||
4178 | #undef DEF_FUNCTION_TYPE_2 | ||||||
4179 | #undef DEF_FUNCTION_TYPE_3 | ||||||
4180 | #undef DEF_FUNCTION_TYPE_4 | ||||||
4181 | #undef DEF_FUNCTION_TYPE_5 | ||||||
4182 | #undef DEF_FUNCTION_TYPE_6 | ||||||
4183 | #undef DEF_FUNCTION_TYPE_7 | ||||||
4184 | #undef DEF_FUNCTION_TYPE_8 | ||||||
4185 | #undef DEF_FUNCTION_TYPE_9 | ||||||
4186 | #undef DEF_FUNCTION_TYPE_10 | ||||||
4187 | #undef DEF_FUNCTION_TYPE_11 | ||||||
4188 | #undef DEF_FUNCTION_TYPE_VAR_0 | ||||||
4189 | #undef DEF_FUNCTION_TYPE_VAR_1 | ||||||
4190 | #undef DEF_FUNCTION_TYPE_VAR_2 | ||||||
4191 | #undef DEF_FUNCTION_TYPE_VAR_3 | ||||||
4192 | #undef DEF_FUNCTION_TYPE_VAR_4 | ||||||
4193 | #undef DEF_FUNCTION_TYPE_VAR_5 | ||||||
4194 | #undef DEF_FUNCTION_TYPE_VAR_6 | ||||||
4195 | #undef DEF_FUNCTION_TYPE_VAR_7 | ||||||
4196 | #undef DEF_POINTER_TYPE | ||||||
4197 | builtin_types[(int) BT_LAST] = NULL_TREE(tree) __null; | ||||||
4198 | |||||||
4199 | c_init_attributes (); | ||||||
4200 | |||||||
4201 | #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \ | ||||||
4202 | NONANSI_P, ATTRS, IMPLICIT, COND) \ | ||||||
4203 | if (NAME && COND) \ | ||||||
4204 | def_builtin_1 (ENUM, NAME, CLASS, \ | ||||||
4205 | builtin_types[(int) TYPE], \ | ||||||
4206 | builtin_types[(int) LIBTYPE], \ | ||||||
4207 | BOTH_P, FALLBACK_P, NONANSI_P, \ | ||||||
4208 | built_in_attributes[(int) ATTRS], IMPLICIT); | ||||||
4209 | #include "builtins.def" | ||||||
4210 | |||||||
4211 | targetm.init_builtins (); | ||||||
4212 | |||||||
4213 | build_common_builtin_nodes (); | ||||||
4214 | } | ||||||
4215 | |||||||
4216 | /* Like get_identifier, but avoid warnings about null arguments when | ||||||
4217 | the argument may be NULL for targets where GCC lacks stdint.h type | ||||||
4218 | information. */ | ||||||
4219 | |||||||
4220 | static inline tree | ||||||
4221 | c_get_ident (const char *id) | ||||||
4222 | { | ||||||
4223 | return get_identifier (id)(__builtin_constant_p (id) ? get_identifier_with_length ((id) , strlen (id)) : get_identifier (id)); | ||||||
4224 | } | ||||||
4225 | |||||||
4226 | /* Build tree nodes and builtin functions common to both C and C++ language | ||||||
4227 | frontends. */ | ||||||
4228 | |||||||
4229 | void | ||||||
4230 | c_common_nodes_and_builtins (void) | ||||||
4231 | { | ||||||
4232 | int char8_type_size; | ||||||
4233 | int char16_type_size; | ||||||
4234 | int char32_type_size; | ||||||
4235 | int wchar_type_size; | ||||||
4236 | tree array_domain_type; | ||||||
4237 | tree va_list_ref_type_node; | ||||||
4238 | tree va_list_arg_type_node; | ||||||
4239 | int i; | ||||||
4240 | |||||||
4241 | build_common_tree_nodes (flag_signed_charglobal_options.x_flag_signed_char); | ||||||
4242 | |||||||
4243 | /* Define `int' and `char' first so that dbx will output them first. */ | ||||||
4244 | record_builtin_type (RID_INT, NULL__null, integer_type_nodeinteger_types[itk_int]); | ||||||
4245 | record_builtin_type (RID_CHAR, "char", char_type_nodeinteger_types[itk_char]); | ||||||
4246 | |||||||
4247 | /* `signed' is the same as `int'. FIXME: the declarations of "signed", | ||||||
4248 | "unsigned long", "long long unsigned" and "unsigned short" were in C++ | ||||||
4249 | but not C. Are the conditionals here needed? */ | ||||||
4250 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4251 | record_builtin_type (RID_SIGNED, NULL__null, integer_type_nodeinteger_types[itk_int]); | ||||||
4252 | record_builtin_type (RID_LONG, "long int", long_integer_type_nodeinteger_types[itk_long]); | ||||||
4253 | record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_nodeinteger_types[itk_unsigned_int]); | ||||||
4254 | record_builtin_type (RID_MAX, "long unsigned int", | ||||||
4255 | long_unsigned_type_nodeinteger_types[itk_unsigned_long]); | ||||||
4256 | |||||||
4257 | for (i = 0; i < NUM_INT_N_ENTS1; i ++) | ||||||
4258 | { | ||||||
4259 | char name[25]; | ||||||
4260 | |||||||
4261 | sprintf (name, "__int%d", int_n_data[i].bitsize); | ||||||
4262 | record_builtin_type ((enum rid)(RID_FIRST_INT_N + i), name, | ||||||
4263 | int_n_trees[i].signed_type); | ||||||
4264 | sprintf (name, "__int%d__", int_n_data[i].bitsize); | ||||||
4265 | record_builtin_type ((enum rid)(RID_FIRST_INT_N + i), name, | ||||||
4266 | int_n_trees[i].signed_type); | ||||||
4267 | ridpointers[RID_FIRST_INT_N + i] | ||||||
4268 | = DECL_NAME (TYPE_NAME (int_n_trees[i].signed_type))((contains_struct_check ((((tree_class_check ((int_n_trees[i] .signed_type), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4268, __FUNCTION__))->type_common.name)), (TS_DECL_MINIMAL ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4268, __FUNCTION__))->decl_minimal.name); | ||||||
4269 | |||||||
4270 | sprintf (name, "__int%d unsigned", int_n_data[i].bitsize); | ||||||
4271 | record_builtin_type (RID_MAX, name, int_n_trees[i].unsigned_type); | ||||||
4272 | sprintf (name, "__int%d__ unsigned", int_n_data[i].bitsize); | ||||||
4273 | record_builtin_type (RID_MAX, name, int_n_trees[i].unsigned_type); | ||||||
4274 | } | ||||||
4275 | |||||||
4276 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4277 | record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_nodeinteger_types[itk_unsigned_long]); | ||||||
4278 | record_builtin_type (RID_MAX, "long long int", | ||||||
4279 | long_long_integer_type_nodeinteger_types[itk_long_long]); | ||||||
4280 | record_builtin_type (RID_MAX, "long long unsigned int", | ||||||
4281 | long_long_unsigned_type_nodeinteger_types[itk_unsigned_long_long]); | ||||||
4282 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4283 | record_builtin_type (RID_MAX, "long long unsigned", | ||||||
4284 | long_long_unsigned_type_nodeinteger_types[itk_unsigned_long_long]); | ||||||
4285 | record_builtin_type (RID_SHORT, "short int", short_integer_type_nodeinteger_types[itk_short]); | ||||||
4286 | record_builtin_type (RID_MAX, "short unsigned int", | ||||||
4287 | short_unsigned_type_nodeinteger_types[itk_unsigned_short]); | ||||||
4288 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4289 | record_builtin_type (RID_MAX, "unsigned short", | ||||||
4290 | short_unsigned_type_nodeinteger_types[itk_unsigned_short]); | ||||||
4291 | |||||||
4292 | /* Define both `signed char' and `unsigned char'. */ | ||||||
4293 | record_builtin_type (RID_MAX, "signed char", signed_char_type_nodeinteger_types[itk_signed_char]); | ||||||
4294 | record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_nodeinteger_types[itk_unsigned_char]); | ||||||
4295 | |||||||
4296 | /* These are types that c_common_type_for_size and | ||||||
4297 | c_common_type_for_mode use. */ | ||||||
4298 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4299 | TYPE_DECL, NULL_TREE(tree) __null, | ||||||
4300 | intQI_type_nodeglobal_trees[TI_INTQI_TYPE])); | ||||||
4301 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4302 | TYPE_DECL, NULL_TREE(tree) __null, | ||||||
4303 | intHI_type_nodeglobal_trees[TI_INTHI_TYPE])); | ||||||
4304 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4305 | TYPE_DECL, NULL_TREE(tree) __null, | ||||||
4306 | intSI_type_nodeglobal_trees[TI_INTSI_TYPE])); | ||||||
4307 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4308 | TYPE_DECL, NULL_TREE(tree) __null, | ||||||
4309 | intDI_type_nodeglobal_trees[TI_INTDI_TYPE])); | ||||||
4310 | #if HOST_BITS_PER_WIDE_INT64 >= 64 | ||||||
4311 | /* Note that this is different than the __int128 type that's part of | ||||||
4312 | the generic __intN support. */ | ||||||
4313 | if (targetm.scalar_mode_supported_p (TImode(scalar_int_mode ((scalar_int_mode::from_int) E_TImode)))) | ||||||
4314 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4315 | TYPE_DECL, | ||||||
4316 | get_identifier ("__int128_t")(__builtin_constant_p ("__int128_t") ? get_identifier_with_length (("__int128_t"), strlen ("__int128_t")) : get_identifier ("__int128_t" )), | ||||||
4317 | intTI_type_nodeglobal_trees[TI_INTTI_TYPE])); | ||||||
4318 | #endif | ||||||
4319 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4320 | TYPE_DECL, NULL_TREE(tree) __null, | ||||||
4321 | unsigned_intQI_type_nodeglobal_trees[TI_UINTQI_TYPE])); | ||||||
4322 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4323 | TYPE_DECL, NULL_TREE(tree) __null, | ||||||
4324 | unsigned_intHI_type_nodeglobal_trees[TI_UINTHI_TYPE])); | ||||||
4325 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4326 | TYPE_DECL, NULL_TREE(tree) __null, | ||||||
4327 | unsigned_intSI_type_nodeglobal_trees[TI_UINTSI_TYPE])); | ||||||
4328 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4329 | TYPE_DECL, NULL_TREE(tree) __null, | ||||||
4330 | unsigned_intDI_type_nodeglobal_trees[TI_UINTDI_TYPE])); | ||||||
4331 | #if HOST_BITS_PER_WIDE_INT64 >= 64 | ||||||
4332 | if (targetm.scalar_mode_supported_p (TImode(scalar_int_mode ((scalar_int_mode::from_int) E_TImode)))) | ||||||
4333 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4334 | TYPE_DECL, | ||||||
4335 | get_identifier ("__uint128_t")(__builtin_constant_p ("__uint128_t") ? get_identifier_with_length (("__uint128_t"), strlen ("__uint128_t")) : get_identifier ( "__uint128_t")), | ||||||
4336 | unsigned_intTI_type_nodeglobal_trees[TI_UINTTI_TYPE])); | ||||||
4337 | #endif | ||||||
4338 | |||||||
4339 | /* Create the widest literal types. */ | ||||||
4340 | if (targetm.scalar_mode_supported_p (TImode(scalar_int_mode ((scalar_int_mode::from_int) E_TImode)))) | ||||||
4341 | { | ||||||
4342 | widest_integer_literal_type_nodec_global_trees[CTI_WIDEST_INT_LIT_TYPE] = intTI_type_nodeglobal_trees[TI_INTTI_TYPE]; | ||||||
4343 | widest_unsigned_literal_type_nodec_global_trees[CTI_WIDEST_UINT_LIT_TYPE] = unsigned_intTI_type_nodeglobal_trees[TI_UINTTI_TYPE]; | ||||||
4344 | } | ||||||
4345 | else | ||||||
4346 | { | ||||||
4347 | widest_integer_literal_type_nodec_global_trees[CTI_WIDEST_INT_LIT_TYPE] = intDI_type_nodeglobal_trees[TI_INTDI_TYPE]; | ||||||
4348 | widest_unsigned_literal_type_nodec_global_trees[CTI_WIDEST_UINT_LIT_TYPE] = unsigned_intDI_type_nodeglobal_trees[TI_UINTDI_TYPE]; | ||||||
4349 | } | ||||||
4350 | |||||||
4351 | signed_size_type_nodec_global_trees[CTI_SIGNED_SIZE_TYPE] = c_common_signed_type (size_type_nodeglobal_trees[TI_SIZE_TYPE]); | ||||||
4352 | |||||||
4353 | pid_type_nodeglobal_trees[TI_PID_TYPE] = | ||||||
4354 | TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)))((contains_struct_check ((identifier_global_value ((__builtin_constant_p ("int") ? get_identifier_with_length (("int"), strlen ("int" )) : get_identifier ("int")))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4354, __FUNCTION__))->typed.type); | ||||||
4355 | |||||||
4356 | record_builtin_type (RID_FLOAT, NULL__null, float_type_nodeglobal_trees[TI_FLOAT_TYPE]); | ||||||
4357 | record_builtin_type (RID_DOUBLE, NULL__null, double_type_nodeglobal_trees[TI_DOUBLE_TYPE]); | ||||||
4358 | record_builtin_type (RID_MAX, "long double", long_double_type_nodeglobal_trees[TI_LONG_DOUBLE_TYPE]); | ||||||
4359 | |||||||
4360 | for (i = 0; i < NUM_FLOATN_NX_TYPES(TI_FLOATN_NX_TYPE_LAST - TI_FLOATN_NX_TYPE_FIRST + 1); i++) | ||||||
4361 | { | ||||||
4362 | if (FLOATN_NX_TYPE_NODE (i)global_trees[TI_FLOATN_NX_TYPE_FIRST + (i)] != NULL_TREE(tree) __null) | ||||||
4363 | record_builtin_type ((enum rid) (RID_FLOATN_NX_FIRST + i), NULL__null, | ||||||
4364 | FLOATN_NX_TYPE_NODE (i)global_trees[TI_FLOATN_NX_TYPE_FIRST + (i)]); | ||||||
4365 | } | ||||||
4366 | |||||||
4367 | /* For C, let float128t_type_node (__float128 in some backends) be the | ||||||
4368 | same type as float128_type_node (_Float128), for C++ let those | ||||||
4369 | be distinct types that mangle and behave differently. */ | ||||||
4370 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4371 | float128t_type_nodeglobal_trees[TI_FLOAT128T_TYPE] = NULL_TREE(tree) __null; | ||||||
4372 | |||||||
4373 | /* Only supported decimal floating point extension if the target | ||||||
4374 | actually supports underlying modes. */ | ||||||
4375 | if (targetm.scalar_mode_supported_p (SDmode(scalar_float_mode ((scalar_float_mode::from_int) E_SDmode))) | ||||||
4376 | && targetm.scalar_mode_supported_p (DDmode(scalar_float_mode ((scalar_float_mode::from_int) E_DDmode))) | ||||||
4377 | && targetm.scalar_mode_supported_p (TDmode(scalar_float_mode ((scalar_float_mode::from_int) E_TDmode)))) | ||||||
4378 | { | ||||||
4379 | record_builtin_type (RID_DFLOAT32, NULL__null, dfloat32_type_nodeglobal_trees[TI_DFLOAT32_TYPE]); | ||||||
4380 | record_builtin_type (RID_DFLOAT64, NULL__null, dfloat64_type_nodeglobal_trees[TI_DFLOAT64_TYPE]); | ||||||
4381 | record_builtin_type (RID_DFLOAT128, NULL__null, dfloat128_type_nodeglobal_trees[TI_DFLOAT128_TYPE]); | ||||||
4382 | } | ||||||
4383 | |||||||
4384 | if (targetm.fixed_point_supported_p ()) | ||||||
4385 | { | ||||||
4386 | record_builtin_type (RID_MAX, "short _Fract", short_fract_type_nodeglobal_trees[TI_SFRACT_TYPE]); | ||||||
4387 | record_builtin_type (RID_FRACT, NULL__null, fract_type_nodeglobal_trees[TI_FRACT_TYPE]); | ||||||
4388 | record_builtin_type (RID_MAX, "long _Fract", long_fract_type_nodeglobal_trees[TI_LFRACT_TYPE]); | ||||||
4389 | record_builtin_type (RID_MAX, "long long _Fract", | ||||||
4390 | long_long_fract_type_nodeglobal_trees[TI_LLFRACT_TYPE]); | ||||||
4391 | record_builtin_type (RID_MAX, "unsigned short _Fract", | ||||||
4392 | unsigned_short_fract_type_nodeglobal_trees[TI_USFRACT_TYPE]); | ||||||
4393 | record_builtin_type (RID_MAX, "unsigned _Fract", | ||||||
4394 | unsigned_fract_type_nodeglobal_trees[TI_UFRACT_TYPE]); | ||||||
4395 | record_builtin_type (RID_MAX, "unsigned long _Fract", | ||||||
4396 | unsigned_long_fract_type_nodeglobal_trees[TI_ULFRACT_TYPE]); | ||||||
4397 | record_builtin_type (RID_MAX, "unsigned long long _Fract", | ||||||
4398 | unsigned_long_long_fract_type_nodeglobal_trees[TI_ULLFRACT_TYPE]); | ||||||
4399 | record_builtin_type (RID_MAX, "_Sat short _Fract", | ||||||
4400 | sat_short_fract_type_nodeglobal_trees[TI_SAT_SFRACT_TYPE]); | ||||||
4401 | record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_nodeglobal_trees[TI_SAT_FRACT_TYPE]); | ||||||
4402 | record_builtin_type (RID_MAX, "_Sat long _Fract", | ||||||
4403 | sat_long_fract_type_nodeglobal_trees[TI_SAT_LFRACT_TYPE]); | ||||||
4404 | record_builtin_type (RID_MAX, "_Sat long long _Fract", | ||||||
4405 | sat_long_long_fract_type_nodeglobal_trees[TI_SAT_LLFRACT_TYPE]); | ||||||
4406 | record_builtin_type (RID_MAX, "_Sat unsigned short _Fract", | ||||||
4407 | sat_unsigned_short_fract_type_nodeglobal_trees[TI_SAT_USFRACT_TYPE]); | ||||||
4408 | record_builtin_type (RID_MAX, "_Sat unsigned _Fract", | ||||||
4409 | sat_unsigned_fract_type_nodeglobal_trees[TI_SAT_UFRACT_TYPE]); | ||||||
4410 | record_builtin_type (RID_MAX, "_Sat unsigned long _Fract", | ||||||
4411 | sat_unsigned_long_fract_type_nodeglobal_trees[TI_SAT_ULFRACT_TYPE]); | ||||||
4412 | record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract", | ||||||
4413 | sat_unsigned_long_long_fract_type_nodeglobal_trees[TI_SAT_ULLFRACT_TYPE]); | ||||||
4414 | record_builtin_type (RID_MAX, "short _Accum", short_accum_type_nodeglobal_trees[TI_SACCUM_TYPE]); | ||||||
4415 | record_builtin_type (RID_ACCUM, NULL__null, accum_type_nodeglobal_trees[TI_ACCUM_TYPE]); | ||||||
4416 | record_builtin_type (RID_MAX, "long _Accum", long_accum_type_nodeglobal_trees[TI_LACCUM_TYPE]); | ||||||
4417 | record_builtin_type (RID_MAX, "long long _Accum", | ||||||
4418 | long_long_accum_type_nodeglobal_trees[TI_LLACCUM_TYPE]); | ||||||
4419 | record_builtin_type (RID_MAX, "unsigned short _Accum", | ||||||
4420 | unsigned_short_accum_type_nodeglobal_trees[TI_USACCUM_TYPE]); | ||||||
4421 | record_builtin_type (RID_MAX, "unsigned _Accum", | ||||||
4422 | unsigned_accum_type_nodeglobal_trees[TI_UACCUM_TYPE]); | ||||||
4423 | record_builtin_type (RID_MAX, "unsigned long _Accum", | ||||||
4424 | unsigned_long_accum_type_nodeglobal_trees[TI_ULACCUM_TYPE]); | ||||||
4425 | record_builtin_type (RID_MAX, "unsigned long long _Accum", | ||||||
4426 | unsigned_long_long_accum_type_nodeglobal_trees[TI_ULLACCUM_TYPE]); | ||||||
4427 | record_builtin_type (RID_MAX, "_Sat short _Accum", | ||||||
4428 | sat_short_accum_type_nodeglobal_trees[TI_SAT_SACCUM_TYPE]); | ||||||
4429 | record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_nodeglobal_trees[TI_SAT_ACCUM_TYPE]); | ||||||
4430 | record_builtin_type (RID_MAX, "_Sat long _Accum", | ||||||
4431 | sat_long_accum_type_nodeglobal_trees[TI_SAT_LACCUM_TYPE]); | ||||||
4432 | record_builtin_type (RID_MAX, "_Sat long long _Accum", | ||||||
4433 | sat_long_long_accum_type_nodeglobal_trees[TI_SAT_LLACCUM_TYPE]); | ||||||
4434 | record_builtin_type (RID_MAX, "_Sat unsigned short _Accum", | ||||||
4435 | sat_unsigned_short_accum_type_nodeglobal_trees[TI_SAT_USACCUM_TYPE]); | ||||||
4436 | record_builtin_type (RID_MAX, "_Sat unsigned _Accum", | ||||||
4437 | sat_unsigned_accum_type_nodeglobal_trees[TI_SAT_UACCUM_TYPE]); | ||||||
4438 | record_builtin_type (RID_MAX, "_Sat unsigned long _Accum", | ||||||
4439 | sat_unsigned_long_accum_type_nodeglobal_trees[TI_SAT_ULACCUM_TYPE]); | ||||||
4440 | record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum", | ||||||
4441 | sat_unsigned_long_long_accum_type_nodeglobal_trees[TI_SAT_ULLACCUM_TYPE]); | ||||||
4442 | |||||||
4443 | } | ||||||
4444 | |||||||
4445 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4446 | TYPE_DECL, | ||||||
4447 | get_identifier ("complex int")(__builtin_constant_p ("complex int") ? get_identifier_with_length (("complex int"), strlen ("complex int")) : get_identifier ( "complex int")), | ||||||
4448 | complex_integer_type_nodeglobal_trees[TI_COMPLEX_INTEGER_TYPE])); | ||||||
4449 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4450 | TYPE_DECL, | ||||||
4451 | get_identifier ("complex float")(__builtin_constant_p ("complex float") ? get_identifier_with_length (("complex float"), strlen ("complex float")) : get_identifier ("complex float")), | ||||||
4452 | complex_float_type_nodeglobal_trees[TI_COMPLEX_FLOAT_TYPE])); | ||||||
4453 | lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4454 | TYPE_DECL, | ||||||
4455 | get_identifier ("complex double")(__builtin_constant_p ("complex double") ? get_identifier_with_length (("complex double"), strlen ("complex double")) : get_identifier ("complex double")), | ||||||
4456 | complex_double_type_nodeglobal_trees[TI_COMPLEX_DOUBLE_TYPE])); | ||||||
4457 | lang_hooks.decls.pushdecl | ||||||
4458 | (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4459 | TYPE_DECL, get_identifier ("complex long double")(__builtin_constant_p ("complex long double") ? get_identifier_with_length (("complex long double"), strlen ("complex long double")) : get_identifier ("complex long double")), | ||||||
4460 | complex_long_double_type_nodeglobal_trees[TI_COMPLEX_LONG_DOUBLE_TYPE])); | ||||||
4461 | |||||||
4462 | if (!c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4463 | for (i = 0; i < NUM_FLOATN_NX_TYPES(TI_FLOATN_NX_TYPE_LAST - TI_FLOATN_NX_TYPE_FIRST + 1); i++) | ||||||
4464 | if (COMPLEX_FLOATN_NX_TYPE_NODE (i)global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (i)] != NULL_TREE(tree) __null) | ||||||
4465 | { | ||||||
4466 | char buf[30]; | ||||||
4467 | sprintf (buf, "complex _Float%d%s", floatn_nx_types[i].n, | ||||||
4468 | floatn_nx_types[i].extended ? "x" : ""); | ||||||
4469 | lang_hooks.decls.pushdecl | ||||||
4470 | (build_decl (UNKNOWN_LOCATION((location_t) 0), | ||||||
4471 | TYPE_DECL, | ||||||
4472 | get_identifier (buf)(__builtin_constant_p (buf) ? get_identifier_with_length ((buf ), strlen (buf)) : get_identifier (buf)), | ||||||
4473 | COMPLEX_FLOATN_NX_TYPE_NODE (i)global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (i)])); | ||||||
4474 | } | ||||||
4475 | |||||||
4476 | /* Make fileptr_type_node a distinct void * type until | ||||||
4477 | FILE type is defined. Likewise for const struct tm*. */ | ||||||
4478 | for (unsigned i = 0; i < ARRAY_SIZE (builtin_structptr_types)(sizeof (builtin_structptr_types) / sizeof ((builtin_structptr_types )[0])); ++i) | ||||||
4479 | builtin_structptr_types[i].node | ||||||
4480 | = build_variant_type_copy (builtin_structptr_types[i].base); | ||||||
4481 | |||||||
4482 | record_builtin_type (RID_VOID, NULL__null, void_type_nodeglobal_trees[TI_VOID_TYPE]); | ||||||
4483 | |||||||
4484 | /* Set the TYPE_NAME for any variants that were built before | ||||||
4485 | record_builtin_type gave names to the built-in types. */ | ||||||
4486 | { | ||||||
4487 | tree void_name = TYPE_NAME (void_type_node)((tree_class_check ((global_trees[TI_VOID_TYPE]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4487, __FUNCTION__))->type_common.name); | ||||||
4488 | TYPE_NAME (void_type_node)((tree_class_check ((global_trees[TI_VOID_TYPE]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4488, __FUNCTION__))->type_common.name) = NULL_TREE(tree) __null; | ||||||
4489 | TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))((tree_class_check ((build_qualified_type (global_trees[TI_VOID_TYPE ], TYPE_QUAL_CONST)), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4489, __FUNCTION__))->type_common.name) | ||||||
4490 | = void_name; | ||||||
4491 | TYPE_NAME (void_type_node)((tree_class_check ((global_trees[TI_VOID_TYPE]), (tcc_type), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4491, __FUNCTION__))->type_common.name) = void_name; | ||||||
4492 | } | ||||||
4493 | |||||||
4494 | /* Make a type to be the domain of a few array types | ||||||
4495 | whose domains don't really matter. | ||||||
4496 | 200 is small enough that it always fits in size_t | ||||||
4497 | and large enough that it can hold most function names for the | ||||||
4498 | initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */ | ||||||
4499 | array_domain_type = build_index_type (size_int (200)size_int_kind (200, stk_sizetype)); | ||||||
4500 | |||||||
4501 | /* Make a type for arrays of characters. | ||||||
4502 | With luck nothing will ever really depend on the length of this | ||||||
4503 | array type. */ | ||||||
4504 | char_array_type_nodec_global_trees[CTI_CHAR_ARRAY_TYPE] | ||||||
4505 | = build_array_type (char_type_nodeinteger_types[itk_char], array_domain_type); | ||||||
4506 | |||||||
4507 | string_type_nodec_global_trees[CTI_STRING_TYPE] = build_pointer_type (char_type_nodeinteger_types[itk_char]); | ||||||
4508 | const_string_type_nodec_global_trees[CTI_CONST_STRING_TYPE] | ||||||
4509 | = build_pointer_type (build_qualified_type | ||||||
4510 | (char_type_nodeinteger_types[itk_char], TYPE_QUAL_CONST)); | ||||||
4511 | |||||||
4512 | /* This is special for C++ so functions can be overloaded. */ | ||||||
4513 | wchar_type_nodec_global_trees[CTI_WCHAR_TYPE] = get_identifier (MODIFIED_WCHAR_TYPE)(__builtin_constant_p ((global_options.x_flag_short_wchar ? "short unsigned int" : (((global_options.x_ix86_isa_flags & (1UL << 4)) != 0) ? "int" : "long int"))) ? get_identifier_with_length ( ((global_options.x_flag_short_wchar ? "short unsigned int" : ( ((global_options.x_ix86_isa_flags & (1UL << 4)) != 0 ) ? "int" : "long int"))), strlen ((global_options.x_flag_short_wchar ? "short unsigned int" : (((global_options.x_ix86_isa_flags & (1UL << 4)) != 0) ? "int" : "long int")))) : get_identifier ((global_options.x_flag_short_wchar ? "short unsigned int" : (((global_options.x_ix86_isa_flags & (1UL << 4)) != 0) ? "int" : "long int")))); | ||||||
4514 | wchar_type_nodec_global_trees[CTI_WCHAR_TYPE] = TREE_TYPE (identifier_global_value (wchar_type_node))((contains_struct_check ((identifier_global_value (c_global_trees [CTI_WCHAR_TYPE])), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4514, __FUNCTION__))->typed.type); | ||||||
4515 | wchar_type_size = TYPE_PRECISION (wchar_type_node)((tree_class_check ((c_global_trees[CTI_WCHAR_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4515, __FUNCTION__))->type_common.precision); | ||||||
4516 | underlying_wchar_type_nodec_global_trees[CTI_UNDERLYING_WCHAR_TYPE] = wchar_type_nodec_global_trees[CTI_WCHAR_TYPE]; | ||||||
4517 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4518 | { | ||||||
4519 | if (TYPE_UNSIGNED (wchar_type_node)((tree_class_check ((c_global_trees[CTI_WCHAR_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4519, __FUNCTION__))->base.u.bits.unsigned_flag)) | ||||||
4520 | wchar_type_nodec_global_trees[CTI_WCHAR_TYPE] = make_unsigned_type (wchar_type_size); | ||||||
4521 | else | ||||||
4522 | wchar_type_nodec_global_trees[CTI_WCHAR_TYPE] = make_signed_type (wchar_type_size); | ||||||
4523 | record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_nodec_global_trees[CTI_WCHAR_TYPE]); | ||||||
4524 | } | ||||||
4525 | |||||||
4526 | /* This is for wide string constants. */ | ||||||
4527 | wchar_array_type_nodec_global_trees[CTI_WCHAR_ARRAY_TYPE] | ||||||
4528 | = build_array_type (wchar_type_nodec_global_trees[CTI_WCHAR_TYPE], array_domain_type); | ||||||
4529 | |||||||
4530 | /* Define 'char8_t'. */ | ||||||
4531 | char8_type_nodec_global_trees[CTI_CHAR8_TYPE] = get_identifier (CHAR8_TYPE)(__builtin_constant_p ("unsigned char") ? get_identifier_with_length (("unsigned char"), strlen ("unsigned char")) : get_identifier ("unsigned char")); | ||||||
4532 | char8_type_nodec_global_trees[CTI_CHAR8_TYPE] = TREE_TYPE (identifier_global_value (char8_type_node))((contains_struct_check ((identifier_global_value (c_global_trees [CTI_CHAR8_TYPE])), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4532, __FUNCTION__))->typed.type); | ||||||
4533 | char8_type_size = TYPE_PRECISION (char8_type_node)((tree_class_check ((c_global_trees[CTI_CHAR8_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4533, __FUNCTION__))->type_common.precision); | ||||||
4534 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4535 | { | ||||||
4536 | char8_type_nodec_global_trees[CTI_CHAR8_TYPE] = make_unsigned_type (char8_type_size); | ||||||
4537 | TYPE_STRING_FLAG (char8_type_node)((tree_check2 ((c_global_trees[CTI_CHAR8_TYPE]), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4537, __FUNCTION__, (ARRAY_TYPE), (INTEGER_TYPE)))->type_common .string_flag) = true; | ||||||
4538 | |||||||
4539 | if (flag_char8_tglobal_options.x_flag_char8_t) | ||||||
4540 | record_builtin_type (RID_CHAR8, "char8_t", char8_type_nodec_global_trees[CTI_CHAR8_TYPE]); | ||||||
4541 | } | ||||||
4542 | |||||||
4543 | /* This is for UTF-8 string constants. */ | ||||||
4544 | char8_array_type_nodec_global_trees[CTI_CHAR8_ARRAY_TYPE] | ||||||
4545 | = build_array_type (char8_type_nodec_global_trees[CTI_CHAR8_TYPE], array_domain_type); | ||||||
4546 | |||||||
4547 | /* Define 'char16_t'. */ | ||||||
4548 | char16_type_nodec_global_trees[CTI_CHAR16_TYPE] = get_identifier (CHAR16_TYPE)(__builtin_constant_p ("short unsigned int") ? get_identifier_with_length (("short unsigned int"), strlen ("short unsigned int")) : get_identifier ("short unsigned int")); | ||||||
4549 | char16_type_nodec_global_trees[CTI_CHAR16_TYPE] = TREE_TYPE (identifier_global_value (char16_type_node))((contains_struct_check ((identifier_global_value (c_global_trees [CTI_CHAR16_TYPE])), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4549, __FUNCTION__))->typed.type); | ||||||
4550 | char16_type_size = TYPE_PRECISION (char16_type_node)((tree_class_check ((c_global_trees[CTI_CHAR16_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4550, __FUNCTION__))->type_common.precision); | ||||||
4551 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4552 | { | ||||||
4553 | char16_type_nodec_global_trees[CTI_CHAR16_TYPE] = make_unsigned_type (char16_type_size); | ||||||
4554 | |||||||
4555 | if (cxx_dialect >= cxx11) | ||||||
4556 | record_builtin_type (RID_CHAR16, "char16_t", char16_type_nodec_global_trees[CTI_CHAR16_TYPE]); | ||||||
4557 | } | ||||||
4558 | |||||||
4559 | /* This is for UTF-16 string constants. */ | ||||||
4560 | char16_array_type_nodec_global_trees[CTI_CHAR16_ARRAY_TYPE] | ||||||
4561 | = build_array_type (char16_type_nodec_global_trees[CTI_CHAR16_TYPE], array_domain_type); | ||||||
4562 | |||||||
4563 | /* Define 'char32_t'. */ | ||||||
4564 | char32_type_nodec_global_trees[CTI_CHAR32_TYPE] = get_identifier (CHAR32_TYPE)(__builtin_constant_p ("unsigned int") ? get_identifier_with_length (("unsigned int"), strlen ("unsigned int")) : get_identifier ("unsigned int")); | ||||||
4565 | char32_type_nodec_global_trees[CTI_CHAR32_TYPE] = TREE_TYPE (identifier_global_value (char32_type_node))((contains_struct_check ((identifier_global_value (c_global_trees [CTI_CHAR32_TYPE])), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4565, __FUNCTION__))->typed.type); | ||||||
4566 | char32_type_size = TYPE_PRECISION (char32_type_node)((tree_class_check ((c_global_trees[CTI_CHAR32_TYPE]), (tcc_type ), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4566, __FUNCTION__))->type_common.precision); | ||||||
4567 | if (c_dialect_cxx ()((c_language & clk_cxx) != 0)) | ||||||
4568 | { | ||||||
4569 | char32_type_nodec_global_trees[CTI_CHAR32_TYPE] = make_unsigned_type (char32_type_size); | ||||||
4570 | |||||||
4571 | if (cxx_dialect >= cxx11) | ||||||
4572 | record_builtin_type (RID_CHAR32, "char32_t", char32_type_nodec_global_trees[CTI_CHAR32_TYPE]); | ||||||
4573 | } | ||||||
4574 | |||||||
4575 | /* This is for UTF-32 string constants. */ | ||||||
4576 | char32_array_type_nodec_global_trees[CTI_CHAR32_ARRAY_TYPE] | ||||||
4577 | = build_array_type (char32_type_nodec_global_trees[CTI_CHAR32_TYPE], array_domain_type); | ||||||
4578 | |||||||
4579 | if (strcmp (WINT_TYPE"unsigned int", "wchar_t") == 0) | ||||||
4580 | wint_type_nodec_global_trees[CTI_WINT_TYPE] = wchar_type_nodec_global_trees[CTI_WCHAR_TYPE]; | ||||||
4581 | else | ||||||
4582 | wint_type_nodec_global_trees[CTI_WINT_TYPE] = | ||||||
4583 | TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)))((contains_struct_check ((identifier_global_value ((__builtin_constant_p ("unsigned int") ? get_identifier_with_length (("unsigned int" ), strlen ("unsigned int")) : get_identifier ("unsigned int") ))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4583, __FUNCTION__))->typed.type); | ||||||
4584 | |||||||
4585 | intmax_type_nodec_global_trees[CTI_INTMAX_TYPE] = | ||||||
4586 | TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)))((contains_struct_check ((identifier_global_value ((__builtin_constant_p (((32 == 64) ? "int" : (((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64) ? "long int" : "long long int"))) ? get_identifier_with_length ((((32 == 64 ) ? "int" : (((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64) ? "long int" : "long long int" ))), strlen (((32 == 64) ? "int" : (((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options .x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64) ? "long int" : "long long int")))) : get_identifier (((32 == 64) ? "int" : (((((global_options.x_ix86_isa_flags & ( 1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64) ? "long int" : "long long int")))))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4586, __FUNCTION__))->typed.type); | ||||||
4587 | uintmax_type_nodec_global_trees[CTI_UINTMAX_TYPE] = | ||||||
4588 | TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)))((contains_struct_check ((identifier_global_value ((__builtin_constant_p (((32 == 64) ? "unsigned int" : (((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options .x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64) ? "long unsigned int" : "long long unsigned int"))) ? get_identifier_with_length ((((32 == 64) ? "unsigned int" : (((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options .x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64) ? "long unsigned int" : "long long unsigned int"))), strlen (((32 == 64) ? "unsigned int" : (((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options .x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64) ? "long unsigned int" : "long long unsigned int")))) : get_identifier (((32 == 64) ? "unsigned int" : (((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options .x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64) ? "long unsigned int" : "long long unsigned int")))))), ( TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4588, __FUNCTION__))->typed.type); | ||||||
4589 | |||||||
4590 | if (SIG_ATOMIC_TYPE"int") | ||||||
4591 | sig_atomic_type_nodec_global_trees[CTI_SIG_ATOMIC_TYPE] = | ||||||
4592 | TREE_TYPE (identifier_global_value (c_get_ident (SIG_ATOMIC_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4592, __FUNCTION__))->typed.type); | ||||||
4593 | if (INT8_TYPE"signed char") | ||||||
4594 | int8_type_nodec_global_trees[CTI_INT8_TYPE] = | ||||||
4595 | TREE_TYPE (identifier_global_value (c_get_ident (INT8_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("signed char"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4595, __FUNCTION__))->typed.type); | ||||||
4596 | if (INT16_TYPE"short int") | ||||||
4597 | int16_type_nodec_global_trees[CTI_INT16_TYPE] = | ||||||
4598 | TREE_TYPE (identifier_global_value (c_get_ident (INT16_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("short int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4598, __FUNCTION__))->typed.type); | ||||||
4599 | if (INT32_TYPE"int") | ||||||
4600 | int32_type_nodec_global_trees[CTI_INT32_TYPE] = | ||||||
4601 | TREE_TYPE (identifier_global_value (c_get_ident (INT32_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4601, __FUNCTION__))->typed.type); | ||||||
4602 | if (INT64_TYPE((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 ? "long int" : "long long int" )) | ||||||
4603 | int64_type_nodec_global_trees[CTI_INT64_TYPE] = | ||||||
4604 | TREE_TYPE (identifier_global_value (c_get_ident (INT64_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident (((((global_options.x_ix86_isa_flags & (1UL << 58) ) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 ? "long int" : "long long int" )))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4604, __FUNCTION__))->typed.type); | ||||||
4605 | if (UINT8_TYPE"unsigned char") | ||||||
4606 | uint8_type_nodec_global_trees[CTI_UINT8_TYPE] = | ||||||
4607 | TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("unsigned char"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4607, __FUNCTION__))->typed.type); | ||||||
4608 | if (UINT16_TYPE"short unsigned int") | ||||||
4609 | c_uint16_type_nodec_global_trees[CTI_UINT16_TYPE] = uint16_type_nodeglobal_trees[TI_UINT16_TYPE] = | ||||||
4610 | TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("short unsigned int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4610, __FUNCTION__))->typed.type); | ||||||
4611 | if (UINT32_TYPE"unsigned int") | ||||||
4612 | c_uint32_type_nodec_global_trees[CTI_UINT32_TYPE] = uint32_type_nodeglobal_trees[TI_UINT32_TYPE] = | ||||||
4613 | TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("unsigned int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4613, __FUNCTION__))->typed.type); | ||||||
4614 | if (UINT64_TYPE((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 ? "long unsigned int" : "long long unsigned int" )) | ||||||
4615 | c_uint64_type_nodec_global_trees[CTI_UINT64_TYPE] = uint64_type_nodeglobal_trees[TI_UINT64_TYPE] = | ||||||
4616 | TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident (((((global_options.x_ix86_isa_flags & (1UL << 58) ) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 ? "long unsigned int" : "long long unsigned int")))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4616, __FUNCTION__))->typed.type); | ||||||
4617 | if (INT_LEAST8_TYPE"signed char") | ||||||
4618 | int_least8_type_nodec_global_trees[CTI_INT_LEAST8_TYPE] = | ||||||
4619 | TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST8_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("signed char"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4619, __FUNCTION__))->typed.type); | ||||||
4620 | if (INT_LEAST16_TYPE"short int") | ||||||
4621 | int_least16_type_nodec_global_trees[CTI_INT_LEAST16_TYPE] = | ||||||
4622 | TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST16_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("short int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4622, __FUNCTION__))->typed.type); | ||||||
4623 | if (INT_LEAST32_TYPE"int") | ||||||
4624 | int_least32_type_nodec_global_trees[CTI_INT_LEAST32_TYPE] = | ||||||
4625 | TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST32_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4625, __FUNCTION__))->typed.type); | ||||||
4626 | if (INT_LEAST64_TYPE((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 ? "long int" : "long long int" )) | ||||||
4627 | int_least64_type_nodec_global_trees[CTI_INT_LEAST64_TYPE] = | ||||||
4628 | TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST64_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident (((((global_options.x_ix86_isa_flags & (1UL << 58) ) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 ? "long int" : "long long int" )))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4628, __FUNCTION__))->typed.type); | ||||||
4629 | if (UINT_LEAST8_TYPE"unsigned char") | ||||||
4630 | uint_least8_type_nodec_global_trees[CTI_UINT_LEAST8_TYPE] = | ||||||
4631 | TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST8_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("unsigned char"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4631, __FUNCTION__))->typed.type); | ||||||
4632 | if (UINT_LEAST16_TYPE"short unsigned int") | ||||||
4633 | uint_least16_type_nodec_global_trees[CTI_UINT_LEAST16_TYPE] = | ||||||
4634 | TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST16_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("short unsigned int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4634, __FUNCTION__))->typed.type); | ||||||
4635 | if (UINT_LEAST32_TYPE"unsigned int") | ||||||
4636 | uint_least32_type_nodec_global_trees[CTI_UINT_LEAST32_TYPE] = | ||||||
4637 | TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST32_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("unsigned int"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4637, __FUNCTION__))->typed.type); | ||||||
4638 | if (UINT_LEAST64_TYPE((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 ? "long unsigned int" : "long long unsigned int" )) | ||||||
4639 | uint_least64_type_nodec_global_trees[CTI_UINT_LEAST64_TYPE] = | ||||||
4640 | TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST64_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident (((((global_options.x_ix86_isa_flags & (1UL << 58) ) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 ? "long unsigned int" : "long long unsigned int")))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4640, __FUNCTION__))->typed.type); | ||||||
4641 | if (INT_FAST8_TYPE"signed char") | ||||||
4642 | int_fast8_type_nodec_global_trees[CTI_INT_FAST8_TYPE] = | ||||||
4643 | TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST8_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident ("signed char"))), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4643, __FUNCTION__))->typed.type); | ||||||
4644 | if (INT_FAST16_TYPE((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 && !((&global_options )->x_linux_libc == 4) ? "long int" : "int")) | ||||||
4645 | int_fast16_type_nodec_global_trees[CTI_INT_FAST16_TYPE] = | ||||||
4646 | TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST16_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident (((((global_options.x_ix86_isa_flags & (1UL << 58) ) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 && !((& global_options)->x_linux_libc == 4) ? "long int" : "int")) )), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4646, __FUNCTION__))->typed.type); | ||||||
4647 | if (INT_FAST32_TYPE((((global_options.x_ix86_isa_flags & (1UL << 58)) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 && !((&global_options )->x_linux_libc == 4) ? "long int" : "int")) | ||||||
4648 | int_fast32_type_nodec_global_trees[CTI_INT_FAST32_TYPE] = | ||||||
4649 | TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST32_TYPE)))((contains_struct_check ((identifier_global_value (c_get_ident (((((global_options.x_ix86_isa_flags & (1UL << 58) ) != 0) ? 32 : ((8) * (((global_options.x_ix86_isa_flags & (1UL << 1)) != 0) ? 8 : 4))) == 64 && !((& global_options)->x_linux_libc == 4) ? "long int" : "int")) )), (TS_TYPED), "/buildworker/marxinbox-gcc-clang-static-analyzer/build/gcc/c-family/c-common.cc" , 4649, __FUNCTION__))->typed.type); | ||||||
4650 | if (INT_FAST64_TYPE((((global_opt |