]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/c-common.c
java-gimplify.c (java_gimplify_block): New argument to build_empty_stmt.
[thirdparty/gcc.git] / gcc / c-common.c
1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4 Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "intl.h"
27 #include "tree.h"
28 #include "flags.h"
29 #include "output.h"
30 #include "c-pragma.h"
31 #include "rtl.h"
32 #include "ggc.h"
33 #include "varray.h"
34 #include "expr.h"
35 #include "c-common.h"
36 #include "tm_p.h"
37 #include "obstack.h"
38 #include "cpplib.h"
39 #include "target.h"
40 #include "langhooks.h"
41 #include "tree-inline.h"
42 #include "c-tree.h"
43 #include "toplev.h"
44 #include "diagnostic.h"
45 #include "tree-iterator.h"
46 #include "hashtab.h"
47 #include "tree-mudflap.h"
48 #include "opts.h"
49 #include "real.h"
50 #include "cgraph.h"
51 #include "target-def.h"
52 #include "gimple.h"
53 #include "fixed-value.h"
54 #include "libfuncs.h"
55
56 cpp_reader *parse_in; /* Declared in c-pragma.h. */
57
58 /* The following symbols are subsumed in the c_global_trees array, and
59 listed here individually for documentation purposes.
60
61 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
62
63 tree short_integer_type_node;
64 tree long_integer_type_node;
65 tree long_long_integer_type_node;
66
67 tree short_unsigned_type_node;
68 tree long_unsigned_type_node;
69 tree long_long_unsigned_type_node;
70
71 tree truthvalue_type_node;
72 tree truthvalue_false_node;
73 tree truthvalue_true_node;
74
75 tree ptrdiff_type_node;
76
77 tree unsigned_char_type_node;
78 tree signed_char_type_node;
79 tree wchar_type_node;
80
81 tree char16_type_node;
82 tree char32_type_node;
83
84 tree float_type_node;
85 tree double_type_node;
86 tree long_double_type_node;
87
88 tree complex_integer_type_node;
89 tree complex_float_type_node;
90 tree complex_double_type_node;
91 tree complex_long_double_type_node;
92
93 tree dfloat32_type_node;
94 tree dfloat64_type_node;
95 tree_dfloat128_type_node;
96
97 tree intQI_type_node;
98 tree intHI_type_node;
99 tree intSI_type_node;
100 tree intDI_type_node;
101 tree intTI_type_node;
102
103 tree unsigned_intQI_type_node;
104 tree unsigned_intHI_type_node;
105 tree unsigned_intSI_type_node;
106 tree unsigned_intDI_type_node;
107 tree unsigned_intTI_type_node;
108
109 tree widest_integer_literal_type_node;
110 tree widest_unsigned_literal_type_node;
111
112 Nodes for types `void *' and `const void *'.
113
114 tree ptr_type_node, const_ptr_type_node;
115
116 Nodes for types `char *' and `const char *'.
117
118 tree string_type_node, const_string_type_node;
119
120 Type `char[SOMENUMBER]'.
121 Used when an array of char is needed and the size is irrelevant.
122
123 tree char_array_type_node;
124
125 Type `int[SOMENUMBER]' or something like it.
126 Used when an array of int needed and the size is irrelevant.
127
128 tree int_array_type_node;
129
130 Type `wchar_t[SOMENUMBER]' or something like it.
131 Used when a wide string literal is created.
132
133 tree wchar_array_type_node;
134
135 Type `char16_t[SOMENUMBER]' or something like it.
136 Used when a UTF-16 string literal is created.
137
138 tree char16_array_type_node;
139
140 Type `char32_t[SOMENUMBER]' or something like it.
141 Used when a UTF-32 string literal is created.
142
143 tree char32_array_type_node;
144
145 Type `int ()' -- used for implicit declaration of functions.
146
147 tree default_function_type;
148
149 A VOID_TYPE node, packaged in a TREE_LIST.
150
151 tree void_list_node;
152
153 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
154 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
155 VAR_DECLS, but C++ does.)
156
157 tree function_name_decl_node;
158 tree pretty_function_name_decl_node;
159 tree c99_function_name_decl_node;
160
161 Stack of nested function name VAR_DECLs.
162
163 tree saved_function_name_decls;
164
165 */
166
167 tree c_global_trees[CTI_MAX];
168 \f
169 /* Switches common to the C front ends. */
170
171 /* Nonzero if preprocessing only. */
172
173 int flag_preprocess_only;
174
175 /* Nonzero means don't output line number information. */
176
177 char flag_no_line_commands;
178
179 /* Nonzero causes -E output not to be done, but directives such as
180 #define that have side effects are still obeyed. */
181
182 char flag_no_output;
183
184 /* Nonzero means dump macros in some fashion. */
185
186 char flag_dump_macros;
187
188 /* Nonzero means pass #include lines through to the output. */
189
190 char flag_dump_includes;
191
192 /* Nonzero means process PCH files while preprocessing. */
193
194 bool flag_pch_preprocess;
195
196 /* The file name to which we should write a precompiled header, or
197 NULL if no header will be written in this compile. */
198
199 const char *pch_file;
200
201 /* Nonzero if an ISO standard was selected. It rejects macros in the
202 user's namespace. */
203 int flag_iso;
204
205 /* Nonzero if -undef was given. It suppresses target built-in macros
206 and assertions. */
207 int flag_undef;
208
209 /* Nonzero means don't recognize the non-ANSI builtin functions. */
210
211 int flag_no_builtin;
212
213 /* Nonzero means don't recognize the non-ANSI builtin functions.
214 -ansi sets this. */
215
216 int flag_no_nonansi_builtin;
217
218 /* Nonzero means give `double' the same size as `float'. */
219
220 int flag_short_double;
221
222 /* Nonzero means give `wchar_t' the same size as `short'. */
223
224 int flag_short_wchar;
225
226 /* Nonzero means allow implicit conversions between vectors with
227 differing numbers of subparts and/or differing element types. */
228 int flag_lax_vector_conversions;
229
230 /* Nonzero means allow Microsoft extensions without warnings or errors. */
231 int flag_ms_extensions;
232
233 /* Nonzero means don't recognize the keyword `asm'. */
234
235 int flag_no_asm;
236
237 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
238
239 int flag_signed_bitfields = 1;
240
241 /* Warn about #pragma directives that are not recognized. */
242
243 int warn_unknown_pragmas; /* Tri state variable. */
244
245 /* Warn about format/argument anomalies in calls to formatted I/O functions
246 (*printf, *scanf, strftime, strfmon, etc.). */
247
248 int warn_format;
249
250 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
251 with GCC this doesn't matter as __null is guaranteed to have the right
252 size. */
253
254 int warn_strict_null_sentinel;
255
256 /* Zero means that faster, ...NonNil variants of objc_msgSend...
257 calls will be used in ObjC; passing nil receivers to such calls
258 will most likely result in crashes. */
259 int flag_nil_receivers = 1;
260
261 /* Nonzero means that code generation will be altered to support
262 "zero-link" execution. This currently affects ObjC only, but may
263 affect other languages in the future. */
264 int flag_zero_link = 0;
265
266 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
267 unit. It will inform the ObjC runtime that class definition(s) herein
268 contained are to replace one(s) previously loaded. */
269 int flag_replace_objc_classes = 0;
270
271 /* C/ObjC language option variables. */
272
273
274 /* Nonzero means allow type mismatches in conditional expressions;
275 just make their values `void'. */
276
277 int flag_cond_mismatch;
278
279 /* Nonzero means enable C89 Amendment 1 features. */
280
281 int flag_isoc94;
282
283 /* Nonzero means use the ISO C99 dialect of C. */
284
285 int flag_isoc99;
286
287 /* Nonzero means that we have builtin functions, and main is an int. */
288
289 int flag_hosted = 1;
290
291
292 /* ObjC language option variables. */
293
294
295 /* Open and close the file for outputting class declarations, if
296 requested (ObjC). */
297
298 int flag_gen_declaration;
299
300 /* Tells the compiler that this is a special run. Do not perform any
301 compiling, instead we are to test some platform dependent features
302 and output a C header file with appropriate definitions. */
303
304 int print_struct_values;
305
306 /* Tells the compiler what is the constant string class for ObjC. */
307
308 const char *constant_string_class_name;
309
310
311 /* C++ language option variables. */
312
313
314 /* Nonzero means don't recognize any extension keywords. */
315
316 int flag_no_gnu_keywords;
317
318 /* Nonzero means do emit exported implementations of functions even if
319 they can be inlined. */
320
321 int flag_implement_inlines = 1;
322
323 /* Nonzero means that implicit instantiations will be emitted if needed. */
324
325 int flag_implicit_templates = 1;
326
327 /* Nonzero means that implicit instantiations of inline templates will be
328 emitted if needed, even if instantiations of non-inline templates
329 aren't. */
330
331 int flag_implicit_inline_templates = 1;
332
333 /* Nonzero means generate separate instantiation control files and
334 juggle them at link time. */
335
336 int flag_use_repository;
337
338 /* Nonzero if we want to issue diagnostics that the standard says are not
339 required. */
340
341 int flag_optional_diags = 1;
342
343 /* Nonzero means we should attempt to elide constructors when possible. */
344
345 int flag_elide_constructors = 1;
346
347 /* Nonzero means that member functions defined in class scope are
348 inline by default. */
349
350 int flag_default_inline = 1;
351
352 /* Controls whether compiler generates 'type descriptor' that give
353 run-time type information. */
354
355 int flag_rtti = 1;
356
357 /* Nonzero if we want to conserve space in the .o files. We do this
358 by putting uninitialized data and runtime initialized data into
359 .common instead of .data at the expense of not flagging multiple
360 definitions. */
361
362 int flag_conserve_space;
363
364 /* Nonzero if we want to obey access control semantics. */
365
366 int flag_access_control = 1;
367
368 /* Nonzero if we want to check the return value of new and avoid calling
369 constructors if it is a null pointer. */
370
371 int flag_check_new;
372
373 /* The C++ dialect being used. C++98 is the default. */
374
375 enum cxx_dialect cxx_dialect = cxx98;
376
377 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
378 initialization variables.
379 0: Old rules, set by -fno-for-scope.
380 2: New ISO rules, set by -ffor-scope.
381 1: Try to implement new ISO rules, but with backup compatibility
382 (and warnings). This is the default, for now. */
383
384 int flag_new_for_scope = 1;
385
386 /* Nonzero if we want to emit defined symbols with common-like linkage as
387 weak symbols where possible, in order to conform to C++ semantics.
388 Otherwise, emit them as local symbols. */
389
390 int flag_weak = 1;
391
392 /* 0 means we want the preprocessor to not emit line directives for
393 the current working directory. 1 means we want it to do it. -1
394 means we should decide depending on whether debugging information
395 is being emitted or not. */
396
397 int flag_working_directory = -1;
398
399 /* Nonzero to use __cxa_atexit, rather than atexit, to register
400 destructors for local statics and global objects. '2' means it has been
401 set nonzero as a default, not by a command-line flag. */
402
403 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
404
405 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
406 code. '2' means it has not been set explicitly on the command line. */
407
408 int flag_use_cxa_get_exception_ptr = 2;
409
410 /* Nonzero means to implement standard semantics for exception
411 specifications, calling unexpected if an exception is thrown that
412 doesn't match the specification. Zero means to treat them as
413 assertions and optimize accordingly, but not check them. */
414
415 int flag_enforce_eh_specs = 1;
416
417 /* Nonzero means to generate thread-safe code for initializing local
418 statics. */
419
420 int flag_threadsafe_statics = 1;
421
422 /* Nonzero if we want to pretty-print template specializations as the
423 template signature followed by the arguments. */
424
425 int flag_pretty_templates = 1;
426
427 /* Nonzero means warn about implicit declarations. */
428
429 int warn_implicit = 1;
430
431 /* Maximum template instantiation depth. This limit is rather
432 arbitrary, but it exists to limit the time it takes to notice
433 infinite template instantiations. */
434
435 int max_tinst_depth = 500;
436
437
438
439 /* The elements of `ridpointers' are identifier nodes for the reserved
440 type names and storage classes. It is indexed by a RID_... value. */
441 tree *ridpointers;
442
443 tree (*make_fname_decl) (location_t, tree, int);
444
445 /* Nonzero means the expression being parsed will never be evaluated.
446 This is a count, since unevaluated expressions can nest. */
447 int skip_evaluation;
448
449 /* Whether lexing has been completed, so subsequent preprocessor
450 errors should use the compiler's input_location. */
451 bool done_lexing = false;
452
453 /* Information about how a function name is generated. */
454 struct fname_var_t
455 {
456 tree *const decl; /* pointer to the VAR_DECL. */
457 const unsigned rid; /* RID number for the identifier. */
458 const int pretty; /* How pretty is it? */
459 };
460
461 /* The three ways of getting then name of the current function. */
462
463 const struct fname_var_t fname_vars[] =
464 {
465 /* C99 compliant __func__, must be first. */
466 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
467 /* GCC __FUNCTION__ compliant. */
468 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
469 /* GCC __PRETTY_FUNCTION__ compliant. */
470 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
471 {NULL, 0, 0},
472 };
473
474 static tree c_fully_fold_internal (tree expr, bool, bool *, bool *);
475 static tree check_case_value (tree);
476 static bool check_case_bounds (tree, tree, tree *, tree *);
477
478 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
479 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
480 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
481 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
482 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
483 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
484 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
485 static tree handle_always_inline_attribute (tree *, tree, tree, int,
486 bool *);
487 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
488 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
489 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
490 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
491 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
492 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
493 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
494 bool *);
495 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
496 static tree handle_transparent_union_attribute (tree *, tree, tree,
497 int, bool *);
498 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
499 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
500 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
501 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
502 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
503 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
504 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
505 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
506 static tree handle_visibility_attribute (tree *, tree, tree, int,
507 bool *);
508 static tree handle_tls_model_attribute (tree *, tree, tree, int,
509 bool *);
510 static tree handle_no_instrument_function_attribute (tree *, tree,
511 tree, int, bool *);
512 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
513 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
514 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
515 bool *);
516 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
517 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
518 static tree handle_deprecated_attribute (tree *, tree, tree, int,
519 bool *);
520 static tree handle_vector_size_attribute (tree *, tree, tree, int,
521 bool *);
522 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
523 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
525 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
526 bool *);
527 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
528 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
529 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_target_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_optimize_attribute (tree *, tree, tree, int, bool *);
532
533 static void check_function_nonnull (tree, int, tree *);
534 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
535 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
536 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
537 static int resort_field_decl_cmp (const void *, const void *);
538
539 /* Reserved words. The third field is a mask: keywords are disabled
540 if they match the mask.
541
542 Masks for languages:
543 C --std=c89: D_C99 | D_CXXONLY | D_OBJC | D_CXX_OBJC
544 C --std=c99: D_CXXONLY | D_OBJC
545 ObjC is like C except that D_OBJC and D_CXX_OBJC are not set
546 C++ --std=c98: D_CONLY | D_CXXOX | D_OBJC
547 C++ --std=c0x: D_CONLY | D_OBJC
548 ObjC++ is like C++ except that D_OBJC is not set
549
550 If -fno-asm is used, D_ASM is added to the mask. If
551 -fno-gnu-keywords is used, D_EXT is added. If -fno-asm and C in
552 C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords.
553 In C with -Wc++-compat, we warn if D_CXXWARN is set. */
554
555 const struct c_common_resword c_common_reswords[] =
556 {
557 { "_Bool", RID_BOOL, D_CONLY },
558 { "_Complex", RID_COMPLEX, 0 },
559 { "_Imaginary", RID_IMAGINARY, D_CONLY },
560 { "_Decimal32", RID_DFLOAT32, D_CONLY | D_EXT },
561 { "_Decimal64", RID_DFLOAT64, D_CONLY | D_EXT },
562 { "_Decimal128", RID_DFLOAT128, D_CONLY | D_EXT },
563 { "_Fract", RID_FRACT, D_CONLY | D_EXT },
564 { "_Accum", RID_ACCUM, D_CONLY | D_EXT },
565 { "_Sat", RID_SAT, D_CONLY | D_EXT },
566 { "__FUNCTION__", RID_FUNCTION_NAME, 0 },
567 { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
568 { "__alignof", RID_ALIGNOF, 0 },
569 { "__alignof__", RID_ALIGNOF, 0 },
570 { "__asm", RID_ASM, 0 },
571 { "__asm__", RID_ASM, 0 },
572 { "__attribute", RID_ATTRIBUTE, 0 },
573 { "__attribute__", RID_ATTRIBUTE, 0 },
574 { "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY },
575 { "__builtin_offsetof", RID_OFFSETOF, 0 },
576 { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
577 { "__builtin_va_arg", RID_VA_ARG, 0 },
578 { "__complex", RID_COMPLEX, 0 },
579 { "__complex__", RID_COMPLEX, 0 },
580 { "__const", RID_CONST, 0 },
581 { "__const__", RID_CONST, 0 },
582 { "__decltype", RID_DECLTYPE, D_CXXONLY },
583 { "__extension__", RID_EXTENSION, 0 },
584 { "__func__", RID_C99_FUNCTION_NAME, 0 },
585 { "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY },
586 { "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY },
587 { "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY },
588 { "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY },
589 { "__has_trivial_constructor", RID_HAS_TRIVIAL_CONSTRUCTOR, D_CXXONLY },
590 { "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY },
591 { "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY },
592 { "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY },
593 { "__is_abstract", RID_IS_ABSTRACT, D_CXXONLY },
594 { "__is_base_of", RID_IS_BASE_OF, D_CXXONLY },
595 { "__is_class", RID_IS_CLASS, D_CXXONLY },
596 { "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY },
597 { "__is_empty", RID_IS_EMPTY, D_CXXONLY },
598 { "__is_enum", RID_IS_ENUM, D_CXXONLY },
599 { "__is_pod", RID_IS_POD, D_CXXONLY },
600 { "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY },
601 { "__is_union", RID_IS_UNION, D_CXXONLY },
602 { "__imag", RID_IMAGPART, 0 },
603 { "__imag__", RID_IMAGPART, 0 },
604 { "__inline", RID_INLINE, 0 },
605 { "__inline__", RID_INLINE, 0 },
606 { "__label__", RID_LABEL, 0 },
607 { "__null", RID_NULL, 0 },
608 { "__real", RID_REALPART, 0 },
609 { "__real__", RID_REALPART, 0 },
610 { "__restrict", RID_RESTRICT, 0 },
611 { "__restrict__", RID_RESTRICT, 0 },
612 { "__signed", RID_SIGNED, 0 },
613 { "__signed__", RID_SIGNED, 0 },
614 { "__thread", RID_THREAD, 0 },
615 { "__typeof", RID_TYPEOF, 0 },
616 { "__typeof__", RID_TYPEOF, 0 },
617 { "__volatile", RID_VOLATILE, 0 },
618 { "__volatile__", RID_VOLATILE, 0 },
619 { "asm", RID_ASM, D_ASM },
620 { "auto", RID_AUTO, 0 },
621 { "bool", RID_BOOL, D_CXXONLY | D_CXXWARN },
622 { "break", RID_BREAK, 0 },
623 { "case", RID_CASE, 0 },
624 { "catch", RID_CATCH, D_CXX_OBJC | D_CXXWARN },
625 { "char", RID_CHAR, 0 },
626 { "char16_t", RID_CHAR16, D_CXXONLY | D_CXX0X | D_CXXWARN },
627 { "char32_t", RID_CHAR32, D_CXXONLY | D_CXX0X | D_CXXWARN },
628 { "class", RID_CLASS, D_CXX_OBJC | D_CXXWARN },
629 { "const", RID_CONST, 0 },
630 { "const_cast", RID_CONSTCAST, D_CXXONLY | D_CXXWARN },
631 { "continue", RID_CONTINUE, 0 },
632 { "decltype", RID_DECLTYPE, D_CXXONLY | D_CXX0X | D_CXXWARN },
633 { "default", RID_DEFAULT, 0 },
634 { "delete", RID_DELETE, D_CXXONLY | D_CXXWARN },
635 { "do", RID_DO, 0 },
636 { "double", RID_DOUBLE, 0 },
637 { "dynamic_cast", RID_DYNCAST, D_CXXONLY | D_CXXWARN },
638 { "else", RID_ELSE, 0 },
639 { "enum", RID_ENUM, 0 },
640 { "explicit", RID_EXPLICIT, D_CXXONLY | D_CXXWARN },
641 { "export", RID_EXPORT, D_CXXONLY | D_CXXWARN },
642 { "extern", RID_EXTERN, 0 },
643 { "false", RID_FALSE, D_CXXONLY | D_CXXWARN },
644 { "float", RID_FLOAT, 0 },
645 { "for", RID_FOR, 0 },
646 { "friend", RID_FRIEND, D_CXXONLY | D_CXXWARN },
647 { "goto", RID_GOTO, 0 },
648 { "if", RID_IF, 0 },
649 { "inline", RID_INLINE, D_EXT89 },
650 { "int", RID_INT, 0 },
651 { "long", RID_LONG, 0 },
652 { "mutable", RID_MUTABLE, D_CXXONLY | D_CXXWARN },
653 { "namespace", RID_NAMESPACE, D_CXXONLY | D_CXXWARN },
654 { "new", RID_NEW, D_CXXONLY | D_CXXWARN },
655 { "operator", RID_OPERATOR, D_CXXONLY | D_CXXWARN },
656 { "private", RID_PRIVATE, D_CXX_OBJC | D_CXXWARN },
657 { "protected", RID_PROTECTED, D_CXX_OBJC | D_CXXWARN },
658 { "public", RID_PUBLIC, D_CXX_OBJC | D_CXXWARN },
659 { "register", RID_REGISTER, 0 },
660 { "reinterpret_cast", RID_REINTCAST, D_CXXONLY | D_CXXWARN },
661 { "restrict", RID_RESTRICT, D_CONLY | D_C99 },
662 { "return", RID_RETURN, 0 },
663 { "short", RID_SHORT, 0 },
664 { "signed", RID_SIGNED, 0 },
665 { "sizeof", RID_SIZEOF, 0 },
666 { "static", RID_STATIC, 0 },
667 { "static_assert", RID_STATIC_ASSERT, D_CXXONLY | D_CXX0X | D_CXXWARN },
668 { "static_cast", RID_STATCAST, D_CXXONLY | D_CXXWARN },
669 { "struct", RID_STRUCT, 0 },
670 { "switch", RID_SWITCH, 0 },
671 { "template", RID_TEMPLATE, D_CXXONLY | D_CXXWARN },
672 { "this", RID_THIS, D_CXXONLY | D_CXXWARN },
673 { "throw", RID_THROW, D_CXX_OBJC | D_CXXWARN },
674 { "true", RID_TRUE, D_CXXONLY | D_CXXWARN },
675 { "try", RID_TRY, D_CXX_OBJC | D_CXXWARN },
676 { "typedef", RID_TYPEDEF, 0 },
677 { "typename", RID_TYPENAME, D_CXXONLY | D_CXXWARN },
678 { "typeid", RID_TYPEID, D_CXXONLY | D_CXXWARN },
679 { "typeof", RID_TYPEOF, D_ASM | D_EXT },
680 { "union", RID_UNION, 0 },
681 { "unsigned", RID_UNSIGNED, 0 },
682 { "using", RID_USING, D_CXXONLY | D_CXXWARN },
683 { "virtual", RID_VIRTUAL, D_CXXONLY | D_CXXWARN },
684 { "void", RID_VOID, 0 },
685 { "volatile", RID_VOLATILE, 0 },
686 { "wchar_t", RID_WCHAR, D_CXXONLY },
687 { "while", RID_WHILE, 0 },
688 /* These Objective-C keywords are recognized only immediately after
689 an '@'. */
690 { "compatibility_alias", RID_AT_ALIAS, D_OBJC },
691 { "defs", RID_AT_DEFS, D_OBJC },
692 { "encode", RID_AT_ENCODE, D_OBJC },
693 { "end", RID_AT_END, D_OBJC },
694 { "implementation", RID_AT_IMPLEMENTATION, D_OBJC },
695 { "interface", RID_AT_INTERFACE, D_OBJC },
696 { "protocol", RID_AT_PROTOCOL, D_OBJC },
697 { "selector", RID_AT_SELECTOR, D_OBJC },
698 { "finally", RID_AT_FINALLY, D_OBJC },
699 { "synchronized", RID_AT_SYNCHRONIZED, D_OBJC },
700 /* These are recognized only in protocol-qualifier context
701 (see above) */
702 { "bycopy", RID_BYCOPY, D_OBJC },
703 { "byref", RID_BYREF, D_OBJC },
704 { "in", RID_IN, D_OBJC },
705 { "inout", RID_INOUT, D_OBJC },
706 { "oneway", RID_ONEWAY, D_OBJC },
707 { "out", RID_OUT, D_OBJC },
708 };
709
710 const unsigned int num_c_common_reswords =
711 sizeof c_common_reswords / sizeof (struct c_common_resword);
712
713 /* Table of machine-independent attributes common to all C-like languages. */
714 const struct attribute_spec c_common_attribute_table[] =
715 {
716 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
717 { "packed", 0, 0, false, false, false,
718 handle_packed_attribute },
719 { "nocommon", 0, 0, true, false, false,
720 handle_nocommon_attribute },
721 { "common", 0, 0, true, false, false,
722 handle_common_attribute },
723 /* FIXME: logically, noreturn attributes should be listed as
724 "false, true, true" and apply to function types. But implementing this
725 would require all the places in the compiler that use TREE_THIS_VOLATILE
726 on a decl to identify non-returning functions to be located and fixed
727 to check the function type instead. */
728 { "noreturn", 0, 0, true, false, false,
729 handle_noreturn_attribute },
730 { "volatile", 0, 0, true, false, false,
731 handle_noreturn_attribute },
732 { "noinline", 0, 0, true, false, false,
733 handle_noinline_attribute },
734 { "always_inline", 0, 0, true, false, false,
735 handle_always_inline_attribute },
736 { "gnu_inline", 0, 0, true, false, false,
737 handle_gnu_inline_attribute },
738 { "artificial", 0, 0, true, false, false,
739 handle_artificial_attribute },
740 { "flatten", 0, 0, true, false, false,
741 handle_flatten_attribute },
742 { "used", 0, 0, true, false, false,
743 handle_used_attribute },
744 { "unused", 0, 0, false, false, false,
745 handle_unused_attribute },
746 { "externally_visible", 0, 0, true, false, false,
747 handle_externally_visible_attribute },
748 /* The same comments as for noreturn attributes apply to const ones. */
749 { "const", 0, 0, true, false, false,
750 handle_const_attribute },
751 { "transparent_union", 0, 0, false, false, false,
752 handle_transparent_union_attribute },
753 { "constructor", 0, 1, true, false, false,
754 handle_constructor_attribute },
755 { "destructor", 0, 1, true, false, false,
756 handle_destructor_attribute },
757 { "mode", 1, 1, false, true, false,
758 handle_mode_attribute },
759 { "section", 1, 1, true, false, false,
760 handle_section_attribute },
761 { "aligned", 0, 1, false, false, false,
762 handle_aligned_attribute },
763 { "weak", 0, 0, true, false, false,
764 handle_weak_attribute },
765 { "alias", 1, 1, true, false, false,
766 handle_alias_attribute },
767 { "weakref", 0, 1, true, false, false,
768 handle_weakref_attribute },
769 { "no_instrument_function", 0, 0, true, false, false,
770 handle_no_instrument_function_attribute },
771 { "malloc", 0, 0, true, false, false,
772 handle_malloc_attribute },
773 { "returns_twice", 0, 0, true, false, false,
774 handle_returns_twice_attribute },
775 { "no_stack_limit", 0, 0, true, false, false,
776 handle_no_limit_stack_attribute },
777 { "pure", 0, 0, true, false, false,
778 handle_pure_attribute },
779 /* For internal use (marking of builtins) only. The name contains space
780 to prevent its usage in source code. */
781 { "no vops", 0, 0, true, false, false,
782 handle_novops_attribute },
783 { "deprecated", 0, 1, false, false, false,
784 handle_deprecated_attribute },
785 { "vector_size", 1, 1, false, true, false,
786 handle_vector_size_attribute },
787 { "visibility", 1, 1, false, false, false,
788 handle_visibility_attribute },
789 { "tls_model", 1, 1, true, false, false,
790 handle_tls_model_attribute },
791 { "nonnull", 0, -1, false, true, true,
792 handle_nonnull_attribute },
793 { "nothrow", 0, 0, true, false, false,
794 handle_nothrow_attribute },
795 { "may_alias", 0, 0, false, true, false, NULL },
796 { "cleanup", 1, 1, true, false, false,
797 handle_cleanup_attribute },
798 { "warn_unused_result", 0, 0, false, true, true,
799 handle_warn_unused_result_attribute },
800 { "sentinel", 0, 1, false, true, true,
801 handle_sentinel_attribute },
802 /* For internal use (marking of builtins) only. The name contains space
803 to prevent its usage in source code. */
804 { "type generic", 0, 0, false, true, true,
805 handle_type_generic_attribute },
806 { "alloc_size", 1, 2, false, true, true,
807 handle_alloc_size_attribute },
808 { "cold", 0, 0, true, false, false,
809 handle_cold_attribute },
810 { "hot", 0, 0, true, false, false,
811 handle_hot_attribute },
812 { "warning", 1, 1, true, false, false,
813 handle_error_attribute },
814 { "error", 1, 1, true, false, false,
815 handle_error_attribute },
816 { "target", 1, -1, true, false, false,
817 handle_target_attribute },
818 { "optimize", 1, -1, true, false, false,
819 handle_optimize_attribute },
820 { NULL, 0, 0, false, false, false, NULL }
821 };
822
823 /* Give the specifications for the format attributes, used by C and all
824 descendants. */
825
826 const struct attribute_spec c_common_format_attribute_table[] =
827 {
828 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
829 { "format", 3, 3, false, true, true,
830 handle_format_attribute },
831 { "format_arg", 1, 1, false, true, true,
832 handle_format_arg_attribute },
833 { NULL, 0, 0, false, false, false, NULL }
834 };
835
836 /* Push current bindings for the function name VAR_DECLS. */
837
838 void
839 start_fname_decls (void)
840 {
841 unsigned ix;
842 tree saved = NULL_TREE;
843
844 for (ix = 0; fname_vars[ix].decl; ix++)
845 {
846 tree decl = *fname_vars[ix].decl;
847
848 if (decl)
849 {
850 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
851 *fname_vars[ix].decl = NULL_TREE;
852 }
853 }
854 if (saved || saved_function_name_decls)
855 /* Normally they'll have been NULL, so only push if we've got a
856 stack, or they are non-NULL. */
857 saved_function_name_decls = tree_cons (saved, NULL_TREE,
858 saved_function_name_decls);
859 }
860
861 /* Finish up the current bindings, adding them into the current function's
862 statement tree. This must be done _before_ finish_stmt_tree is called.
863 If there is no current function, we must be at file scope and no statements
864 are involved. Pop the previous bindings. */
865
866 void
867 finish_fname_decls (void)
868 {
869 unsigned ix;
870 tree stmts = NULL_TREE;
871 tree stack = saved_function_name_decls;
872
873 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
874 append_to_statement_list (TREE_VALUE (stack), &stmts);
875
876 if (stmts)
877 {
878 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
879
880 if (TREE_CODE (*bodyp) == BIND_EXPR)
881 bodyp = &BIND_EXPR_BODY (*bodyp);
882
883 append_to_statement_list_force (*bodyp, &stmts);
884 *bodyp = stmts;
885 }
886
887 for (ix = 0; fname_vars[ix].decl; ix++)
888 *fname_vars[ix].decl = NULL_TREE;
889
890 if (stack)
891 {
892 /* We had saved values, restore them. */
893 tree saved;
894
895 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
896 {
897 tree decl = TREE_PURPOSE (saved);
898 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
899
900 *fname_vars[ix].decl = decl;
901 }
902 stack = TREE_CHAIN (stack);
903 }
904 saved_function_name_decls = stack;
905 }
906
907 /* Return the text name of the current function, suitably prettified
908 by PRETTY_P. Return string must be freed by caller. */
909
910 const char *
911 fname_as_string (int pretty_p)
912 {
913 const char *name = "top level";
914 char *namep;
915 int vrb = 2, len;
916 cpp_string cstr = { 0, 0 }, strname;
917
918 if (!pretty_p)
919 {
920 name = "";
921 vrb = 0;
922 }
923
924 if (current_function_decl)
925 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
926
927 len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
928
929 namep = XNEWVEC (char, len);
930 snprintf (namep, len, "\"%s\"", name);
931 strname.text = (unsigned char *) namep;
932 strname.len = len - 1;
933
934 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, CPP_STRING))
935 {
936 XDELETEVEC (namep);
937 return (const char *) cstr.text;
938 }
939
940 return namep;
941 }
942
943 /* Return the VAR_DECL for a const char array naming the current
944 function. If the VAR_DECL has not yet been created, create it
945 now. RID indicates how it should be formatted and IDENTIFIER_NODE
946 ID is its name (unfortunately C and C++ hold the RID values of
947 keywords in different places, so we can't derive RID from ID in
948 this language independent code. LOC is the location of the
949 function. */
950
951 tree
952 fname_decl (location_t loc, unsigned int rid, tree id)
953 {
954 unsigned ix;
955 tree decl = NULL_TREE;
956
957 for (ix = 0; fname_vars[ix].decl; ix++)
958 if (fname_vars[ix].rid == rid)
959 break;
960
961 decl = *fname_vars[ix].decl;
962 if (!decl)
963 {
964 /* If a tree is built here, it would normally have the lineno of
965 the current statement. Later this tree will be moved to the
966 beginning of the function and this line number will be wrong.
967 To avoid this problem set the lineno to 0 here; that prevents
968 it from appearing in the RTL. */
969 tree stmts;
970 location_t saved_location = input_location;
971 input_location = UNKNOWN_LOCATION;
972
973 stmts = push_stmt_list ();
974 decl = (*make_fname_decl) (loc, id, fname_vars[ix].pretty);
975 stmts = pop_stmt_list (stmts);
976 if (!IS_EMPTY_STMT (stmts))
977 saved_function_name_decls
978 = tree_cons (decl, stmts, saved_function_name_decls);
979 *fname_vars[ix].decl = decl;
980 input_location = saved_location;
981 }
982 if (!ix && !current_function_decl)
983 pedwarn (loc, 0, "%qD is not defined outside of function scope", decl);
984
985 return decl;
986 }
987
988 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
989
990 tree
991 fix_string_type (tree value)
992 {
993 int length = TREE_STRING_LENGTH (value);
994 int nchars;
995 tree e_type, i_type, a_type;
996
997 /* Compute the number of elements, for the array type. */
998 if (TREE_TYPE (value) == char_array_type_node || !TREE_TYPE (value))
999 {
1000 nchars = length;
1001 e_type = char_type_node;
1002 }
1003 else if (TREE_TYPE (value) == char16_array_type_node)
1004 {
1005 nchars = length / (TYPE_PRECISION (char16_type_node) / BITS_PER_UNIT);
1006 e_type = char16_type_node;
1007 }
1008 else if (TREE_TYPE (value) == char32_array_type_node)
1009 {
1010 nchars = length / (TYPE_PRECISION (char32_type_node) / BITS_PER_UNIT);
1011 e_type = char32_type_node;
1012 }
1013 else
1014 {
1015 nchars = length / (TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT);
1016 e_type = wchar_type_node;
1017 }
1018
1019 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
1020 limit in C++98 Annex B is very large (65536) and is not normative,
1021 so we do not diagnose it (warn_overlength_strings is forced off
1022 in c_common_post_options). */
1023 if (warn_overlength_strings)
1024 {
1025 const int nchars_max = flag_isoc99 ? 4095 : 509;
1026 const int relevant_std = flag_isoc99 ? 99 : 90;
1027 if (nchars - 1 > nchars_max)
1028 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
1029 separate the %d from the 'C'. 'ISO' should not be
1030 translated, but it may be moved after 'C%d' in languages
1031 where modifiers follow nouns. */
1032 pedwarn (input_location, OPT_Woverlength_strings,
1033 "string length %qd is greater than the length %qd "
1034 "ISO C%d compilers are required to support",
1035 nchars - 1, nchars_max, relevant_std);
1036 }
1037
1038 /* Create the array type for the string constant. The ISO C++
1039 standard says that a string literal has type `const char[N]' or
1040 `const wchar_t[N]'. We use the same logic when invoked as a C
1041 front-end with -Wwrite-strings.
1042 ??? We should change the type of an expression depending on the
1043 state of a warning flag. We should just be warning -- see how
1044 this is handled in the C++ front-end for the deprecated implicit
1045 conversion from string literals to `char*' or `wchar_t*'.
1046
1047 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
1048 array type being the unqualified version of that type.
1049 Therefore, if we are constructing an array of const char, we must
1050 construct the matching unqualified array type first. The C front
1051 end does not require this, but it does no harm, so we do it
1052 unconditionally. */
1053 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
1054 a_type = build_array_type (e_type, i_type);
1055 if (c_dialect_cxx() || warn_write_strings)
1056 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
1057
1058 TREE_TYPE (value) = a_type;
1059 TREE_CONSTANT (value) = 1;
1060 TREE_READONLY (value) = 1;
1061 TREE_STATIC (value) = 1;
1062 return value;
1063 }
1064 \f
1065 /* Fully fold EXPR, an expression that was not folded (beyond integer
1066 constant expressions and null pointer constants) when being built
1067 up. If IN_INIT, this is in a static initializer and certain
1068 changes are made to the folding done. Clear *MAYBE_CONST if
1069 MAYBE_CONST is not NULL and EXPR is definitely not a constant
1070 expression because it contains an evaluated operator (in C99) or an
1071 operator outside of sizeof returning an integer constant (in C90)
1072 not permitted in constant expressions, or because it contains an
1073 evaluated arithmetic overflow. (*MAYBE_CONST should typically be
1074 set to true by callers before calling this function.) Return the
1075 folded expression. Function arguments have already been folded
1076 before calling this function, as have the contents of SAVE_EXPR,
1077 TARGET_EXPR, BIND_EXPR, VA_ARG_EXPR, OBJ_TYPE_REF and
1078 C_MAYBE_CONST_EXPR. */
1079
1080 tree
1081 c_fully_fold (tree expr, bool in_init, bool *maybe_const)
1082 {
1083 tree ret;
1084 tree eptype = NULL_TREE;
1085 bool dummy = true;
1086 bool maybe_const_itself = true;
1087
1088 /* This function is not relevant to C++ because C++ folds while
1089 parsing, and may need changes to be correct for C++ when C++
1090 stops folding while parsing. */
1091 if (c_dialect_cxx ())
1092 gcc_unreachable ();
1093
1094 if (!maybe_const)
1095 maybe_const = &dummy;
1096 if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
1097 {
1098 eptype = TREE_TYPE (expr);
1099 expr = TREE_OPERAND (expr, 0);
1100 }
1101 ret = c_fully_fold_internal (expr, in_init, maybe_const,
1102 &maybe_const_itself);
1103 if (eptype)
1104 ret = fold_convert (eptype, ret);
1105 *maybe_const &= maybe_const_itself;
1106 return ret;
1107 }
1108
1109 /* Internal helper for c_fully_fold. EXPR and IN_INIT are as for
1110 c_fully_fold. *MAYBE_CONST_OPERANDS is cleared because of operands
1111 not permitted, while *MAYBE_CONST_ITSELF is cleared because of
1112 arithmetic overflow (for C90, *MAYBE_CONST_OPERANDS is carried from
1113 both evaluated and unevaluated subexpressions while
1114 *MAYBE_CONST_ITSELF is carried from only evaluated
1115 subexpressions). */
1116
1117 static tree
1118 c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
1119 bool *maybe_const_itself)
1120 {
1121 tree ret = expr;
1122 enum tree_code code = TREE_CODE (expr);
1123 enum tree_code_class kind = TREE_CODE_CLASS (code);
1124 location_t loc = EXPR_LOCATION (expr);
1125 tree op0, op1, op2, op3;
1126 tree orig_op0, orig_op1, orig_op2;
1127 bool op0_const = true, op1_const = true, op2_const = true;
1128 bool op0_const_self = true, op1_const_self = true, op2_const_self = true;
1129 bool nowarning = TREE_NO_WARNING (expr);
1130
1131 /* This function is not relevant to C++ because C++ folds while
1132 parsing, and may need changes to be correct for C++ when C++
1133 stops folding while parsing. */
1134 if (c_dialect_cxx ())
1135 gcc_unreachable ();
1136
1137 /* Constants, declarations, statements, errors, SAVE_EXPRs and
1138 anything else not counted as an expression cannot usefully be
1139 folded further at this point. */
1140 if (!IS_EXPR_CODE_CLASS (kind)
1141 || kind == tcc_statement
1142 || code == SAVE_EXPR)
1143 return expr;
1144
1145 /* Operands of variable-length expressions (function calls) have
1146 already been folded, as have __builtin_* function calls, and such
1147 expressions cannot occur in constant expressions. */
1148 if (kind == tcc_vl_exp)
1149 {
1150 *maybe_const_operands = false;
1151 ret = fold (expr);
1152 goto out;
1153 }
1154
1155 if (code == C_MAYBE_CONST_EXPR)
1156 {
1157 tree pre = C_MAYBE_CONST_EXPR_PRE (expr);
1158 tree inner = C_MAYBE_CONST_EXPR_EXPR (expr);
1159 if (C_MAYBE_CONST_EXPR_NON_CONST (expr))
1160 *maybe_const_operands = false;
1161 if (C_MAYBE_CONST_EXPR_INT_OPERANDS (expr))
1162 *maybe_const_itself = false;
1163 if (pre && !in_init)
1164 ret = build2 (COMPOUND_EXPR, TREE_TYPE (expr), pre, inner);
1165 else
1166 ret = inner;
1167 goto out;
1168 }
1169
1170 /* Assignment, increment, decrement, function call and comma
1171 operators, and statement expressions, cannot occur in constant
1172 expressions if evaluated / outside of sizeof. (Function calls
1173 were handled above, though VA_ARG_EXPR is treated like a function
1174 call here, and statement expressions are handled through
1175 C_MAYBE_CONST_EXPR to avoid folding inside them.) */
1176 switch (code)
1177 {
1178 case MODIFY_EXPR:
1179 case PREDECREMENT_EXPR:
1180 case PREINCREMENT_EXPR:
1181 case POSTDECREMENT_EXPR:
1182 case POSTINCREMENT_EXPR:
1183 case COMPOUND_EXPR:
1184 *maybe_const_operands = false;
1185 break;
1186
1187 case VA_ARG_EXPR:
1188 case TARGET_EXPR:
1189 case BIND_EXPR:
1190 case OBJ_TYPE_REF:
1191 *maybe_const_operands = false;
1192 ret = fold (expr);
1193 goto out;
1194
1195 default:
1196 break;
1197 }
1198
1199 /* Fold individual tree codes as appropriate. */
1200 switch (code)
1201 {
1202 case COMPOUND_LITERAL_EXPR:
1203 /* Any non-constancy will have been marked in a containing
1204 C_MAYBE_CONST_EXPR; there is no more folding to do here. */
1205 goto out;
1206
1207 case COMPONENT_REF:
1208 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1209 op1 = TREE_OPERAND (expr, 1);
1210 op2 = TREE_OPERAND (expr, 2);
1211 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1212 maybe_const_itself);
1213 if (op0 != orig_op0)
1214 ret = build3 (COMPONENT_REF, TREE_TYPE (expr), op0, op1, op2);
1215 if (ret != expr)
1216 {
1217 TREE_READONLY (ret) = TREE_READONLY (expr);
1218 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1219 }
1220 goto out;
1221
1222 case ARRAY_REF:
1223 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1224 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1225 op2 = TREE_OPERAND (expr, 2);
1226 op3 = TREE_OPERAND (expr, 3);
1227 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1228 maybe_const_itself);
1229 op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1230 maybe_const_itself);
1231 op1 = decl_constant_value_for_optimization (op1);
1232 if (op0 != orig_op0 || op1 != orig_op1)
1233 ret = build4 (ARRAY_REF, TREE_TYPE (expr), op0, op1, op2, op3);
1234 if (ret != expr)
1235 {
1236 TREE_READONLY (ret) = TREE_READONLY (expr);
1237 TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1238 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1239 }
1240 ret = fold (ret);
1241 goto out;
1242
1243 case COMPOUND_EXPR:
1244 case MODIFY_EXPR:
1245 case PREDECREMENT_EXPR:
1246 case PREINCREMENT_EXPR:
1247 case POSTDECREMENT_EXPR:
1248 case POSTINCREMENT_EXPR:
1249 case PLUS_EXPR:
1250 case MINUS_EXPR:
1251 case MULT_EXPR:
1252 case POINTER_PLUS_EXPR:
1253 case TRUNC_DIV_EXPR:
1254 case CEIL_DIV_EXPR:
1255 case FLOOR_DIV_EXPR:
1256 case TRUNC_MOD_EXPR:
1257 case RDIV_EXPR:
1258 case EXACT_DIV_EXPR:
1259 case LSHIFT_EXPR:
1260 case RSHIFT_EXPR:
1261 case BIT_IOR_EXPR:
1262 case BIT_XOR_EXPR:
1263 case BIT_AND_EXPR:
1264 case LT_EXPR:
1265 case LE_EXPR:
1266 case GT_EXPR:
1267 case GE_EXPR:
1268 case EQ_EXPR:
1269 case NE_EXPR:
1270 case COMPLEX_EXPR:
1271 case TRUTH_AND_EXPR:
1272 case TRUTH_OR_EXPR:
1273 case TRUTH_XOR_EXPR:
1274 case UNORDERED_EXPR:
1275 case ORDERED_EXPR:
1276 case UNLT_EXPR:
1277 case UNLE_EXPR:
1278 case UNGT_EXPR:
1279 case UNGE_EXPR:
1280 case UNEQ_EXPR:
1281 /* Binary operations evaluating both arguments (increment and
1282 decrement are binary internally in GCC). */
1283 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1284 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1285 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1286 maybe_const_itself);
1287 if (code != MODIFY_EXPR
1288 && code != PREDECREMENT_EXPR
1289 && code != PREINCREMENT_EXPR
1290 && code != POSTDECREMENT_EXPR
1291 && code != POSTINCREMENT_EXPR)
1292 op0 = decl_constant_value_for_optimization (op0);
1293 /* The RHS of a MODIFY_EXPR was fully folded when building that
1294 expression for the sake of conversion warnings. */
1295 if (code != MODIFY_EXPR)
1296 op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1297 maybe_const_itself);
1298 op1 = decl_constant_value_for_optimization (op1);
1299 if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1300 ret = in_init
1301 ? fold_build2_initializer (code, TREE_TYPE (expr), op0, op1)
1302 : fold_build2 (code, TREE_TYPE (expr), op0, op1);
1303 else
1304 ret = fold (expr);
1305 goto out;
1306
1307 case INDIRECT_REF:
1308 case FIX_TRUNC_EXPR:
1309 case FLOAT_EXPR:
1310 CASE_CONVERT:
1311 case NON_LVALUE_EXPR:
1312 case NEGATE_EXPR:
1313 case BIT_NOT_EXPR:
1314 case TRUTH_NOT_EXPR:
1315 case ADDR_EXPR:
1316 case CONJ_EXPR:
1317 case REALPART_EXPR:
1318 case IMAGPART_EXPR:
1319 /* Unary operations. */
1320 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1321 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1322 maybe_const_itself);
1323 if (code != ADDR_EXPR && code != REALPART_EXPR && code != IMAGPART_EXPR)
1324 op0 = decl_constant_value_for_optimization (op0);
1325 if (op0 != orig_op0 || in_init)
1326 ret = in_init
1327 ? fold_build1_initializer (code, TREE_TYPE (expr), op0)
1328 : fold_build1 (code, TREE_TYPE (expr), op0);
1329 else
1330 ret = fold (expr);
1331 if (code == INDIRECT_REF
1332 && ret != expr
1333 && TREE_CODE (ret) == INDIRECT_REF)
1334 {
1335 TREE_READONLY (ret) = TREE_READONLY (expr);
1336 TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1337 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1338 }
1339 goto out;
1340
1341 case TRUTH_ANDIF_EXPR:
1342 case TRUTH_ORIF_EXPR:
1343 /* Binary operations not necessarily evaluating both
1344 arguments. */
1345 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1346 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1347 op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1348 op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1349 if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1350 ret = in_init
1351 ? fold_build2_initializer (code, TREE_TYPE (expr), op0, op1)
1352 : fold_build2 (code, TREE_TYPE (expr), op0, op1);
1353 else
1354 ret = fold (expr);
1355 *maybe_const_operands &= op0_const;
1356 *maybe_const_itself &= op0_const_self;
1357 if (!(flag_isoc99
1358 && op0_const
1359 && op0_const_self
1360 && (code == TRUTH_ANDIF_EXPR
1361 ? op0 == truthvalue_false_node
1362 : op0 == truthvalue_true_node)))
1363 *maybe_const_operands &= op1_const;
1364 if (!(op0_const
1365 && op0_const_self
1366 && (code == TRUTH_ANDIF_EXPR
1367 ? op0 == truthvalue_false_node
1368 : op0 == truthvalue_true_node)))
1369 *maybe_const_itself &= op1_const_self;
1370 goto out;
1371
1372 case COND_EXPR:
1373 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1374 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1375 orig_op2 = op2 = TREE_OPERAND (expr, 2);
1376 op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1377 op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1378 op2 = c_fully_fold_internal (op2, in_init, &op2_const, &op2_const_self);
1379 if (op0 != orig_op0 || op1 != orig_op1 || op2 != orig_op2)
1380 ret = fold_build3 (code, TREE_TYPE (expr), op0, op1, op2);
1381 else
1382 ret = fold (expr);
1383 *maybe_const_operands &= op0_const;
1384 *maybe_const_itself &= op0_const_self;
1385 if (!(flag_isoc99
1386 && op0_const
1387 && op0_const_self
1388 && op0 == truthvalue_false_node))
1389 *maybe_const_operands &= op1_const;
1390 if (!(op0_const
1391 && op0_const_self
1392 && op0 == truthvalue_false_node))
1393 *maybe_const_itself &= op1_const_self;
1394 if (!(flag_isoc99
1395 && op0_const
1396 && op0_const_self
1397 && op0 == truthvalue_true_node))
1398 *maybe_const_operands &= op2_const;
1399 if (!(op0_const
1400 && op0_const_self
1401 && op0 == truthvalue_true_node))
1402 *maybe_const_itself &= op2_const_self;
1403 goto out;
1404
1405 case EXCESS_PRECISION_EXPR:
1406 /* Each case where an operand with excess precision may be
1407 encountered must remove the EXCESS_PRECISION_EXPR around
1408 inner operands and possibly put one around the whole
1409 expression or possibly convert to the semantic type (which
1410 c_fully_fold does); we cannot tell at this stage which is
1411 appropriate in any particular case. */
1412 gcc_unreachable ();
1413
1414 default:
1415 /* Various codes may appear through folding built-in functions
1416 and their arguments. */
1417 goto out;
1418 }
1419
1420 out:
1421 /* Some folding may introduce NON_LVALUE_EXPRs; all lvalue checks
1422 have been done by this point, so remove them again. */
1423 nowarning |= TREE_NO_WARNING (ret);
1424 STRIP_TYPE_NOPS (ret);
1425 if (nowarning && !TREE_NO_WARNING (ret))
1426 {
1427 if (!CAN_HAVE_LOCATION_P (ret))
1428 ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
1429 TREE_NO_WARNING (ret) = 1;
1430 }
1431 if (ret != expr)
1432 protected_set_expr_location (ret, loc);
1433 return ret;
1434 }
1435
1436 /* If not optimizing, EXP is not a VAR_DECL, or EXP has array type,
1437 return EXP. Otherwise, return either EXP or its known constant
1438 value (if it has one), but return EXP if EXP has mode BLKmode. ???
1439 Is the BLKmode test appropriate? */
1440
1441 tree
1442 decl_constant_value_for_optimization (tree exp)
1443 {
1444 tree ret;
1445
1446 /* This function is only used by C, for c_fully_fold and other
1447 optimization, and may not be correct for C++. */
1448 if (c_dialect_cxx ())
1449 gcc_unreachable ();
1450
1451 if (!optimize
1452 || TREE_CODE (exp) != VAR_DECL
1453 || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1454 || DECL_MODE (exp) == BLKmode)
1455 return exp;
1456
1457 ret = decl_constant_value (exp);
1458 /* Avoid unwanted tree sharing between the initializer and current
1459 function's body where the tree can be modified e.g. by the
1460 gimplifier. */
1461 if (ret != exp && TREE_STATIC (exp))
1462 ret = unshare_expr (ret);
1463 return ret;
1464 }
1465
1466 /* Print a warning if a constant expression had overflow in folding.
1467 Invoke this function on every expression that the language
1468 requires to be a constant expression.
1469 Note the ANSI C standard says it is erroneous for a
1470 constant expression to overflow. */
1471
1472 void
1473 constant_expression_warning (tree value)
1474 {
1475 if (warn_overflow && pedantic
1476 && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1477 || TREE_CODE (value) == FIXED_CST
1478 || TREE_CODE (value) == VECTOR_CST
1479 || TREE_CODE (value) == COMPLEX_CST)
1480 && TREE_OVERFLOW (value))
1481 pedwarn (input_location, OPT_Woverflow, "overflow in constant expression");
1482 }
1483
1484 /* The same as above but print an unconditional error. */
1485 void
1486 constant_expression_error (tree value)
1487 {
1488 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1489 || TREE_CODE (value) == FIXED_CST
1490 || TREE_CODE (value) == VECTOR_CST
1491 || TREE_CODE (value) == COMPLEX_CST)
1492 && TREE_OVERFLOW (value))
1493 error ("overflow in constant expression");
1494 }
1495
1496 /* Print a warning if an expression had overflow in folding and its
1497 operands hadn't.
1498
1499 Invoke this function on every expression that
1500 (1) appears in the source code, and
1501 (2) is a constant expression that overflowed, and
1502 (3) is not already checked by convert_and_check;
1503 however, do not invoke this function on operands of explicit casts
1504 or when the expression is the result of an operator and any operand
1505 already overflowed. */
1506
1507 void
1508 overflow_warning (location_t loc, tree value)
1509 {
1510 if (skip_evaluation) return;
1511
1512 switch (TREE_CODE (value))
1513 {
1514 case INTEGER_CST:
1515 warning_at (loc, OPT_Woverflow, "integer overflow in expression");
1516 break;
1517
1518 case REAL_CST:
1519 warning_at (loc, OPT_Woverflow,
1520 "floating point overflow in expression");
1521 break;
1522
1523 case FIXED_CST:
1524 warning_at (loc, OPT_Woverflow, "fixed-point overflow in expression");
1525 break;
1526
1527 case VECTOR_CST:
1528 warning_at (loc, OPT_Woverflow, "vector overflow in expression");
1529 break;
1530
1531 case COMPLEX_CST:
1532 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
1533 warning_at (loc, OPT_Woverflow,
1534 "complex integer overflow in expression");
1535 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
1536 warning_at (loc, OPT_Woverflow,
1537 "complex floating point overflow in expression");
1538 break;
1539
1540 default:
1541 break;
1542 }
1543 }
1544
1545 /* Warn about uses of logical || / && operator in a context where it
1546 is likely that the bitwise equivalent was intended by the
1547 programmer. We have seen an expression in which CODE is a binary
1548 operator used to combine expressions OP_LEFT and OP_RIGHT, which before folding
1549 had CODE_LEFT and CODE_RIGHT, into an expression of type TYPE. */
1550 void
1551 warn_logical_operator (location_t location, enum tree_code code, tree type,
1552 enum tree_code code_left, tree op_left,
1553 enum tree_code ARG_UNUSED (code_right), tree op_right)
1554 {
1555 int or_op = (code == TRUTH_ORIF_EXPR || code == TRUTH_OR_EXPR);
1556 int in0_p, in1_p, in_p;
1557 tree low0, low1, low, high0, high1, high, lhs, rhs, tem;
1558 bool strict_overflow_p = false;
1559
1560 if (code != TRUTH_ANDIF_EXPR
1561 && code != TRUTH_AND_EXPR
1562 && code != TRUTH_ORIF_EXPR
1563 && code != TRUTH_OR_EXPR)
1564 return;
1565
1566 /* Warn if &&/|| are being used in a context where it is
1567 likely that the bitwise equivalent was intended by the
1568 programmer. That is, an expression such as op && MASK
1569 where op should not be any boolean expression, nor a
1570 constant, and mask seems to be a non-boolean integer constant. */
1571 if (!truth_value_p (code_left)
1572 && INTEGRAL_TYPE_P (TREE_TYPE (op_left))
1573 && !CONSTANT_CLASS_P (op_left)
1574 && !TREE_NO_WARNING (op_left)
1575 && TREE_CODE (op_right) == INTEGER_CST
1576 && !integer_zerop (op_right)
1577 && !integer_onep (op_right))
1578 {
1579 if (or_op)
1580 warning_at (location, OPT_Wlogical_op, "logical %<or%>"
1581 " applied to non-boolean constant");
1582 else
1583 warning_at (location, OPT_Wlogical_op, "logical %<and%>"
1584 " applied to non-boolean constant");
1585 TREE_NO_WARNING (op_left) = true;
1586 return;
1587 }
1588
1589 /* We do not warn for constants because they are typical of macro
1590 expansions that test for features. */
1591 if (CONSTANT_CLASS_P (op_left) || CONSTANT_CLASS_P (op_right))
1592 return;
1593
1594 /* This warning only makes sense with logical operands. */
1595 if (!(truth_value_p (TREE_CODE (op_left))
1596 || INTEGRAL_TYPE_P (TREE_TYPE (op_left)))
1597 || !(truth_value_p (TREE_CODE (op_right))
1598 || INTEGRAL_TYPE_P (TREE_TYPE (op_right))))
1599 return;
1600
1601 lhs = make_range (op_left, &in0_p, &low0, &high0, &strict_overflow_p);
1602 rhs = make_range (op_right, &in1_p, &low1, &high1, &strict_overflow_p);
1603
1604 if (lhs && TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
1605 lhs = C_MAYBE_CONST_EXPR_EXPR (lhs);
1606
1607 if (rhs && TREE_CODE (rhs) == C_MAYBE_CONST_EXPR)
1608 rhs = C_MAYBE_CONST_EXPR_EXPR (rhs);
1609
1610 /* If this is an OR operation, invert both sides; we will invert
1611 again at the end. */
1612 if (or_op)
1613 in0_p = !in0_p, in1_p = !in1_p;
1614
1615 /* If both expressions are the same, if we can merge the ranges, and we
1616 can build the range test, return it or it inverted. */
1617 if (lhs && rhs && operand_equal_p (lhs, rhs, 0)
1618 && merge_ranges (&in_p, &low, &high, in0_p, low0, high0,
1619 in1_p, low1, high1)
1620 && 0 != (tem = build_range_check (type, lhs, in_p, low, high)))
1621 {
1622 if (TREE_CODE (tem) != INTEGER_CST)
1623 return;
1624
1625 if (or_op)
1626 warning_at (location, OPT_Wlogical_op,
1627 "logical %<or%> "
1628 "of collectively exhaustive tests is always true");
1629 else
1630 warning_at (location, OPT_Wlogical_op,
1631 "logical %<and%> "
1632 "of mutually exclusive tests is always false");
1633 }
1634 }
1635
1636
1637 /* Print a warning about casts that might indicate violation
1638 of strict aliasing rules if -Wstrict-aliasing is used and
1639 strict aliasing mode is in effect. OTYPE is the original
1640 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1641
1642 bool
1643 strict_aliasing_warning (tree otype, tree type, tree expr)
1644 {
1645 /* Strip pointer conversion chains and get to the correct original type. */
1646 STRIP_NOPS (expr);
1647 otype = TREE_TYPE (expr);
1648
1649 if (!(flag_strict_aliasing
1650 && POINTER_TYPE_P (type)
1651 && POINTER_TYPE_P (otype)
1652 && !VOID_TYPE_P (TREE_TYPE (type)))
1653 /* If the type we are casting to is a ref-all pointer
1654 dereferencing it is always valid. */
1655 || TYPE_REF_CAN_ALIAS_ALL (type))
1656 return false;
1657
1658 if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1659 && (DECL_P (TREE_OPERAND (expr, 0))
1660 || handled_component_p (TREE_OPERAND (expr, 0))))
1661 {
1662 /* Casting the address of an object to non void pointer. Warn
1663 if the cast breaks type based aliasing. */
1664 if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1665 {
1666 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1667 "might break strict-aliasing rules");
1668 return true;
1669 }
1670 else
1671 {
1672 /* warn_strict_aliasing >= 3. This includes the default (3).
1673 Only warn if the cast is dereferenced immediately. */
1674 alias_set_type set1 =
1675 get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1676 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1677
1678 if (set1 != set2 && set2 != 0
1679 && (set1 == 0 || !alias_sets_conflict_p (set1, set2)))
1680 {
1681 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1682 "pointer will break strict-aliasing rules");
1683 return true;
1684 }
1685 else if (warn_strict_aliasing == 2
1686 && !alias_sets_must_conflict_p (set1, set2))
1687 {
1688 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1689 "pointer might break strict-aliasing rules");
1690 return true;
1691 }
1692 }
1693 }
1694 else
1695 if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1696 {
1697 /* At this level, warn for any conversions, even if an address is
1698 not taken in the same statement. This will likely produce many
1699 false positives, but could be useful to pinpoint problems that
1700 are not revealed at higher levels. */
1701 alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1702 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1703 if (!COMPLETE_TYPE_P (type)
1704 || !alias_sets_must_conflict_p (set1, set2))
1705 {
1706 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1707 "pointer might break strict-aliasing rules");
1708 return true;
1709 }
1710 }
1711
1712 return false;
1713 }
1714
1715 /* Warn for unlikely, improbable, or stupid DECL declarations
1716 of `main'. */
1717
1718 void
1719 check_main_parameter_types (tree decl)
1720 {
1721 tree args;
1722 int argct = 0;
1723
1724 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1725 args = TREE_CHAIN (args))
1726 {
1727 tree type = args ? TREE_VALUE (args) : 0;
1728
1729 if (type == void_type_node || type == error_mark_node )
1730 break;
1731
1732 ++argct;
1733 switch (argct)
1734 {
1735 case 1:
1736 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1737 pedwarn (input_location, OPT_Wmain, "first argument of %q+D should be %<int%>",
1738 decl);
1739 break;
1740
1741 case 2:
1742 if (TREE_CODE (type) != POINTER_TYPE
1743 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1744 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1745 != char_type_node))
1746 pedwarn (input_location, OPT_Wmain, "second argument of %q+D should be %<char **%>",
1747 decl);
1748 break;
1749
1750 case 3:
1751 if (TREE_CODE (type) != POINTER_TYPE
1752 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1753 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1754 != char_type_node))
1755 pedwarn (input_location, OPT_Wmain, "third argument of %q+D should probably be "
1756 "%<char **%>", decl);
1757 break;
1758 }
1759 }
1760
1761 /* It is intentional that this message does not mention the third
1762 argument because it's only mentioned in an appendix of the
1763 standard. */
1764 if (argct > 0 && (argct < 2 || argct > 3))
1765 pedwarn (input_location, OPT_Wmain, "%q+D takes only zero or two arguments", decl);
1766 }
1767
1768 /* True if pointers to distinct types T1 and T2 can be converted to
1769 each other without an explicit cast. Only returns true for opaque
1770 vector types. */
1771 bool
1772 vector_targets_convertible_p (const_tree t1, const_tree t2)
1773 {
1774 if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
1775 && (TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1776 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1777 return true;
1778
1779 return false;
1780 }
1781
1782 /* True if vector types T1 and T2 can be converted to each other
1783 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1784 can only be converted with -flax-vector-conversions yet that is not
1785 in effect, emit a note telling the user about that option if such
1786 a note has not previously been emitted. */
1787 bool
1788 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1789 {
1790 static bool emitted_lax_note = false;
1791 bool convertible_lax;
1792
1793 if ((TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1794 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1795 return true;
1796
1797 convertible_lax =
1798 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1799 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1800 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1801 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1802 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1803
1804 if (!convertible_lax || flag_lax_vector_conversions)
1805 return convertible_lax;
1806
1807 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1808 && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1809 return true;
1810
1811 if (emit_lax_note && !emitted_lax_note)
1812 {
1813 emitted_lax_note = true;
1814 inform (input_location, "use -flax-vector-conversions to permit "
1815 "conversions between vectors with differing "
1816 "element types or numbers of subparts");
1817 }
1818
1819 return false;
1820 }
1821
1822 /* This is a helper function of build_binary_op.
1823
1824 For certain operations if both args were extended from the same
1825 smaller type, do the arithmetic in that type and then extend.
1826
1827 BITWISE indicates a bitwise operation.
1828 For them, this optimization is safe only if
1829 both args are zero-extended or both are sign-extended.
1830 Otherwise, we might change the result.
1831 Eg, (short)-1 | (unsigned short)-1 is (int)-1
1832 but calculated in (unsigned short) it would be (unsigned short)-1.
1833 */
1834 tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise)
1835 {
1836 int unsigned0, unsigned1;
1837 tree arg0, arg1;
1838 int uns;
1839 tree type;
1840
1841 /* Cast OP0 and OP1 to RESULT_TYPE. Doing so prevents
1842 excessive narrowing when we call get_narrower below. For
1843 example, suppose that OP0 is of unsigned int extended
1844 from signed char and that RESULT_TYPE is long long int.
1845 If we explicitly cast OP0 to RESULT_TYPE, OP0 would look
1846 like
1847
1848 (long long int) (unsigned int) signed_char
1849
1850 which get_narrower would narrow down to
1851
1852 (unsigned int) signed char
1853
1854 If we do not cast OP0 first, get_narrower would return
1855 signed_char, which is inconsistent with the case of the
1856 explicit cast. */
1857 op0 = convert (result_type, op0);
1858 op1 = convert (result_type, op1);
1859
1860 arg0 = get_narrower (op0, &unsigned0);
1861 arg1 = get_narrower (op1, &unsigned1);
1862
1863 /* UNS is 1 if the operation to be done is an unsigned one. */
1864 uns = TYPE_UNSIGNED (result_type);
1865
1866 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
1867 but it *requires* conversion to FINAL_TYPE. */
1868
1869 if ((TYPE_PRECISION (TREE_TYPE (op0))
1870 == TYPE_PRECISION (TREE_TYPE (arg0)))
1871 && TREE_TYPE (op0) != result_type)
1872 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1873 if ((TYPE_PRECISION (TREE_TYPE (op1))
1874 == TYPE_PRECISION (TREE_TYPE (arg1)))
1875 && TREE_TYPE (op1) != result_type)
1876 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1877
1878 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
1879
1880 /* For bitwise operations, signedness of nominal type
1881 does not matter. Consider only how operands were extended. */
1882 if (bitwise)
1883 uns = unsigned0;
1884
1885 /* Note that in all three cases below we refrain from optimizing
1886 an unsigned operation on sign-extended args.
1887 That would not be valid. */
1888
1889 /* Both args variable: if both extended in same way
1890 from same width, do it in that width.
1891 Do it unsigned if args were zero-extended. */
1892 if ((TYPE_PRECISION (TREE_TYPE (arg0))
1893 < TYPE_PRECISION (result_type))
1894 && (TYPE_PRECISION (TREE_TYPE (arg1))
1895 == TYPE_PRECISION (TREE_TYPE (arg0)))
1896 && unsigned0 == unsigned1
1897 && (unsigned0 || !uns))
1898 return c_common_signed_or_unsigned_type
1899 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
1900
1901 else if (TREE_CODE (arg0) == INTEGER_CST
1902 && (unsigned1 || !uns)
1903 && (TYPE_PRECISION (TREE_TYPE (arg1))
1904 < TYPE_PRECISION (result_type))
1905 && (type
1906 = c_common_signed_or_unsigned_type (unsigned1,
1907 TREE_TYPE (arg1)))
1908 && !POINTER_TYPE_P (type)
1909 && int_fits_type_p (arg0, type))
1910 return type;
1911
1912 else if (TREE_CODE (arg1) == INTEGER_CST
1913 && (unsigned0 || !uns)
1914 && (TYPE_PRECISION (TREE_TYPE (arg0))
1915 < TYPE_PRECISION (result_type))
1916 && (type
1917 = c_common_signed_or_unsigned_type (unsigned0,
1918 TREE_TYPE (arg0)))
1919 && !POINTER_TYPE_P (type)
1920 && int_fits_type_p (arg1, type))
1921 return type;
1922
1923 return result_type;
1924 }
1925
1926 /* Warns if the conversion of EXPR to TYPE may alter a value.
1927 This is a helper function for warnings_for_convert_and_check. */
1928
1929 static void
1930 conversion_warning (tree type, tree expr)
1931 {
1932 bool give_warning = false;
1933
1934 int i;
1935 const int expr_num_operands = TREE_OPERAND_LENGTH (expr);
1936 tree expr_type = TREE_TYPE (expr);
1937
1938 if (!warn_conversion && !warn_sign_conversion)
1939 return;
1940
1941 /* If any operand is artificial, then this expression was generated
1942 by the compiler and we do not warn. */
1943 for (i = 0; i < expr_num_operands; i++)
1944 {
1945 tree op = TREE_OPERAND (expr, i);
1946 if (op && DECL_P (op) && DECL_ARTIFICIAL (op))
1947 return;
1948 }
1949
1950 switch (TREE_CODE (expr))
1951 {
1952 case EQ_EXPR:
1953 case NE_EXPR:
1954 case LE_EXPR:
1955 case GE_EXPR:
1956 case LT_EXPR:
1957 case GT_EXPR:
1958 case TRUTH_ANDIF_EXPR:
1959 case TRUTH_ORIF_EXPR:
1960 case TRUTH_AND_EXPR:
1961 case TRUTH_OR_EXPR:
1962 case TRUTH_XOR_EXPR:
1963 case TRUTH_NOT_EXPR:
1964 /* Conversion from boolean to a signed:1 bit-field (which only
1965 can hold the values 0 and -1) doesn't lose information - but
1966 it does change the value. */
1967 if (TYPE_PRECISION (type) == 1 && !TYPE_UNSIGNED (type))
1968 warning (OPT_Wconversion,
1969 "conversion to %qT from boolean expression", type);
1970 return;
1971
1972 case REAL_CST:
1973 case INTEGER_CST:
1974
1975 /* Warn for real constant that is not an exact integer converted
1976 to integer type. */
1977 if (TREE_CODE (expr_type) == REAL_TYPE
1978 && TREE_CODE (type) == INTEGER_TYPE)
1979 {
1980 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (expr_type)))
1981 give_warning = true;
1982 }
1983 /* Warn for an integer constant that does not fit into integer type. */
1984 else if (TREE_CODE (expr_type) == INTEGER_TYPE
1985 && TREE_CODE (type) == INTEGER_TYPE
1986 && !int_fits_type_p (expr, type))
1987 {
1988 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)
1989 && tree_int_cst_sgn (expr) < 0)
1990 warning (OPT_Wsign_conversion,
1991 "negative integer implicitly converted to unsigned type");
1992 else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (expr_type))
1993 warning (OPT_Wsign_conversion, "conversion of unsigned constant "
1994 "value to negative integer");
1995 else
1996 give_warning = true;
1997 }
1998 else if (TREE_CODE (type) == REAL_TYPE)
1999 {
2000 /* Warn for an integer constant that does not fit into real type. */
2001 if (TREE_CODE (expr_type) == INTEGER_TYPE)
2002 {
2003 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
2004 if (!exact_real_truncate (TYPE_MODE (type), &a))
2005 give_warning = true;
2006 }
2007 /* Warn for a real constant that does not fit into a smaller
2008 real type. */
2009 else if (TREE_CODE (expr_type) == REAL_TYPE
2010 && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2011 {
2012 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
2013 if (!exact_real_truncate (TYPE_MODE (type), &a))
2014 give_warning = true;
2015 }
2016 }
2017
2018 if (give_warning)
2019 warning (OPT_Wconversion,
2020 "conversion to %qT alters %qT constant value",
2021 type, expr_type);
2022
2023 return;
2024
2025 case COND_EXPR:
2026 {
2027 /* In case of COND_EXPR, if both operands are constants or
2028 COND_EXPR, then we do not care about the type of COND_EXPR,
2029 only about the conversion of each operand. */
2030 tree op1 = TREE_OPERAND (expr, 1);
2031 tree op2 = TREE_OPERAND (expr, 2);
2032
2033 if ((TREE_CODE (op1) == REAL_CST || TREE_CODE (op1) == INTEGER_CST
2034 || TREE_CODE (op1) == COND_EXPR)
2035 && (TREE_CODE (op2) == REAL_CST || TREE_CODE (op2) == INTEGER_CST
2036 || TREE_CODE (op2) == COND_EXPR))
2037 {
2038 conversion_warning (type, op1);
2039 conversion_warning (type, op2);
2040 return;
2041 }
2042 /* Fall through. */
2043 }
2044
2045 default: /* 'expr' is not a constant. */
2046
2047 /* Warn for real types converted to integer types. */
2048 if (TREE_CODE (expr_type) == REAL_TYPE
2049 && TREE_CODE (type) == INTEGER_TYPE)
2050 give_warning = true;
2051
2052 else if (TREE_CODE (expr_type) == INTEGER_TYPE
2053 && TREE_CODE (type) == INTEGER_TYPE)
2054 {
2055 /* Don't warn about unsigned char y = 0xff, x = (int) y; */
2056 expr = get_unwidened (expr, 0);
2057 expr_type = TREE_TYPE (expr);
2058
2059 /* Don't warn for short y; short x = ((int)y & 0xff); */
2060 if (TREE_CODE (expr) == BIT_AND_EXPR
2061 || TREE_CODE (expr) == BIT_IOR_EXPR
2062 || TREE_CODE (expr) == BIT_XOR_EXPR)
2063 {
2064 /* If both args were extended from a shortest type,
2065 use that type if that is safe. */
2066 expr_type = shorten_binary_op (expr_type,
2067 TREE_OPERAND (expr, 0),
2068 TREE_OPERAND (expr, 1),
2069 /* bitwise */1);
2070
2071 if (TREE_CODE (expr) == BIT_AND_EXPR)
2072 {
2073 tree op0 = TREE_OPERAND (expr, 0);
2074 tree op1 = TREE_OPERAND (expr, 1);
2075 bool unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2076 bool unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2077
2078 /* If one of the operands is a non-negative constant
2079 that fits in the target type, then the type of the
2080 other operand does not matter. */
2081 if ((TREE_CODE (op0) == INTEGER_CST
2082 && int_fits_type_p (op0, c_common_signed_type (type))
2083 && int_fits_type_p (op0, c_common_unsigned_type (type)))
2084 || (TREE_CODE (op1) == INTEGER_CST
2085 && int_fits_type_p (op1, c_common_signed_type (type))
2086 && int_fits_type_p (op1,
2087 c_common_unsigned_type (type))))
2088 return;
2089 /* If constant is unsigned and fits in the target
2090 type, then the result will also fit. */
2091 else if ((TREE_CODE (op0) == INTEGER_CST
2092 && unsigned0
2093 && int_fits_type_p (op0, type))
2094 || (TREE_CODE (op1) == INTEGER_CST
2095 && unsigned1
2096 && int_fits_type_p (op1, type)))
2097 return;
2098 }
2099 }
2100 /* Warn for integer types converted to smaller integer types. */
2101 if (TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2102 give_warning = true;
2103
2104 /* When they are the same width but different signedness,
2105 then the value may change. */
2106 else if ((TYPE_PRECISION (type) == TYPE_PRECISION (expr_type)
2107 && TYPE_UNSIGNED (expr_type) != TYPE_UNSIGNED (type))
2108 /* Even when converted to a bigger type, if the type is
2109 unsigned but expr is signed, then negative values
2110 will be changed. */
2111 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)))
2112 warning (OPT_Wsign_conversion, "conversion to %qT from %qT "
2113 "may change the sign of the result",
2114 type, expr_type);
2115 }
2116
2117 /* Warn for integer types converted to real types if and only if
2118 all the range of values of the integer type cannot be
2119 represented by the real type. */
2120 else if (TREE_CODE (expr_type) == INTEGER_TYPE
2121 && TREE_CODE (type) == REAL_TYPE)
2122 {
2123 tree type_low_bound = TYPE_MIN_VALUE (expr_type);
2124 tree type_high_bound = TYPE_MAX_VALUE (expr_type);
2125 REAL_VALUE_TYPE real_low_bound
2126 = real_value_from_int_cst (0, type_low_bound);
2127 REAL_VALUE_TYPE real_high_bound
2128 = real_value_from_int_cst (0, type_high_bound);
2129
2130 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
2131 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
2132 give_warning = true;
2133 }
2134
2135 /* Warn for real types converted to smaller real types. */
2136 else if (TREE_CODE (expr_type) == REAL_TYPE
2137 && TREE_CODE (type) == REAL_TYPE
2138 && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2139 give_warning = true;
2140
2141
2142 if (give_warning)
2143 warning (OPT_Wconversion,
2144 "conversion to %qT from %qT may alter its value",
2145 type, expr_type);
2146 }
2147 }
2148
2149 /* Produce warnings after a conversion. RESULT is the result of
2150 converting EXPR to TYPE. This is a helper function for
2151 convert_and_check and cp_convert_and_check. */
2152
2153 void
2154 warnings_for_convert_and_check (tree type, tree expr, tree result)
2155 {
2156 if (TREE_CODE (expr) == INTEGER_CST
2157 && (TREE_CODE (type) == INTEGER_TYPE
2158 || TREE_CODE (type) == ENUMERAL_TYPE)
2159 && !int_fits_type_p (expr, type))
2160 {
2161 /* Do not diagnose overflow in a constant expression merely
2162 because a conversion overflowed. */
2163 if (TREE_OVERFLOW (result))
2164 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
2165
2166 if (TYPE_UNSIGNED (type))
2167 {
2168 /* This detects cases like converting -129 or 256 to
2169 unsigned char. */
2170 if (!int_fits_type_p (expr, c_common_signed_type (type)))
2171 warning (OPT_Woverflow,
2172 "large integer implicitly truncated to unsigned type");
2173 else
2174 conversion_warning (type, expr);
2175 }
2176 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
2177 warning (OPT_Woverflow,
2178 "overflow in implicit constant conversion");
2179 /* No warning for converting 0x80000000 to int. */
2180 else if (pedantic
2181 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
2182 || TYPE_PRECISION (TREE_TYPE (expr))
2183 != TYPE_PRECISION (type)))
2184 warning (OPT_Woverflow,
2185 "overflow in implicit constant conversion");
2186
2187 else
2188 conversion_warning (type, expr);
2189 }
2190 else if ((TREE_CODE (result) == INTEGER_CST
2191 || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
2192 warning (OPT_Woverflow,
2193 "overflow in implicit constant conversion");
2194 else
2195 conversion_warning (type, expr);
2196 }
2197
2198
2199 /* Convert EXPR to TYPE, warning about conversion problems with constants.
2200 Invoke this function on every expression that is converted implicitly,
2201 i.e. because of language rules and not because of an explicit cast. */
2202
2203 tree
2204 convert_and_check (tree type, tree expr)
2205 {
2206 tree result;
2207 tree expr_for_warning;
2208
2209 /* Convert from a value with possible excess precision rather than
2210 via the semantic type, but do not warn about values not fitting
2211 exactly in the semantic type. */
2212 if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
2213 {
2214 tree orig_type = TREE_TYPE (expr);
2215 expr = TREE_OPERAND (expr, 0);
2216 expr_for_warning = convert (orig_type, expr);
2217 if (orig_type == type)
2218 return expr_for_warning;
2219 }
2220 else
2221 expr_for_warning = expr;
2222
2223 if (TREE_TYPE (expr) == type)
2224 return expr;
2225
2226 result = convert (type, expr);
2227
2228 if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
2229 warnings_for_convert_and_check (type, expr_for_warning, result);
2230
2231 return result;
2232 }
2233 \f
2234 /* A node in a list that describes references to variables (EXPR), which are
2235 either read accesses if WRITER is zero, or write accesses, in which case
2236 WRITER is the parent of EXPR. */
2237 struct tlist
2238 {
2239 struct tlist *next;
2240 tree expr, writer;
2241 };
2242
2243 /* Used to implement a cache the results of a call to verify_tree. We only
2244 use this for SAVE_EXPRs. */
2245 struct tlist_cache
2246 {
2247 struct tlist_cache *next;
2248 struct tlist *cache_before_sp;
2249 struct tlist *cache_after_sp;
2250 tree expr;
2251 };
2252
2253 /* Obstack to use when allocating tlist structures, and corresponding
2254 firstobj. */
2255 static struct obstack tlist_obstack;
2256 static char *tlist_firstobj = 0;
2257
2258 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
2259 warnings. */
2260 static struct tlist *warned_ids;
2261 /* SAVE_EXPRs need special treatment. We process them only once and then
2262 cache the results. */
2263 static struct tlist_cache *save_expr_cache;
2264
2265 static void add_tlist (struct tlist **, struct tlist *, tree, int);
2266 static void merge_tlist (struct tlist **, struct tlist *, int);
2267 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
2268 static int warning_candidate_p (tree);
2269 static bool candidate_equal_p (const_tree, const_tree);
2270 static void warn_for_collisions (struct tlist *);
2271 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
2272 static struct tlist *new_tlist (struct tlist *, tree, tree);
2273
2274 /* Create a new struct tlist and fill in its fields. */
2275 static struct tlist *
2276 new_tlist (struct tlist *next, tree t, tree writer)
2277 {
2278 struct tlist *l;
2279 l = XOBNEW (&tlist_obstack, struct tlist);
2280 l->next = next;
2281 l->expr = t;
2282 l->writer = writer;
2283 return l;
2284 }
2285
2286 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
2287 is nonnull, we ignore any node we find which has a writer equal to it. */
2288
2289 static void
2290 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
2291 {
2292 while (add)
2293 {
2294 struct tlist *next = add->next;
2295 if (!copy)
2296 add->next = *to;
2297 if (!exclude_writer || !candidate_equal_p (add->writer, exclude_writer))
2298 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
2299 add = next;
2300 }
2301 }
2302
2303 /* Merge the nodes of ADD into TO. This merging process is done so that for
2304 each variable that already exists in TO, no new node is added; however if
2305 there is a write access recorded in ADD, and an occurrence on TO is only
2306 a read access, then the occurrence in TO will be modified to record the
2307 write. */
2308
2309 static void
2310 merge_tlist (struct tlist **to, struct tlist *add, int copy)
2311 {
2312 struct tlist **end = to;
2313
2314 while (*end)
2315 end = &(*end)->next;
2316
2317 while (add)
2318 {
2319 int found = 0;
2320 struct tlist *tmp2;
2321 struct tlist *next = add->next;
2322
2323 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
2324 if (candidate_equal_p (tmp2->expr, add->expr))
2325 {
2326 found = 1;
2327 if (!tmp2->writer)
2328 tmp2->writer = add->writer;
2329 }
2330 if (!found)
2331 {
2332 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
2333 end = &(*end)->next;
2334 *end = 0;
2335 }
2336 add = next;
2337 }
2338 }
2339
2340 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
2341 references in list LIST conflict with it, excluding reads if ONLY writers
2342 is nonzero. */
2343
2344 static void
2345 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
2346 int only_writes)
2347 {
2348 struct tlist *tmp;
2349
2350 /* Avoid duplicate warnings. */
2351 for (tmp = warned_ids; tmp; tmp = tmp->next)
2352 if (candidate_equal_p (tmp->expr, written))
2353 return;
2354
2355 while (list)
2356 {
2357 if (candidate_equal_p (list->expr, written)
2358 && !candidate_equal_p (list->writer, writer)
2359 && (!only_writes || list->writer))
2360 {
2361 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
2362 warning_at (EXPR_HAS_LOCATION (writer)
2363 ? EXPR_LOCATION (writer) : input_location,
2364 OPT_Wsequence_point, "operation on %qE may be undefined",
2365 list->expr);
2366 }
2367 list = list->next;
2368 }
2369 }
2370
2371 /* Given a list LIST of references to variables, find whether any of these
2372 can cause conflicts due to missing sequence points. */
2373
2374 static void
2375 warn_for_collisions (struct tlist *list)
2376 {
2377 struct tlist *tmp;
2378
2379 for (tmp = list; tmp; tmp = tmp->next)
2380 {
2381 if (tmp->writer)
2382 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
2383 }
2384 }
2385
2386 /* Return nonzero if X is a tree that can be verified by the sequence point
2387 warnings. */
2388 static int
2389 warning_candidate_p (tree x)
2390 {
2391 /* !VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.c
2392 (lvalue_p) crash on TRY/CATCH. */
2393 return !(DECL_P (x) && DECL_ARTIFICIAL (x))
2394 && TREE_TYPE (x) && !VOID_TYPE_P (TREE_TYPE (x)) && lvalue_p (x);
2395 }
2396
2397 /* Return nonzero if X and Y appear to be the same candidate (or NULL) */
2398 static bool
2399 candidate_equal_p (const_tree x, const_tree y)
2400 {
2401 return (x == y) || (x && y && operand_equal_p (x, y, 0));
2402 }
2403
2404 /* Walk the tree X, and record accesses to variables. If X is written by the
2405 parent tree, WRITER is the parent.
2406 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
2407 expression or its only operand forces a sequence point, then everything up
2408 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
2409 in PNO_SP.
2410 Once we return, we will have emitted warnings if any subexpression before
2411 such a sequence point could be undefined. On a higher level, however, the
2412 sequence point may not be relevant, and we'll merge the two lists.
2413
2414 Example: (b++, a) + b;
2415 The call that processes the COMPOUND_EXPR will store the increment of B
2416 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
2417 processes the PLUS_EXPR will need to merge the two lists so that
2418 eventually, all accesses end up on the same list (and we'll warn about the
2419 unordered subexpressions b++ and b.
2420
2421 A note on merging. If we modify the former example so that our expression
2422 becomes
2423 (b++, b) + a
2424 care must be taken not simply to add all three expressions into the final
2425 PNO_SP list. The function merge_tlist takes care of that by merging the
2426 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
2427 way, so that no more than one access to B is recorded. */
2428
2429 static void
2430 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
2431 tree writer)
2432 {
2433 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
2434 enum tree_code code;
2435 enum tree_code_class cl;
2436
2437 /* X may be NULL if it is the operand of an empty statement expression
2438 ({ }). */
2439 if (x == NULL)
2440 return;
2441
2442 restart:
2443 code = TREE_CODE (x);
2444 cl = TREE_CODE_CLASS (code);
2445
2446 if (warning_candidate_p (x))
2447 *pno_sp = new_tlist (*pno_sp, x, writer);
2448
2449 switch (code)
2450 {
2451 case CONSTRUCTOR:
2452 return;
2453
2454 case COMPOUND_EXPR:
2455 case TRUTH_ANDIF_EXPR:
2456 case TRUTH_ORIF_EXPR:
2457 tmp_before = tmp_nosp = tmp_list3 = 0;
2458 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2459 warn_for_collisions (tmp_nosp);
2460 merge_tlist (pbefore_sp, tmp_before, 0);
2461 merge_tlist (pbefore_sp, tmp_nosp, 0);
2462 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
2463 merge_tlist (pbefore_sp, tmp_list3, 0);
2464 return;
2465
2466 case COND_EXPR:
2467 tmp_before = tmp_list2 = 0;
2468 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
2469 warn_for_collisions (tmp_list2);
2470 merge_tlist (pbefore_sp, tmp_before, 0);
2471 merge_tlist (pbefore_sp, tmp_list2, 1);
2472
2473 tmp_list3 = tmp_nosp = 0;
2474 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
2475 warn_for_collisions (tmp_nosp);
2476 merge_tlist (pbefore_sp, tmp_list3, 0);
2477
2478 tmp_list3 = tmp_list2 = 0;
2479 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
2480 warn_for_collisions (tmp_list2);
2481 merge_tlist (pbefore_sp, tmp_list3, 0);
2482 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
2483 two first, to avoid warning for (a ? b++ : b++). */
2484 merge_tlist (&tmp_nosp, tmp_list2, 0);
2485 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2486 return;
2487
2488 case PREDECREMENT_EXPR:
2489 case PREINCREMENT_EXPR:
2490 case POSTDECREMENT_EXPR:
2491 case POSTINCREMENT_EXPR:
2492 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
2493 return;
2494
2495 case MODIFY_EXPR:
2496 tmp_before = tmp_nosp = tmp_list3 = 0;
2497 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
2498 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
2499 /* Expressions inside the LHS are not ordered wrt. the sequence points
2500 in the RHS. Example:
2501 *a = (a++, 2)
2502 Despite the fact that the modification of "a" is in the before_sp
2503 list (tmp_before), it conflicts with the use of "a" in the LHS.
2504 We can handle this by adding the contents of tmp_list3
2505 to those of tmp_before, and redoing the collision warnings for that
2506 list. */
2507 add_tlist (&tmp_before, tmp_list3, x, 1);
2508 warn_for_collisions (tmp_before);
2509 /* Exclude the LHS itself here; we first have to merge it into the
2510 tmp_nosp list. This is done to avoid warning for "a = a"; if we
2511 didn't exclude the LHS, we'd get it twice, once as a read and once
2512 as a write. */
2513 add_tlist (pno_sp, tmp_list3, x, 0);
2514 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
2515
2516 merge_tlist (pbefore_sp, tmp_before, 0);
2517 if (warning_candidate_p (TREE_OPERAND (x, 0)))
2518 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
2519 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
2520 return;
2521
2522 case CALL_EXPR:
2523 /* We need to warn about conflicts among arguments and conflicts between
2524 args and the function address. Side effects of the function address,
2525 however, are not ordered by the sequence point of the call. */
2526 {
2527 call_expr_arg_iterator iter;
2528 tree arg;
2529 tmp_before = tmp_nosp = 0;
2530 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
2531 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
2532 {
2533 tmp_list2 = tmp_list3 = 0;
2534 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
2535 merge_tlist (&tmp_list3, tmp_list2, 0);
2536 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
2537 }
2538 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
2539 warn_for_collisions (tmp_before);
2540 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
2541 return;
2542 }
2543
2544 case TREE_LIST:
2545 /* Scan all the list, e.g. indices of multi dimensional array. */
2546 while (x)
2547 {
2548 tmp_before = tmp_nosp = 0;
2549 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
2550 merge_tlist (&tmp_nosp, tmp_before, 0);
2551 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2552 x = TREE_CHAIN (x);
2553 }
2554 return;
2555
2556 case SAVE_EXPR:
2557 {
2558 struct tlist_cache *t;
2559 for (t = save_expr_cache; t; t = t->next)
2560 if (candidate_equal_p (t->expr, x))
2561 break;
2562
2563 if (!t)
2564 {
2565 t = XOBNEW (&tlist_obstack, struct tlist_cache);
2566 t->next = save_expr_cache;
2567 t->expr = x;
2568 save_expr_cache = t;
2569
2570 tmp_before = tmp_nosp = 0;
2571 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2572 warn_for_collisions (tmp_nosp);
2573
2574 tmp_list3 = 0;
2575 while (tmp_nosp)
2576 {
2577 struct tlist *t = tmp_nosp;
2578 tmp_nosp = t->next;
2579 merge_tlist (&tmp_list3, t, 0);
2580 }
2581 t->cache_before_sp = tmp_before;
2582 t->cache_after_sp = tmp_list3;
2583 }
2584 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
2585 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
2586 return;
2587 }
2588
2589 case ADDR_EXPR:
2590 x = TREE_OPERAND (x, 0);
2591 if (DECL_P (x))
2592 return;
2593 writer = 0;
2594 goto restart;
2595
2596 default:
2597 /* For other expressions, simply recurse on their operands.
2598 Manual tail recursion for unary expressions.
2599 Other non-expressions need not be processed. */
2600 if (cl == tcc_unary)
2601 {
2602 x = TREE_OPERAND (x, 0);
2603 writer = 0;
2604 goto restart;
2605 }
2606 else if (IS_EXPR_CODE_CLASS (cl))
2607 {
2608 int lp;
2609 int max = TREE_OPERAND_LENGTH (x);
2610 for (lp = 0; lp < max; lp++)
2611 {
2612 tmp_before = tmp_nosp = 0;
2613 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
2614 merge_tlist (&tmp_nosp, tmp_before, 0);
2615 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2616 }
2617 }
2618 return;
2619 }
2620 }
2621
2622 /* Try to warn for undefined behavior in EXPR due to missing sequence
2623 points. */
2624
2625 void
2626 verify_sequence_points (tree expr)
2627 {
2628 struct tlist *before_sp = 0, *after_sp = 0;
2629
2630 warned_ids = 0;
2631 save_expr_cache = 0;
2632 if (tlist_firstobj == 0)
2633 {
2634 gcc_obstack_init (&tlist_obstack);
2635 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2636 }
2637
2638 verify_tree (expr, &before_sp, &after_sp, 0);
2639 warn_for_collisions (after_sp);
2640 obstack_free (&tlist_obstack, tlist_firstobj);
2641 }
2642 \f
2643 /* Validate the expression after `case' and apply default promotions. */
2644
2645 static tree
2646 check_case_value (tree value)
2647 {
2648 if (value == NULL_TREE)
2649 return value;
2650
2651 /* ??? Can we ever get nops here for a valid case value? We
2652 shouldn't for C. */
2653 STRIP_TYPE_NOPS (value);
2654 /* In C++, the following is allowed:
2655
2656 const int i = 3;
2657 switch (...) { case i: ... }
2658
2659 So, we try to reduce the VALUE to a constant that way. */
2660 if (c_dialect_cxx ())
2661 {
2662 value = decl_constant_value (value);
2663 STRIP_TYPE_NOPS (value);
2664 value = fold (value);
2665 }
2666
2667 if (TREE_CODE (value) == INTEGER_CST)
2668 /* Promote char or short to int. */
2669 value = perform_integral_promotions (value);
2670 else if (value != error_mark_node)
2671 {
2672 error ("case label does not reduce to an integer constant");
2673 value = error_mark_node;
2674 }
2675
2676 constant_expression_warning (value);
2677
2678 return value;
2679 }
2680 \f
2681 /* See if the case values LOW and HIGH are in the range of the original
2682 type (i.e. before the default conversion to int) of the switch testing
2683 expression.
2684 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2685 the type before promoting it. CASE_LOW_P is a pointer to the lower
2686 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
2687 if the case is not a case range.
2688 The caller has to make sure that we are not called with NULL for
2689 CASE_LOW_P (i.e. the default case).
2690 Returns true if the case label is in range of ORIG_TYPE (saturated or
2691 untouched) or false if the label is out of range. */
2692
2693 static bool
2694 check_case_bounds (tree type, tree orig_type,
2695 tree *case_low_p, tree *case_high_p)
2696 {
2697 tree min_value, max_value;
2698 tree case_low = *case_low_p;
2699 tree case_high = case_high_p ? *case_high_p : case_low;
2700
2701 /* If there was a problem with the original type, do nothing. */
2702 if (orig_type == error_mark_node)
2703 return true;
2704
2705 min_value = TYPE_MIN_VALUE (orig_type);
2706 max_value = TYPE_MAX_VALUE (orig_type);
2707
2708 /* Case label is less than minimum for type. */
2709 if (tree_int_cst_compare (case_low, min_value) < 0
2710 && tree_int_cst_compare (case_high, min_value) < 0)
2711 {
2712 warning (0, "case label value is less than minimum value for type");
2713 return false;
2714 }
2715
2716 /* Case value is greater than maximum for type. */
2717 if (tree_int_cst_compare (case_low, max_value) > 0
2718 && tree_int_cst_compare (case_high, max_value) > 0)
2719 {
2720 warning (0, "case label value exceeds maximum value for type");
2721 return false;
2722 }
2723
2724 /* Saturate lower case label value to minimum. */
2725 if (tree_int_cst_compare (case_high, min_value) >= 0
2726 && tree_int_cst_compare (case_low, min_value) < 0)
2727 {
2728 warning (0, "lower value in case label range"
2729 " less than minimum value for type");
2730 case_low = min_value;
2731 }
2732
2733 /* Saturate upper case label value to maximum. */
2734 if (tree_int_cst_compare (case_low, max_value) <= 0
2735 && tree_int_cst_compare (case_high, max_value) > 0)
2736 {
2737 warning (0, "upper value in case label range"
2738 " exceeds maximum value for type");
2739 case_high = max_value;
2740 }
2741
2742 if (*case_low_p != case_low)
2743 *case_low_p = convert (type, case_low);
2744 if (case_high_p && *case_high_p != case_high)
2745 *case_high_p = convert (type, case_high);
2746
2747 return true;
2748 }
2749 \f
2750 /* Return an integer type with BITS bits of precision,
2751 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
2752
2753 tree
2754 c_common_type_for_size (unsigned int bits, int unsignedp)
2755 {
2756 if (bits == TYPE_PRECISION (integer_type_node))
2757 return unsignedp ? unsigned_type_node : integer_type_node;
2758
2759 if (bits == TYPE_PRECISION (signed_char_type_node))
2760 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2761
2762 if (bits == TYPE_PRECISION (short_integer_type_node))
2763 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2764
2765 if (bits == TYPE_PRECISION (long_integer_type_node))
2766 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2767
2768 if (bits == TYPE_PRECISION (long_long_integer_type_node))
2769 return (unsignedp ? long_long_unsigned_type_node
2770 : long_long_integer_type_node);
2771
2772 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
2773 return (unsignedp ? widest_unsigned_literal_type_node
2774 : widest_integer_literal_type_node);
2775
2776 if (bits <= TYPE_PRECISION (intQI_type_node))
2777 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2778
2779 if (bits <= TYPE_PRECISION (intHI_type_node))
2780 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2781
2782 if (bits <= TYPE_PRECISION (intSI_type_node))
2783 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2784
2785 if (bits <= TYPE_PRECISION (intDI_type_node))
2786 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2787
2788 return 0;
2789 }
2790
2791 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
2792 that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
2793 and saturating if SATP is nonzero, otherwise not saturating. */
2794
2795 tree
2796 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
2797 int unsignedp, int satp)
2798 {
2799 enum machine_mode mode;
2800 if (ibit == 0)
2801 mode = unsignedp ? UQQmode : QQmode;
2802 else
2803 mode = unsignedp ? UHAmode : HAmode;
2804
2805 for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
2806 if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
2807 break;
2808
2809 if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
2810 {
2811 sorry ("GCC cannot support operators with integer types and "
2812 "fixed-point types that have too many integral and "
2813 "fractional bits together");
2814 return 0;
2815 }
2816
2817 return c_common_type_for_mode (mode, satp);
2818 }
2819
2820 /* Used for communication between c_common_type_for_mode and
2821 c_register_builtin_type. */
2822 static GTY(()) tree registered_builtin_types;
2823
2824 /* Return a data type that has machine mode MODE.
2825 If the mode is an integer,
2826 then UNSIGNEDP selects between signed and unsigned types.
2827 If the mode is a fixed-point mode,
2828 then UNSIGNEDP selects between saturating and nonsaturating types. */
2829
2830 tree
2831 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
2832 {
2833 tree t;
2834
2835 if (mode == TYPE_MODE (integer_type_node))
2836 return unsignedp ? unsigned_type_node : integer_type_node;
2837
2838 if (mode == TYPE_MODE (signed_char_type_node))
2839 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2840
2841 if (mode == TYPE_MODE (short_integer_type_node))
2842 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2843
2844 if (mode == TYPE_MODE (long_integer_type_node))
2845 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2846
2847 if (mode == TYPE_MODE (long_long_integer_type_node))
2848 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2849
2850 if (mode == TYPE_MODE (widest_integer_literal_type_node))
2851 return unsignedp ? widest_unsigned_literal_type_node
2852 : widest_integer_literal_type_node;
2853
2854 if (mode == QImode)
2855 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2856
2857 if (mode == HImode)
2858 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2859
2860 if (mode == SImode)
2861 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2862
2863 if (mode == DImode)
2864 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2865
2866 #if HOST_BITS_PER_WIDE_INT >= 64
2867 if (mode == TYPE_MODE (intTI_type_node))
2868 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2869 #endif
2870
2871 if (mode == TYPE_MODE (float_type_node))
2872 return float_type_node;
2873
2874 if (mode == TYPE_MODE (double_type_node))
2875 return double_type_node;
2876
2877 if (mode == TYPE_MODE (long_double_type_node))
2878 return long_double_type_node;
2879
2880 if (mode == TYPE_MODE (void_type_node))
2881 return void_type_node;
2882
2883 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2884 return (unsignedp
2885 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2886 : make_signed_type (GET_MODE_PRECISION (mode)));
2887
2888 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2889 return (unsignedp
2890 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2891 : make_signed_type (GET_MODE_PRECISION (mode)));
2892
2893 if (COMPLEX_MODE_P (mode))
2894 {
2895 enum machine_mode inner_mode;
2896 tree inner_type;
2897
2898 if (mode == TYPE_MODE (complex_float_type_node))
2899 return complex_float_type_node;
2900 if (mode == TYPE_MODE (complex_double_type_node))
2901 return complex_double_type_node;
2902 if (mode == TYPE_MODE (complex_long_double_type_node))
2903 return complex_long_double_type_node;
2904
2905 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2906 return complex_integer_type_node;
2907
2908 inner_mode = GET_MODE_INNER (mode);
2909 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2910 if (inner_type != NULL_TREE)
2911 return build_complex_type (inner_type);
2912 }
2913 else if (VECTOR_MODE_P (mode))
2914 {
2915 enum machine_mode inner_mode = GET_MODE_INNER (mode);
2916 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2917 if (inner_type != NULL_TREE)
2918 return build_vector_type_for_mode (inner_type, mode);
2919 }
2920
2921 if (mode == TYPE_MODE (dfloat32_type_node))
2922 return dfloat32_type_node;
2923 if (mode == TYPE_MODE (dfloat64_type_node))
2924 return dfloat64_type_node;
2925 if (mode == TYPE_MODE (dfloat128_type_node))
2926 return dfloat128_type_node;
2927
2928 if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
2929 {
2930 if (mode == TYPE_MODE (short_fract_type_node))
2931 return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
2932 if (mode == TYPE_MODE (fract_type_node))
2933 return unsignedp ? sat_fract_type_node : fract_type_node;
2934 if (mode == TYPE_MODE (long_fract_type_node))
2935 return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
2936 if (mode == TYPE_MODE (long_long_fract_type_node))
2937 return unsignedp ? sat_long_long_fract_type_node
2938 : long_long_fract_type_node;
2939
2940 if (mode == TYPE_MODE (unsigned_short_fract_type_node))
2941 return unsignedp ? sat_unsigned_short_fract_type_node
2942 : unsigned_short_fract_type_node;
2943 if (mode == TYPE_MODE (unsigned_fract_type_node))
2944 return unsignedp ? sat_unsigned_fract_type_node
2945 : unsigned_fract_type_node;
2946 if (mode == TYPE_MODE (unsigned_long_fract_type_node))
2947 return unsignedp ? sat_unsigned_long_fract_type_node
2948 : unsigned_long_fract_type_node;
2949 if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
2950 return unsignedp ? sat_unsigned_long_long_fract_type_node
2951 : unsigned_long_long_fract_type_node;
2952
2953 if (mode == TYPE_MODE (short_accum_type_node))
2954 return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
2955 if (mode == TYPE_MODE (accum_type_node))
2956 return unsignedp ? sat_accum_type_node : accum_type_node;
2957 if (mode == TYPE_MODE (long_accum_type_node))
2958 return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
2959 if (mode == TYPE_MODE (long_long_accum_type_node))
2960 return unsignedp ? sat_long_long_accum_type_node
2961 : long_long_accum_type_node;
2962
2963 if (mode == TYPE_MODE (unsigned_short_accum_type_node))
2964 return unsignedp ? sat_unsigned_short_accum_type_node
2965 : unsigned_short_accum_type_node;
2966 if (mode == TYPE_MODE (unsigned_accum_type_node))
2967 return unsignedp ? sat_unsigned_accum_type_node
2968 : unsigned_accum_type_node;
2969 if (mode == TYPE_MODE (unsigned_long_accum_type_node))
2970 return unsignedp ? sat_unsigned_long_accum_type_node
2971 : unsigned_long_accum_type_node;
2972 if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
2973 return unsignedp ? sat_unsigned_long_long_accum_type_node
2974 : unsigned_long_long_accum_type_node;
2975
2976 if (mode == QQmode)
2977 return unsignedp ? sat_qq_type_node : qq_type_node;
2978 if (mode == HQmode)
2979 return unsignedp ? sat_hq_type_node : hq_type_node;
2980 if (mode == SQmode)
2981 return unsignedp ? sat_sq_type_node : sq_type_node;
2982 if (mode == DQmode)
2983 return unsignedp ? sat_dq_type_node : dq_type_node;
2984 if (mode == TQmode)
2985 return unsignedp ? sat_tq_type_node : tq_type_node;
2986
2987 if (mode == UQQmode)
2988 return unsignedp ? sat_uqq_type_node : uqq_type_node;
2989 if (mode == UHQmode)
2990 return unsignedp ? sat_uhq_type_node : uhq_type_node;
2991 if (mode == USQmode)
2992 return unsignedp ? sat_usq_type_node : usq_type_node;
2993 if (mode == UDQmode)
2994 return unsignedp ? sat_udq_type_node : udq_type_node;
2995 if (mode == UTQmode)
2996 return unsignedp ? sat_utq_type_node : utq_type_node;
2997
2998 if (mode == HAmode)
2999 return unsignedp ? sat_ha_type_node : ha_type_node;
3000 if (mode == SAmode)
3001 return unsignedp ? sat_sa_type_node : sa_type_node;
3002 if (mode == DAmode)
3003 return unsignedp ? sat_da_type_node : da_type_node;
3004 if (mode == TAmode)
3005 return unsignedp ? sat_ta_type_node : ta_type_node;
3006
3007 if (mode == UHAmode)
3008 return unsignedp ? sat_uha_type_node : uha_type_node;
3009 if (mode == USAmode)
3010 return unsignedp ? sat_usa_type_node : usa_type_node;
3011 if (mode == UDAmode)
3012 return unsignedp ? sat_uda_type_node : uda_type_node;
3013 if (mode == UTAmode)
3014 return unsignedp ? sat_uta_type_node : uta_type_node;
3015 }
3016
3017 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
3018 if (TYPE_MODE (TREE_VALUE (t)) == mode)
3019 return TREE_VALUE (t);
3020
3021 return 0;
3022 }
3023
3024 tree
3025 c_common_unsigned_type (tree type)
3026 {
3027 return c_common_signed_or_unsigned_type (1, type);
3028 }
3029
3030 /* Return a signed type the same as TYPE in other respects. */
3031
3032 tree
3033 c_common_signed_type (tree type)
3034 {
3035 return c_common_signed_or_unsigned_type (0, type);
3036 }
3037
3038 /* Return a type the same as TYPE except unsigned or
3039 signed according to UNSIGNEDP. */
3040
3041 tree
3042 c_common_signed_or_unsigned_type (int unsignedp, tree type)
3043 {
3044 tree type1;
3045
3046 /* This block of code emulates the behavior of the old
3047 c_common_unsigned_type. In particular, it returns
3048 long_unsigned_type_node if passed a long, even when a int would
3049 have the same size. This is necessary for warnings to work
3050 correctly in archs where sizeof(int) == sizeof(long) */
3051
3052 type1 = TYPE_MAIN_VARIANT (type);
3053 if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
3054 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3055 if (type1 == integer_type_node || type1 == unsigned_type_node)
3056 return unsignedp ? unsigned_type_node : integer_type_node;
3057 if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
3058 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3059 if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
3060 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3061 if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
3062 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
3063 if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
3064 return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
3065 #if HOST_BITS_PER_WIDE_INT >= 64
3066 if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
3067 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3068 #endif
3069 if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
3070 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3071 if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
3072 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3073 if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
3074 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3075 if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
3076 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3077
3078 #define C_COMMON_FIXED_TYPES(NAME) \
3079 if (type1 == short_ ## NAME ## _type_node \
3080 || type1 == unsigned_short_ ## NAME ## _type_node) \
3081 return unsignedp ? unsigned_short_ ## NAME ## _type_node \
3082 : short_ ## NAME ## _type_node; \
3083 if (type1 == NAME ## _type_node \
3084 || type1 == unsigned_ ## NAME ## _type_node) \
3085 return unsignedp ? unsigned_ ## NAME ## _type_node \
3086 : NAME ## _type_node; \
3087 if (type1 == long_ ## NAME ## _type_node \
3088 || type1 == unsigned_long_ ## NAME ## _type_node) \
3089 return unsignedp ? unsigned_long_ ## NAME ## _type_node \
3090 : long_ ## NAME ## _type_node; \
3091 if (type1 == long_long_ ## NAME ## _type_node \
3092 || type1 == unsigned_long_long_ ## NAME ## _type_node) \
3093 return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
3094 : long_long_ ## NAME ## _type_node;
3095
3096 #define C_COMMON_FIXED_MODE_TYPES(NAME) \
3097 if (type1 == NAME ## _type_node \
3098 || type1 == u ## NAME ## _type_node) \
3099 return unsignedp ? u ## NAME ## _type_node \
3100 : NAME ## _type_node;
3101
3102 #define C_COMMON_FIXED_TYPES_SAT(NAME) \
3103 if (type1 == sat_ ## short_ ## NAME ## _type_node \
3104 || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
3105 return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
3106 : sat_ ## short_ ## NAME ## _type_node; \
3107 if (type1 == sat_ ## NAME ## _type_node \
3108 || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
3109 return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
3110 : sat_ ## NAME ## _type_node; \
3111 if (type1 == sat_ ## long_ ## NAME ## _type_node \
3112 || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
3113 return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
3114 : sat_ ## long_ ## NAME ## _type_node; \
3115 if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
3116 || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
3117 return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
3118 : sat_ ## long_long_ ## NAME ## _type_node;
3119
3120 #define C_COMMON_FIXED_MODE_TYPES_SAT(NAME) \
3121 if (type1 == sat_ ## NAME ## _type_node \
3122 || type1 == sat_ ## u ## NAME ## _type_node) \
3123 return unsignedp ? sat_ ## u ## NAME ## _type_node \
3124 : sat_ ## NAME ## _type_node;
3125
3126 C_COMMON_FIXED_TYPES (fract);
3127 C_COMMON_FIXED_TYPES_SAT (fract);
3128 C_COMMON_FIXED_TYPES (accum);
3129 C_COMMON_FIXED_TYPES_SAT (accum);
3130
3131 C_COMMON_FIXED_MODE_TYPES (qq);
3132 C_COMMON_FIXED_MODE_TYPES (hq);
3133 C_COMMON_FIXED_MODE_TYPES (sq);
3134 C_COMMON_FIXED_MODE_TYPES (dq);
3135 C_COMMON_FIXED_MODE_TYPES (tq);
3136 C_COMMON_FIXED_MODE_TYPES_SAT (qq);
3137 C_COMMON_FIXED_MODE_TYPES_SAT (hq);
3138 C_COMMON_FIXED_MODE_TYPES_SAT (sq);
3139 C_COMMON_FIXED_MODE_TYPES_SAT (dq);
3140 C_COMMON_FIXED_MODE_TYPES_SAT (tq);
3141 C_COMMON_FIXED_MODE_TYPES (ha);
3142 C_COMMON_FIXED_MODE_TYPES (sa);
3143 C_COMMON_FIXED_MODE_TYPES (da);
3144 C_COMMON_FIXED_MODE_TYPES (ta);
3145 C_COMMON_FIXED_MODE_TYPES_SAT (ha);
3146 C_COMMON_FIXED_MODE_TYPES_SAT (sa);
3147 C_COMMON_FIXED_MODE_TYPES_SAT (da);
3148 C_COMMON_FIXED_MODE_TYPES_SAT (ta);
3149
3150 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
3151 the precision; they have precision set to match their range, but
3152 may use a wider mode to match an ABI. If we change modes, we may
3153 wind up with bad conversions. For INTEGER_TYPEs in C, must check
3154 the precision as well, so as to yield correct results for
3155 bit-field types. C++ does not have these separate bit-field
3156 types, and producing a signed or unsigned variant of an
3157 ENUMERAL_TYPE may cause other problems as well. */
3158
3159 if (!INTEGRAL_TYPE_P (type)
3160 || TYPE_UNSIGNED (type) == unsignedp)
3161 return type;
3162
3163 #define TYPE_OK(node) \
3164 (TYPE_MODE (type) == TYPE_MODE (node) \
3165 && TYPE_PRECISION (type) == TYPE_PRECISION (node))
3166 if (TYPE_OK (signed_char_type_node))
3167 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3168 if (TYPE_OK (integer_type_node))
3169 return unsignedp ? unsigned_type_node : integer_type_node;
3170 if (TYPE_OK (short_integer_type_node))
3171 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3172 if (TYPE_OK (long_integer_type_node))
3173 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3174 if (TYPE_OK (long_long_integer_type_node))
3175 return (unsignedp ? long_long_unsigned_type_node
3176 : long_long_integer_type_node);
3177 if (TYPE_OK (widest_integer_literal_type_node))
3178 return (unsignedp ? widest_unsigned_literal_type_node
3179 : widest_integer_literal_type_node);
3180
3181 #if HOST_BITS_PER_WIDE_INT >= 64
3182 if (TYPE_OK (intTI_type_node))
3183 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3184 #endif
3185 if (TYPE_OK (intDI_type_node))
3186 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3187 if (TYPE_OK (intSI_type_node))
3188 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3189 if (TYPE_OK (intHI_type_node))
3190 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3191 if (TYPE_OK (intQI_type_node))
3192 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3193 #undef TYPE_OK
3194
3195 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
3196 }
3197
3198 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
3199
3200 tree
3201 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
3202 {
3203 /* Extended integer types of the same width as a standard type have
3204 lesser rank, so those of the same width as int promote to int or
3205 unsigned int and are valid for printf formats expecting int or
3206 unsigned int. To avoid such special cases, avoid creating
3207 extended integer types for bit-fields if a standard integer type
3208 is available. */
3209 if (width == TYPE_PRECISION (integer_type_node))
3210 return unsignedp ? unsigned_type_node : integer_type_node;
3211 if (width == TYPE_PRECISION (signed_char_type_node))
3212 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3213 if (width == TYPE_PRECISION (short_integer_type_node))
3214 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3215 if (width == TYPE_PRECISION (long_integer_type_node))
3216 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3217 if (width == TYPE_PRECISION (long_long_integer_type_node))
3218 return (unsignedp ? long_long_unsigned_type_node
3219 : long_long_integer_type_node);
3220 return build_nonstandard_integer_type (width, unsignedp);
3221 }
3222
3223 /* The C version of the register_builtin_type langhook. */
3224
3225 void
3226 c_register_builtin_type (tree type, const char* name)
3227 {
3228 tree decl;
3229
3230 decl = build_decl (UNKNOWN_LOCATION,
3231 TYPE_DECL, get_identifier (name), type);
3232 DECL_ARTIFICIAL (decl) = 1;
3233 if (!TYPE_NAME (type))
3234 TYPE_NAME (type) = decl;
3235 pushdecl (decl);
3236
3237 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
3238 }
3239 \f
3240 /* Print an error message for invalid operands to arith operation
3241 CODE with TYPE0 for operand 0, and TYPE1 for operand 1.
3242 LOCATION is the location of the message. */
3243
3244 void
3245 binary_op_error (location_t location, enum tree_code code,
3246 tree type0, tree type1)
3247 {
3248 const char *opname;
3249
3250 switch (code)
3251 {
3252 case PLUS_EXPR:
3253 opname = "+"; break;
3254 case MINUS_EXPR:
3255 opname = "-"; break;
3256 case MULT_EXPR:
3257 opname = "*"; break;
3258 case MAX_EXPR:
3259 opname = "max"; break;
3260 case MIN_EXPR:
3261 opname = "min"; break;
3262 case EQ_EXPR:
3263 opname = "=="; break;
3264 case NE_EXPR:
3265 opname = "!="; break;
3266 case LE_EXPR:
3267 opname = "<="; break;
3268 case GE_EXPR:
3269 opname = ">="; break;
3270 case LT_EXPR:
3271 opname = "<"; break;
3272 case GT_EXPR:
3273 opname = ">"; break;
3274 case LSHIFT_EXPR:
3275 opname = "<<"; break;
3276 case RSHIFT_EXPR:
3277 opname = ">>"; break;
3278 case TRUNC_MOD_EXPR:
3279 case FLOOR_MOD_EXPR:
3280 opname = "%"; break;
3281 case TRUNC_DIV_EXPR:
3282 case FLOOR_DIV_EXPR:
3283 opname = "/"; break;
3284 case BIT_AND_EXPR:
3285 opname = "&"; break;
3286 case BIT_IOR_EXPR:
3287 opname = "|"; break;
3288 case TRUTH_ANDIF_EXPR:
3289 opname = "&&"; break;
3290 case TRUTH_ORIF_EXPR:
3291 opname = "||"; break;
3292 case BIT_XOR_EXPR:
3293 opname = "^"; break;
3294 default:
3295 gcc_unreachable ();
3296 }
3297 error_at (location,
3298 "invalid operands to binary %s (have %qT and %qT)", opname,
3299 type0, type1);
3300 }
3301 \f
3302 /* Subroutine of build_binary_op, used for comparison operations.
3303 See if the operands have both been converted from subword integer types
3304 and, if so, perhaps change them both back to their original type.
3305 This function is also responsible for converting the two operands
3306 to the proper common type for comparison.
3307
3308 The arguments of this function are all pointers to local variables
3309 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
3310 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
3311
3312 If this function returns nonzero, it means that the comparison has
3313 a constant value. What this function returns is an expression for
3314 that value. */
3315
3316 tree
3317 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
3318 enum tree_code *rescode_ptr)
3319 {
3320 tree type;
3321 tree op0 = *op0_ptr;
3322 tree op1 = *op1_ptr;
3323 int unsignedp0, unsignedp1;
3324 int real1, real2;
3325 tree primop0, primop1;
3326 enum tree_code code = *rescode_ptr;
3327
3328 /* Throw away any conversions to wider types
3329 already present in the operands. */
3330
3331 primop0 = get_narrower (op0, &unsignedp0);
3332 primop1 = get_narrower (op1, &unsignedp1);
3333
3334 /* Handle the case that OP0 does not *contain* a conversion
3335 but it *requires* conversion to FINAL_TYPE. */
3336
3337 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
3338 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3339 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
3340 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3341
3342 /* If one of the operands must be floated, we cannot optimize. */
3343 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
3344 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
3345
3346 /* If first arg is constant, swap the args (changing operation
3347 so value is preserved), for canonicalization. Don't do this if
3348 the second arg is 0. */
3349
3350 if (TREE_CONSTANT (primop0)
3351 && !integer_zerop (primop1) && !real_zerop (primop1)
3352 && !fixed_zerop (primop1))
3353 {
3354 tree tem = primop0;
3355 int temi = unsignedp0;
3356 primop0 = primop1;
3357 primop1 = tem;
3358 tem = op0;
3359 op0 = op1;
3360 op1 = tem;
3361 *op0_ptr = op0;
3362 *op1_ptr = op1;
3363 unsignedp0 = unsignedp1;
3364 unsignedp1 = temi;
3365 temi = real1;
3366 real1 = real2;
3367 real2 = temi;
3368
3369 switch (code)
3370 {
3371 case LT_EXPR:
3372 code = GT_EXPR;
3373 break;
3374 case GT_EXPR:
3375 code = LT_EXPR;
3376 break;
3377 case LE_EXPR:
3378 code = GE_EXPR;
3379 break;
3380 case GE_EXPR:
3381 code = LE_EXPR;
3382 break;
3383 default:
3384 break;
3385 }
3386 *rescode_ptr = code;
3387 }
3388
3389 /* If comparing an integer against a constant more bits wide,
3390 maybe we can deduce a value of 1 or 0 independent of the data.
3391 Or else truncate the constant now
3392 rather than extend the variable at run time.
3393
3394 This is only interesting if the constant is the wider arg.
3395 Also, it is not safe if the constant is unsigned and the
3396 variable arg is signed, since in this case the variable
3397 would be sign-extended and then regarded as unsigned.
3398 Our technique fails in this case because the lowest/highest
3399 possible unsigned results don't follow naturally from the
3400 lowest/highest possible values of the variable operand.
3401 For just EQ_EXPR and NE_EXPR there is another technique that
3402 could be used: see if the constant can be faithfully represented
3403 in the other operand's type, by truncating it and reextending it
3404 and see if that preserves the constant's value. */
3405
3406 if (!real1 && !real2
3407 && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
3408 && TREE_CODE (primop1) == INTEGER_CST
3409 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
3410 {
3411 int min_gt, max_gt, min_lt, max_lt;
3412 tree maxval, minval;
3413 /* 1 if comparison is nominally unsigned. */
3414 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
3415 tree val;
3416
3417 type = c_common_signed_or_unsigned_type (unsignedp0,
3418 TREE_TYPE (primop0));
3419
3420 maxval = TYPE_MAX_VALUE (type);
3421 minval = TYPE_MIN_VALUE (type);
3422
3423 if (unsignedp && !unsignedp0)
3424 *restype_ptr = c_common_signed_type (*restype_ptr);
3425
3426 if (TREE_TYPE (primop1) != *restype_ptr)
3427 {
3428 /* Convert primop1 to target type, but do not introduce
3429 additional overflow. We know primop1 is an int_cst. */
3430 primop1 = force_fit_type_double (*restype_ptr,
3431 TREE_INT_CST_LOW (primop1),
3432 TREE_INT_CST_HIGH (primop1), 0,
3433 TREE_OVERFLOW (primop1));
3434 }
3435 if (type != *restype_ptr)
3436 {
3437 minval = convert (*restype_ptr, minval);
3438 maxval = convert (*restype_ptr, maxval);
3439 }
3440
3441 if (unsignedp && unsignedp0)
3442 {
3443 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
3444 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
3445 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
3446 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
3447 }
3448 else
3449 {
3450 min_gt = INT_CST_LT (primop1, minval);
3451 max_gt = INT_CST_LT (primop1, maxval);
3452 min_lt = INT_CST_LT (minval, primop1);
3453 max_lt = INT_CST_LT (maxval, primop1);
3454 }
3455
3456 val = 0;
3457 /* This used to be a switch, but Genix compiler can't handle that. */
3458 if (code == NE_EXPR)
3459 {
3460 if (max_lt || min_gt)
3461 val = truthvalue_true_node;
3462 }
3463 else if (code == EQ_EXPR)
3464 {
3465 if (max_lt || min_gt)
3466 val = truthvalue_false_node;
3467 }
3468 else if (code == LT_EXPR)
3469 {
3470 if (max_lt)
3471 val = truthvalue_true_node;
3472 if (!min_lt)
3473 val = truthvalue_false_node;
3474 }
3475 else if (code == GT_EXPR)
3476 {
3477 if (min_gt)
3478 val = truthvalue_true_node;
3479 if (!max_gt)
3480 val = truthvalue_false_node;
3481 }
3482 else if (code == LE_EXPR)
3483 {
3484 if (!max_gt)
3485 val = truthvalue_true_node;
3486 if (min_gt)
3487 val = truthvalue_false_node;
3488 }
3489 else if (code == GE_EXPR)
3490 {
3491 if (!min_lt)
3492 val = truthvalue_true_node;
3493 if (max_lt)
3494 val = truthvalue_false_node;
3495 }
3496
3497 /* If primop0 was sign-extended and unsigned comparison specd,
3498 we did a signed comparison above using the signed type bounds.
3499 But the comparison we output must be unsigned.
3500
3501 Also, for inequalities, VAL is no good; but if the signed
3502 comparison had *any* fixed result, it follows that the
3503 unsigned comparison just tests the sign in reverse
3504 (positive values are LE, negative ones GE).
3505 So we can generate an unsigned comparison
3506 against an extreme value of the signed type. */
3507
3508 if (unsignedp && !unsignedp0)
3509 {
3510 if (val != 0)
3511 switch (code)
3512 {
3513 case LT_EXPR:
3514 case GE_EXPR:
3515 primop1 = TYPE_MIN_VALUE (type);
3516 val = 0;
3517 break;
3518
3519 case LE_EXPR:
3520 case GT_EXPR:
3521 primop1 = TYPE_MAX_VALUE (type);
3522 val = 0;
3523 break;
3524
3525 default:
3526 break;
3527 }
3528 type = c_common_unsigned_type (type);
3529 }
3530
3531 if (TREE_CODE (primop0) != INTEGER_CST)
3532 {
3533 if (val == truthvalue_false_node)
3534 warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
3535 if (val == truthvalue_true_node)
3536 warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
3537 }
3538
3539 if (val != 0)
3540 {
3541 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3542 if (TREE_SIDE_EFFECTS (primop0))
3543 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
3544 return val;
3545 }
3546
3547 /* Value is not predetermined, but do the comparison
3548 in the type of the operand that is not constant.
3549 TYPE is already properly set. */
3550 }
3551
3552 /* If either arg is decimal float and the other is float, find the
3553 proper common type to use for comparison. */
3554 else if (real1 && real2
3555 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
3556 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
3557 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3558
3559 else if (real1 && real2
3560 && (TYPE_PRECISION (TREE_TYPE (primop0))
3561 == TYPE_PRECISION (TREE_TYPE (primop1))))
3562 type = TREE_TYPE (primop0);
3563
3564 /* If args' natural types are both narrower than nominal type
3565 and both extend in the same manner, compare them
3566 in the type of the wider arg.
3567 Otherwise must actually extend both to the nominal
3568 common type lest different ways of extending
3569 alter the result.
3570 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
3571
3572 else if (unsignedp0 == unsignedp1 && real1 == real2
3573 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
3574 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
3575 {
3576 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3577 type = c_common_signed_or_unsigned_type (unsignedp0
3578 || TYPE_UNSIGNED (*restype_ptr),
3579 type);
3580 /* Make sure shorter operand is extended the right way
3581 to match the longer operand. */
3582 primop0
3583 = convert (c_common_signed_or_unsigned_type (unsignedp0,
3584 TREE_TYPE (primop0)),
3585 primop0);
3586 primop1
3587 = convert (c_common_signed_or_unsigned_type (unsignedp1,
3588 TREE_TYPE (primop1)),
3589 primop1);
3590 }
3591 else
3592 {
3593 /* Here we must do the comparison on the nominal type
3594 using the args exactly as we received them. */
3595 type = *restype_ptr;
3596 primop0 = op0;
3597 primop1 = op1;
3598
3599 if (!real1 && !real2 && integer_zerop (primop1)
3600 && TYPE_UNSIGNED (*restype_ptr))
3601 {
3602 tree value = 0;
3603 switch (code)
3604 {
3605 case GE_EXPR:
3606 /* All unsigned values are >= 0, so we warn. However,
3607 if OP0 is a constant that is >= 0, the signedness of
3608 the comparison isn't an issue, so suppress the
3609 warning. */
3610 if (warn_type_limits && !in_system_header
3611 && !(TREE_CODE (primop0) == INTEGER_CST
3612 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3613 primop0))))
3614 warning (OPT_Wtype_limits,
3615 "comparison of unsigned expression >= 0 is always true");
3616 value = truthvalue_true_node;
3617 break;
3618
3619 case LT_EXPR:
3620 if (warn_type_limits && !in_system_header
3621 && !(TREE_CODE (primop0) == INTEGER_CST
3622 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3623 primop0))))
3624 warning (OPT_Wtype_limits,
3625 "comparison of unsigned expression < 0 is always false");
3626 value = truthvalue_false_node;
3627 break;
3628
3629 default:
3630 break;
3631 }
3632
3633 if (value != 0)
3634 {
3635 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3636 if (TREE_SIDE_EFFECTS (primop0))
3637 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
3638 primop0, value);
3639 return value;
3640 }
3641 }
3642 }
3643
3644 *op0_ptr = convert (type, primop0);
3645 *op1_ptr = convert (type, primop1);
3646
3647 *restype_ptr = truthvalue_type_node;
3648
3649 return 0;
3650 }
3651 \f
3652 /* Return a tree for the sum or difference (RESULTCODE says which)
3653 of pointer PTROP and integer INTOP. */
3654
3655 tree
3656 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
3657 {
3658 tree size_exp, ret;
3659
3660 /* The result is a pointer of the same type that is being added. */
3661 tree result_type = TREE_TYPE (ptrop);
3662
3663 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
3664 {
3665 pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3666 "pointer of type %<void *%> used in arithmetic");
3667 size_exp = integer_one_node;
3668 }
3669 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
3670 {
3671 pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3672 "pointer to a function used in arithmetic");
3673 size_exp = integer_one_node;
3674 }
3675 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
3676 {
3677 pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3678 "pointer to member function used in arithmetic");
3679 size_exp = integer_one_node;
3680 }
3681 else
3682 size_exp = size_in_bytes (TREE_TYPE (result_type));
3683
3684 /* We are manipulating pointer values, so we don't need to warn
3685 about relying on undefined signed overflow. We disable the
3686 warning here because we use integer types so fold won't know that
3687 they are really pointers. */
3688 fold_defer_overflow_warnings ();
3689
3690 /* If what we are about to multiply by the size of the elements
3691 contains a constant term, apply distributive law
3692 and multiply that constant term separately.
3693 This helps produce common subexpressions. */
3694 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3695 && !TREE_CONSTANT (intop)
3696 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
3697 && TREE_CONSTANT (size_exp)
3698 /* If the constant comes from pointer subtraction,
3699 skip this optimization--it would cause an error. */
3700 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
3701 /* If the constant is unsigned, and smaller than the pointer size,
3702 then we must skip this optimization. This is because it could cause
3703 an overflow error if the constant is negative but INTOP is not. */
3704 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
3705 || (TYPE_PRECISION (TREE_TYPE (intop))
3706 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
3707 {
3708 enum tree_code subcode = resultcode;
3709 tree int_type = TREE_TYPE (intop);
3710 if (TREE_CODE (intop) == MINUS_EXPR)
3711 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
3712 /* Convert both subexpression types to the type of intop,
3713 because weird cases involving pointer arithmetic
3714 can result in a sum or difference with different type args. */
3715 ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
3716 subcode, ptrop,
3717 convert (int_type, TREE_OPERAND (intop, 1)), 1);
3718 intop = convert (int_type, TREE_OPERAND (intop, 0));
3719 }
3720
3721 /* Convert the integer argument to a type the same size as sizetype
3722 so the multiply won't overflow spuriously. */
3723 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
3724 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
3725 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
3726 TYPE_UNSIGNED (sizetype)), intop);
3727
3728 /* Replace the integer argument with a suitable product by the object size.
3729 Do this multiplication as signed, then convert to the appropriate
3730 type for the pointer operation. */
3731 intop = convert (sizetype,
3732 build_binary_op (EXPR_LOCATION (intop),
3733 MULT_EXPR, intop,
3734 convert (TREE_TYPE (intop), size_exp), 1));
3735
3736 /* Create the sum or difference. */
3737 if (resultcode == MINUS_EXPR)
3738 intop = fold_build1 (NEGATE_EXPR, sizetype, intop);
3739
3740 ret = fold_build2 (POINTER_PLUS_EXPR, result_type, ptrop, intop);
3741
3742 fold_undefer_and_ignore_overflow_warnings ();
3743
3744 return ret;
3745 }
3746 \f
3747 /* Wrap a SAVE_EXPR around EXPR, if appropriate. Like save_expr, but
3748 for C folds the inside expression and wraps a C_MAYBE_CONST_EXPR
3749 around the SAVE_EXPR if needed so that c_fully_fold does not need
3750 to look inside SAVE_EXPRs. */
3751
3752 tree
3753 c_save_expr (tree expr)
3754 {
3755 bool maybe_const = true;
3756 if (c_dialect_cxx ())
3757 return save_expr (expr);
3758 expr = c_fully_fold (expr, false, &maybe_const);
3759 expr = save_expr (expr);
3760 if (!maybe_const)
3761 {
3762 expr = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL, expr);
3763 C_MAYBE_CONST_EXPR_NON_CONST (expr) = 1;
3764 }
3765 return expr;
3766 }
3767
3768 /* Return whether EXPR is a declaration whose address can never be
3769 NULL. */
3770
3771 bool
3772 decl_with_nonnull_addr_p (const_tree expr)
3773 {
3774 return (DECL_P (expr)
3775 && (TREE_CODE (expr) == PARM_DECL
3776 || TREE_CODE (expr) == LABEL_DECL
3777 || !DECL_WEAK (expr)));
3778 }
3779
3780 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3781 or for an `if' or `while' statement or ?..: exp. It should already
3782 have been validated to be of suitable type; otherwise, a bad
3783 diagnostic may result.
3784
3785 The EXPR is located at LOCATION.
3786
3787 This preparation consists of taking the ordinary
3788 representation of an expression expr and producing a valid tree
3789 boolean expression describing whether expr is nonzero. We could
3790 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
3791 but we optimize comparisons, &&, ||, and !.
3792
3793 The resulting type should always be `truthvalue_type_node'. */
3794
3795 tree
3796 c_common_truthvalue_conversion (location_t location, tree expr)
3797 {
3798 switch (TREE_CODE (expr))
3799 {
3800 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
3801 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
3802 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
3803 case ORDERED_EXPR: case UNORDERED_EXPR:
3804 if (TREE_TYPE (expr) == truthvalue_type_node)
3805 return expr;
3806 expr = build2 (TREE_CODE (expr), truthvalue_type_node,
3807 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
3808 goto ret;
3809
3810 case TRUTH_ANDIF_EXPR:
3811 case TRUTH_ORIF_EXPR:
3812 case TRUTH_AND_EXPR:
3813 case TRUTH_OR_EXPR:
3814 case TRUTH_XOR_EXPR:
3815 if (TREE_TYPE (expr) == truthvalue_type_node)
3816 return expr;
3817 expr = build2 (TREE_CODE (expr), truthvalue_type_node,
3818 c_common_truthvalue_conversion (location,
3819 TREE_OPERAND (expr, 0)),
3820 c_common_truthvalue_conversion (location,
3821 TREE_OPERAND (expr, 1)));
3822 goto ret;
3823
3824 case TRUTH_NOT_EXPR:
3825 if (TREE_TYPE (expr) == truthvalue_type_node)
3826 return expr;
3827 expr = build1 (TREE_CODE (expr), truthvalue_type_node,
3828 c_common_truthvalue_conversion (location,
3829 TREE_OPERAND (expr, 0)));
3830 goto ret;
3831
3832 case ERROR_MARK:
3833 return expr;
3834
3835 case INTEGER_CST:
3836 return integer_zerop (expr) ? truthvalue_false_node
3837 : truthvalue_true_node;
3838
3839 case REAL_CST:
3840 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
3841 ? truthvalue_true_node
3842 : truthvalue_false_node;
3843
3844 case FIXED_CST:
3845 return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
3846 &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
3847 ? truthvalue_true_node
3848 : truthvalue_false_node;
3849
3850 case FUNCTION_DECL:
3851 expr = build_unary_op (location, ADDR_EXPR, expr, 0);
3852 /* Fall through. */
3853
3854 case ADDR_EXPR:
3855 {
3856 tree inner = TREE_OPERAND (expr, 0);
3857 if (decl_with_nonnull_addr_p (inner))
3858 {
3859 /* Common Ada/Pascal programmer's mistake. */
3860 warning_at (location,
3861 OPT_Waddress,
3862 "the address of %qD will always evaluate as %<true%>",
3863 inner);
3864 return truthvalue_true_node;
3865 }
3866
3867 /* If we still have a decl, it is possible for its address to
3868 be NULL, so we cannot optimize. */
3869 if (DECL_P (inner))
3870 {
3871 gcc_assert (DECL_WEAK (inner));
3872 break;
3873 }
3874
3875 if (TREE_SIDE_EFFECTS (inner))
3876 {
3877 expr = build2 (COMPOUND_EXPR, truthvalue_type_node,
3878 inner, truthvalue_true_node);
3879 goto ret;
3880 }
3881 else
3882 return truthvalue_true_node;
3883 }
3884
3885 case COMPLEX_EXPR:
3886 expr = build_binary_op (EXPR_LOCATION (expr),
3887 (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3888 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3889 c_common_truthvalue_conversion (location,
3890 TREE_OPERAND (expr, 0)),
3891 c_common_truthvalue_conversion (location,
3892 TREE_OPERAND (expr, 1)),
3893 0);
3894 goto ret;
3895
3896 case NEGATE_EXPR:
3897 case ABS_EXPR:
3898 case FLOAT_EXPR:
3899 case EXCESS_PRECISION_EXPR:
3900 /* These don't change whether an object is nonzero or zero. */
3901 return c_common_truthvalue_conversion (location, TREE_OPERAND (expr, 0));
3902
3903 case LROTATE_EXPR:
3904 case RROTATE_EXPR:
3905 /* These don't change whether an object is zero or nonzero, but
3906 we can't ignore them if their second arg has side-effects. */
3907 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3908 {
3909 expr = build2 (COMPOUND_EXPR, truthvalue_type_node,
3910 TREE_OPERAND (expr, 1),
3911 c_common_truthvalue_conversion
3912 (location, TREE_OPERAND (expr, 0)));
3913 goto ret;
3914 }
3915 else
3916 return c_common_truthvalue_conversion (location,
3917 TREE_OPERAND (expr, 0));
3918
3919 case COND_EXPR:
3920 /* Distribute the conversion into the arms of a COND_EXPR. */
3921 if (c_dialect_cxx ())
3922 {
3923 expr = fold_build3 (COND_EXPR, truthvalue_type_node,
3924 TREE_OPERAND (expr, 0),
3925 c_common_truthvalue_conversion (location,
3926 TREE_OPERAND (expr,
3927 1)),
3928 c_common_truthvalue_conversion (location,
3929 TREE_OPERAND (expr,
3930 2)));
3931 goto ret;
3932 }
3933 else
3934 {
3935 /* Folding will happen later for C. */
3936 expr = build3 (COND_EXPR, truthvalue_type_node,
3937 TREE_OPERAND (expr, 0),
3938 c_common_truthvalue_conversion (location,
3939 TREE_OPERAND (expr, 1)),
3940 c_common_truthvalue_conversion (location,
3941 TREE_OPERAND (expr, 2)));
3942 goto ret;
3943 }
3944
3945 CASE_CONVERT:
3946 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3947 since that affects how `default_conversion' will behave. */
3948 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3949 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3950 break;
3951 /* If this is widening the argument, we can ignore it. */
3952 if (TYPE_PRECISION (TREE_TYPE (expr))
3953 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
3954 return c_common_truthvalue_conversion (location,
3955 TREE_OPERAND (expr, 0));
3956 break;
3957
3958 case MODIFY_EXPR:
3959 if (!TREE_NO_WARNING (expr)
3960 && warn_parentheses)
3961 {
3962 warning (OPT_Wparentheses,
3963 "suggest parentheses around assignment used as truth value");
3964 TREE_NO_WARNING (expr) = 1;
3965 }
3966 break;
3967
3968 default:
3969 break;
3970 }
3971
3972 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
3973 {
3974 tree t = c_save_expr (expr);
3975 expr = (build_binary_op
3976 (EXPR_LOCATION (expr),
3977 (TREE_SIDE_EFFECTS (expr)
3978 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3979 c_common_truthvalue_conversion
3980 (location,
3981 build_unary_op (location, REALPART_EXPR, t, 0)),
3982 c_common_truthvalue_conversion
3983 (location,
3984 build_unary_op (location, IMAGPART_EXPR, t, 0)),
3985 0));
3986 goto ret;
3987 }
3988
3989 if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
3990 {
3991 tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
3992 FCONST0 (TYPE_MODE
3993 (TREE_TYPE (expr))));
3994 return build_binary_op (location, NE_EXPR, expr, fixed_zero_node, 1);
3995 }
3996 else
3997 return build_binary_op (location, NE_EXPR, expr, integer_zero_node, 1);
3998
3999 ret:
4000 protected_set_expr_location (expr, location);
4001 return expr;
4002 }
4003 \f
4004 static void def_builtin_1 (enum built_in_function fncode,
4005 const char *name,
4006 enum built_in_class fnclass,
4007 tree fntype, tree libtype,
4008 bool both_p, bool fallback_p, bool nonansi_p,
4009 tree fnattrs, bool implicit_p);
4010
4011
4012 /* Apply the TYPE_QUALS to the new DECL. */
4013
4014 void
4015 c_apply_type_quals_to_decl (int type_quals, tree decl)
4016 {
4017 tree type = TREE_TYPE (decl);
4018
4019 if (type == error_mark_node)
4020 return;
4021
4022 if (((type_quals & TYPE_QUAL_CONST)
4023 || (type && TREE_CODE (type) == REFERENCE_TYPE))
4024 /* An object declared 'const' is only readonly after it is
4025 initialized. We don't have any way of expressing this currently,
4026 so we need to be conservative and unset TREE_READONLY for types
4027 with constructors. Otherwise aliasing code will ignore stores in
4028 an inline constructor. */
4029 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
4030 TREE_READONLY (decl) = 1;
4031 if (type_quals & TYPE_QUAL_VOLATILE)
4032 {
4033 TREE_SIDE_EFFECTS (decl) = 1;
4034 TREE_THIS_VOLATILE (decl) = 1;
4035 }
4036 if (type_quals & TYPE_QUAL_RESTRICT)
4037 {
4038 while (type && TREE_CODE (type) == ARRAY_TYPE)
4039 /* Allow 'restrict' on arrays of pointers.
4040 FIXME currently we just ignore it. */
4041 type = TREE_TYPE (type);
4042 if (!type
4043 || !POINTER_TYPE_P (type)
4044 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
4045 error ("invalid use of %<restrict%>");
4046 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
4047 /* Indicate we need to make a unique alias set for this pointer.
4048 We can't do it here because it might be pointing to an
4049 incomplete type. */
4050 DECL_POINTER_ALIAS_SET (decl) = -2;
4051 }
4052 }
4053
4054 /* Hash function for the problem of multiple type definitions in
4055 different files. This must hash all types that will compare
4056 equal via comptypes to the same value. In practice it hashes
4057 on some of the simple stuff and leaves the details to comptypes. */
4058
4059 static hashval_t
4060 c_type_hash (const void *p)
4061 {
4062 int i = 0;
4063 int shift, size;
4064 const_tree const t = (const_tree) p;
4065 tree t2;
4066 switch (TREE_CODE (t))
4067 {
4068 /* For pointers, hash on pointee type plus some swizzling. */
4069 case POINTER_TYPE:
4070 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
4071 /* Hash on number of elements and total size. */
4072 case ENUMERAL_TYPE:
4073 shift = 3;
4074 t2 = TYPE_VALUES (t);
4075 break;
4076 case RECORD_TYPE:
4077 shift = 0;
4078 t2 = TYPE_FIELDS (t);
4079 break;
4080 case QUAL_UNION_TYPE:
4081 shift = 1;
4082 t2 = TYPE_FIELDS (t);
4083 break;
4084 case UNION_TYPE:
4085 shift = 2;
4086 t2 = TYPE_FIELDS (t);
4087 break;
4088 default:
4089 gcc_unreachable ();
4090 }
4091 for (; t2; t2 = TREE_CHAIN (t2))
4092 i++;
4093 /* We might have a VLA here. */
4094 if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
4095 size = 0;
4096 else
4097 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
4098 return ((size << 24) | (i << shift));
4099 }
4100
4101 static GTY((param_is (union tree_node))) htab_t type_hash_table;
4102
4103 /* Return the typed-based alias set for T, which may be an expression
4104 or a type. Return -1 if we don't do anything special. */
4105
4106 alias_set_type
4107 c_common_get_alias_set (tree t)
4108 {
4109 tree u;
4110 PTR *slot;
4111
4112 /* Permit type-punning when accessing a union, provided the access
4113 is directly through the union. For example, this code does not
4114 permit taking the address of a union member and then storing
4115 through it. Even the type-punning allowed here is a GCC
4116 extension, albeit a common and useful one; the C standard says
4117 that such accesses have implementation-defined behavior. */
4118 for (u = t;
4119 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4120 u = TREE_OPERAND (u, 0))
4121 if (TREE_CODE (u) == COMPONENT_REF
4122 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4123 return 0;
4124
4125 /* That's all the expressions we handle specially. */
4126 if (!TYPE_P (t))
4127 return -1;
4128
4129 /* The C standard guarantees that any object may be accessed via an
4130 lvalue that has character type. */
4131 if (t == char_type_node
4132 || t == signed_char_type_node
4133 || t == unsigned_char_type_node)
4134 return 0;
4135
4136 /* The C standard specifically allows aliasing between signed and
4137 unsigned variants of the same type. We treat the signed
4138 variant as canonical. */
4139 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
4140 {
4141 tree t1 = c_common_signed_type (t);
4142
4143 /* t1 == t can happen for boolean nodes which are always unsigned. */
4144 if (t1 != t)
4145 return get_alias_set (t1);
4146 }
4147 else if (POINTER_TYPE_P (t))
4148 {
4149 tree t1;
4150
4151 /* Unfortunately, there is no canonical form of a pointer type.
4152 In particular, if we have `typedef int I', then `int *', and
4153 `I *' are different types. So, we have to pick a canonical
4154 representative. We do this below.
4155
4156 Technically, this approach is actually more conservative that
4157 it needs to be. In particular, `const int *' and `int *'
4158 should be in different alias sets, according to the C and C++
4159 standard, since their types are not the same, and so,
4160 technically, an `int **' and `const int **' cannot point at
4161 the same thing.
4162
4163 But, the standard is wrong. In particular, this code is
4164 legal C++:
4165
4166 int *ip;
4167 int **ipp = &ip;
4168 const int* const* cipp = ipp;
4169
4170 And, it doesn't make sense for that to be legal unless you
4171 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
4172 the pointed-to types. This issue has been reported to the
4173 C++ committee. */
4174 t1 = build_type_no_quals (t);
4175 if (t1 != t)
4176 return get_alias_set (t1);
4177 }
4178
4179 /* Handle the case of multiple type nodes referring to "the same" type,
4180 which occurs with IMA. These share an alias set. FIXME: Currently only
4181 C90 is handled. (In C99 type compatibility is not transitive, which
4182 complicates things mightily. The alias set splay trees can theoretically
4183 represent this, but insertion is tricky when you consider all the
4184 different orders things might arrive in.) */
4185
4186 if (c_language != clk_c || flag_isoc99)
4187 return -1;
4188
4189 /* Save time if there's only one input file. */
4190 if (num_in_fnames == 1)
4191 return -1;
4192
4193 /* Pointers need special handling if they point to any type that
4194 needs special handling (below). */
4195 if (TREE_CODE (t) == POINTER_TYPE)
4196 {
4197 tree t2;
4198 /* Find bottom type under any nested POINTERs. */
4199 for (t2 = TREE_TYPE (t);
4200 TREE_CODE (t2) == POINTER_TYPE;
4201 t2 = TREE_TYPE (t2))
4202 ;
4203 if (TREE_CODE (t2) != RECORD_TYPE
4204 && TREE_CODE (t2) != ENUMERAL_TYPE
4205 && TREE_CODE (t2) != QUAL_UNION_TYPE
4206 && TREE_CODE (t2) != UNION_TYPE)
4207 return -1;
4208 if (TYPE_SIZE (t2) == 0)
4209 return -1;
4210 }
4211 /* These are the only cases that need special handling. */
4212 if (TREE_CODE (t) != RECORD_TYPE
4213 && TREE_CODE (t) != ENUMERAL_TYPE
4214 && TREE_CODE (t) != QUAL_UNION_TYPE
4215 && TREE_CODE (t) != UNION_TYPE
4216 && TREE_CODE (t) != POINTER_TYPE)
4217 return -1;
4218 /* Undefined? */
4219 if (TYPE_SIZE (t) == 0)
4220 return -1;
4221
4222 /* Look up t in hash table. Only one of the compatible types within each
4223 alias set is recorded in the table. */
4224 if (!type_hash_table)
4225 type_hash_table = htab_create_ggc (1021, c_type_hash,
4226 (htab_eq) lang_hooks.types_compatible_p,
4227 NULL);
4228 slot = htab_find_slot (type_hash_table, t, INSERT);
4229 if (*slot != NULL)
4230 {
4231 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
4232 return TYPE_ALIAS_SET ((tree)*slot);
4233 }
4234 else
4235 /* Our caller will assign and record (in t) a new alias set; all we need
4236 to do is remember t in the hash table. */
4237 *slot = t;
4238
4239 return -1;
4240 }
4241 \f
4242 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where
4243 the second parameter indicates which OPERATOR is being applied.
4244 The COMPLAIN flag controls whether we should diagnose possibly
4245 ill-formed constructs or not. LOC is the location of the SIZEOF or
4246 TYPEOF operator. */
4247
4248 tree
4249 c_sizeof_or_alignof_type (location_t loc,
4250 tree type, bool is_sizeof, int complain)
4251 {
4252 const char *op_name;
4253 tree value = NULL;
4254 enum tree_code type_code = TREE_CODE (type);
4255
4256 op_name = is_sizeof ? "sizeof" : "__alignof__";
4257
4258 if (type_code == FUNCTION_TYPE)
4259 {
4260 if (is_sizeof)
4261 {
4262 if (complain && (pedantic || warn_pointer_arith))
4263 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4264 "invalid application of %<sizeof%> to a function type");
4265 else if (!complain)
4266 return error_mark_node;
4267 value = size_one_node;
4268 }
4269 else
4270 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
4271 }
4272 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
4273 {
4274 if (type_code == VOID_TYPE
4275 && complain && (pedantic || warn_pointer_arith))
4276 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4277 "invalid application of %qs to a void type", op_name);
4278 else if (!complain)
4279 return error_mark_node;
4280 value = size_one_node;
4281 }
4282 else if (!COMPLETE_TYPE_P (type))
4283 {
4284 if (complain)
4285 error_at (loc, "invalid application of %qs to incomplete type %qT ",
4286 op_name, type);
4287 value = size_zero_node;
4288 }
4289 else
4290 {
4291 if (is_sizeof)
4292 /* Convert in case a char is more than one unit. */
4293 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
4294 size_int (TYPE_PRECISION (char_type_node)
4295 / BITS_PER_UNIT));
4296 else
4297 value = size_int (TYPE_ALIGN_UNIT (type));
4298 }
4299
4300 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
4301 TYPE_IS_SIZETYPE means that certain things (like overflow) will
4302 never happen. However, this node should really have type
4303 `size_t', which is just a typedef for an ordinary integer type. */
4304 value = fold_convert (size_type_node, value);
4305 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
4306
4307 return value;
4308 }
4309
4310 /* Implement the __alignof keyword: Return the minimum required
4311 alignment of EXPR, measured in bytes. For VAR_DECLs,
4312 FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
4313 from an "aligned" __attribute__ specification). LOC is the
4314 location of the ALIGNOF operator. */
4315
4316 tree
4317 c_alignof_expr (location_t loc, tree expr)
4318 {
4319 tree t;
4320
4321 if (VAR_OR_FUNCTION_DECL_P (expr))
4322 t = size_int (DECL_ALIGN_UNIT (expr));
4323
4324 else if (TREE_CODE (expr) == COMPONENT_REF
4325 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
4326 {
4327 error_at (loc, "%<__alignof%> applied to a bit-field");
4328 t = size_one_node;
4329 }
4330 else if (TREE_CODE (expr) == COMPONENT_REF
4331 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
4332 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
4333
4334 else if (TREE_CODE (expr) == INDIRECT_REF)
4335 {
4336 tree t = TREE_OPERAND (expr, 0);
4337 tree best = t;
4338 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4339
4340 while (CONVERT_EXPR_P (t)
4341 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
4342 {
4343 int thisalign;
4344
4345 t = TREE_OPERAND (t, 0);
4346 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4347 if (thisalign > bestalign)
4348 best = t, bestalign = thisalign;
4349 }
4350 return c_alignof (loc, TREE_TYPE (TREE_TYPE (best)));
4351 }
4352 else
4353 return c_alignof (loc, TREE_TYPE (expr));
4354
4355 return fold_convert (size_type_node, t);
4356 }
4357 \f
4358 /* Handle C and C++ default attributes. */
4359
4360 enum built_in_attribute
4361 {
4362 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4363 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4364 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4365 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4366 #include "builtin-attrs.def"
4367 #undef DEF_ATTR_NULL_TREE
4368 #undef DEF_ATTR_INT
4369 #undef DEF_ATTR_IDENT
4370 #undef DEF_ATTR_TREE_LIST
4371 ATTR_LAST
4372 };
4373
4374 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
4375
4376 static void c_init_attributes (void);
4377
4378 enum c_builtin_type
4379 {
4380 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
4381 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
4382 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
4383 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
4384 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4385 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4386 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
4387 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
4388 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
4389 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
4390 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
4391 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
4392 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4393 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4394 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
4395 NAME,
4396 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
4397 #include "builtin-types.def"
4398 #undef DEF_PRIMITIVE_TYPE
4399 #undef DEF_FUNCTION_TYPE_0
4400 #undef DEF_FUNCTION_TYPE_1
4401 #undef DEF_FUNCTION_TYPE_2
4402 #undef DEF_FUNCTION_TYPE_3
4403 #undef DEF_FUNCTION_TYPE_4
4404 #undef DEF_FUNCTION_TYPE_5
4405 #undef DEF_FUNCTION_TYPE_6
4406 #undef DEF_FUNCTION_TYPE_7
4407 #undef DEF_FUNCTION_TYPE_VAR_0
4408 #undef DEF_FUNCTION_TYPE_VAR_1
4409 #undef DEF_FUNCTION_TYPE_VAR_2
4410 #undef DEF_FUNCTION_TYPE_VAR_3
4411 #undef DEF_FUNCTION_TYPE_VAR_4
4412 #undef DEF_FUNCTION_TYPE_VAR_5
4413 #undef DEF_POINTER_TYPE
4414 BT_LAST
4415 };
4416
4417 typedef enum c_builtin_type builtin_type;
4418
4419 /* A temporary array for c_common_nodes_and_builtins. Used in
4420 communication with def_fn_type. */
4421 static tree builtin_types[(int) BT_LAST + 1];
4422
4423 /* A helper function for c_common_nodes_and_builtins. Build function type
4424 for DEF with return type RET and N arguments. If VAR is true, then the
4425 function should be variadic after those N arguments.
4426
4427 Takes special care not to ICE if any of the types involved are
4428 error_mark_node, which indicates that said type is not in fact available
4429 (see builtin_type_for_size). In which case the function type as a whole
4430 should be error_mark_node. */
4431
4432 static void
4433 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
4434 {
4435 tree args = NULL, t;
4436 va_list list;
4437 int i;
4438
4439 va_start (list, n);
4440 for (i = 0; i < n; ++i)
4441 {
4442 builtin_type a = (builtin_type) va_arg (list, int);
4443 t = builtin_types[a];
4444 if (t == error_mark_node)
4445 goto egress;
4446 args = tree_cons (NULL_TREE, t, args);
4447 }
4448 va_end (list);
4449
4450 args = nreverse (args);
4451 if (!var)
4452 args = chainon (args, void_list_node);
4453
4454 t = builtin_types[ret];
4455 if (t == error_mark_node)
4456 goto egress;
4457 t = build_function_type (t, args);
4458
4459 egress:
4460 builtin_types[def] = t;
4461 }
4462
4463 /* Build builtin functions common to both C and C++ language
4464 frontends. */
4465
4466 static void
4467 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
4468 {
4469 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
4470 builtin_types[ENUM] = VALUE;
4471 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
4472 def_fn_type (ENUM, RETURN, 0, 0);
4473 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
4474 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
4475 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
4476 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
4477 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4478 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
4479 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4480 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
4481 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4482 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4483 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4484 ARG6) \
4485 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
4486 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4487 ARG6, ARG7) \
4488 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
4489 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
4490 def_fn_type (ENUM, RETURN, 1, 0);
4491 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
4492 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
4493 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
4494 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
4495 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4496 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
4497 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4498 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
4499 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4500 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4501 #define DEF_POINTER_TYPE(ENUM, TYPE) \
4502 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
4503
4504 #include "builtin-types.def"
4505
4506 #undef DEF_PRIMITIVE_TYPE
4507 #undef DEF_FUNCTION_TYPE_1
4508 #undef DEF_FUNCTION_TYPE_2
4509 #undef DEF_FUNCTION_TYPE_3
4510 #undef DEF_FUNCTION_TYPE_4
4511 #undef DEF_FUNCTION_TYPE_5
4512 #undef DEF_FUNCTION_TYPE_6
4513 #undef DEF_FUNCTION_TYPE_VAR_0
4514 #undef DEF_FUNCTION_TYPE_VAR_1
4515 #undef DEF_FUNCTION_TYPE_VAR_2
4516 #undef DEF_FUNCTION_TYPE_VAR_3
4517 #undef DEF_FUNCTION_TYPE_VAR_4
4518 #undef DEF_FUNCTION_TYPE_VAR_5
4519 #undef DEF_POINTER_TYPE
4520 builtin_types[(int) BT_LAST] = NULL_TREE;
4521
4522 c_init_attributes ();
4523
4524 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
4525 NONANSI_P, ATTRS, IMPLICIT, COND) \
4526 if (NAME && COND) \
4527 def_builtin_1 (ENUM, NAME, CLASS, \
4528 builtin_types[(int) TYPE], \
4529 builtin_types[(int) LIBTYPE], \
4530 BOTH_P, FALLBACK_P, NONANSI_P, \
4531 built_in_attributes[(int) ATTRS], IMPLICIT);
4532 #include "builtins.def"
4533 #undef DEF_BUILTIN
4534
4535 targetm.init_builtins ();
4536
4537 build_common_builtin_nodes ();
4538
4539 if (flag_mudflap)
4540 mudflap_init ();
4541 }
4542
4543 /* Like get_identifier, but avoid warnings about null arguments when
4544 the argument may be NULL for targets where GCC lacks stdint.h type
4545 information. */
4546
4547 static inline tree
4548 c_get_ident (const char *id)
4549 {
4550 return get_identifier (id);
4551 }
4552
4553 /* Build tree nodes and builtin functions common to both C and C++ language
4554 frontends. */
4555
4556 void
4557 c_common_nodes_and_builtins (void)
4558 {
4559 int char16_type_size;
4560 int char32_type_size;
4561 int wchar_type_size;
4562 tree array_domain_type;
4563 tree va_list_ref_type_node;
4564 tree va_list_arg_type_node;
4565
4566 /* Define `int' and `char' first so that dbx will output them first. */
4567 record_builtin_type (RID_INT, NULL, integer_type_node);
4568 record_builtin_type (RID_CHAR, "char", char_type_node);
4569
4570 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
4571 "unsigned long", "long long unsigned" and "unsigned short" were in C++
4572 but not C. Are the conditionals here needed? */
4573 if (c_dialect_cxx ())
4574 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
4575 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4576 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4577 record_builtin_type (RID_MAX, "long unsigned int",
4578 long_unsigned_type_node);
4579 if (c_dialect_cxx ())
4580 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4581 record_builtin_type (RID_MAX, "long long int",
4582 long_long_integer_type_node);
4583 record_builtin_type (RID_MAX, "long long unsigned int",
4584 long_long_unsigned_type_node);
4585 if (c_dialect_cxx ())
4586 record_builtin_type (RID_MAX, "long long unsigned",
4587 long_long_unsigned_type_node);
4588 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4589 record_builtin_type (RID_MAX, "short unsigned int",
4590 short_unsigned_type_node);
4591 if (c_dialect_cxx ())
4592 record_builtin_type (RID_MAX, "unsigned short",
4593 short_unsigned_type_node);
4594
4595 /* Define both `signed char' and `unsigned char'. */
4596 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
4597 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
4598
4599 /* These are types that c_common_type_for_size and
4600 c_common_type_for_mode use. */
4601 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4602 TYPE_DECL, NULL_TREE,
4603 intQI_type_node));
4604 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4605 TYPE_DECL, NULL_TREE,
4606 intHI_type_node));
4607 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4608 TYPE_DECL, NULL_TREE,
4609 intSI_type_node));
4610 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4611 TYPE_DECL, NULL_TREE,
4612 intDI_type_node));
4613 #if HOST_BITS_PER_WIDE_INT >= 64
4614 if (targetm.scalar_mode_supported_p (TImode))
4615 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4616 TYPE_DECL,
4617 get_identifier ("__int128_t"),
4618 intTI_type_node));
4619 #endif
4620 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4621 TYPE_DECL, NULL_TREE,
4622 unsigned_intQI_type_node));
4623 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4624 TYPE_DECL, NULL_TREE,
4625 unsigned_intHI_type_node));
4626 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4627 TYPE_DECL, NULL_TREE,
4628 unsigned_intSI_type_node));
4629 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4630 TYPE_DECL, NULL_TREE,
4631 unsigned_intDI_type_node));
4632 #if HOST_BITS_PER_WIDE_INT >= 64
4633 if (targetm.scalar_mode_supported_p (TImode))
4634 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4635 TYPE_DECL,
4636 get_identifier ("__uint128_t"),
4637 unsigned_intTI_type_node));
4638 #endif
4639
4640 /* Create the widest literal types. */
4641 widest_integer_literal_type_node
4642 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
4643 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4644 TYPE_DECL, NULL_TREE,
4645 widest_integer_literal_type_node));
4646
4647 widest_unsigned_literal_type_node
4648 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
4649 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4650 TYPE_DECL, NULL_TREE,
4651 widest_unsigned_literal_type_node));
4652
4653 /* `unsigned long' is the standard type for sizeof.
4654 Note that stddef.h uses `unsigned long',
4655 and this must agree, even if long and int are the same size. */
4656 size_type_node =
4657 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
4658 signed_size_type_node = c_common_signed_type (size_type_node);
4659 set_sizetype (size_type_node);
4660
4661 pid_type_node =
4662 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
4663
4664 build_common_tree_nodes_2 (flag_short_double);
4665
4666 record_builtin_type (RID_FLOAT, NULL, float_type_node);
4667 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
4668 record_builtin_type (RID_MAX, "long double", long_double_type_node);
4669
4670 /* Only supported decimal floating point extension if the target
4671 actually supports underlying modes. */
4672 if (targetm.scalar_mode_supported_p (SDmode)
4673 && targetm.scalar_mode_supported_p (DDmode)
4674 && targetm.scalar_mode_supported_p (TDmode))
4675 {
4676 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
4677 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
4678 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
4679 }
4680
4681 if (targetm.fixed_point_supported_p ())
4682 {
4683 record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
4684 record_builtin_type (RID_FRACT, NULL, fract_type_node);
4685 record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
4686 record_builtin_type (RID_MAX, "long long _Fract",
4687 long_long_fract_type_node);
4688 record_builtin_type (RID_MAX, "unsigned short _Fract",
4689 unsigned_short_fract_type_node);
4690 record_builtin_type (RID_MAX, "unsigned _Fract",
4691 unsigned_fract_type_node);
4692 record_builtin_type (RID_MAX, "unsigned long _Fract",
4693 unsigned_long_fract_type_node);
4694 record_builtin_type (RID_MAX, "unsigned long long _Fract",
4695 unsigned_long_long_fract_type_node);
4696 record_builtin_type (RID_MAX, "_Sat short _Fract",
4697 sat_short_fract_type_node);
4698 record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
4699 record_builtin_type (RID_MAX, "_Sat long _Fract",
4700 sat_long_fract_type_node);
4701 record_builtin_type (RID_MAX, "_Sat long long _Fract",
4702 sat_long_long_fract_type_node);
4703 record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
4704 sat_unsigned_short_fract_type_node);
4705 record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
4706 sat_unsigned_fract_type_node);
4707 record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
4708 sat_unsigned_long_fract_type_node);
4709 record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
4710 sat_unsigned_long_long_fract_type_node);
4711 record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
4712 record_builtin_type (RID_ACCUM, NULL, accum_type_node);
4713 record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
4714 record_builtin_type (RID_MAX, "long long _Accum",
4715 long_long_accum_type_node);
4716 record_builtin_type (RID_MAX, "unsigned short _Accum",
4717 unsigned_short_accum_type_node);
4718 record_builtin_type (RID_MAX, "unsigned _Accum",
4719 unsigned_accum_type_node);
4720 record_builtin_type (RID_MAX, "unsigned long _Accum",
4721 unsigned_long_accum_type_node);
4722 record_builtin_type (RID_MAX, "unsigned long long _Accum",
4723 unsigned_long_long_accum_type_node);
4724 record_builtin_type (RID_MAX, "_Sat short _Accum",
4725 sat_short_accum_type_node);
4726 record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
4727 record_builtin_type (RID_MAX, "_Sat long _Accum",
4728 sat_long_accum_type_node);
4729 record_builtin_type (RID_MAX, "_Sat long long _Accum",
4730 sat_long_long_accum_type_node);
4731 record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
4732 sat_unsigned_short_accum_type_node);
4733 record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
4734 sat_unsigned_accum_type_node);
4735 record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
4736 sat_unsigned_long_accum_type_node);
4737 record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
4738 sat_unsigned_long_long_accum_type_node);
4739
4740 }
4741
4742 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4743 TYPE_DECL,
4744 get_identifier ("complex int"),
4745 complex_integer_type_node));
4746 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4747 TYPE_DECL,
4748 get_identifier ("complex float"),
4749 complex_float_type_node));
4750 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4751 TYPE_DECL,
4752 get_identifier ("complex double"),
4753 complex_double_type_node));
4754 lang_hooks.decls.pushdecl
4755 (build_decl (UNKNOWN_LOCATION,
4756 TYPE_DECL, get_identifier ("complex long double"),
4757 complex_long_double_type_node));
4758
4759 if (c_dialect_cxx ())
4760 /* For C++, make fileptr_type_node a distinct void * type until
4761 FILE type is defined. */
4762 fileptr_type_node = build_variant_type_copy (ptr_type_node);
4763
4764 record_builtin_type (RID_VOID, NULL, void_type_node);
4765
4766 /* Set the TYPE_NAME for any variants that were built before
4767 record_builtin_type gave names to the built-in types. */
4768 {
4769 tree void_name = TYPE_NAME (void_type_node);
4770 TYPE_NAME (void_type_node) = NULL_TREE;
4771 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
4772 = void_name;
4773 TYPE_NAME (void_type_node) = void_name;
4774 }
4775
4776 /* This node must not be shared. */
4777 void_zero_node = make_node (INTEGER_CST);
4778 TREE_TYPE (void_zero_node) = void_type_node;
4779
4780 void_list_node = build_void_list_node ();
4781
4782 /* Make a type to be the domain of a few array types
4783 whose domains don't really matter.
4784 200 is small enough that it always fits in size_t
4785 and large enough that it can hold most function names for the
4786 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
4787 array_domain_type = build_index_type (size_int (200));
4788
4789 /* Make a type for arrays of characters.
4790 With luck nothing will ever really depend on the length of this
4791 array type. */
4792 char_array_type_node
4793 = build_array_type (char_type_node, array_domain_type);
4794
4795 /* Likewise for arrays of ints. */
4796 int_array_type_node
4797 = build_array_type (integer_type_node, array_domain_type);
4798
4799 string_type_node = build_pointer_type (char_type_node);
4800 const_string_type_node
4801 = build_pointer_type (build_qualified_type
4802 (char_type_node, TYPE_QUAL_CONST));
4803
4804 /* This is special for C++ so functions can be overloaded. */
4805 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
4806 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
4807 wchar_type_size = TYPE_PRECISION (wchar_type_node);
4808 underlying_wchar_type_node = wchar_type_node;
4809 if (c_dialect_cxx ())
4810 {
4811 if (TYPE_UNSIGNED (wchar_type_node))
4812 wchar_type_node = make_unsigned_type (wchar_type_size);
4813 else
4814 wchar_type_node = make_signed_type (wchar_type_size);
4815 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
4816 }
4817
4818 /* This is for wide string constants. */
4819 wchar_array_type_node
4820 = build_array_type (wchar_type_node, array_domain_type);
4821
4822 /* Define 'char16_t'. */
4823 char16_type_node = get_identifier (CHAR16_TYPE);
4824 char16_type_node = TREE_TYPE (identifier_global_value (char16_type_node));
4825 char16_type_size = TYPE_PRECISION (char16_type_node);
4826 if (c_dialect_cxx ())
4827 {
4828 char16_type_node = make_unsigned_type (char16_type_size);
4829
4830 if (cxx_dialect == cxx0x)
4831 record_builtin_type (RID_CHAR16, "char16_t", char16_type_node);
4832 }
4833
4834 /* This is for UTF-16 string constants. */
4835 char16_array_type_node
4836 = build_array_type (char16_type_node, array_domain_type);
4837
4838 /* Define 'char32_t'. */
4839 char32_type_node = get_identifier (CHAR32_TYPE);
4840 char32_type_node = TREE_TYPE (identifier_global_value (char32_type_node));
4841 char32_type_size = TYPE_PRECISION (char32_type_node);
4842 if (c_dialect_cxx ())
4843 {
4844 char32_type_node = make_unsigned_type (char32_type_size);
4845
4846 if (cxx_dialect == cxx0x)
4847 record_builtin_type (RID_CHAR32, "char32_t", char32_type_node);
4848 }
4849
4850 /* This is for UTF-32 string constants. */
4851 char32_array_type_node
4852 = build_array_type (char32_type_node, array_domain_type);
4853
4854 wint_type_node =
4855 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
4856
4857 intmax_type_node =
4858 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
4859 uintmax_type_node =
4860 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
4861
4862 if (SIG_ATOMIC_TYPE)
4863 sig_atomic_type_node =
4864 TREE_TYPE (identifier_global_value (c_get_ident (SIG_ATOMIC_TYPE)));
4865 if (INT8_TYPE)
4866 int8_type_node =
4867 TREE_TYPE (identifier_global_value (c_get_ident (INT8_TYPE)));
4868 if (INT16_TYPE)
4869 int16_type_node =
4870 TREE_TYPE (identifier_global_value (c_get_ident (INT16_TYPE)));
4871 if (INT32_TYPE)
4872 int32_type_node =
4873 TREE_TYPE (identifier_global_value (c_get_ident (INT32_TYPE)));
4874 if (INT64_TYPE)
4875 int64_type_node =
4876 TREE_TYPE (identifier_global_value (c_get_ident (INT64_TYPE)));
4877 if (UINT8_TYPE)
4878 uint8_type_node =
4879 TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
4880 if (UINT16_TYPE)
4881 uint16_type_node =
4882 TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
4883 if (UINT32_TYPE)
4884 c_uint32_type_node =
4885 TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
4886 if (UINT64_TYPE)
4887 c_uint64_type_node =
4888 TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
4889 if (INT_LEAST8_TYPE)
4890 int_least8_type_node =
4891 TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST8_TYPE)));
4892 if (INT_LEAST16_TYPE)
4893 int_least16_type_node =
4894 TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST16_TYPE)));
4895 if (INT_LEAST32_TYPE)
4896 int_least32_type_node =
4897 TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST32_TYPE)));
4898 if (INT_LEAST64_TYPE)
4899 int_least64_type_node =
4900 TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST64_TYPE)));
4901 if (UINT_LEAST8_TYPE)
4902 uint_least8_type_node =
4903 TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST8_TYPE)));
4904 if (UINT_LEAST16_TYPE)
4905 uint_least16_type_node =
4906 TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST16_TYPE)));
4907 if (UINT_LEAST32_TYPE)
4908 uint_least32_type_node =
4909 TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST32_TYPE)));
4910 if (UINT_LEAST64_TYPE)
4911 uint_least64_type_node =
4912 TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST64_TYPE)));
4913 if (INT_FAST8_TYPE)
4914 int_fast8_type_node =
4915 TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST8_TYPE)));
4916 if (INT_FAST16_TYPE)
4917 int_fast16_type_node =
4918 TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST16_TYPE)));
4919 if (INT_FAST32_TYPE)
4920 int_fast32_type_node =
4921 TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST32_TYPE)));
4922 if (INT_FAST64_TYPE)
4923 int_fast64_type_node =
4924 TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST64_TYPE)));
4925 if (UINT_FAST8_TYPE)
4926 uint_fast8_type_node =
4927 TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST8_TYPE)));
4928 if (UINT_FAST16_TYPE)
4929 uint_fast16_type_node =
4930 TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST16_TYPE)));
4931 if (UINT_FAST32_TYPE)
4932 uint_fast32_type_node =
4933 TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST32_TYPE)));
4934 if (UINT_FAST64_TYPE)
4935 uint_fast64_type_node =
4936 TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST64_TYPE)));
4937 if (INTPTR_TYPE)
4938 intptr_type_node =
4939 TREE_TYPE (identifier_global_value (c_get_ident (INTPTR_TYPE)));
4940 if (UINTPTR_TYPE)
4941 uintptr_type_node =
4942 TREE_TYPE (identifier_global_value (c_get_ident (UINTPTR_TYPE)));
4943
4944 default_function_type = build_function_type (integer_type_node, NULL_TREE);
4945 ptrdiff_type_node
4946 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
4947 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
4948
4949 lang_hooks.decls.pushdecl
4950 (build_decl (UNKNOWN_LOCATION,
4951 TYPE_DECL, get_identifier ("__builtin_va_list"),
4952 va_list_type_node));
4953 #ifdef TARGET_ENUM_VA_LIST
4954 {
4955 int l;
4956 const char *pname;
4957 tree ptype;
4958 for (l = 0; TARGET_ENUM_VA_LIST (l, &pname, &ptype); ++l)
4959 {
4960 lang_hooks.decls.pushdecl
4961 (build_decl (UNKNOWN_LOCATION,
4962 TYPE_DECL, get_identifier (pname),
4963 ptype));
4964
4965 }
4966 }
4967 #endif
4968
4969 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
4970 {
4971 va_list_arg_type_node = va_list_ref_type_node =
4972 build_pointer_type (TREE_TYPE (va_list_type_node));
4973 }
4974 else
4975 {
4976 va_list_arg_type_node = va_list_type_node;
4977 va_list_ref_type_node = build_reference_type (va_list_type_node);
4978 }
4979
4980 if (!flag_preprocess_only)
4981 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
4982
4983 main_identifier_node = get_identifier ("main");
4984
4985 /* Create the built-in __null node. It is important that this is
4986 not shared. */
4987 null_node = make_node (INTEGER_CST);
4988 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
4989
4990 /* Since builtin_types isn't gc'ed, don't export these nodes. */
4991 memset (builtin_types, 0, sizeof (builtin_types));
4992 }
4993
4994 /* Look up the function in built_in_decls that corresponds to DECL
4995 and set ASMSPEC as its user assembler name. DECL must be a
4996 function decl that declares a builtin. */
4997
4998 void
4999 set_builtin_user_assembler_name (tree decl, const char *asmspec)
5000 {
5001 tree builtin;
5002 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5003 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
5004 && asmspec != 0);
5005
5006 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
5007 set_user_assembler_name (builtin, asmspec);
5008 switch (DECL_FUNCTION_CODE (decl))
5009 {
5010 case BUILT_IN_MEMCPY:
5011 init_block_move_fn (asmspec);
5012 memcpy_libfunc = set_user_assembler_libfunc ("memcpy", asmspec);
5013 break;
5014 case BUILT_IN_MEMSET:
5015 init_block_clear_fn (asmspec);
5016 memset_libfunc = set_user_assembler_libfunc ("memset", asmspec);
5017 break;
5018 case BUILT_IN_MEMMOVE:
5019 memmove_libfunc = set_user_assembler_libfunc ("memmove", asmspec);
5020 break;
5021 case BUILT_IN_MEMCMP:
5022 memcmp_libfunc = set_user_assembler_libfunc ("memcmp", asmspec);
5023 break;
5024 case BUILT_IN_ABORT:
5025 abort_libfunc = set_user_assembler_libfunc ("abort", asmspec);
5026 break;
5027 default:
5028 break;
5029 }
5030 }
5031
5032 /* The number of named compound-literals generated thus far. */
5033 static GTY(()) int compound_literal_number;
5034
5035 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
5036
5037 void
5038 set_compound_literal_name (tree decl)
5039 {
5040 char *name;
5041 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
5042 compound_literal_number);
5043 compound_literal_number++;
5044 DECL_NAME (decl) = get_identifier (name);
5045 }
5046
5047 tree
5048 build_va_arg (location_t loc, tree expr, tree type)
5049 {
5050 expr = build1 (VA_ARG_EXPR, type, expr);
5051 SET_EXPR_LOCATION (expr, loc);
5052 return expr;
5053 }
5054
5055
5056 /* Linked list of disabled built-in functions. */
5057
5058 typedef struct disabled_builtin
5059 {
5060 const char *name;
5061 struct disabled_builtin *next;
5062 } disabled_builtin;
5063 static disabled_builtin *disabled_builtins = NULL;
5064
5065 static bool builtin_function_disabled_p (const char *);
5066
5067 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
5068 begins with "__builtin_", give an error. */
5069
5070 void
5071 disable_builtin_function (const char *name)
5072 {
5073 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
5074 error ("cannot disable built-in function %qs", name);
5075 else
5076 {
5077 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
5078 new_disabled_builtin->name = name;
5079 new_disabled_builtin->next = disabled_builtins;
5080 disabled_builtins = new_disabled_builtin;
5081 }
5082 }
5083
5084
5085 /* Return true if the built-in function NAME has been disabled, false
5086 otherwise. */
5087
5088 static bool
5089 builtin_function_disabled_p (const char *name)
5090 {
5091 disabled_builtin *p;
5092 for (p = disabled_builtins; p != NULL; p = p->next)
5093 {
5094 if (strcmp (name, p->name) == 0)
5095 return true;
5096 }
5097 return false;
5098 }
5099
5100
5101 /* Worker for DEF_BUILTIN.
5102 Possibly define a builtin function with one or two names.
5103 Does not declare a non-__builtin_ function if flag_no_builtin, or if
5104 nonansi_p and flag_no_nonansi_builtin. */
5105
5106 static void
5107 def_builtin_1 (enum built_in_function fncode,
5108 const char *name,
5109 enum built_in_class fnclass,
5110 tree fntype, tree libtype,
5111 bool both_p, bool fallback_p, bool nonansi_p,
5112 tree fnattrs, bool implicit_p)
5113 {
5114 tree decl;
5115 const char *libname;
5116
5117 if (fntype == error_mark_node)
5118 return;
5119
5120 gcc_assert ((!both_p && !fallback_p)
5121 || !strncmp (name, "__builtin_",
5122 strlen ("__builtin_")));
5123
5124 libname = name + strlen ("__builtin_");
5125 decl = add_builtin_function (name, fntype, fncode, fnclass,
5126 (fallback_p ? libname : NULL),
5127 fnattrs);
5128 if (both_p
5129 && !flag_no_builtin && !builtin_function_disabled_p (libname)
5130 && !(nonansi_p && flag_no_nonansi_builtin))
5131 add_builtin_function (libname, libtype, fncode, fnclass,
5132 NULL, fnattrs);
5133
5134 built_in_decls[(int) fncode] = decl;
5135 if (implicit_p)
5136 implicit_built_in_decls[(int) fncode] = decl;
5137 }
5138 \f
5139 /* Nonzero if the type T promotes to int. This is (nearly) the
5140 integral promotions defined in ISO C99 6.3.1.1/2. */
5141
5142 bool
5143 c_promoting_integer_type_p (const_tree t)
5144 {
5145 switch (TREE_CODE (t))
5146 {
5147 case INTEGER_TYPE:
5148 return (TYPE_MAIN_VARIANT (t) == char_type_node
5149 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
5150 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
5151 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
5152 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
5153 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
5154
5155 case ENUMERAL_TYPE:
5156 /* ??? Technically all enumerations not larger than an int
5157 promote to an int. But this is used along code paths
5158 that only want to notice a size change. */
5159 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
5160
5161 case BOOLEAN_TYPE:
5162 return 1;
5163
5164 default:
5165 return 0;
5166 }
5167 }
5168
5169 /* Return 1 if PARMS specifies a fixed number of parameters
5170 and none of their types is affected by default promotions. */
5171
5172 int
5173 self_promoting_args_p (const_tree parms)
5174 {
5175 const_tree t;
5176 for (t = parms; t; t = TREE_CHAIN (t))
5177 {
5178 tree type = TREE_VALUE (t);
5179
5180 if (type == error_mark_node)
5181 continue;
5182
5183 if (TREE_CHAIN (t) == 0 && type != void_type_node)
5184 return 0;
5185
5186 if (type == 0)
5187 return 0;
5188
5189 if (TYPE_MAIN_VARIANT (type) == float_type_node)
5190 return 0;
5191
5192 if (c_promoting_integer_type_p (type))
5193 return 0;
5194 }
5195 return 1;
5196 }
5197
5198 /* Recursively remove any '*' or '&' operator from TYPE. */
5199 tree
5200 strip_pointer_operator (tree t)
5201 {
5202 while (POINTER_TYPE_P (t))
5203 t = TREE_TYPE (t);
5204 return t;
5205 }
5206
5207 /* Recursively remove pointer or array type from TYPE. */
5208 tree
5209 strip_pointer_or_array_types (tree t)
5210 {
5211 while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
5212 t = TREE_TYPE (t);
5213 return t;
5214 }
5215
5216 /* Used to compare case labels. K1 and K2 are actually tree nodes
5217 representing case labels, or NULL_TREE for a `default' label.
5218 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
5219 K2, and 0 if K1 and K2 are equal. */
5220
5221 int
5222 case_compare (splay_tree_key k1, splay_tree_key k2)
5223 {
5224 /* Consider a NULL key (such as arises with a `default' label) to be
5225 smaller than anything else. */
5226 if (!k1)
5227 return k2 ? -1 : 0;
5228 else if (!k2)
5229 return k1 ? 1 : 0;
5230
5231 return tree_int_cst_compare ((tree) k1, (tree) k2);
5232 }
5233
5234 /* Process a case label, located at LOC, for the range LOW_VALUE
5235 ... HIGH_VALUE. If LOW_VALUE and HIGH_VALUE are both NULL_TREE
5236 then this case label is actually a `default' label. If only
5237 HIGH_VALUE is NULL_TREE, then case label was declared using the
5238 usual C/C++ syntax, rather than the GNU case range extension.
5239 CASES is a tree containing all the case ranges processed so far;
5240 COND is the condition for the switch-statement itself. Returns the
5241 CASE_LABEL_EXPR created, or ERROR_MARK_NODE if no CASE_LABEL_EXPR
5242 is created. */
5243
5244 tree
5245 c_add_case_label (location_t loc, splay_tree cases, tree cond, tree orig_type,
5246 tree low_value, tree high_value)
5247 {
5248 tree type;
5249 tree label;
5250 tree case_label;
5251 splay_tree_node node;
5252
5253 /* Create the LABEL_DECL itself. */
5254 label = create_artificial_label (loc);
5255
5256 /* If there was an error processing the switch condition, bail now
5257 before we get more confused. */
5258 if (!cond || cond == error_mark_node)
5259 goto error_out;
5260
5261 if ((low_value && TREE_TYPE (low_value)
5262 && POINTER_TYPE_P (TREE_TYPE (low_value)))
5263 || (high_value && TREE_TYPE (high_value)
5264 && POINTER_TYPE_P (TREE_TYPE (high_value))))
5265 {
5266 error_at (loc, "pointers are not permitted as case values");
5267 goto error_out;
5268 }
5269
5270 /* Case ranges are a GNU extension. */
5271 if (high_value)
5272 pedwarn (loc, OPT_pedantic,
5273 "range expressions in switch statements are non-standard");
5274
5275 type = TREE_TYPE (cond);
5276 if (low_value)
5277 {
5278 low_value = check_case_value (low_value);
5279 low_value = convert_and_check (type, low_value);
5280 if (low_value == error_mark_node)
5281 goto error_out;
5282 }
5283 if (high_value)
5284 {
5285 high_value = check_case_value (high_value);
5286 high_value = convert_and_check (type, high_value);
5287 if (high_value == error_mark_node)
5288 goto error_out;
5289 }
5290
5291 if (low_value && high_value)
5292 {
5293 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5294 really a case range, even though it was written that way.
5295 Remove the HIGH_VALUE to simplify later processing. */
5296 if (tree_int_cst_equal (low_value, high_value))
5297 high_value = NULL_TREE;
5298 else if (!tree_int_cst_lt (low_value, high_value))
5299 warning_at (loc, 0, "empty range specified");
5300 }
5301
5302 /* See if the case is in range of the type of the original testing
5303 expression. If both low_value and high_value are out of range,
5304 don't insert the case label and return NULL_TREE. */
5305 if (low_value
5306 && !check_case_bounds (type, orig_type,
5307 &low_value, high_value ? &high_value : NULL))
5308 return NULL_TREE;
5309
5310 /* Look up the LOW_VALUE in the table of case labels we already
5311 have. */
5312 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
5313 /* If there was not an exact match, check for overlapping ranges.
5314 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5315 that's a `default' label and the only overlap is an exact match. */
5316 if (!node && (low_value || high_value))
5317 {
5318 splay_tree_node low_bound;
5319 splay_tree_node high_bound;
5320
5321 /* Even though there wasn't an exact match, there might be an
5322 overlap between this case range and another case range.
5323 Since we've (inductively) not allowed any overlapping case
5324 ranges, we simply need to find the greatest low case label
5325 that is smaller that LOW_VALUE, and the smallest low case
5326 label that is greater than LOW_VALUE. If there is an overlap
5327 it will occur in one of these two ranges. */
5328 low_bound = splay_tree_predecessor (cases,
5329 (splay_tree_key) low_value);
5330 high_bound = splay_tree_successor (cases,
5331 (splay_tree_key) low_value);
5332
5333 /* Check to see if the LOW_BOUND overlaps. It is smaller than
5334 the LOW_VALUE, so there is no need to check unless the
5335 LOW_BOUND is in fact itself a case range. */
5336 if (low_bound
5337 && CASE_HIGH ((tree) low_bound->value)
5338 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5339 low_value) >= 0)
5340 node = low_bound;
5341 /* Check to see if the HIGH_BOUND overlaps. The low end of that
5342 range is bigger than the low end of the current range, so we
5343 are only interested if the current range is a real range, and
5344 not an ordinary case label. */
5345 else if (high_bound
5346 && high_value
5347 && (tree_int_cst_compare ((tree) high_bound->key,
5348 high_value)
5349 <= 0))
5350 node = high_bound;
5351 }
5352 /* If there was an overlap, issue an error. */
5353 if (node)
5354 {
5355 tree duplicate = CASE_LABEL ((tree) node->value);
5356
5357 if (high_value)
5358 {
5359 error_at (loc, "duplicate (or overlapping) case value");
5360 error_at (DECL_SOURCE_LOCATION (duplicate),
5361 "this is the first entry overlapping that value");
5362 }
5363 else if (low_value)
5364 {
5365 error_at (loc, "duplicate case value") ;
5366 error_at (DECL_SOURCE_LOCATION (duplicate), "previously used here");
5367 }
5368 else
5369 {
5370 error_at (loc, "multiple default labels in one switch");
5371 error_at (DECL_SOURCE_LOCATION (duplicate),
5372 "this is the first default label");
5373 }
5374 goto error_out;
5375 }
5376
5377 /* Add a CASE_LABEL to the statement-tree. */
5378 case_label = add_stmt (build_case_label (loc, low_value, high_value, label));
5379 /* Register this case label in the splay tree. */
5380 splay_tree_insert (cases,
5381 (splay_tree_key) low_value,
5382 (splay_tree_value) case_label);
5383
5384 return case_label;
5385
5386 error_out:
5387 /* Add a label so that the back-end doesn't think that the beginning of
5388 the switch is unreachable. Note that we do not add a case label, as
5389 that just leads to duplicates and thence to failure later on. */
5390 if (!cases->root)
5391 {
5392 tree t = create_artificial_label (loc);
5393 add_stmt (build_stmt (loc, LABEL_EXPR, t));
5394 }
5395 return error_mark_node;
5396 }
5397
5398 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
5399 Used to verify that case values match up with enumerator values. */
5400
5401 static void
5402 match_case_to_enum_1 (tree key, tree type, tree label)
5403 {
5404 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
5405
5406 /* ??? Not working too hard to print the double-word value.
5407 Should perhaps be done with %lwd in the diagnostic routines? */
5408 if (TREE_INT_CST_HIGH (key) == 0)
5409 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
5410 TREE_INT_CST_LOW (key));
5411 else if (!TYPE_UNSIGNED (type)
5412 && TREE_INT_CST_HIGH (key) == -1
5413 && TREE_INT_CST_LOW (key) != 0)
5414 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
5415 -TREE_INT_CST_LOW (key));
5416 else
5417 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
5418 (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (key),
5419 (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (key));
5420
5421 if (TYPE_NAME (type) == 0)
5422 warning (warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5423 "%Jcase value %qs not in enumerated type",
5424 CASE_LABEL (label), buf);
5425 else
5426 warning (warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5427 "%Jcase value %qs not in enumerated type %qT",
5428 CASE_LABEL (label), buf, type);
5429 }
5430
5431 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
5432 Used to verify that case values match up with enumerator values. */
5433
5434 static int
5435 match_case_to_enum (splay_tree_node node, void *data)
5436 {
5437 tree label = (tree) node->value;
5438 tree type = (tree) data;
5439
5440 /* Skip default case. */
5441 if (!CASE_LOW (label))
5442 return 0;
5443
5444 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
5445 when we did our enum->case scan. Reset our scratch bit after. */
5446 if (!CASE_LOW_SEEN (label))
5447 match_case_to_enum_1 (CASE_LOW (label), type, label);
5448 else
5449 CASE_LOW_SEEN (label) = 0;
5450
5451 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
5452 not set, that means that CASE_HIGH did not appear when we did our
5453 enum->case scan. Reset our scratch bit after. */
5454 if (CASE_HIGH (label))
5455 {
5456 if (!CASE_HIGH_SEEN (label))
5457 match_case_to_enum_1 (CASE_HIGH (label), type, label);
5458 else
5459 CASE_HIGH_SEEN (label) = 0;
5460 }
5461
5462 return 0;
5463 }
5464
5465 /* Handle -Wswitch*. Called from the front end after parsing the
5466 switch construct. */
5467 /* ??? Should probably be somewhere generic, since other languages
5468 besides C and C++ would want this. At the moment, however, C/C++
5469 are the only tree-ssa languages that support enumerations at all,
5470 so the point is moot. */
5471
5472 void
5473 c_do_switch_warnings (splay_tree cases, location_t switch_location,
5474 tree type, tree cond)
5475 {
5476 splay_tree_node default_node;
5477 splay_tree_node node;
5478 tree chain;
5479
5480 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
5481 return;
5482
5483 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
5484 if (!default_node)
5485 warning (OPT_Wswitch_default, "%Hswitch missing default case",
5486 &switch_location);
5487
5488 /* From here on, we only care about about enumerated types. */
5489 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
5490 return;
5491
5492 /* From here on, we only care about -Wswitch and -Wswitch-enum. */
5493 if (!warn_switch_enum && !warn_switch)
5494 return;
5495
5496 /* Check the cases. Warn about case values which are not members of
5497 the enumerated type. For -Wswitch-enum, or for -Wswitch when
5498 there is no default case, check that exactly all enumeration
5499 literals are covered by the cases. */
5500
5501 /* Clearing COND if it is not an integer constant simplifies
5502 the tests inside the loop below. */
5503 if (TREE_CODE (cond) != INTEGER_CST)
5504 cond = NULL_TREE;
5505
5506 /* The time complexity here is O(N*lg(N)) worst case, but for the
5507 common case of monotonically increasing enumerators, it is
5508 O(N), since the nature of the splay tree will keep the next
5509 element adjacent to the root at all times. */
5510
5511 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
5512 {
5513 tree value = TREE_VALUE (chain);
5514 if (TREE_CODE (value) == CONST_DECL)
5515 value = DECL_INITIAL (value);
5516 node = splay_tree_lookup (cases, (splay_tree_key) value);
5517 if (node)
5518 {
5519 /* Mark the CASE_LOW part of the case entry as seen. */
5520 tree label = (tree) node->value;
5521 CASE_LOW_SEEN (label) = 1;
5522 continue;
5523 }
5524
5525 /* Even though there wasn't an exact match, there might be a
5526 case range which includes the enumerator's value. */
5527 node = splay_tree_predecessor (cases, (splay_tree_key) value);
5528 if (node && CASE_HIGH ((tree) node->value))
5529 {
5530 tree label = (tree) node->value;
5531 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
5532 if (cmp >= 0)
5533 {
5534 /* If we match the upper bound exactly, mark the CASE_HIGH
5535 part of the case entry as seen. */
5536 if (cmp == 0)
5537 CASE_HIGH_SEEN (label) = 1;
5538 continue;
5539 }
5540 }
5541
5542 /* We've now determined that this enumerated literal isn't
5543 handled by the case labels of the switch statement. */
5544
5545 /* If the switch expression is a constant, we only really care
5546 about whether that constant is handled by the switch. */
5547 if (cond && tree_int_cst_compare (cond, value))
5548 continue;
5549
5550 /* If there is a default_node, the only relevant option is
5551 Wswitch-enum. Otherwise, if both are enabled then we prefer
5552 to warn using -Wswitch because -Wswitch is enabled by -Wall
5553 while -Wswitch-enum is explicit. */
5554 warning_at (switch_location,
5555 (default_node || !warn_switch
5556 ? OPT_Wswitch_enum
5557 : OPT_Wswitch),
5558 "enumeration value %qE not handled in switch",
5559 TREE_PURPOSE (chain));
5560 }
5561
5562 /* Warn if there are case expressions that don't correspond to
5563 enumerators. This can occur since C and C++ don't enforce
5564 type-checking of assignments to enumeration variables.
5565
5566 The time complexity here is now always O(N) worst case, since
5567 we should have marked both the lower bound and upper bound of
5568 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
5569 above. This scan also resets those fields. */
5570
5571 splay_tree_foreach (cases, match_case_to_enum, type);
5572 }
5573
5574 /* Finish an expression taking the address of LABEL (an
5575 IDENTIFIER_NODE). Returns an expression for the address.
5576
5577 LOC is the location for the expression returned. */
5578
5579 tree
5580 finish_label_address_expr (tree label, location_t loc)
5581 {
5582 tree result;
5583
5584 pedwarn (input_location, OPT_pedantic, "taking the address of a label is non-standard");
5585
5586 if (label == error_mark_node)
5587 return error_mark_node;
5588
5589 label = lookup_label (label);
5590 if (label == NULL_TREE)
5591 result = null_pointer_node;
5592 else
5593 {
5594 TREE_USED (label) = 1;
5595 result = build1 (ADDR_EXPR, ptr_type_node, label);
5596 /* The current function in not necessarily uninlinable.
5597 Computed gotos are incompatible with inlining, but the value
5598 here could be used only in a diagnostic, for example. */
5599 protected_set_expr_location (result, loc);
5600 }
5601
5602 return result;
5603 }
5604 \f
5605
5606 /* Given a boolean expression ARG, return a tree representing an increment
5607 or decrement (as indicated by CODE) of ARG. The front end must check for
5608 invalid cases (e.g., decrement in C++). */
5609 tree
5610 boolean_increment (enum tree_code code, tree arg)
5611 {
5612 tree val;
5613 tree true_res = build_int_cst (TREE_TYPE (arg), 1);
5614
5615 arg = stabilize_reference (arg);
5616 switch (code)
5617 {
5618 case PREINCREMENT_EXPR:
5619 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5620 break;
5621 case POSTINCREMENT_EXPR:
5622 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5623 arg = save_expr (arg);
5624 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5625 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5626 break;
5627 case PREDECREMENT_EXPR:
5628 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5629 invert_truthvalue (arg));
5630 break;
5631 case POSTDECREMENT_EXPR:
5632 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5633 invert_truthvalue (arg));
5634 arg = save_expr (arg);
5635 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5636 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5637 break;
5638 default:
5639 gcc_unreachable ();
5640 }
5641 TREE_SIDE_EFFECTS (val) = 1;
5642 return val;
5643 }
5644 \f
5645 /* Built-in macros for stddef.h and stdint.h, that require macros
5646 defined in this file. */
5647 void
5648 c_stddef_cpp_builtins(void)
5649 {
5650 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
5651 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
5652 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
5653 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
5654 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
5655 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
5656 builtin_define_with_value ("__CHAR16_TYPE__", CHAR16_TYPE, 0);
5657 builtin_define_with_value ("__CHAR32_TYPE__", CHAR32_TYPE, 0);
5658 if (SIG_ATOMIC_TYPE)
5659 builtin_define_with_value ("__SIG_ATOMIC_TYPE__", SIG_ATOMIC_TYPE, 0);
5660 if (INT8_TYPE)
5661 builtin_define_with_value ("__INT8_TYPE__", INT8_TYPE, 0);
5662 if (INT16_TYPE)
5663 builtin_define_with_value ("__INT16_TYPE__", INT16_TYPE, 0);
5664 if (INT32_TYPE)
5665 builtin_define_with_value ("__INT32_TYPE__", INT32_TYPE, 0);
5666 if (INT64_TYPE)
5667 builtin_define_with_value ("__INT64_TYPE__", INT64_TYPE, 0);
5668 if (UINT8_TYPE)
5669 builtin_define_with_value ("__UINT8_TYPE__", UINT8_TYPE, 0);
5670 if (UINT16_TYPE)
5671 builtin_define_with_value ("__UINT16_TYPE__", UINT16_TYPE, 0);
5672 if (UINT32_TYPE)
5673 builtin_define_with_value ("__UINT32_TYPE__", UINT32_TYPE, 0);
5674 if (UINT64_TYPE)
5675 builtin_define_with_value ("__UINT64_TYPE__", UINT64_TYPE, 0);
5676 if (INT_LEAST8_TYPE)
5677 builtin_define_with_value ("__INT_LEAST8_TYPE__", INT_LEAST8_TYPE, 0);
5678 if (INT_LEAST16_TYPE)
5679 builtin_define_with_value ("__INT_LEAST16_TYPE__", INT_LEAST16_TYPE, 0);
5680 if (INT_LEAST32_TYPE)
5681 builtin_define_with_value ("__INT_LEAST32_TYPE__", INT_LEAST32_TYPE, 0);
5682 if (INT_LEAST64_TYPE)
5683 builtin_define_with_value ("__INT_LEAST64_TYPE__", INT_LEAST64_TYPE, 0);
5684 if (UINT_LEAST8_TYPE)
5685 builtin_define_with_value ("__UINT_LEAST8_TYPE__", UINT_LEAST8_TYPE, 0);
5686 if (UINT_LEAST16_TYPE)
5687 builtin_define_with_value ("__UINT_LEAST16_TYPE__", UINT_LEAST16_TYPE, 0);
5688 if (UINT_LEAST32_TYPE)
5689 builtin_define_with_value ("__UINT_LEAST32_TYPE__", UINT_LEAST32_TYPE, 0);
5690 if (UINT_LEAST64_TYPE)
5691 builtin_define_with_value ("__UINT_LEAST64_TYPE__", UINT_LEAST64_TYPE, 0);
5692 if (INT_FAST8_TYPE)
5693 builtin_define_with_value ("__INT_FAST8_TYPE__", INT_FAST8_TYPE, 0);
5694 if (INT_FAST16_TYPE)
5695 builtin_define_with_value ("__INT_FAST16_TYPE__", INT_FAST16_TYPE, 0);
5696 if (INT_FAST32_TYPE)
5697 builtin_define_with_value ("__INT_FAST32_TYPE__", INT_FAST32_TYPE, 0);
5698 if (INT_FAST64_TYPE)
5699 builtin_define_with_value ("__INT_FAST64_TYPE__", INT_FAST64_TYPE, 0);
5700 if (UINT_FAST8_TYPE)
5701 builtin_define_with_value ("__UINT_FAST8_TYPE__", UINT_FAST8_TYPE, 0);
5702 if (UINT_FAST16_TYPE)
5703 builtin_define_with_value ("__UINT_FAST16_TYPE__", UINT_FAST16_TYPE, 0);
5704 if (UINT_FAST32_TYPE)
5705 builtin_define_with_value ("__UINT_FAST32_TYPE__", UINT_FAST32_TYPE, 0);
5706 if (UINT_FAST64_TYPE)
5707 builtin_define_with_value ("__UINT_FAST64_TYPE__", UINT_FAST64_TYPE, 0);
5708 if (INTPTR_TYPE)
5709 builtin_define_with_value ("__INTPTR_TYPE__", INTPTR_TYPE, 0);
5710 if (UINTPTR_TYPE)
5711 builtin_define_with_value ("__UINTPTR_TYPE__", UINTPTR_TYPE, 0);
5712 }
5713
5714 static void
5715 c_init_attributes (void)
5716 {
5717 /* Fill in the built_in_attributes array. */
5718 #define DEF_ATTR_NULL_TREE(ENUM) \
5719 built_in_attributes[(int) ENUM] = NULL_TREE;
5720 #define DEF_ATTR_INT(ENUM, VALUE) \
5721 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
5722 #define DEF_ATTR_IDENT(ENUM, STRING) \
5723 built_in_attributes[(int) ENUM] = get_identifier (STRING);
5724 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
5725 built_in_attributes[(int) ENUM] \
5726 = tree_cons (built_in_attributes[(int) PURPOSE], \
5727 built_in_attributes[(int) VALUE], \
5728 built_in_attributes[(int) CHAIN]);
5729 #include "builtin-attrs.def"
5730 #undef DEF_ATTR_NULL_TREE
5731 #undef DEF_ATTR_INT
5732 #undef DEF_ATTR_IDENT
5733 #undef DEF_ATTR_TREE_LIST
5734 }
5735
5736 /* Attribute handlers common to C front ends. */
5737
5738 /* Handle a "packed" attribute; arguments as in
5739 struct attribute_spec.handler. */
5740
5741 static tree
5742 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5743 int flags, bool *no_add_attrs)
5744 {
5745 if (TYPE_P (*node))
5746 {
5747 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5748 *node = build_variant_type_copy (*node);
5749 TYPE_PACKED (*node) = 1;
5750 }
5751 else if (TREE_CODE (*node) == FIELD_DECL)
5752 {
5753 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT
5754 /* Still pack bitfields. */
5755 && ! DECL_INITIAL (*node))
5756 warning (OPT_Wattributes,
5757 "%qE attribute ignored for field of type %qT",
5758 name, TREE_TYPE (*node));
5759 else
5760 DECL_PACKED (*node) = 1;
5761 }
5762 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
5763 used for DECL_REGISTER. It wouldn't mean anything anyway.
5764 We can't set DECL_PACKED on the type of a TYPE_DECL, because
5765 that changes what the typedef is typing. */
5766 else
5767 {
5768 warning (OPT_Wattributes, "%qE attribute ignored", name);
5769 *no_add_attrs = true;
5770 }
5771
5772 return NULL_TREE;
5773 }
5774
5775 /* Handle a "nocommon" attribute; arguments as in
5776 struct attribute_spec.handler. */
5777
5778 static tree
5779 handle_nocommon_attribute (tree *node, tree name,
5780 tree ARG_UNUSED (args),
5781 int ARG_UNUSED (flags), bool *no_add_attrs)
5782 {
5783 if (TREE_CODE (*node) == VAR_DECL)
5784 DECL_COMMON (*node) = 0;
5785 else
5786 {
5787 warning (OPT_Wattributes, "%qE attribute ignored", name);
5788 *no_add_attrs = true;
5789 }
5790
5791 return NULL_TREE;
5792 }
5793
5794 /* Handle a "common" attribute; arguments as in
5795 struct attribute_spec.handler. */
5796
5797 static tree
5798 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5799 int ARG_UNUSED (flags), bool *no_add_attrs)
5800 {
5801 if (TREE_CODE (*node) == VAR_DECL)
5802 DECL_COMMON (*node) = 1;
5803 else
5804 {
5805 warning (OPT_Wattributes, "%qE attribute ignored", name);
5806 *no_add_attrs = true;
5807 }
5808
5809 return NULL_TREE;
5810 }
5811
5812 /* Handle a "noreturn" attribute; arguments as in
5813 struct attribute_spec.handler. */
5814
5815 static tree
5816 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5817 int ARG_UNUSED (flags), bool *no_add_attrs)
5818 {
5819 tree type = TREE_TYPE (*node);
5820
5821 /* See FIXME comment in c_common_attribute_table. */
5822 if (TREE_CODE (*node) == FUNCTION_DECL)
5823 TREE_THIS_VOLATILE (*node) = 1;
5824 else if (TREE_CODE (type) == POINTER_TYPE
5825 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5826 TREE_TYPE (*node)
5827 = build_pointer_type
5828 (build_type_variant (TREE_TYPE (type),
5829 TYPE_READONLY (TREE_TYPE (type)), 1));
5830 else
5831 {
5832 warning (OPT_Wattributes, "%qE attribute ignored", name);
5833 *no_add_attrs = true;
5834 }
5835
5836 return NULL_TREE;
5837 }
5838
5839 /* Handle a "hot" and attribute; arguments as in
5840 struct attribute_spec.handler. */
5841
5842 static tree
5843 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5844 int ARG_UNUSED (flags), bool *no_add_attrs)
5845 {
5846 if (TREE_CODE (*node) == FUNCTION_DECL)
5847 {
5848 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
5849 {
5850 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5851 name, "cold");
5852 *no_add_attrs = true;
5853 }
5854 /* Most of the rest of the hot processing is done later with
5855 lookup_attribute. */
5856 }
5857 else
5858 {
5859 warning (OPT_Wattributes, "%qE attribute ignored", name);
5860 *no_add_attrs = true;
5861 }
5862
5863 return NULL_TREE;
5864 }
5865 /* Handle a "cold" and attribute; arguments as in
5866 struct attribute_spec.handler. */
5867
5868 static tree
5869 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5870 int ARG_UNUSED (flags), bool *no_add_attrs)
5871 {
5872 if (TREE_CODE (*node) == FUNCTION_DECL)
5873 {
5874 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
5875 {
5876 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5877 name, "hot");
5878 *no_add_attrs = true;
5879 }
5880 /* Most of the rest of the cold processing is done later with
5881 lookup_attribute. */
5882 }
5883 else
5884 {
5885 warning (OPT_Wattributes, "%qE attribute ignored", name);
5886 *no_add_attrs = true;
5887 }
5888
5889 return NULL_TREE;
5890 }
5891
5892 /* Handle a "noinline" attribute; arguments as in
5893 struct attribute_spec.handler. */
5894
5895 static tree
5896 handle_noinline_attribute (tree *node, tree name,
5897 tree ARG_UNUSED (args),
5898 int ARG_UNUSED (flags), bool *no_add_attrs)
5899 {
5900 if (TREE_CODE (*node) == FUNCTION_DECL)
5901 DECL_UNINLINABLE (*node) = 1;
5902 else
5903 {
5904 warning (OPT_Wattributes, "%qE attribute ignored", name);
5905 *no_add_attrs = true;
5906 }
5907
5908 return NULL_TREE;
5909 }
5910
5911 /* Handle a "always_inline" attribute; arguments as in
5912 struct attribute_spec.handler. */
5913
5914 static tree
5915 handle_always_inline_attribute (tree *node, tree name,
5916 tree ARG_UNUSED (args),
5917 int ARG_UNUSED (flags),
5918 bool *no_add_attrs)
5919 {
5920 if (TREE_CODE (*node) == FUNCTION_DECL)
5921 {
5922 /* Set the attribute and mark it for disregarding inline
5923 limits. */
5924 DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
5925 }
5926 else
5927 {
5928 warning (OPT_Wattributes, "%qE attribute ignored", name);
5929 *no_add_attrs = true;
5930 }
5931
5932 return NULL_TREE;
5933 }
5934
5935 /* Handle a "gnu_inline" attribute; arguments as in
5936 struct attribute_spec.handler. */
5937
5938 static tree
5939 handle_gnu_inline_attribute (tree *node, tree name,
5940 tree ARG_UNUSED (args),
5941 int ARG_UNUSED (flags),
5942 bool *no_add_attrs)
5943 {
5944 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
5945 {
5946 /* Do nothing else, just set the attribute. We'll get at
5947 it later with lookup_attribute. */
5948 }
5949 else
5950 {
5951 warning (OPT_Wattributes, "%qE attribute ignored", name);
5952 *no_add_attrs = true;
5953 }
5954
5955 return NULL_TREE;
5956 }
5957
5958 /* Handle an "artificial" attribute; arguments as in
5959 struct attribute_spec.handler. */
5960
5961 static tree
5962 handle_artificial_attribute (tree *node, tree name,
5963 tree ARG_UNUSED (args),
5964 int ARG_UNUSED (flags),
5965 bool *no_add_attrs)
5966 {
5967 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
5968 {
5969 /* Do nothing else, just set the attribute. We'll get at
5970 it later with lookup_attribute. */
5971 }
5972 else
5973 {
5974 warning (OPT_Wattributes, "%qE attribute ignored", name);
5975 *no_add_attrs = true;
5976 }
5977
5978 return NULL_TREE;
5979 }
5980
5981 /* Handle a "flatten" attribute; arguments as in
5982 struct attribute_spec.handler. */
5983
5984 static tree
5985 handle_flatten_attribute (tree *node, tree name,
5986 tree args ATTRIBUTE_UNUSED,
5987 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5988 {
5989 if (TREE_CODE (*node) == FUNCTION_DECL)
5990 /* Do nothing else, just set the attribute. We'll get at
5991 it later with lookup_attribute. */
5992 ;
5993 else
5994 {
5995 warning (OPT_Wattributes, "%qE attribute ignored", name);
5996 *no_add_attrs = true;
5997 }
5998
5999 return NULL_TREE;
6000 }
6001
6002 /* Handle a "warning" or "error" attribute; arguments as in
6003 struct attribute_spec.handler. */
6004
6005 static tree
6006 handle_error_attribute (tree *node, tree name, tree args,
6007 int ARG_UNUSED (flags), bool *no_add_attrs)
6008 {
6009 if (TREE_CODE (*node) == FUNCTION_DECL
6010 || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6011 /* Do nothing else, just set the attribute. We'll get at
6012 it later with lookup_attribute. */
6013 ;
6014 else
6015 {
6016 warning (OPT_Wattributes, "%qE attribute ignored", name);
6017 *no_add_attrs = true;
6018 }
6019
6020 return NULL_TREE;
6021 }
6022
6023 /* Handle a "used" attribute; arguments as in
6024 struct attribute_spec.handler. */
6025
6026 static tree
6027 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
6028 int ARG_UNUSED (flags), bool *no_add_attrs)
6029 {
6030 tree node = *pnode;
6031
6032 if (TREE_CODE (node) == FUNCTION_DECL
6033 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
6034 {
6035 TREE_USED (node) = 1;
6036 DECL_PRESERVE_P (node) = 1;
6037 }
6038 else
6039 {
6040 warning (OPT_Wattributes, "%qE attribute ignored", name);
6041 *no_add_attrs = true;
6042 }
6043
6044 return NULL_TREE;
6045 }
6046
6047 /* Handle a "unused" attribute; arguments as in
6048 struct attribute_spec.handler. */
6049
6050 static tree
6051 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6052 int flags, bool *no_add_attrs)
6053 {
6054 if (DECL_P (*node))
6055 {
6056 tree decl = *node;
6057
6058 if (TREE_CODE (decl) == PARM_DECL
6059 || TREE_CODE (decl) == VAR_DECL
6060 || TREE_CODE (decl) == FUNCTION_DECL
6061 || TREE_CODE (decl) == LABEL_DECL
6062 || TREE_CODE (decl) == TYPE_DECL)
6063 TREE_USED (decl) = 1;
6064 else
6065 {
6066 warning (OPT_Wattributes, "%qE attribute ignored", name);
6067 *no_add_attrs = true;
6068 }
6069 }
6070 else
6071 {
6072 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6073 *node = build_variant_type_copy (*node);
6074 TREE_USED (*node) = 1;
6075 }
6076
6077 return NULL_TREE;
6078 }
6079
6080 /* Handle a "externally_visible" attribute; arguments as in
6081 struct attribute_spec.handler. */
6082
6083 static tree
6084 handle_externally_visible_attribute (tree *pnode, tree name,
6085 tree ARG_UNUSED (args),
6086 int ARG_UNUSED (flags),
6087 bool *no_add_attrs)
6088 {
6089 tree node = *pnode;
6090
6091 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
6092 {
6093 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
6094 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
6095 {
6096 warning (OPT_Wattributes,
6097 "%qE attribute have effect only on public objects", name);
6098 *no_add_attrs = true;
6099 }
6100 }
6101 else
6102 {
6103 warning (OPT_Wattributes, "%qE attribute ignored", name);
6104 *no_add_attrs = true;
6105 }
6106
6107 return NULL_TREE;
6108 }
6109
6110 /* Handle a "const" attribute; arguments as in
6111 struct attribute_spec.handler. */
6112
6113 static tree
6114 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6115 int ARG_UNUSED (flags), bool *no_add_attrs)
6116 {
6117 tree type = TREE_TYPE (*node);
6118
6119 /* See FIXME comment on noreturn in c_common_attribute_table. */
6120 if (TREE_CODE (*node) == FUNCTION_DECL)
6121 TREE_READONLY (*node) = 1;
6122 else if (TREE_CODE (type) == POINTER_TYPE
6123 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
6124 TREE_TYPE (*node)
6125 = build_pointer_type
6126 (build_type_variant (TREE_TYPE (type), 1,
6127 TREE_THIS_VOLATILE (TREE_TYPE (type))));
6128 else
6129 {
6130 warning (OPT_Wattributes, "%qE attribute ignored", name);
6131 *no_add_attrs = true;
6132 }
6133
6134 return NULL_TREE;
6135 }
6136
6137 /* Handle a "transparent_union" attribute; arguments as in
6138 struct attribute_spec.handler. */
6139
6140 static tree
6141 handle_transparent_union_attribute (tree *node, tree name,
6142 tree ARG_UNUSED (args), int flags,
6143 bool *no_add_attrs)
6144 {
6145 tree type;
6146
6147 *no_add_attrs = true;
6148
6149 if (TREE_CODE (*node) == TYPE_DECL)
6150 node = &TREE_TYPE (*node);
6151 type = *node;
6152
6153 if (TREE_CODE (type) == UNION_TYPE)
6154 {
6155 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
6156 the code in finish_struct. */
6157 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6158 {
6159 if (TYPE_FIELDS (type) == NULL_TREE
6160 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
6161 goto ignored;
6162
6163 /* A type variant isn't good enough, since we don't a cast
6164 to such a type removed as a no-op. */
6165 *node = type = build_duplicate_type (type);
6166 }
6167
6168 TYPE_TRANSPARENT_UNION (type) = 1;
6169 return NULL_TREE;
6170 }
6171
6172 ignored:
6173 warning (OPT_Wattributes, "%qE attribute ignored", name);
6174 return NULL_TREE;
6175 }
6176
6177 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
6178 get the requested priority for a constructor or destructor,
6179 possibly issuing diagnostics for invalid or reserved
6180 priorities. */
6181
6182 static priority_type
6183 get_priority (tree args, bool is_destructor)
6184 {
6185 HOST_WIDE_INT pri;
6186 tree arg;
6187
6188 if (!args)
6189 return DEFAULT_INIT_PRIORITY;
6190
6191 if (!SUPPORTS_INIT_PRIORITY)
6192 {
6193 if (is_destructor)
6194 error ("destructor priorities are not supported");
6195 else
6196 error ("constructor priorities are not supported");
6197 return DEFAULT_INIT_PRIORITY;
6198 }
6199
6200 arg = TREE_VALUE (args);
6201 if (!host_integerp (arg, /*pos=*/0)
6202 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
6203 goto invalid;
6204
6205 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
6206 if (pri < 0 || pri > MAX_INIT_PRIORITY)
6207 goto invalid;
6208
6209 if (pri <= MAX_RESERVED_INIT_PRIORITY)
6210 {
6211 if (is_destructor)
6212 warning (0,
6213 "destructor priorities from 0 to %d are reserved "
6214 "for the implementation",
6215 MAX_RESERVED_INIT_PRIORITY);
6216 else
6217 warning (0,
6218 "constructor priorities from 0 to %d are reserved "
6219 "for the implementation",
6220 MAX_RESERVED_INIT_PRIORITY);
6221 }
6222 return pri;
6223
6224 invalid:
6225 if (is_destructor)
6226 error ("destructor priorities must be integers from 0 to %d inclusive",
6227 MAX_INIT_PRIORITY);
6228 else
6229 error ("constructor priorities must be integers from 0 to %d inclusive",
6230 MAX_INIT_PRIORITY);
6231 return DEFAULT_INIT_PRIORITY;
6232 }
6233
6234 /* Handle a "constructor" attribute; arguments as in
6235 struct attribute_spec.handler. */
6236
6237 static tree
6238 handle_constructor_attribute (tree *node, tree name, tree args,
6239 int ARG_UNUSED (flags),
6240 bool *no_add_attrs)
6241 {
6242 tree decl = *node;
6243 tree type = TREE_TYPE (decl);
6244
6245 if (TREE_CODE (decl) == FUNCTION_DECL
6246 && TREE_CODE (type) == FUNCTION_TYPE
6247 && decl_function_context (decl) == 0)
6248 {
6249 priority_type priority;
6250 DECL_STATIC_CONSTRUCTOR (decl) = 1;
6251 priority = get_priority (args, /*is_destructor=*/false);
6252 SET_DECL_INIT_PRIORITY (decl, priority);
6253 TREE_USED (decl) = 1;
6254 }
6255 else
6256 {
6257 warning (OPT_Wattributes, "%qE attribute ignored", name);
6258 *no_add_attrs = true;
6259 }
6260
6261 return NULL_TREE;
6262 }
6263
6264 /* Handle a "destructor" attribute; arguments as in
6265 struct attribute_spec.handler. */
6266
6267 static tree
6268 handle_destructor_attribute (tree *node, tree name, tree args,
6269 int ARG_UNUSED (flags),
6270 bool *no_add_attrs)
6271 {
6272 tree decl = *node;
6273 tree type = TREE_TYPE (decl);
6274
6275 if (TREE_CODE (decl) == FUNCTION_DECL
6276 && TREE_CODE (type) == FUNCTION_TYPE
6277 && decl_function_context (decl) == 0)
6278 {
6279 priority_type priority;
6280 DECL_STATIC_DESTRUCTOR (decl) = 1;
6281 priority = get_priority (args, /*is_destructor=*/true);
6282 SET_DECL_FINI_PRIORITY (decl, priority);
6283 TREE_USED (decl) = 1;
6284 }
6285 else
6286 {
6287 warning (OPT_Wattributes, "%qE attribute ignored", name);
6288 *no_add_attrs = true;
6289 }
6290
6291 return NULL_TREE;
6292 }
6293
6294 /* Handle a "mode" attribute; arguments as in
6295 struct attribute_spec.handler. */
6296
6297 static tree
6298 handle_mode_attribute (tree *node, tree name, tree args,
6299 int ARG_UNUSED (flags), bool *no_add_attrs)
6300 {
6301 tree type = *node;
6302 tree ident = TREE_VALUE (args);
6303
6304 *no_add_attrs = true;
6305
6306 if (TREE_CODE (ident) != IDENTIFIER_NODE)
6307 warning (OPT_Wattributes, "%qE attribute ignored", name);
6308 else
6309 {
6310 int j;
6311 const char *p = IDENTIFIER_POINTER (ident);
6312 int len = strlen (p);
6313 enum machine_mode mode = VOIDmode;
6314 tree typefm;
6315 bool valid_mode;
6316
6317 if (len > 4 && p[0] == '_' && p[1] == '_'
6318 && p[len - 1] == '_' && p[len - 2] == '_')
6319 {
6320 char *newp = (char *) alloca (len - 1);
6321
6322 strcpy (newp, &p[2]);
6323 newp[len - 4] = '\0';
6324 p = newp;
6325 }
6326
6327 /* Change this type to have a type with the specified mode.
6328 First check for the special modes. */
6329 if (!strcmp (p, "byte"))
6330 mode = byte_mode;
6331 else if (!strcmp (p, "word"))
6332 mode = word_mode;
6333 else if (!strcmp (p, "pointer"))
6334 mode = ptr_mode;
6335 else if (!strcmp (p, "libgcc_cmp_return"))
6336 mode = targetm.libgcc_cmp_return_mode ();
6337 else if (!strcmp (p, "libgcc_shift_count"))
6338 mode = targetm.libgcc_shift_count_mode ();
6339 else if (!strcmp (p, "unwind_word"))
6340 mode = targetm.unwind_word_mode ();
6341 else
6342 for (j = 0; j < NUM_MACHINE_MODES; j++)
6343 if (!strcmp (p, GET_MODE_NAME (j)))
6344 {
6345 mode = (enum machine_mode) j;
6346 break;
6347 }
6348
6349 if (mode == VOIDmode)
6350 {
6351 error ("unknown machine mode %qE", ident);
6352 return NULL_TREE;
6353 }
6354
6355 valid_mode = false;
6356 switch (GET_MODE_CLASS (mode))
6357 {
6358 case MODE_INT:
6359 case MODE_PARTIAL_INT:
6360 case MODE_FLOAT:
6361 case MODE_DECIMAL_FLOAT:
6362 case MODE_FRACT:
6363 case MODE_UFRACT:
6364 case MODE_ACCUM:
6365 case MODE_UACCUM:
6366 valid_mode = targetm.scalar_mode_supported_p (mode);
6367 break;
6368
6369 case MODE_COMPLEX_INT:
6370 case MODE_COMPLEX_FLOAT:
6371 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
6372 break;
6373
6374 case MODE_VECTOR_INT:
6375 case MODE_VECTOR_FLOAT:
6376 case MODE_VECTOR_FRACT:
6377 case MODE_VECTOR_UFRACT:
6378 case MODE_VECTOR_ACCUM:
6379 case MODE_VECTOR_UACCUM:
6380 warning (OPT_Wattributes, "specifying vector types with "
6381 "__attribute__ ((mode)) is deprecated");
6382 warning (OPT_Wattributes,
6383 "use __attribute__ ((vector_size)) instead");
6384 valid_mode = vector_mode_valid_p (mode);
6385 break;
6386
6387 default:
6388 break;
6389 }
6390 if (!valid_mode)
6391 {
6392 error ("unable to emulate %qs", p);
6393 return NULL_TREE;
6394 }
6395
6396 if (POINTER_TYPE_P (type))
6397 {
6398 tree (*fn)(tree, enum machine_mode, bool);
6399
6400 if (!targetm.valid_pointer_mode (mode))
6401 {
6402 error ("invalid pointer mode %qs", p);
6403 return NULL_TREE;
6404 }
6405
6406 if (TREE_CODE (type) == POINTER_TYPE)
6407 fn = build_pointer_type_for_mode;
6408 else
6409 fn = build_reference_type_for_mode;
6410 typefm = fn (TREE_TYPE (type), mode, false);
6411 }
6412 else
6413 {
6414 /* For fixed-point modes, we need to test if the signness of type
6415 and the machine mode are consistent. */
6416 if (ALL_FIXED_POINT_MODE_P (mode)
6417 && TYPE_UNSIGNED (type) != UNSIGNED_FIXED_POINT_MODE_P (mode))
6418 {
6419 error ("signness of type and machine mode %qs don't match", p);
6420 return NULL_TREE;
6421 }
6422 /* For fixed-point modes, we need to pass saturating info. */
6423 typefm = lang_hooks.types.type_for_mode (mode,
6424 ALL_FIXED_POINT_MODE_P (mode) ? TYPE_SATURATING (type)
6425 : TYPE_UNSIGNED (type));
6426 }
6427
6428 if (typefm == NULL_TREE)
6429 {
6430 error ("no data type for mode %qs", p);
6431 return NULL_TREE;
6432 }
6433 else if (TREE_CODE (type) == ENUMERAL_TYPE)
6434 {
6435 /* For enumeral types, copy the precision from the integer
6436 type returned above. If not an INTEGER_TYPE, we can't use
6437 this mode for this type. */
6438 if (TREE_CODE (typefm) != INTEGER_TYPE)
6439 {
6440 error ("cannot use mode %qs for enumeral types", p);
6441 return NULL_TREE;
6442 }
6443
6444 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
6445 {
6446 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
6447 typefm = type;
6448 }
6449 else
6450 {
6451 /* We cannot build a type variant, as there's code that assumes
6452 that TYPE_MAIN_VARIANT has the same mode. This includes the
6453 debug generators. Instead, create a subrange type. This
6454 results in all of the enumeral values being emitted only once
6455 in the original, and the subtype gets them by reference. */
6456 if (TYPE_UNSIGNED (type))
6457 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
6458 else
6459 typefm = make_signed_type (TYPE_PRECISION (typefm));
6460 TREE_TYPE (typefm) = type;
6461 }
6462 }
6463 else if (VECTOR_MODE_P (mode)
6464 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
6465 : TREE_CODE (type) != TREE_CODE (typefm))
6466 {
6467 error ("mode %qs applied to inappropriate type", p);
6468 return NULL_TREE;
6469 }
6470
6471 *node = typefm;
6472 }
6473
6474 return NULL_TREE;
6475 }
6476
6477 /* Handle a "section" attribute; arguments as in
6478 struct attribute_spec.handler. */
6479
6480 static tree
6481 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6482 int ARG_UNUSED (flags), bool *no_add_attrs)
6483 {
6484 tree decl = *node;
6485
6486 if (targetm.have_named_sections)
6487 {
6488 user_defined_section_attribute = true;
6489
6490 if ((TREE_CODE (decl) == FUNCTION_DECL
6491 || TREE_CODE (decl) == VAR_DECL)
6492 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6493 {
6494 if (TREE_CODE (decl) == VAR_DECL
6495 && current_function_decl != NULL_TREE
6496 && !TREE_STATIC (decl))
6497 {
6498 error ("%Jsection attribute cannot be specified for "
6499 "local variables", decl);
6500 *no_add_attrs = true;
6501 }
6502
6503 /* The decl may have already been given a section attribute
6504 from a previous declaration. Ensure they match. */
6505 else if (DECL_SECTION_NAME (decl) != NULL_TREE
6506 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
6507 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
6508 {
6509 error ("section of %q+D conflicts with previous declaration",
6510 *node);
6511 *no_add_attrs = true;
6512 }
6513 else if (TREE_CODE (decl) == VAR_DECL
6514 && !targetm.have_tls && targetm.emutls.tmpl_section
6515 && DECL_THREAD_LOCAL_P (decl))
6516 {
6517 error ("section of %q+D cannot be overridden", *node);
6518 *no_add_attrs = true;
6519 }
6520 else
6521 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
6522 }
6523 else
6524 {
6525 error ("section attribute not allowed for %q+D", *node);
6526 *no_add_attrs = true;
6527 }
6528 }
6529 else
6530 {
6531 error ("%Jsection attributes are not supported for this target", *node);
6532 *no_add_attrs = true;
6533 }
6534
6535 return NULL_TREE;
6536 }
6537
6538 /* Handle a "aligned" attribute; arguments as in
6539 struct attribute_spec.handler. */
6540
6541 static tree
6542 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6543 int flags, bool *no_add_attrs)
6544 {
6545 tree decl = NULL_TREE;
6546 tree *type = NULL;
6547 int is_type = 0;
6548 tree align_expr = (args ? TREE_VALUE (args)
6549 : size_int (ATTRIBUTE_ALIGNED_VALUE / BITS_PER_UNIT));
6550 int i;
6551
6552 if (DECL_P (*node))
6553 {
6554 decl = *node;
6555 type = &TREE_TYPE (decl);
6556 is_type = TREE_CODE (*node) == TYPE_DECL;
6557 }
6558 else if (TYPE_P (*node))
6559 type = node, is_type = 1;
6560
6561 if (TREE_CODE (align_expr) != INTEGER_CST)
6562 {
6563 error ("requested alignment is not a constant");
6564 *no_add_attrs = true;
6565 }
6566 else if ((i = tree_log2 (align_expr)) == -1)
6567 {
6568 error ("requested alignment is not a power of 2");
6569 *no_add_attrs = true;
6570 }
6571 else if (i >= HOST_BITS_PER_INT - BITS_PER_UNIT_LOG)
6572 {
6573 error ("requested alignment is too large");
6574 *no_add_attrs = true;
6575 }
6576 else if (is_type)
6577 {
6578 /* If we have a TYPE_DECL, then copy the type, so that we
6579 don't accidentally modify a builtin type. See pushdecl. */
6580 if (decl && TREE_TYPE (decl) != error_mark_node
6581 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
6582 {
6583 tree tt = TREE_TYPE (decl);
6584 *type = build_variant_type_copy (*type);
6585 DECL_ORIGINAL_TYPE (decl) = tt;
6586 TYPE_NAME (*type) = decl;
6587 TREE_USED (*type) = TREE_USED (decl);
6588 TREE_TYPE (decl) = *type;
6589 }
6590 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6591 *type = build_variant_type_copy (*type);
6592
6593 TYPE_ALIGN (*type) = (1U << i) * BITS_PER_UNIT;
6594 TYPE_USER_ALIGN (*type) = 1;
6595 }
6596 else if (! VAR_OR_FUNCTION_DECL_P (decl)
6597 && TREE_CODE (decl) != FIELD_DECL)
6598 {
6599 error ("alignment may not be specified for %q+D", decl);
6600 *no_add_attrs = true;
6601 }
6602 else if (TREE_CODE (decl) == FUNCTION_DECL
6603 && DECL_ALIGN (decl) > (1U << i) * BITS_PER_UNIT)
6604 {
6605 if (DECL_USER_ALIGN (decl))
6606 error ("alignment for %q+D was previously specified as %d "
6607 "and may not be decreased", decl,
6608 DECL_ALIGN (decl) / BITS_PER_UNIT);
6609 else
6610 error ("alignment for %q+D must be at least %d", decl,
6611 DECL_ALIGN (decl) / BITS_PER_UNIT);
6612 *no_add_attrs = true;
6613 }
6614 else
6615 {
6616 DECL_ALIGN (decl) = (1U << i) * BITS_PER_UNIT;
6617 DECL_USER_ALIGN (decl) = 1;
6618 }
6619
6620 return NULL_TREE;
6621 }
6622
6623 /* Handle a "weak" attribute; arguments as in
6624 struct attribute_spec.handler. */
6625
6626 static tree
6627 handle_weak_attribute (tree *node, tree name,
6628 tree ARG_UNUSED (args),
6629 int ARG_UNUSED (flags),
6630 bool * ARG_UNUSED (no_add_attrs))
6631 {
6632 if (TREE_CODE (*node) == FUNCTION_DECL
6633 && DECL_DECLARED_INLINE_P (*node))
6634 {
6635 error ("inline function %q+D cannot be declared weak", *node);
6636 *no_add_attrs = true;
6637 }
6638 else if (TREE_CODE (*node) == FUNCTION_DECL
6639 || TREE_CODE (*node) == VAR_DECL)
6640 declare_weak (*node);
6641 else
6642 warning (OPT_Wattributes, "%qE attribute ignored", name);
6643
6644 return NULL_TREE;
6645 }
6646
6647 /* Handle an "alias" attribute; arguments as in
6648 struct attribute_spec.handler. */
6649
6650 static tree
6651 handle_alias_attribute (tree *node, tree name, tree args,
6652 int ARG_UNUSED (flags), bool *no_add_attrs)
6653 {
6654 tree decl = *node;
6655
6656 if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
6657 {
6658 warning (OPT_Wattributes, "%qE attribute ignored", name);
6659 *no_add_attrs = true;
6660 }
6661 else if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
6662 || (TREE_CODE (decl) != FUNCTION_DECL
6663 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
6664 /* A static variable declaration is always a tentative definition,
6665 but the alias is a non-tentative definition which overrides. */
6666 || (TREE_CODE (decl) != FUNCTION_DECL
6667 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
6668 {
6669 error ("%q+D defined both normally and as an alias", decl);
6670 *no_add_attrs = true;
6671 }
6672
6673 /* Note that the very first time we process a nested declaration,
6674 decl_function_context will not be set. Indeed, *would* never
6675 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
6676 we do below. After such frobbery, pushdecl would set the context.
6677 In any case, this is never what we want. */
6678 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
6679 {
6680 tree id;
6681
6682 id = TREE_VALUE (args);
6683 if (TREE_CODE (id) != STRING_CST)
6684 {
6685 error ("alias argument not a string");
6686 *no_add_attrs = true;
6687 return NULL_TREE;
6688 }
6689 id = get_identifier (TREE_STRING_POINTER (id));
6690 /* This counts as a use of the object pointed to. */
6691 TREE_USED (id) = 1;
6692
6693 if (TREE_CODE (decl) == FUNCTION_DECL)
6694 DECL_INITIAL (decl) = error_mark_node;
6695 else
6696 {
6697 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
6698 DECL_EXTERNAL (decl) = 1;
6699 else
6700 DECL_EXTERNAL (decl) = 0;
6701 TREE_STATIC (decl) = 1;
6702 }
6703 }
6704 else
6705 {
6706 warning (OPT_Wattributes, "%qE attribute ignored", name);
6707 *no_add_attrs = true;
6708 }
6709
6710 return NULL_TREE;
6711 }
6712
6713 /* Handle a "weakref" attribute; arguments as in struct
6714 attribute_spec.handler. */
6715
6716 static tree
6717 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6718 int flags, bool *no_add_attrs)
6719 {
6720 tree attr = NULL_TREE;
6721
6722 /* We must ignore the attribute when it is associated with
6723 local-scoped decls, since attribute alias is ignored and many
6724 such symbols do not even have a DECL_WEAK field. */
6725 if (decl_function_context (*node)
6726 || current_function_decl
6727 || (TREE_CODE (*node) != VAR_DECL && TREE_CODE (*node) != FUNCTION_DECL))
6728 {
6729 warning (OPT_Wattributes, "%qE attribute ignored", name);
6730 *no_add_attrs = true;
6731 return NULL_TREE;
6732 }
6733
6734 /* The idea here is that `weakref("name")' mutates into `weakref,
6735 alias("name")', and weakref without arguments, in turn,
6736 implicitly adds weak. */
6737
6738 if (args)
6739 {
6740 attr = tree_cons (get_identifier ("alias"), args, attr);
6741 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
6742
6743 *no_add_attrs = true;
6744
6745 decl_attributes (node, attr, flags);
6746 }
6747 else
6748 {
6749 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
6750 error ("%Jweakref attribute must appear before alias attribute",
6751 *node);
6752
6753 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
6754 and that isn't supported; and because it wants to add it to
6755 the list of weak decls, which isn't helpful. */
6756 DECL_WEAK (*node) = 1;
6757 }
6758
6759 return NULL_TREE;
6760 }
6761
6762 /* Handle an "visibility" attribute; arguments as in
6763 struct attribute_spec.handler. */
6764
6765 static tree
6766 handle_visibility_attribute (tree *node, tree name, tree args,
6767 int ARG_UNUSED (flags),
6768 bool *ARG_UNUSED (no_add_attrs))
6769 {
6770 tree decl = *node;
6771 tree id = TREE_VALUE (args);
6772 enum symbol_visibility vis;
6773
6774 if (TYPE_P (*node))
6775 {
6776 if (TREE_CODE (*node) == ENUMERAL_TYPE)
6777 /* OK */;
6778 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
6779 {
6780 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
6781 name);
6782 return NULL_TREE;
6783 }
6784 else if (TYPE_FIELDS (*node))
6785 {
6786 error ("%qE attribute ignored because %qT is already defined",
6787 name, *node);
6788 return NULL_TREE;
6789 }
6790 }
6791 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
6792 {
6793 warning (OPT_Wattributes, "%qE attribute ignored", name);
6794 return NULL_TREE;
6795 }
6796
6797 if (TREE_CODE (id) != STRING_CST)
6798 {
6799 error ("visibility argument not a string");
6800 return NULL_TREE;
6801 }
6802
6803 /* If this is a type, set the visibility on the type decl. */
6804 if (TYPE_P (decl))
6805 {
6806 decl = TYPE_NAME (decl);
6807 if (!decl)
6808 return NULL_TREE;
6809 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6810 {
6811 warning (OPT_Wattributes, "%qE attribute ignored on types",
6812 name);
6813 return NULL_TREE;
6814 }
6815 }
6816
6817 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
6818 vis = VISIBILITY_DEFAULT;
6819 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
6820 vis = VISIBILITY_INTERNAL;
6821 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
6822 vis = VISIBILITY_HIDDEN;
6823 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
6824 vis = VISIBILITY_PROTECTED;
6825 else
6826 {
6827 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
6828 vis = VISIBILITY_DEFAULT;
6829 }
6830
6831 if (DECL_VISIBILITY_SPECIFIED (decl)
6832 && vis != DECL_VISIBILITY (decl))
6833 {
6834 tree attributes = (TYPE_P (*node)
6835 ? TYPE_ATTRIBUTES (*node)
6836 : DECL_ATTRIBUTES (decl));
6837 if (lookup_attribute ("visibility", attributes))
6838 error ("%qD redeclared with different visibility", decl);
6839 else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6840 && lookup_attribute ("dllimport", attributes))
6841 error ("%qD was declared %qs which implies default visibility",
6842 decl, "dllimport");
6843 else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6844 && lookup_attribute ("dllexport", attributes))
6845 error ("%qD was declared %qs which implies default visibility",
6846 decl, "dllexport");
6847 }
6848
6849 DECL_VISIBILITY (decl) = vis;
6850 DECL_VISIBILITY_SPECIFIED (decl) = 1;
6851
6852 /* Go ahead and attach the attribute to the node as well. This is needed
6853 so we can determine whether we have VISIBILITY_DEFAULT because the
6854 visibility was not specified, or because it was explicitly overridden
6855 from the containing scope. */
6856
6857 return NULL_TREE;
6858 }
6859
6860 /* Determine the ELF symbol visibility for DECL, which is either a
6861 variable or a function. It is an error to use this function if a
6862 definition of DECL is not available in this translation unit.
6863 Returns true if the final visibility has been determined by this
6864 function; false if the caller is free to make additional
6865 modifications. */
6866
6867 bool
6868 c_determine_visibility (tree decl)
6869 {
6870 gcc_assert (TREE_CODE (decl) == VAR_DECL
6871 || TREE_CODE (decl) == FUNCTION_DECL);
6872
6873 /* If the user explicitly specified the visibility with an
6874 attribute, honor that. DECL_VISIBILITY will have been set during
6875 the processing of the attribute. We check for an explicit
6876 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
6877 to distinguish the use of an attribute from the use of a "#pragma
6878 GCC visibility push(...)"; in the latter case we still want other
6879 considerations to be able to overrule the #pragma. */
6880 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl))
6881 || (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6882 && (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
6883 || lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))))
6884 return true;
6885
6886 /* Set default visibility to whatever the user supplied with
6887 visibility_specified depending on #pragma GCC visibility. */
6888 if (!DECL_VISIBILITY_SPECIFIED (decl))
6889 {
6890 if (visibility_options.inpragma
6891 || DECL_VISIBILITY (decl) != default_visibility)
6892 {
6893 DECL_VISIBILITY (decl) = default_visibility;
6894 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
6895 /* If visibility changed and DECL already has DECL_RTL, ensure
6896 symbol flags are updated. */
6897 if (((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
6898 || TREE_CODE (decl) == FUNCTION_DECL)
6899 && DECL_RTL_SET_P (decl))
6900 make_decl_rtl (decl);
6901 }
6902 }
6903 return false;
6904 }
6905
6906 /* Handle an "tls_model" attribute; arguments as in
6907 struct attribute_spec.handler. */
6908
6909 static tree
6910 handle_tls_model_attribute (tree *node, tree name, tree args,
6911 int ARG_UNUSED (flags), bool *no_add_attrs)
6912 {
6913 tree id;
6914 tree decl = *node;
6915 enum tls_model kind;
6916
6917 *no_add_attrs = true;
6918
6919 if (TREE_CODE (decl) != VAR_DECL || !DECL_THREAD_LOCAL_P (decl))
6920 {
6921 warning (OPT_Wattributes, "%qE attribute ignored", name);
6922 return NULL_TREE;
6923 }
6924
6925 kind = DECL_TLS_MODEL (decl);
6926 id = TREE_VALUE (args);
6927 if (TREE_CODE (id) != STRING_CST)
6928 {
6929 error ("tls_model argument not a string");
6930 return NULL_TREE;
6931 }
6932
6933 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
6934 kind = TLS_MODEL_LOCAL_EXEC;
6935 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
6936 kind = TLS_MODEL_INITIAL_EXEC;
6937 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
6938 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
6939 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
6940 kind = TLS_MODEL_GLOBAL_DYNAMIC;
6941 else
6942 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
6943
6944 DECL_TLS_MODEL (decl) = kind;
6945 return NULL_TREE;
6946 }
6947
6948 /* Handle a "no_instrument_function" attribute; arguments as in
6949 struct attribute_spec.handler. */
6950
6951 static tree
6952 handle_no_instrument_function_attribute (tree *node, tree name,
6953 tree ARG_UNUSED (args),
6954 int ARG_UNUSED (flags),
6955 bool *no_add_attrs)
6956 {
6957 tree decl = *node;
6958
6959 if (TREE_CODE (decl) != FUNCTION_DECL)
6960 {
6961 error ("%J%qE attribute applies only to functions", decl, name);
6962 *no_add_attrs = true;
6963 }
6964 else if (DECL_INITIAL (decl))
6965 {
6966 error ("%Jcan%'t set %qE attribute after definition", decl, name);
6967 *no_add_attrs = true;
6968 }
6969 else
6970 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
6971
6972 return NULL_TREE;
6973 }
6974
6975 /* Handle a "malloc" attribute; arguments as in
6976 struct attribute_spec.handler. */
6977
6978 static tree
6979 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6980 int ARG_UNUSED (flags), bool *no_add_attrs)
6981 {
6982 if (TREE_CODE (*node) == FUNCTION_DECL
6983 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
6984 DECL_IS_MALLOC (*node) = 1;
6985 else
6986 {
6987 warning (OPT_Wattributes, "%qE attribute ignored", name);
6988 *no_add_attrs = true;
6989 }
6990
6991 return NULL_TREE;
6992 }
6993
6994 /* Handle a "alloc_size" attribute; arguments as in
6995 struct attribute_spec.handler. */
6996
6997 static tree
6998 handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6999 int ARG_UNUSED (flags), bool *no_add_attrs)
7000 {
7001 unsigned arg_count = type_num_arguments (*node);
7002 for (; args; args = TREE_CHAIN (args))
7003 {
7004 tree position = TREE_VALUE (args);
7005
7006 if (TREE_CODE (position) != INTEGER_CST
7007 || TREE_INT_CST_HIGH (position)
7008 || TREE_INT_CST_LOW (position) < 1
7009 || TREE_INT_CST_LOW (position) > arg_count )
7010 {
7011 warning (OPT_Wattributes,
7012 "alloc_size parameter outside range");
7013 *no_add_attrs = true;
7014 return NULL_TREE;
7015 }
7016 }
7017 return NULL_TREE;
7018 }
7019
7020 /* Handle a "returns_twice" attribute; arguments as in
7021 struct attribute_spec.handler. */
7022
7023 static tree
7024 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7025 int ARG_UNUSED (flags), bool *no_add_attrs)
7026 {
7027 if (TREE_CODE (*node) == FUNCTION_DECL)
7028 DECL_IS_RETURNS_TWICE (*node) = 1;
7029 else
7030 {
7031 warning (OPT_Wattributes, "%qE attribute ignored", name);
7032 *no_add_attrs = true;
7033 }
7034
7035 return NULL_TREE;
7036 }
7037
7038 /* Handle a "no_limit_stack" attribute; arguments as in
7039 struct attribute_spec.handler. */
7040
7041 static tree
7042 handle_no_limit_stack_attribute (tree *node, tree name,
7043 tree ARG_UNUSED (args),
7044 int ARG_UNUSED (flags),
7045 bool *no_add_attrs)
7046 {
7047 tree decl = *node;
7048
7049 if (TREE_CODE (decl) != FUNCTION_DECL)
7050 {
7051 error ("%J%qE attribute applies only to functions", decl, name);
7052 *no_add_attrs = true;
7053 }
7054 else if (DECL_INITIAL (decl))
7055 {
7056 error ("%Jcan%'t set %qE attribute after definition", decl, name);
7057 *no_add_attrs = true;
7058 }
7059 else
7060 DECL_NO_LIMIT_STACK (decl) = 1;
7061
7062 return NULL_TREE;
7063 }
7064
7065 /* Handle a "pure" attribute; arguments as in
7066 struct attribute_spec.handler. */
7067
7068 static tree
7069 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7070 int ARG_UNUSED (flags), bool *no_add_attrs)
7071 {
7072 if (TREE_CODE (*node) == FUNCTION_DECL)
7073 DECL_PURE_P (*node) = 1;
7074 /* ??? TODO: Support types. */
7075 else
7076 {
7077 warning (OPT_Wattributes, "%qE attribute ignored", name);
7078 *no_add_attrs = true;
7079 }
7080
7081 return NULL_TREE;
7082 }
7083
7084 /* Handle a "no vops" attribute; arguments as in
7085 struct attribute_spec.handler. */
7086
7087 static tree
7088 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
7089 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7090 bool *ARG_UNUSED (no_add_attrs))
7091 {
7092 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
7093 DECL_IS_NOVOPS (*node) = 1;
7094 return NULL_TREE;
7095 }
7096
7097 /* Handle a "deprecated" attribute; arguments as in
7098 struct attribute_spec.handler. */
7099
7100 static tree
7101 handle_deprecated_attribute (tree *node, tree name,
7102 tree args, int flags,
7103 bool *no_add_attrs)
7104 {
7105 tree type = NULL_TREE;
7106 int warn = 0;
7107 tree what = NULL_TREE;
7108
7109 if (!args)
7110 *no_add_attrs = true;
7111 else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
7112 {
7113 error ("deprecated message is not a string");
7114 *no_add_attrs = true;
7115 }
7116
7117 if (DECL_P (*node))
7118 {
7119 tree decl = *node;
7120 type = TREE_TYPE (decl);
7121
7122 if (TREE_CODE (decl) == TYPE_DECL
7123 || TREE_CODE (decl) == PARM_DECL
7124 || TREE_CODE (decl) == VAR_DECL
7125 || TREE_CODE (decl) == FUNCTION_DECL
7126 || TREE_CODE (decl) == FIELD_DECL)
7127 TREE_DEPRECATED (decl) = 1;
7128 else
7129 warn = 1;
7130 }
7131 else if (TYPE_P (*node))
7132 {
7133 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
7134 *node = build_variant_type_copy (*node);
7135 TREE_DEPRECATED (*node) = 1;
7136 type = *node;
7137 }
7138 else
7139 warn = 1;
7140
7141 if (warn)
7142 {
7143 *no_add_attrs = true;
7144 if (type && TYPE_NAME (type))
7145 {
7146 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
7147 what = TYPE_NAME (*node);
7148 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7149 && DECL_NAME (TYPE_NAME (type)))
7150 what = DECL_NAME (TYPE_NAME (type));
7151 }
7152 if (what)
7153 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
7154 else
7155 warning (OPT_Wattributes, "%qE attribute ignored", name);
7156 }
7157
7158 return NULL_TREE;
7159 }
7160
7161 /* Handle a "vector_size" attribute; arguments as in
7162 struct attribute_spec.handler. */
7163
7164 static tree
7165 handle_vector_size_attribute (tree *node, tree name, tree args,
7166 int ARG_UNUSED (flags),
7167 bool *no_add_attrs)
7168 {
7169 unsigned HOST_WIDE_INT vecsize, nunits;
7170 enum machine_mode orig_mode;
7171 tree type = *node, new_type, size;
7172
7173 *no_add_attrs = true;
7174
7175 size = TREE_VALUE (args);
7176
7177 if (!host_integerp (size, 1))
7178 {
7179 warning (OPT_Wattributes, "%qE attribute ignored", name);
7180 return NULL_TREE;
7181 }
7182
7183 /* Get the vector size (in bytes). */
7184 vecsize = tree_low_cst (size, 1);
7185
7186 /* We need to provide for vector pointers, vector arrays, and
7187 functions returning vectors. For example:
7188
7189 __attribute__((vector_size(16))) short *foo;
7190
7191 In this case, the mode is SI, but the type being modified is
7192 HI, so we need to look further. */
7193
7194 while (POINTER_TYPE_P (type)
7195 || TREE_CODE (type) == FUNCTION_TYPE
7196 || TREE_CODE (type) == METHOD_TYPE
7197 || TREE_CODE (type) == ARRAY_TYPE
7198 || TREE_CODE (type) == OFFSET_TYPE)
7199 type = TREE_TYPE (type);
7200
7201 /* Get the mode of the type being modified. */
7202 orig_mode = TYPE_MODE (type);
7203
7204 if ((!INTEGRAL_TYPE_P (type)
7205 && !SCALAR_FLOAT_TYPE_P (type)
7206 && !FIXED_POINT_TYPE_P (type))
7207 || (!SCALAR_FLOAT_MODE_P (orig_mode)
7208 && GET_MODE_CLASS (orig_mode) != MODE_INT
7209 && !ALL_SCALAR_FIXED_POINT_MODE_P (orig_mode))
7210 || !host_integerp (TYPE_SIZE_UNIT (type), 1)
7211 || TREE_CODE (type) == BOOLEAN_TYPE)
7212 {
7213 error ("invalid vector type for attribute %qE", name);
7214 return NULL_TREE;
7215 }
7216
7217 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
7218 {
7219 error ("vector size not an integral multiple of component size");
7220 return NULL;
7221 }
7222
7223 if (vecsize == 0)
7224 {
7225 error ("zero vector size");
7226 return NULL;
7227 }
7228
7229 /* Calculate how many units fit in the vector. */
7230 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
7231 if (nunits & (nunits - 1))
7232 {
7233 error ("number of components of the vector not a power of two");
7234 return NULL_TREE;
7235 }
7236
7237 new_type = build_vector_type (type, nunits);
7238
7239 /* Build back pointers if needed. */
7240 *node = lang_hooks.types.reconstruct_complex_type (*node, new_type);
7241
7242 return NULL_TREE;
7243 }
7244
7245 /* Handle the "nonnull" attribute. */
7246 static tree
7247 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
7248 tree args, int ARG_UNUSED (flags),
7249 bool *no_add_attrs)
7250 {
7251 tree type = *node;
7252 unsigned HOST_WIDE_INT attr_arg_num;
7253
7254 /* If no arguments are specified, all pointer arguments should be
7255 non-null. Verify a full prototype is given so that the arguments
7256 will have the correct types when we actually check them later. */
7257 if (!args)
7258 {
7259 if (!TYPE_ARG_TYPES (type))
7260 {
7261 error ("nonnull attribute without arguments on a non-prototype");
7262 *no_add_attrs = true;
7263 }
7264 return NULL_TREE;
7265 }
7266
7267 /* Argument list specified. Verify that each argument number references
7268 a pointer argument. */
7269 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
7270 {
7271 tree argument;
7272 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
7273
7274 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
7275 {
7276 error ("nonnull argument has invalid operand number (argument %lu)",
7277 (unsigned long) attr_arg_num);
7278 *no_add_attrs = true;
7279 return NULL_TREE;
7280 }
7281
7282 argument = TYPE_ARG_TYPES (type);
7283 if (argument)
7284 {
7285 for (ck_num = 1; ; ck_num++)
7286 {
7287 if (!argument || ck_num == arg_num)
7288 break;
7289 argument = TREE_CHAIN (argument);
7290 }
7291
7292 if (!argument
7293 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
7294 {
7295 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
7296 (unsigned long) attr_arg_num, (unsigned long) arg_num);
7297 *no_add_attrs = true;
7298 return NULL_TREE;
7299 }
7300
7301 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
7302 {
7303 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
7304 (unsigned long) attr_arg_num, (unsigned long) arg_num);
7305 *no_add_attrs = true;
7306 return NULL_TREE;
7307 }
7308 }
7309 }
7310
7311 return NULL_TREE;
7312 }
7313
7314 /* Check the argument list of a function call for null in argument slots
7315 that are marked as requiring a non-null pointer argument. The NARGS
7316 arguments are passed in the array ARGARRAY.
7317 */
7318
7319 static void
7320 check_function_nonnull (tree attrs, int nargs, tree *argarray)
7321 {
7322 tree a, args;
7323 int i;
7324
7325 for (a = attrs; a; a = TREE_CHAIN (a))
7326 {
7327 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
7328 {
7329 args = TREE_VALUE (a);
7330
7331 /* Walk the argument list. If we encounter an argument number we
7332 should check for non-null, do it. If the attribute has no args,
7333 then every pointer argument is checked (in which case the check
7334 for pointer type is done in check_nonnull_arg). */
7335 for (i = 0; i < nargs; i++)
7336 {
7337 if (!args || nonnull_check_p (args, i + 1))
7338 check_function_arguments_recurse (check_nonnull_arg, NULL,
7339 argarray[i],
7340 i + 1);
7341 }
7342 }
7343 }
7344 }
7345
7346 /* Check that the Nth argument of a function call (counting backwards
7347 from the end) is a (pointer)0. The NARGS arguments are passed in the
7348 array ARGARRAY. */
7349
7350 static void
7351 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
7352 {
7353 tree attr = lookup_attribute ("sentinel", attrs);
7354
7355 if (attr)
7356 {
7357 int len = 0;
7358 int pos = 0;
7359 tree sentinel;
7360
7361 /* Skip over the named arguments. */
7362 while (typelist && len < nargs)
7363 {
7364 typelist = TREE_CHAIN (typelist);
7365 len++;
7366 }
7367
7368 if (TREE_VALUE (attr))
7369 {
7370 tree p = TREE_VALUE (TREE_VALUE (attr));
7371 pos = TREE_INT_CST_LOW (p);
7372 }
7373
7374 /* The sentinel must be one of the varargs, i.e.
7375 in position >= the number of fixed arguments. */
7376 if ((nargs - 1 - pos) < len)
7377 {
7378 warning (OPT_Wformat,
7379 "not enough variable arguments to fit a sentinel");
7380 return;
7381 }
7382
7383 /* Validate the sentinel. */
7384 sentinel = argarray[nargs - 1 - pos];
7385 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
7386 || !integer_zerop (sentinel))
7387 /* Although __null (in C++) is only an integer we allow it
7388 nevertheless, as we are guaranteed that it's exactly
7389 as wide as a pointer, and we don't want to force
7390 users to cast the NULL they have written there.
7391 We warn with -Wstrict-null-sentinel, though. */
7392 && (warn_strict_null_sentinel || null_node != sentinel))
7393 warning (OPT_Wformat, "missing sentinel in function call");
7394 }
7395 }
7396
7397 /* Helper for check_function_nonnull; given a list of operands which
7398 must be non-null in ARGS, determine if operand PARAM_NUM should be
7399 checked. */
7400
7401 static bool
7402 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
7403 {
7404 unsigned HOST_WIDE_INT arg_num = 0;
7405
7406 for (; args; args = TREE_CHAIN (args))
7407 {
7408 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
7409
7410 gcc_assert (found);
7411
7412 if (arg_num == param_num)
7413 return true;
7414 }
7415 return false;
7416 }
7417
7418 /* Check that the function argument PARAM (which is operand number
7419 PARAM_NUM) is non-null. This is called by check_function_nonnull
7420 via check_function_arguments_recurse. */
7421
7422 static void
7423 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
7424 unsigned HOST_WIDE_INT param_num)
7425 {
7426 /* Just skip checking the argument if it's not a pointer. This can
7427 happen if the "nonnull" attribute was given without an operand
7428 list (which means to check every pointer argument). */
7429
7430 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
7431 return;
7432
7433 if (integer_zerop (param))
7434 warning (OPT_Wnonnull, "null argument where non-null required "
7435 "(argument %lu)", (unsigned long) param_num);
7436 }
7437
7438 /* Helper for nonnull attribute handling; fetch the operand number
7439 from the attribute argument list. */
7440
7441 static bool
7442 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
7443 {
7444 /* Verify the arg number is a constant. */
7445 if (TREE_CODE (arg_num_expr) != INTEGER_CST
7446 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
7447 return false;
7448
7449 *valp = TREE_INT_CST_LOW (arg_num_expr);
7450 return true;
7451 }
7452
7453 /* Handle a "nothrow" attribute; arguments as in
7454 struct attribute_spec.handler. */
7455
7456 static tree
7457 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7458 int ARG_UNUSED (flags), bool *no_add_attrs)
7459 {
7460 if (TREE_CODE (*node) == FUNCTION_DECL)
7461 TREE_NOTHROW (*node) = 1;
7462 /* ??? TODO: Support types. */
7463 else
7464 {
7465 warning (OPT_Wattributes, "%qE attribute ignored", name);
7466 *no_add_attrs = true;
7467 }
7468
7469 return NULL_TREE;
7470 }
7471
7472 /* Handle a "cleanup" attribute; arguments as in
7473 struct attribute_spec.handler. */
7474
7475 static tree
7476 handle_cleanup_attribute (tree *node, tree name, tree args,
7477 int ARG_UNUSED (flags), bool *no_add_attrs)
7478 {
7479 tree decl = *node;
7480 tree cleanup_id, cleanup_decl;
7481
7482 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
7483 for global destructors in C++. This requires infrastructure that
7484 we don't have generically at the moment. It's also not a feature
7485 we'd be missing too much, since we do have attribute constructor. */
7486 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
7487 {
7488 warning (OPT_Wattributes, "%qE attribute ignored", name);
7489 *no_add_attrs = true;
7490 return NULL_TREE;
7491 }
7492
7493 /* Verify that the argument is a function in scope. */
7494 /* ??? We could support pointers to functions here as well, if
7495 that was considered desirable. */
7496 cleanup_id = TREE_VALUE (args);
7497 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
7498 {
7499 error ("cleanup argument not an identifier");
7500 *no_add_attrs = true;
7501 return NULL_TREE;
7502 }
7503 cleanup_decl = lookup_name (cleanup_id);
7504 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
7505 {
7506 error ("cleanup argument not a function");
7507 *no_add_attrs = true;
7508 return NULL_TREE;
7509 }
7510
7511 /* That the function has proper type is checked with the
7512 eventual call to build_function_call. */
7513
7514 return NULL_TREE;
7515 }
7516
7517 /* Handle a "warn_unused_result" attribute. No special handling. */
7518
7519 static tree
7520 handle_warn_unused_result_attribute (tree *node, tree name,
7521 tree ARG_UNUSED (args),
7522 int ARG_UNUSED (flags), bool *no_add_attrs)
7523 {
7524 /* Ignore the attribute for functions not returning any value. */
7525 if (VOID_TYPE_P (TREE_TYPE (*node)))
7526 {
7527 warning (OPT_Wattributes, "%qE attribute ignored", name);
7528 *no_add_attrs = true;
7529 }
7530
7531 return NULL_TREE;
7532 }
7533
7534 /* Handle a "sentinel" attribute. */
7535
7536 static tree
7537 handle_sentinel_attribute (tree *node, tree name, tree args,
7538 int ARG_UNUSED (flags), bool *no_add_attrs)
7539 {
7540 tree params = TYPE_ARG_TYPES (*node);
7541
7542 if (!params)
7543 {
7544 warning (OPT_Wattributes,
7545 "%qE attribute requires prototypes with named arguments", name);
7546 *no_add_attrs = true;
7547 }
7548 else
7549 {
7550 while (TREE_CHAIN (params))
7551 params = TREE_CHAIN (params);
7552
7553 if (VOID_TYPE_P (TREE_VALUE (params)))
7554 {
7555 warning (OPT_Wattributes,
7556 "%qE attribute only applies to variadic functions", name);
7557 *no_add_attrs = true;
7558 }
7559 }
7560
7561 if (args)
7562 {
7563 tree position = TREE_VALUE (args);
7564
7565 if (TREE_CODE (position) != INTEGER_CST)
7566 {
7567 warning (OPT_Wattributes,
7568 "requested position is not an integer constant");
7569 *no_add_attrs = true;
7570 }
7571 else
7572 {
7573 if (tree_int_cst_lt (position, integer_zero_node))
7574 {
7575 warning (OPT_Wattributes,
7576 "requested position is less than zero");
7577 *no_add_attrs = true;
7578 }
7579 }
7580 }
7581
7582 return NULL_TREE;
7583 }
7584
7585 /* Handle a "type_generic" attribute. */
7586
7587 static tree
7588 handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
7589 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7590 bool * ARG_UNUSED (no_add_attrs))
7591 {
7592 tree params;
7593
7594 /* Ensure we have a function type. */
7595 gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
7596
7597 params = TYPE_ARG_TYPES (*node);
7598 while (params && ! VOID_TYPE_P (TREE_VALUE (params)))
7599 params = TREE_CHAIN (params);
7600
7601 /* Ensure we have a variadic function. */
7602 gcc_assert (!params);
7603
7604 return NULL_TREE;
7605 }
7606
7607 /* Handle a "target" attribute. */
7608
7609 static tree
7610 handle_target_attribute (tree *node, tree name, tree args, int flags,
7611 bool *no_add_attrs)
7612 {
7613 /* Ensure we have a function type. */
7614 if (TREE_CODE (*node) != FUNCTION_DECL)
7615 {
7616 warning (OPT_Wattributes, "%qE attribute ignored", name);
7617 *no_add_attrs = true;
7618 }
7619 else if (! targetm.target_option.valid_attribute_p (*node, name, args,
7620 flags))
7621 *no_add_attrs = true;
7622
7623 return NULL_TREE;
7624 }
7625
7626 /* Arguments being collected for optimization. */
7627 typedef const char *const_char_p; /* For DEF_VEC_P. */
7628 DEF_VEC_P(const_char_p);
7629 DEF_VEC_ALLOC_P(const_char_p, gc);
7630 static GTY(()) VEC(const_char_p, gc) *optimize_args;
7631
7632
7633 /* Inner function to convert a TREE_LIST to argv string to parse the optimize
7634 options in ARGS. ATTR_P is true if this is for attribute(optimize), and
7635 false for #pragma GCC optimize. */
7636
7637 bool
7638 parse_optimize_options (tree args, bool attr_p)
7639 {
7640 bool ret = true;
7641 unsigned opt_argc;
7642 unsigned i;
7643 int saved_flag_strict_aliasing;
7644 const char **opt_argv;
7645 tree ap;
7646
7647 /* Build up argv vector. Just in case the string is stored away, use garbage
7648 collected strings. */
7649 VEC_truncate (const_char_p, optimize_args, 0);
7650 VEC_safe_push (const_char_p, gc, optimize_args, NULL);
7651
7652 for (ap = args; ap != NULL_TREE; ap = TREE_CHAIN (ap))
7653 {
7654 tree value = TREE_VALUE (ap);
7655
7656 if (TREE_CODE (value) == INTEGER_CST)
7657 {
7658 char buffer[20];
7659 sprintf (buffer, "-O%ld", (long) TREE_INT_CST_LOW (value));
7660 VEC_safe_push (const_char_p, gc, optimize_args, ggc_strdup (buffer));
7661 }
7662
7663 else if (TREE_CODE (value) == STRING_CST)
7664 {
7665 /* Split string into multiple substrings. */
7666 size_t len = TREE_STRING_LENGTH (value);
7667 char *p = ASTRDUP (TREE_STRING_POINTER (value));
7668 char *end = p + len;
7669 char *comma;
7670 char *next_p = p;
7671
7672 while (next_p != NULL)
7673 {
7674 size_t len2;
7675 char *q, *r;
7676
7677 p = next_p;
7678 comma = strchr (p, ',');
7679 if (comma)
7680 {
7681 len2 = comma - p;
7682 *comma = '\0';
7683 next_p = comma+1;
7684 }
7685 else
7686 {
7687 len2 = end - p;
7688 next_p = NULL;
7689 }
7690
7691 r = q = (char *) ggc_alloc (len2 + 3);
7692
7693 /* If the user supplied -Oxxx or -fxxx, only allow -Oxxx or -fxxx
7694 options. */
7695 if (*p == '-' && p[1] != 'O' && p[1] != 'f')
7696 {
7697 ret = false;
7698 if (attr_p)
7699 warning (OPT_Wattributes,
7700 "Bad option %s to optimize attribute.", p);
7701 else
7702 warning (OPT_Wpragmas,
7703 "Bad option %s to pragma attribute", p);
7704 continue;
7705 }
7706
7707 if (*p != '-')
7708 {
7709 *r++ = '-';
7710
7711 /* Assume that Ox is -Ox, a numeric value is -Ox, a s by
7712 itself is -Os, and any other switch begins with a -f. */
7713 if ((*p >= '0' && *p <= '9')
7714 || (p[0] == 's' && p[1] == '\0'))
7715 *r++ = 'O';
7716 else if (*p != 'O')
7717 *r++ = 'f';
7718 }
7719
7720 memcpy (r, p, len2);
7721 r[len2] = '\0';
7722 VEC_safe_push (const_char_p, gc, optimize_args, q);
7723 }
7724
7725 }
7726 }
7727
7728 opt_argc = VEC_length (const_char_p, optimize_args);
7729 opt_argv = (const char **) alloca (sizeof (char *) * (opt_argc + 1));
7730
7731 for (i = 1; i < opt_argc; i++)
7732 opt_argv[i] = VEC_index (const_char_p, optimize_args, i);
7733
7734 saved_flag_strict_aliasing = flag_strict_aliasing;
7735
7736 /* Now parse the options. */
7737 decode_options (opt_argc, opt_argv);
7738
7739 /* Don't allow changing -fstrict-aliasing. */
7740 flag_strict_aliasing = saved_flag_strict_aliasing;
7741
7742 VEC_truncate (const_char_p, optimize_args, 0);
7743 return ret;
7744 }
7745
7746 /* For handling "optimize" attribute. arguments as in
7747 struct attribute_spec.handler. */
7748
7749 static tree
7750 handle_optimize_attribute (tree *node, tree name, tree args,
7751 int ARG_UNUSED (flags), bool *no_add_attrs)
7752 {
7753 /* Ensure we have a function type. */
7754 if (TREE_CODE (*node) != FUNCTION_DECL)
7755 {
7756 warning (OPT_Wattributes, "%qE attribute ignored", name);
7757 *no_add_attrs = true;
7758 }
7759 else
7760 {
7761 struct cl_optimization cur_opts;
7762 tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
7763
7764 /* Save current options. */
7765 cl_optimization_save (&cur_opts);
7766
7767 /* If we previously had some optimization options, use them as the
7768 default. */
7769 if (old_opts)
7770 cl_optimization_restore (TREE_OPTIMIZATION (old_opts));
7771
7772 /* Parse options, and update the vector. */
7773 parse_optimize_options (args, true);
7774 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
7775 = build_optimization_node ();
7776
7777 /* Restore current options. */
7778 cl_optimization_restore (&cur_opts);
7779 }
7780
7781 return NULL_TREE;
7782 }
7783 \f
7784 /* Check for valid arguments being passed to a function.
7785 ATTRS is a list of attributes. There are NARGS arguments in the array
7786 ARGARRAY. TYPELIST is the list of argument types for the function.
7787 */
7788 void
7789 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
7790 {
7791 /* Check for null being passed in a pointer argument that must be
7792 non-null. We also need to do this if format checking is enabled. */
7793
7794 if (warn_nonnull)
7795 check_function_nonnull (attrs, nargs, argarray);
7796
7797 /* Check for errors in format strings. */
7798
7799 if (warn_format || warn_missing_format_attribute)
7800 check_function_format (attrs, nargs, argarray);
7801
7802 if (warn_format)
7803 check_function_sentinel (attrs, nargs, argarray, typelist);
7804 }
7805
7806 /* Generic argument checking recursion routine. PARAM is the argument to
7807 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
7808 once the argument is resolved. CTX is context for the callback. */
7809 void
7810 check_function_arguments_recurse (void (*callback)
7811 (void *, tree, unsigned HOST_WIDE_INT),
7812 void *ctx, tree param,
7813 unsigned HOST_WIDE_INT param_num)
7814 {
7815 if (CONVERT_EXPR_P (param)
7816 && (TYPE_PRECISION (TREE_TYPE (param))
7817 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
7818 {
7819 /* Strip coercion. */
7820 check_function_arguments_recurse (callback, ctx,
7821 TREE_OPERAND (param, 0), param_num);
7822 return;
7823 }
7824
7825 if (TREE_CODE (param) == CALL_EXPR)
7826 {
7827 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
7828 tree attrs;
7829 bool found_format_arg = false;
7830
7831 /* See if this is a call to a known internationalization function
7832 that modifies a format arg. Such a function may have multiple
7833 format_arg attributes (for example, ngettext). */
7834
7835 for (attrs = TYPE_ATTRIBUTES (type);
7836 attrs;
7837 attrs = TREE_CHAIN (attrs))
7838 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
7839 {
7840 tree inner_arg;
7841 tree format_num_expr;
7842 int format_num;
7843 int i;
7844 call_expr_arg_iterator iter;
7845
7846 /* Extract the argument number, which was previously checked
7847 to be valid. */
7848 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
7849
7850 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
7851 && !TREE_INT_CST_HIGH (format_num_expr));
7852
7853 format_num = TREE_INT_CST_LOW (format_num_expr);
7854
7855 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
7856 inner_arg != 0;
7857 inner_arg = next_call_expr_arg (&iter), i++)
7858 if (i == format_num)
7859 {
7860 check_function_arguments_recurse (callback, ctx,
7861 inner_arg, param_num);
7862 found_format_arg = true;
7863 break;
7864 }
7865 }
7866
7867 /* If we found a format_arg attribute and did a recursive check,
7868 we are done with checking this argument. Otherwise, we continue
7869 and this will be considered a non-literal. */
7870 if (found_format_arg)
7871 return;
7872 }
7873
7874 if (TREE_CODE (param) == COND_EXPR)
7875 {
7876 /* Check both halves of the conditional expression. */
7877 check_function_arguments_recurse (callback, ctx,
7878 TREE_OPERAND (param, 1), param_num);
7879 check_function_arguments_recurse (callback, ctx,
7880 TREE_OPERAND (param, 2), param_num);
7881 return;
7882 }
7883
7884 (*callback) (ctx, param, param_num);
7885 }
7886
7887 /* Checks the number of arguments NARGS against the required number
7888 REQUIRED and issues an error if there is a mismatch. Returns true
7889 if the number of arguments is correct, otherwise false. */
7890
7891 static bool
7892 validate_nargs (tree fndecl, int nargs, int required)
7893 {
7894 if (nargs < required)
7895 {
7896 error ("not enough arguments to function %qE", fndecl);
7897 return false;
7898 }
7899 else if (nargs > required)
7900 {
7901 error ("too many arguments to function %qE", fndecl);
7902 return false;
7903 }
7904 return true;
7905 }
7906
7907 /* Verifies the NARGS arguments ARGS to the builtin function FNDECL.
7908 Returns false if there was an error, otherwise true. */
7909
7910 bool
7911 check_builtin_function_arguments (tree fndecl, int nargs, tree *args)
7912 {
7913 if (!DECL_BUILT_IN (fndecl)
7914 || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL)
7915 return true;
7916
7917 switch (DECL_FUNCTION_CODE (fndecl))
7918 {
7919 case BUILT_IN_CONSTANT_P:
7920 return validate_nargs (fndecl, nargs, 1);
7921
7922 case BUILT_IN_ISFINITE:
7923 case BUILT_IN_ISINF:
7924 case BUILT_IN_ISINF_SIGN:
7925 case BUILT_IN_ISNAN:
7926 case BUILT_IN_ISNORMAL:
7927 if (validate_nargs (fndecl, nargs, 1))
7928 {
7929 if (TREE_CODE (TREE_TYPE (args[0])) != REAL_TYPE)
7930 {
7931 error ("non-floating-point argument in call to "
7932 "function %qE", fndecl);
7933 return false;
7934 }
7935 return true;
7936 }
7937 return false;
7938
7939 case BUILT_IN_ISGREATER:
7940 case BUILT_IN_ISGREATEREQUAL:
7941 case BUILT_IN_ISLESS:
7942 case BUILT_IN_ISLESSEQUAL:
7943 case BUILT_IN_ISLESSGREATER:
7944 case BUILT_IN_ISUNORDERED:
7945 if (validate_nargs (fndecl, nargs, 2))
7946 {
7947 enum tree_code code0, code1;
7948 code0 = TREE_CODE (TREE_TYPE (args[0]));
7949 code1 = TREE_CODE (TREE_TYPE (args[1]));
7950 if (!((code0 == REAL_TYPE && code1 == REAL_TYPE)
7951 || (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
7952 || (code0 == INTEGER_TYPE && code1 == REAL_TYPE)))
7953 {
7954 error ("non-floating-point arguments in call to "
7955 "function %qE", fndecl);
7956 return false;
7957 }
7958 return true;
7959 }
7960 return false;
7961
7962 case BUILT_IN_FPCLASSIFY:
7963 if (validate_nargs (fndecl, nargs, 6))
7964 {
7965 unsigned i;
7966
7967 for (i=0; i<5; i++)
7968 if (TREE_CODE (args[i]) != INTEGER_CST)
7969 {
7970 error ("non-const integer argument %u in call to function %qE",
7971 i+1, fndecl);
7972 return false;
7973 }
7974
7975 if (TREE_CODE (TREE_TYPE (args[5])) != REAL_TYPE)
7976 {
7977 error ("non-floating-point argument in call to function %qE",
7978 fndecl);
7979 return false;
7980 }
7981 return true;
7982 }
7983 return false;
7984
7985 default:
7986 return true;
7987 }
7988 }
7989
7990 /* Function to help qsort sort FIELD_DECLs by name order. */
7991
7992 int
7993 field_decl_cmp (const void *x_p, const void *y_p)
7994 {
7995 const tree *const x = (const tree *const) x_p;
7996 const tree *const y = (const tree *const) y_p;
7997
7998 if (DECL_NAME (*x) == DECL_NAME (*y))
7999 /* A nontype is "greater" than a type. */
8000 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8001 if (DECL_NAME (*x) == NULL_TREE)
8002 return -1;
8003 if (DECL_NAME (*y) == NULL_TREE)
8004 return 1;
8005 if (DECL_NAME (*x) < DECL_NAME (*y))
8006 return -1;
8007 return 1;
8008 }
8009
8010 static struct {
8011 gt_pointer_operator new_value;
8012 void *cookie;
8013 } resort_data;
8014
8015 /* This routine compares two fields like field_decl_cmp but using the
8016 pointer operator in resort_data. */
8017
8018 static int
8019 resort_field_decl_cmp (const void *x_p, const void *y_p)
8020 {
8021 const tree *const x = (const tree *const) x_p;
8022 const tree *const y = (const tree *const) y_p;
8023
8024 if (DECL_NAME (*x) == DECL_NAME (*y))
8025 /* A nontype is "greater" than a type. */
8026 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8027 if (DECL_NAME (*x) == NULL_TREE)
8028 return -1;
8029 if (DECL_NAME (*y) == NULL_TREE)
8030 return 1;
8031 {
8032 tree d1 = DECL_NAME (*x);
8033 tree d2 = DECL_NAME (*y);
8034 resort_data.new_value (&d1, resort_data.cookie);
8035 resort_data.new_value (&d2, resort_data.cookie);
8036 if (d1 < d2)
8037 return -1;
8038 }
8039 return 1;
8040 }
8041
8042 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
8043
8044 void
8045 resort_sorted_fields (void *obj,
8046 void * ARG_UNUSED (orig_obj),
8047 gt_pointer_operator new_value,
8048 void *cookie)
8049 {
8050 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
8051 resort_data.new_value = new_value;
8052 resort_data.cookie = cookie;
8053 qsort (&sf->elts[0], sf->len, sizeof (tree),
8054 resort_field_decl_cmp);
8055 }
8056
8057 /* Subroutine of c_parse_error.
8058 Return the result of concatenating LHS and RHS. RHS is really
8059 a string literal, its first character is indicated by RHS_START and
8060 RHS_SIZE is its length (including the terminating NUL character).
8061
8062 The caller is responsible for deleting the returned pointer. */
8063
8064 static char *
8065 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
8066 {
8067 const int lhs_size = strlen (lhs);
8068 char *result = XNEWVEC (char, lhs_size + rhs_size);
8069 strncpy (result, lhs, lhs_size);
8070 strncpy (result + lhs_size, rhs_start, rhs_size);
8071 return result;
8072 }
8073
8074 /* Issue the error given by GMSGID, indicating that it occurred before
8075 TOKEN, which had the associated VALUE. */
8076
8077 void
8078 c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
8079 tree value, unsigned char token_flags)
8080 {
8081 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
8082
8083 char *message = NULL;
8084
8085 if (token_type == CPP_EOF)
8086 message = catenate_messages (gmsgid, " at end of input");
8087 else if (token_type == CPP_CHAR
8088 || token_type == CPP_WCHAR
8089 || token_type == CPP_CHAR16
8090 || token_type == CPP_CHAR32)
8091 {
8092 unsigned int val = TREE_INT_CST_LOW (value);
8093 const char *prefix;
8094
8095 switch (token_type)
8096 {
8097 default:
8098 prefix = "";
8099 break;
8100 case CPP_WCHAR:
8101 prefix = "L";
8102 break;
8103 case CPP_CHAR16:
8104 prefix = "u";
8105 break;
8106 case CPP_CHAR32:
8107 prefix = "U";
8108 break;
8109 }
8110
8111 if (val <= UCHAR_MAX && ISGRAPH (val))
8112 message = catenate_messages (gmsgid, " before %s'%c'");
8113 else
8114 message = catenate_messages (gmsgid, " before %s'\\x%x'");
8115
8116 error (message, prefix, val);
8117 free (message);
8118 message = NULL;
8119 }
8120 else if (token_type == CPP_STRING
8121 || token_type == CPP_WSTRING
8122 || token_type == CPP_STRING16
8123 || token_type == CPP_STRING32)
8124 message = catenate_messages (gmsgid, " before string constant");
8125 else if (token_type == CPP_NUMBER)
8126 message = catenate_messages (gmsgid, " before numeric constant");
8127 else if (token_type == CPP_NAME)
8128 {
8129 message = catenate_messages (gmsgid, " before %qE");
8130 error (message, value);
8131 free (message);
8132 message = NULL;
8133 }
8134 else if (token_type == CPP_PRAGMA)
8135 message = catenate_messages (gmsgid, " before %<#pragma%>");
8136 else if (token_type == CPP_PRAGMA_EOL)
8137 message = catenate_messages (gmsgid, " before end of line");
8138 else if (token_type < N_TTYPES)
8139 {
8140 message = catenate_messages (gmsgid, " before %qs token");
8141 error (message, cpp_type2name (token_type, token_flags));
8142 free (message);
8143 message = NULL;
8144 }
8145 else
8146 error (gmsgid);
8147
8148 if (message)
8149 {
8150 error (message);
8151 free (message);
8152 }
8153 #undef catenate_messages
8154 }
8155
8156 /* Callback from cpp_error for PFILE to print diagnostics from the
8157 preprocessor. The diagnostic is of type LEVEL, at location
8158 LOCATION unless this is after lexing and the compiler's location
8159 should be used instead, with column number possibly overridden by
8160 COLUMN_OVERRIDE if not zero; MSG is the translated message and AP
8161 the arguments. Returns true if a diagnostic was emitted, false
8162 otherwise. */
8163
8164 bool
8165 c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
8166 location_t location, unsigned int column_override,
8167 const char *msg, va_list *ap)
8168 {
8169 diagnostic_info diagnostic;
8170 diagnostic_t dlevel;
8171 int save_warn_system_headers = warn_system_headers;
8172 bool ret;
8173
8174 switch (level)
8175 {
8176 case CPP_DL_WARNING_SYSHDR:
8177 if (flag_no_output)
8178 return false;
8179 warn_system_headers = 1;
8180 /* Fall through. */
8181 case CPP_DL_WARNING:
8182 if (flag_no_output)
8183 return false;
8184 dlevel = DK_WARNING;
8185 break;
8186 case CPP_DL_PEDWARN:
8187 if (flag_no_output && !flag_pedantic_errors)
8188 return false;
8189 dlevel = DK_PEDWARN;
8190 break;
8191 case CPP_DL_ERROR:
8192 dlevel = DK_ERROR;
8193 break;
8194 case CPP_DL_ICE:
8195 dlevel = DK_ICE;
8196 break;
8197 case CPP_DL_NOTE:
8198 dlevel = DK_NOTE;
8199 break;
8200 case CPP_DL_FATAL:
8201 dlevel = DK_FATAL;
8202 break;
8203 default:
8204 gcc_unreachable ();
8205 }
8206 if (done_lexing)
8207 location = input_location;
8208 diagnostic_set_info_translated (&diagnostic, msg, ap,
8209 location, dlevel);
8210 if (column_override)
8211 diagnostic_override_column (&diagnostic, column_override);
8212 ret = report_diagnostic (&diagnostic);
8213 if (level == CPP_DL_WARNING_SYSHDR)
8214 warn_system_headers = save_warn_system_headers;
8215 return ret;
8216 }
8217
8218 /* Walk a gimplified function and warn for functions whose return value is
8219 ignored and attribute((warn_unused_result)) is set. This is done before
8220 inlining, so we don't have to worry about that. */
8221
8222 void
8223 c_warn_unused_result (gimple_seq seq)
8224 {
8225 tree fdecl, ftype;
8226 gimple_stmt_iterator i;
8227
8228 for (i = gsi_start (seq); !gsi_end_p (i); gsi_next (&i))
8229 {
8230 gimple g = gsi_stmt (i);
8231
8232 switch (gimple_code (g))
8233 {
8234 case GIMPLE_BIND:
8235 c_warn_unused_result (gimple_bind_body (g));
8236 break;
8237 case GIMPLE_TRY:
8238 c_warn_unused_result (gimple_try_eval (g));
8239 c_warn_unused_result (gimple_try_cleanup (g));
8240 break;
8241 case GIMPLE_CATCH:
8242 c_warn_unused_result (gimple_catch_handler (g));
8243 break;
8244 case GIMPLE_EH_FILTER:
8245 c_warn_unused_result (gimple_eh_filter_failure (g));
8246 break;
8247
8248 case GIMPLE_CALL:
8249 if (gimple_call_lhs (g))
8250 break;
8251
8252 /* This is a naked call, as opposed to a GIMPLE_CALL with an
8253 LHS. All calls whose value is ignored should be
8254 represented like this. Look for the attribute. */
8255 fdecl = gimple_call_fndecl (g);
8256 ftype = TREE_TYPE (TREE_TYPE (gimple_call_fn (g)));
8257
8258 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
8259 {
8260 location_t loc = gimple_location (g);
8261
8262 if (fdecl)
8263 warning (0, "%Hignoring return value of %qD, "
8264 "declared with attribute warn_unused_result",
8265 &loc, fdecl);
8266 else
8267 warning (0, "%Hignoring return value of function "
8268 "declared with attribute warn_unused_result",
8269 &loc);
8270 }
8271 break;
8272
8273 default:
8274 /* Not a container, not a call, or a call whose value is used. */
8275 break;
8276 }
8277 }
8278 }
8279
8280 /* Convert a character from the host to the target execution character
8281 set. cpplib handles this, mostly. */
8282
8283 HOST_WIDE_INT
8284 c_common_to_target_charset (HOST_WIDE_INT c)
8285 {
8286 /* Character constants in GCC proper are sign-extended under -fsigned-char,
8287 zero-extended under -fno-signed-char. cpplib insists that characters
8288 and character constants are always unsigned. Hence we must convert
8289 back and forth. */
8290 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
8291
8292 uc = cpp_host_to_exec_charset (parse_in, uc);
8293
8294 if (flag_signed_char)
8295 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
8296 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
8297 else
8298 return uc;
8299 }
8300
8301 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
8302 component references, with STOP_REF, or alternatively an INDIRECT_REF of
8303 NULL, at the bottom; much like the traditional rendering of offsetof as a
8304 macro. Returns the folded and properly cast result. */
8305
8306 static tree
8307 fold_offsetof_1 (tree expr, tree stop_ref)
8308 {
8309 enum tree_code code = PLUS_EXPR;
8310 tree base, off, t;
8311
8312 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
8313 return size_zero_node;
8314
8315 switch (TREE_CODE (expr))
8316 {
8317 case ERROR_MARK:
8318 return expr;
8319
8320 case VAR_DECL:
8321 error ("cannot apply %<offsetof%> to static data member %qD", expr);
8322 return error_mark_node;
8323
8324 case CALL_EXPR:
8325 case TARGET_EXPR:
8326 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
8327 return error_mark_node;
8328
8329 case INTEGER_CST:
8330 gcc_assert (integer_zerop (expr));
8331 return size_zero_node;
8332
8333 case NOP_EXPR:
8334 case INDIRECT_REF:
8335 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8336 gcc_assert (base == error_mark_node || base == size_zero_node);
8337 return base;
8338
8339 case COMPONENT_REF:
8340 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8341 if (base == error_mark_node)
8342 return base;
8343
8344 t = TREE_OPERAND (expr, 1);
8345 if (DECL_C_BIT_FIELD (t))
8346 {
8347 error ("attempt to take address of bit-field structure "
8348 "member %qD", t);
8349 return error_mark_node;
8350 }
8351 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
8352 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
8353 / BITS_PER_UNIT));
8354 break;
8355
8356 case ARRAY_REF:
8357 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8358 if (base == error_mark_node)
8359 return base;
8360
8361 t = TREE_OPERAND (expr, 1);
8362 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
8363 {
8364 code = MINUS_EXPR;
8365 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
8366 }
8367 t = convert (sizetype, t);
8368 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
8369 break;
8370
8371 case COMPOUND_EXPR:
8372 /* Handle static members of volatile structs. */
8373 t = TREE_OPERAND (expr, 1);
8374 gcc_assert (TREE_CODE (t) == VAR_DECL);
8375 return fold_offsetof_1 (t, stop_ref);
8376
8377 default:
8378 gcc_unreachable ();
8379 }
8380
8381 return size_binop (code, base, off);
8382 }
8383
8384 tree
8385 fold_offsetof (tree expr, tree stop_ref)
8386 {
8387 /* Convert back from the internal sizetype to size_t. */
8388 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
8389 }
8390
8391 /* Print an error message for an invalid lvalue. USE says
8392 how the lvalue is being used and so selects the error message. */
8393
8394 void
8395 lvalue_error (enum lvalue_use use)
8396 {
8397 switch (use)
8398 {
8399 case lv_assign:
8400 error ("lvalue required as left operand of assignment");
8401 break;
8402 case lv_increment:
8403 error ("lvalue required as increment operand");
8404 break;
8405 case lv_decrement:
8406 error ("lvalue required as decrement operand");
8407 break;
8408 case lv_addressof:
8409 error ("lvalue required as unary %<&%> operand");
8410 break;
8411 case lv_asm:
8412 error ("lvalue required in asm statement");
8413 break;
8414 default:
8415 gcc_unreachable ();
8416 }
8417 }
8418 \f
8419 /* *PTYPE is an incomplete array. Complete it with a domain based on
8420 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
8421 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8422 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
8423
8424 int
8425 complete_array_type (tree *ptype, tree initial_value, bool do_default)
8426 {
8427 tree maxindex, type, main_type, elt, unqual_elt;
8428 int failure = 0, quals;
8429 hashval_t hashcode = 0;
8430
8431 maxindex = size_zero_node;
8432 if (initial_value)
8433 {
8434 if (TREE_CODE (initial_value) == STRING_CST)
8435 {
8436 int eltsize
8437 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8438 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
8439 }
8440 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8441 {
8442 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
8443
8444 if (VEC_empty (constructor_elt, v))
8445 {
8446 if (pedantic)
8447 failure = 3;
8448 maxindex = integer_minus_one_node;
8449 }
8450 else
8451 {
8452 tree curindex;
8453 unsigned HOST_WIDE_INT cnt;
8454 constructor_elt *ce;
8455 bool fold_p = false;
8456
8457 if (VEC_index (constructor_elt, v, 0)->index)
8458 maxindex = fold_convert (sizetype,
8459 VEC_index (constructor_elt,
8460 v, 0)->index);
8461 curindex = maxindex;
8462
8463 for (cnt = 1;
8464 VEC_iterate (constructor_elt, v, cnt, ce);
8465 cnt++)
8466 {
8467 bool curfold_p = false;
8468 if (ce->index)
8469 curindex = ce->index, curfold_p = true;
8470 else
8471 {
8472 if (fold_p)
8473 curindex = fold_convert (sizetype, curindex);
8474 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
8475 }
8476 if (tree_int_cst_lt (maxindex, curindex))
8477 maxindex = curindex, fold_p = curfold_p;
8478 }
8479 if (fold_p)
8480 maxindex = fold_convert (sizetype, maxindex);
8481 }
8482 }
8483 else
8484 {
8485 /* Make an error message unless that happened already. */
8486 if (initial_value != error_mark_node)
8487 failure = 1;
8488 }
8489 }
8490 else
8491 {
8492 failure = 2;
8493 if (!do_default)
8494 return failure;
8495 }
8496
8497 type = *ptype;
8498 elt = TREE_TYPE (type);
8499 quals = TYPE_QUALS (strip_array_types (elt));
8500 if (quals == 0)
8501 unqual_elt = elt;
8502 else
8503 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
8504
8505 /* Using build_distinct_type_copy and modifying things afterward instead
8506 of using build_array_type to create a new type preserves all of the
8507 TYPE_LANG_FLAG_? bits that the front end may have set. */
8508 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
8509 TREE_TYPE (main_type) = unqual_elt;
8510 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
8511 layout_type (main_type);
8512
8513 /* Make sure we have the canonical MAIN_TYPE. */
8514 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
8515 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
8516 hashcode);
8517 main_type = type_hash_canon (hashcode, main_type);
8518
8519 /* Fix the canonical type. */
8520 if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (main_type))
8521 || TYPE_STRUCTURAL_EQUALITY_P (TYPE_DOMAIN (main_type)))
8522 SET_TYPE_STRUCTURAL_EQUALITY (main_type);
8523 else if (TYPE_CANONICAL (TREE_TYPE (main_type)) != TREE_TYPE (main_type)
8524 || (TYPE_CANONICAL (TYPE_DOMAIN (main_type))
8525 != TYPE_DOMAIN (main_type)))
8526 TYPE_CANONICAL (main_type)
8527 = build_array_type (TYPE_CANONICAL (TREE_TYPE (main_type)),
8528 TYPE_CANONICAL (TYPE_DOMAIN (main_type)));
8529 else
8530 TYPE_CANONICAL (main_type) = main_type;
8531
8532 if (quals == 0)
8533 type = main_type;
8534 else
8535 type = c_build_qualified_type (main_type, quals);
8536
8537 if (COMPLETE_TYPE_P (type)
8538 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8539 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8540 {
8541 error ("size of array is too large");
8542 /* If we proceed with the array type as it is, we'll eventually
8543 crash in tree_low_cst(). */
8544 type = error_mark_node;
8545 }
8546
8547 *ptype = type;
8548 return failure;
8549 }
8550
8551 \f
8552 /* Used to help initialize the builtin-types.def table. When a type of
8553 the correct size doesn't exist, use error_mark_node instead of NULL.
8554 The later results in segfaults even when a decl using the type doesn't
8555 get invoked. */
8556
8557 tree
8558 builtin_type_for_size (int size, bool unsignedp)
8559 {
8560 tree type = lang_hooks.types.type_for_size (size, unsignedp);
8561 return type ? type : error_mark_node;
8562 }
8563
8564 /* A helper function for resolve_overloaded_builtin in resolving the
8565 overloaded __sync_ builtins. Returns a positive power of 2 if the
8566 first operand of PARAMS is a pointer to a supported data type.
8567 Returns 0 if an error is encountered. */
8568
8569 static int
8570 sync_resolve_size (tree function, VEC(tree,gc) *params)
8571 {
8572 tree type;
8573 int size;
8574
8575 if (VEC_empty (tree, params))
8576 {
8577 error ("too few arguments to function %qE", function);
8578 return 0;
8579 }
8580
8581 type = TREE_TYPE (VEC_index (tree, params, 0));
8582 if (TREE_CODE (type) != POINTER_TYPE)
8583 goto incompatible;
8584
8585 type = TREE_TYPE (type);
8586 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
8587 goto incompatible;
8588
8589 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
8590 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
8591 return size;
8592
8593 incompatible:
8594 error ("incompatible type for argument %d of %qE", 1, function);
8595 return 0;
8596 }
8597
8598 /* A helper function for resolve_overloaded_builtin. Adds casts to
8599 PARAMS to make arguments match up with those of FUNCTION. Drops
8600 the variadic arguments at the end. Returns false if some error
8601 was encountered; true on success. */
8602
8603 static bool
8604 sync_resolve_params (tree orig_function, tree function, VEC(tree, gc) *params)
8605 {
8606 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
8607 tree ptype;
8608 int number;
8609 unsigned int parmnum;
8610
8611 /* We've declared the implementation functions to use "volatile void *"
8612 as the pointer parameter, so we shouldn't get any complaints from the
8613 call to check_function_arguments what ever type the user used. */
8614 arg_types = TREE_CHAIN (arg_types);
8615 ptype = TREE_TYPE (TREE_TYPE (VEC_index (tree, params, 0)));
8616 number = 2;
8617
8618 /* For the rest of the values, we need to cast these to FTYPE, so that we
8619 don't get warnings for passing pointer types, etc. */
8620 parmnum = 0;
8621 while (arg_types != void_list_node)
8622 {
8623 tree val;
8624
8625 ++parmnum;
8626 if (VEC_length (tree, params) <= parmnum)
8627 {
8628 error ("too few arguments to function %qE", orig_function);
8629 return false;
8630 }
8631
8632 /* ??? Ideally for the first conversion we'd use convert_for_assignment
8633 so that we get warnings for anything that doesn't match the pointer
8634 type. This isn't portable across the C and C++ front ends atm. */
8635 val = VEC_index (tree, params, parmnum);
8636 val = convert (ptype, val);
8637 val = convert (TREE_VALUE (arg_types), val);
8638 VEC_replace (tree, params, parmnum, val);
8639
8640 arg_types = TREE_CHAIN (arg_types);
8641 number++;
8642 }
8643
8644 /* The definition of these primitives is variadic, with the remaining
8645 being "an optional list of variables protected by the memory barrier".
8646 No clue what that's supposed to mean, precisely, but we consider all
8647 call-clobbered variables to be protected so we're safe. */
8648 VEC_truncate (tree, params, parmnum + 1);
8649
8650 return true;
8651 }
8652
8653 /* A helper function for resolve_overloaded_builtin. Adds a cast to
8654 RESULT to make it match the type of the first pointer argument in
8655 PARAMS. */
8656
8657 static tree
8658 sync_resolve_return (tree first_param, tree result)
8659 {
8660 tree ptype = TREE_TYPE (TREE_TYPE (first_param));
8661 ptype = TYPE_MAIN_VARIANT (ptype);
8662 return convert (ptype, result);
8663 }
8664
8665 /* Some builtin functions are placeholders for other expressions. This
8666 function should be called immediately after parsing the call expression
8667 before surrounding code has committed to the type of the expression.
8668
8669 LOC is the location of the builtin call.
8670
8671 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
8672 PARAMS is the argument list for the call. The return value is non-null
8673 when expansion is complete, and null if normal processing should
8674 continue. */
8675
8676 tree
8677 resolve_overloaded_builtin (location_t loc, tree function, VEC(tree,gc) *params)
8678 {
8679 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
8680 switch (DECL_BUILT_IN_CLASS (function))
8681 {
8682 case BUILT_IN_NORMAL:
8683 break;
8684 case BUILT_IN_MD:
8685 if (targetm.resolve_overloaded_builtin)
8686 return targetm.resolve_overloaded_builtin (loc, function, params);
8687 else
8688 return NULL_TREE;
8689 default:
8690 return NULL_TREE;
8691 }
8692
8693 /* Handle BUILT_IN_NORMAL here. */
8694 switch (orig_code)
8695 {
8696 case BUILT_IN_FETCH_AND_ADD_N:
8697 case BUILT_IN_FETCH_AND_SUB_N:
8698 case BUILT_IN_FETCH_AND_OR_N:
8699 case BUILT_IN_FETCH_AND_AND_N:
8700 case BUILT_IN_FETCH_AND_XOR_N:
8701 case BUILT_IN_FETCH_AND_NAND_N:
8702 case BUILT_IN_ADD_AND_FETCH_N:
8703 case BUILT_IN_SUB_AND_FETCH_N:
8704 case BUILT_IN_OR_AND_FETCH_N:
8705 case BUILT_IN_AND_AND_FETCH_N:
8706 case BUILT_IN_XOR_AND_FETCH_N:
8707 case BUILT_IN_NAND_AND_FETCH_N:
8708 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
8709 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
8710 case BUILT_IN_LOCK_TEST_AND_SET_N:
8711 case BUILT_IN_LOCK_RELEASE_N:
8712 {
8713 int n = sync_resolve_size (function, params);
8714 tree new_function, first_param, result;
8715
8716 if (n == 0)
8717 return error_mark_node;
8718
8719 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
8720 if (!sync_resolve_params (function, new_function, params))
8721 return error_mark_node;
8722
8723 first_param = VEC_index (tree, params, 0);
8724 result = build_function_call_vec (loc, new_function, params, NULL);
8725 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
8726 && orig_code != BUILT_IN_LOCK_RELEASE_N)
8727 result = sync_resolve_return (first_param, result);
8728
8729 return result;
8730 }
8731
8732 default:
8733 return NULL_TREE;
8734 }
8735 }
8736
8737 /* Ignoring their sign, return true if two scalar types are the same. */
8738 bool
8739 same_scalar_type_ignoring_signedness (tree t1, tree t2)
8740 {
8741 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
8742
8743 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
8744 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
8745 || c2 == FIXED_POINT_TYPE));
8746
8747 /* Equality works here because c_common_signed_type uses
8748 TYPE_MAIN_VARIANT. */
8749 return c_common_signed_type (t1)
8750 == c_common_signed_type (t2);
8751 }
8752
8753 /* Check for missing format attributes on function pointers. LTYPE is
8754 the new type or left-hand side type. RTYPE is the old type or
8755 right-hand side type. Returns TRUE if LTYPE is missing the desired
8756 attribute. */
8757
8758 bool
8759 check_missing_format_attribute (tree ltype, tree rtype)
8760 {
8761 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
8762 tree ra;
8763
8764 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
8765 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
8766 break;
8767 if (ra)
8768 {
8769 tree la;
8770 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
8771 if (is_attribute_p ("format", TREE_PURPOSE (la)))
8772 break;
8773 return !la;
8774 }
8775 else
8776 return false;
8777 }
8778
8779 /* Subscripting with type char is likely to lose on a machine where
8780 chars are signed. So warn on any machine, but optionally. Don't
8781 warn for unsigned char since that type is safe. Don't warn for
8782 signed char because anyone who uses that must have done so
8783 deliberately. Furthermore, we reduce the false positive load by
8784 warning only for non-constant value of type char. */
8785
8786 void
8787 warn_array_subscript_with_type_char (tree index)
8788 {
8789 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
8790 && TREE_CODE (index) != INTEGER_CST)
8791 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
8792 }
8793
8794 /* Implement -Wparentheses for the unexpected C precedence rules, to
8795 cover cases like x + y << z which readers are likely to
8796 misinterpret. We have seen an expression in which CODE is a binary
8797 operator used to combine expressions ARG_LEFT and ARG_RIGHT, which
8798 before folding had CODE_LEFT and CODE_RIGHT. CODE_LEFT and
8799 CODE_RIGHT may be ERROR_MARK, which means that that side of the
8800 expression was not formed using a binary or unary operator, or it
8801 was enclosed in parentheses. */
8802
8803 void
8804 warn_about_parentheses (enum tree_code code,
8805 enum tree_code code_left, tree arg_left,
8806 enum tree_code code_right, tree arg_right)
8807 {
8808 if (!warn_parentheses)
8809 return;
8810
8811 /* This macro tests that the expression ARG with original tree code
8812 CODE appears to be a boolean expression. or the result of folding a
8813 boolean expression. */
8814 #define APPEARS_TO_BE_BOOLEAN_EXPR_P(CODE, ARG) \
8815 (truth_value_p (TREE_CODE (ARG)) \
8816 || TREE_CODE (TREE_TYPE (ARG)) == BOOLEAN_TYPE \
8817 /* Folding may create 0 or 1 integers from other expressions. */ \
8818 || ((CODE) != INTEGER_CST \
8819 && (integer_onep (ARG) || integer_zerop (ARG))))
8820
8821 switch (code)
8822 {
8823 case LSHIFT_EXPR:
8824 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8825 warning (OPT_Wparentheses,
8826 "suggest parentheses around %<+%> inside %<<<%>");
8827 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8828 warning (OPT_Wparentheses,
8829 "suggest parentheses around %<-%> inside %<<<%>");
8830 return;
8831
8832 case RSHIFT_EXPR:
8833 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8834 warning (OPT_Wparentheses,
8835 "suggest parentheses around %<+%> inside %<>>%>");
8836 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8837 warning (OPT_Wparentheses,
8838 "suggest parentheses around %<-%> inside %<>>%>");
8839 return;
8840
8841 case TRUTH_ORIF_EXPR:
8842 if (code_left == TRUTH_ANDIF_EXPR || code_right == TRUTH_ANDIF_EXPR)
8843 warning (OPT_Wparentheses,
8844 "suggest parentheses around %<&&%> within %<||%>");
8845 return;
8846
8847 case BIT_IOR_EXPR:
8848 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
8849 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8850 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
8851 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8852 warning (OPT_Wparentheses,
8853 "suggest parentheses around arithmetic in operand of %<|%>");
8854 /* Check cases like x|y==z */
8855 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8856 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8857 warning (OPT_Wparentheses,
8858 "suggest parentheses around comparison in operand of %<|%>");
8859 /* Check cases like !x | y */
8860 else if (code_left == TRUTH_NOT_EXPR
8861 && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8862 warning (OPT_Wparentheses, "suggest parentheses around operand of "
8863 "%<!%> or change %<|%> to %<||%> or %<!%> to %<~%>");
8864 return;
8865
8866 case BIT_XOR_EXPR:
8867 if (code_left == BIT_AND_EXPR
8868 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8869 || code_right == BIT_AND_EXPR
8870 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8871 warning (OPT_Wparentheses,
8872 "suggest parentheses around arithmetic in operand of %<^%>");
8873 /* Check cases like x^y==z */
8874 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8875 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8876 warning (OPT_Wparentheses,
8877 "suggest parentheses around comparison in operand of %<^%>");
8878 return;
8879
8880 case BIT_AND_EXPR:
8881 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8882 warning (OPT_Wparentheses,
8883 "suggest parentheses around %<+%> in operand of %<&%>");
8884 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8885 warning (OPT_Wparentheses,
8886 "suggest parentheses around %<-%> in operand of %<&%>");
8887 /* Check cases like x&y==z */
8888 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8889 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8890 warning (OPT_Wparentheses,
8891 "suggest parentheses around comparison in operand of %<&%>");
8892 /* Check cases like !x & y */
8893 else if (code_left == TRUTH_NOT_EXPR
8894 && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8895 warning (OPT_Wparentheses, "suggest parentheses around operand of "
8896 "%<!%> or change %<&%> to %<&&%> or %<!%> to %<~%>");
8897 return;
8898
8899 case EQ_EXPR:
8900 if (TREE_CODE_CLASS (code_left) == tcc_comparison
8901 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8902 warning (OPT_Wparentheses,
8903 "suggest parentheses around comparison in operand of %<==%>");
8904 return;
8905 case NE_EXPR:
8906 if (TREE_CODE_CLASS (code_left) == tcc_comparison
8907 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8908 warning (OPT_Wparentheses,
8909 "suggest parentheses around comparison in operand of %<!=%>");
8910 return;
8911
8912 default:
8913 if (TREE_CODE_CLASS (code) == tcc_comparison
8914 && ((TREE_CODE_CLASS (code_left) == tcc_comparison
8915 && code_left != NE_EXPR && code_left != EQ_EXPR
8916 && INTEGRAL_TYPE_P (TREE_TYPE (arg_left)))
8917 || (TREE_CODE_CLASS (code_right) == tcc_comparison
8918 && code_right != NE_EXPR && code_right != EQ_EXPR
8919 && INTEGRAL_TYPE_P (TREE_TYPE (arg_right)))))
8920 warning (OPT_Wparentheses, "comparisons like %<X<=Y<=Z%> do not "
8921 "have their mathematical meaning");
8922 return;
8923 }
8924 #undef NOT_A_BOOLEAN_EXPR_P
8925 }
8926
8927 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
8928
8929 void
8930 warn_for_unused_label (tree label)
8931 {
8932 if (!TREE_USED (label))
8933 {
8934 if (DECL_INITIAL (label))
8935 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
8936 else
8937 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
8938 }
8939 }
8940
8941 #ifndef TARGET_HAS_TARGETCM
8942 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
8943 #endif
8944
8945 /* Warn for division by zero according to the value of DIVISOR. LOC
8946 is the location of the division operator. */
8947
8948 void
8949 warn_for_div_by_zero (location_t loc, tree divisor)
8950 {
8951 /* If DIVISOR is zero, and has integral or fixed-point type, issue a warning
8952 about division by zero. Do not issue a warning if DIVISOR has a
8953 floating-point type, since we consider 0.0/0.0 a valid way of
8954 generating a NaN. */
8955 if (skip_evaluation == 0
8956 && (integer_zerop (divisor) || fixed_zerop (divisor)))
8957 warning_at (loc, OPT_Wdiv_by_zero, "division by zero");
8958 }
8959
8960 /* Subroutine of build_binary_op. Give warnings for comparisons
8961 between signed and unsigned quantities that may fail. Do the
8962 checking based on the original operand trees ORIG_OP0 and ORIG_OP1,
8963 so that casts will be considered, but default promotions won't
8964 be.
8965
8966 LOCATION is the location of the comparison operator.
8967
8968 The arguments of this function map directly to local variables
8969 of build_binary_op. */
8970
8971 void
8972 warn_for_sign_compare (location_t location,
8973 tree orig_op0, tree orig_op1,
8974 tree op0, tree op1,
8975 tree result_type, enum tree_code resultcode)
8976 {
8977 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
8978 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
8979 int unsignedp0, unsignedp1;
8980
8981 /* In C++, check for comparison of different enum types. */
8982 if (c_dialect_cxx()
8983 && TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
8984 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
8985 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
8986 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
8987 {
8988 warning_at (location,
8989 OPT_Wsign_compare, "comparison between types %qT and %qT",
8990 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
8991 }
8992
8993 /* Do not warn if the comparison is being done in a signed type,
8994 since the signed type will only be chosen if it can represent
8995 all the values of the unsigned type. */
8996 if (!TYPE_UNSIGNED (result_type))
8997 /* OK */;
8998 /* Do not warn if both operands are unsigned. */
8999 else if (op0_signed == op1_signed)
9000 /* OK */;
9001 else
9002 {
9003 tree sop, uop, base_type;
9004 bool ovf;
9005
9006 if (op0_signed)
9007 sop = orig_op0, uop = orig_op1;
9008 else
9009 sop = orig_op1, uop = orig_op0;
9010
9011 STRIP_TYPE_NOPS (sop);
9012 STRIP_TYPE_NOPS (uop);
9013 base_type = (TREE_CODE (result_type) == COMPLEX_TYPE
9014 ? TREE_TYPE (result_type) : result_type);
9015
9016 /* Do not warn if the signed quantity is an unsuffixed integer
9017 literal (or some static constant expression involving such
9018 literals or a conditional expression involving such literals)
9019 and it is non-negative. */
9020 if (tree_expr_nonnegative_warnv_p (sop, &ovf))
9021 /* OK */;
9022 /* Do not warn if the comparison is an equality operation, the
9023 unsigned quantity is an integral constant, and it would fit
9024 in the result if the result were signed. */
9025 else if (TREE_CODE (uop) == INTEGER_CST
9026 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
9027 && int_fits_type_p (uop, c_common_signed_type (base_type)))
9028 /* OK */;
9029 /* In C, do not warn if the unsigned quantity is an enumeration
9030 constant and its maximum value would fit in the result if the
9031 result were signed. */
9032 else if (!c_dialect_cxx() && TREE_CODE (uop) == INTEGER_CST
9033 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
9034 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (uop)),
9035 c_common_signed_type (base_type)))
9036 /* OK */;
9037 else
9038 warning_at (location,
9039 OPT_Wsign_compare,
9040 "comparison between signed and unsigned integer expressions");
9041 }
9042
9043 /* Warn if two unsigned values are being compared in a size larger
9044 than their original size, and one (and only one) is the result of
9045 a `~' operator. This comparison will always fail.
9046
9047 Also warn if one operand is a constant, and the constant does not
9048 have all bits set that are set in the ~ operand when it is
9049 extended. */
9050
9051 op0 = get_narrower (op0, &unsignedp0);
9052 op1 = get_narrower (op1, &unsignedp1);
9053
9054 if ((TREE_CODE (op0) == BIT_NOT_EXPR)
9055 ^ (TREE_CODE (op1) == BIT_NOT_EXPR))
9056 {
9057 if (TREE_CODE (op0) == BIT_NOT_EXPR)
9058 op0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
9059 if (TREE_CODE (op1) == BIT_NOT_EXPR)
9060 op1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
9061
9062 if (host_integerp (op0, 0) || host_integerp (op1, 0))
9063 {
9064 tree primop;
9065 HOST_WIDE_INT constant, mask;
9066 int unsignedp;
9067 unsigned int bits;
9068
9069 if (host_integerp (op0, 0))
9070 {
9071 primop = op1;
9072 unsignedp = unsignedp1;
9073 constant = tree_low_cst (op0, 0);
9074 }
9075 else
9076 {
9077 primop = op0;
9078 unsignedp = unsignedp0;
9079 constant = tree_low_cst (op1, 0);
9080 }
9081
9082 bits = TYPE_PRECISION (TREE_TYPE (primop));
9083 if (bits < TYPE_PRECISION (result_type)
9084 && bits < HOST_BITS_PER_LONG && unsignedp)
9085 {
9086 mask = (~ (HOST_WIDE_INT) 0) << bits;
9087 if ((mask & constant) != mask)
9088 {
9089 if (constant == 0)
9090 warning (OPT_Wsign_compare,
9091 "promoted ~unsigned is always non-zero");
9092 else
9093 warning_at (location, OPT_Wsign_compare,
9094 "comparison of promoted ~unsigned with constant");
9095 }
9096 }
9097 }
9098 else if (unsignedp0 && unsignedp1
9099 && (TYPE_PRECISION (TREE_TYPE (op0))
9100 < TYPE_PRECISION (result_type))
9101 && (TYPE_PRECISION (TREE_TYPE (op1))
9102 < TYPE_PRECISION (result_type)))
9103 warning_at (location, OPT_Wsign_compare,
9104 "comparison of promoted ~unsigned with unsigned");
9105 }
9106 }
9107
9108 /* Setup a TYPE_DECL node as a typedef representation.
9109
9110 X is a TYPE_DECL for a typedef statement. Create a brand new
9111 ..._TYPE node (which will be just a variant of the existing
9112 ..._TYPE node with identical properties) and then install X
9113 as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
9114
9115 The whole point here is to end up with a situation where each
9116 and every ..._TYPE node the compiler creates will be uniquely
9117 associated with AT MOST one node representing a typedef name.
9118 This way, even though the compiler substitutes corresponding
9119 ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
9120 early on, later parts of the compiler can always do the reverse
9121 translation and get back the corresponding typedef name. For
9122 example, given:
9123
9124 typedef struct S MY_TYPE;
9125 MY_TYPE object;
9126
9127 Later parts of the compiler might only know that `object' was of
9128 type `struct S' if it were not for code just below. With this
9129 code however, later parts of the compiler see something like:
9130
9131 struct S' == struct S
9132 typedef struct S' MY_TYPE;
9133 struct S' object;
9134
9135 And they can then deduce (from the node for type struct S') that
9136 the original object declaration was:
9137
9138 MY_TYPE object;
9139
9140 Being able to do this is important for proper support of protoize,
9141 and also for generating precise symbolic debugging information
9142 which takes full account of the programmer's (typedef) vocabulary.
9143
9144 Obviously, we don't want to generate a duplicate ..._TYPE node if
9145 the TYPE_DECL node that we are now processing really represents a
9146 standard built-in type. */
9147
9148 void
9149 set_underlying_type (tree x)
9150 {
9151 if (x == error_mark_node)
9152 return;
9153 if (DECL_IS_BUILTIN (x))
9154 {
9155 if (TYPE_NAME (TREE_TYPE (x)) == 0)
9156 TYPE_NAME (TREE_TYPE (x)) = x;
9157 }
9158 else if (TREE_TYPE (x) != error_mark_node
9159 && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
9160 {
9161 tree tt = TREE_TYPE (x);
9162 DECL_ORIGINAL_TYPE (x) = tt;
9163 tt = build_variant_type_copy (tt);
9164 TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
9165 TYPE_NAME (tt) = x;
9166 TREE_USED (tt) = TREE_USED (x);
9167 TREE_TYPE (x) = tt;
9168 }
9169 }
9170
9171 /* Returns true if X is a typedef decl. */
9172
9173 bool
9174 is_typedef_decl (tree x)
9175 {
9176 return (x && TREE_CODE (x) == TYPE_DECL
9177 && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
9178 }
9179
9180 /* The C and C++ parsers both use vectors to hold function arguments.
9181 For efficiency, we keep a cache of unused vectors. This is the
9182 cache. */
9183
9184 typedef VEC(tree,gc)* tree_gc_vec;
9185 DEF_VEC_P(tree_gc_vec);
9186 DEF_VEC_ALLOC_P(tree_gc_vec,gc);
9187 static GTY((deletable)) VEC(tree_gc_vec,gc) *tree_vector_cache;
9188
9189 /* Return a new vector from the cache. If the cache is empty,
9190 allocate a new vector. These vectors are GC'ed, so it is OK if the
9191 pointer is not released.. */
9192
9193 VEC(tree,gc) *
9194 make_tree_vector (void)
9195 {
9196 if (!VEC_empty (tree_gc_vec, tree_vector_cache))
9197 return VEC_pop (tree_gc_vec, tree_vector_cache);
9198 else
9199 {
9200 /* Passing 0 to VEC_alloc returns NULL, and our callers require
9201 that we always return a non-NULL value. The vector code uses
9202 4 when growing a NULL vector, so we do too. */
9203 return VEC_alloc (tree, gc, 4);
9204 }
9205 }
9206
9207 /* Release a vector of trees back to the cache. */
9208
9209 void
9210 release_tree_vector (VEC(tree,gc) *vec)
9211 {
9212 if (vec != NULL)
9213 {
9214 VEC_truncate (tree, vec, 0);
9215 VEC_safe_push (tree_gc_vec, gc, tree_vector_cache, vec);
9216 }
9217 }
9218
9219 /* Get a new tree vector holding a single tree. */
9220
9221 VEC(tree,gc) *
9222 make_tree_vector_single (tree t)
9223 {
9224 VEC(tree,gc) *ret = make_tree_vector ();
9225 VEC_quick_push (tree, ret, t);
9226 return ret;
9227 }
9228
9229 /* Get a new tree vector which is a copy of an existing one. */
9230
9231 VEC(tree,gc) *
9232 make_tree_vector_copy (const VEC(tree,gc) *orig)
9233 {
9234 VEC(tree,gc) *ret;
9235 unsigned int ix;
9236 tree t;
9237
9238 ret = make_tree_vector ();
9239 VEC_reserve (tree, gc, ret, VEC_length (tree, orig));
9240 for (ix = 0; VEC_iterate (tree, orig, ix, t); ++ix)
9241 VEC_quick_push (tree, ret, t);
9242 return ret;
9243 }
9244
9245 #include "gt-c-common.h"