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.
6 This file is part of GCC.
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
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
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/>. */
24 #include "coretypes.h"
40 #include "langhooks.h"
41 #include "tree-inline.h"
44 #include "diagnostic.h"
45 #include "tree-iterator.h"
47 #include "tree-mudflap.h"
51 #include "target-def.h"
53 #include "fixed-value.h"
56 cpp_reader *parse_in; /* Declared in c-pragma.h. */
58 /* The following symbols are subsumed in the c_global_trees array, and
59 listed here individually for documentation purposes.
61 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
63 tree short_integer_type_node;
64 tree long_integer_type_node;
65 tree long_long_integer_type_node;
67 tree short_unsigned_type_node;
68 tree long_unsigned_type_node;
69 tree long_long_unsigned_type_node;
71 tree truthvalue_type_node;
72 tree truthvalue_false_node;
73 tree truthvalue_true_node;
75 tree ptrdiff_type_node;
77 tree unsigned_char_type_node;
78 tree signed_char_type_node;
81 tree char16_type_node;
82 tree char32_type_node;
85 tree double_type_node;
86 tree long_double_type_node;
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;
93 tree dfloat32_type_node;
94 tree dfloat64_type_node;
95 tree_dfloat128_type_node;
100 tree intDI_type_node;
101 tree intTI_type_node;
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;
109 tree widest_integer_literal_type_node;
110 tree widest_unsigned_literal_type_node;
112 Nodes for types `void *' and `const void *'.
114 tree ptr_type_node, const_ptr_type_node;
116 Nodes for types `char *' and `const char *'.
118 tree string_type_node, const_string_type_node;
120 Type `char[SOMENUMBER]'.
121 Used when an array of char is needed and the size is irrelevant.
123 tree char_array_type_node;
125 Type `int[SOMENUMBER]' or something like it.
126 Used when an array of int needed and the size is irrelevant.
128 tree int_array_type_node;
130 Type `wchar_t[SOMENUMBER]' or something like it.
131 Used when a wide string literal is created.
133 tree wchar_array_type_node;
135 Type `char16_t[SOMENUMBER]' or something like it.
136 Used when a UTF-16 string literal is created.
138 tree char16_array_type_node;
140 Type `char32_t[SOMENUMBER]' or something like it.
141 Used when a UTF-32 string literal is created.
143 tree char32_array_type_node;
145 Type `int ()' -- used for implicit declaration of functions.
147 tree default_function_type;
149 A VOID_TYPE node, packaged in a TREE_LIST.
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.)
157 tree function_name_decl_node;
158 tree pretty_function_name_decl_node;
159 tree c99_function_name_decl_node;
161 Stack of nested function name VAR_DECLs.
163 tree saved_function_name_decls;
167 tree c_global_trees[CTI_MAX];
169 /* Switches common to the C front ends. */
171 /* Nonzero if preprocessing only. */
173 int flag_preprocess_only;
175 /* Nonzero means don't output line number information. */
177 char flag_no_line_commands;
179 /* Nonzero causes -E output not to be done, but directives such as
180 #define that have side effects are still obeyed. */
184 /* Nonzero means dump macros in some fashion. */
186 char flag_dump_macros;
188 /* Nonzero means pass #include lines through to the output. */
190 char flag_dump_includes;
192 /* Nonzero means process PCH files while preprocessing. */
194 bool flag_pch_preprocess;
196 /* The file name to which we should write a precompiled header, or
197 NULL if no header will be written in this compile. */
199 const char *pch_file;
201 /* Nonzero if an ISO standard was selected. It rejects macros in the
205 /* Nonzero if -undef was given. It suppresses target built-in macros
209 /* Nonzero means don't recognize the non-ANSI builtin functions. */
213 /* Nonzero means don't recognize the non-ANSI builtin functions.
216 int flag_no_nonansi_builtin;
218 /* Nonzero means give `double' the same size as `float'. */
220 int flag_short_double;
222 /* Nonzero means give `wchar_t' the same size as `short'. */
224 int flag_short_wchar;
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;
230 /* Nonzero means allow Microsoft extensions without warnings or errors. */
231 int flag_ms_extensions;
233 /* Nonzero means don't recognize the keyword `asm'. */
237 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
239 int flag_signed_bitfields = 1;
241 /* Warn about #pragma directives that are not recognized. */
243 int warn_unknown_pragmas; /* Tri state variable. */
245 /* Warn about format/argument anomalies in calls to formatted I/O functions
246 (*printf, *scanf, strftime, strfmon, etc.). */
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
254 int warn_strict_null_sentinel;
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;
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;
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;
271 /* C/ObjC language option variables. */
274 /* Nonzero means allow type mismatches in conditional expressions;
275 just make their values `void'. */
277 int flag_cond_mismatch;
279 /* Nonzero means enable C89 Amendment 1 features. */
283 /* Nonzero means use the ISO C99 dialect of C. */
287 /* Nonzero means that we have builtin functions, and main is an int. */
292 /* ObjC language option variables. */
295 /* Open and close the file for outputting class declarations, if
298 int flag_gen_declaration;
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. */
304 int print_struct_values;
306 /* Tells the compiler what is the constant string class for ObjC. */
308 const char *constant_string_class_name;
311 /* C++ language option variables. */
314 /* Nonzero means don't recognize any extension keywords. */
316 int flag_no_gnu_keywords;
318 /* Nonzero means do emit exported implementations of functions even if
319 they can be inlined. */
321 int flag_implement_inlines = 1;
323 /* Nonzero means that implicit instantiations will be emitted if needed. */
325 int flag_implicit_templates = 1;
327 /* Nonzero means that implicit instantiations of inline templates will be
328 emitted if needed, even if instantiations of non-inline templates
331 int flag_implicit_inline_templates = 1;
333 /* Nonzero means generate separate instantiation control files and
334 juggle them at link time. */
336 int flag_use_repository;
338 /* Nonzero if we want to issue diagnostics that the standard says are not
341 int flag_optional_diags = 1;
343 /* Nonzero means we should attempt to elide constructors when possible. */
345 int flag_elide_constructors = 1;
347 /* Nonzero means that member functions defined in class scope are
348 inline by default. */
350 int flag_default_inline = 1;
352 /* Controls whether compiler generates 'type descriptor' that give
353 run-time type information. */
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
362 int flag_conserve_space;
364 /* Nonzero if we want to obey access control semantics. */
366 int flag_access_control = 1;
368 /* Nonzero if we want to check the return value of new and avoid calling
369 constructors if it is a null pointer. */
373 /* The C++ dialect being used. C++98 is the default. */
375 enum cxx_dialect cxx_dialect = cxx98;
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. */
384 int flag_new_for_scope = 1;
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. */
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. */
397 int flag_working_directory = -1;
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. */
403 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
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. */
408 int flag_use_cxa_get_exception_ptr = 2;
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. */
415 int flag_enforce_eh_specs = 1;
417 /* Nonzero means to generate thread-safe code for initializing local
420 int flag_threadsafe_statics = 1;
422 /* Nonzero if we want to pretty-print template specializations as the
423 template signature followed by the arguments. */
425 int flag_pretty_templates = 1;
427 /* Nonzero means warn about implicit declarations. */
429 int warn_implicit = 1;
431 /* Maximum template instantiation depth. This limit exists to limit the
432 time it takes to notice infinite template instantiations; the default
433 value of 1024 is likely to be in the next C++ standard. */
435 int max_tinst_depth = 1024;
439 /* The elements of `ridpointers' are identifier nodes for the reserved
440 type names and storage classes. It is indexed by a RID_... value. */
443 tree (*make_fname_decl) (location_t, tree, int);
445 /* Nonzero means don't warn about problems that occur when the code is
447 int c_inhibit_evaluation_warnings;
449 /* Whether lexing has been completed, so subsequent preprocessor
450 errors should use the compiler's input_location. */
451 bool done_lexing = false;
453 /* Information about how a function name is generated. */
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? */
461 /* The three ways of getting then name of the current function. */
463 const struct fname_var_t fname_vars[] =
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},
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 *);
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_noclone_attribute (tree *, tree, tree, int, bool *);
486 static tree handle_always_inline_attribute (tree *, tree, tree, int,
488 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
489 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
490 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
491 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
492 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
493 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
494 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
496 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
497 static tree handle_transparent_union_attribute (tree *, tree, tree,
499 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
500 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
501 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
502 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
503 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
504 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
505 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
506 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
507 static tree handle_visibility_attribute (tree *, tree, tree, int,
509 static tree handle_tls_model_attribute (tree *, tree, tree, int,
511 static tree handle_no_instrument_function_attribute (tree *, tree,
513 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
514 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
515 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
517 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
518 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
519 static tree handle_deprecated_attribute (tree *, tree, tree, int,
521 static tree handle_vector_size_attribute (tree *, tree, tree, int,
523 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
525 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
526 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
528 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
529 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_target_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_optimize_attribute (tree *, tree, tree, int, bool *);
534 static void check_function_nonnull (tree, int, tree *);
535 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
536 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
537 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
538 static int resort_field_decl_cmp (const void *, const void *);
540 /* Reserved words. The third field is a mask: keywords are disabled
541 if they match the mask.
544 C --std=c89: D_C99 | D_CXXONLY | D_OBJC | D_CXX_OBJC
545 C --std=c99: D_CXXONLY | D_OBJC
546 ObjC is like C except that D_OBJC and D_CXX_OBJC are not set
547 C++ --std=c98: D_CONLY | D_CXXOX | D_OBJC
548 C++ --std=c0x: D_CONLY | D_OBJC
549 ObjC++ is like C++ except that D_OBJC is not set
551 If -fno-asm is used, D_ASM is added to the mask. If
552 -fno-gnu-keywords is used, D_EXT is added. If -fno-asm and C in
553 C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords.
554 In C with -Wc++-compat, we warn if D_CXXWARN is set. */
556 const struct c_common_resword c_common_reswords[] =
558 { "_Bool", RID_BOOL, D_CONLY },
559 { "_Complex", RID_COMPLEX, 0 },
560 { "_Imaginary", RID_IMAGINARY, D_CONLY },
561 { "_Decimal32", RID_DFLOAT32, D_CONLY | D_EXT },
562 { "_Decimal64", RID_DFLOAT64, D_CONLY | D_EXT },
563 { "_Decimal128", RID_DFLOAT128, D_CONLY | D_EXT },
564 { "_Fract", RID_FRACT, D_CONLY | D_EXT },
565 { "_Accum", RID_ACCUM, D_CONLY | D_EXT },
566 { "_Sat", RID_SAT, D_CONLY | D_EXT },
567 { "__FUNCTION__", RID_FUNCTION_NAME, 0 },
568 { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
569 { "__alignof", RID_ALIGNOF, 0 },
570 { "__alignof__", RID_ALIGNOF, 0 },
571 { "__asm", RID_ASM, 0 },
572 { "__asm__", RID_ASM, 0 },
573 { "__attribute", RID_ATTRIBUTE, 0 },
574 { "__attribute__", RID_ATTRIBUTE, 0 },
575 { "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY },
576 { "__builtin_offsetof", RID_OFFSETOF, 0 },
577 { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
578 { "__builtin_va_arg", RID_VA_ARG, 0 },
579 { "__complex", RID_COMPLEX, 0 },
580 { "__complex__", RID_COMPLEX, 0 },
581 { "__const", RID_CONST, 0 },
582 { "__const__", RID_CONST, 0 },
583 { "__decltype", RID_DECLTYPE, D_CXXONLY },
584 { "__extension__", RID_EXTENSION, 0 },
585 { "__func__", RID_C99_FUNCTION_NAME, 0 },
586 { "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY },
587 { "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY },
588 { "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY },
589 { "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY },
590 { "__has_trivial_constructor", RID_HAS_TRIVIAL_CONSTRUCTOR, D_CXXONLY },
591 { "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY },
592 { "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY },
593 { "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY },
594 { "__is_abstract", RID_IS_ABSTRACT, D_CXXONLY },
595 { "__is_base_of", RID_IS_BASE_OF, D_CXXONLY },
596 { "__is_class", RID_IS_CLASS, D_CXXONLY },
597 { "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY },
598 { "__is_empty", RID_IS_EMPTY, D_CXXONLY },
599 { "__is_enum", RID_IS_ENUM, D_CXXONLY },
600 { "__is_pod", RID_IS_POD, D_CXXONLY },
601 { "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY },
602 { "__is_standard_layout", RID_IS_STD_LAYOUT, D_CXXONLY },
603 { "__is_trivial", RID_IS_TRIVIAL, D_CXXONLY },
604 { "__is_union", RID_IS_UNION, D_CXXONLY },
605 { "__imag", RID_IMAGPART, 0 },
606 { "__imag__", RID_IMAGPART, 0 },
607 { "__inline", RID_INLINE, 0 },
608 { "__inline__", RID_INLINE, 0 },
609 { "__label__", RID_LABEL, 0 },
610 { "__null", RID_NULL, 0 },
611 { "__real", RID_REALPART, 0 },
612 { "__real__", RID_REALPART, 0 },
613 { "__restrict", RID_RESTRICT, 0 },
614 { "__restrict__", RID_RESTRICT, 0 },
615 { "__signed", RID_SIGNED, 0 },
616 { "__signed__", RID_SIGNED, 0 },
617 { "__thread", RID_THREAD, 0 },
618 { "__typeof", RID_TYPEOF, 0 },
619 { "__typeof__", RID_TYPEOF, 0 },
620 { "__volatile", RID_VOLATILE, 0 },
621 { "__volatile__", RID_VOLATILE, 0 },
622 { "alignof", RID_ALIGNOF, D_CXXONLY | D_CXX0X | D_CXXWARN },
623 { "asm", RID_ASM, D_ASM },
624 { "auto", RID_AUTO, 0 },
625 { "bool", RID_BOOL, D_CXXONLY | D_CXXWARN },
626 { "break", RID_BREAK, 0 },
627 { "case", RID_CASE, 0 },
628 { "catch", RID_CATCH, D_CXX_OBJC | D_CXXWARN },
629 { "char", RID_CHAR, 0 },
630 { "char16_t", RID_CHAR16, D_CXXONLY | D_CXX0X | D_CXXWARN },
631 { "char32_t", RID_CHAR32, D_CXXONLY | D_CXX0X | D_CXXWARN },
632 { "class", RID_CLASS, D_CXX_OBJC | D_CXXWARN },
633 { "const", RID_CONST, 0 },
634 { "constexpr", RID_CONSTEXPR, D_CXXONLY | D_CXX0X | D_CXXWARN },
635 { "const_cast", RID_CONSTCAST, D_CXXONLY | D_CXXWARN },
636 { "continue", RID_CONTINUE, 0 },
637 { "decltype", RID_DECLTYPE, D_CXXONLY | D_CXX0X | D_CXXWARN },
638 { "default", RID_DEFAULT, 0 },
639 { "delete", RID_DELETE, D_CXXONLY | D_CXXWARN },
641 { "double", RID_DOUBLE, 0 },
642 { "dynamic_cast", RID_DYNCAST, D_CXXONLY | D_CXXWARN },
643 { "else", RID_ELSE, 0 },
644 { "enum", RID_ENUM, 0 },
645 { "explicit", RID_EXPLICIT, D_CXXONLY | D_CXXWARN },
646 { "export", RID_EXPORT, D_CXXONLY | D_CXXWARN },
647 { "extern", RID_EXTERN, 0 },
648 { "false", RID_FALSE, D_CXXONLY | D_CXXWARN },
649 { "float", RID_FLOAT, 0 },
650 { "for", RID_FOR, 0 },
651 { "friend", RID_FRIEND, D_CXXONLY | D_CXXWARN },
652 { "goto", RID_GOTO, 0 },
654 { "inline", RID_INLINE, D_EXT89 },
655 { "int", RID_INT, 0 },
656 { "long", RID_LONG, 0 },
657 { "mutable", RID_MUTABLE, D_CXXONLY | D_CXXWARN },
658 { "namespace", RID_NAMESPACE, D_CXXONLY | D_CXXWARN },
659 { "new", RID_NEW, D_CXXONLY | D_CXXWARN },
660 { "operator", RID_OPERATOR, D_CXXONLY | D_CXXWARN },
661 { "private", RID_PRIVATE, D_CXX_OBJC | D_CXXWARN },
662 { "protected", RID_PROTECTED, D_CXX_OBJC | D_CXXWARN },
663 { "public", RID_PUBLIC, D_CXX_OBJC | D_CXXWARN },
664 { "register", RID_REGISTER, 0 },
665 { "reinterpret_cast", RID_REINTCAST, D_CXXONLY | D_CXXWARN },
666 { "restrict", RID_RESTRICT, D_CONLY | D_C99 },
667 { "return", RID_RETURN, 0 },
668 { "short", RID_SHORT, 0 },
669 { "signed", RID_SIGNED, 0 },
670 { "sizeof", RID_SIZEOF, 0 },
671 { "static", RID_STATIC, 0 },
672 { "static_assert", RID_STATIC_ASSERT, D_CXXONLY | D_CXX0X | D_CXXWARN },
673 { "static_cast", RID_STATCAST, D_CXXONLY | D_CXXWARN },
674 { "struct", RID_STRUCT, 0 },
675 { "switch", RID_SWITCH, 0 },
676 { "template", RID_TEMPLATE, D_CXXONLY | D_CXXWARN },
677 { "this", RID_THIS, D_CXXONLY | D_CXXWARN },
678 { "throw", RID_THROW, D_CXX_OBJC | D_CXXWARN },
679 { "true", RID_TRUE, D_CXXONLY | D_CXXWARN },
680 { "try", RID_TRY, D_CXX_OBJC | D_CXXWARN },
681 { "typedef", RID_TYPEDEF, 0 },
682 { "typename", RID_TYPENAME, D_CXXONLY | D_CXXWARN },
683 { "typeid", RID_TYPEID, D_CXXONLY | D_CXXWARN },
684 { "typeof", RID_TYPEOF, D_ASM | D_EXT },
685 { "union", RID_UNION, 0 },
686 { "unsigned", RID_UNSIGNED, 0 },
687 { "using", RID_USING, D_CXXONLY | D_CXXWARN },
688 { "virtual", RID_VIRTUAL, D_CXXONLY | D_CXXWARN },
689 { "void", RID_VOID, 0 },
690 { "volatile", RID_VOLATILE, 0 },
691 { "wchar_t", RID_WCHAR, D_CXXONLY },
692 { "while", RID_WHILE, 0 },
693 /* These Objective-C keywords are recognized only immediately after
695 { "compatibility_alias", RID_AT_ALIAS, D_OBJC },
696 { "defs", RID_AT_DEFS, D_OBJC },
697 { "encode", RID_AT_ENCODE, D_OBJC },
698 { "end", RID_AT_END, D_OBJC },
699 { "implementation", RID_AT_IMPLEMENTATION, D_OBJC },
700 { "interface", RID_AT_INTERFACE, D_OBJC },
701 { "protocol", RID_AT_PROTOCOL, D_OBJC },
702 { "selector", RID_AT_SELECTOR, D_OBJC },
703 { "finally", RID_AT_FINALLY, D_OBJC },
704 { "synchronized", RID_AT_SYNCHRONIZED, D_OBJC },
705 /* These are recognized only in protocol-qualifier context
707 { "bycopy", RID_BYCOPY, D_OBJC },
708 { "byref", RID_BYREF, D_OBJC },
709 { "in", RID_IN, D_OBJC },
710 { "inout", RID_INOUT, D_OBJC },
711 { "oneway", RID_ONEWAY, D_OBJC },
712 { "out", RID_OUT, D_OBJC },
715 const unsigned int num_c_common_reswords =
716 sizeof c_common_reswords / sizeof (struct c_common_resword);
718 /* Table of machine-independent attributes common to all C-like languages. */
719 const struct attribute_spec c_common_attribute_table[] =
721 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
722 { "packed", 0, 0, false, false, false,
723 handle_packed_attribute },
724 { "nocommon", 0, 0, true, false, false,
725 handle_nocommon_attribute },
726 { "common", 0, 0, true, false, false,
727 handle_common_attribute },
728 /* FIXME: logically, noreturn attributes should be listed as
729 "false, true, true" and apply to function types. But implementing this
730 would require all the places in the compiler that use TREE_THIS_VOLATILE
731 on a decl to identify non-returning functions to be located and fixed
732 to check the function type instead. */
733 { "noreturn", 0, 0, true, false, false,
734 handle_noreturn_attribute },
735 { "volatile", 0, 0, true, false, false,
736 handle_noreturn_attribute },
737 { "noinline", 0, 0, true, false, false,
738 handle_noinline_attribute },
739 { "noclone", 0, 0, true, false, false,
740 handle_noclone_attribute },
741 { "always_inline", 0, 0, true, false, false,
742 handle_always_inline_attribute },
743 { "gnu_inline", 0, 0, true, false, false,
744 handle_gnu_inline_attribute },
745 { "artificial", 0, 0, true, false, false,
746 handle_artificial_attribute },
747 { "flatten", 0, 0, true, false, false,
748 handle_flatten_attribute },
749 { "used", 0, 0, true, false, false,
750 handle_used_attribute },
751 { "unused", 0, 0, false, false, false,
752 handle_unused_attribute },
753 { "externally_visible", 0, 0, true, false, false,
754 handle_externally_visible_attribute },
755 /* The same comments as for noreturn attributes apply to const ones. */
756 { "const", 0, 0, true, false, false,
757 handle_const_attribute },
758 { "transparent_union", 0, 0, false, false, false,
759 handle_transparent_union_attribute },
760 { "constructor", 0, 1, true, false, false,
761 handle_constructor_attribute },
762 { "destructor", 0, 1, true, false, false,
763 handle_destructor_attribute },
764 { "mode", 1, 1, false, true, false,
765 handle_mode_attribute },
766 { "section", 1, 1, true, false, false,
767 handle_section_attribute },
768 { "aligned", 0, 1, false, false, false,
769 handle_aligned_attribute },
770 { "weak", 0, 0, true, false, false,
771 handle_weak_attribute },
772 { "alias", 1, 1, true, false, false,
773 handle_alias_attribute },
774 { "weakref", 0, 1, true, false, false,
775 handle_weakref_attribute },
776 { "no_instrument_function", 0, 0, true, false, false,
777 handle_no_instrument_function_attribute },
778 { "malloc", 0, 0, true, false, false,
779 handle_malloc_attribute },
780 { "returns_twice", 0, 0, true, false, false,
781 handle_returns_twice_attribute },
782 { "no_stack_limit", 0, 0, true, false, false,
783 handle_no_limit_stack_attribute },
784 { "pure", 0, 0, true, false, false,
785 handle_pure_attribute },
786 /* For internal use (marking of builtins) only. The name contains space
787 to prevent its usage in source code. */
788 { "no vops", 0, 0, true, false, false,
789 handle_novops_attribute },
790 { "deprecated", 0, 1, false, false, false,
791 handle_deprecated_attribute },
792 { "vector_size", 1, 1, false, true, false,
793 handle_vector_size_attribute },
794 { "visibility", 1, 1, false, false, false,
795 handle_visibility_attribute },
796 { "tls_model", 1, 1, true, false, false,
797 handle_tls_model_attribute },
798 { "nonnull", 0, -1, false, true, true,
799 handle_nonnull_attribute },
800 { "nothrow", 0, 0, true, false, false,
801 handle_nothrow_attribute },
802 { "may_alias", 0, 0, false, true, false, NULL },
803 { "cleanup", 1, 1, true, false, false,
804 handle_cleanup_attribute },
805 { "warn_unused_result", 0, 0, false, true, true,
806 handle_warn_unused_result_attribute },
807 { "sentinel", 0, 1, false, true, true,
808 handle_sentinel_attribute },
809 /* For internal use (marking of builtins) only. The name contains space
810 to prevent its usage in source code. */
811 { "type generic", 0, 0, false, true, true,
812 handle_type_generic_attribute },
813 { "alloc_size", 1, 2, false, true, true,
814 handle_alloc_size_attribute },
815 { "cold", 0, 0, true, false, false,
816 handle_cold_attribute },
817 { "hot", 0, 0, true, false, false,
818 handle_hot_attribute },
819 { "warning", 1, 1, true, false, false,
820 handle_error_attribute },
821 { "error", 1, 1, true, false, false,
822 handle_error_attribute },
823 { "target", 1, -1, true, false, false,
824 handle_target_attribute },
825 { "optimize", 1, -1, true, false, false,
826 handle_optimize_attribute },
827 { NULL, 0, 0, false, false, false, NULL }
830 /* Give the specifications for the format attributes, used by C and all
833 const struct attribute_spec c_common_format_attribute_table[] =
835 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
836 { "format", 3, 3, false, true, true,
837 handle_format_attribute },
838 { "format_arg", 1, 1, false, true, true,
839 handle_format_arg_attribute },
840 { NULL, 0, 0, false, false, false, NULL }
843 /* Push current bindings for the function name VAR_DECLS. */
846 start_fname_decls (void)
849 tree saved = NULL_TREE;
851 for (ix = 0; fname_vars[ix].decl; ix++)
853 tree decl = *fname_vars[ix].decl;
857 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
858 *fname_vars[ix].decl = NULL_TREE;
861 if (saved || saved_function_name_decls)
862 /* Normally they'll have been NULL, so only push if we've got a
863 stack, or they are non-NULL. */
864 saved_function_name_decls = tree_cons (saved, NULL_TREE,
865 saved_function_name_decls);
868 /* Finish up the current bindings, adding them into the current function's
869 statement tree. This must be done _before_ finish_stmt_tree is called.
870 If there is no current function, we must be at file scope and no statements
871 are involved. Pop the previous bindings. */
874 finish_fname_decls (void)
877 tree stmts = NULL_TREE;
878 tree stack = saved_function_name_decls;
880 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
881 append_to_statement_list (TREE_VALUE (stack), &stmts);
885 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
887 if (TREE_CODE (*bodyp) == BIND_EXPR)
888 bodyp = &BIND_EXPR_BODY (*bodyp);
890 append_to_statement_list_force (*bodyp, &stmts);
894 for (ix = 0; fname_vars[ix].decl; ix++)
895 *fname_vars[ix].decl = NULL_TREE;
899 /* We had saved values, restore them. */
902 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
904 tree decl = TREE_PURPOSE (saved);
905 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
907 *fname_vars[ix].decl = decl;
909 stack = TREE_CHAIN (stack);
911 saved_function_name_decls = stack;
914 /* Return the text name of the current function, suitably prettified
915 by PRETTY_P. Return string must be freed by caller. */
918 fname_as_string (int pretty_p)
920 const char *name = "top level";
923 cpp_string cstr = { 0, 0 }, strname;
931 if (current_function_decl)
932 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
934 len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
936 namep = XNEWVEC (char, len);
937 snprintf (namep, len, "\"%s\"", name);
938 strname.text = (unsigned char *) namep;
939 strname.len = len - 1;
941 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, CPP_STRING))
944 return (const char *) cstr.text;
950 /* Return the VAR_DECL for a const char array naming the current
951 function. If the VAR_DECL has not yet been created, create it
952 now. RID indicates how it should be formatted and IDENTIFIER_NODE
953 ID is its name (unfortunately C and C++ hold the RID values of
954 keywords in different places, so we can't derive RID from ID in
955 this language independent code. LOC is the location of the
959 fname_decl (location_t loc, unsigned int rid, tree id)
962 tree decl = NULL_TREE;
964 for (ix = 0; fname_vars[ix].decl; ix++)
965 if (fname_vars[ix].rid == rid)
968 decl = *fname_vars[ix].decl;
971 /* If a tree is built here, it would normally have the lineno of
972 the current statement. Later this tree will be moved to the
973 beginning of the function and this line number will be wrong.
974 To avoid this problem set the lineno to 0 here; that prevents
975 it from appearing in the RTL. */
977 location_t saved_location = input_location;
978 input_location = UNKNOWN_LOCATION;
980 stmts = push_stmt_list ();
981 decl = (*make_fname_decl) (loc, id, fname_vars[ix].pretty);
982 stmts = pop_stmt_list (stmts);
983 if (!IS_EMPTY_STMT (stmts))
984 saved_function_name_decls
985 = tree_cons (decl, stmts, saved_function_name_decls);
986 *fname_vars[ix].decl = decl;
987 input_location = saved_location;
989 if (!ix && !current_function_decl)
990 pedwarn (loc, 0, "%qD is not defined outside of function scope", decl);
995 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
998 fix_string_type (tree value)
1000 int length = TREE_STRING_LENGTH (value);
1002 tree e_type, i_type, a_type;
1004 /* Compute the number of elements, for the array type. */
1005 if (TREE_TYPE (value) == char_array_type_node || !TREE_TYPE (value))
1008 e_type = char_type_node;
1010 else if (TREE_TYPE (value) == char16_array_type_node)
1012 nchars = length / (TYPE_PRECISION (char16_type_node) / BITS_PER_UNIT);
1013 e_type = char16_type_node;
1015 else if (TREE_TYPE (value) == char32_array_type_node)
1017 nchars = length / (TYPE_PRECISION (char32_type_node) / BITS_PER_UNIT);
1018 e_type = char32_type_node;
1022 nchars = length / (TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT);
1023 e_type = wchar_type_node;
1026 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
1027 limit in C++98 Annex B is very large (65536) and is not normative,
1028 so we do not diagnose it (warn_overlength_strings is forced off
1029 in c_common_post_options). */
1030 if (warn_overlength_strings)
1032 const int nchars_max = flag_isoc99 ? 4095 : 509;
1033 const int relevant_std = flag_isoc99 ? 99 : 90;
1034 if (nchars - 1 > nchars_max)
1035 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
1036 separate the %d from the 'C'. 'ISO' should not be
1037 translated, but it may be moved after 'C%d' in languages
1038 where modifiers follow nouns. */
1039 pedwarn (input_location, OPT_Woverlength_strings,
1040 "string length %qd is greater than the length %qd "
1041 "ISO C%d compilers are required to support",
1042 nchars - 1, nchars_max, relevant_std);
1045 /* Create the array type for the string constant. The ISO C++
1046 standard says that a string literal has type `const char[N]' or
1047 `const wchar_t[N]'. We use the same logic when invoked as a C
1048 front-end with -Wwrite-strings.
1049 ??? We should change the type of an expression depending on the
1050 state of a warning flag. We should just be warning -- see how
1051 this is handled in the C++ front-end for the deprecated implicit
1052 conversion from string literals to `char*' or `wchar_t*'.
1054 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
1055 array type being the unqualified version of that type.
1056 Therefore, if we are constructing an array of const char, we must
1057 construct the matching unqualified array type first. The C front
1058 end does not require this, but it does no harm, so we do it
1060 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
1061 a_type = build_array_type (e_type, i_type);
1062 if (c_dialect_cxx() || warn_write_strings)
1063 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
1065 TREE_TYPE (value) = a_type;
1066 TREE_CONSTANT (value) = 1;
1067 TREE_READONLY (value) = 1;
1068 TREE_STATIC (value) = 1;
1072 /* Fully fold EXPR, an expression that was not folded (beyond integer
1073 constant expressions and null pointer constants) when being built
1074 up. If IN_INIT, this is in a static initializer and certain
1075 changes are made to the folding done. Clear *MAYBE_CONST if
1076 MAYBE_CONST is not NULL and EXPR is definitely not a constant
1077 expression because it contains an evaluated operator (in C99) or an
1078 operator outside of sizeof returning an integer constant (in C90)
1079 not permitted in constant expressions, or because it contains an
1080 evaluated arithmetic overflow. (*MAYBE_CONST should typically be
1081 set to true by callers before calling this function.) Return the
1082 folded expression. Function arguments have already been folded
1083 before calling this function, as have the contents of SAVE_EXPR,
1084 TARGET_EXPR, BIND_EXPR, VA_ARG_EXPR, OBJ_TYPE_REF and
1085 C_MAYBE_CONST_EXPR. */
1088 c_fully_fold (tree expr, bool in_init, bool *maybe_const)
1091 tree eptype = NULL_TREE;
1093 bool maybe_const_itself = true;
1094 location_t loc = EXPR_LOCATION (expr);
1096 /* This function is not relevant to C++ because C++ folds while
1097 parsing, and may need changes to be correct for C++ when C++
1098 stops folding while parsing. */
1099 if (c_dialect_cxx ())
1103 maybe_const = &dummy;
1104 if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
1106 eptype = TREE_TYPE (expr);
1107 expr = TREE_OPERAND (expr, 0);
1109 ret = c_fully_fold_internal (expr, in_init, maybe_const,
1110 &maybe_const_itself);
1112 ret = fold_convert_loc (loc, eptype, ret);
1113 *maybe_const &= maybe_const_itself;
1117 /* Internal helper for c_fully_fold. EXPR and IN_INIT are as for
1118 c_fully_fold. *MAYBE_CONST_OPERANDS is cleared because of operands
1119 not permitted, while *MAYBE_CONST_ITSELF is cleared because of
1120 arithmetic overflow (for C90, *MAYBE_CONST_OPERANDS is carried from
1121 both evaluated and unevaluated subexpressions while
1122 *MAYBE_CONST_ITSELF is carried from only evaluated
1126 c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
1127 bool *maybe_const_itself)
1130 enum tree_code code = TREE_CODE (expr);
1131 enum tree_code_class kind = TREE_CODE_CLASS (code);
1132 location_t loc = EXPR_LOCATION (expr);
1133 tree op0, op1, op2, op3;
1134 tree orig_op0, orig_op1, orig_op2;
1135 bool op0_const = true, op1_const = true, op2_const = true;
1136 bool op0_const_self = true, op1_const_self = true, op2_const_self = true;
1137 bool nowarning = TREE_NO_WARNING (expr);
1140 /* This function is not relevant to C++ because C++ folds while
1141 parsing, and may need changes to be correct for C++ when C++
1142 stops folding while parsing. */
1143 if (c_dialect_cxx ())
1146 /* Constants, declarations, statements, errors, SAVE_EXPRs and
1147 anything else not counted as an expression cannot usefully be
1148 folded further at this point. */
1149 if (!IS_EXPR_CODE_CLASS (kind)
1150 || kind == tcc_statement
1151 || code == SAVE_EXPR)
1154 /* Operands of variable-length expressions (function calls) have
1155 already been folded, as have __builtin_* function calls, and such
1156 expressions cannot occur in constant expressions. */
1157 if (kind == tcc_vl_exp)
1159 *maybe_const_operands = false;
1164 if (code == C_MAYBE_CONST_EXPR)
1166 tree pre = C_MAYBE_CONST_EXPR_PRE (expr);
1167 tree inner = C_MAYBE_CONST_EXPR_EXPR (expr);
1168 if (C_MAYBE_CONST_EXPR_NON_CONST (expr))
1169 *maybe_const_operands = false;
1170 if (C_MAYBE_CONST_EXPR_INT_OPERANDS (expr))
1171 *maybe_const_itself = false;
1172 if (pre && !in_init)
1173 ret = build2 (COMPOUND_EXPR, TREE_TYPE (expr), pre, inner);
1179 /* Assignment, increment, decrement, function call and comma
1180 operators, and statement expressions, cannot occur in constant
1181 expressions if evaluated / outside of sizeof. (Function calls
1182 were handled above, though VA_ARG_EXPR is treated like a function
1183 call here, and statement expressions are handled through
1184 C_MAYBE_CONST_EXPR to avoid folding inside them.) */
1188 case PREDECREMENT_EXPR:
1189 case PREINCREMENT_EXPR:
1190 case POSTDECREMENT_EXPR:
1191 case POSTINCREMENT_EXPR:
1193 *maybe_const_operands = false;
1200 *maybe_const_operands = false;
1208 /* Fold individual tree codes as appropriate. */
1211 case COMPOUND_LITERAL_EXPR:
1212 /* Any non-constancy will have been marked in a containing
1213 C_MAYBE_CONST_EXPR; there is no more folding to do here. */
1217 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1218 op1 = TREE_OPERAND (expr, 1);
1219 op2 = TREE_OPERAND (expr, 2);
1220 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1221 maybe_const_itself);
1222 if (op0 != orig_op0)
1223 ret = build3 (COMPONENT_REF, TREE_TYPE (expr), op0, op1, op2);
1226 TREE_READONLY (ret) = TREE_READONLY (expr);
1227 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1232 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1233 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1234 op2 = TREE_OPERAND (expr, 2);
1235 op3 = TREE_OPERAND (expr, 3);
1236 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1237 maybe_const_itself);
1238 op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1239 maybe_const_itself);
1240 op1 = decl_constant_value_for_optimization (op1);
1241 if (op0 != orig_op0 || op1 != orig_op1)
1242 ret = build4 (ARRAY_REF, TREE_TYPE (expr), op0, op1, op2, op3);
1245 TREE_READONLY (ret) = TREE_READONLY (expr);
1246 TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1247 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1254 case PREDECREMENT_EXPR:
1255 case PREINCREMENT_EXPR:
1256 case POSTDECREMENT_EXPR:
1257 case POSTINCREMENT_EXPR:
1261 case POINTER_PLUS_EXPR:
1262 case TRUNC_DIV_EXPR:
1264 case FLOOR_DIV_EXPR:
1265 case TRUNC_MOD_EXPR:
1267 case EXACT_DIV_EXPR:
1280 case TRUTH_AND_EXPR:
1282 case TRUTH_XOR_EXPR:
1283 case UNORDERED_EXPR:
1290 /* Binary operations evaluating both arguments (increment and
1291 decrement are binary internally in GCC). */
1292 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1293 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1294 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1295 maybe_const_itself);
1296 if (code != MODIFY_EXPR
1297 && code != PREDECREMENT_EXPR
1298 && code != PREINCREMENT_EXPR
1299 && code != POSTDECREMENT_EXPR
1300 && code != POSTINCREMENT_EXPR)
1301 op0 = decl_constant_value_for_optimization (op0);
1302 /* The RHS of a MODIFY_EXPR was fully folded when building that
1303 expression for the sake of conversion warnings. */
1304 if (code != MODIFY_EXPR)
1305 op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1306 maybe_const_itself);
1307 op1 = decl_constant_value_for_optimization (op1);
1308 if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1310 ? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
1311 : fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);
1314 if (TREE_OVERFLOW_P (ret)
1315 && !TREE_OVERFLOW_P (op0)
1316 && !TREE_OVERFLOW_P (op1))
1317 overflow_warning (EXPR_LOCATION (expr), ret);
1321 case FIX_TRUNC_EXPR:
1324 case NON_LVALUE_EXPR:
1327 case TRUTH_NOT_EXPR:
1332 /* Unary operations. */
1333 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1334 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1335 maybe_const_itself);
1336 if (code != ADDR_EXPR && code != REALPART_EXPR && code != IMAGPART_EXPR)
1337 op0 = decl_constant_value_for_optimization (op0);
1338 if (op0 != orig_op0 || in_init)
1340 ? fold_build1_initializer_loc (loc, code, TREE_TYPE (expr), op0)
1341 : fold_build1_loc (loc, code, TREE_TYPE (expr), op0);
1344 if (code == INDIRECT_REF
1346 && TREE_CODE (ret) == INDIRECT_REF)
1348 TREE_READONLY (ret) = TREE_READONLY (expr);
1349 TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1350 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1354 case FIX_TRUNC_EXPR:
1357 /* Don't warn about explicit conversions. We will already
1358 have warned about suspect implicit conversions. */
1362 if (TREE_OVERFLOW_P (ret) && !TREE_OVERFLOW_P (op0))
1363 overflow_warning (EXPR_LOCATION (expr), ret);
1368 case TRUTH_ANDIF_EXPR:
1369 case TRUTH_ORIF_EXPR:
1370 /* Binary operations not necessarily evaluating both
1372 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1373 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1374 op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1376 unused_p = (op0 == (code == TRUTH_ANDIF_EXPR
1377 ? truthvalue_false_node
1378 : truthvalue_true_node));
1379 c_inhibit_evaluation_warnings += unused_p;
1380 op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1381 c_inhibit_evaluation_warnings -= unused_p;
1383 if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1385 ? fold_build2_initializer_loc (loc, code, TREE_TYPE (expr), op0, op1)
1386 : fold_build2_loc (loc, code, TREE_TYPE (expr), op0, op1);
1389 *maybe_const_operands &= op0_const;
1390 *maybe_const_itself &= op0_const_self;
1394 && (code == TRUTH_ANDIF_EXPR
1395 ? op0 == truthvalue_false_node
1396 : op0 == truthvalue_true_node)))
1397 *maybe_const_operands &= op1_const;
1400 && (code == TRUTH_ANDIF_EXPR
1401 ? op0 == truthvalue_false_node
1402 : op0 == truthvalue_true_node)))
1403 *maybe_const_itself &= op1_const_self;
1407 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1408 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1409 orig_op2 = op2 = TREE_OPERAND (expr, 2);
1410 op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1412 c_inhibit_evaluation_warnings += (op0 == truthvalue_false_node);
1413 op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1414 c_inhibit_evaluation_warnings -= (op0 == truthvalue_false_node);
1416 c_inhibit_evaluation_warnings += (op0 == truthvalue_true_node);
1417 op2 = c_fully_fold_internal (op2, in_init, &op2_const, &op2_const_self);
1418 c_inhibit_evaluation_warnings -= (op0 == truthvalue_true_node);
1420 if (op0 != orig_op0 || op1 != orig_op1 || op2 != orig_op2)
1421 ret = fold_build3_loc (loc, code, TREE_TYPE (expr), op0, op1, op2);
1424 *maybe_const_operands &= op0_const;
1425 *maybe_const_itself &= op0_const_self;
1429 && op0 == truthvalue_false_node))
1430 *maybe_const_operands &= op1_const;
1433 && op0 == truthvalue_false_node))
1434 *maybe_const_itself &= op1_const_self;
1438 && op0 == truthvalue_true_node))
1439 *maybe_const_operands &= op2_const;
1442 && op0 == truthvalue_true_node))
1443 *maybe_const_itself &= op2_const_self;
1446 case EXCESS_PRECISION_EXPR:
1447 /* Each case where an operand with excess precision may be
1448 encountered must remove the EXCESS_PRECISION_EXPR around
1449 inner operands and possibly put one around the whole
1450 expression or possibly convert to the semantic type (which
1451 c_fully_fold does); we cannot tell at this stage which is
1452 appropriate in any particular case. */
1456 /* Various codes may appear through folding built-in functions
1457 and their arguments. */
1462 /* Some folding may introduce NON_LVALUE_EXPRs; all lvalue checks
1463 have been done by this point, so remove them again. */
1464 nowarning |= TREE_NO_WARNING (ret);
1465 STRIP_TYPE_NOPS (ret);
1466 if (nowarning && !TREE_NO_WARNING (ret))
1468 if (!CAN_HAVE_LOCATION_P (ret))
1469 ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
1470 TREE_NO_WARNING (ret) = 1;
1473 protected_set_expr_location (ret, loc);
1477 /* If not optimizing, EXP is not a VAR_DECL, or EXP has array type,
1478 return EXP. Otherwise, return either EXP or its known constant
1479 value (if it has one), but return EXP if EXP has mode BLKmode. ???
1480 Is the BLKmode test appropriate? */
1483 decl_constant_value_for_optimization (tree exp)
1487 /* This function is only used by C, for c_fully_fold and other
1488 optimization, and may not be correct for C++. */
1489 if (c_dialect_cxx ())
1493 || TREE_CODE (exp) != VAR_DECL
1494 || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1495 || DECL_MODE (exp) == BLKmode)
1498 ret = decl_constant_value (exp);
1499 /* Avoid unwanted tree sharing between the initializer and current
1500 function's body where the tree can be modified e.g. by the
1502 if (ret != exp && TREE_STATIC (exp))
1503 ret = unshare_expr (ret);
1507 /* Print a warning if a constant expression had overflow in folding.
1508 Invoke this function on every expression that the language
1509 requires to be a constant expression.
1510 Note the ANSI C standard says it is erroneous for a
1511 constant expression to overflow. */
1514 constant_expression_warning (tree value)
1516 if (warn_overflow && pedantic
1517 && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1518 || TREE_CODE (value) == FIXED_CST
1519 || TREE_CODE (value) == VECTOR_CST
1520 || TREE_CODE (value) == COMPLEX_CST)
1521 && TREE_OVERFLOW (value))
1522 pedwarn (input_location, OPT_Woverflow, "overflow in constant expression");
1525 /* The same as above but print an unconditional error. */
1527 constant_expression_error (tree value)
1529 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1530 || TREE_CODE (value) == FIXED_CST
1531 || TREE_CODE (value) == VECTOR_CST
1532 || TREE_CODE (value) == COMPLEX_CST)
1533 && TREE_OVERFLOW (value))
1534 error ("overflow in constant expression");
1537 /* Print a warning if an expression had overflow in folding and its
1540 Invoke this function on every expression that
1541 (1) appears in the source code, and
1542 (2) is a constant expression that overflowed, and
1543 (3) is not already checked by convert_and_check;
1544 however, do not invoke this function on operands of explicit casts
1545 or when the expression is the result of an operator and any operand
1546 already overflowed. */
1549 overflow_warning (location_t loc, tree value)
1551 if (c_inhibit_evaluation_warnings != 0)
1554 switch (TREE_CODE (value))
1557 warning_at (loc, OPT_Woverflow, "integer overflow in expression");
1561 warning_at (loc, OPT_Woverflow,
1562 "floating point overflow in expression");
1566 warning_at (loc, OPT_Woverflow, "fixed-point overflow in expression");
1570 warning_at (loc, OPT_Woverflow, "vector overflow in expression");
1574 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
1575 warning_at (loc, OPT_Woverflow,
1576 "complex integer overflow in expression");
1577 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
1578 warning_at (loc, OPT_Woverflow,
1579 "complex floating point overflow in expression");
1587 /* Warn about uses of logical || / && operator in a context where it
1588 is likely that the bitwise equivalent was intended by the
1589 programmer. We have seen an expression in which CODE is a binary
1590 operator used to combine expressions OP_LEFT and OP_RIGHT, which before folding
1591 had CODE_LEFT and CODE_RIGHT, into an expression of type TYPE. */
1593 warn_logical_operator (location_t location, enum tree_code code, tree type,
1594 enum tree_code code_left, tree op_left,
1595 enum tree_code ARG_UNUSED (code_right), tree op_right)
1597 int or_op = (code == TRUTH_ORIF_EXPR || code == TRUTH_OR_EXPR);
1598 int in0_p, in1_p, in_p;
1599 tree low0, low1, low, high0, high1, high, lhs, rhs, tem;
1600 bool strict_overflow_p = false;
1602 if (code != TRUTH_ANDIF_EXPR
1603 && code != TRUTH_AND_EXPR
1604 && code != TRUTH_ORIF_EXPR
1605 && code != TRUTH_OR_EXPR)
1608 /* Warn if &&/|| are being used in a context where it is
1609 likely that the bitwise equivalent was intended by the
1610 programmer. That is, an expression such as op && MASK
1611 where op should not be any boolean expression, nor a
1612 constant, and mask seems to be a non-boolean integer constant. */
1613 if (!truth_value_p (code_left)
1614 && INTEGRAL_TYPE_P (TREE_TYPE (op_left))
1615 && !CONSTANT_CLASS_P (op_left)
1616 && !TREE_NO_WARNING (op_left)
1617 && TREE_CODE (op_right) == INTEGER_CST
1618 && !integer_zerop (op_right)
1619 && !integer_onep (op_right))
1622 warning_at (location, OPT_Wlogical_op, "logical %<or%>"
1623 " applied to non-boolean constant");
1625 warning_at (location, OPT_Wlogical_op, "logical %<and%>"
1626 " applied to non-boolean constant");
1627 TREE_NO_WARNING (op_left) = true;
1631 /* We do not warn for constants because they are typical of macro
1632 expansions that test for features. */
1633 if (CONSTANT_CLASS_P (op_left) || CONSTANT_CLASS_P (op_right))
1636 /* This warning only makes sense with logical operands. */
1637 if (!(truth_value_p (TREE_CODE (op_left))
1638 || INTEGRAL_TYPE_P (TREE_TYPE (op_left)))
1639 || !(truth_value_p (TREE_CODE (op_right))
1640 || INTEGRAL_TYPE_P (TREE_TYPE (op_right))))
1643 lhs = make_range (op_left, &in0_p, &low0, &high0, &strict_overflow_p);
1644 rhs = make_range (op_right, &in1_p, &low1, &high1, &strict_overflow_p);
1646 if (lhs && TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
1647 lhs = C_MAYBE_CONST_EXPR_EXPR (lhs);
1649 if (rhs && TREE_CODE (rhs) == C_MAYBE_CONST_EXPR)
1650 rhs = C_MAYBE_CONST_EXPR_EXPR (rhs);
1652 /* If this is an OR operation, invert both sides; we will invert
1653 again at the end. */
1655 in0_p = !in0_p, in1_p = !in1_p;
1657 /* If both expressions are the same, if we can merge the ranges, and we
1658 can build the range test, return it or it inverted. */
1659 if (lhs && rhs && operand_equal_p (lhs, rhs, 0)
1660 && merge_ranges (&in_p, &low, &high, in0_p, low0, high0,
1662 && 0 != (tem = build_range_check (UNKNOWN_LOCATION,
1663 type, lhs, in_p, low, high)))
1665 if (TREE_CODE (tem) != INTEGER_CST)
1669 warning_at (location, OPT_Wlogical_op,
1671 "of collectively exhaustive tests is always true");
1673 warning_at (location, OPT_Wlogical_op,
1675 "of mutually exclusive tests is always false");
1680 /* Print a warning about casts that might indicate violation
1681 of strict aliasing rules if -Wstrict-aliasing is used and
1682 strict aliasing mode is in effect. OTYPE is the original
1683 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1686 strict_aliasing_warning (tree otype, tree type, tree expr)
1688 /* Strip pointer conversion chains and get to the correct original type. */
1690 otype = TREE_TYPE (expr);
1692 if (!(flag_strict_aliasing
1693 && POINTER_TYPE_P (type)
1694 && POINTER_TYPE_P (otype)
1695 && !VOID_TYPE_P (TREE_TYPE (type)))
1696 /* If the type we are casting to is a ref-all pointer
1697 dereferencing it is always valid. */
1698 || TYPE_REF_CAN_ALIAS_ALL (type))
1701 if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1702 && (DECL_P (TREE_OPERAND (expr, 0))
1703 || handled_component_p (TREE_OPERAND (expr, 0))))
1705 /* Casting the address of an object to non void pointer. Warn
1706 if the cast breaks type based aliasing. */
1707 if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1709 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1710 "might break strict-aliasing rules");
1715 /* warn_strict_aliasing >= 3. This includes the default (3).
1716 Only warn if the cast is dereferenced immediately. */
1717 alias_set_type set1 =
1718 get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1719 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1721 if (set1 != set2 && set2 != 0
1722 && (set1 == 0 || !alias_sets_conflict_p (set1, set2)))
1724 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1725 "pointer will break strict-aliasing rules");
1728 else if (warn_strict_aliasing == 2
1729 && !alias_sets_must_conflict_p (set1, set2))
1731 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1732 "pointer might break strict-aliasing rules");
1738 if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1740 /* At this level, warn for any conversions, even if an address is
1741 not taken in the same statement. This will likely produce many
1742 false positives, but could be useful to pinpoint problems that
1743 are not revealed at higher levels. */
1744 alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1745 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1746 if (!COMPLETE_TYPE_P (type)
1747 || !alias_sets_must_conflict_p (set1, set2))
1749 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1750 "pointer might break strict-aliasing rules");
1758 /* Warn for unlikely, improbable, or stupid DECL declarations
1762 check_main_parameter_types (tree decl)
1767 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1768 args = TREE_CHAIN (args))
1770 tree type = args ? TREE_VALUE (args) : 0;
1772 if (type == void_type_node || type == error_mark_node )
1779 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1780 pedwarn (input_location, OPT_Wmain, "first argument of %q+D should be %<int%>",
1785 if (TREE_CODE (type) != POINTER_TYPE
1786 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1787 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1789 pedwarn (input_location, OPT_Wmain, "second argument of %q+D should be %<char **%>",
1794 if (TREE_CODE (type) != POINTER_TYPE
1795 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1796 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1798 pedwarn (input_location, OPT_Wmain, "third argument of %q+D should probably be "
1799 "%<char **%>", decl);
1804 /* It is intentional that this message does not mention the third
1805 argument because it's only mentioned in an appendix of the
1807 if (argct > 0 && (argct < 2 || argct > 3))
1808 pedwarn (input_location, OPT_Wmain, "%q+D takes only zero or two arguments", decl);
1811 /* True if pointers to distinct types T1 and T2 can be converted to
1812 each other without an explicit cast. Only returns true for opaque
1815 vector_targets_convertible_p (const_tree t1, const_tree t2)
1817 if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
1818 && (TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1819 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1825 /* True if vector types T1 and T2 can be converted to each other
1826 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1827 can only be converted with -flax-vector-conversions yet that is not
1828 in effect, emit a note telling the user about that option if such
1829 a note has not previously been emitted. */
1831 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1833 static bool emitted_lax_note = false;
1834 bool convertible_lax;
1836 if ((TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
1837 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1841 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1842 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1843 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1844 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1845 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1847 if (!convertible_lax || flag_lax_vector_conversions)
1848 return convertible_lax;
1850 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1851 && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1854 if (emit_lax_note && !emitted_lax_note)
1856 emitted_lax_note = true;
1857 inform (input_location, "use -flax-vector-conversions to permit "
1858 "conversions between vectors with differing "
1859 "element types or numbers of subparts");
1865 /* This is a helper function of build_binary_op.
1867 For certain operations if both args were extended from the same
1868 smaller type, do the arithmetic in that type and then extend.
1870 BITWISE indicates a bitwise operation.
1871 For them, this optimization is safe only if
1872 both args are zero-extended or both are sign-extended.
1873 Otherwise, we might change the result.
1874 Eg, (short)-1 | (unsigned short)-1 is (int)-1
1875 but calculated in (unsigned short) it would be (unsigned short)-1.
1877 tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise)
1879 int unsigned0, unsigned1;
1884 /* Cast OP0 and OP1 to RESULT_TYPE. Doing so prevents
1885 excessive narrowing when we call get_narrower below. For
1886 example, suppose that OP0 is of unsigned int extended
1887 from signed char and that RESULT_TYPE is long long int.
1888 If we explicitly cast OP0 to RESULT_TYPE, OP0 would look
1891 (long long int) (unsigned int) signed_char
1893 which get_narrower would narrow down to
1895 (unsigned int) signed char
1897 If we do not cast OP0 first, get_narrower would return
1898 signed_char, which is inconsistent with the case of the
1900 op0 = convert (result_type, op0);
1901 op1 = convert (result_type, op1);
1903 arg0 = get_narrower (op0, &unsigned0);
1904 arg1 = get_narrower (op1, &unsigned1);
1906 /* UNS is 1 if the operation to be done is an unsigned one. */
1907 uns = TYPE_UNSIGNED (result_type);
1909 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
1910 but it *requires* conversion to FINAL_TYPE. */
1912 if ((TYPE_PRECISION (TREE_TYPE (op0))
1913 == TYPE_PRECISION (TREE_TYPE (arg0)))
1914 && TREE_TYPE (op0) != result_type)
1915 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1916 if ((TYPE_PRECISION (TREE_TYPE (op1))
1917 == TYPE_PRECISION (TREE_TYPE (arg1)))
1918 && TREE_TYPE (op1) != result_type)
1919 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1921 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
1923 /* For bitwise operations, signedness of nominal type
1924 does not matter. Consider only how operands were extended. */
1928 /* Note that in all three cases below we refrain from optimizing
1929 an unsigned operation on sign-extended args.
1930 That would not be valid. */
1932 /* Both args variable: if both extended in same way
1933 from same width, do it in that width.
1934 Do it unsigned if args were zero-extended. */
1935 if ((TYPE_PRECISION (TREE_TYPE (arg0))
1936 < TYPE_PRECISION (result_type))
1937 && (TYPE_PRECISION (TREE_TYPE (arg1))
1938 == TYPE_PRECISION (TREE_TYPE (arg0)))
1939 && unsigned0 == unsigned1
1940 && (unsigned0 || !uns))
1941 return c_common_signed_or_unsigned_type
1942 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
1944 else if (TREE_CODE (arg0) == INTEGER_CST
1945 && (unsigned1 || !uns)
1946 && (TYPE_PRECISION (TREE_TYPE (arg1))
1947 < TYPE_PRECISION (result_type))
1949 = c_common_signed_or_unsigned_type (unsigned1,
1951 && !POINTER_TYPE_P (type)
1952 && int_fits_type_p (arg0, type))
1955 else if (TREE_CODE (arg1) == INTEGER_CST
1956 && (unsigned0 || !uns)
1957 && (TYPE_PRECISION (TREE_TYPE (arg0))
1958 < TYPE_PRECISION (result_type))
1960 = c_common_signed_or_unsigned_type (unsigned0,
1962 && !POINTER_TYPE_P (type)
1963 && int_fits_type_p (arg1, type))
1969 /* Warns if the conversion of EXPR to TYPE may alter a value.
1970 This is a helper function for warnings_for_convert_and_check. */
1973 conversion_warning (tree type, tree expr)
1975 bool give_warning = false;
1978 const int expr_num_operands = TREE_OPERAND_LENGTH (expr);
1979 tree expr_type = TREE_TYPE (expr);
1981 if (!warn_conversion && !warn_sign_conversion)
1984 /* If any operand is artificial, then this expression was generated
1985 by the compiler and we do not warn. */
1986 for (i = 0; i < expr_num_operands; i++)
1988 tree op = TREE_OPERAND (expr, i);
1989 if (op && DECL_P (op) && DECL_ARTIFICIAL (op))
1993 switch (TREE_CODE (expr))
2001 case TRUTH_ANDIF_EXPR:
2002 case TRUTH_ORIF_EXPR:
2003 case TRUTH_AND_EXPR:
2005 case TRUTH_XOR_EXPR:
2006 case TRUTH_NOT_EXPR:
2007 /* Conversion from boolean to a signed:1 bit-field (which only
2008 can hold the values 0 and -1) doesn't lose information - but
2009 it does change the value. */
2010 if (TYPE_PRECISION (type) == 1 && !TYPE_UNSIGNED (type))
2011 warning (OPT_Wconversion,
2012 "conversion to %qT from boolean expression", type);
2018 /* Warn for real constant that is not an exact integer converted
2020 if (TREE_CODE (expr_type) == REAL_TYPE
2021 && TREE_CODE (type) == INTEGER_TYPE)
2023 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (expr_type)))
2024 give_warning = true;
2026 /* Warn for an integer constant that does not fit into integer type. */
2027 else if (TREE_CODE (expr_type) == INTEGER_TYPE
2028 && TREE_CODE (type) == INTEGER_TYPE
2029 && !int_fits_type_p (expr, type))
2031 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)
2032 && tree_int_cst_sgn (expr) < 0)
2033 warning (OPT_Wsign_conversion,
2034 "negative integer implicitly converted to unsigned type");
2035 else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (expr_type))
2036 warning (OPT_Wsign_conversion, "conversion of unsigned constant "
2037 "value to negative integer");
2039 give_warning = true;
2041 else if (TREE_CODE (type) == REAL_TYPE)
2043 /* Warn for an integer constant that does not fit into real type. */
2044 if (TREE_CODE (expr_type) == INTEGER_TYPE)
2046 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
2047 if (!exact_real_truncate (TYPE_MODE (type), &a))
2048 give_warning = true;
2050 /* Warn for a real constant that does not fit into a smaller
2052 else if (TREE_CODE (expr_type) == REAL_TYPE
2053 && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2055 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
2056 if (!exact_real_truncate (TYPE_MODE (type), &a))
2057 give_warning = true;
2062 warning (OPT_Wconversion,
2063 "conversion to %qT alters %qT constant value",
2070 /* In case of COND_EXPR, if both operands are constants or
2071 COND_EXPR, then we do not care about the type of COND_EXPR,
2072 only about the conversion of each operand. */
2073 tree op1 = TREE_OPERAND (expr, 1);
2074 tree op2 = TREE_OPERAND (expr, 2);
2076 if ((TREE_CODE (op1) == REAL_CST || TREE_CODE (op1) == INTEGER_CST
2077 || TREE_CODE (op1) == COND_EXPR)
2078 && (TREE_CODE (op2) == REAL_CST || TREE_CODE (op2) == INTEGER_CST
2079 || TREE_CODE (op2) == COND_EXPR))
2081 conversion_warning (type, op1);
2082 conversion_warning (type, op2);
2088 default: /* 'expr' is not a constant. */
2090 /* Warn for real types converted to integer types. */
2091 if (TREE_CODE (expr_type) == REAL_TYPE
2092 && TREE_CODE (type) == INTEGER_TYPE)
2093 give_warning = true;
2095 else if (TREE_CODE (expr_type) == INTEGER_TYPE
2096 && TREE_CODE (type) == INTEGER_TYPE)
2098 /* Don't warn about unsigned char y = 0xff, x = (int) y; */
2099 expr = get_unwidened (expr, 0);
2100 expr_type = TREE_TYPE (expr);
2102 /* Don't warn for short y; short x = ((int)y & 0xff); */
2103 if (TREE_CODE (expr) == BIT_AND_EXPR
2104 || TREE_CODE (expr) == BIT_IOR_EXPR
2105 || TREE_CODE (expr) == BIT_XOR_EXPR)
2107 /* If both args were extended from a shortest type,
2108 use that type if that is safe. */
2109 expr_type = shorten_binary_op (expr_type,
2110 TREE_OPERAND (expr, 0),
2111 TREE_OPERAND (expr, 1),
2114 if (TREE_CODE (expr) == BIT_AND_EXPR)
2116 tree op0 = TREE_OPERAND (expr, 0);
2117 tree op1 = TREE_OPERAND (expr, 1);
2118 bool unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2119 bool unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2121 /* If one of the operands is a non-negative constant
2122 that fits in the target type, then the type of the
2123 other operand does not matter. */
2124 if ((TREE_CODE (op0) == INTEGER_CST
2125 && int_fits_type_p (op0, c_common_signed_type (type))
2126 && int_fits_type_p (op0, c_common_unsigned_type (type)))
2127 || (TREE_CODE (op1) == INTEGER_CST
2128 && int_fits_type_p (op1, c_common_signed_type (type))
2129 && int_fits_type_p (op1,
2130 c_common_unsigned_type (type))))
2132 /* If constant is unsigned and fits in the target
2133 type, then the result will also fit. */
2134 else if ((TREE_CODE (op0) == INTEGER_CST
2136 && int_fits_type_p (op0, type))
2137 || (TREE_CODE (op1) == INTEGER_CST
2139 && int_fits_type_p (op1, type)))
2143 /* Warn for integer types converted to smaller integer types. */
2144 if (TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2145 give_warning = true;
2147 /* When they are the same width but different signedness,
2148 then the value may change. */
2149 else if ((TYPE_PRECISION (type) == TYPE_PRECISION (expr_type)
2150 && TYPE_UNSIGNED (expr_type) != TYPE_UNSIGNED (type))
2151 /* Even when converted to a bigger type, if the type is
2152 unsigned but expr is signed, then negative values
2154 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)))
2155 warning (OPT_Wsign_conversion, "conversion to %qT from %qT "
2156 "may change the sign of the result",
2160 /* Warn for integer types converted to real types if and only if
2161 all the range of values of the integer type cannot be
2162 represented by the real type. */
2163 else if (TREE_CODE (expr_type) == INTEGER_TYPE
2164 && TREE_CODE (type) == REAL_TYPE)
2166 tree type_low_bound = TYPE_MIN_VALUE (expr_type);
2167 tree type_high_bound = TYPE_MAX_VALUE (expr_type);
2168 REAL_VALUE_TYPE real_low_bound
2169 = real_value_from_int_cst (0, type_low_bound);
2170 REAL_VALUE_TYPE real_high_bound
2171 = real_value_from_int_cst (0, type_high_bound);
2173 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
2174 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
2175 give_warning = true;
2178 /* Warn for real types converted to smaller real types. */
2179 else if (TREE_CODE (expr_type) == REAL_TYPE
2180 && TREE_CODE (type) == REAL_TYPE
2181 && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2182 give_warning = true;
2186 warning (OPT_Wconversion,
2187 "conversion to %qT from %qT may alter its value",
2192 /* Produce warnings after a conversion. RESULT is the result of
2193 converting EXPR to TYPE. This is a helper function for
2194 convert_and_check and cp_convert_and_check. */
2197 warnings_for_convert_and_check (tree type, tree expr, tree result)
2199 if (TREE_CODE (expr) == INTEGER_CST
2200 && (TREE_CODE (type) == INTEGER_TYPE
2201 || TREE_CODE (type) == ENUMERAL_TYPE)
2202 && !int_fits_type_p (expr, type))
2204 /* Do not diagnose overflow in a constant expression merely
2205 because a conversion overflowed. */
2206 if (TREE_OVERFLOW (result))
2207 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
2209 if (TYPE_UNSIGNED (type))
2211 /* This detects cases like converting -129 or 256 to
2213 if (!int_fits_type_p (expr, c_common_signed_type (type)))
2214 warning (OPT_Woverflow,
2215 "large integer implicitly truncated to unsigned type");
2217 conversion_warning (type, expr);
2219 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
2220 warning (OPT_Woverflow,
2221 "overflow in implicit constant conversion");
2222 /* No warning for converting 0x80000000 to int. */
2224 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
2225 || TYPE_PRECISION (TREE_TYPE (expr))
2226 != TYPE_PRECISION (type)))
2227 warning (OPT_Woverflow,
2228 "overflow in implicit constant conversion");
2231 conversion_warning (type, expr);
2233 else if ((TREE_CODE (result) == INTEGER_CST
2234 || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
2235 warning (OPT_Woverflow,
2236 "overflow in implicit constant conversion");
2238 conversion_warning (type, expr);
2242 /* Convert EXPR to TYPE, warning about conversion problems with constants.
2243 Invoke this function on every expression that is converted implicitly,
2244 i.e. because of language rules and not because of an explicit cast. */
2247 convert_and_check (tree type, tree expr)
2250 tree expr_for_warning;
2252 /* Convert from a value with possible excess precision rather than
2253 via the semantic type, but do not warn about values not fitting
2254 exactly in the semantic type. */
2255 if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
2257 tree orig_type = TREE_TYPE (expr);
2258 expr = TREE_OPERAND (expr, 0);
2259 expr_for_warning = convert (orig_type, expr);
2260 if (orig_type == type)
2261 return expr_for_warning;
2264 expr_for_warning = expr;
2266 if (TREE_TYPE (expr) == type)
2269 result = convert (type, expr);
2271 if (c_inhibit_evaluation_warnings == 0
2272 && !TREE_OVERFLOW_P (expr)
2273 && result != error_mark_node)
2274 warnings_for_convert_and_check (type, expr_for_warning, result);
2279 /* A node in a list that describes references to variables (EXPR), which are
2280 either read accesses if WRITER is zero, or write accesses, in which case
2281 WRITER is the parent of EXPR. */
2288 /* Used to implement a cache the results of a call to verify_tree. We only
2289 use this for SAVE_EXPRs. */
2292 struct tlist_cache *next;
2293 struct tlist *cache_before_sp;
2294 struct tlist *cache_after_sp;
2298 /* Obstack to use when allocating tlist structures, and corresponding
2300 static struct obstack tlist_obstack;
2301 static char *tlist_firstobj = 0;
2303 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
2305 static struct tlist *warned_ids;
2306 /* SAVE_EXPRs need special treatment. We process them only once and then
2307 cache the results. */
2308 static struct tlist_cache *save_expr_cache;
2310 static void add_tlist (struct tlist **, struct tlist *, tree, int);
2311 static void merge_tlist (struct tlist **, struct tlist *, int);
2312 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
2313 static int warning_candidate_p (tree);
2314 static bool candidate_equal_p (const_tree, const_tree);
2315 static void warn_for_collisions (struct tlist *);
2316 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
2317 static struct tlist *new_tlist (struct tlist *, tree, tree);
2319 /* Create a new struct tlist and fill in its fields. */
2320 static struct tlist *
2321 new_tlist (struct tlist *next, tree t, tree writer)
2324 l = XOBNEW (&tlist_obstack, struct tlist);
2331 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
2332 is nonnull, we ignore any node we find which has a writer equal to it. */
2335 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
2339 struct tlist *next = add->next;
2342 if (!exclude_writer || !candidate_equal_p (add->writer, exclude_writer))
2343 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
2348 /* Merge the nodes of ADD into TO. This merging process is done so that for
2349 each variable that already exists in TO, no new node is added; however if
2350 there is a write access recorded in ADD, and an occurrence on TO is only
2351 a read access, then the occurrence in TO will be modified to record the
2355 merge_tlist (struct tlist **to, struct tlist *add, int copy)
2357 struct tlist **end = to;
2360 end = &(*end)->next;
2366 struct tlist *next = add->next;
2368 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
2369 if (candidate_equal_p (tmp2->expr, add->expr))
2373 tmp2->writer = add->writer;
2377 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
2378 end = &(*end)->next;
2385 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
2386 references in list LIST conflict with it, excluding reads if ONLY writers
2390 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
2395 /* Avoid duplicate warnings. */
2396 for (tmp = warned_ids; tmp; tmp = tmp->next)
2397 if (candidate_equal_p (tmp->expr, written))
2402 if (candidate_equal_p (list->expr, written)
2403 && !candidate_equal_p (list->writer, writer)
2404 && (!only_writes || list->writer))
2406 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
2407 warning_at (EXPR_HAS_LOCATION (writer)
2408 ? EXPR_LOCATION (writer) : input_location,
2409 OPT_Wsequence_point, "operation on %qE may be undefined",
2416 /* Given a list LIST of references to variables, find whether any of these
2417 can cause conflicts due to missing sequence points. */
2420 warn_for_collisions (struct tlist *list)
2424 for (tmp = list; tmp; tmp = tmp->next)
2427 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
2431 /* Return nonzero if X is a tree that can be verified by the sequence point
2434 warning_candidate_p (tree x)
2436 /* !VOID_TYPE_P (TREE_TYPE (x)) is workaround for cp/tree.c
2437 (lvalue_p) crash on TRY/CATCH. */
2438 return !(DECL_P (x) && DECL_ARTIFICIAL (x))
2439 && TREE_TYPE (x) && !VOID_TYPE_P (TREE_TYPE (x)) && lvalue_p (x);
2442 /* Return nonzero if X and Y appear to be the same candidate (or NULL) */
2444 candidate_equal_p (const_tree x, const_tree y)
2446 return (x == y) || (x && y && operand_equal_p (x, y, 0));
2449 /* Walk the tree X, and record accesses to variables. If X is written by the
2450 parent tree, WRITER is the parent.
2451 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
2452 expression or its only operand forces a sequence point, then everything up
2453 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
2455 Once we return, we will have emitted warnings if any subexpression before
2456 such a sequence point could be undefined. On a higher level, however, the
2457 sequence point may not be relevant, and we'll merge the two lists.
2459 Example: (b++, a) + b;
2460 The call that processes the COMPOUND_EXPR will store the increment of B
2461 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
2462 processes the PLUS_EXPR will need to merge the two lists so that
2463 eventually, all accesses end up on the same list (and we'll warn about the
2464 unordered subexpressions b++ and b.
2466 A note on merging. If we modify the former example so that our expression
2469 care must be taken not simply to add all three expressions into the final
2470 PNO_SP list. The function merge_tlist takes care of that by merging the
2471 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
2472 way, so that no more than one access to B is recorded. */
2475 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
2478 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
2479 enum tree_code code;
2480 enum tree_code_class cl;
2482 /* X may be NULL if it is the operand of an empty statement expression
2488 code = TREE_CODE (x);
2489 cl = TREE_CODE_CLASS (code);
2491 if (warning_candidate_p (x))
2492 *pno_sp = new_tlist (*pno_sp, x, writer);
2500 case TRUTH_ANDIF_EXPR:
2501 case TRUTH_ORIF_EXPR:
2502 tmp_before = tmp_nosp = tmp_list3 = 0;
2503 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2504 warn_for_collisions (tmp_nosp);
2505 merge_tlist (pbefore_sp, tmp_before, 0);
2506 merge_tlist (pbefore_sp, tmp_nosp, 0);
2507 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
2508 merge_tlist (pbefore_sp, tmp_list3, 0);
2512 tmp_before = tmp_list2 = 0;
2513 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
2514 warn_for_collisions (tmp_list2);
2515 merge_tlist (pbefore_sp, tmp_before, 0);
2516 merge_tlist (pbefore_sp, tmp_list2, 1);
2518 tmp_list3 = tmp_nosp = 0;
2519 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
2520 warn_for_collisions (tmp_nosp);
2521 merge_tlist (pbefore_sp, tmp_list3, 0);
2523 tmp_list3 = tmp_list2 = 0;
2524 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
2525 warn_for_collisions (tmp_list2);
2526 merge_tlist (pbefore_sp, tmp_list3, 0);
2527 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
2528 two first, to avoid warning for (a ? b++ : b++). */
2529 merge_tlist (&tmp_nosp, tmp_list2, 0);
2530 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2533 case PREDECREMENT_EXPR:
2534 case PREINCREMENT_EXPR:
2535 case POSTDECREMENT_EXPR:
2536 case POSTINCREMENT_EXPR:
2537 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
2541 tmp_before = tmp_nosp = tmp_list3 = 0;
2542 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
2543 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
2544 /* Expressions inside the LHS are not ordered wrt. the sequence points
2545 in the RHS. Example:
2547 Despite the fact that the modification of "a" is in the before_sp
2548 list (tmp_before), it conflicts with the use of "a" in the LHS.
2549 We can handle this by adding the contents of tmp_list3
2550 to those of tmp_before, and redoing the collision warnings for that
2552 add_tlist (&tmp_before, tmp_list3, x, 1);
2553 warn_for_collisions (tmp_before);
2554 /* Exclude the LHS itself here; we first have to merge it into the
2555 tmp_nosp list. This is done to avoid warning for "a = a"; if we
2556 didn't exclude the LHS, we'd get it twice, once as a read and once
2558 add_tlist (pno_sp, tmp_list3, x, 0);
2559 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
2561 merge_tlist (pbefore_sp, tmp_before, 0);
2562 if (warning_candidate_p (TREE_OPERAND (x, 0)))
2563 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
2564 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
2568 /* We need to warn about conflicts among arguments and conflicts between
2569 args and the function address. Side effects of the function address,
2570 however, are not ordered by the sequence point of the call. */
2572 call_expr_arg_iterator iter;
2574 tmp_before = tmp_nosp = 0;
2575 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
2576 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
2578 tmp_list2 = tmp_list3 = 0;
2579 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
2580 merge_tlist (&tmp_list3, tmp_list2, 0);
2581 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
2583 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
2584 warn_for_collisions (tmp_before);
2585 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
2590 /* Scan all the list, e.g. indices of multi dimensional array. */
2593 tmp_before = tmp_nosp = 0;
2594 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
2595 merge_tlist (&tmp_nosp, tmp_before, 0);
2596 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2603 struct tlist_cache *t;
2604 for (t = save_expr_cache; t; t = t->next)
2605 if (candidate_equal_p (t->expr, x))
2610 t = XOBNEW (&tlist_obstack, struct tlist_cache);
2611 t->next = save_expr_cache;
2613 save_expr_cache = t;
2615 tmp_before = tmp_nosp = 0;
2616 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2617 warn_for_collisions (tmp_nosp);
2622 struct tlist *t = tmp_nosp;
2624 merge_tlist (&tmp_list3, t, 0);
2626 t->cache_before_sp = tmp_before;
2627 t->cache_after_sp = tmp_list3;
2629 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
2630 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
2635 x = TREE_OPERAND (x, 0);
2642 /* For other expressions, simply recurse on their operands.
2643 Manual tail recursion for unary expressions.
2644 Other non-expressions need not be processed. */
2645 if (cl == tcc_unary)
2647 x = TREE_OPERAND (x, 0);
2651 else if (IS_EXPR_CODE_CLASS (cl))
2654 int max = TREE_OPERAND_LENGTH (x);
2655 for (lp = 0; lp < max; lp++)
2657 tmp_before = tmp_nosp = 0;
2658 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
2659 merge_tlist (&tmp_nosp, tmp_before, 0);
2660 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2667 /* Try to warn for undefined behavior in EXPR due to missing sequence
2671 verify_sequence_points (tree expr)
2673 struct tlist *before_sp = 0, *after_sp = 0;
2676 save_expr_cache = 0;
2677 if (tlist_firstobj == 0)
2679 gcc_obstack_init (&tlist_obstack);
2680 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2683 verify_tree (expr, &before_sp, &after_sp, 0);
2684 warn_for_collisions (after_sp);
2685 obstack_free (&tlist_obstack, tlist_firstobj);
2688 /* Validate the expression after `case' and apply default promotions. */
2691 check_case_value (tree value)
2693 if (value == NULL_TREE)
2696 /* ??? Can we ever get nops here for a valid case value? We
2698 STRIP_TYPE_NOPS (value);
2699 /* In C++, the following is allowed:
2702 switch (...) { case i: ... }
2704 So, we try to reduce the VALUE to a constant that way. */
2705 if (c_dialect_cxx ())
2707 value = decl_constant_value (value);
2708 STRIP_TYPE_NOPS (value);
2709 value = fold (value);
2712 if (TREE_CODE (value) == INTEGER_CST)
2713 /* Promote char or short to int. */
2714 value = perform_integral_promotions (value);
2715 else if (value != error_mark_node)
2717 error ("case label does not reduce to an integer constant");
2718 value = error_mark_node;
2721 constant_expression_warning (value);
2726 /* See if the case values LOW and HIGH are in the range of the original
2727 type (i.e. before the default conversion to int) of the switch testing
2729 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2730 the type before promoting it. CASE_LOW_P is a pointer to the lower
2731 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
2732 if the case is not a case range.
2733 The caller has to make sure that we are not called with NULL for
2734 CASE_LOW_P (i.e. the default case).
2735 Returns true if the case label is in range of ORIG_TYPE (saturated or
2736 untouched) or false if the label is out of range. */
2739 check_case_bounds (tree type, tree orig_type,
2740 tree *case_low_p, tree *case_high_p)
2742 tree min_value, max_value;
2743 tree case_low = *case_low_p;
2744 tree case_high = case_high_p ? *case_high_p : case_low;
2746 /* If there was a problem with the original type, do nothing. */
2747 if (orig_type == error_mark_node)
2750 min_value = TYPE_MIN_VALUE (orig_type);
2751 max_value = TYPE_MAX_VALUE (orig_type);
2753 /* Case label is less than minimum for type. */
2754 if (tree_int_cst_compare (case_low, min_value) < 0
2755 && tree_int_cst_compare (case_high, min_value) < 0)
2757 warning (0, "case label value is less than minimum value for type");
2761 /* Case value is greater than maximum for type. */
2762 if (tree_int_cst_compare (case_low, max_value) > 0
2763 && tree_int_cst_compare (case_high, max_value) > 0)
2765 warning (0, "case label value exceeds maximum value for type");
2769 /* Saturate lower case label value to minimum. */
2770 if (tree_int_cst_compare (case_high, min_value) >= 0
2771 && tree_int_cst_compare (case_low, min_value) < 0)
2773 warning (0, "lower value in case label range"
2774 " less than minimum value for type");
2775 case_low = min_value;
2778 /* Saturate upper case label value to maximum. */
2779 if (tree_int_cst_compare (case_low, max_value) <= 0
2780 && tree_int_cst_compare (case_high, max_value) > 0)
2782 warning (0, "upper value in case label range"
2783 " exceeds maximum value for type");
2784 case_high = max_value;
2787 if (*case_low_p != case_low)
2788 *case_low_p = convert (type, case_low);
2789 if (case_high_p && *case_high_p != case_high)
2790 *case_high_p = convert (type, case_high);
2795 /* Return an integer type with BITS bits of precision,
2796 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
2799 c_common_type_for_size (unsigned int bits, int unsignedp)
2801 if (bits == TYPE_PRECISION (integer_type_node))
2802 return unsignedp ? unsigned_type_node : integer_type_node;
2804 if (bits == TYPE_PRECISION (signed_char_type_node))
2805 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2807 if (bits == TYPE_PRECISION (short_integer_type_node))
2808 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2810 if (bits == TYPE_PRECISION (long_integer_type_node))
2811 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2813 if (bits == TYPE_PRECISION (long_long_integer_type_node))
2814 return (unsignedp ? long_long_unsigned_type_node
2815 : long_long_integer_type_node);
2817 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
2818 return (unsignedp ? widest_unsigned_literal_type_node
2819 : widest_integer_literal_type_node);
2821 if (bits <= TYPE_PRECISION (intQI_type_node))
2822 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2824 if (bits <= TYPE_PRECISION (intHI_type_node))
2825 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2827 if (bits <= TYPE_PRECISION (intSI_type_node))
2828 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2830 if (bits <= TYPE_PRECISION (intDI_type_node))
2831 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2836 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
2837 that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
2838 and saturating if SATP is nonzero, otherwise not saturating. */
2841 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
2842 int unsignedp, int satp)
2844 enum machine_mode mode;
2846 mode = unsignedp ? UQQmode : QQmode;
2848 mode = unsignedp ? UHAmode : HAmode;
2850 for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
2851 if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
2854 if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
2856 sorry ("GCC cannot support operators with integer types and "
2857 "fixed-point types that have too many integral and "
2858 "fractional bits together");
2862 return c_common_type_for_mode (mode, satp);
2865 /* Used for communication between c_common_type_for_mode and
2866 c_register_builtin_type. */
2867 static GTY(()) tree registered_builtin_types;
2869 /* Return a data type that has machine mode MODE.
2870 If the mode is an integer,
2871 then UNSIGNEDP selects between signed and unsigned types.
2872 If the mode is a fixed-point mode,
2873 then UNSIGNEDP selects between saturating and nonsaturating types. */
2876 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
2880 if (mode == TYPE_MODE (integer_type_node))
2881 return unsignedp ? unsigned_type_node : integer_type_node;
2883 if (mode == TYPE_MODE (signed_char_type_node))
2884 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2886 if (mode == TYPE_MODE (short_integer_type_node))
2887 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2889 if (mode == TYPE_MODE (long_integer_type_node))
2890 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2892 if (mode == TYPE_MODE (long_long_integer_type_node))
2893 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2895 if (mode == TYPE_MODE (widest_integer_literal_type_node))
2896 return unsignedp ? widest_unsigned_literal_type_node
2897 : widest_integer_literal_type_node;
2900 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2903 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2906 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2909 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2911 #if HOST_BITS_PER_WIDE_INT >= 64
2912 if (mode == TYPE_MODE (intTI_type_node))
2913 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2916 if (mode == TYPE_MODE (float_type_node))
2917 return float_type_node;
2919 if (mode == TYPE_MODE (double_type_node))
2920 return double_type_node;
2922 if (mode == TYPE_MODE (long_double_type_node))
2923 return long_double_type_node;
2925 if (mode == TYPE_MODE (void_type_node))
2926 return void_type_node;
2928 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2930 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2931 : make_signed_type (GET_MODE_PRECISION (mode)));
2933 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2935 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2936 : make_signed_type (GET_MODE_PRECISION (mode)));
2938 if (COMPLEX_MODE_P (mode))
2940 enum machine_mode inner_mode;
2943 if (mode == TYPE_MODE (complex_float_type_node))
2944 return complex_float_type_node;
2945 if (mode == TYPE_MODE (complex_double_type_node))
2946 return complex_double_type_node;
2947 if (mode == TYPE_MODE (complex_long_double_type_node))
2948 return complex_long_double_type_node;
2950 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2951 return complex_integer_type_node;
2953 inner_mode = GET_MODE_INNER (mode);
2954 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2955 if (inner_type != NULL_TREE)
2956 return build_complex_type (inner_type);
2958 else if (VECTOR_MODE_P (mode))
2960 enum machine_mode inner_mode = GET_MODE_INNER (mode);
2961 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2962 if (inner_type != NULL_TREE)
2963 return build_vector_type_for_mode (inner_type, mode);
2966 if (mode == TYPE_MODE (dfloat32_type_node))
2967 return dfloat32_type_node;
2968 if (mode == TYPE_MODE (dfloat64_type_node))
2969 return dfloat64_type_node;
2970 if (mode == TYPE_MODE (dfloat128_type_node))
2971 return dfloat128_type_node;
2973 if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
2975 if (mode == TYPE_MODE (short_fract_type_node))
2976 return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
2977 if (mode == TYPE_MODE (fract_type_node))
2978 return unsignedp ? sat_fract_type_node : fract_type_node;
2979 if (mode == TYPE_MODE (long_fract_type_node))
2980 return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
2981 if (mode == TYPE_MODE (long_long_fract_type_node))
2982 return unsignedp ? sat_long_long_fract_type_node
2983 : long_long_fract_type_node;
2985 if (mode == TYPE_MODE (unsigned_short_fract_type_node))
2986 return unsignedp ? sat_unsigned_short_fract_type_node
2987 : unsigned_short_fract_type_node;
2988 if (mode == TYPE_MODE (unsigned_fract_type_node))
2989 return unsignedp ? sat_unsigned_fract_type_node
2990 : unsigned_fract_type_node;
2991 if (mode == TYPE_MODE (unsigned_long_fract_type_node))
2992 return unsignedp ? sat_unsigned_long_fract_type_node
2993 : unsigned_long_fract_type_node;
2994 if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
2995 return unsignedp ? sat_unsigned_long_long_fract_type_node
2996 : unsigned_long_long_fract_type_node;
2998 if (mode == TYPE_MODE (short_accum_type_node))
2999 return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
3000 if (mode == TYPE_MODE (accum_type_node))
3001 return unsignedp ? sat_accum_type_node : accum_type_node;
3002 if (mode == TYPE_MODE (long_accum_type_node))
3003 return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
3004 if (mode == TYPE_MODE (long_long_accum_type_node))
3005 return unsignedp ? sat_long_long_accum_type_node
3006 : long_long_accum_type_node;
3008 if (mode == TYPE_MODE (unsigned_short_accum_type_node))
3009 return unsignedp ? sat_unsigned_short_accum_type_node
3010 : unsigned_short_accum_type_node;
3011 if (mode == TYPE_MODE (unsigned_accum_type_node))
3012 return unsignedp ? sat_unsigned_accum_type_node
3013 : unsigned_accum_type_node;
3014 if (mode == TYPE_MODE (unsigned_long_accum_type_node))
3015 return unsignedp ? sat_unsigned_long_accum_type_node
3016 : unsigned_long_accum_type_node;
3017 if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
3018 return unsignedp ? sat_unsigned_long_long_accum_type_node
3019 : unsigned_long_long_accum_type_node;
3022 return unsignedp ? sat_qq_type_node : qq_type_node;
3024 return unsignedp ? sat_hq_type_node : hq_type_node;
3026 return unsignedp ? sat_sq_type_node : sq_type_node;
3028 return unsignedp ? sat_dq_type_node : dq_type_node;
3030 return unsignedp ? sat_tq_type_node : tq_type_node;
3032 if (mode == UQQmode)
3033 return unsignedp ? sat_uqq_type_node : uqq_type_node;
3034 if (mode == UHQmode)
3035 return unsignedp ? sat_uhq_type_node : uhq_type_node;
3036 if (mode == USQmode)
3037 return unsignedp ? sat_usq_type_node : usq_type_node;
3038 if (mode == UDQmode)
3039 return unsignedp ? sat_udq_type_node : udq_type_node;
3040 if (mode == UTQmode)
3041 return unsignedp ? sat_utq_type_node : utq_type_node;
3044 return unsignedp ? sat_ha_type_node : ha_type_node;
3046 return unsignedp ? sat_sa_type_node : sa_type_node;
3048 return unsignedp ? sat_da_type_node : da_type_node;
3050 return unsignedp ? sat_ta_type_node : ta_type_node;
3052 if (mode == UHAmode)
3053 return unsignedp ? sat_uha_type_node : uha_type_node;
3054 if (mode == USAmode)
3055 return unsignedp ? sat_usa_type_node : usa_type_node;
3056 if (mode == UDAmode)
3057 return unsignedp ? sat_uda_type_node : uda_type_node;
3058 if (mode == UTAmode)
3059 return unsignedp ? sat_uta_type_node : uta_type_node;
3062 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
3063 if (TYPE_MODE (TREE_VALUE (t)) == mode)
3064 return TREE_VALUE (t);
3070 c_common_unsigned_type (tree type)
3072 return c_common_signed_or_unsigned_type (1, type);
3075 /* Return a signed type the same as TYPE in other respects. */
3078 c_common_signed_type (tree type)
3080 return c_common_signed_or_unsigned_type (0, type);
3083 /* Return a type the same as TYPE except unsigned or
3084 signed according to UNSIGNEDP. */
3087 c_common_signed_or_unsigned_type (int unsignedp, tree type)
3091 /* This block of code emulates the behavior of the old
3092 c_common_unsigned_type. In particular, it returns
3093 long_unsigned_type_node if passed a long, even when a int would
3094 have the same size. This is necessary for warnings to work
3095 correctly in archs where sizeof(int) == sizeof(long) */
3097 type1 = TYPE_MAIN_VARIANT (type);
3098 if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
3099 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3100 if (type1 == integer_type_node || type1 == unsigned_type_node)
3101 return unsignedp ? unsigned_type_node : integer_type_node;
3102 if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
3103 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3104 if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
3105 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3106 if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
3107 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
3108 if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
3109 return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
3110 #if HOST_BITS_PER_WIDE_INT >= 64
3111 if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
3112 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3114 if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
3115 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3116 if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
3117 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3118 if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
3119 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3120 if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
3121 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3123 #define C_COMMON_FIXED_TYPES(NAME) \
3124 if (type1 == short_ ## NAME ## _type_node \
3125 || type1 == unsigned_short_ ## NAME ## _type_node) \
3126 return unsignedp ? unsigned_short_ ## NAME ## _type_node \
3127 : short_ ## NAME ## _type_node; \
3128 if (type1 == NAME ## _type_node \
3129 || type1 == unsigned_ ## NAME ## _type_node) \
3130 return unsignedp ? unsigned_ ## NAME ## _type_node \
3131 : NAME ## _type_node; \
3132 if (type1 == long_ ## NAME ## _type_node \
3133 || type1 == unsigned_long_ ## NAME ## _type_node) \
3134 return unsignedp ? unsigned_long_ ## NAME ## _type_node \
3135 : long_ ## NAME ## _type_node; \
3136 if (type1 == long_long_ ## NAME ## _type_node \
3137 || type1 == unsigned_long_long_ ## NAME ## _type_node) \
3138 return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
3139 : long_long_ ## NAME ## _type_node;
3141 #define C_COMMON_FIXED_MODE_TYPES(NAME) \
3142 if (type1 == NAME ## _type_node \
3143 || type1 == u ## NAME ## _type_node) \
3144 return unsignedp ? u ## NAME ## _type_node \
3145 : NAME ## _type_node;
3147 #define C_COMMON_FIXED_TYPES_SAT(NAME) \
3148 if (type1 == sat_ ## short_ ## NAME ## _type_node \
3149 || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
3150 return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
3151 : sat_ ## short_ ## NAME ## _type_node; \
3152 if (type1 == sat_ ## NAME ## _type_node \
3153 || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
3154 return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
3155 : sat_ ## NAME ## _type_node; \
3156 if (type1 == sat_ ## long_ ## NAME ## _type_node \
3157 || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
3158 return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
3159 : sat_ ## long_ ## NAME ## _type_node; \
3160 if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
3161 || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
3162 return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
3163 : sat_ ## long_long_ ## NAME ## _type_node;
3165 #define C_COMMON_FIXED_MODE_TYPES_SAT(NAME) \
3166 if (type1 == sat_ ## NAME ## _type_node \
3167 || type1 == sat_ ## u ## NAME ## _type_node) \
3168 return unsignedp ? sat_ ## u ## NAME ## _type_node \
3169 : sat_ ## NAME ## _type_node;
3171 C_COMMON_FIXED_TYPES (fract);
3172 C_COMMON_FIXED_TYPES_SAT (fract);
3173 C_COMMON_FIXED_TYPES (accum);
3174 C_COMMON_FIXED_TYPES_SAT (accum);
3176 C_COMMON_FIXED_MODE_TYPES (qq);
3177 C_COMMON_FIXED_MODE_TYPES (hq);
3178 C_COMMON_FIXED_MODE_TYPES (sq);
3179 C_COMMON_FIXED_MODE_TYPES (dq);
3180 C_COMMON_FIXED_MODE_TYPES (tq);
3181 C_COMMON_FIXED_MODE_TYPES_SAT (qq);
3182 C_COMMON_FIXED_MODE_TYPES_SAT (hq);
3183 C_COMMON_FIXED_MODE_TYPES_SAT (sq);
3184 C_COMMON_FIXED_MODE_TYPES_SAT (dq);
3185 C_COMMON_FIXED_MODE_TYPES_SAT (tq);
3186 C_COMMON_FIXED_MODE_TYPES (ha);
3187 C_COMMON_FIXED_MODE_TYPES (sa);
3188 C_COMMON_FIXED_MODE_TYPES (da);
3189 C_COMMON_FIXED_MODE_TYPES (ta);
3190 C_COMMON_FIXED_MODE_TYPES_SAT (ha);
3191 C_COMMON_FIXED_MODE_TYPES_SAT (sa);
3192 C_COMMON_FIXED_MODE_TYPES_SAT (da);
3193 C_COMMON_FIXED_MODE_TYPES_SAT (ta);
3195 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
3196 the precision; they have precision set to match their range, but
3197 may use a wider mode to match an ABI. If we change modes, we may
3198 wind up with bad conversions. For INTEGER_TYPEs in C, must check
3199 the precision as well, so as to yield correct results for
3200 bit-field types. C++ does not have these separate bit-field
3201 types, and producing a signed or unsigned variant of an
3202 ENUMERAL_TYPE may cause other problems as well. */
3204 if (!INTEGRAL_TYPE_P (type)
3205 || TYPE_UNSIGNED (type) == unsignedp)
3208 #define TYPE_OK(node) \
3209 (TYPE_MODE (type) == TYPE_MODE (node) \
3210 && TYPE_PRECISION (type) == TYPE_PRECISION (node))
3211 if (TYPE_OK (signed_char_type_node))
3212 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3213 if (TYPE_OK (integer_type_node))
3214 return unsignedp ? unsigned_type_node : integer_type_node;
3215 if (TYPE_OK (short_integer_type_node))
3216 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3217 if (TYPE_OK (long_integer_type_node))
3218 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3219 if (TYPE_OK (long_long_integer_type_node))
3220 return (unsignedp ? long_long_unsigned_type_node
3221 : long_long_integer_type_node);
3222 if (TYPE_OK (widest_integer_literal_type_node))
3223 return (unsignedp ? widest_unsigned_literal_type_node
3224 : widest_integer_literal_type_node);
3226 #if HOST_BITS_PER_WIDE_INT >= 64
3227 if (TYPE_OK (intTI_type_node))
3228 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3230 if (TYPE_OK (intDI_type_node))
3231 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3232 if (TYPE_OK (intSI_type_node))
3233 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3234 if (TYPE_OK (intHI_type_node))
3235 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3236 if (TYPE_OK (intQI_type_node))
3237 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3240 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
3243 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
3246 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
3248 /* Extended integer types of the same width as a standard type have
3249 lesser rank, so those of the same width as int promote to int or
3250 unsigned int and are valid for printf formats expecting int or
3251 unsigned int. To avoid such special cases, avoid creating
3252 extended integer types for bit-fields if a standard integer type
3254 if (width == TYPE_PRECISION (integer_type_node))
3255 return unsignedp ? unsigned_type_node : integer_type_node;
3256 if (width == TYPE_PRECISION (signed_char_type_node))
3257 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3258 if (width == TYPE_PRECISION (short_integer_type_node))
3259 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3260 if (width == TYPE_PRECISION (long_integer_type_node))
3261 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3262 if (width == TYPE_PRECISION (long_long_integer_type_node))
3263 return (unsignedp ? long_long_unsigned_type_node
3264 : long_long_integer_type_node);
3265 return build_nonstandard_integer_type (width, unsignedp);
3268 /* The C version of the register_builtin_type langhook. */
3271 c_register_builtin_type (tree type, const char* name)
3275 decl = build_decl (UNKNOWN_LOCATION,
3276 TYPE_DECL, get_identifier (name), type);
3277 DECL_ARTIFICIAL (decl) = 1;
3278 if (!TYPE_NAME (type))
3279 TYPE_NAME (type) = decl;
3282 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
3285 /* Print an error message for invalid operands to arith operation
3286 CODE with TYPE0 for operand 0, and TYPE1 for operand 1.
3287 LOCATION is the location of the message. */
3290 binary_op_error (location_t location, enum tree_code code,
3291 tree type0, tree type1)
3298 opname = "+"; break;
3300 opname = "-"; break;
3302 opname = "*"; break;
3304 opname = "max"; break;
3306 opname = "min"; break;
3308 opname = "=="; break;
3310 opname = "!="; break;
3312 opname = "<="; break;
3314 opname = ">="; break;
3316 opname = "<"; break;
3318 opname = ">"; break;
3320 opname = "<<"; break;
3322 opname = ">>"; break;
3323 case TRUNC_MOD_EXPR:
3324 case FLOOR_MOD_EXPR:
3325 opname = "%"; break;
3326 case TRUNC_DIV_EXPR:
3327 case FLOOR_DIV_EXPR:
3328 opname = "/"; break;
3330 opname = "&"; break;
3332 opname = "|"; break;
3333 case TRUTH_ANDIF_EXPR:
3334 opname = "&&"; break;
3335 case TRUTH_ORIF_EXPR:
3336 opname = "||"; break;
3338 opname = "^"; break;
3343 "invalid operands to binary %s (have %qT and %qT)", opname,
3347 /* Subroutine of build_binary_op, used for comparison operations.
3348 See if the operands have both been converted from subword integer types
3349 and, if so, perhaps change them both back to their original type.
3350 This function is also responsible for converting the two operands
3351 to the proper common type for comparison.
3353 The arguments of this function are all pointers to local variables
3354 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
3355 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
3357 If this function returns nonzero, it means that the comparison has
3358 a constant value. What this function returns is an expression for
3362 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
3363 enum tree_code *rescode_ptr)
3366 tree op0 = *op0_ptr;
3367 tree op1 = *op1_ptr;
3368 int unsignedp0, unsignedp1;
3370 tree primop0, primop1;
3371 enum tree_code code = *rescode_ptr;
3373 /* Throw away any conversions to wider types
3374 already present in the operands. */
3376 primop0 = get_narrower (op0, &unsignedp0);
3377 primop1 = get_narrower (op1, &unsignedp1);
3379 /* Handle the case that OP0 does not *contain* a conversion
3380 but it *requires* conversion to FINAL_TYPE. */
3382 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
3383 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3384 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
3385 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3387 /* If one of the operands must be floated, we cannot optimize. */
3388 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
3389 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
3391 /* If first arg is constant, swap the args (changing operation
3392 so value is preserved), for canonicalization. Don't do this if
3393 the second arg is 0. */
3395 if (TREE_CONSTANT (primop0)
3396 && !integer_zerop (primop1) && !real_zerop (primop1)
3397 && !fixed_zerop (primop1))
3400 int temi = unsignedp0;
3408 unsignedp0 = unsignedp1;
3431 *rescode_ptr = code;
3434 /* If comparing an integer against a constant more bits wide,
3435 maybe we can deduce a value of 1 or 0 independent of the data.
3436 Or else truncate the constant now
3437 rather than extend the variable at run time.
3439 This is only interesting if the constant is the wider arg.
3440 Also, it is not safe if the constant is unsigned and the
3441 variable arg is signed, since in this case the variable
3442 would be sign-extended and then regarded as unsigned.
3443 Our technique fails in this case because the lowest/highest
3444 possible unsigned results don't follow naturally from the
3445 lowest/highest possible values of the variable operand.
3446 For just EQ_EXPR and NE_EXPR there is another technique that
3447 could be used: see if the constant can be faithfully represented
3448 in the other operand's type, by truncating it and reextending it
3449 and see if that preserves the constant's value. */
3451 if (!real1 && !real2
3452 && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
3453 && TREE_CODE (primop1) == INTEGER_CST
3454 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
3456 int min_gt, max_gt, min_lt, max_lt;
3457 tree maxval, minval;
3458 /* 1 if comparison is nominally unsigned. */
3459 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
3462 type = c_common_signed_or_unsigned_type (unsignedp0,
3463 TREE_TYPE (primop0));
3465 maxval = TYPE_MAX_VALUE (type);
3466 minval = TYPE_MIN_VALUE (type);
3468 if (unsignedp && !unsignedp0)
3469 *restype_ptr = c_common_signed_type (*restype_ptr);
3471 if (TREE_TYPE (primop1) != *restype_ptr)
3473 /* Convert primop1 to target type, but do not introduce
3474 additional overflow. We know primop1 is an int_cst. */
3475 primop1 = force_fit_type_double (*restype_ptr,
3476 TREE_INT_CST_LOW (primop1),
3477 TREE_INT_CST_HIGH (primop1), 0,
3478 TREE_OVERFLOW (primop1));
3480 if (type != *restype_ptr)
3482 minval = convert (*restype_ptr, minval);
3483 maxval = convert (*restype_ptr, maxval);
3486 if (unsignedp && unsignedp0)
3488 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
3489 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
3490 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
3491 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
3495 min_gt = INT_CST_LT (primop1, minval);
3496 max_gt = INT_CST_LT (primop1, maxval);
3497 min_lt = INT_CST_LT (minval, primop1);
3498 max_lt = INT_CST_LT (maxval, primop1);
3502 /* This used to be a switch, but Genix compiler can't handle that. */
3503 if (code == NE_EXPR)
3505 if (max_lt || min_gt)
3506 val = truthvalue_true_node;
3508 else if (code == EQ_EXPR)
3510 if (max_lt || min_gt)
3511 val = truthvalue_false_node;
3513 else if (code == LT_EXPR)
3516 val = truthvalue_true_node;
3518 val = truthvalue_false_node;
3520 else if (code == GT_EXPR)
3523 val = truthvalue_true_node;
3525 val = truthvalue_false_node;
3527 else if (code == LE_EXPR)
3530 val = truthvalue_true_node;
3532 val = truthvalue_false_node;
3534 else if (code == GE_EXPR)
3537 val = truthvalue_true_node;
3539 val = truthvalue_false_node;
3542 /* If primop0 was sign-extended and unsigned comparison specd,
3543 we did a signed comparison above using the signed type bounds.
3544 But the comparison we output must be unsigned.
3546 Also, for inequalities, VAL is no good; but if the signed
3547 comparison had *any* fixed result, it follows that the
3548 unsigned comparison just tests the sign in reverse
3549 (positive values are LE, negative ones GE).
3550 So we can generate an unsigned comparison
3551 against an extreme value of the signed type. */
3553 if (unsignedp && !unsignedp0)
3560 primop1 = TYPE_MIN_VALUE (type);
3566 primop1 = TYPE_MAX_VALUE (type);
3573 type = c_common_unsigned_type (type);
3576 if (TREE_CODE (primop0) != INTEGER_CST)
3578 if (val == truthvalue_false_node)
3579 warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
3580 if (val == truthvalue_true_node)
3581 warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
3586 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3587 if (TREE_SIDE_EFFECTS (primop0))
3588 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
3592 /* Value is not predetermined, but do the comparison
3593 in the type of the operand that is not constant.
3594 TYPE is already properly set. */
3597 /* If either arg is decimal float and the other is float, find the
3598 proper common type to use for comparison. */
3599 else if (real1 && real2
3600 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
3601 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
3602 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3604 else if (real1 && real2
3605 && (TYPE_PRECISION (TREE_TYPE (primop0))
3606 == TYPE_PRECISION (TREE_TYPE (primop1))))
3607 type = TREE_TYPE (primop0);
3609 /* If args' natural types are both narrower than nominal type
3610 and both extend in the same manner, compare them
3611 in the type of the wider arg.
3612 Otherwise must actually extend both to the nominal
3613 common type lest different ways of extending
3615 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
3617 else if (unsignedp0 == unsignedp1 && real1 == real2
3618 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
3619 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
3621 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3622 type = c_common_signed_or_unsigned_type (unsignedp0
3623 || TYPE_UNSIGNED (*restype_ptr),
3625 /* Make sure shorter operand is extended the right way
3626 to match the longer operand. */
3628 = convert (c_common_signed_or_unsigned_type (unsignedp0,
3629 TREE_TYPE (primop0)),
3632 = convert (c_common_signed_or_unsigned_type (unsignedp1,
3633 TREE_TYPE (primop1)),
3638 /* Here we must do the comparison on the nominal type
3639 using the args exactly as we received them. */
3640 type = *restype_ptr;
3644 if (!real1 && !real2 && integer_zerop (primop1)
3645 && TYPE_UNSIGNED (*restype_ptr))
3651 /* All unsigned values are >= 0, so we warn. However,
3652 if OP0 is a constant that is >= 0, the signedness of
3653 the comparison isn't an issue, so suppress the
3655 if (warn_type_limits && !in_system_header
3656 && !(TREE_CODE (primop0) == INTEGER_CST
3657 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3659 warning (OPT_Wtype_limits,
3660 "comparison of unsigned expression >= 0 is always true");
3661 value = truthvalue_true_node;
3665 if (warn_type_limits && !in_system_header
3666 && !(TREE_CODE (primop0) == INTEGER_CST
3667 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3669 warning (OPT_Wtype_limits,
3670 "comparison of unsigned expression < 0 is always false");
3671 value = truthvalue_false_node;
3680 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3681 if (TREE_SIDE_EFFECTS (primop0))
3682 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
3689 *op0_ptr = convert (type, primop0);
3690 *op1_ptr = convert (type, primop1);
3692 *restype_ptr = truthvalue_type_node;
3697 /* Return a tree for the sum or difference (RESULTCODE says which)
3698 of pointer PTROP and integer INTOP. */
3701 pointer_int_sum (location_t loc, enum tree_code resultcode,
3702 tree ptrop, tree intop)
3706 /* The result is a pointer of the same type that is being added. */
3707 tree result_type = TREE_TYPE (ptrop);
3709 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
3711 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3712 "pointer of type %<void *%> used in arithmetic");
3713 size_exp = integer_one_node;
3715 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
3717 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3718 "pointer to a function used in arithmetic");
3719 size_exp = integer_one_node;
3721 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
3723 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3724 "pointer to member function used in arithmetic");
3725 size_exp = integer_one_node;
3728 size_exp = size_in_bytes (TREE_TYPE (result_type));
3730 /* We are manipulating pointer values, so we don't need to warn
3731 about relying on undefined signed overflow. We disable the
3732 warning here because we use integer types so fold won't know that
3733 they are really pointers. */
3734 fold_defer_overflow_warnings ();
3736 /* If what we are about to multiply by the size of the elements
3737 contains a constant term, apply distributive law
3738 and multiply that constant term separately.
3739 This helps produce common subexpressions. */
3740 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3741 && !TREE_CONSTANT (intop)
3742 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
3743 && TREE_CONSTANT (size_exp)
3744 /* If the constant comes from pointer subtraction,
3745 skip this optimization--it would cause an error. */
3746 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
3747 /* If the constant is unsigned, and smaller than the pointer size,
3748 then we must skip this optimization. This is because it could cause
3749 an overflow error if the constant is negative but INTOP is not. */
3750 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
3751 || (TYPE_PRECISION (TREE_TYPE (intop))
3752 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
3754 enum tree_code subcode = resultcode;
3755 tree int_type = TREE_TYPE (intop);
3756 if (TREE_CODE (intop) == MINUS_EXPR)
3757 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
3758 /* Convert both subexpression types to the type of intop,
3759 because weird cases involving pointer arithmetic
3760 can result in a sum or difference with different type args. */
3761 ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
3763 convert (int_type, TREE_OPERAND (intop, 1)), 1);
3764 intop = convert (int_type, TREE_OPERAND (intop, 0));
3767 /* Convert the integer argument to a type the same size as sizetype
3768 so the multiply won't overflow spuriously. */
3769 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
3770 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
3771 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
3772 TYPE_UNSIGNED (sizetype)), intop);
3774 /* Replace the integer argument with a suitable product by the object size.
3775 Do this multiplication as signed, then convert to the appropriate
3776 type for the pointer operation. */
3777 intop = convert (sizetype,
3778 build_binary_op (loc,
3780 convert (TREE_TYPE (intop), size_exp), 1));
3782 /* Create the sum or difference. */
3783 if (resultcode == MINUS_EXPR)
3784 intop = fold_build1_loc (loc, NEGATE_EXPR, sizetype, intop);
3786 ret = fold_build2_loc (loc, POINTER_PLUS_EXPR, result_type, ptrop, intop);
3788 fold_undefer_and_ignore_overflow_warnings ();
3793 /* Wrap a SAVE_EXPR around EXPR, if appropriate. Like save_expr, but
3794 for C folds the inside expression and wraps a C_MAYBE_CONST_EXPR
3795 around the SAVE_EXPR if needed so that c_fully_fold does not need
3796 to look inside SAVE_EXPRs. */
3799 c_save_expr (tree expr)
3801 bool maybe_const = true;
3802 if (c_dialect_cxx ())
3803 return save_expr (expr);
3804 expr = c_fully_fold (expr, false, &maybe_const);
3805 expr = save_expr (expr);
3808 expr = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL, expr);
3809 C_MAYBE_CONST_EXPR_NON_CONST (expr) = 1;
3814 /* Return whether EXPR is a declaration whose address can never be
3818 decl_with_nonnull_addr_p (const_tree expr)
3820 return (DECL_P (expr)
3821 && (TREE_CODE (expr) == PARM_DECL
3822 || TREE_CODE (expr) == LABEL_DECL
3823 || !DECL_WEAK (expr)));
3826 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3827 or for an `if' or `while' statement or ?..: exp. It should already
3828 have been validated to be of suitable type; otherwise, a bad
3829 diagnostic may result.
3831 The EXPR is located at LOCATION.
3833 This preparation consists of taking the ordinary
3834 representation of an expression expr and producing a valid tree
3835 boolean expression describing whether expr is nonzero. We could
3836 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
3837 but we optimize comparisons, &&, ||, and !.
3839 The resulting type should always be `truthvalue_type_node'. */
3842 c_common_truthvalue_conversion (location_t location, tree expr)
3844 switch (TREE_CODE (expr))
3846 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
3847 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
3848 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
3849 case ORDERED_EXPR: case UNORDERED_EXPR:
3850 if (TREE_TYPE (expr) == truthvalue_type_node)
3852 expr = build2 (TREE_CODE (expr), truthvalue_type_node,
3853 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
3856 case TRUTH_ANDIF_EXPR:
3857 case TRUTH_ORIF_EXPR:
3858 case TRUTH_AND_EXPR:
3860 case TRUTH_XOR_EXPR:
3861 if (TREE_TYPE (expr) == truthvalue_type_node)
3863 expr = build2 (TREE_CODE (expr), truthvalue_type_node,
3864 c_common_truthvalue_conversion (location,
3865 TREE_OPERAND (expr, 0)),
3866 c_common_truthvalue_conversion (location,
3867 TREE_OPERAND (expr, 1)));
3870 case TRUTH_NOT_EXPR:
3871 if (TREE_TYPE (expr) == truthvalue_type_node)
3873 expr = build1 (TREE_CODE (expr), truthvalue_type_node,
3874 c_common_truthvalue_conversion (location,
3875 TREE_OPERAND (expr, 0)));
3882 return integer_zerop (expr) ? truthvalue_false_node
3883 : truthvalue_true_node;
3886 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
3887 ? truthvalue_true_node
3888 : truthvalue_false_node;
3891 return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
3892 &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
3893 ? truthvalue_true_node
3894 : truthvalue_false_node;
3897 expr = build_unary_op (location, ADDR_EXPR, expr, 0);
3902 tree inner = TREE_OPERAND (expr, 0);
3903 if (decl_with_nonnull_addr_p (inner))
3905 /* Common Ada/Pascal programmer's mistake. */
3906 warning_at (location,
3908 "the address of %qD will always evaluate as %<true%>",
3910 return truthvalue_true_node;
3913 /* If we still have a decl, it is possible for its address to
3914 be NULL, so we cannot optimize. */
3917 gcc_assert (DECL_WEAK (inner));
3921 if (TREE_SIDE_EFFECTS (inner))
3923 expr = build2 (COMPOUND_EXPR, truthvalue_type_node,
3924 inner, truthvalue_true_node);
3928 return truthvalue_true_node;
3932 expr = build_binary_op (EXPR_LOCATION (expr),
3933 (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3934 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3935 c_common_truthvalue_conversion (location,
3936 TREE_OPERAND (expr, 0)),
3937 c_common_truthvalue_conversion (location,
3938 TREE_OPERAND (expr, 1)),
3945 case EXCESS_PRECISION_EXPR:
3946 /* These don't change whether an object is nonzero or zero. */
3947 return c_common_truthvalue_conversion (location, TREE_OPERAND (expr, 0));
3951 /* These don't change whether an object is zero or nonzero, but
3952 we can't ignore them if their second arg has side-effects. */
3953 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3955 expr = build2 (COMPOUND_EXPR, truthvalue_type_node,
3956 TREE_OPERAND (expr, 1),
3957 c_common_truthvalue_conversion
3958 (location, TREE_OPERAND (expr, 0)));
3962 return c_common_truthvalue_conversion (location,
3963 TREE_OPERAND (expr, 0));
3966 /* Distribute the conversion into the arms of a COND_EXPR. */
3967 if (c_dialect_cxx ())
3969 expr = fold_build3_loc (location, COND_EXPR, truthvalue_type_node,
3970 TREE_OPERAND (expr, 0),
3971 c_common_truthvalue_conversion (location,
3974 c_common_truthvalue_conversion (location,
3981 /* Folding will happen later for C. */
3982 expr = build3 (COND_EXPR, truthvalue_type_node,
3983 TREE_OPERAND (expr, 0),
3984 c_common_truthvalue_conversion (location,
3985 TREE_OPERAND (expr, 1)),
3986 c_common_truthvalue_conversion (location,
3987 TREE_OPERAND (expr, 2)));
3992 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3993 since that affects how `default_conversion' will behave. */
3994 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3995 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3997 /* If this is widening the argument, we can ignore it. */
3998 if (TYPE_PRECISION (TREE_TYPE (expr))
3999 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
4000 return c_common_truthvalue_conversion (location,
4001 TREE_OPERAND (expr, 0));
4005 if (!TREE_NO_WARNING (expr)
4006 && warn_parentheses)
4008 warning (OPT_Wparentheses,
4009 "suggest parentheses around assignment used as truth value");
4010 TREE_NO_WARNING (expr) = 1;
4018 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
4020 tree t = c_save_expr (expr);
4021 expr = (build_binary_op
4022 (EXPR_LOCATION (expr),
4023 (TREE_SIDE_EFFECTS (expr)
4024 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
4025 c_common_truthvalue_conversion
4027 build_unary_op (location, REALPART_EXPR, t, 0)),
4028 c_common_truthvalue_conversion
4030 build_unary_op (location, IMAGPART_EXPR, t, 0)),
4035 if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
4037 tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
4039 (TREE_TYPE (expr))));
4040 return build_binary_op (location, NE_EXPR, expr, fixed_zero_node, 1);
4043 return build_binary_op (location, NE_EXPR, expr, integer_zero_node, 1);
4046 protected_set_expr_location (expr, location);
4050 static void def_builtin_1 (enum built_in_function fncode,
4052 enum built_in_class fnclass,
4053 tree fntype, tree libtype,
4054 bool both_p, bool fallback_p, bool nonansi_p,
4055 tree fnattrs, bool implicit_p);
4058 /* Apply the TYPE_QUALS to the new DECL. */
4061 c_apply_type_quals_to_decl (int type_quals, tree decl)
4063 tree type = TREE_TYPE (decl);
4065 if (type == error_mark_node)
4068 if (((type_quals & TYPE_QUAL_CONST)
4069 || (type && TREE_CODE (type) == REFERENCE_TYPE))
4070 /* An object declared 'const' is only readonly after it is
4071 initialized. We don't have any way of expressing this currently,
4072 so we need to be conservative and unset TREE_READONLY for types
4073 with constructors. Otherwise aliasing code will ignore stores in
4074 an inline constructor. */
4075 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
4076 TREE_READONLY (decl) = 1;
4077 if (type_quals & TYPE_QUAL_VOLATILE)
4079 TREE_SIDE_EFFECTS (decl) = 1;
4080 TREE_THIS_VOLATILE (decl) = 1;
4082 if (type_quals & TYPE_QUAL_RESTRICT)
4084 while (type && TREE_CODE (type) == ARRAY_TYPE)
4085 /* Allow 'restrict' on arrays of pointers.
4086 FIXME currently we just ignore it. */
4087 type = TREE_TYPE (type);
4089 || !POINTER_TYPE_P (type)
4090 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
4091 error ("invalid use of %<restrict%>");
4095 /* Hash function for the problem of multiple type definitions in
4096 different files. This must hash all types that will compare
4097 equal via comptypes to the same value. In practice it hashes
4098 on some of the simple stuff and leaves the details to comptypes. */
4101 c_type_hash (const void *p)
4105 const_tree const t = (const_tree) p;
4107 switch (TREE_CODE (t))
4109 /* For pointers, hash on pointee type plus some swizzling. */
4111 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
4112 /* Hash on number of elements and total size. */
4115 t2 = TYPE_VALUES (t);
4119 t2 = TYPE_FIELDS (t);
4121 case QUAL_UNION_TYPE:
4123 t2 = TYPE_FIELDS (t);
4127 t2 = TYPE_FIELDS (t);
4132 for (; t2; t2 = TREE_CHAIN (t2))
4134 /* We might have a VLA here. */
4135 if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
4138 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
4139 return ((size << 24) | (i << shift));
4142 static GTY((param_is (union tree_node))) htab_t type_hash_table;
4144 /* Return the typed-based alias set for T, which may be an expression
4145 or a type. Return -1 if we don't do anything special. */
4148 c_common_get_alias_set (tree t)
4153 /* Permit type-punning when accessing a union, provided the access
4154 is directly through the union. For example, this code does not
4155 permit taking the address of a union member and then storing
4156 through it. Even the type-punning allowed here is a GCC
4157 extension, albeit a common and useful one; the C standard says
4158 that such accesses have implementation-defined behavior. */
4160 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4161 u = TREE_OPERAND (u, 0))
4162 if (TREE_CODE (u) == COMPONENT_REF
4163 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4166 /* That's all the expressions we handle specially. */
4170 /* The C standard guarantees that any object may be accessed via an
4171 lvalue that has character type. */
4172 if (t == char_type_node
4173 || t == signed_char_type_node
4174 || t == unsigned_char_type_node)
4177 /* The C standard specifically allows aliasing between signed and
4178 unsigned variants of the same type. We treat the signed
4179 variant as canonical. */
4180 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
4182 tree t1 = c_common_signed_type (t);
4184 /* t1 == t can happen for boolean nodes which are always unsigned. */
4186 return get_alias_set (t1);
4188 else if (POINTER_TYPE_P (t))
4192 /* Unfortunately, there is no canonical form of a pointer type.
4193 In particular, if we have `typedef int I', then `int *', and
4194 `I *' are different types. So, we have to pick a canonical
4195 representative. We do this below.
4197 Technically, this approach is actually more conservative that
4198 it needs to be. In particular, `const int *' and `int *'
4199 should be in different alias sets, according to the C and C++
4200 standard, since their types are not the same, and so,
4201 technically, an `int **' and `const int **' cannot point at
4204 But, the standard is wrong. In particular, this code is
4209 const int* const* cipp = ipp;
4211 And, it doesn't make sense for that to be legal unless you
4212 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
4213 the pointed-to types. This issue has been reported to the
4215 t1 = build_type_no_quals (t);
4217 return get_alias_set (t1);
4220 /* Handle the case of multiple type nodes referring to "the same" type,
4221 which occurs with IMA. These share an alias set. FIXME: Currently only
4222 C90 is handled. (In C99 type compatibility is not transitive, which
4223 complicates things mightily. The alias set splay trees can theoretically
4224 represent this, but insertion is tricky when you consider all the
4225 different orders things might arrive in.) */
4227 if (c_language != clk_c || flag_isoc99)
4230 /* Save time if there's only one input file. */
4231 if (num_in_fnames == 1)
4234 /* Pointers need special handling if they point to any type that
4235 needs special handling (below). */
4236 if (TREE_CODE (t) == POINTER_TYPE)
4239 /* Find bottom type under any nested POINTERs. */
4240 for (t2 = TREE_TYPE (t);
4241 TREE_CODE (t2) == POINTER_TYPE;
4242 t2 = TREE_TYPE (t2))
4244 if (TREE_CODE (t2) != RECORD_TYPE
4245 && TREE_CODE (t2) != ENUMERAL_TYPE
4246 && TREE_CODE (t2) != QUAL_UNION_TYPE
4247 && TREE_CODE (t2) != UNION_TYPE)
4249 if (TYPE_SIZE (t2) == 0)
4252 /* These are the only cases that need special handling. */
4253 if (TREE_CODE (t) != RECORD_TYPE
4254 && TREE_CODE (t) != ENUMERAL_TYPE
4255 && TREE_CODE (t) != QUAL_UNION_TYPE
4256 && TREE_CODE (t) != UNION_TYPE
4257 && TREE_CODE (t) != POINTER_TYPE)
4260 if (TYPE_SIZE (t) == 0)
4263 /* Look up t in hash table. Only one of the compatible types within each
4264 alias set is recorded in the table. */
4265 if (!type_hash_table)
4266 type_hash_table = htab_create_ggc (1021, c_type_hash,
4267 (htab_eq) lang_hooks.types_compatible_p,
4269 slot = htab_find_slot (type_hash_table, t, INSERT);
4272 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
4273 return TYPE_ALIAS_SET ((tree)*slot);
4276 /* Our caller will assign and record (in t) a new alias set; all we need
4277 to do is remember t in the hash table. */
4283 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where
4284 the second parameter indicates which OPERATOR is being applied.
4285 The COMPLAIN flag controls whether we should diagnose possibly
4286 ill-formed constructs or not. LOC is the location of the SIZEOF or
4290 c_sizeof_or_alignof_type (location_t loc,
4291 tree type, bool is_sizeof, int complain)
4293 const char *op_name;
4295 enum tree_code type_code = TREE_CODE (type);
4297 op_name = is_sizeof ? "sizeof" : "__alignof__";
4299 if (type_code == FUNCTION_TYPE)
4303 if (complain && (pedantic || warn_pointer_arith))
4304 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4305 "invalid application of %<sizeof%> to a function type");
4307 return error_mark_node;
4308 value = size_one_node;
4311 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
4313 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
4315 if (type_code == VOID_TYPE
4316 && complain && (pedantic || warn_pointer_arith))
4317 pedwarn (loc, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4318 "invalid application of %qs to a void type", op_name);
4320 return error_mark_node;
4321 value = size_one_node;
4323 else if (!COMPLETE_TYPE_P (type))
4326 error_at (loc, "invalid application of %qs to incomplete type %qT ",
4328 value = size_zero_node;
4333 /* Convert in case a char is more than one unit. */
4334 value = size_binop_loc (loc, CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
4335 size_int (TYPE_PRECISION (char_type_node)
4338 value = size_int (TYPE_ALIGN_UNIT (type));
4341 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
4342 TYPE_IS_SIZETYPE means that certain things (like overflow) will
4343 never happen. However, this node should really have type
4344 `size_t', which is just a typedef for an ordinary integer type. */
4345 value = fold_convert_loc (loc, size_type_node, value);
4346 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
4351 /* Implement the __alignof keyword: Return the minimum required
4352 alignment of EXPR, measured in bytes. For VAR_DECLs,
4353 FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
4354 from an "aligned" __attribute__ specification). LOC is the
4355 location of the ALIGNOF operator. */
4358 c_alignof_expr (location_t loc, tree expr)
4362 if (VAR_OR_FUNCTION_DECL_P (expr))
4363 t = size_int (DECL_ALIGN_UNIT (expr));
4365 else if (TREE_CODE (expr) == COMPONENT_REF
4366 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
4368 error_at (loc, "%<__alignof%> applied to a bit-field");
4371 else if (TREE_CODE (expr) == COMPONENT_REF
4372 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
4373 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
4375 else if (TREE_CODE (expr) == INDIRECT_REF)
4377 tree t = TREE_OPERAND (expr, 0);
4379 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4381 while (CONVERT_EXPR_P (t)
4382 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
4386 t = TREE_OPERAND (t, 0);
4387 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4388 if (thisalign > bestalign)
4389 best = t, bestalign = thisalign;
4391 return c_alignof (loc, TREE_TYPE (TREE_TYPE (best)));
4394 return c_alignof (loc, TREE_TYPE (expr));
4396 return fold_convert_loc (loc, size_type_node, t);
4399 /* Handle C and C++ default attributes. */
4401 enum built_in_attribute
4403 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4404 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4405 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4406 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4407 #include "builtin-attrs.def"
4408 #undef DEF_ATTR_NULL_TREE
4410 #undef DEF_ATTR_IDENT
4411 #undef DEF_ATTR_TREE_LIST
4415 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
4417 static void c_init_attributes (void);
4421 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
4422 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
4423 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
4424 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
4425 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4426 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4427 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
4428 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
4429 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
4430 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
4431 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
4432 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
4433 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4434 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4435 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
4437 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
4438 #include "builtin-types.def"
4439 #undef DEF_PRIMITIVE_TYPE
4440 #undef DEF_FUNCTION_TYPE_0
4441 #undef DEF_FUNCTION_TYPE_1
4442 #undef DEF_FUNCTION_TYPE_2
4443 #undef DEF_FUNCTION_TYPE_3
4444 #undef DEF_FUNCTION_TYPE_4
4445 #undef DEF_FUNCTION_TYPE_5
4446 #undef DEF_FUNCTION_TYPE_6
4447 #undef DEF_FUNCTION_TYPE_7
4448 #undef DEF_FUNCTION_TYPE_VAR_0
4449 #undef DEF_FUNCTION_TYPE_VAR_1
4450 #undef DEF_FUNCTION_TYPE_VAR_2
4451 #undef DEF_FUNCTION_TYPE_VAR_3
4452 #undef DEF_FUNCTION_TYPE_VAR_4
4453 #undef DEF_FUNCTION_TYPE_VAR_5
4454 #undef DEF_POINTER_TYPE
4458 typedef enum c_builtin_type builtin_type;
4460 /* A temporary array for c_common_nodes_and_builtins. Used in
4461 communication with def_fn_type. */
4462 static tree builtin_types[(int) BT_LAST + 1];
4464 /* A helper function for c_common_nodes_and_builtins. Build function type
4465 for DEF with return type RET and N arguments. If VAR is true, then the
4466 function should be variadic after those N arguments.
4468 Takes special care not to ICE if any of the types involved are
4469 error_mark_node, which indicates that said type is not in fact available
4470 (see builtin_type_for_size). In which case the function type as a whole
4471 should be error_mark_node. */
4474 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
4476 tree args = NULL, t;
4481 for (i = 0; i < n; ++i)
4483 builtin_type a = (builtin_type) va_arg (list, int);
4484 t = builtin_types[a];
4485 if (t == error_mark_node)
4487 args = tree_cons (NULL_TREE, t, args);
4491 args = nreverse (args);
4493 args = chainon (args, void_list_node);
4495 t = builtin_types[ret];
4496 if (t == error_mark_node)
4498 t = build_function_type (t, args);
4501 builtin_types[def] = t;
4504 /* Build builtin functions common to both C and C++ language
4508 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
4510 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
4511 builtin_types[ENUM] = VALUE;
4512 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
4513 def_fn_type (ENUM, RETURN, 0, 0);
4514 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
4515 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
4516 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
4517 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
4518 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4519 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
4520 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4521 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
4522 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4523 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4524 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4526 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
4527 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4529 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
4530 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
4531 def_fn_type (ENUM, RETURN, 1, 0);
4532 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
4533 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
4534 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
4535 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
4536 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4537 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
4538 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4539 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
4540 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4541 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4542 #define DEF_POINTER_TYPE(ENUM, TYPE) \
4543 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
4545 #include "builtin-types.def"
4547 #undef DEF_PRIMITIVE_TYPE
4548 #undef DEF_FUNCTION_TYPE_1
4549 #undef DEF_FUNCTION_TYPE_2
4550 #undef DEF_FUNCTION_TYPE_3
4551 #undef DEF_FUNCTION_TYPE_4
4552 #undef DEF_FUNCTION_TYPE_5
4553 #undef DEF_FUNCTION_TYPE_6
4554 #undef DEF_FUNCTION_TYPE_VAR_0
4555 #undef DEF_FUNCTION_TYPE_VAR_1
4556 #undef DEF_FUNCTION_TYPE_VAR_2
4557 #undef DEF_FUNCTION_TYPE_VAR_3
4558 #undef DEF_FUNCTION_TYPE_VAR_4
4559 #undef DEF_FUNCTION_TYPE_VAR_5
4560 #undef DEF_POINTER_TYPE
4561 builtin_types[(int) BT_LAST] = NULL_TREE;
4563 c_init_attributes ();
4565 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
4566 NONANSI_P, ATTRS, IMPLICIT, COND) \
4568 def_builtin_1 (ENUM, NAME, CLASS, \
4569 builtin_types[(int) TYPE], \
4570 builtin_types[(int) LIBTYPE], \
4571 BOTH_P, FALLBACK_P, NONANSI_P, \
4572 built_in_attributes[(int) ATTRS], IMPLICIT);
4573 #include "builtins.def"
4576 targetm.init_builtins ();
4578 build_common_builtin_nodes ();
4584 /* Like get_identifier, but avoid warnings about null arguments when
4585 the argument may be NULL for targets where GCC lacks stdint.h type
4589 c_get_ident (const char *id)
4591 return get_identifier (id);
4594 /* Build tree nodes and builtin functions common to both C and C++ language
4598 c_common_nodes_and_builtins (void)
4600 int char16_type_size;
4601 int char32_type_size;
4602 int wchar_type_size;
4603 tree array_domain_type;
4604 tree va_list_ref_type_node;
4605 tree va_list_arg_type_node;
4607 /* Define `int' and `char' first so that dbx will output them first. */
4608 record_builtin_type (RID_INT, NULL, integer_type_node);
4609 record_builtin_type (RID_CHAR, "char", char_type_node);
4611 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
4612 "unsigned long", "long long unsigned" and "unsigned short" were in C++
4613 but not C. Are the conditionals here needed? */
4614 if (c_dialect_cxx ())
4615 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
4616 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4617 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4618 record_builtin_type (RID_MAX, "long unsigned int",
4619 long_unsigned_type_node);
4620 if (c_dialect_cxx ())
4621 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4622 record_builtin_type (RID_MAX, "long long int",
4623 long_long_integer_type_node);
4624 record_builtin_type (RID_MAX, "long long unsigned int",
4625 long_long_unsigned_type_node);
4626 if (c_dialect_cxx ())
4627 record_builtin_type (RID_MAX, "long long unsigned",
4628 long_long_unsigned_type_node);
4629 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4630 record_builtin_type (RID_MAX, "short unsigned int",
4631 short_unsigned_type_node);
4632 if (c_dialect_cxx ())
4633 record_builtin_type (RID_MAX, "unsigned short",
4634 short_unsigned_type_node);
4636 /* Define both `signed char' and `unsigned char'. */
4637 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
4638 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
4640 /* These are types that c_common_type_for_size and
4641 c_common_type_for_mode use. */
4642 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4643 TYPE_DECL, NULL_TREE,
4645 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4646 TYPE_DECL, NULL_TREE,
4648 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4649 TYPE_DECL, NULL_TREE,
4651 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4652 TYPE_DECL, NULL_TREE,
4654 #if HOST_BITS_PER_WIDE_INT >= 64
4655 if (targetm.scalar_mode_supported_p (TImode))
4656 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4658 get_identifier ("__int128_t"),
4661 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4662 TYPE_DECL, NULL_TREE,
4663 unsigned_intQI_type_node));
4664 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4665 TYPE_DECL, NULL_TREE,
4666 unsigned_intHI_type_node));
4667 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4668 TYPE_DECL, NULL_TREE,
4669 unsigned_intSI_type_node));
4670 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4671 TYPE_DECL, NULL_TREE,
4672 unsigned_intDI_type_node));
4673 #if HOST_BITS_PER_WIDE_INT >= 64
4674 if (targetm.scalar_mode_supported_p (TImode))
4675 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4677 get_identifier ("__uint128_t"),
4678 unsigned_intTI_type_node));
4681 /* Create the widest literal types. */
4682 widest_integer_literal_type_node
4683 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
4684 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4685 TYPE_DECL, NULL_TREE,
4686 widest_integer_literal_type_node));
4688 widest_unsigned_literal_type_node
4689 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
4690 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4691 TYPE_DECL, NULL_TREE,
4692 widest_unsigned_literal_type_node));
4694 /* `unsigned long' is the standard type for sizeof.
4695 Note that stddef.h uses `unsigned long',
4696 and this must agree, even if long and int are the same size. */
4698 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
4699 signed_size_type_node = c_common_signed_type (size_type_node);
4700 set_sizetype (size_type_node);
4703 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
4705 build_common_tree_nodes_2 (flag_short_double);
4707 record_builtin_type (RID_FLOAT, NULL, float_type_node);
4708 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
4709 record_builtin_type (RID_MAX, "long double", long_double_type_node);
4711 /* Only supported decimal floating point extension if the target
4712 actually supports underlying modes. */
4713 if (targetm.scalar_mode_supported_p (SDmode)
4714 && targetm.scalar_mode_supported_p (DDmode)
4715 && targetm.scalar_mode_supported_p (TDmode))
4717 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
4718 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
4719 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
4722 if (targetm.fixed_point_supported_p ())
4724 record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
4725 record_builtin_type (RID_FRACT, NULL, fract_type_node);
4726 record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
4727 record_builtin_type (RID_MAX, "long long _Fract",
4728 long_long_fract_type_node);
4729 record_builtin_type (RID_MAX, "unsigned short _Fract",
4730 unsigned_short_fract_type_node);
4731 record_builtin_type (RID_MAX, "unsigned _Fract",
4732 unsigned_fract_type_node);
4733 record_builtin_type (RID_MAX, "unsigned long _Fract",
4734 unsigned_long_fract_type_node);
4735 record_builtin_type (RID_MAX, "unsigned long long _Fract",
4736 unsigned_long_long_fract_type_node);
4737 record_builtin_type (RID_MAX, "_Sat short _Fract",
4738 sat_short_fract_type_node);
4739 record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
4740 record_builtin_type (RID_MAX, "_Sat long _Fract",
4741 sat_long_fract_type_node);
4742 record_builtin_type (RID_MAX, "_Sat long long _Fract",
4743 sat_long_long_fract_type_node);
4744 record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
4745 sat_unsigned_short_fract_type_node);
4746 record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
4747 sat_unsigned_fract_type_node);
4748 record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
4749 sat_unsigned_long_fract_type_node);
4750 record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
4751 sat_unsigned_long_long_fract_type_node);
4752 record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
4753 record_builtin_type (RID_ACCUM, NULL, accum_type_node);
4754 record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
4755 record_builtin_type (RID_MAX, "long long _Accum",
4756 long_long_accum_type_node);
4757 record_builtin_type (RID_MAX, "unsigned short _Accum",
4758 unsigned_short_accum_type_node);
4759 record_builtin_type (RID_MAX, "unsigned _Accum",
4760 unsigned_accum_type_node);
4761 record_builtin_type (RID_MAX, "unsigned long _Accum",
4762 unsigned_long_accum_type_node);
4763 record_builtin_type (RID_MAX, "unsigned long long _Accum",
4764 unsigned_long_long_accum_type_node);
4765 record_builtin_type (RID_MAX, "_Sat short _Accum",
4766 sat_short_accum_type_node);
4767 record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
4768 record_builtin_type (RID_MAX, "_Sat long _Accum",
4769 sat_long_accum_type_node);
4770 record_builtin_type (RID_MAX, "_Sat long long _Accum",
4771 sat_long_long_accum_type_node);
4772 record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
4773 sat_unsigned_short_accum_type_node);
4774 record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
4775 sat_unsigned_accum_type_node);
4776 record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
4777 sat_unsigned_long_accum_type_node);
4778 record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
4779 sat_unsigned_long_long_accum_type_node);
4783 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4785 get_identifier ("complex int"),
4786 complex_integer_type_node));
4787 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4789 get_identifier ("complex float"),
4790 complex_float_type_node));
4791 lang_hooks.decls.pushdecl (build_decl (UNKNOWN_LOCATION,
4793 get_identifier ("complex double"),
4794 complex_double_type_node));
4795 lang_hooks.decls.pushdecl
4796 (build_decl (UNKNOWN_LOCATION,
4797 TYPE_DECL, get_identifier ("complex long double"),
4798 complex_long_double_type_node));
4800 if (c_dialect_cxx ())
4801 /* For C++, make fileptr_type_node a distinct void * type until
4802 FILE type is defined. */
4803 fileptr_type_node = build_variant_type_copy (ptr_type_node);
4805 record_builtin_type (RID_VOID, NULL, void_type_node);
4807 /* Set the TYPE_NAME for any variants that were built before
4808 record_builtin_type gave names to the built-in types. */
4810 tree void_name = TYPE_NAME (void_type_node);
4811 TYPE_NAME (void_type_node) = NULL_TREE;
4812 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
4814 TYPE_NAME (void_type_node) = void_name;
4817 /* This node must not be shared. */
4818 void_zero_node = make_node (INTEGER_CST);
4819 TREE_TYPE (void_zero_node) = void_type_node;
4821 void_list_node = build_void_list_node ();
4823 /* Make a type to be the domain of a few array types
4824 whose domains don't really matter.
4825 200 is small enough that it always fits in size_t
4826 and large enough that it can hold most function names for the
4827 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
4828 array_domain_type = build_index_type (size_int (200));
4830 /* Make a type for arrays of characters.
4831 With luck nothing will ever really depend on the length of this
4833 char_array_type_node
4834 = build_array_type (char_type_node, array_domain_type);
4836 /* Likewise for arrays of ints. */
4838 = build_array_type (integer_type_node, array_domain_type);
4840 string_type_node = build_pointer_type (char_type_node);
4841 const_string_type_node
4842 = build_pointer_type (build_qualified_type
4843 (char_type_node, TYPE_QUAL_CONST));
4845 /* This is special for C++ so functions can be overloaded. */
4846 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
4847 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
4848 wchar_type_size = TYPE_PRECISION (wchar_type_node);
4849 underlying_wchar_type_node = wchar_type_node;
4850 if (c_dialect_cxx ())
4852 if (TYPE_UNSIGNED (wchar_type_node))
4853 wchar_type_node = make_unsigned_type (wchar_type_size);
4855 wchar_type_node = make_signed_type (wchar_type_size);
4856 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
4859 /* This is for wide string constants. */
4860 wchar_array_type_node
4861 = build_array_type (wchar_type_node, array_domain_type);
4863 /* Define 'char16_t'. */
4864 char16_type_node = get_identifier (CHAR16_TYPE);
4865 char16_type_node = TREE_TYPE (identifier_global_value (char16_type_node));
4866 char16_type_size = TYPE_PRECISION (char16_type_node);
4867 if (c_dialect_cxx ())
4869 char16_type_node = make_unsigned_type (char16_type_size);
4871 if (cxx_dialect == cxx0x)
4872 record_builtin_type (RID_CHAR16, "char16_t", char16_type_node);
4875 /* This is for UTF-16 string constants. */
4876 char16_array_type_node
4877 = build_array_type (char16_type_node, array_domain_type);
4879 /* Define 'char32_t'. */
4880 char32_type_node = get_identifier (CHAR32_TYPE);
4881 char32_type_node = TREE_TYPE (identifier_global_value (char32_type_node));
4882 char32_type_size = TYPE_PRECISION (char32_type_node);
4883 if (c_dialect_cxx ())
4885 char32_type_node = make_unsigned_type (char32_type_size);
4887 if (cxx_dialect == cxx0x)
4888 record_builtin_type (RID_CHAR32, "char32_t", char32_type_node);
4891 /* This is for UTF-32 string constants. */
4892 char32_array_type_node
4893 = build_array_type (char32_type_node, array_domain_type);
4896 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
4899 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
4901 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
4903 if (SIG_ATOMIC_TYPE)
4904 sig_atomic_type_node =
4905 TREE_TYPE (identifier_global_value (c_get_ident (SIG_ATOMIC_TYPE)));
4908 TREE_TYPE (identifier_global_value (c_get_ident (INT8_TYPE)));
4911 TREE_TYPE (identifier_global_value (c_get_ident (INT16_TYPE)));
4914 TREE_TYPE (identifier_global_value (c_get_ident (INT32_TYPE)));
4917 TREE_TYPE (identifier_global_value (c_get_ident (INT64_TYPE)));
4920 TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
4923 TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
4925 c_uint32_type_node =
4926 TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
4928 c_uint64_type_node =
4929 TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
4930 if (INT_LEAST8_TYPE)
4931 int_least8_type_node =
4932 TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST8_TYPE)));
4933 if (INT_LEAST16_TYPE)
4934 int_least16_type_node =
4935 TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST16_TYPE)));
4936 if (INT_LEAST32_TYPE)
4937 int_least32_type_node =
4938 TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST32_TYPE)));
4939 if (INT_LEAST64_TYPE)
4940 int_least64_type_node =
4941 TREE_TYPE (identifier_global_value (c_get_ident (INT_LEAST64_TYPE)));
4942 if (UINT_LEAST8_TYPE)
4943 uint_least8_type_node =
4944 TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST8_TYPE)));
4945 if (UINT_LEAST16_TYPE)
4946 uint_least16_type_node =
4947 TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST16_TYPE)));
4948 if (UINT_LEAST32_TYPE)
4949 uint_least32_type_node =
4950 TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST32_TYPE)));
4951 if (UINT_LEAST64_TYPE)
4952 uint_least64_type_node =
4953 TREE_TYPE (identifier_global_value (c_get_ident (UINT_LEAST64_TYPE)));
4955 int_fast8_type_node =
4956 TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST8_TYPE)));
4957 if (INT_FAST16_TYPE)
4958 int_fast16_type_node =
4959 TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST16_TYPE)));
4960 if (INT_FAST32_TYPE)
4961 int_fast32_type_node =
4962 TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST32_TYPE)));
4963 if (INT_FAST64_TYPE)
4964 int_fast64_type_node =
4965 TREE_TYPE (identifier_global_value (c_get_ident (INT_FAST64_TYPE)));
4966 if (UINT_FAST8_TYPE)
4967 uint_fast8_type_node =
4968 TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST8_TYPE)));
4969 if (UINT_FAST16_TYPE)
4970 uint_fast16_type_node =
4971 TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST16_TYPE)));
4972 if (UINT_FAST32_TYPE)
4973 uint_fast32_type_node =
4974 TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST32_TYPE)));
4975 if (UINT_FAST64_TYPE)
4976 uint_fast64_type_node =
4977 TREE_TYPE (identifier_global_value (c_get_ident (UINT_FAST64_TYPE)));
4980 TREE_TYPE (identifier_global_value (c_get_ident (INTPTR_TYPE)));
4983 TREE_TYPE (identifier_global_value (c_get_ident (UINTPTR_TYPE)));
4985 default_function_type = build_function_type (integer_type_node, NULL_TREE);
4987 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
4988 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
4990 lang_hooks.decls.pushdecl
4991 (build_decl (UNKNOWN_LOCATION,
4992 TYPE_DECL, get_identifier ("__builtin_va_list"),
4993 va_list_type_node));
4994 #ifdef TARGET_ENUM_VA_LIST
4999 for (l = 0; TARGET_ENUM_VA_LIST (l, &pname, &ptype); ++l)
5001 lang_hooks.decls.pushdecl
5002 (build_decl (UNKNOWN_LOCATION,
5003 TYPE_DECL, get_identifier (pname),
5010 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
5012 va_list_arg_type_node = va_list_ref_type_node =
5013 build_pointer_type (TREE_TYPE (va_list_type_node));
5017 va_list_arg_type_node = va_list_type_node;
5018 va_list_ref_type_node = build_reference_type (va_list_type_node);
5021 if (!flag_preprocess_only)
5022 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
5024 main_identifier_node = get_identifier ("main");
5026 /* Create the built-in __null node. It is important that this is
5028 null_node = make_node (INTEGER_CST);
5029 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
5031 /* Since builtin_types isn't gc'ed, don't export these nodes. */
5032 memset (builtin_types, 0, sizeof (builtin_types));
5035 /* The number of named compound-literals generated thus far. */
5036 static GTY(()) int compound_literal_number;
5038 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
5041 set_compound_literal_name (tree decl)
5044 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
5045 compound_literal_number);
5046 compound_literal_number++;
5047 DECL_NAME (decl) = get_identifier (name);
5051 build_va_arg (location_t loc, tree expr, tree type)
5053 expr = build1 (VA_ARG_EXPR, type, expr);
5054 SET_EXPR_LOCATION (expr, loc);
5059 /* Linked list of disabled built-in functions. */
5061 typedef struct disabled_builtin
5064 struct disabled_builtin *next;
5066 static disabled_builtin *disabled_builtins = NULL;
5068 static bool builtin_function_disabled_p (const char *);
5070 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
5071 begins with "__builtin_", give an error. */
5074 disable_builtin_function (const char *name)
5076 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
5077 error ("cannot disable built-in function %qs", name);
5080 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
5081 new_disabled_builtin->name = name;
5082 new_disabled_builtin->next = disabled_builtins;
5083 disabled_builtins = new_disabled_builtin;
5088 /* Return true if the built-in function NAME has been disabled, false
5092 builtin_function_disabled_p (const char *name)
5094 disabled_builtin *p;
5095 for (p = disabled_builtins; p != NULL; p = p->next)
5097 if (strcmp (name, p->name) == 0)
5104 /* Worker for DEF_BUILTIN.
5105 Possibly define a builtin function with one or two names.
5106 Does not declare a non-__builtin_ function if flag_no_builtin, or if
5107 nonansi_p and flag_no_nonansi_builtin. */
5110 def_builtin_1 (enum built_in_function fncode,
5112 enum built_in_class fnclass,
5113 tree fntype, tree libtype,
5114 bool both_p, bool fallback_p, bool nonansi_p,
5115 tree fnattrs, bool implicit_p)
5118 const char *libname;
5120 if (fntype == error_mark_node)
5123 gcc_assert ((!both_p && !fallback_p)
5124 || !strncmp (name, "__builtin_",
5125 strlen ("__builtin_")));
5127 libname = name + strlen ("__builtin_");
5128 decl = add_builtin_function (name, fntype, fncode, fnclass,
5129 (fallback_p ? libname : NULL),
5132 && !flag_no_builtin && !builtin_function_disabled_p (libname)
5133 && !(nonansi_p && flag_no_nonansi_builtin))
5134 add_builtin_function (libname, libtype, fncode, fnclass,
5137 built_in_decls[(int) fncode] = decl;
5139 implicit_built_in_decls[(int) fncode] = decl;
5142 /* Nonzero if the type T promotes to int. This is (nearly) the
5143 integral promotions defined in ISO C99 6.3.1.1/2. */
5146 c_promoting_integer_type_p (const_tree t)
5148 switch (TREE_CODE (t))
5151 return (TYPE_MAIN_VARIANT (t) == char_type_node
5152 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
5153 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
5154 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
5155 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
5156 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
5159 /* ??? Technically all enumerations not larger than an int
5160 promote to an int. But this is used along code paths
5161 that only want to notice a size change. */
5162 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
5172 /* Return 1 if PARMS specifies a fixed number of parameters
5173 and none of their types is affected by default promotions. */
5176 self_promoting_args_p (const_tree parms)
5179 for (t = parms; t; t = TREE_CHAIN (t))
5181 tree type = TREE_VALUE (t);
5183 if (type == error_mark_node)
5186 if (TREE_CHAIN (t) == 0 && type != void_type_node)
5192 if (TYPE_MAIN_VARIANT (type) == float_type_node)
5195 if (c_promoting_integer_type_p (type))
5201 /* Recursively remove any '*' or '&' operator from TYPE. */
5203 strip_pointer_operator (tree t)
5205 while (POINTER_TYPE_P (t))
5210 /* Recursively remove pointer or array type from TYPE. */
5212 strip_pointer_or_array_types (tree t)
5214 while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
5219 /* Used to compare case labels. K1 and K2 are actually tree nodes
5220 representing case labels, or NULL_TREE for a `default' label.
5221 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
5222 K2, and 0 if K1 and K2 are equal. */
5225 case_compare (splay_tree_key k1, splay_tree_key k2)
5227 /* Consider a NULL key (such as arises with a `default' label) to be
5228 smaller than anything else. */
5234 return tree_int_cst_compare ((tree) k1, (tree) k2);
5237 /* Process a case label, located at LOC, for the range LOW_VALUE
5238 ... HIGH_VALUE. If LOW_VALUE and HIGH_VALUE are both NULL_TREE
5239 then this case label is actually a `default' label. If only
5240 HIGH_VALUE is NULL_TREE, then case label was declared using the
5241 usual C/C++ syntax, rather than the GNU case range extension.
5242 CASES is a tree containing all the case ranges processed so far;
5243 COND is the condition for the switch-statement itself. Returns the
5244 CASE_LABEL_EXPR created, or ERROR_MARK_NODE if no CASE_LABEL_EXPR
5248 c_add_case_label (location_t loc, splay_tree cases, tree cond, tree orig_type,
5249 tree low_value, tree high_value)
5254 splay_tree_node node;
5256 /* Create the LABEL_DECL itself. */
5257 label = create_artificial_label (loc);
5259 /* If there was an error processing the switch condition, bail now
5260 before we get more confused. */
5261 if (!cond || cond == error_mark_node)
5264 if ((low_value && TREE_TYPE (low_value)
5265 && POINTER_TYPE_P (TREE_TYPE (low_value)))
5266 || (high_value && TREE_TYPE (high_value)
5267 && POINTER_TYPE_P (TREE_TYPE (high_value))))
5269 error_at (loc, "pointers are not permitted as case values");
5273 /* Case ranges are a GNU extension. */
5275 pedwarn (loc, OPT_pedantic,
5276 "range expressions in switch statements are non-standard");
5278 type = TREE_TYPE (cond);
5281 low_value = check_case_value (low_value);
5282 low_value = convert_and_check (type, low_value);
5283 if (low_value == error_mark_node)
5288 high_value = check_case_value (high_value);
5289 high_value = convert_and_check (type, high_value);
5290 if (high_value == error_mark_node)
5294 if (low_value && high_value)
5296 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5297 really a case range, even though it was written that way.
5298 Remove the HIGH_VALUE to simplify later processing. */
5299 if (tree_int_cst_equal (low_value, high_value))
5300 high_value = NULL_TREE;
5301 else if (!tree_int_cst_lt (low_value, high_value))
5302 warning_at (loc, 0, "empty range specified");
5305 /* See if the case is in range of the type of the original testing
5306 expression. If both low_value and high_value are out of range,
5307 don't insert the case label and return NULL_TREE. */
5309 && !check_case_bounds (type, orig_type,
5310 &low_value, high_value ? &high_value : NULL))
5313 /* Look up the LOW_VALUE in the table of case labels we already
5315 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
5316 /* If there was not an exact match, check for overlapping ranges.
5317 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5318 that's a `default' label and the only overlap is an exact match. */
5319 if (!node && (low_value || high_value))
5321 splay_tree_node low_bound;
5322 splay_tree_node high_bound;
5324 /* Even though there wasn't an exact match, there might be an
5325 overlap between this case range and another case range.
5326 Since we've (inductively) not allowed any overlapping case
5327 ranges, we simply need to find the greatest low case label
5328 that is smaller that LOW_VALUE, and the smallest low case
5329 label that is greater than LOW_VALUE. If there is an overlap
5330 it will occur in one of these two ranges. */
5331 low_bound = splay_tree_predecessor (cases,
5332 (splay_tree_key) low_value);
5333 high_bound = splay_tree_successor (cases,
5334 (splay_tree_key) low_value);
5336 /* Check to see if the LOW_BOUND overlaps. It is smaller than
5337 the LOW_VALUE, so there is no need to check unless the
5338 LOW_BOUND is in fact itself a case range. */
5340 && CASE_HIGH ((tree) low_bound->value)
5341 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5344 /* Check to see if the HIGH_BOUND overlaps. The low end of that
5345 range is bigger than the low end of the current range, so we
5346 are only interested if the current range is a real range, and
5347 not an ordinary case label. */
5350 && (tree_int_cst_compare ((tree) high_bound->key,
5355 /* If there was an overlap, issue an error. */
5358 tree duplicate = CASE_LABEL ((tree) node->value);
5362 error_at (loc, "duplicate (or overlapping) case value");
5363 error_at (DECL_SOURCE_LOCATION (duplicate),
5364 "this is the first entry overlapping that value");
5368 error_at (loc, "duplicate case value") ;
5369 error_at (DECL_SOURCE_LOCATION (duplicate), "previously used here");
5373 error_at (loc, "multiple default labels in one switch");
5374 error_at (DECL_SOURCE_LOCATION (duplicate),
5375 "this is the first default label");
5380 /* Add a CASE_LABEL to the statement-tree. */
5381 case_label = add_stmt (build_case_label (loc, low_value, high_value, label));
5382 /* Register this case label in the splay tree. */
5383 splay_tree_insert (cases,
5384 (splay_tree_key) low_value,
5385 (splay_tree_value) case_label);
5390 /* Add a label so that the back-end doesn't think that the beginning of
5391 the switch is unreachable. Note that we do not add a case label, as
5392 that just leads to duplicates and thence to failure later on. */
5395 tree t = create_artificial_label (loc);
5396 add_stmt (build_stmt (loc, LABEL_EXPR, t));
5398 return error_mark_node;
5401 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
5402 Used to verify that case values match up with enumerator values. */
5405 match_case_to_enum_1 (tree key, tree type, tree label)
5407 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
5409 /* ??? Not working too hard to print the double-word value.
5410 Should perhaps be done with %lwd in the diagnostic routines? */
5411 if (TREE_INT_CST_HIGH (key) == 0)
5412 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
5413 TREE_INT_CST_LOW (key));
5414 else if (!TYPE_UNSIGNED (type)
5415 && TREE_INT_CST_HIGH (key) == -1
5416 && TREE_INT_CST_LOW (key) != 0)
5417 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
5418 -TREE_INT_CST_LOW (key));
5420 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
5421 (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (key),
5422 (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (key));
5424 if (TYPE_NAME (type) == 0)
5425 warning_at (DECL_SOURCE_LOCATION (CASE_LABEL (label)),
5426 warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5427 "case value %qs not in enumerated type",
5430 warning_at (DECL_SOURCE_LOCATION (CASE_LABEL (label)),
5431 warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5432 "case value %qs not in enumerated type %qT",
5436 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
5437 Used to verify that case values match up with enumerator values. */
5440 match_case_to_enum (splay_tree_node node, void *data)
5442 tree label = (tree) node->value;
5443 tree type = (tree) data;
5445 /* Skip default case. */
5446 if (!CASE_LOW (label))
5449 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
5450 when we did our enum->case scan. Reset our scratch bit after. */
5451 if (!CASE_LOW_SEEN (label))
5452 match_case_to_enum_1 (CASE_LOW (label), type, label);
5454 CASE_LOW_SEEN (label) = 0;
5456 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
5457 not set, that means that CASE_HIGH did not appear when we did our
5458 enum->case scan. Reset our scratch bit after. */
5459 if (CASE_HIGH (label))
5461 if (!CASE_HIGH_SEEN (label))
5462 match_case_to_enum_1 (CASE_HIGH (label), type, label);
5464 CASE_HIGH_SEEN (label) = 0;
5470 /* Handle -Wswitch*. Called from the front end after parsing the
5471 switch construct. */
5472 /* ??? Should probably be somewhere generic, since other languages
5473 besides C and C++ would want this. At the moment, however, C/C++
5474 are the only tree-ssa languages that support enumerations at all,
5475 so the point is moot. */
5478 c_do_switch_warnings (splay_tree cases, location_t switch_location,
5479 tree type, tree cond)
5481 splay_tree_node default_node;
5482 splay_tree_node node;
5485 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
5488 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
5490 warning_at (switch_location, OPT_Wswitch_default,
5491 "switch missing default case");
5493 /* From here on, we only care about about enumerated types. */
5494 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
5497 /* From here on, we only care about -Wswitch and -Wswitch-enum. */
5498 if (!warn_switch_enum && !warn_switch)
5501 /* Check the cases. Warn about case values which are not members of
5502 the enumerated type. For -Wswitch-enum, or for -Wswitch when
5503 there is no default case, check that exactly all enumeration
5504 literals are covered by the cases. */
5506 /* Clearing COND if it is not an integer constant simplifies
5507 the tests inside the loop below. */
5508 if (TREE_CODE (cond) != INTEGER_CST)
5511 /* The time complexity here is O(N*lg(N)) worst case, but for the
5512 common case of monotonically increasing enumerators, it is
5513 O(N), since the nature of the splay tree will keep the next
5514 element adjacent to the root at all times. */
5516 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
5518 tree value = TREE_VALUE (chain);
5519 if (TREE_CODE (value) == CONST_DECL)
5520 value = DECL_INITIAL (value);
5521 node = splay_tree_lookup (cases, (splay_tree_key) value);
5524 /* Mark the CASE_LOW part of the case entry as seen. */
5525 tree label = (tree) node->value;
5526 CASE_LOW_SEEN (label) = 1;
5530 /* Even though there wasn't an exact match, there might be a
5531 case range which includes the enumerator's value. */
5532 node = splay_tree_predecessor (cases, (splay_tree_key) value);
5533 if (node && CASE_HIGH ((tree) node->value))
5535 tree label = (tree) node->value;
5536 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
5539 /* If we match the upper bound exactly, mark the CASE_HIGH
5540 part of the case entry as seen. */
5542 CASE_HIGH_SEEN (label) = 1;
5547 /* We've now determined that this enumerated literal isn't
5548 handled by the case labels of the switch statement. */
5550 /* If the switch expression is a constant, we only really care
5551 about whether that constant is handled by the switch. */
5552 if (cond && tree_int_cst_compare (cond, value))
5555 /* If there is a default_node, the only relevant option is
5556 Wswitch-enum. Otherwise, if both are enabled then we prefer
5557 to warn using -Wswitch because -Wswitch is enabled by -Wall
5558 while -Wswitch-enum is explicit. */
5559 warning_at (switch_location,
5560 (default_node || !warn_switch
5563 "enumeration value %qE not handled in switch",
5564 TREE_PURPOSE (chain));
5567 /* Warn if there are case expressions that don't correspond to
5568 enumerators. This can occur since C and C++ don't enforce
5569 type-checking of assignments to enumeration variables.
5571 The time complexity here is now always O(N) worst case, since
5572 we should have marked both the lower bound and upper bound of
5573 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
5574 above. This scan also resets those fields. */
5576 splay_tree_foreach (cases, match_case_to_enum, type);
5579 /* Finish an expression taking the address of LABEL (an
5580 IDENTIFIER_NODE). Returns an expression for the address.
5582 LOC is the location for the expression returned. */
5585 finish_label_address_expr (tree label, location_t loc)
5589 pedwarn (input_location, OPT_pedantic, "taking the address of a label is non-standard");
5591 if (label == error_mark_node)
5592 return error_mark_node;
5594 label = lookup_label (label);
5595 if (label == NULL_TREE)
5596 result = null_pointer_node;
5599 TREE_USED (label) = 1;
5600 result = build1 (ADDR_EXPR, ptr_type_node, label);
5601 /* The current function in not necessarily uninlinable.
5602 Computed gotos are incompatible with inlining, but the value
5603 here could be used only in a diagnostic, for example. */
5604 protected_set_expr_location (result, loc);
5611 /* Given a boolean expression ARG, return a tree representing an increment
5612 or decrement (as indicated by CODE) of ARG. The front end must check for
5613 invalid cases (e.g., decrement in C++). */
5615 boolean_increment (enum tree_code code, tree arg)
5618 tree true_res = build_int_cst (TREE_TYPE (arg), 1);
5620 arg = stabilize_reference (arg);
5623 case PREINCREMENT_EXPR:
5624 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5626 case POSTINCREMENT_EXPR:
5627 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5628 arg = save_expr (arg);
5629 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5630 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5632 case PREDECREMENT_EXPR:
5633 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5634 invert_truthvalue_loc (input_location, arg));
5636 case POSTDECREMENT_EXPR:
5637 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5638 invert_truthvalue_loc (input_location, arg));
5639 arg = save_expr (arg);
5640 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5641 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5646 TREE_SIDE_EFFECTS (val) = 1;
5650 /* Built-in macros for stddef.h and stdint.h, that require macros
5651 defined in this file. */
5653 c_stddef_cpp_builtins(void)
5655 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
5656 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
5657 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
5658 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
5659 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
5660 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
5661 builtin_define_with_value ("__CHAR16_TYPE__", CHAR16_TYPE, 0);
5662 builtin_define_with_value ("__CHAR32_TYPE__", CHAR32_TYPE, 0);
5663 if (SIG_ATOMIC_TYPE)
5664 builtin_define_with_value ("__SIG_ATOMIC_TYPE__", SIG_ATOMIC_TYPE, 0);
5666 builtin_define_with_value ("__INT8_TYPE__", INT8_TYPE, 0);
5668 builtin_define_with_value ("__INT16_TYPE__", INT16_TYPE, 0);
5670 builtin_define_with_value ("__INT32_TYPE__", INT32_TYPE, 0);
5672 builtin_define_with_value ("__INT64_TYPE__", INT64_TYPE, 0);
5674 builtin_define_with_value ("__UINT8_TYPE__", UINT8_TYPE, 0);
5676 builtin_define_with_value ("__UINT16_TYPE__", UINT16_TYPE, 0);
5678 builtin_define_with_value ("__UINT32_TYPE__", UINT32_TYPE, 0);
5680 builtin_define_with_value ("__UINT64_TYPE__", UINT64_TYPE, 0);
5681 if (INT_LEAST8_TYPE)
5682 builtin_define_with_value ("__INT_LEAST8_TYPE__", INT_LEAST8_TYPE, 0);
5683 if (INT_LEAST16_TYPE)
5684 builtin_define_with_value ("__INT_LEAST16_TYPE__", INT_LEAST16_TYPE, 0);
5685 if (INT_LEAST32_TYPE)
5686 builtin_define_with_value ("__INT_LEAST32_TYPE__", INT_LEAST32_TYPE, 0);
5687 if (INT_LEAST64_TYPE)
5688 builtin_define_with_value ("__INT_LEAST64_TYPE__", INT_LEAST64_TYPE, 0);
5689 if (UINT_LEAST8_TYPE)
5690 builtin_define_with_value ("__UINT_LEAST8_TYPE__", UINT_LEAST8_TYPE, 0);
5691 if (UINT_LEAST16_TYPE)
5692 builtin_define_with_value ("__UINT_LEAST16_TYPE__", UINT_LEAST16_TYPE, 0);
5693 if (UINT_LEAST32_TYPE)
5694 builtin_define_with_value ("__UINT_LEAST32_TYPE__", UINT_LEAST32_TYPE, 0);
5695 if (UINT_LEAST64_TYPE)
5696 builtin_define_with_value ("__UINT_LEAST64_TYPE__", UINT_LEAST64_TYPE, 0);
5698 builtin_define_with_value ("__INT_FAST8_TYPE__", INT_FAST8_TYPE, 0);
5699 if (INT_FAST16_TYPE)
5700 builtin_define_with_value ("__INT_FAST16_TYPE__", INT_FAST16_TYPE, 0);
5701 if (INT_FAST32_TYPE)
5702 builtin_define_with_value ("__INT_FAST32_TYPE__", INT_FAST32_TYPE, 0);
5703 if (INT_FAST64_TYPE)
5704 builtin_define_with_value ("__INT_FAST64_TYPE__", INT_FAST64_TYPE, 0);
5705 if (UINT_FAST8_TYPE)
5706 builtin_define_with_value ("__UINT_FAST8_TYPE__", UINT_FAST8_TYPE, 0);
5707 if (UINT_FAST16_TYPE)
5708 builtin_define_with_value ("__UINT_FAST16_TYPE__", UINT_FAST16_TYPE, 0);
5709 if (UINT_FAST32_TYPE)
5710 builtin_define_with_value ("__UINT_FAST32_TYPE__", UINT_FAST32_TYPE, 0);
5711 if (UINT_FAST64_TYPE)
5712 builtin_define_with_value ("__UINT_FAST64_TYPE__", UINT_FAST64_TYPE, 0);
5714 builtin_define_with_value ("__INTPTR_TYPE__", INTPTR_TYPE, 0);
5716 builtin_define_with_value ("__UINTPTR_TYPE__", UINTPTR_TYPE, 0);
5720 c_init_attributes (void)
5722 /* Fill in the built_in_attributes array. */
5723 #define DEF_ATTR_NULL_TREE(ENUM) \
5724 built_in_attributes[(int) ENUM] = NULL_TREE;
5725 #define DEF_ATTR_INT(ENUM, VALUE) \
5726 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
5727 #define DEF_ATTR_IDENT(ENUM, STRING) \
5728 built_in_attributes[(int) ENUM] = get_identifier (STRING);
5729 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
5730 built_in_attributes[(int) ENUM] \
5731 = tree_cons (built_in_attributes[(int) PURPOSE], \
5732 built_in_attributes[(int) VALUE], \
5733 built_in_attributes[(int) CHAIN]);
5734 #include "builtin-attrs.def"
5735 #undef DEF_ATTR_NULL_TREE
5737 #undef DEF_ATTR_IDENT
5738 #undef DEF_ATTR_TREE_LIST
5741 /* Attribute handlers common to C front ends. */
5743 /* Handle a "packed" attribute; arguments as in
5744 struct attribute_spec.handler. */
5747 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5748 int flags, bool *no_add_attrs)
5752 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5753 *node = build_variant_type_copy (*node);
5754 TYPE_PACKED (*node) = 1;
5756 else if (TREE_CODE (*node) == FIELD_DECL)
5758 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT
5759 /* Still pack bitfields. */
5760 && ! DECL_INITIAL (*node))
5761 warning (OPT_Wattributes,
5762 "%qE attribute ignored for field of type %qT",
5763 name, TREE_TYPE (*node));
5765 DECL_PACKED (*node) = 1;
5767 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
5768 used for DECL_REGISTER. It wouldn't mean anything anyway.
5769 We can't set DECL_PACKED on the type of a TYPE_DECL, because
5770 that changes what the typedef is typing. */
5773 warning (OPT_Wattributes, "%qE attribute ignored", name);
5774 *no_add_attrs = true;
5780 /* Handle a "nocommon" attribute; arguments as in
5781 struct attribute_spec.handler. */
5784 handle_nocommon_attribute (tree *node, tree name,
5785 tree ARG_UNUSED (args),
5786 int ARG_UNUSED (flags), bool *no_add_attrs)
5788 if (TREE_CODE (*node) == VAR_DECL)
5789 DECL_COMMON (*node) = 0;
5792 warning (OPT_Wattributes, "%qE attribute ignored", name);
5793 *no_add_attrs = true;
5799 /* Handle a "common" attribute; arguments as in
5800 struct attribute_spec.handler. */
5803 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5804 int ARG_UNUSED (flags), bool *no_add_attrs)
5806 if (TREE_CODE (*node) == VAR_DECL)
5807 DECL_COMMON (*node) = 1;
5810 warning (OPT_Wattributes, "%qE attribute ignored", name);
5811 *no_add_attrs = true;
5817 /* Handle a "noreturn" attribute; arguments as in
5818 struct attribute_spec.handler. */
5821 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5822 int ARG_UNUSED (flags), bool *no_add_attrs)
5824 tree type = TREE_TYPE (*node);
5826 /* See FIXME comment in c_common_attribute_table. */
5827 if (TREE_CODE (*node) == FUNCTION_DECL)
5828 TREE_THIS_VOLATILE (*node) = 1;
5829 else if (TREE_CODE (type) == POINTER_TYPE
5830 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5832 = build_pointer_type
5833 (build_type_variant (TREE_TYPE (type),
5834 TYPE_READONLY (TREE_TYPE (type)), 1));
5837 warning (OPT_Wattributes, "%qE attribute ignored", name);
5838 *no_add_attrs = true;
5844 /* Handle a "hot" and attribute; arguments as in
5845 struct attribute_spec.handler. */
5848 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5849 int ARG_UNUSED (flags), bool *no_add_attrs)
5851 if (TREE_CODE (*node) == FUNCTION_DECL)
5853 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
5855 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5857 *no_add_attrs = true;
5859 /* Most of the rest of the hot processing is done later with
5860 lookup_attribute. */
5864 warning (OPT_Wattributes, "%qE attribute ignored", name);
5865 *no_add_attrs = true;
5870 /* Handle a "cold" and attribute; arguments as in
5871 struct attribute_spec.handler. */
5874 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5875 int ARG_UNUSED (flags), bool *no_add_attrs)
5877 if (TREE_CODE (*node) == FUNCTION_DECL)
5879 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
5881 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5883 *no_add_attrs = true;
5885 /* Most of the rest of the cold processing is done later with
5886 lookup_attribute. */
5890 warning (OPT_Wattributes, "%qE attribute ignored", name);
5891 *no_add_attrs = true;
5897 /* Handle a "noinline" attribute; arguments as in
5898 struct attribute_spec.handler. */
5901 handle_noinline_attribute (tree *node, tree name,
5902 tree ARG_UNUSED (args),
5903 int ARG_UNUSED (flags), bool *no_add_attrs)
5905 if (TREE_CODE (*node) == FUNCTION_DECL)
5906 DECL_UNINLINABLE (*node) = 1;
5909 warning (OPT_Wattributes, "%qE attribute ignored", name);
5910 *no_add_attrs = true;
5916 /* Handle a "noclone" attribute; arguments as in
5917 struct attribute_spec.handler. */
5920 handle_noclone_attribute (tree *node, tree name,
5921 tree ARG_UNUSED (args),
5922 int ARG_UNUSED (flags), bool *no_add_attrs)
5924 if (TREE_CODE (*node) != FUNCTION_DECL)
5926 warning (OPT_Wattributes, "%qE attribute ignored", name);
5927 *no_add_attrs = true;
5933 /* Handle a "always_inline" attribute; arguments as in
5934 struct attribute_spec.handler. */
5937 handle_always_inline_attribute (tree *node, tree name,
5938 tree ARG_UNUSED (args),
5939 int ARG_UNUSED (flags),
5942 if (TREE_CODE (*node) == FUNCTION_DECL)
5944 /* Set the attribute and mark it for disregarding inline
5946 DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
5950 warning (OPT_Wattributes, "%qE attribute ignored", name);
5951 *no_add_attrs = true;
5957 /* Handle a "gnu_inline" attribute; arguments as in
5958 struct attribute_spec.handler. */
5961 handle_gnu_inline_attribute (tree *node, tree name,
5962 tree ARG_UNUSED (args),
5963 int ARG_UNUSED (flags),
5966 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
5968 /* Do nothing else, just set the attribute. We'll get at
5969 it later with lookup_attribute. */
5973 warning (OPT_Wattributes, "%qE attribute ignored", name);
5974 *no_add_attrs = true;
5980 /* Handle an "artificial" attribute; arguments as in
5981 struct attribute_spec.handler. */
5984 handle_artificial_attribute (tree *node, tree name,
5985 tree ARG_UNUSED (args),
5986 int ARG_UNUSED (flags),
5989 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
5991 /* Do nothing else, just set the attribute. We'll get at
5992 it later with lookup_attribute. */
5996 warning (OPT_Wattributes, "%qE attribute ignored", name);
5997 *no_add_attrs = true;
6003 /* Handle a "flatten" attribute; arguments as in
6004 struct attribute_spec.handler. */
6007 handle_flatten_attribute (tree *node, tree name,
6008 tree args ATTRIBUTE_UNUSED,
6009 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
6011 if (TREE_CODE (*node) == FUNCTION_DECL)
6012 /* Do nothing else, just set the attribute. We'll get at
6013 it later with lookup_attribute. */
6017 warning (OPT_Wattributes, "%qE attribute ignored", name);
6018 *no_add_attrs = true;
6024 /* Handle a "warning" or "error" attribute; arguments as in
6025 struct attribute_spec.handler. */
6028 handle_error_attribute (tree *node, tree name, tree args,
6029 int ARG_UNUSED (flags), bool *no_add_attrs)
6031 if (TREE_CODE (*node) == FUNCTION_DECL
6032 || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6033 /* Do nothing else, just set the attribute. We'll get at
6034 it later with lookup_attribute. */
6038 warning (OPT_Wattributes, "%qE attribute ignored", name);
6039 *no_add_attrs = true;
6045 /* Handle a "used" attribute; arguments as in
6046 struct attribute_spec.handler. */
6049 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
6050 int ARG_UNUSED (flags), bool *no_add_attrs)
6054 if (TREE_CODE (node) == FUNCTION_DECL
6055 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
6057 TREE_USED (node) = 1;
6058 DECL_PRESERVE_P (node) = 1;
6062 warning (OPT_Wattributes, "%qE attribute ignored", name);
6063 *no_add_attrs = true;
6069 /* Handle a "unused" attribute; arguments as in
6070 struct attribute_spec.handler. */
6073 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6074 int flags, bool *no_add_attrs)
6080 if (TREE_CODE (decl) == PARM_DECL
6081 || TREE_CODE (decl) == VAR_DECL
6082 || TREE_CODE (decl) == FUNCTION_DECL
6083 || TREE_CODE (decl) == LABEL_DECL
6084 || TREE_CODE (decl) == TYPE_DECL)
6085 TREE_USED (decl) = 1;
6088 warning (OPT_Wattributes, "%qE attribute ignored", name);
6089 *no_add_attrs = true;
6094 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6095 *node = build_variant_type_copy (*node);
6096 TREE_USED (*node) = 1;
6102 /* Handle a "externally_visible" attribute; arguments as in
6103 struct attribute_spec.handler. */
6106 handle_externally_visible_attribute (tree *pnode, tree name,
6107 tree ARG_UNUSED (args),
6108 int ARG_UNUSED (flags),
6113 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
6115 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
6116 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
6118 warning (OPT_Wattributes,
6119 "%qE attribute have effect only on public objects", name);
6120 *no_add_attrs = true;
6125 warning (OPT_Wattributes, "%qE attribute ignored", name);
6126 *no_add_attrs = true;
6132 /* Handle a "const" attribute; arguments as in
6133 struct attribute_spec.handler. */
6136 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6137 int ARG_UNUSED (flags), bool *no_add_attrs)
6139 tree type = TREE_TYPE (*node);
6141 /* See FIXME comment on noreturn in c_common_attribute_table. */
6142 if (TREE_CODE (*node) == FUNCTION_DECL)
6143 TREE_READONLY (*node) = 1;
6144 else if (TREE_CODE (type) == POINTER_TYPE
6145 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
6147 = build_pointer_type
6148 (build_type_variant (TREE_TYPE (type), 1,
6149 TREE_THIS_VOLATILE (TREE_TYPE (type))));
6152 warning (OPT_Wattributes, "%qE attribute ignored", name);
6153 *no_add_attrs = true;
6159 /* Handle a "transparent_union" attribute; arguments as in
6160 struct attribute_spec.handler. */
6163 handle_transparent_union_attribute (tree *node, tree name,
6164 tree ARG_UNUSED (args), int flags,
6169 *no_add_attrs = true;
6171 if (TREE_CODE (*node) == TYPE_DECL)
6172 node = &TREE_TYPE (*node);
6175 if (TREE_CODE (type) == UNION_TYPE)
6177 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
6178 the code in finish_struct. */
6179 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6181 if (TYPE_FIELDS (type) == NULL_TREE
6182 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
6185 /* A type variant isn't good enough, since we don't a cast
6186 to such a type removed as a no-op. */
6187 *node = type = build_duplicate_type (type);
6190 TYPE_TRANSPARENT_UNION (type) = 1;
6195 warning (OPT_Wattributes, "%qE attribute ignored", name);
6199 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
6200 get the requested priority for a constructor or destructor,
6201 possibly issuing diagnostics for invalid or reserved
6204 static priority_type
6205 get_priority (tree args, bool is_destructor)
6211 return DEFAULT_INIT_PRIORITY;
6213 if (!SUPPORTS_INIT_PRIORITY)
6216 error ("destructor priorities are not supported");
6218 error ("constructor priorities are not supported");
6219 return DEFAULT_INIT_PRIORITY;
6222 arg = TREE_VALUE (args);
6223 if (!host_integerp (arg, /*pos=*/0)
6224 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
6227 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
6228 if (pri < 0 || pri > MAX_INIT_PRIORITY)
6231 if (pri <= MAX_RESERVED_INIT_PRIORITY)
6235 "destructor priorities from 0 to %d are reserved "
6236 "for the implementation",
6237 MAX_RESERVED_INIT_PRIORITY);
6240 "constructor priorities from 0 to %d are reserved "
6241 "for the implementation",
6242 MAX_RESERVED_INIT_PRIORITY);
6248 error ("destructor priorities must be integers from 0 to %d inclusive",
6251 error ("constructor priorities must be integers from 0 to %d inclusive",
6253 return DEFAULT_INIT_PRIORITY;
6256 /* Handle a "constructor" attribute; arguments as in
6257 struct attribute_spec.handler. */
6260 handle_constructor_attribute (tree *node, tree name, tree args,
6261 int ARG_UNUSED (flags),
6265 tree type = TREE_TYPE (decl);
6267 if (TREE_CODE (decl) == FUNCTION_DECL
6268 && TREE_CODE (type) == FUNCTION_TYPE
6269 && decl_function_context (decl) == 0)
6271 priority_type priority;
6272 DECL_STATIC_CONSTRUCTOR (decl) = 1;
6273 priority = get_priority (args, /*is_destructor=*/false);
6274 SET_DECL_INIT_PRIORITY (decl, priority);
6275 TREE_USED (decl) = 1;
6279 warning (OPT_Wattributes, "%qE attribute ignored", name);
6280 *no_add_attrs = true;
6286 /* Handle a "destructor" attribute; arguments as in
6287 struct attribute_spec.handler. */
6290 handle_destructor_attribute (tree *node, tree name, tree args,
6291 int ARG_UNUSED (flags),
6295 tree type = TREE_TYPE (decl);
6297 if (TREE_CODE (decl) == FUNCTION_DECL
6298 && TREE_CODE (type) == FUNCTION_TYPE
6299 && decl_function_context (decl) == 0)
6301 priority_type priority;
6302 DECL_STATIC_DESTRUCTOR (decl) = 1;
6303 priority = get_priority (args, /*is_destructor=*/true);
6304 SET_DECL_FINI_PRIORITY (decl, priority);
6305 TREE_USED (decl) = 1;
6309 warning (OPT_Wattributes, "%qE attribute ignored", name);
6310 *no_add_attrs = true;
6316 /* Handle a "mode" attribute; arguments as in
6317 struct attribute_spec.handler. */
6320 handle_mode_attribute (tree *node, tree name, tree args,
6321 int ARG_UNUSED (flags), bool *no_add_attrs)
6324 tree ident = TREE_VALUE (args);
6326 *no_add_attrs = true;
6328 if (TREE_CODE (ident) != IDENTIFIER_NODE)
6329 warning (OPT_Wattributes, "%qE attribute ignored", name);
6333 const char *p = IDENTIFIER_POINTER (ident);
6334 int len = strlen (p);
6335 enum machine_mode mode = VOIDmode;
6339 if (len > 4 && p[0] == '_' && p[1] == '_'
6340 && p[len - 1] == '_' && p[len - 2] == '_')
6342 char *newp = (char *) alloca (len - 1);
6344 strcpy (newp, &p[2]);
6345 newp[len - 4] = '\0';
6349 /* Change this type to have a type with the specified mode.
6350 First check for the special modes. */
6351 if (!strcmp (p, "byte"))
6353 else if (!strcmp (p, "word"))
6355 else if (!strcmp (p, "pointer"))
6357 else if (!strcmp (p, "libgcc_cmp_return"))
6358 mode = targetm.libgcc_cmp_return_mode ();
6359 else if (!strcmp (p, "libgcc_shift_count"))
6360 mode = targetm.libgcc_shift_count_mode ();
6361 else if (!strcmp (p, "unwind_word"))
6362 mode = targetm.unwind_word_mode ();
6364 for (j = 0; j < NUM_MACHINE_MODES; j++)
6365 if (!strcmp (p, GET_MODE_NAME (j)))
6367 mode = (enum machine_mode) j;
6371 if (mode == VOIDmode)
6373 error ("unknown machine mode %qE", ident);
6378 switch (GET_MODE_CLASS (mode))
6381 case MODE_PARTIAL_INT:
6383 case MODE_DECIMAL_FLOAT:
6388 valid_mode = targetm.scalar_mode_supported_p (mode);
6391 case MODE_COMPLEX_INT:
6392 case MODE_COMPLEX_FLOAT:
6393 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
6396 case MODE_VECTOR_INT:
6397 case MODE_VECTOR_FLOAT:
6398 case MODE_VECTOR_FRACT:
6399 case MODE_VECTOR_UFRACT:
6400 case MODE_VECTOR_ACCUM:
6401 case MODE_VECTOR_UACCUM:
6402 warning (OPT_Wattributes, "specifying vector types with "
6403 "__attribute__ ((mode)) is deprecated");
6404 warning (OPT_Wattributes,
6405 "use __attribute__ ((vector_size)) instead");
6406 valid_mode = vector_mode_valid_p (mode);
6414 error ("unable to emulate %qs", p);
6418 if (POINTER_TYPE_P (type))
6420 tree (*fn)(tree, enum machine_mode, bool);
6422 if (!targetm.valid_pointer_mode (mode))
6424 error ("invalid pointer mode %qs", p);
6428 if (TREE_CODE (type) == POINTER_TYPE)
6429 fn = build_pointer_type_for_mode;
6431 fn = build_reference_type_for_mode;
6432 typefm = fn (TREE_TYPE (type), mode, false);
6436 /* For fixed-point modes, we need to test if the signness of type
6437 and the machine mode are consistent. */
6438 if (ALL_FIXED_POINT_MODE_P (mode)
6439 && TYPE_UNSIGNED (type) != UNSIGNED_FIXED_POINT_MODE_P (mode))
6441 error ("signness of type and machine mode %qs don't match", p);
6444 /* For fixed-point modes, we need to pass saturating info. */
6445 typefm = lang_hooks.types.type_for_mode (mode,
6446 ALL_FIXED_POINT_MODE_P (mode) ? TYPE_SATURATING (type)
6447 : TYPE_UNSIGNED (type));
6450 if (typefm == NULL_TREE)
6452 error ("no data type for mode %qs", p);
6455 else if (TREE_CODE (type) == ENUMERAL_TYPE)
6457 /* For enumeral types, copy the precision from the integer
6458 type returned above. If not an INTEGER_TYPE, we can't use
6459 this mode for this type. */
6460 if (TREE_CODE (typefm) != INTEGER_TYPE)
6462 error ("cannot use mode %qs for enumeral types", p);
6466 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
6468 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
6473 /* We cannot build a type variant, as there's code that assumes
6474 that TYPE_MAIN_VARIANT has the same mode. This includes the
6475 debug generators. Instead, create a subrange type. This
6476 results in all of the enumeral values being emitted only once
6477 in the original, and the subtype gets them by reference. */
6478 if (TYPE_UNSIGNED (type))
6479 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
6481 typefm = make_signed_type (TYPE_PRECISION (typefm));
6482 TREE_TYPE (typefm) = type;
6485 else if (VECTOR_MODE_P (mode)
6486 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
6487 : TREE_CODE (type) != TREE_CODE (typefm))
6489 error ("mode %qs applied to inappropriate type", p);
6499 /* Handle a "section" attribute; arguments as in
6500 struct attribute_spec.handler. */
6503 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6504 int ARG_UNUSED (flags), bool *no_add_attrs)
6508 if (targetm.have_named_sections)
6510 user_defined_section_attribute = true;
6512 if ((TREE_CODE (decl) == FUNCTION_DECL
6513 || TREE_CODE (decl) == VAR_DECL)
6514 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6516 if (TREE_CODE (decl) == VAR_DECL
6517 && current_function_decl != NULL_TREE
6518 && !TREE_STATIC (decl))
6520 error_at (DECL_SOURCE_LOCATION (decl),
6521 "section attribute cannot be specified for "
6523 *no_add_attrs = true;
6526 /* The decl may have already been given a section attribute
6527 from a previous declaration. Ensure they match. */
6528 else if (DECL_SECTION_NAME (decl) != NULL_TREE
6529 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
6530 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
6532 error ("section of %q+D conflicts with previous declaration",
6534 *no_add_attrs = true;
6536 else if (TREE_CODE (decl) == VAR_DECL
6537 && !targetm.have_tls && targetm.emutls.tmpl_section
6538 && DECL_THREAD_LOCAL_P (decl))
6540 error ("section of %q+D cannot be overridden", *node);
6541 *no_add_attrs = true;
6544 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
6548 error ("section attribute not allowed for %q+D", *node);
6549 *no_add_attrs = true;
6554 error_at (DECL_SOURCE_LOCATION (*node),
6555 "section attributes are not supported for this target");
6556 *no_add_attrs = true;
6562 /* Handle a "aligned" attribute; arguments as in
6563 struct attribute_spec.handler. */
6566 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6567 int flags, bool *no_add_attrs)
6569 tree decl = NULL_TREE;
6572 tree align_expr = (args ? TREE_VALUE (args)
6573 : size_int (ATTRIBUTE_ALIGNED_VALUE / BITS_PER_UNIT));
6579 type = &TREE_TYPE (decl);
6580 is_type = TREE_CODE (*node) == TYPE_DECL;
6582 else if (TYPE_P (*node))
6583 type = node, is_type = 1;
6585 if (TREE_CODE (align_expr) != INTEGER_CST)
6587 error ("requested alignment is not a constant");
6588 *no_add_attrs = true;
6590 else if ((i = tree_log2 (align_expr)) == -1)
6592 error ("requested alignment is not a power of 2");
6593 *no_add_attrs = true;
6595 else if (i >= HOST_BITS_PER_INT - BITS_PER_UNIT_LOG)
6597 error ("requested alignment is too large");
6598 *no_add_attrs = true;
6602 /* If we have a TYPE_DECL, then copy the type, so that we
6603 don't accidentally modify a builtin type. See pushdecl. */
6604 if (decl && TREE_TYPE (decl) != error_mark_node
6605 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
6607 tree tt = TREE_TYPE (decl);
6608 *type = build_variant_type_copy (*type);
6609 DECL_ORIGINAL_TYPE (decl) = tt;
6610 TYPE_NAME (*type) = decl;
6611 TREE_USED (*type) = TREE_USED (decl);
6612 TREE_TYPE (decl) = *type;
6614 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6615 *type = build_variant_type_copy (*type);
6617 TYPE_ALIGN (*type) = (1U << i) * BITS_PER_UNIT;
6618 TYPE_USER_ALIGN (*type) = 1;
6620 else if (! VAR_OR_FUNCTION_DECL_P (decl)
6621 && TREE_CODE (decl) != FIELD_DECL)
6623 error ("alignment may not be specified for %q+D", decl);
6624 *no_add_attrs = true;
6626 else if (TREE_CODE (decl) == FUNCTION_DECL
6627 && DECL_ALIGN (decl) > (1U << i) * BITS_PER_UNIT)
6629 if (DECL_USER_ALIGN (decl))
6630 error ("alignment for %q+D was previously specified as %d "
6631 "and may not be decreased", decl,
6632 DECL_ALIGN (decl) / BITS_PER_UNIT);
6634 error ("alignment for %q+D must be at least %d", decl,
6635 DECL_ALIGN (decl) / BITS_PER_UNIT);
6636 *no_add_attrs = true;
6640 DECL_ALIGN (decl) = (1U << i) * BITS_PER_UNIT;
6641 DECL_USER_ALIGN (decl) = 1;
6647 /* Handle a "weak" attribute; arguments as in
6648 struct attribute_spec.handler. */
6651 handle_weak_attribute (tree *node, tree name,
6652 tree ARG_UNUSED (args),
6653 int ARG_UNUSED (flags),
6654 bool * ARG_UNUSED (no_add_attrs))
6656 if (TREE_CODE (*node) == FUNCTION_DECL
6657 && DECL_DECLARED_INLINE_P (*node))
6659 error ("inline function %q+D cannot be declared weak", *node);
6660 *no_add_attrs = true;
6662 else if (TREE_CODE (*node) == FUNCTION_DECL
6663 || TREE_CODE (*node) == VAR_DECL)
6664 declare_weak (*node);
6666 warning (OPT_Wattributes, "%qE attribute ignored", name);
6671 /* Handle an "alias" attribute; arguments as in
6672 struct attribute_spec.handler. */
6675 handle_alias_attribute (tree *node, tree name, tree args,
6676 int ARG_UNUSED (flags), bool *no_add_attrs)
6680 if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
6682 warning (OPT_Wattributes, "%qE attribute ignored", name);
6683 *no_add_attrs = true;
6685 else if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
6686 || (TREE_CODE (decl) != FUNCTION_DECL
6687 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
6688 /* A static variable declaration is always a tentative definition,
6689 but the alias is a non-tentative definition which overrides. */
6690 || (TREE_CODE (decl) != FUNCTION_DECL
6691 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
6693 error ("%q+D defined both normally and as an alias", decl);
6694 *no_add_attrs = true;
6697 /* Note that the very first time we process a nested declaration,
6698 decl_function_context will not be set. Indeed, *would* never
6699 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
6700 we do below. After such frobbery, pushdecl would set the context.
6701 In any case, this is never what we want. */
6702 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
6706 id = TREE_VALUE (args);
6707 if (TREE_CODE (id) != STRING_CST)
6709 error ("alias argument not a string");
6710 *no_add_attrs = true;
6713 id = get_identifier (TREE_STRING_POINTER (id));
6714 /* This counts as a use of the object pointed to. */
6717 if (TREE_CODE (decl) == FUNCTION_DECL)
6718 DECL_INITIAL (decl) = error_mark_node;
6721 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
6722 DECL_EXTERNAL (decl) = 1;
6724 DECL_EXTERNAL (decl) = 0;
6725 TREE_STATIC (decl) = 1;
6730 warning (OPT_Wattributes, "%qE attribute ignored", name);
6731 *no_add_attrs = true;
6737 /* Handle a "weakref" attribute; arguments as in struct
6738 attribute_spec.handler. */
6741 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6742 int flags, bool *no_add_attrs)
6744 tree attr = NULL_TREE;
6746 /* We must ignore the attribute when it is associated with
6747 local-scoped decls, since attribute alias is ignored and many
6748 such symbols do not even have a DECL_WEAK field. */
6749 if (decl_function_context (*node)
6750 || current_function_decl
6751 || (TREE_CODE (*node) != VAR_DECL && TREE_CODE (*node) != FUNCTION_DECL))
6753 warning (OPT_Wattributes, "%qE attribute ignored", name);
6754 *no_add_attrs = true;
6758 /* The idea here is that `weakref("name")' mutates into `weakref,
6759 alias("name")', and weakref without arguments, in turn,
6760 implicitly adds weak. */
6764 attr = tree_cons (get_identifier ("alias"), args, attr);
6765 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
6767 *no_add_attrs = true;
6769 decl_attributes (node, attr, flags);
6773 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
6774 error_at (DECL_SOURCE_LOCATION (*node),
6775 "weakref attribute must appear before alias attribute");
6777 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
6778 and that isn't supported; and because it wants to add it to
6779 the list of weak decls, which isn't helpful. */
6780 DECL_WEAK (*node) = 1;
6786 /* Handle an "visibility" attribute; arguments as in
6787 struct attribute_spec.handler. */
6790 handle_visibility_attribute (tree *node, tree name, tree args,
6791 int ARG_UNUSED (flags),
6792 bool *ARG_UNUSED (no_add_attrs))
6795 tree id = TREE_VALUE (args);
6796 enum symbol_visibility vis;
6800 if (TREE_CODE (*node) == ENUMERAL_TYPE)
6802 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
6804 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
6808 else if (TYPE_FIELDS (*node))
6810 error ("%qE attribute ignored because %qT is already defined",
6815 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
6817 warning (OPT_Wattributes, "%qE attribute ignored", name);
6821 if (TREE_CODE (id) != STRING_CST)
6823 error ("visibility argument not a string");
6827 /* If this is a type, set the visibility on the type decl. */
6830 decl = TYPE_NAME (decl);
6833 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6835 warning (OPT_Wattributes, "%qE attribute ignored on types",
6841 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
6842 vis = VISIBILITY_DEFAULT;
6843 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
6844 vis = VISIBILITY_INTERNAL;
6845 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
6846 vis = VISIBILITY_HIDDEN;
6847 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
6848 vis = VISIBILITY_PROTECTED;
6851 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
6852 vis = VISIBILITY_DEFAULT;
6855 if (DECL_VISIBILITY_SPECIFIED (decl)
6856 && vis != DECL_VISIBILITY (decl))
6858 tree attributes = (TYPE_P (*node)
6859 ? TYPE_ATTRIBUTES (*node)
6860 : DECL_ATTRIBUTES (decl));
6861 if (lookup_attribute ("visibility", attributes))
6862 error ("%qD redeclared with different visibility", decl);
6863 else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6864 && lookup_attribute ("dllimport", attributes))
6865 error ("%qD was declared %qs which implies default visibility",
6867 else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6868 && lookup_attribute ("dllexport", attributes))
6869 error ("%qD was declared %qs which implies default visibility",
6873 DECL_VISIBILITY (decl) = vis;
6874 DECL_VISIBILITY_SPECIFIED (decl) = 1;
6876 /* Go ahead and attach the attribute to the node as well. This is needed
6877 so we can determine whether we have VISIBILITY_DEFAULT because the
6878 visibility was not specified, or because it was explicitly overridden
6879 from the containing scope. */
6884 /* Determine the ELF symbol visibility for DECL, which is either a
6885 variable or a function. It is an error to use this function if a
6886 definition of DECL is not available in this translation unit.
6887 Returns true if the final visibility has been determined by this
6888 function; false if the caller is free to make additional
6892 c_determine_visibility (tree decl)
6894 gcc_assert (TREE_CODE (decl) == VAR_DECL
6895 || TREE_CODE (decl) == FUNCTION_DECL);
6897 /* If the user explicitly specified the visibility with an
6898 attribute, honor that. DECL_VISIBILITY will have been set during
6899 the processing of the attribute. We check for an explicit
6900 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
6901 to distinguish the use of an attribute from the use of a "#pragma
6902 GCC visibility push(...)"; in the latter case we still want other
6903 considerations to be able to overrule the #pragma. */
6904 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl))
6905 || (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6906 && (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
6907 || lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))))
6910 /* Set default visibility to whatever the user supplied with
6911 visibility_specified depending on #pragma GCC visibility. */
6912 if (!DECL_VISIBILITY_SPECIFIED (decl))
6914 if (visibility_options.inpragma
6915 || DECL_VISIBILITY (decl) != default_visibility)
6917 DECL_VISIBILITY (decl) = default_visibility;
6918 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
6919 /* If visibility changed and DECL already has DECL_RTL, ensure
6920 symbol flags are updated. */
6921 if (((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
6922 || TREE_CODE (decl) == FUNCTION_DECL)
6923 && DECL_RTL_SET_P (decl))
6924 make_decl_rtl (decl);
6930 /* Handle an "tls_model" attribute; arguments as in
6931 struct attribute_spec.handler. */
6934 handle_tls_model_attribute (tree *node, tree name, tree args,
6935 int ARG_UNUSED (flags), bool *no_add_attrs)
6939 enum tls_model kind;
6941 *no_add_attrs = true;
6943 if (TREE_CODE (decl) != VAR_DECL || !DECL_THREAD_LOCAL_P (decl))
6945 warning (OPT_Wattributes, "%qE attribute ignored", name);
6949 kind = DECL_TLS_MODEL (decl);
6950 id = TREE_VALUE (args);
6951 if (TREE_CODE (id) != STRING_CST)
6953 error ("tls_model argument not a string");
6957 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
6958 kind = TLS_MODEL_LOCAL_EXEC;
6959 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
6960 kind = TLS_MODEL_INITIAL_EXEC;
6961 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
6962 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
6963 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
6964 kind = TLS_MODEL_GLOBAL_DYNAMIC;
6966 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
6968 DECL_TLS_MODEL (decl) = kind;
6972 /* Handle a "no_instrument_function" attribute; arguments as in
6973 struct attribute_spec.handler. */
6976 handle_no_instrument_function_attribute (tree *node, tree name,
6977 tree ARG_UNUSED (args),
6978 int ARG_UNUSED (flags),
6983 if (TREE_CODE (decl) != FUNCTION_DECL)
6985 error_at (DECL_SOURCE_LOCATION (decl),
6986 "%qE attribute applies only to functions", name);
6987 *no_add_attrs = true;
6989 else if (DECL_INITIAL (decl))
6991 error_at (DECL_SOURCE_LOCATION (decl),
6992 "can%'t set %qE attribute after definition", name);
6993 *no_add_attrs = true;
6996 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
7001 /* Handle a "malloc" attribute; arguments as in
7002 struct attribute_spec.handler. */
7005 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7006 int ARG_UNUSED (flags), bool *no_add_attrs)
7008 if (TREE_CODE (*node) == FUNCTION_DECL
7009 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
7010 DECL_IS_MALLOC (*node) = 1;
7013 warning (OPT_Wattributes, "%qE attribute ignored", name);
7014 *no_add_attrs = true;
7020 /* Handle a "alloc_size" attribute; arguments as in
7021 struct attribute_spec.handler. */
7024 handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
7025 int ARG_UNUSED (flags), bool *no_add_attrs)
7027 unsigned arg_count = type_num_arguments (*node);
7028 for (; args; args = TREE_CHAIN (args))
7030 tree position = TREE_VALUE (args);
7032 if (TREE_CODE (position) != INTEGER_CST
7033 || TREE_INT_CST_HIGH (position)
7034 || TREE_INT_CST_LOW (position) < 1
7035 || TREE_INT_CST_LOW (position) > arg_count )
7037 warning (OPT_Wattributes,
7038 "alloc_size parameter outside range");
7039 *no_add_attrs = true;
7046 /* Handle a "returns_twice" attribute; arguments as in
7047 struct attribute_spec.handler. */
7050 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7051 int ARG_UNUSED (flags), bool *no_add_attrs)
7053 if (TREE_CODE (*node) == FUNCTION_DECL)
7054 DECL_IS_RETURNS_TWICE (*node) = 1;
7057 warning (OPT_Wattributes, "%qE attribute ignored", name);
7058 *no_add_attrs = true;
7064 /* Handle a "no_limit_stack" attribute; arguments as in
7065 struct attribute_spec.handler. */
7068 handle_no_limit_stack_attribute (tree *node, tree name,
7069 tree ARG_UNUSED (args),
7070 int ARG_UNUSED (flags),
7075 if (TREE_CODE (decl) != FUNCTION_DECL)
7077 error_at (DECL_SOURCE_LOCATION (decl),
7078 "%qE attribute applies only to functions", name);
7079 *no_add_attrs = true;
7081 else if (DECL_INITIAL (decl))
7083 error_at (DECL_SOURCE_LOCATION (decl),
7084 "can%'t set %qE attribute after definition", name);
7085 *no_add_attrs = true;
7088 DECL_NO_LIMIT_STACK (decl) = 1;
7093 /* Handle a "pure" attribute; arguments as in
7094 struct attribute_spec.handler. */
7097 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7098 int ARG_UNUSED (flags), bool *no_add_attrs)
7100 if (TREE_CODE (*node) == FUNCTION_DECL)
7101 DECL_PURE_P (*node) = 1;
7102 /* ??? TODO: Support types. */
7105 warning (OPT_Wattributes, "%qE attribute ignored", name);
7106 *no_add_attrs = true;
7112 /* Handle a "no vops" attribute; arguments as in
7113 struct attribute_spec.handler. */
7116 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
7117 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7118 bool *ARG_UNUSED (no_add_attrs))
7120 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
7121 DECL_IS_NOVOPS (*node) = 1;
7125 /* Handle a "deprecated" attribute; arguments as in
7126 struct attribute_spec.handler. */
7129 handle_deprecated_attribute (tree *node, tree name,
7130 tree args, int flags,
7133 tree type = NULL_TREE;
7135 tree what = NULL_TREE;
7138 *no_add_attrs = true;
7139 else if (TREE_CODE (TREE_VALUE (args)) != STRING_CST)
7141 error ("deprecated message is not a string");
7142 *no_add_attrs = true;
7148 type = TREE_TYPE (decl);
7150 if (TREE_CODE (decl) == TYPE_DECL
7151 || TREE_CODE (decl) == PARM_DECL
7152 || TREE_CODE (decl) == VAR_DECL
7153 || TREE_CODE (decl) == FUNCTION_DECL
7154 || TREE_CODE (decl) == FIELD_DECL)
7155 TREE_DEPRECATED (decl) = 1;
7159 else if (TYPE_P (*node))
7161 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
7162 *node = build_variant_type_copy (*node);
7163 TREE_DEPRECATED (*node) = 1;
7171 *no_add_attrs = true;
7172 if (type && TYPE_NAME (type))
7174 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
7175 what = TYPE_NAME (*node);
7176 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7177 && DECL_NAME (TYPE_NAME (type)))
7178 what = DECL_NAME (TYPE_NAME (type));
7181 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
7183 warning (OPT_Wattributes, "%qE attribute ignored", name);
7189 /* Handle a "vector_size" attribute; arguments as in
7190 struct attribute_spec.handler. */
7193 handle_vector_size_attribute (tree *node, tree name, tree args,
7194 int ARG_UNUSED (flags),
7197 unsigned HOST_WIDE_INT vecsize, nunits;
7198 enum machine_mode orig_mode;
7199 tree type = *node, new_type, size;
7201 *no_add_attrs = true;
7203 size = TREE_VALUE (args);
7205 if (!host_integerp (size, 1))
7207 warning (OPT_Wattributes, "%qE attribute ignored", name);
7211 /* Get the vector size (in bytes). */
7212 vecsize = tree_low_cst (size, 1);
7214 /* We need to provide for vector pointers, vector arrays, and
7215 functions returning vectors. For example:
7217 __attribute__((vector_size(16))) short *foo;
7219 In this case, the mode is SI, but the type being modified is
7220 HI, so we need to look further. */
7222 while (POINTER_TYPE_P (type)
7223 || TREE_CODE (type) == FUNCTION_TYPE
7224 || TREE_CODE (type) == METHOD_TYPE
7225 || TREE_CODE (type) == ARRAY_TYPE
7226 || TREE_CODE (type) == OFFSET_TYPE)
7227 type = TREE_TYPE (type);
7229 /* Get the mode of the type being modified. */
7230 orig_mode = TYPE_MODE (type);
7232 if ((!INTEGRAL_TYPE_P (type)
7233 && !SCALAR_FLOAT_TYPE_P (type)
7234 && !FIXED_POINT_TYPE_P (type))
7235 || (!SCALAR_FLOAT_MODE_P (orig_mode)
7236 && GET_MODE_CLASS (orig_mode) != MODE_INT
7237 && !ALL_SCALAR_FIXED_POINT_MODE_P (orig_mode))
7238 || !host_integerp (TYPE_SIZE_UNIT (type), 1)
7239 || TREE_CODE (type) == BOOLEAN_TYPE)
7241 error ("invalid vector type for attribute %qE", name);
7245 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
7247 error ("vector size not an integral multiple of component size");
7253 error ("zero vector size");
7257 /* Calculate how many units fit in the vector. */
7258 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
7259 if (nunits & (nunits - 1))
7261 error ("number of components of the vector not a power of two");
7265 new_type = build_vector_type (type, nunits);
7267 /* Build back pointers if needed. */
7268 *node = lang_hooks.types.reconstruct_complex_type (*node, new_type);
7273 /* Handle the "nonnull" attribute. */
7275 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
7276 tree args, int ARG_UNUSED (flags),
7280 unsigned HOST_WIDE_INT attr_arg_num;
7282 /* If no arguments are specified, all pointer arguments should be
7283 non-null. Verify a full prototype is given so that the arguments
7284 will have the correct types when we actually check them later. */
7287 if (!TYPE_ARG_TYPES (type))
7289 error ("nonnull attribute without arguments on a non-prototype");
7290 *no_add_attrs = true;
7295 /* Argument list specified. Verify that each argument number references
7296 a pointer argument. */
7297 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
7300 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
7302 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
7304 error ("nonnull argument has invalid operand number (argument %lu)",
7305 (unsigned long) attr_arg_num);
7306 *no_add_attrs = true;
7310 argument = TYPE_ARG_TYPES (type);
7313 for (ck_num = 1; ; ck_num++)
7315 if (!argument || ck_num == arg_num)
7317 argument = TREE_CHAIN (argument);
7321 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
7323 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
7324 (unsigned long) attr_arg_num, (unsigned long) arg_num);
7325 *no_add_attrs = true;
7329 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
7331 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
7332 (unsigned long) attr_arg_num, (unsigned long) arg_num);
7333 *no_add_attrs = true;
7342 /* Check the argument list of a function call for null in argument slots
7343 that are marked as requiring a non-null pointer argument. The NARGS
7344 arguments are passed in the array ARGARRAY.
7348 check_function_nonnull (tree attrs, int nargs, tree *argarray)
7353 for (a = attrs; a; a = TREE_CHAIN (a))
7355 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
7357 args = TREE_VALUE (a);
7359 /* Walk the argument list. If we encounter an argument number we
7360 should check for non-null, do it. If the attribute has no args,
7361 then every pointer argument is checked (in which case the check
7362 for pointer type is done in check_nonnull_arg). */
7363 for (i = 0; i < nargs; i++)
7365 if (!args || nonnull_check_p (args, i + 1))
7366 check_function_arguments_recurse (check_nonnull_arg, NULL,
7374 /* Check that the Nth argument of a function call (counting backwards
7375 from the end) is a (pointer)0. The NARGS arguments are passed in the
7379 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
7381 tree attr = lookup_attribute ("sentinel", attrs);
7389 /* Skip over the named arguments. */
7390 while (typelist && len < nargs)
7392 typelist = TREE_CHAIN (typelist);
7396 if (TREE_VALUE (attr))
7398 tree p = TREE_VALUE (TREE_VALUE (attr));
7399 pos = TREE_INT_CST_LOW (p);
7402 /* The sentinel must be one of the varargs, i.e.
7403 in position >= the number of fixed arguments. */
7404 if ((nargs - 1 - pos) < len)
7406 warning (OPT_Wformat,
7407 "not enough variable arguments to fit a sentinel");
7411 /* Validate the sentinel. */
7412 sentinel = argarray[nargs - 1 - pos];
7413 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
7414 || !integer_zerop (sentinel))
7415 /* Although __null (in C++) is only an integer we allow it
7416 nevertheless, as we are guaranteed that it's exactly
7417 as wide as a pointer, and we don't want to force
7418 users to cast the NULL they have written there.
7419 We warn with -Wstrict-null-sentinel, though. */
7420 && (warn_strict_null_sentinel || null_node != sentinel))
7421 warning (OPT_Wformat, "missing sentinel in function call");
7425 /* Helper for check_function_nonnull; given a list of operands which
7426 must be non-null in ARGS, determine if operand PARAM_NUM should be
7430 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
7432 unsigned HOST_WIDE_INT arg_num = 0;
7434 for (; args; args = TREE_CHAIN (args))
7436 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
7440 if (arg_num == param_num)
7446 /* Check that the function argument PARAM (which is operand number
7447 PARAM_NUM) is non-null. This is called by check_function_nonnull
7448 via check_function_arguments_recurse. */
7451 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
7452 unsigned HOST_WIDE_INT param_num)
7454 /* Just skip checking the argument if it's not a pointer. This can
7455 happen if the "nonnull" attribute was given without an operand
7456 list (which means to check every pointer argument). */
7458 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
7461 if (integer_zerop (param))
7462 warning (OPT_Wnonnull, "null argument where non-null required "
7463 "(argument %lu)", (unsigned long) param_num);
7466 /* Helper for nonnull attribute handling; fetch the operand number
7467 from the attribute argument list. */
7470 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
7472 /* Verify the arg number is a constant. */
7473 if (TREE_CODE (arg_num_expr) != INTEGER_CST
7474 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
7477 *valp = TREE_INT_CST_LOW (arg_num_expr);
7481 /* Handle a "nothrow" attribute; arguments as in
7482 struct attribute_spec.handler. */
7485 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7486 int ARG_UNUSED (flags), bool *no_add_attrs)
7488 if (TREE_CODE (*node) == FUNCTION_DECL)
7489 TREE_NOTHROW (*node) = 1;
7490 /* ??? TODO: Support types. */
7493 warning (OPT_Wattributes, "%qE attribute ignored", name);
7494 *no_add_attrs = true;
7500 /* Handle a "cleanup" attribute; arguments as in
7501 struct attribute_spec.handler. */
7504 handle_cleanup_attribute (tree *node, tree name, tree args,
7505 int ARG_UNUSED (flags), bool *no_add_attrs)
7508 tree cleanup_id, cleanup_decl;
7510 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
7511 for global destructors in C++. This requires infrastructure that
7512 we don't have generically at the moment. It's also not a feature
7513 we'd be missing too much, since we do have attribute constructor. */
7514 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
7516 warning (OPT_Wattributes, "%qE attribute ignored", name);
7517 *no_add_attrs = true;
7521 /* Verify that the argument is a function in scope. */
7522 /* ??? We could support pointers to functions here as well, if
7523 that was considered desirable. */
7524 cleanup_id = TREE_VALUE (args);
7525 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
7527 error ("cleanup argument not an identifier");
7528 *no_add_attrs = true;
7531 cleanup_decl = lookup_name (cleanup_id);
7532 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
7534 error ("cleanup argument not a function");
7535 *no_add_attrs = true;
7539 /* That the function has proper type is checked with the
7540 eventual call to build_function_call. */
7545 /* Handle a "warn_unused_result" attribute. No special handling. */
7548 handle_warn_unused_result_attribute (tree *node, tree name,
7549 tree ARG_UNUSED (args),
7550 int ARG_UNUSED (flags), bool *no_add_attrs)
7552 /* Ignore the attribute for functions not returning any value. */
7553 if (VOID_TYPE_P (TREE_TYPE (*node)))
7555 warning (OPT_Wattributes, "%qE attribute ignored", name);
7556 *no_add_attrs = true;
7562 /* Handle a "sentinel" attribute. */
7565 handle_sentinel_attribute (tree *node, tree name, tree args,
7566 int ARG_UNUSED (flags), bool *no_add_attrs)
7568 tree params = TYPE_ARG_TYPES (*node);
7572 warning (OPT_Wattributes,
7573 "%qE attribute requires prototypes with named arguments", name);
7574 *no_add_attrs = true;
7578 while (TREE_CHAIN (params))
7579 params = TREE_CHAIN (params);
7581 if (VOID_TYPE_P (TREE_VALUE (params)))
7583 warning (OPT_Wattributes,
7584 "%qE attribute only applies to variadic functions", name);
7585 *no_add_attrs = true;
7591 tree position = TREE_VALUE (args);
7593 if (TREE_CODE (position) != INTEGER_CST)
7595 warning (OPT_Wattributes,
7596 "requested position is not an integer constant");
7597 *no_add_attrs = true;
7601 if (tree_int_cst_lt (position, integer_zero_node))
7603 warning (OPT_Wattributes,
7604 "requested position is less than zero");
7605 *no_add_attrs = true;
7613 /* Handle a "type_generic" attribute. */
7616 handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
7617 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7618 bool * ARG_UNUSED (no_add_attrs))
7622 /* Ensure we have a function type. */
7623 gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
7625 params = TYPE_ARG_TYPES (*node);
7626 while (params && ! VOID_TYPE_P (TREE_VALUE (params)))
7627 params = TREE_CHAIN (params);
7629 /* Ensure we have a variadic function. */
7630 gcc_assert (!params);
7635 /* Handle a "target" attribute. */
7638 handle_target_attribute (tree *node, tree name, tree args, int flags,
7641 /* Ensure we have a function type. */
7642 if (TREE_CODE (*node) != FUNCTION_DECL)
7644 warning (OPT_Wattributes, "%qE attribute ignored", name);
7645 *no_add_attrs = true;
7647 else if (! targetm.target_option.valid_attribute_p (*node, name, args,
7649 *no_add_attrs = true;
7654 /* Arguments being collected for optimization. */
7655 typedef const char *const_char_p; /* For DEF_VEC_P. */
7656 DEF_VEC_P(const_char_p);
7657 DEF_VEC_ALLOC_P(const_char_p, gc);
7658 static GTY(()) VEC(const_char_p, gc) *optimize_args;
7661 /* Inner function to convert a TREE_LIST to argv string to parse the optimize
7662 options in ARGS. ATTR_P is true if this is for attribute(optimize), and
7663 false for #pragma GCC optimize. */
7666 parse_optimize_options (tree args, bool attr_p)
7671 int saved_flag_strict_aliasing;
7672 const char **opt_argv;
7675 /* Build up argv vector. Just in case the string is stored away, use garbage
7676 collected strings. */
7677 VEC_truncate (const_char_p, optimize_args, 0);
7678 VEC_safe_push (const_char_p, gc, optimize_args, NULL);
7680 for (ap = args; ap != NULL_TREE; ap = TREE_CHAIN (ap))
7682 tree value = TREE_VALUE (ap);
7684 if (TREE_CODE (value) == INTEGER_CST)
7687 sprintf (buffer, "-O%ld", (long) TREE_INT_CST_LOW (value));
7688 VEC_safe_push (const_char_p, gc, optimize_args, ggc_strdup (buffer));
7691 else if (TREE_CODE (value) == STRING_CST)
7693 /* Split string into multiple substrings. */
7694 size_t len = TREE_STRING_LENGTH (value);
7695 char *p = ASTRDUP (TREE_STRING_POINTER (value));
7696 char *end = p + len;
7700 while (next_p != NULL)
7706 comma = strchr (p, ',');
7719 r = q = (char *) ggc_alloc (len2 + 3);
7721 /* If the user supplied -Oxxx or -fxxx, only allow -Oxxx or -fxxx
7723 if (*p == '-' && p[1] != 'O' && p[1] != 'f')
7727 warning (OPT_Wattributes,
7728 "Bad option %s to optimize attribute.", p);
7730 warning (OPT_Wpragmas,
7731 "Bad option %s to pragma attribute", p);
7739 /* Assume that Ox is -Ox, a numeric value is -Ox, a s by
7740 itself is -Os, and any other switch begins with a -f. */
7741 if ((*p >= '0' && *p <= '9')
7742 || (p[0] == 's' && p[1] == '\0'))
7748 memcpy (r, p, len2);
7750 VEC_safe_push (const_char_p, gc, optimize_args, q);
7756 opt_argc = VEC_length (const_char_p, optimize_args);
7757 opt_argv = (const char **) alloca (sizeof (char *) * (opt_argc + 1));
7759 for (i = 1; i < opt_argc; i++)
7760 opt_argv[i] = VEC_index (const_char_p, optimize_args, i);
7762 saved_flag_strict_aliasing = flag_strict_aliasing;
7764 /* Now parse the options. */
7765 decode_options (opt_argc, opt_argv);
7767 /* Don't allow changing -fstrict-aliasing. */
7768 flag_strict_aliasing = saved_flag_strict_aliasing;
7770 VEC_truncate (const_char_p, optimize_args, 0);
7774 /* For handling "optimize" attribute. arguments as in
7775 struct attribute_spec.handler. */
7778 handle_optimize_attribute (tree *node, tree name, tree args,
7779 int ARG_UNUSED (flags), bool *no_add_attrs)
7781 /* Ensure we have a function type. */
7782 if (TREE_CODE (*node) != FUNCTION_DECL)
7784 warning (OPT_Wattributes, "%qE attribute ignored", name);
7785 *no_add_attrs = true;
7789 struct cl_optimization cur_opts;
7790 tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
7792 /* Save current options. */
7793 cl_optimization_save (&cur_opts);
7795 /* If we previously had some optimization options, use them as the
7798 cl_optimization_restore (TREE_OPTIMIZATION (old_opts));
7800 /* Parse options, and update the vector. */
7801 parse_optimize_options (args, true);
7802 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
7803 = build_optimization_node ();
7805 /* Restore current options. */
7806 cl_optimization_restore (&cur_opts);
7812 /* Check for valid arguments being passed to a function.
7813 ATTRS is a list of attributes. There are NARGS arguments in the array
7814 ARGARRAY. TYPELIST is the list of argument types for the function.
7817 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
7819 /* Check for null being passed in a pointer argument that must be
7820 non-null. We also need to do this if format checking is enabled. */
7823 check_function_nonnull (attrs, nargs, argarray);
7825 /* Check for errors in format strings. */
7827 if (warn_format || warn_missing_format_attribute)
7828 check_function_format (attrs, nargs, argarray);
7831 check_function_sentinel (attrs, nargs, argarray, typelist);
7834 /* Generic argument checking recursion routine. PARAM is the argument to
7835 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
7836 once the argument is resolved. CTX is context for the callback. */
7838 check_function_arguments_recurse (void (*callback)
7839 (void *, tree, unsigned HOST_WIDE_INT),
7840 void *ctx, tree param,
7841 unsigned HOST_WIDE_INT param_num)
7843 if (CONVERT_EXPR_P (param)
7844 && (TYPE_PRECISION (TREE_TYPE (param))
7845 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
7847 /* Strip coercion. */
7848 check_function_arguments_recurse (callback, ctx,
7849 TREE_OPERAND (param, 0), param_num);
7853 if (TREE_CODE (param) == CALL_EXPR)
7855 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
7857 bool found_format_arg = false;
7859 /* See if this is a call to a known internationalization function
7860 that modifies a format arg. Such a function may have multiple
7861 format_arg attributes (for example, ngettext). */
7863 for (attrs = TYPE_ATTRIBUTES (type);
7865 attrs = TREE_CHAIN (attrs))
7866 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
7869 tree format_num_expr;
7872 call_expr_arg_iterator iter;
7874 /* Extract the argument number, which was previously checked
7876 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
7878 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
7879 && !TREE_INT_CST_HIGH (format_num_expr));
7881 format_num = TREE_INT_CST_LOW (format_num_expr);
7883 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
7885 inner_arg = next_call_expr_arg (&iter), i++)
7886 if (i == format_num)
7888 check_function_arguments_recurse (callback, ctx,
7889 inner_arg, param_num);
7890 found_format_arg = true;
7895 /* If we found a format_arg attribute and did a recursive check,
7896 we are done with checking this argument. Otherwise, we continue
7897 and this will be considered a non-literal. */
7898 if (found_format_arg)
7902 if (TREE_CODE (param) == COND_EXPR)
7904 /* Check both halves of the conditional expression. */
7905 check_function_arguments_recurse (callback, ctx,
7906 TREE_OPERAND (param, 1), param_num);
7907 check_function_arguments_recurse (callback, ctx,
7908 TREE_OPERAND (param, 2), param_num);
7912 (*callback) (ctx, param, param_num);
7915 /* Checks the number of arguments NARGS against the required number
7916 REQUIRED and issues an error if there is a mismatch. Returns true
7917 if the number of arguments is correct, otherwise false. */
7920 validate_nargs (tree fndecl, int nargs, int required)
7922 if (nargs < required)
7924 error ("not enough arguments to function %qE", fndecl);
7927 else if (nargs > required)
7929 error ("too many arguments to function %qE", fndecl);
7935 /* Verifies the NARGS arguments ARGS to the builtin function FNDECL.
7936 Returns false if there was an error, otherwise true. */
7939 check_builtin_function_arguments (tree fndecl, int nargs, tree *args)
7941 if (!DECL_BUILT_IN (fndecl)
7942 || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL)
7945 switch (DECL_FUNCTION_CODE (fndecl))
7947 case BUILT_IN_CONSTANT_P:
7948 return validate_nargs (fndecl, nargs, 1);
7950 case BUILT_IN_ISFINITE:
7951 case BUILT_IN_ISINF:
7952 case BUILT_IN_ISINF_SIGN:
7953 case BUILT_IN_ISNAN:
7954 case BUILT_IN_ISNORMAL:
7955 if (validate_nargs (fndecl, nargs, 1))
7957 if (TREE_CODE (TREE_TYPE (args[0])) != REAL_TYPE)
7959 error ("non-floating-point argument in call to "
7960 "function %qE", fndecl);
7967 case BUILT_IN_ISGREATER:
7968 case BUILT_IN_ISGREATEREQUAL:
7969 case BUILT_IN_ISLESS:
7970 case BUILT_IN_ISLESSEQUAL:
7971 case BUILT_IN_ISLESSGREATER:
7972 case BUILT_IN_ISUNORDERED:
7973 if (validate_nargs (fndecl, nargs, 2))
7975 enum tree_code code0, code1;
7976 code0 = TREE_CODE (TREE_TYPE (args[0]));
7977 code1 = TREE_CODE (TREE_TYPE (args[1]));
7978 if (!((code0 == REAL_TYPE && code1 == REAL_TYPE)
7979 || (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
7980 || (code0 == INTEGER_TYPE && code1 == REAL_TYPE)))
7982 error ("non-floating-point arguments in call to "
7983 "function %qE", fndecl);
7990 case BUILT_IN_FPCLASSIFY:
7991 if (validate_nargs (fndecl, nargs, 6))
7996 if (TREE_CODE (args[i]) != INTEGER_CST)
7998 error ("non-const integer argument %u in call to function %qE",
8003 if (TREE_CODE (TREE_TYPE (args[5])) != REAL_TYPE)
8005 error ("non-floating-point argument in call to function %qE",
8018 /* Function to help qsort sort FIELD_DECLs by name order. */
8021 field_decl_cmp (const void *x_p, const void *y_p)
8023 const tree *const x = (const tree *const) x_p;
8024 const tree *const y = (const tree *const) y_p;
8026 if (DECL_NAME (*x) == DECL_NAME (*y))
8027 /* A nontype is "greater" than a type. */
8028 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8029 if (DECL_NAME (*x) == NULL_TREE)
8031 if (DECL_NAME (*y) == NULL_TREE)
8033 if (DECL_NAME (*x) < DECL_NAME (*y))
8039 gt_pointer_operator new_value;
8043 /* This routine compares two fields like field_decl_cmp but using the
8044 pointer operator in resort_data. */
8047 resort_field_decl_cmp (const void *x_p, const void *y_p)
8049 const tree *const x = (const tree *const) x_p;
8050 const tree *const y = (const tree *const) y_p;
8052 if (DECL_NAME (*x) == DECL_NAME (*y))
8053 /* A nontype is "greater" than a type. */
8054 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
8055 if (DECL_NAME (*x) == NULL_TREE)
8057 if (DECL_NAME (*y) == NULL_TREE)
8060 tree d1 = DECL_NAME (*x);
8061 tree d2 = DECL_NAME (*y);
8062 resort_data.new_value (&d1, resort_data.cookie);
8063 resort_data.new_value (&d2, resort_data.cookie);
8070 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
8073 resort_sorted_fields (void *obj,
8074 void * ARG_UNUSED (orig_obj),
8075 gt_pointer_operator new_value,
8078 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
8079 resort_data.new_value = new_value;
8080 resort_data.cookie = cookie;
8081 qsort (&sf->elts[0], sf->len, sizeof (tree),
8082 resort_field_decl_cmp);
8085 /* Subroutine of c_parse_error.
8086 Return the result of concatenating LHS and RHS. RHS is really
8087 a string literal, its first character is indicated by RHS_START and
8088 RHS_SIZE is its length (including the terminating NUL character).
8090 The caller is responsible for deleting the returned pointer. */
8093 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
8095 const int lhs_size = strlen (lhs);
8096 char *result = XNEWVEC (char, lhs_size + rhs_size);
8097 strncpy (result, lhs, lhs_size);
8098 strncpy (result + lhs_size, rhs_start, rhs_size);
8102 /* Issue the error given by GMSGID, indicating that it occurred before
8103 TOKEN, which had the associated VALUE. */
8106 c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
8107 tree value, unsigned char token_flags)
8109 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
8111 char *message = NULL;
8113 if (token_type == CPP_EOF)
8114 message = catenate_messages (gmsgid, " at end of input");
8115 else if (token_type == CPP_CHAR
8116 || token_type == CPP_WCHAR
8117 || token_type == CPP_CHAR16
8118 || token_type == CPP_CHAR32)
8120 unsigned int val = TREE_INT_CST_LOW (value);
8139 if (val <= UCHAR_MAX && ISGRAPH (val))
8140 message = catenate_messages (gmsgid, " before %s'%c'");
8142 message = catenate_messages (gmsgid, " before %s'\\x%x'");
8144 error (message, prefix, val);
8148 else if (token_type == CPP_STRING
8149 || token_type == CPP_WSTRING
8150 || token_type == CPP_STRING16
8151 || token_type == CPP_STRING32)
8152 message = catenate_messages (gmsgid, " before string constant");
8153 else if (token_type == CPP_NUMBER)
8154 message = catenate_messages (gmsgid, " before numeric constant");
8155 else if (token_type == CPP_NAME)
8157 message = catenate_messages (gmsgid, " before %qE");
8158 error (message, value);
8162 else if (token_type == CPP_PRAGMA)
8163 message = catenate_messages (gmsgid, " before %<#pragma%>");
8164 else if (token_type == CPP_PRAGMA_EOL)
8165 message = catenate_messages (gmsgid, " before end of line");
8166 else if (token_type < N_TTYPES)
8168 message = catenate_messages (gmsgid, " before %qs token");
8169 error (message, cpp_type2name (token_type, token_flags));
8181 #undef catenate_messages
8184 /* Callback from cpp_error for PFILE to print diagnostics from the
8185 preprocessor. The diagnostic is of type LEVEL, at location
8186 LOCATION unless this is after lexing and the compiler's location
8187 should be used instead, with column number possibly overridden by
8188 COLUMN_OVERRIDE if not zero; MSG is the translated message and AP
8189 the arguments. Returns true if a diagnostic was emitted, false
8193 c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
8194 location_t location, unsigned int column_override,
8195 const char *msg, va_list *ap)
8197 diagnostic_info diagnostic;
8198 diagnostic_t dlevel;
8199 int save_warn_system_headers = warn_system_headers;
8204 case CPP_DL_WARNING_SYSHDR:
8207 warn_system_headers = 1;
8209 case CPP_DL_WARNING:
8212 dlevel = DK_WARNING;
8214 case CPP_DL_PEDWARN:
8215 if (flag_no_output && !flag_pedantic_errors)
8217 dlevel = DK_PEDWARN;
8235 location = input_location;
8236 diagnostic_set_info_translated (&diagnostic, msg, ap,
8238 if (column_override)
8239 diagnostic_override_column (&diagnostic, column_override);
8240 ret = report_diagnostic (&diagnostic);
8241 if (level == CPP_DL_WARNING_SYSHDR)
8242 warn_system_headers = save_warn_system_headers;
8246 /* Convert a character from the host to the target execution character
8247 set. cpplib handles this, mostly. */
8250 c_common_to_target_charset (HOST_WIDE_INT c)
8252 /* Character constants in GCC proper are sign-extended under -fsigned-char,
8253 zero-extended under -fno-signed-char. cpplib insists that characters
8254 and character constants are always unsigned. Hence we must convert
8256 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
8258 uc = cpp_host_to_exec_charset (parse_in, uc);
8260 if (flag_signed_char)
8261 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
8262 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
8267 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
8268 component references, with STOP_REF, or alternatively an INDIRECT_REF of
8269 NULL, at the bottom; much like the traditional rendering of offsetof as a
8270 macro. Returns the folded and properly cast result. */
8273 fold_offsetof_1 (tree expr, tree stop_ref)
8275 enum tree_code code = PLUS_EXPR;
8278 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
8279 return size_zero_node;
8281 switch (TREE_CODE (expr))
8287 error ("cannot apply %<offsetof%> to static data member %qD", expr);
8288 return error_mark_node;
8292 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
8293 return error_mark_node;
8296 gcc_assert (integer_zerop (expr));
8297 return size_zero_node;
8301 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8302 gcc_assert (base == error_mark_node || base == size_zero_node);
8306 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8307 if (base == error_mark_node)
8310 t = TREE_OPERAND (expr, 1);
8311 if (DECL_C_BIT_FIELD (t))
8313 error ("attempt to take address of bit-field structure "
8315 return error_mark_node;
8317 off = size_binop_loc (input_location, PLUS_EXPR, DECL_FIELD_OFFSET (t),
8318 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t),
8324 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8325 if (base == error_mark_node)
8328 t = TREE_OPERAND (expr, 1);
8329 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
8332 t = fold_build1_loc (input_location, NEGATE_EXPR, TREE_TYPE (t), t);
8334 t = convert (sizetype, t);
8335 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
8339 /* Handle static members of volatile structs. */
8340 t = TREE_OPERAND (expr, 1);
8341 gcc_assert (TREE_CODE (t) == VAR_DECL);
8342 return fold_offsetof_1 (t, stop_ref);
8348 return size_binop (code, base, off);
8352 fold_offsetof (tree expr, tree stop_ref)
8354 /* Convert back from the internal sizetype to size_t. */
8355 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
8358 /* Print an error message for an invalid lvalue. USE says
8359 how the lvalue is being used and so selects the error message. */
8362 lvalue_error (enum lvalue_use use)
8367 error ("lvalue required as left operand of assignment");
8370 error ("lvalue required as increment operand");
8373 error ("lvalue required as decrement operand");
8376 error ("lvalue required as unary %<&%> operand");
8379 error ("lvalue required in asm statement");
8386 /* *PTYPE is an incomplete array. Complete it with a domain based on
8387 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
8388 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8389 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
8392 complete_array_type (tree *ptype, tree initial_value, bool do_default)
8394 tree maxindex, type, main_type, elt, unqual_elt;
8395 int failure = 0, quals;
8396 hashval_t hashcode = 0;
8398 maxindex = size_zero_node;
8401 if (TREE_CODE (initial_value) == STRING_CST)
8404 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8405 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
8407 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8409 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
8411 if (VEC_empty (constructor_elt, v))
8415 maxindex = integer_minus_one_node;
8420 unsigned HOST_WIDE_INT cnt;
8421 constructor_elt *ce;
8422 bool fold_p = false;
8424 if (VEC_index (constructor_elt, v, 0)->index)
8425 maxindex = fold_convert_loc (input_location, sizetype,
8426 VEC_index (constructor_elt,
8428 curindex = maxindex;
8431 VEC_iterate (constructor_elt, v, cnt, ce);
8434 bool curfold_p = false;
8436 curindex = ce->index, curfold_p = true;
8440 curindex = fold_convert (sizetype, curindex);
8441 curindex = size_binop (PLUS_EXPR, curindex,
8444 if (tree_int_cst_lt (maxindex, curindex))
8445 maxindex = curindex, fold_p = curfold_p;
8448 maxindex = fold_convert (sizetype, maxindex);
8453 /* Make an error message unless that happened already. */
8454 if (initial_value != error_mark_node)
8466 elt = TREE_TYPE (type);
8467 quals = TYPE_QUALS (strip_array_types (elt));
8471 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
8473 /* Using build_distinct_type_copy and modifying things afterward instead
8474 of using build_array_type to create a new type preserves all of the
8475 TYPE_LANG_FLAG_? bits that the front end may have set. */
8476 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
8477 TREE_TYPE (main_type) = unqual_elt;
8478 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
8479 layout_type (main_type);
8481 /* Make sure we have the canonical MAIN_TYPE. */
8482 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
8483 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
8485 main_type = type_hash_canon (hashcode, main_type);
8487 /* Fix the canonical type. */
8488 if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (main_type))
8489 || TYPE_STRUCTURAL_EQUALITY_P (TYPE_DOMAIN (main_type)))
8490 SET_TYPE_STRUCTURAL_EQUALITY (main_type);
8491 else if (TYPE_CANONICAL (TREE_TYPE (main_type)) != TREE_TYPE (main_type)
8492 || (TYPE_CANONICAL (TYPE_DOMAIN (main_type))
8493 != TYPE_DOMAIN (main_type)))
8494 TYPE_CANONICAL (main_type)
8495 = build_array_type (TYPE_CANONICAL (TREE_TYPE (main_type)),
8496 TYPE_CANONICAL (TYPE_DOMAIN (main_type)));
8498 TYPE_CANONICAL (main_type) = main_type;
8503 type = c_build_qualified_type (main_type, quals);
8505 if (COMPLETE_TYPE_P (type)
8506 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8507 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8509 error ("size of array is too large");
8510 /* If we proceed with the array type as it is, we'll eventually
8511 crash in tree_low_cst(). */
8512 type = error_mark_node;
8520 /* Used to help initialize the builtin-types.def table. When a type of
8521 the correct size doesn't exist, use error_mark_node instead of NULL.
8522 The later results in segfaults even when a decl using the type doesn't
8526 builtin_type_for_size (int size, bool unsignedp)
8528 tree type = lang_hooks.types.type_for_size (size, unsignedp);
8529 return type ? type : error_mark_node;
8532 /* A helper function for resolve_overloaded_builtin in resolving the
8533 overloaded __sync_ builtins. Returns a positive power of 2 if the
8534 first operand of PARAMS is a pointer to a supported data type.
8535 Returns 0 if an error is encountered. */
8538 sync_resolve_size (tree function, VEC(tree,gc) *params)
8543 if (VEC_empty (tree, params))
8545 error ("too few arguments to function %qE", function);
8549 type = TREE_TYPE (VEC_index (tree, params, 0));
8550 if (TREE_CODE (type) != POINTER_TYPE)
8553 type = TREE_TYPE (type);
8554 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
8557 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
8558 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
8562 error ("incompatible type for argument %d of %qE", 1, function);
8566 /* A helper function for resolve_overloaded_builtin. Adds casts to
8567 PARAMS to make arguments match up with those of FUNCTION. Drops
8568 the variadic arguments at the end. Returns false if some error
8569 was encountered; true on success. */
8572 sync_resolve_params (tree orig_function, tree function, VEC(tree, gc) *params)
8574 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
8577 unsigned int parmnum;
8579 /* We've declared the implementation functions to use "volatile void *"
8580 as the pointer parameter, so we shouldn't get any complaints from the
8581 call to check_function_arguments what ever type the user used. */
8582 arg_types = TREE_CHAIN (arg_types);
8583 ptype = TREE_TYPE (TREE_TYPE (VEC_index (tree, params, 0)));
8586 /* For the rest of the values, we need to cast these to FTYPE, so that we
8587 don't get warnings for passing pointer types, etc. */
8589 while (arg_types != void_list_node)
8594 if (VEC_length (tree, params) <= parmnum)
8596 error ("too few arguments to function %qE", orig_function);
8600 /* ??? Ideally for the first conversion we'd use convert_for_assignment
8601 so that we get warnings for anything that doesn't match the pointer
8602 type. This isn't portable across the C and C++ front ends atm. */
8603 val = VEC_index (tree, params, parmnum);
8604 val = convert (ptype, val);
8605 val = convert (TREE_VALUE (arg_types), val);
8606 VEC_replace (tree, params, parmnum, val);
8608 arg_types = TREE_CHAIN (arg_types);
8612 /* The definition of these primitives is variadic, with the remaining
8613 being "an optional list of variables protected by the memory barrier".
8614 No clue what that's supposed to mean, precisely, but we consider all
8615 call-clobbered variables to be protected so we're safe. */
8616 VEC_truncate (tree, params, parmnum + 1);
8621 /* A helper function for resolve_overloaded_builtin. Adds a cast to
8622 RESULT to make it match the type of the first pointer argument in
8626 sync_resolve_return (tree first_param, tree result)
8628 tree ptype = TREE_TYPE (TREE_TYPE (first_param));
8629 ptype = TYPE_MAIN_VARIANT (ptype);
8630 return convert (ptype, result);
8633 /* Some builtin functions are placeholders for other expressions. This
8634 function should be called immediately after parsing the call expression
8635 before surrounding code has committed to the type of the expression.
8637 LOC is the location of the builtin call.
8639 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
8640 PARAMS is the argument list for the call. The return value is non-null
8641 when expansion is complete, and null if normal processing should
8645 resolve_overloaded_builtin (location_t loc, tree function, VEC(tree,gc) *params)
8647 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
8648 switch (DECL_BUILT_IN_CLASS (function))
8650 case BUILT_IN_NORMAL:
8653 if (targetm.resolve_overloaded_builtin)
8654 return targetm.resolve_overloaded_builtin (loc, function, params);
8661 /* Handle BUILT_IN_NORMAL here. */
8664 case BUILT_IN_FETCH_AND_ADD_N:
8665 case BUILT_IN_FETCH_AND_SUB_N:
8666 case BUILT_IN_FETCH_AND_OR_N:
8667 case BUILT_IN_FETCH_AND_AND_N:
8668 case BUILT_IN_FETCH_AND_XOR_N:
8669 case BUILT_IN_FETCH_AND_NAND_N:
8670 case BUILT_IN_ADD_AND_FETCH_N:
8671 case BUILT_IN_SUB_AND_FETCH_N:
8672 case BUILT_IN_OR_AND_FETCH_N:
8673 case BUILT_IN_AND_AND_FETCH_N:
8674 case BUILT_IN_XOR_AND_FETCH_N:
8675 case BUILT_IN_NAND_AND_FETCH_N:
8676 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
8677 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
8678 case BUILT_IN_LOCK_TEST_AND_SET_N:
8679 case BUILT_IN_LOCK_RELEASE_N:
8681 int n = sync_resolve_size (function, params);
8682 tree new_function, first_param, result;
8685 return error_mark_node;
8687 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
8688 if (!sync_resolve_params (function, new_function, params))
8689 return error_mark_node;
8691 first_param = VEC_index (tree, params, 0);
8692 result = build_function_call_vec (loc, new_function, params, NULL);
8693 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
8694 && orig_code != BUILT_IN_LOCK_RELEASE_N)
8695 result = sync_resolve_return (first_param, result);
8705 /* Ignoring their sign, return true if two scalar types are the same. */
8707 same_scalar_type_ignoring_signedness (tree t1, tree t2)
8709 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
8711 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
8712 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
8713 || c2 == FIXED_POINT_TYPE));
8715 /* Equality works here because c_common_signed_type uses
8716 TYPE_MAIN_VARIANT. */
8717 return c_common_signed_type (t1)
8718 == c_common_signed_type (t2);
8721 /* Check for missing format attributes on function pointers. LTYPE is
8722 the new type or left-hand side type. RTYPE is the old type or
8723 right-hand side type. Returns TRUE if LTYPE is missing the desired
8727 check_missing_format_attribute (tree ltype, tree rtype)
8729 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
8732 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
8733 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
8738 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
8739 if (is_attribute_p ("format", TREE_PURPOSE (la)))
8747 /* Subscripting with type char is likely to lose on a machine where
8748 chars are signed. So warn on any machine, but optionally. Don't
8749 warn for unsigned char since that type is safe. Don't warn for
8750 signed char because anyone who uses that must have done so
8751 deliberately. Furthermore, we reduce the false positive load by
8752 warning only for non-constant value of type char. */
8755 warn_array_subscript_with_type_char (tree index)
8757 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
8758 && TREE_CODE (index) != INTEGER_CST)
8759 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
8762 /* Implement -Wparentheses for the unexpected C precedence rules, to
8763 cover cases like x + y << z which readers are likely to
8764 misinterpret. We have seen an expression in which CODE is a binary
8765 operator used to combine expressions ARG_LEFT and ARG_RIGHT, which
8766 before folding had CODE_LEFT and CODE_RIGHT. CODE_LEFT and
8767 CODE_RIGHT may be ERROR_MARK, which means that that side of the
8768 expression was not formed using a binary or unary operator, or it
8769 was enclosed in parentheses. */
8772 warn_about_parentheses (enum tree_code code,
8773 enum tree_code code_left, tree arg_left,
8774 enum tree_code code_right, tree arg_right)
8776 if (!warn_parentheses)
8779 /* This macro tests that the expression ARG with original tree code
8780 CODE appears to be a boolean expression. or the result of folding a
8781 boolean expression. */
8782 #define APPEARS_TO_BE_BOOLEAN_EXPR_P(CODE, ARG) \
8783 (truth_value_p (TREE_CODE (ARG)) \
8784 || TREE_CODE (TREE_TYPE (ARG)) == BOOLEAN_TYPE \
8785 /* Folding may create 0 or 1 integers from other expressions. */ \
8786 || ((CODE) != INTEGER_CST \
8787 && (integer_onep (ARG) || integer_zerop (ARG))))
8792 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8793 warning (OPT_Wparentheses,
8794 "suggest parentheses around %<+%> inside %<<<%>");
8795 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8796 warning (OPT_Wparentheses,
8797 "suggest parentheses around %<-%> inside %<<<%>");
8801 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8802 warning (OPT_Wparentheses,
8803 "suggest parentheses around %<+%> inside %<>>%>");
8804 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8805 warning (OPT_Wparentheses,
8806 "suggest parentheses around %<-%> inside %<>>%>");
8809 case TRUTH_ORIF_EXPR:
8810 if (code_left == TRUTH_ANDIF_EXPR || code_right == TRUTH_ANDIF_EXPR)
8811 warning (OPT_Wparentheses,
8812 "suggest parentheses around %<&&%> within %<||%>");
8816 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
8817 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8818 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
8819 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8820 warning (OPT_Wparentheses,
8821 "suggest parentheses around arithmetic in operand of %<|%>");
8822 /* Check cases like x|y==z */
8823 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8824 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8825 warning (OPT_Wparentheses,
8826 "suggest parentheses around comparison in operand of %<|%>");
8827 /* Check cases like !x | y */
8828 else if (code_left == TRUTH_NOT_EXPR
8829 && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8830 warning (OPT_Wparentheses, "suggest parentheses around operand of "
8831 "%<!%> or change %<|%> to %<||%> or %<!%> to %<~%>");
8835 if (code_left == BIT_AND_EXPR
8836 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8837 || code_right == BIT_AND_EXPR
8838 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8839 warning (OPT_Wparentheses,
8840 "suggest parentheses around arithmetic in operand of %<^%>");
8841 /* Check cases like x^y==z */
8842 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8843 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8844 warning (OPT_Wparentheses,
8845 "suggest parentheses around comparison in operand of %<^%>");
8849 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8850 warning (OPT_Wparentheses,
8851 "suggest parentheses around %<+%> in operand of %<&%>");
8852 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8853 warning (OPT_Wparentheses,
8854 "suggest parentheses around %<-%> in operand of %<&%>");
8855 /* Check cases like x&y==z */
8856 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8857 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8858 warning (OPT_Wparentheses,
8859 "suggest parentheses around comparison in operand of %<&%>");
8860 /* Check cases like !x & y */
8861 else if (code_left == TRUTH_NOT_EXPR
8862 && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8863 warning (OPT_Wparentheses, "suggest parentheses around operand of "
8864 "%<!%> or change %<&%> to %<&&%> or %<!%> to %<~%>");
8868 if (TREE_CODE_CLASS (code_left) == tcc_comparison
8869 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8870 warning (OPT_Wparentheses,
8871 "suggest parentheses around comparison in operand of %<==%>");
8874 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 %<!=%>");
8881 if (TREE_CODE_CLASS (code) == tcc_comparison
8882 && ((TREE_CODE_CLASS (code_left) == tcc_comparison
8883 && code_left != NE_EXPR && code_left != EQ_EXPR
8884 && INTEGRAL_TYPE_P (TREE_TYPE (arg_left)))
8885 || (TREE_CODE_CLASS (code_right) == tcc_comparison
8886 && code_right != NE_EXPR && code_right != EQ_EXPR
8887 && INTEGRAL_TYPE_P (TREE_TYPE (arg_right)))))
8888 warning (OPT_Wparentheses, "comparisons like %<X<=Y<=Z%> do not "
8889 "have their mathematical meaning");
8892 #undef NOT_A_BOOLEAN_EXPR_P
8895 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
8898 warn_for_unused_label (tree label)
8900 if (!TREE_USED (label))
8902 if (DECL_INITIAL (label))
8903 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
8905 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
8909 #ifndef TARGET_HAS_TARGETCM
8910 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
8913 /* Warn for division by zero according to the value of DIVISOR. LOC
8914 is the location of the division operator. */
8917 warn_for_div_by_zero (location_t loc, tree divisor)
8919 /* If DIVISOR is zero, and has integral or fixed-point type, issue a warning
8920 about division by zero. Do not issue a warning if DIVISOR has a
8921 floating-point type, since we consider 0.0/0.0 a valid way of
8922 generating a NaN. */
8923 if (c_inhibit_evaluation_warnings == 0
8924 && (integer_zerop (divisor) || fixed_zerop (divisor)))
8925 warning_at (loc, OPT_Wdiv_by_zero, "division by zero");
8928 /* Subroutine of build_binary_op. Give warnings for comparisons
8929 between signed and unsigned quantities that may fail. Do the
8930 checking based on the original operand trees ORIG_OP0 and ORIG_OP1,
8931 so that casts will be considered, but default promotions won't
8934 LOCATION is the location of the comparison operator.
8936 The arguments of this function map directly to local variables
8937 of build_binary_op. */
8940 warn_for_sign_compare (location_t location,
8941 tree orig_op0, tree orig_op1,
8943 tree result_type, enum tree_code resultcode)
8945 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
8946 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
8947 int unsignedp0, unsignedp1;
8949 /* In C++, check for comparison of different enum types. */
8951 && TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
8952 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
8953 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
8954 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
8956 warning_at (location,
8957 OPT_Wsign_compare, "comparison between types %qT and %qT",
8958 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
8961 /* Do not warn if the comparison is being done in a signed type,
8962 since the signed type will only be chosen if it can represent
8963 all the values of the unsigned type. */
8964 if (!TYPE_UNSIGNED (result_type))
8966 /* Do not warn if both operands are unsigned. */
8967 else if (op0_signed == op1_signed)
8971 tree sop, uop, base_type;
8975 sop = orig_op0, uop = orig_op1;
8977 sop = orig_op1, uop = orig_op0;
8979 STRIP_TYPE_NOPS (sop);
8980 STRIP_TYPE_NOPS (uop);
8981 base_type = (TREE_CODE (result_type) == COMPLEX_TYPE
8982 ? TREE_TYPE (result_type) : result_type);
8984 /* Do not warn if the signed quantity is an unsuffixed integer
8985 literal (or some static constant expression involving such
8986 literals or a conditional expression involving such literals)
8987 and it is non-negative. */
8988 if (tree_expr_nonnegative_warnv_p (sop, &ovf))
8990 /* Do not warn if the comparison is an equality operation, the
8991 unsigned quantity is an integral constant, and it would fit
8992 in the result if the result were signed. */
8993 else if (TREE_CODE (uop) == INTEGER_CST
8994 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
8995 && int_fits_type_p (uop, c_common_signed_type (base_type)))
8997 /* In C, do not warn if the unsigned quantity is an enumeration
8998 constant and its maximum value would fit in the result if the
8999 result were signed. */
9000 else if (!c_dialect_cxx() && TREE_CODE (uop) == INTEGER_CST
9001 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
9002 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (uop)),
9003 c_common_signed_type (base_type)))
9006 warning_at (location,
9008 "comparison between signed and unsigned integer expressions");
9011 /* Warn if two unsigned values are being compared in a size larger
9012 than their original size, and one (and only one) is the result of
9013 a `~' operator. This comparison will always fail.
9015 Also warn if one operand is a constant, and the constant does not
9016 have all bits set that are set in the ~ operand when it is
9019 op0 = get_narrower (op0, &unsignedp0);
9020 op1 = get_narrower (op1, &unsignedp1);
9022 if ((TREE_CODE (op0) == BIT_NOT_EXPR)
9023 ^ (TREE_CODE (op1) == BIT_NOT_EXPR))
9025 if (TREE_CODE (op0) == BIT_NOT_EXPR)
9026 op0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
9027 if (TREE_CODE (op1) == BIT_NOT_EXPR)
9028 op1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
9030 if (host_integerp (op0, 0) || host_integerp (op1, 0))
9033 HOST_WIDE_INT constant, mask;
9037 if (host_integerp (op0, 0))
9040 unsignedp = unsignedp1;
9041 constant = tree_low_cst (op0, 0);
9046 unsignedp = unsignedp0;
9047 constant = tree_low_cst (op1, 0);
9050 bits = TYPE_PRECISION (TREE_TYPE (primop));
9051 if (bits < TYPE_PRECISION (result_type)
9052 && bits < HOST_BITS_PER_LONG && unsignedp)
9054 mask = (~ (HOST_WIDE_INT) 0) << bits;
9055 if ((mask & constant) != mask)
9058 warning (OPT_Wsign_compare,
9059 "promoted ~unsigned is always non-zero");
9061 warning_at (location, OPT_Wsign_compare,
9062 "comparison of promoted ~unsigned with constant");
9066 else if (unsignedp0 && unsignedp1
9067 && (TYPE_PRECISION (TREE_TYPE (op0))
9068 < TYPE_PRECISION (result_type))
9069 && (TYPE_PRECISION (TREE_TYPE (op1))
9070 < TYPE_PRECISION (result_type)))
9071 warning_at (location, OPT_Wsign_compare,
9072 "comparison of promoted ~unsigned with unsigned");
9076 /* Setup a TYPE_DECL node as a typedef representation.
9078 X is a TYPE_DECL for a typedef statement. Create a brand new
9079 ..._TYPE node (which will be just a variant of the existing
9080 ..._TYPE node with identical properties) and then install X
9081 as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
9083 The whole point here is to end up with a situation where each
9084 and every ..._TYPE node the compiler creates will be uniquely
9085 associated with AT MOST one node representing a typedef name.
9086 This way, even though the compiler substitutes corresponding
9087 ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
9088 early on, later parts of the compiler can always do the reverse
9089 translation and get back the corresponding typedef name. For
9092 typedef struct S MY_TYPE;
9095 Later parts of the compiler might only know that `object' was of
9096 type `struct S' if it were not for code just below. With this
9097 code however, later parts of the compiler see something like:
9099 struct S' == struct S
9100 typedef struct S' MY_TYPE;
9103 And they can then deduce (from the node for type struct S') that
9104 the original object declaration was:
9108 Being able to do this is important for proper support of protoize,
9109 and also for generating precise symbolic debugging information
9110 which takes full account of the programmer's (typedef) vocabulary.
9112 Obviously, we don't want to generate a duplicate ..._TYPE node if
9113 the TYPE_DECL node that we are now processing really represents a
9114 standard built-in type. */
9117 set_underlying_type (tree x)
9119 if (x == error_mark_node)
9121 if (DECL_IS_BUILTIN (x))
9123 if (TYPE_NAME (TREE_TYPE (x)) == 0)
9124 TYPE_NAME (TREE_TYPE (x)) = x;
9126 else if (TREE_TYPE (x) != error_mark_node
9127 && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
9129 tree tt = TREE_TYPE (x);
9130 DECL_ORIGINAL_TYPE (x) = tt;
9131 tt = build_variant_type_copy (tt);
9132 TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (DECL_ORIGINAL_TYPE (x));
9134 TREE_USED (tt) = TREE_USED (x);
9139 /* Returns true if X is a typedef decl. */
9142 is_typedef_decl (tree x)
9144 return (x && TREE_CODE (x) == TYPE_DECL
9145 && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
9148 /* Record the types used by the current global variable declaration
9149 being parsed, so that we can decide later to emit their debug info.
9150 Those types are in types_used_by_cur_var_decl, and we are going to
9151 store them in the types_used_by_vars_hash hash table.
9152 DECL is the declaration of the global variable that has been parsed. */
9155 record_types_used_by_current_var_decl (tree decl)
9157 gcc_assert (decl && DECL_P (decl) && TREE_STATIC (decl));
9159 if (types_used_by_cur_var_decl)
9162 for (node = types_used_by_cur_var_decl;
9164 node = TREE_CHAIN (node))
9166 tree type = TREE_PURPOSE (node);
9167 types_used_by_var_decl_insert (type, decl);
9169 types_used_by_cur_var_decl = NULL;
9173 /* The C and C++ parsers both use vectors to hold function arguments.
9174 For efficiency, we keep a cache of unused vectors. This is the
9177 typedef VEC(tree,gc)* tree_gc_vec;
9178 DEF_VEC_P(tree_gc_vec);
9179 DEF_VEC_ALLOC_P(tree_gc_vec,gc);
9180 static GTY((deletable)) VEC(tree_gc_vec,gc) *tree_vector_cache;
9182 /* Return a new vector from the cache. If the cache is empty,
9183 allocate a new vector. These vectors are GC'ed, so it is OK if the
9184 pointer is not released.. */
9187 make_tree_vector (void)
9189 if (!VEC_empty (tree_gc_vec, tree_vector_cache))
9190 return VEC_pop (tree_gc_vec, tree_vector_cache);
9193 /* Passing 0 to VEC_alloc returns NULL, and our callers require
9194 that we always return a non-NULL value. The vector code uses
9195 4 when growing a NULL vector, so we do too. */
9196 return VEC_alloc (tree, gc, 4);
9200 /* Release a vector of trees back to the cache. */
9203 release_tree_vector (VEC(tree,gc) *vec)
9207 VEC_truncate (tree, vec, 0);
9208 VEC_safe_push (tree_gc_vec, gc, tree_vector_cache, vec);
9212 /* Get a new tree vector holding a single tree. */
9215 make_tree_vector_single (tree t)
9217 VEC(tree,gc) *ret = make_tree_vector ();
9218 VEC_quick_push (tree, ret, t);
9222 /* Get a new tree vector which is a copy of an existing one. */
9225 make_tree_vector_copy (const VEC(tree,gc) *orig)
9231 ret = make_tree_vector ();
9232 VEC_reserve (tree, gc, ret, VEC_length (tree, orig));
9233 for (ix = 0; VEC_iterate (tree, orig, ix, t); ++ix)
9234 VEC_quick_push (tree, ret, t);
9238 #include "gt-c-common.h"