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 /* We let tm.h override the types used here, to handle trivial differences
59 such as the choice of unsigned int or long unsigned int for size_t.
60 When machines start needing nontrivial differences in the size type,
61 it would be best to do something here to figure out automatically
62 from other information what type to use. */
65 #define SIZE_TYPE "long unsigned int"
69 #define PID_TYPE "int"
73 #define CHAR16_TYPE "short unsigned int"
77 #define CHAR32_TYPE "unsigned int"
81 #define WCHAR_TYPE "int"
84 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
85 #define MODIFIED_WCHAR_TYPE \
86 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
89 #define PTRDIFF_TYPE "long int"
93 #define WINT_TYPE "unsigned int"
97 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
99 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
105 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
107 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
108 ? "long unsigned int" \
109 : "long long unsigned int"))
112 /* The following symbols are subsumed in the c_global_trees array, and
113 listed here individually for documentation purposes.
115 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
117 tree short_integer_type_node;
118 tree long_integer_type_node;
119 tree long_long_integer_type_node;
121 tree short_unsigned_type_node;
122 tree long_unsigned_type_node;
123 tree long_long_unsigned_type_node;
125 tree truthvalue_type_node;
126 tree truthvalue_false_node;
127 tree truthvalue_true_node;
129 tree ptrdiff_type_node;
131 tree unsigned_char_type_node;
132 tree signed_char_type_node;
133 tree wchar_type_node;
134 tree signed_wchar_type_node;
135 tree unsigned_wchar_type_node;
137 tree char16_type_node;
138 tree char32_type_node;
140 tree float_type_node;
141 tree double_type_node;
142 tree long_double_type_node;
144 tree complex_integer_type_node;
145 tree complex_float_type_node;
146 tree complex_double_type_node;
147 tree complex_long_double_type_node;
149 tree dfloat32_type_node;
150 tree dfloat64_type_node;
151 tree_dfloat128_type_node;
153 tree intQI_type_node;
154 tree intHI_type_node;
155 tree intSI_type_node;
156 tree intDI_type_node;
157 tree intTI_type_node;
159 tree unsigned_intQI_type_node;
160 tree unsigned_intHI_type_node;
161 tree unsigned_intSI_type_node;
162 tree unsigned_intDI_type_node;
163 tree unsigned_intTI_type_node;
165 tree widest_integer_literal_type_node;
166 tree widest_unsigned_literal_type_node;
168 Nodes for types `void *' and `const void *'.
170 tree ptr_type_node, const_ptr_type_node;
172 Nodes for types `char *' and `const char *'.
174 tree string_type_node, const_string_type_node;
176 Type `char[SOMENUMBER]'.
177 Used when an array of char is needed and the size is irrelevant.
179 tree char_array_type_node;
181 Type `int[SOMENUMBER]' or something like it.
182 Used when an array of int needed and the size is irrelevant.
184 tree int_array_type_node;
186 Type `wchar_t[SOMENUMBER]' or something like it.
187 Used when a wide string literal is created.
189 tree wchar_array_type_node;
191 Type `char16_t[SOMENUMBER]' or something like it.
192 Used when a UTF-16 string literal is created.
194 tree char16_array_type_node;
196 Type `char32_t[SOMENUMBER]' or something like it.
197 Used when a UTF-32 string literal is created.
199 tree char32_array_type_node;
201 Type `int ()' -- used for implicit declaration of functions.
203 tree default_function_type;
205 A VOID_TYPE node, packaged in a TREE_LIST.
209 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
210 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
211 VAR_DECLS, but C++ does.)
213 tree function_name_decl_node;
214 tree pretty_function_name_decl_node;
215 tree c99_function_name_decl_node;
217 Stack of nested function name VAR_DECLs.
219 tree saved_function_name_decls;
223 tree c_global_trees[CTI_MAX];
225 /* Switches common to the C front ends. */
227 /* Nonzero if preprocessing only. */
229 int flag_preprocess_only;
231 /* Nonzero means don't output line number information. */
233 char flag_no_line_commands;
235 /* Nonzero causes -E output not to be done, but directives such as
236 #define that have side effects are still obeyed. */
240 /* Nonzero means dump macros in some fashion. */
242 char flag_dump_macros;
244 /* Nonzero means pass #include lines through to the output. */
246 char flag_dump_includes;
248 /* Nonzero means process PCH files while preprocessing. */
250 bool flag_pch_preprocess;
252 /* The file name to which we should write a precompiled header, or
253 NULL if no header will be written in this compile. */
255 const char *pch_file;
257 /* Nonzero if an ISO standard was selected. It rejects macros in the
261 /* Nonzero if -undef was given. It suppresses target built-in macros
265 /* Nonzero means don't recognize the non-ANSI builtin functions. */
269 /* Nonzero means don't recognize the non-ANSI builtin functions.
272 int flag_no_nonansi_builtin;
274 /* Nonzero means give `double' the same size as `float'. */
276 int flag_short_double;
278 /* Nonzero means give `wchar_t' the same size as `short'. */
280 int flag_short_wchar;
282 /* Nonzero means allow implicit conversions between vectors with
283 differing numbers of subparts and/or differing element types. */
284 int flag_lax_vector_conversions;
286 /* Nonzero means allow Microsoft extensions without warnings or errors. */
287 int flag_ms_extensions;
289 /* Nonzero means don't recognize the keyword `asm'. */
293 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
295 int flag_signed_bitfields = 1;
297 /* Warn about #pragma directives that are not recognized. */
299 int warn_unknown_pragmas; /* Tri state variable. */
301 /* Warn about format/argument anomalies in calls to formatted I/O functions
302 (*printf, *scanf, strftime, strfmon, etc.). */
306 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
307 with GCC this doesn't matter as __null is guaranteed to have the right
310 int warn_strict_null_sentinel;
312 /* Zero means that faster, ...NonNil variants of objc_msgSend...
313 calls will be used in ObjC; passing nil receivers to such calls
314 will most likely result in crashes. */
315 int flag_nil_receivers = 1;
317 /* Nonzero means that code generation will be altered to support
318 "zero-link" execution. This currently affects ObjC only, but may
319 affect other languages in the future. */
320 int flag_zero_link = 0;
322 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
323 unit. It will inform the ObjC runtime that class definition(s) herein
324 contained are to replace one(s) previously loaded. */
325 int flag_replace_objc_classes = 0;
327 /* C/ObjC language option variables. */
330 /* Nonzero means allow type mismatches in conditional expressions;
331 just make their values `void'. */
333 int flag_cond_mismatch;
335 /* Nonzero means enable C89 Amendment 1 features. */
339 /* Nonzero means use the ISO C99 dialect of C. */
343 /* Nonzero means that we have builtin functions, and main is an int. */
348 /* ObjC language option variables. */
351 /* Open and close the file for outputting class declarations, if
354 int flag_gen_declaration;
356 /* Tells the compiler that this is a special run. Do not perform any
357 compiling, instead we are to test some platform dependent features
358 and output a C header file with appropriate definitions. */
360 int print_struct_values;
362 /* Tells the compiler what is the constant string class for ObjC. */
364 const char *constant_string_class_name;
367 /* C++ language option variables. */
370 /* Nonzero means don't recognize any extension keywords. */
372 int flag_no_gnu_keywords;
374 /* Nonzero means do emit exported implementations of functions even if
375 they can be inlined. */
377 int flag_implement_inlines = 1;
379 /* Nonzero means that implicit instantiations will be emitted if needed. */
381 int flag_implicit_templates = 1;
383 /* Nonzero means that implicit instantiations of inline templates will be
384 emitted if needed, even if instantiations of non-inline templates
387 int flag_implicit_inline_templates = 1;
389 /* Nonzero means generate separate instantiation control files and
390 juggle them at link time. */
392 int flag_use_repository;
394 /* Nonzero if we want to issue diagnostics that the standard says are not
397 int flag_optional_diags = 1;
399 /* Nonzero means we should attempt to elide constructors when possible. */
401 int flag_elide_constructors = 1;
403 /* Nonzero means that member functions defined in class scope are
404 inline by default. */
406 int flag_default_inline = 1;
408 /* Controls whether compiler generates 'type descriptor' that give
409 run-time type information. */
413 /* Nonzero if we want to conserve space in the .o files. We do this
414 by putting uninitialized data and runtime initialized data into
415 .common instead of .data at the expense of not flagging multiple
418 int flag_conserve_space;
420 /* Nonzero if we want to obey access control semantics. */
422 int flag_access_control = 1;
424 /* Nonzero if we want to check the return value of new and avoid calling
425 constructors if it is a null pointer. */
429 /* The C++ dialect being used. C++98 is the default. */
431 enum cxx_dialect cxx_dialect = cxx98;
433 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
434 initialization variables.
435 0: Old rules, set by -fno-for-scope.
436 2: New ISO rules, set by -ffor-scope.
437 1: Try to implement new ISO rules, but with backup compatibility
438 (and warnings). This is the default, for now. */
440 int flag_new_for_scope = 1;
442 /* Nonzero if we want to emit defined symbols with common-like linkage as
443 weak symbols where possible, in order to conform to C++ semantics.
444 Otherwise, emit them as local symbols. */
448 /* 0 means we want the preprocessor to not emit line directives for
449 the current working directory. 1 means we want it to do it. -1
450 means we should decide depending on whether debugging information
451 is being emitted or not. */
453 int flag_working_directory = -1;
455 /* Nonzero to use __cxa_atexit, rather than atexit, to register
456 destructors for local statics and global objects. '2' means it has been
457 set nonzero as a default, not by a command-line flag. */
459 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
461 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
462 code. '2' means it has not been set explicitly on the command line. */
464 int flag_use_cxa_get_exception_ptr = 2;
466 /* Nonzero means to implement standard semantics for exception
467 specifications, calling unexpected if an exception is thrown that
468 doesn't match the specification. Zero means to treat them as
469 assertions and optimize accordingly, but not check them. */
471 int flag_enforce_eh_specs = 1;
473 /* Nonzero means to generate thread-safe code for initializing local
476 int flag_threadsafe_statics = 1;
478 /* Nonzero means warn about implicit declarations. */
480 int warn_implicit = 1;
482 /* Maximum template instantiation depth. This limit is rather
483 arbitrary, but it exists to limit the time it takes to notice
484 infinite template instantiations. */
486 int max_tinst_depth = 500;
490 /* The elements of `ridpointers' are identifier nodes for the reserved
491 type names and storage classes. It is indexed by a RID_... value. */
494 tree (*make_fname_decl) (tree, int);
496 /* Nonzero means the expression being parsed will never be evaluated.
497 This is a count, since unevaluated expressions can nest. */
500 /* Whether lexing has been completed, so subsequent preprocessor
501 errors should use the compiler's input_location. */
502 bool done_lexing = false;
504 /* Information about how a function name is generated. */
507 tree *const decl; /* pointer to the VAR_DECL. */
508 const unsigned rid; /* RID number for the identifier. */
509 const int pretty; /* How pretty is it? */
512 /* The three ways of getting then name of the current function. */
514 const struct fname_var_t fname_vars[] =
516 /* C99 compliant __func__, must be first. */
517 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
518 /* GCC __FUNCTION__ compliant. */
519 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
520 /* GCC __PRETTY_FUNCTION__ compliant. */
521 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
525 static tree c_fully_fold_internal (tree expr, bool, bool *, bool *);
526 static tree check_case_value (tree);
527 static bool check_case_bounds (tree, tree, tree *, tree *);
529 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
533 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
534 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
535 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
536 static tree handle_always_inline_attribute (tree *, tree, tree, int,
538 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
539 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
540 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
541 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
542 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
543 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
544 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
546 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
547 static tree handle_transparent_union_attribute (tree *, tree, tree,
549 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
550 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
551 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
552 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
553 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
554 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
555 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
556 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
557 static tree handle_visibility_attribute (tree *, tree, tree, int,
559 static tree handle_tls_model_attribute (tree *, tree, tree, int,
561 static tree handle_no_instrument_function_attribute (tree *, tree,
563 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
564 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
565 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
567 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
568 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
569 static tree handle_deprecated_attribute (tree *, tree, tree, int,
571 static tree handle_vector_size_attribute (tree *, tree, tree, int,
573 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
574 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
575 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
576 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
578 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
579 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
580 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
581 static tree handle_target_attribute (tree *, tree, tree, int, bool *);
582 static tree handle_optimize_attribute (tree *, tree, tree, int, bool *);
584 static void check_function_nonnull (tree, int, tree *);
585 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
586 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
587 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
588 static int resort_field_decl_cmp (const void *, const void *);
590 /* Reserved words. The third field is a mask: keywords are disabled
591 if they match the mask.
594 C --std=c89: D_C99 | D_CXXONLY | D_OBJC | D_CXX_OBJC
595 C --std=c99: D_CXXONLY | D_OBJC
596 ObjC is like C except that D_OBJC and D_CXX_OBJC are not set
597 C++ --std=c98: D_CONLY | D_CXXOX | D_OBJC
598 C++ --std=c0x: D_CONLY | D_OBJC
599 ObjC++ is like C++ except that D_OBJC is not set
601 If -fno-asm is used, D_ASM is added to the mask. If
602 -fno-gnu-keywords is used, D_EXT is added. If -fno-asm and C in
603 C89 mode, D_EXT89 is added for both -fno-asm and -fno-gnu-keywords.
604 In C with -Wc++-compat, we warn if D_CXXWARN is set. */
606 const struct c_common_resword c_common_reswords[] =
608 { "_Bool", RID_BOOL, D_CONLY },
609 { "_Complex", RID_COMPLEX, 0 },
610 { "_Decimal32", RID_DFLOAT32, D_CONLY | D_EXT },
611 { "_Decimal64", RID_DFLOAT64, D_CONLY | D_EXT },
612 { "_Decimal128", RID_DFLOAT128, D_CONLY | D_EXT },
613 { "_Fract", RID_FRACT, D_CONLY | D_EXT },
614 { "_Accum", RID_ACCUM, D_CONLY | D_EXT },
615 { "_Sat", RID_SAT, D_CONLY | D_EXT },
616 { "__FUNCTION__", RID_FUNCTION_NAME, 0 },
617 { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
618 { "__alignof", RID_ALIGNOF, 0 },
619 { "__alignof__", RID_ALIGNOF, 0 },
620 { "__asm", RID_ASM, 0 },
621 { "__asm__", RID_ASM, 0 },
622 { "__attribute", RID_ATTRIBUTE, 0 },
623 { "__attribute__", RID_ATTRIBUTE, 0 },
624 { "__builtin_choose_expr", RID_CHOOSE_EXPR, D_CONLY },
625 { "__builtin_offsetof", RID_OFFSETOF, 0 },
626 { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, D_CONLY },
627 { "__builtin_va_arg", RID_VA_ARG, 0 },
628 { "__complex", RID_COMPLEX, 0 },
629 { "__complex__", RID_COMPLEX, 0 },
630 { "__const", RID_CONST, 0 },
631 { "__const__", RID_CONST, 0 },
632 { "__decltype", RID_DECLTYPE, D_CXXONLY },
633 { "__extension__", RID_EXTENSION, 0 },
634 { "__func__", RID_C99_FUNCTION_NAME, 0 },
635 { "__has_nothrow_assign", RID_HAS_NOTHROW_ASSIGN, D_CXXONLY },
636 { "__has_nothrow_constructor", RID_HAS_NOTHROW_CONSTRUCTOR, D_CXXONLY },
637 { "__has_nothrow_copy", RID_HAS_NOTHROW_COPY, D_CXXONLY },
638 { "__has_trivial_assign", RID_HAS_TRIVIAL_ASSIGN, D_CXXONLY },
639 { "__has_trivial_constructor", RID_HAS_TRIVIAL_CONSTRUCTOR, D_CXXONLY },
640 { "__has_trivial_copy", RID_HAS_TRIVIAL_COPY, D_CXXONLY },
641 { "__has_trivial_destructor", RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY },
642 { "__has_virtual_destructor", RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY },
643 { "__is_abstract", RID_IS_ABSTRACT, D_CXXONLY },
644 { "__is_base_of", RID_IS_BASE_OF, D_CXXONLY },
645 { "__is_class", RID_IS_CLASS, D_CXXONLY },
646 { "__is_convertible_to", RID_IS_CONVERTIBLE_TO, D_CXXONLY },
647 { "__is_empty", RID_IS_EMPTY, D_CXXONLY },
648 { "__is_enum", RID_IS_ENUM, D_CXXONLY },
649 { "__is_pod", RID_IS_POD, D_CXXONLY },
650 { "__is_polymorphic", RID_IS_POLYMORPHIC, D_CXXONLY },
651 { "__is_union", RID_IS_UNION, D_CXXONLY },
652 { "__imag", RID_IMAGPART, 0 },
653 { "__imag__", RID_IMAGPART, 0 },
654 { "__inline", RID_INLINE, 0 },
655 { "__inline__", RID_INLINE, 0 },
656 { "__label__", RID_LABEL, 0 },
657 { "__null", RID_NULL, 0 },
658 { "__real", RID_REALPART, 0 },
659 { "__real__", RID_REALPART, 0 },
660 { "__restrict", RID_RESTRICT, 0 },
661 { "__restrict__", RID_RESTRICT, 0 },
662 { "__signed", RID_SIGNED, 0 },
663 { "__signed__", RID_SIGNED, 0 },
664 { "__thread", RID_THREAD, 0 },
665 { "__typeof", RID_TYPEOF, 0 },
666 { "__typeof__", RID_TYPEOF, 0 },
667 { "__volatile", RID_VOLATILE, 0 },
668 { "__volatile__", RID_VOLATILE, 0 },
669 { "asm", RID_ASM, D_ASM },
670 { "auto", RID_AUTO, 0 },
671 { "bool", RID_BOOL, D_CXXONLY | D_CXXWARN },
672 { "break", RID_BREAK, 0 },
673 { "case", RID_CASE, 0 },
674 { "catch", RID_CATCH, D_CXX_OBJC | D_CXXWARN },
675 { "char", RID_CHAR, 0 },
676 { "char16_t", RID_CHAR16, D_CXXONLY | D_CXX0X | D_CXXWARN },
677 { "char32_t", RID_CHAR32, D_CXXONLY | D_CXX0X | D_CXXWARN },
678 { "class", RID_CLASS, D_CXX_OBJC | D_CXXWARN },
679 { "const", RID_CONST, 0 },
680 { "const_cast", RID_CONSTCAST, D_CXXONLY | D_CXXWARN },
681 { "continue", RID_CONTINUE, 0 },
682 { "decltype", RID_DECLTYPE, D_CXXONLY | D_CXX0X | D_CXXWARN },
683 { "default", RID_DEFAULT, 0 },
684 { "delete", RID_DELETE, D_CXXONLY | D_CXXWARN },
686 { "double", RID_DOUBLE, 0 },
687 { "dynamic_cast", RID_DYNCAST, D_CXXONLY | D_CXXWARN },
688 { "else", RID_ELSE, 0 },
689 { "enum", RID_ENUM, 0 },
690 { "explicit", RID_EXPLICIT, D_CXXONLY | D_CXXWARN },
691 { "export", RID_EXPORT, D_CXXONLY | D_CXXWARN },
692 { "extern", RID_EXTERN, 0 },
693 { "false", RID_FALSE, D_CXXONLY | D_CXXWARN },
694 { "float", RID_FLOAT, 0 },
695 { "for", RID_FOR, 0 },
696 { "friend", RID_FRIEND, D_CXXONLY | D_CXXWARN },
697 { "goto", RID_GOTO, 0 },
699 { "inline", RID_INLINE, D_EXT89 },
700 { "int", RID_INT, 0 },
701 { "long", RID_LONG, 0 },
702 { "mutable", RID_MUTABLE, D_CXXONLY | D_CXXWARN },
703 { "namespace", RID_NAMESPACE, D_CXXONLY | D_CXXWARN },
704 { "new", RID_NEW, D_CXXONLY | D_CXXWARN },
705 { "operator", RID_OPERATOR, D_CXXONLY | D_CXXWARN },
706 { "private", RID_PRIVATE, D_CXX_OBJC | D_CXXWARN },
707 { "protected", RID_PROTECTED, D_CXX_OBJC | D_CXXWARN },
708 { "public", RID_PUBLIC, D_CXX_OBJC | D_CXXWARN },
709 { "register", RID_REGISTER, 0 },
710 { "reinterpret_cast", RID_REINTCAST, D_CXXONLY | D_CXXWARN },
711 { "restrict", RID_RESTRICT, D_CONLY | D_C99 },
712 { "return", RID_RETURN, 0 },
713 { "short", RID_SHORT, 0 },
714 { "signed", RID_SIGNED, 0 },
715 { "sizeof", RID_SIZEOF, 0 },
716 { "static", RID_STATIC, 0 },
717 { "static_assert", RID_STATIC_ASSERT, D_CXXONLY | D_CXX0X | D_CXXWARN },
718 { "static_cast", RID_STATCAST, D_CXXONLY | D_CXXWARN },
719 { "struct", RID_STRUCT, 0 },
720 { "switch", RID_SWITCH, 0 },
721 { "template", RID_TEMPLATE, D_CXXONLY | D_CXXWARN },
722 { "this", RID_THIS, D_CXXONLY | D_CXXWARN },
723 { "throw", RID_THROW, D_CXX_OBJC | D_CXXWARN },
724 { "true", RID_TRUE, D_CXXONLY | D_CXXWARN },
725 { "try", RID_TRY, D_CXX_OBJC | D_CXXWARN },
726 { "typedef", RID_TYPEDEF, 0 },
727 { "typename", RID_TYPENAME, D_CXXONLY | D_CXXWARN },
728 { "typeid", RID_TYPEID, D_CXXONLY | D_CXXWARN },
729 { "typeof", RID_TYPEOF, D_ASM | D_EXT },
730 { "union", RID_UNION, 0 },
731 { "unsigned", RID_UNSIGNED, 0 },
732 { "using", RID_USING, D_CXXONLY | D_CXXWARN },
733 { "virtual", RID_VIRTUAL, D_CXXONLY | D_CXXWARN },
734 { "void", RID_VOID, 0 },
735 { "volatile", RID_VOLATILE, 0 },
736 { "wchar_t", RID_WCHAR, D_CXXONLY },
737 { "while", RID_WHILE, 0 },
738 /* These Objective-C keywords are recognized only immediately after
740 { "compatibility_alias", RID_AT_ALIAS, D_OBJC },
741 { "defs", RID_AT_DEFS, D_OBJC },
742 { "encode", RID_AT_ENCODE, D_OBJC },
743 { "end", RID_AT_END, D_OBJC },
744 { "implementation", RID_AT_IMPLEMENTATION, D_OBJC },
745 { "interface", RID_AT_INTERFACE, D_OBJC },
746 { "protocol", RID_AT_PROTOCOL, D_OBJC },
747 { "selector", RID_AT_SELECTOR, D_OBJC },
748 { "finally", RID_AT_FINALLY, D_OBJC },
749 { "synchronized", RID_AT_SYNCHRONIZED, D_OBJC },
750 /* These are recognized only in protocol-qualifier context
752 { "bycopy", RID_BYCOPY, D_OBJC },
753 { "byref", RID_BYREF, D_OBJC },
754 { "in", RID_IN, D_OBJC },
755 { "inout", RID_INOUT, D_OBJC },
756 { "oneway", RID_ONEWAY, D_OBJC },
757 { "out", RID_OUT, D_OBJC },
760 const unsigned int num_c_common_reswords =
761 sizeof c_common_reswords / sizeof (struct c_common_resword);
763 /* Table of machine-independent attributes common to all C-like languages. */
764 const struct attribute_spec c_common_attribute_table[] =
766 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
767 { "packed", 0, 0, false, false, false,
768 handle_packed_attribute },
769 { "nocommon", 0, 0, true, false, false,
770 handle_nocommon_attribute },
771 { "common", 0, 0, true, false, false,
772 handle_common_attribute },
773 /* FIXME: logically, noreturn attributes should be listed as
774 "false, true, true" and apply to function types. But implementing this
775 would require all the places in the compiler that use TREE_THIS_VOLATILE
776 on a decl to identify non-returning functions to be located and fixed
777 to check the function type instead. */
778 { "noreturn", 0, 0, true, false, false,
779 handle_noreturn_attribute },
780 { "volatile", 0, 0, true, false, false,
781 handle_noreturn_attribute },
782 { "noinline", 0, 0, true, false, false,
783 handle_noinline_attribute },
784 { "always_inline", 0, 0, true, false, false,
785 handle_always_inline_attribute },
786 { "gnu_inline", 0, 0, true, false, false,
787 handle_gnu_inline_attribute },
788 { "artificial", 0, 0, true, false, false,
789 handle_artificial_attribute },
790 { "flatten", 0, 0, true, false, false,
791 handle_flatten_attribute },
792 { "used", 0, 0, true, false, false,
793 handle_used_attribute },
794 { "unused", 0, 0, false, false, false,
795 handle_unused_attribute },
796 { "externally_visible", 0, 0, true, false, false,
797 handle_externally_visible_attribute },
798 /* The same comments as for noreturn attributes apply to const ones. */
799 { "const", 0, 0, true, false, false,
800 handle_const_attribute },
801 { "transparent_union", 0, 0, false, false, false,
802 handle_transparent_union_attribute },
803 { "constructor", 0, 1, true, false, false,
804 handle_constructor_attribute },
805 { "destructor", 0, 1, true, false, false,
806 handle_destructor_attribute },
807 { "mode", 1, 1, false, true, false,
808 handle_mode_attribute },
809 { "section", 1, 1, true, false, false,
810 handle_section_attribute },
811 { "aligned", 0, 1, false, false, false,
812 handle_aligned_attribute },
813 { "weak", 0, 0, true, false, false,
814 handle_weak_attribute },
815 { "alias", 1, 1, true, false, false,
816 handle_alias_attribute },
817 { "weakref", 0, 1, true, false, false,
818 handle_weakref_attribute },
819 { "no_instrument_function", 0, 0, true, false, false,
820 handle_no_instrument_function_attribute },
821 { "malloc", 0, 0, true, false, false,
822 handle_malloc_attribute },
823 { "returns_twice", 0, 0, true, false, false,
824 handle_returns_twice_attribute },
825 { "no_stack_limit", 0, 0, true, false, false,
826 handle_no_limit_stack_attribute },
827 { "pure", 0, 0, true, false, false,
828 handle_pure_attribute },
829 /* For internal use (marking of builtins) only. The name contains space
830 to prevent its usage in source code. */
831 { "no vops", 0, 0, true, false, false,
832 handle_novops_attribute },
833 { "deprecated", 0, 0, false, false, false,
834 handle_deprecated_attribute },
835 { "vector_size", 1, 1, false, true, false,
836 handle_vector_size_attribute },
837 { "visibility", 1, 1, false, false, false,
838 handle_visibility_attribute },
839 { "tls_model", 1, 1, true, false, false,
840 handle_tls_model_attribute },
841 { "nonnull", 0, -1, false, true, true,
842 handle_nonnull_attribute },
843 { "nothrow", 0, 0, true, false, false,
844 handle_nothrow_attribute },
845 { "may_alias", 0, 0, false, true, false, NULL },
846 { "cleanup", 1, 1, true, false, false,
847 handle_cleanup_attribute },
848 { "warn_unused_result", 0, 0, false, true, true,
849 handle_warn_unused_result_attribute },
850 { "sentinel", 0, 1, false, true, true,
851 handle_sentinel_attribute },
852 /* For internal use (marking of builtins) only. The name contains space
853 to prevent its usage in source code. */
854 { "type generic", 0, 0, false, true, true,
855 handle_type_generic_attribute },
856 { "alloc_size", 1, 2, false, true, true,
857 handle_alloc_size_attribute },
858 { "cold", 0, 0, true, false, false,
859 handle_cold_attribute },
860 { "hot", 0, 0, true, false, false,
861 handle_hot_attribute },
862 { "warning", 1, 1, true, false, false,
863 handle_error_attribute },
864 { "error", 1, 1, true, false, false,
865 handle_error_attribute },
866 { "target", 1, -1, true, false, false,
867 handle_target_attribute },
868 { "optimize", 1, -1, true, false, false,
869 handle_optimize_attribute },
870 { NULL, 0, 0, false, false, false, NULL }
873 /* Give the specifications for the format attributes, used by C and all
876 const struct attribute_spec c_common_format_attribute_table[] =
878 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
879 { "format", 3, 3, false, true, true,
880 handle_format_attribute },
881 { "format_arg", 1, 1, false, true, true,
882 handle_format_arg_attribute },
883 { NULL, 0, 0, false, false, false, NULL }
886 /* Push current bindings for the function name VAR_DECLS. */
889 start_fname_decls (void)
892 tree saved = NULL_TREE;
894 for (ix = 0; fname_vars[ix].decl; ix++)
896 tree decl = *fname_vars[ix].decl;
900 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
901 *fname_vars[ix].decl = NULL_TREE;
904 if (saved || saved_function_name_decls)
905 /* Normally they'll have been NULL, so only push if we've got a
906 stack, or they are non-NULL. */
907 saved_function_name_decls = tree_cons (saved, NULL_TREE,
908 saved_function_name_decls);
911 /* Finish up the current bindings, adding them into the current function's
912 statement tree. This must be done _before_ finish_stmt_tree is called.
913 If there is no current function, we must be at file scope and no statements
914 are involved. Pop the previous bindings. */
917 finish_fname_decls (void)
920 tree stmts = NULL_TREE;
921 tree stack = saved_function_name_decls;
923 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
924 append_to_statement_list (TREE_VALUE (stack), &stmts);
928 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
930 if (TREE_CODE (*bodyp) == BIND_EXPR)
931 bodyp = &BIND_EXPR_BODY (*bodyp);
933 append_to_statement_list_force (*bodyp, &stmts);
937 for (ix = 0; fname_vars[ix].decl; ix++)
938 *fname_vars[ix].decl = NULL_TREE;
942 /* We had saved values, restore them. */
945 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
947 tree decl = TREE_PURPOSE (saved);
948 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
950 *fname_vars[ix].decl = decl;
952 stack = TREE_CHAIN (stack);
954 saved_function_name_decls = stack;
957 /* Return the text name of the current function, suitably prettified
958 by PRETTY_P. Return string must be freed by caller. */
961 fname_as_string (int pretty_p)
963 const char *name = "top level";
966 cpp_string cstr = { 0, 0 }, strname;
974 if (current_function_decl)
975 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
977 len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
979 namep = XNEWVEC (char, len);
980 snprintf (namep, len, "\"%s\"", name);
981 strname.text = (unsigned char *) namep;
982 strname.len = len - 1;
984 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, CPP_STRING))
987 return (const char *) cstr.text;
993 /* Return the VAR_DECL for a const char array naming the current
994 function. If the VAR_DECL has not yet been created, create it
995 now. RID indicates how it should be formatted and IDENTIFIER_NODE
996 ID is its name (unfortunately C and C++ hold the RID values of
997 keywords in different places, so we can't derive RID from ID in
998 this language independent code. LOC is the location of the
1002 fname_decl (location_t loc, unsigned int rid, tree id)
1005 tree decl = NULL_TREE;
1007 for (ix = 0; fname_vars[ix].decl; ix++)
1008 if (fname_vars[ix].rid == rid)
1011 decl = *fname_vars[ix].decl;
1014 /* If a tree is built here, it would normally have the lineno of
1015 the current statement. Later this tree will be moved to the
1016 beginning of the function and this line number will be wrong.
1017 To avoid this problem set the lineno to 0 here; that prevents
1018 it from appearing in the RTL. */
1020 location_t saved_location = input_location;
1021 input_location = UNKNOWN_LOCATION;
1023 stmts = push_stmt_list ();
1024 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
1025 stmts = pop_stmt_list (stmts);
1026 if (!IS_EMPTY_STMT (stmts))
1027 saved_function_name_decls
1028 = tree_cons (decl, stmts, saved_function_name_decls);
1029 *fname_vars[ix].decl = decl;
1030 input_location = saved_location;
1032 if (!ix && !current_function_decl)
1033 pedwarn (loc, 0, "%qD is not defined outside of function scope", decl);
1038 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
1041 fix_string_type (tree value)
1043 int length = TREE_STRING_LENGTH (value);
1045 tree e_type, i_type, a_type;
1047 /* Compute the number of elements, for the array type. */
1048 if (TREE_TYPE (value) == char_array_type_node || !TREE_TYPE (value))
1051 e_type = char_type_node;
1053 else if (TREE_TYPE (value) == char16_array_type_node)
1055 nchars = length / (TYPE_PRECISION (char16_type_node) / BITS_PER_UNIT);
1056 e_type = char16_type_node;
1058 else if (TREE_TYPE (value) == char32_array_type_node)
1060 nchars = length / (TYPE_PRECISION (char32_type_node) / BITS_PER_UNIT);
1061 e_type = char32_type_node;
1065 nchars = length / (TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT);
1066 e_type = wchar_type_node;
1069 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
1070 limit in C++98 Annex B is very large (65536) and is not normative,
1071 so we do not diagnose it (warn_overlength_strings is forced off
1072 in c_common_post_options). */
1073 if (warn_overlength_strings)
1075 const int nchars_max = flag_isoc99 ? 4095 : 509;
1076 const int relevant_std = flag_isoc99 ? 99 : 90;
1077 if (nchars - 1 > nchars_max)
1078 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
1079 separate the %d from the 'C'. 'ISO' should not be
1080 translated, but it may be moved after 'C%d' in languages
1081 where modifiers follow nouns. */
1082 pedwarn (input_location, OPT_Woverlength_strings,
1083 "string length %qd is greater than the length %qd "
1084 "ISO C%d compilers are required to support",
1085 nchars - 1, nchars_max, relevant_std);
1088 /* Create the array type for the string constant. The ISO C++
1089 standard says that a string literal has type `const char[N]' or
1090 `const wchar_t[N]'. We use the same logic when invoked as a C
1091 front-end with -Wwrite-strings.
1092 ??? We should change the type of an expression depending on the
1093 state of a warning flag. We should just be warning -- see how
1094 this is handled in the C++ front-end for the deprecated implicit
1095 conversion from string literals to `char*' or `wchar_t*'.
1097 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
1098 array type being the unqualified version of that type.
1099 Therefore, if we are constructing an array of const char, we must
1100 construct the matching unqualified array type first. The C front
1101 end does not require this, but it does no harm, so we do it
1103 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
1104 a_type = build_array_type (e_type, i_type);
1105 if (c_dialect_cxx() || warn_write_strings)
1106 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
1108 TREE_TYPE (value) = a_type;
1109 TREE_CONSTANT (value) = 1;
1110 TREE_READONLY (value) = 1;
1111 TREE_STATIC (value) = 1;
1115 /* Fully fold EXPR, an expression that was not folded (beyond integer
1116 constant expressions and null pointer constants) when being built
1117 up. If IN_INIT, this is in a static initializer and certain
1118 changes are made to the folding done. Clear *MAYBE_CONST if
1119 MAYBE_CONST is not NULL and EXPR is definitely not a constant
1120 expression because it contains an evaluated operator (in C99) or an
1121 operator outside of sizeof returning an integer constant (in C90)
1122 not permitted in constant expressions, or because it contains an
1123 evaluated arithmetic overflow. (*MAYBE_CONST should typically be
1124 set to true by callers before calling this function.) Return the
1125 folded expression. Function arguments have already been folded
1126 before calling this function, as have the contents of SAVE_EXPR,
1127 TARGET_EXPR, BIND_EXPR, VA_ARG_EXPR, OBJ_TYPE_REF and
1128 C_MAYBE_CONST_EXPR. */
1131 c_fully_fold (tree expr, bool in_init, bool *maybe_const)
1135 bool maybe_const_itself = true;
1137 /* This function is not relevant to C++ because C++ folds while
1138 parsing, and may need changes to be correct for C++ when C++
1139 stops folding while parsing. */
1140 if (c_dialect_cxx ())
1144 maybe_const = &dummy;
1145 ret = c_fully_fold_internal (expr, in_init, maybe_const,
1146 &maybe_const_itself);
1147 *maybe_const &= maybe_const_itself;
1151 /* Internal helper for c_fully_fold. EXPR and IN_INIT are as for
1152 c_fully_fold. *MAYBE_CONST_OPERANDS is cleared because of operands
1153 not permitted, while *MAYBE_CONST_ITSELF is cleared because of
1154 arithmetic overflow (for C90, *MAYBE_CONST_OPERANDS is carried from
1155 both evaluated and unevaluated subexpressions while
1156 *MAYBE_CONST_ITSELF is carried from only evaluated
1160 c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands,
1161 bool *maybe_const_itself)
1164 enum tree_code code = TREE_CODE (expr);
1165 enum tree_code_class kind = TREE_CODE_CLASS (code);
1166 location_t loc = EXPR_LOCATION (expr);
1167 tree op0, op1, op2, op3;
1168 tree orig_op0, orig_op1, orig_op2;
1169 bool op0_const = true, op1_const = true, op2_const = true;
1170 bool op0_const_self = true, op1_const_self = true, op2_const_self = true;
1171 bool nowarning = TREE_NO_WARNING (expr);
1173 /* This function is not relevant to C++ because C++ folds while
1174 parsing, and may need changes to be correct for C++ when C++
1175 stops folding while parsing. */
1176 if (c_dialect_cxx ())
1179 /* Constants, declarations, statements, errors, SAVE_EXPRs and
1180 anything else not counted as an expression cannot usefully be
1181 folded further at this point. */
1182 if (!IS_EXPR_CODE_CLASS (kind)
1183 || kind == tcc_statement
1184 || code == SAVE_EXPR)
1187 /* Operands of variable-length expressions (function calls) have
1188 already been folded, as have __builtin_* function calls, and such
1189 expressions cannot occur in constant expressions. */
1190 if (kind == tcc_vl_exp)
1192 *maybe_const_operands = false;
1197 if (code == C_MAYBE_CONST_EXPR)
1199 tree pre = C_MAYBE_CONST_EXPR_PRE (expr);
1200 tree inner = C_MAYBE_CONST_EXPR_EXPR (expr);
1201 if (C_MAYBE_CONST_EXPR_NON_CONST (expr))
1202 *maybe_const_operands = false;
1203 if (C_MAYBE_CONST_EXPR_INT_OPERANDS (expr))
1204 *maybe_const_itself = false;
1205 if (pre && !in_init)
1206 ret = build2 (COMPOUND_EXPR, TREE_TYPE (expr), pre, inner);
1212 /* Assignment, increment, decrement, function call and comma
1213 operators, and statement expressions, cannot occur in constant
1214 expressions if evaluated / outside of sizeof. (Function calls
1215 were handled above, though VA_ARG_EXPR is treated like a function
1216 call here, and statement expressions are handled through
1217 C_MAYBE_CONST_EXPR to avoid folding inside them.) */
1221 case PREDECREMENT_EXPR:
1222 case PREINCREMENT_EXPR:
1223 case POSTDECREMENT_EXPR:
1224 case POSTINCREMENT_EXPR:
1226 *maybe_const_operands = false;
1233 *maybe_const_operands = false;
1241 /* Fold individual tree codes as appropriate. */
1244 case COMPOUND_LITERAL_EXPR:
1245 /* Any non-constancy will have been marked in a containing
1246 C_MAYBE_CONST_EXPR; there is no more folding to do here. */
1250 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1251 op1 = TREE_OPERAND (expr, 1);
1252 op2 = TREE_OPERAND (expr, 2);
1253 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1254 maybe_const_itself);
1255 if (op0 != orig_op0)
1256 ret = build3 (COMPONENT_REF, TREE_TYPE (expr), op0, op1, op2);
1259 TREE_READONLY (ret) = TREE_READONLY (expr);
1260 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1265 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1266 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1267 op2 = TREE_OPERAND (expr, 2);
1268 op3 = TREE_OPERAND (expr, 3);
1269 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1270 maybe_const_itself);
1271 op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1272 maybe_const_itself);
1273 op1 = decl_constant_value_for_optimization (op1);
1274 if (op0 != orig_op0 || op1 != orig_op1)
1275 ret = build4 (ARRAY_REF, TREE_TYPE (expr), op0, op1, op2, op3);
1278 TREE_READONLY (ret) = TREE_READONLY (expr);
1279 TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1280 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1287 case PREDECREMENT_EXPR:
1288 case PREINCREMENT_EXPR:
1289 case POSTDECREMENT_EXPR:
1290 case POSTINCREMENT_EXPR:
1294 case POINTER_PLUS_EXPR:
1295 case TRUNC_DIV_EXPR:
1297 case FLOOR_DIV_EXPR:
1298 case TRUNC_MOD_EXPR:
1300 case EXACT_DIV_EXPR:
1313 case TRUTH_AND_EXPR:
1315 case TRUTH_XOR_EXPR:
1316 case UNORDERED_EXPR:
1323 /* Binary operations evaluating both arguments (increment and
1324 decrement are binary internally in GCC). */
1325 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1326 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1327 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1328 maybe_const_itself);
1329 if (code != MODIFY_EXPR
1330 && code != PREDECREMENT_EXPR
1331 && code != PREINCREMENT_EXPR
1332 && code != POSTDECREMENT_EXPR
1333 && code != POSTINCREMENT_EXPR)
1334 op0 = decl_constant_value_for_optimization (op0);
1335 /* The RHS of a MODIFY_EXPR was fully folded when building that
1336 expression for the sake of conversion warnings. */
1337 if (code != MODIFY_EXPR)
1338 op1 = c_fully_fold_internal (op1, in_init, maybe_const_operands,
1339 maybe_const_itself);
1340 op1 = decl_constant_value_for_optimization (op1);
1341 if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1343 ? fold_build2_initializer (code, TREE_TYPE (expr), op0, op1)
1344 : fold_build2 (code, TREE_TYPE (expr), op0, op1);
1350 case FIX_TRUNC_EXPR:
1353 case NON_LVALUE_EXPR:
1356 case TRUTH_NOT_EXPR:
1361 /* Unary operations. */
1362 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1363 op0 = c_fully_fold_internal (op0, in_init, maybe_const_operands,
1364 maybe_const_itself);
1365 if (code != ADDR_EXPR && code != REALPART_EXPR && code != IMAGPART_EXPR)
1366 op0 = decl_constant_value_for_optimization (op0);
1367 if (op0 != orig_op0 || in_init)
1369 ? fold_build1_initializer (code, TREE_TYPE (expr), op0)
1370 : fold_build1 (code, TREE_TYPE (expr), op0);
1373 if (code == INDIRECT_REF
1375 && TREE_CODE (ret) == INDIRECT_REF)
1377 TREE_READONLY (ret) = TREE_READONLY (expr);
1378 TREE_SIDE_EFFECTS (ret) = TREE_SIDE_EFFECTS (expr);
1379 TREE_THIS_VOLATILE (ret) = TREE_THIS_VOLATILE (expr);
1383 case TRUTH_ANDIF_EXPR:
1384 case TRUTH_ORIF_EXPR:
1385 /* Binary operations not necessarily evaluating both
1387 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1388 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1389 op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1390 op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1391 if (op0 != orig_op0 || op1 != orig_op1 || in_init)
1393 ? fold_build2_initializer (code, TREE_TYPE (expr), op0, op1)
1394 : fold_build2 (code, TREE_TYPE (expr), op0, op1);
1397 *maybe_const_operands &= op0_const;
1398 *maybe_const_itself &= op0_const_self;
1402 && (code == TRUTH_ANDIF_EXPR
1403 ? op0 == truthvalue_false_node
1404 : op0 == truthvalue_true_node)))
1405 *maybe_const_operands &= op1_const;
1408 && (code == TRUTH_ANDIF_EXPR
1409 ? op0 == truthvalue_false_node
1410 : op0 == truthvalue_true_node)))
1411 *maybe_const_itself &= op1_const_self;
1415 orig_op0 = op0 = TREE_OPERAND (expr, 0);
1416 orig_op1 = op1 = TREE_OPERAND (expr, 1);
1417 orig_op2 = op2 = TREE_OPERAND (expr, 2);
1418 op0 = c_fully_fold_internal (op0, in_init, &op0_const, &op0_const_self);
1419 op1 = c_fully_fold_internal (op1, in_init, &op1_const, &op1_const_self);
1420 op2 = c_fully_fold_internal (op2, in_init, &op2_const, &op2_const_self);
1421 if (op0 != orig_op0 || op1 != orig_op1 || op2 != orig_op2)
1422 ret = fold_build3 (code, TREE_TYPE (expr), op0, op1, op2);
1425 *maybe_const_operands &= op0_const;
1426 *maybe_const_itself &= op0_const_self;
1430 && op0 == truthvalue_false_node))
1431 *maybe_const_operands &= op1_const;
1434 && op0 == truthvalue_false_node))
1435 *maybe_const_itself &= op1_const_self;
1439 && op0 == truthvalue_true_node))
1440 *maybe_const_operands &= op2_const;
1443 && op0 == truthvalue_true_node))
1444 *maybe_const_itself &= op2_const_self;
1448 /* Various codes may appear through folding built-in functions
1449 and their arguments. */
1454 /* Some folding may introduce NON_LVALUE_EXPRs; all lvalue checks
1455 have been done by this point, so remove them again. */
1456 nowarning |= TREE_NO_WARNING (ret);
1457 STRIP_TYPE_NOPS (ret);
1458 if (nowarning && !TREE_NO_WARNING (ret))
1460 if (!CAN_HAVE_LOCATION_P (ret))
1461 ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
1462 TREE_NO_WARNING (ret) = 1;
1465 protected_set_expr_location (ret, loc);
1469 /* If not optimizing, EXP is not a VAR_DECL, or EXP has array type,
1470 return EXP. Otherwise, return either EXP or its known constant
1471 value (if it has one), but return EXP if EXP has mode BLKmode. ???
1472 Is the BLKmode test appropriate? */
1475 decl_constant_value_for_optimization (tree exp)
1479 /* This function is only used by C, for c_fully_fold and other
1480 optimization, and may not be correct for C++. */
1481 if (c_dialect_cxx ())
1485 || TREE_CODE (exp) != VAR_DECL
1486 || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1487 || DECL_MODE (exp) == BLKmode)
1490 ret = decl_constant_value (exp);
1491 /* Avoid unwanted tree sharing between the initializer and current
1492 function's body where the tree can be modified e.g. by the
1494 if (ret != exp && TREE_STATIC (exp))
1495 ret = unshare_expr (ret);
1499 /* Print a warning if a constant expression had overflow in folding.
1500 Invoke this function on every expression that the language
1501 requires to be a constant expression.
1502 Note the ANSI C standard says it is erroneous for a
1503 constant expression to overflow. */
1506 constant_expression_warning (tree value)
1508 if (warn_overflow && pedantic
1509 && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1510 || TREE_CODE (value) == FIXED_CST
1511 || TREE_CODE (value) == VECTOR_CST
1512 || TREE_CODE (value) == COMPLEX_CST)
1513 && TREE_OVERFLOW (value))
1514 pedwarn (input_location, OPT_Woverflow, "overflow in constant expression");
1517 /* The same as above but print an unconditional error. */
1519 constant_expression_error (tree value)
1521 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1522 || TREE_CODE (value) == FIXED_CST
1523 || TREE_CODE (value) == VECTOR_CST
1524 || TREE_CODE (value) == COMPLEX_CST)
1525 && TREE_OVERFLOW (value))
1526 error ("overflow in constant expression");
1529 /* Print a warning if an expression had overflow in folding and its
1532 Invoke this function on every expression that
1533 (1) appears in the source code, and
1534 (2) is a constant expression that overflowed, and
1535 (3) is not already checked by convert_and_check;
1536 however, do not invoke this function on operands of explicit casts
1537 or when the expression is the result of an operator and any operand
1538 already overflowed. */
1541 overflow_warning (tree value)
1543 if (skip_evaluation) return;
1545 switch (TREE_CODE (value))
1548 warning (OPT_Woverflow, "integer overflow in expression");
1552 warning (OPT_Woverflow, "floating point overflow in expression");
1556 warning (OPT_Woverflow, "fixed-point overflow in expression");
1560 warning (OPT_Woverflow, "vector overflow in expression");
1564 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
1565 warning (OPT_Woverflow, "complex integer overflow in expression");
1566 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
1567 warning (OPT_Woverflow, "complex floating point overflow in expression");
1576 /* Warn about use of a logical || / && operator being used in a
1577 context where it is likely that the bitwise equivalent was intended
1578 by the programmer. CODE is the TREE_CODE of the operator, ARG1
1579 and ARG2 the arguments. */
1582 warn_logical_operator (enum tree_code code, tree arg1, tree
1587 case TRUTH_ANDIF_EXPR:
1588 case TRUTH_ORIF_EXPR:
1590 case TRUTH_AND_EXPR:
1591 if (!TREE_NO_WARNING (arg1)
1592 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
1593 && !CONSTANT_CLASS_P (arg1)
1594 && TREE_CODE (arg2) == INTEGER_CST
1595 && !integer_zerop (arg2))
1597 warning (OPT_Wlogical_op,
1598 "logical %<%s%> with non-zero constant "
1599 "will always evaluate as true",
1600 ((code == TRUTH_ANDIF_EXPR)
1601 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1602 TREE_NO_WARNING (arg1) = true;
1611 /* Print a warning about casts that might indicate violation
1612 of strict aliasing rules if -Wstrict-aliasing is used and
1613 strict aliasing mode is in effect. OTYPE is the original
1614 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1617 strict_aliasing_warning (tree otype, tree type, tree expr)
1619 if (!(flag_strict_aliasing
1620 && POINTER_TYPE_P (type)
1621 && POINTER_TYPE_P (otype)
1622 && !VOID_TYPE_P (TREE_TYPE (type)))
1623 /* If the type we are casting to is a ref-all pointer
1624 dereferencing it is always valid. */
1625 || TYPE_REF_CAN_ALIAS_ALL (type))
1628 if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1629 && (DECL_P (TREE_OPERAND (expr, 0))
1630 || handled_component_p (TREE_OPERAND (expr, 0))))
1632 /* Casting the address of an object to non void pointer. Warn
1633 if the cast breaks type based aliasing. */
1634 if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1636 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1637 "might break strict-aliasing rules");
1642 /* warn_strict_aliasing >= 3. This includes the default (3).
1643 Only warn if the cast is dereferenced immediately. */
1644 alias_set_type set1 =
1645 get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1646 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1648 if (set1 != set2 && set2 != 0
1649 && (set1 == 0 || !alias_sets_conflict_p (set1, set2)))
1651 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1652 "pointer will break strict-aliasing rules");
1655 else if (warn_strict_aliasing == 2
1656 && !alias_sets_must_conflict_p (set1, set2))
1658 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1659 "pointer might break strict-aliasing rules");
1665 if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1667 /* At this level, warn for any conversions, even if an address is
1668 not taken in the same statement. This will likely produce many
1669 false positives, but could be useful to pinpoint problems that
1670 are not revealed at higher levels. */
1671 alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1672 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1673 if (!COMPLETE_TYPE_P (type)
1674 || !alias_sets_must_conflict_p (set1, set2))
1676 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1677 "pointer might break strict-aliasing rules");
1685 /* Warn for unlikely, improbable, or stupid DECL declarations
1689 check_main_parameter_types (tree decl)
1694 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1695 args = TREE_CHAIN (args))
1697 tree type = args ? TREE_VALUE (args) : 0;
1699 if (type == void_type_node || type == error_mark_node )
1706 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1707 pedwarn (input_location, OPT_Wmain, "first argument of %q+D should be %<int%>",
1712 if (TREE_CODE (type) != POINTER_TYPE
1713 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1714 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1716 pedwarn (input_location, OPT_Wmain, "second argument of %q+D should be %<char **%>",
1721 if (TREE_CODE (type) != POINTER_TYPE
1722 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1723 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1725 pedwarn (input_location, OPT_Wmain, "third argument of %q+D should probably be "
1726 "%<char **%>", decl);
1731 /* It is intentional that this message does not mention the third
1732 argument because it's only mentioned in an appendix of the
1734 if (argct > 0 && (argct < 2 || argct > 3))
1735 pedwarn (input_location, OPT_Wmain, "%q+D takes only zero or two arguments", decl);
1738 /* True if pointers to distinct types T1 and T2 can be converted to
1739 each other without an explicit cast. Only returns true for opaque
1742 vector_targets_convertible_p (const_tree t1, const_tree t2)
1744 if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
1745 && (targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1746 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1752 /* True if vector types T1 and T2 can be converted to each other
1753 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1754 can only be converted with -flax-vector-conversions yet that is not
1755 in effect, emit a note telling the user about that option if such
1756 a note has not previously been emitted. */
1758 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1760 static bool emitted_lax_note = false;
1761 bool convertible_lax;
1763 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1764 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1768 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1769 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1770 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1771 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1772 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1774 if (!convertible_lax || flag_lax_vector_conversions)
1775 return convertible_lax;
1777 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1778 && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1781 if (emit_lax_note && !emitted_lax_note)
1783 emitted_lax_note = true;
1784 inform (input_location, "use -flax-vector-conversions to permit "
1785 "conversions between vectors with differing "
1786 "element types or numbers of subparts");
1792 /* This is a helper function of build_binary_op.
1794 For certain operations if both args were extended from the same
1795 smaller type, do the arithmetic in that type and then extend.
1797 BITWISE indicates a bitwise operation.
1798 For them, this optimization is safe only if
1799 both args are zero-extended or both are sign-extended.
1800 Otherwise, we might change the result.
1801 Eg, (short)-1 | (unsigned short)-1 is (int)-1
1802 but calculated in (unsigned short) it would be (unsigned short)-1.
1804 tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise)
1806 int unsigned0, unsigned1;
1811 /* Cast OP0 and OP1 to RESULT_TYPE. Doing so prevents
1812 excessive narrowing when we call get_narrower below. For
1813 example, suppose that OP0 is of unsigned int extended
1814 from signed char and that RESULT_TYPE is long long int.
1815 If we explicitly cast OP0 to RESULT_TYPE, OP0 would look
1818 (long long int) (unsigned int) signed_char
1820 which get_narrower would narrow down to
1822 (unsigned int) signed char
1824 If we do not cast OP0 first, get_narrower would return
1825 signed_char, which is inconsistent with the case of the
1827 op0 = convert (result_type, op0);
1828 op1 = convert (result_type, op1);
1830 arg0 = get_narrower (op0, &unsigned0);
1831 arg1 = get_narrower (op1, &unsigned1);
1833 /* UNS is 1 if the operation to be done is an unsigned one. */
1834 uns = TYPE_UNSIGNED (result_type);
1836 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
1837 but it *requires* conversion to FINAL_TYPE. */
1839 if ((TYPE_PRECISION (TREE_TYPE (op0))
1840 == TYPE_PRECISION (TREE_TYPE (arg0)))
1841 && TREE_TYPE (op0) != result_type)
1842 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
1843 if ((TYPE_PRECISION (TREE_TYPE (op1))
1844 == TYPE_PRECISION (TREE_TYPE (arg1)))
1845 && TREE_TYPE (op1) != result_type)
1846 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
1848 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
1850 /* For bitwise operations, signedness of nominal type
1851 does not matter. Consider only how operands were extended. */
1855 /* Note that in all three cases below we refrain from optimizing
1856 an unsigned operation on sign-extended args.
1857 That would not be valid. */
1859 /* Both args variable: if both extended in same way
1860 from same width, do it in that width.
1861 Do it unsigned if args were zero-extended. */
1862 if ((TYPE_PRECISION (TREE_TYPE (arg0))
1863 < TYPE_PRECISION (result_type))
1864 && (TYPE_PRECISION (TREE_TYPE (arg1))
1865 == TYPE_PRECISION (TREE_TYPE (arg0)))
1866 && unsigned0 == unsigned1
1867 && (unsigned0 || !uns))
1868 return c_common_signed_or_unsigned_type
1869 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
1871 else if (TREE_CODE (arg0) == INTEGER_CST
1872 && (unsigned1 || !uns)
1873 && (TYPE_PRECISION (TREE_TYPE (arg1))
1874 < TYPE_PRECISION (result_type))
1876 = c_common_signed_or_unsigned_type (unsigned1,
1878 && !POINTER_TYPE_P (type)
1879 && int_fits_type_p (arg0, type))
1882 else if (TREE_CODE (arg1) == INTEGER_CST
1883 && (unsigned0 || !uns)
1884 && (TYPE_PRECISION (TREE_TYPE (arg0))
1885 < TYPE_PRECISION (result_type))
1887 = c_common_signed_or_unsigned_type (unsigned0,
1889 && !POINTER_TYPE_P (type)
1890 && int_fits_type_p (arg1, type))
1896 /* Warns if the conversion of EXPR to TYPE may alter a value.
1897 This is a helper function for warnings_for_convert_and_check. */
1900 conversion_warning (tree type, tree expr)
1902 bool give_warning = false;
1905 const int expr_num_operands = TREE_OPERAND_LENGTH (expr);
1906 tree expr_type = TREE_TYPE (expr);
1908 if (!warn_conversion && !warn_sign_conversion)
1911 /* If any operand is artificial, then this expression was generated
1912 by the compiler and we do not warn. */
1913 for (i = 0; i < expr_num_operands; i++)
1915 tree op = TREE_OPERAND (expr, i);
1916 if (op && DECL_P (op) && DECL_ARTIFICIAL (op))
1920 switch (TREE_CODE (expr))
1928 case TRUTH_ANDIF_EXPR:
1929 case TRUTH_ORIF_EXPR:
1930 case TRUTH_AND_EXPR:
1932 case TRUTH_XOR_EXPR:
1933 case TRUTH_NOT_EXPR:
1934 /* Conversion from boolean to a signed:1 bit-field (which only
1935 can hold the values 0 and -1) doesn't lose information - but
1936 it does change the value. */
1937 if (TYPE_PRECISION (type) == 1 && !TYPE_UNSIGNED (type))
1938 warning (OPT_Wconversion,
1939 "conversion to %qT from boolean expression", type);
1945 /* Warn for real constant that is not an exact integer converted
1947 if (TREE_CODE (expr_type) == REAL_TYPE
1948 && TREE_CODE (type) == INTEGER_TYPE)
1950 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (expr_type)))
1951 give_warning = true;
1953 /* Warn for an integer constant that does not fit into integer type. */
1954 else if (TREE_CODE (expr_type) == INTEGER_TYPE
1955 && TREE_CODE (type) == INTEGER_TYPE
1956 && !int_fits_type_p (expr, type))
1958 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)
1959 && tree_int_cst_sgn (expr) < 0)
1960 warning (OPT_Wsign_conversion,
1961 "negative integer implicitly converted to unsigned type");
1962 else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (expr_type))
1963 warning (OPT_Wsign_conversion, "conversion of unsigned constant "
1964 "value to negative integer");
1966 give_warning = true;
1968 else if (TREE_CODE (type) == REAL_TYPE)
1970 /* Warn for an integer constant that does not fit into real type. */
1971 if (TREE_CODE (expr_type) == INTEGER_TYPE)
1973 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1974 if (!exact_real_truncate (TYPE_MODE (type), &a))
1975 give_warning = true;
1977 /* Warn for a real constant that does not fit into a smaller
1979 else if (TREE_CODE (expr_type) == REAL_TYPE
1980 && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
1982 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1983 if (!exact_real_truncate (TYPE_MODE (type), &a))
1984 give_warning = true;
1989 warning (OPT_Wconversion,
1990 "conversion to %qT alters %qT constant value",
1997 /* In case of COND_EXPR, if both operands are constants or
1998 COND_EXPR, then we do not care about the type of COND_EXPR,
1999 only about the conversion of each operand. */
2000 tree op1 = TREE_OPERAND (expr, 1);
2001 tree op2 = TREE_OPERAND (expr, 2);
2003 if ((TREE_CODE (op1) == REAL_CST || TREE_CODE (op1) == INTEGER_CST
2004 || TREE_CODE (op1) == COND_EXPR)
2005 && (TREE_CODE (op2) == REAL_CST || TREE_CODE (op2) == INTEGER_CST
2006 || TREE_CODE (op2) == COND_EXPR))
2008 conversion_warning (type, op1);
2009 conversion_warning (type, op2);
2015 default: /* 'expr' is not a constant. */
2017 /* Warn for real types converted to integer types. */
2018 if (TREE_CODE (expr_type) == REAL_TYPE
2019 && TREE_CODE (type) == INTEGER_TYPE)
2020 give_warning = true;
2022 else if (TREE_CODE (expr_type) == INTEGER_TYPE
2023 && TREE_CODE (type) == INTEGER_TYPE)
2025 /* Don't warn about unsigned char y = 0xff, x = (int) y; */
2026 expr = get_unwidened (expr, 0);
2027 expr_type = TREE_TYPE (expr);
2029 /* Don't warn for short y; short x = ((int)y & 0xff); */
2030 if (TREE_CODE (expr) == BIT_AND_EXPR
2031 || TREE_CODE (expr) == BIT_IOR_EXPR
2032 || TREE_CODE (expr) == BIT_XOR_EXPR)
2034 /* If both args were extended from a shortest type,
2035 use that type if that is safe. */
2036 expr_type = shorten_binary_op (expr_type,
2037 TREE_OPERAND (expr, 0),
2038 TREE_OPERAND (expr, 1),
2041 if (TREE_CODE (expr) == BIT_AND_EXPR)
2043 tree op0 = TREE_OPERAND (expr, 0);
2044 tree op1 = TREE_OPERAND (expr, 1);
2045 bool unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2046 bool unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2048 /* If one of the operands is a non-negative constant
2049 that fits in the target type, then the type of the
2050 other operand does not matter. */
2051 if ((TREE_CODE (op0) == INTEGER_CST
2052 && int_fits_type_p (op0, c_common_signed_type (type))
2053 && int_fits_type_p (op0, c_common_unsigned_type (type)))
2054 || (TREE_CODE (op1) == INTEGER_CST
2055 && int_fits_type_p (op1, c_common_signed_type (type))
2056 && int_fits_type_p (op1,
2057 c_common_unsigned_type (type))))
2059 /* If constant is unsigned and fits in the target
2060 type, then the result will also fit. */
2061 else if ((TREE_CODE (op0) == INTEGER_CST
2063 && int_fits_type_p (op0, type))
2064 || (TREE_CODE (op1) == INTEGER_CST
2066 && int_fits_type_p (op1, type)))
2070 /* Warn for integer types converted to smaller integer types. */
2071 if (TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2072 give_warning = true;
2074 /* When they are the same width but different signedness,
2075 then the value may change. */
2076 else if ((TYPE_PRECISION (type) == TYPE_PRECISION (expr_type)
2077 && TYPE_UNSIGNED (expr_type) != TYPE_UNSIGNED (type))
2078 /* Even when converted to a bigger type, if the type is
2079 unsigned but expr is signed, then negative values
2081 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (expr_type)))
2082 warning (OPT_Wsign_conversion, "conversion to %qT from %qT "
2083 "may change the sign of the result",
2087 /* Warn for integer types converted to real types if and only if
2088 all the range of values of the integer type cannot be
2089 represented by the real type. */
2090 else if (TREE_CODE (expr_type) == INTEGER_TYPE
2091 && TREE_CODE (type) == REAL_TYPE)
2093 tree type_low_bound = TYPE_MIN_VALUE (expr_type);
2094 tree type_high_bound = TYPE_MAX_VALUE (expr_type);
2095 REAL_VALUE_TYPE real_low_bound
2096 = real_value_from_int_cst (0, type_low_bound);
2097 REAL_VALUE_TYPE real_high_bound
2098 = real_value_from_int_cst (0, type_high_bound);
2100 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
2101 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
2102 give_warning = true;
2105 /* Warn for real types converted to smaller real types. */
2106 else if (TREE_CODE (expr_type) == REAL_TYPE
2107 && TREE_CODE (type) == REAL_TYPE
2108 && TYPE_PRECISION (type) < TYPE_PRECISION (expr_type))
2109 give_warning = true;
2113 warning (OPT_Wconversion,
2114 "conversion to %qT from %qT may alter its value",
2119 /* Produce warnings after a conversion. RESULT is the result of
2120 converting EXPR to TYPE. This is a helper function for
2121 convert_and_check and cp_convert_and_check. */
2124 warnings_for_convert_and_check (tree type, tree expr, tree result)
2126 if (TREE_CODE (expr) == INTEGER_CST
2127 && (TREE_CODE (type) == INTEGER_TYPE
2128 || TREE_CODE (type) == ENUMERAL_TYPE)
2129 && !int_fits_type_p (expr, type))
2131 /* Do not diagnose overflow in a constant expression merely
2132 because a conversion overflowed. */
2133 if (TREE_OVERFLOW (result))
2134 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
2136 if (TYPE_UNSIGNED (type))
2138 /* This detects cases like converting -129 or 256 to
2140 if (!int_fits_type_p (expr, c_common_signed_type (type)))
2141 warning (OPT_Woverflow,
2142 "large integer implicitly truncated to unsigned type");
2144 conversion_warning (type, expr);
2146 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
2147 warning (OPT_Woverflow,
2148 "overflow in implicit constant conversion");
2149 /* No warning for converting 0x80000000 to int. */
2151 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
2152 || TYPE_PRECISION (TREE_TYPE (expr))
2153 != TYPE_PRECISION (type)))
2154 warning (OPT_Woverflow,
2155 "overflow in implicit constant conversion");
2158 conversion_warning (type, expr);
2160 else if ((TREE_CODE (result) == INTEGER_CST
2161 || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
2162 warning (OPT_Woverflow,
2163 "overflow in implicit constant conversion");
2165 conversion_warning (type, expr);
2169 /* Convert EXPR to TYPE, warning about conversion problems with constants.
2170 Invoke this function on every expression that is converted implicitly,
2171 i.e. because of language rules and not because of an explicit cast. */
2174 convert_and_check (tree type, tree expr)
2178 if (TREE_TYPE (expr) == type)
2181 result = convert (type, expr);
2183 if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
2184 warnings_for_convert_and_check (type, expr, result);
2189 /* A node in a list that describes references to variables (EXPR), which are
2190 either read accesses if WRITER is zero, or write accesses, in which case
2191 WRITER is the parent of EXPR. */
2198 /* Used to implement a cache the results of a call to verify_tree. We only
2199 use this for SAVE_EXPRs. */
2202 struct tlist_cache *next;
2203 struct tlist *cache_before_sp;
2204 struct tlist *cache_after_sp;
2208 /* Obstack to use when allocating tlist structures, and corresponding
2210 static struct obstack tlist_obstack;
2211 static char *tlist_firstobj = 0;
2213 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
2215 static struct tlist *warned_ids;
2216 /* SAVE_EXPRs need special treatment. We process them only once and then
2217 cache the results. */
2218 static struct tlist_cache *save_expr_cache;
2220 static void add_tlist (struct tlist **, struct tlist *, tree, int);
2221 static void merge_tlist (struct tlist **, struct tlist *, int);
2222 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
2223 static int warning_candidate_p (tree);
2224 static void warn_for_collisions (struct tlist *);
2225 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
2226 static struct tlist *new_tlist (struct tlist *, tree, tree);
2228 /* Create a new struct tlist and fill in its fields. */
2229 static struct tlist *
2230 new_tlist (struct tlist *next, tree t, tree writer)
2233 l = XOBNEW (&tlist_obstack, struct tlist);
2240 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
2241 is nonnull, we ignore any node we find which has a writer equal to it. */
2244 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
2248 struct tlist *next = add->next;
2251 if (!exclude_writer || add->writer != exclude_writer)
2252 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
2257 /* Merge the nodes of ADD into TO. This merging process is done so that for
2258 each variable that already exists in TO, no new node is added; however if
2259 there is a write access recorded in ADD, and an occurrence on TO is only
2260 a read access, then the occurrence in TO will be modified to record the
2264 merge_tlist (struct tlist **to, struct tlist *add, int copy)
2266 struct tlist **end = to;
2269 end = &(*end)->next;
2275 struct tlist *next = add->next;
2277 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
2278 if (tmp2->expr == add->expr)
2282 tmp2->writer = add->writer;
2286 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
2287 end = &(*end)->next;
2294 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
2295 references in list LIST conflict with it, excluding reads if ONLY writers
2299 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
2304 /* Avoid duplicate warnings. */
2305 for (tmp = warned_ids; tmp; tmp = tmp->next)
2306 if (tmp->expr == written)
2311 if (list->expr == written
2312 && list->writer != writer
2313 && (!only_writes || list->writer)
2314 && DECL_NAME (list->expr))
2316 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
2317 warning_at (EXPR_HAS_LOCATION (writer)
2318 ? EXPR_LOCATION (writer) : input_location,
2319 OPT_Wsequence_point, "operation on %qE may be undefined",
2326 /* Given a list LIST of references to variables, find whether any of these
2327 can cause conflicts due to missing sequence points. */
2330 warn_for_collisions (struct tlist *list)
2334 for (tmp = list; tmp; tmp = tmp->next)
2337 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
2341 /* Return nonzero if X is a tree that can be verified by the sequence point
2344 warning_candidate_p (tree x)
2346 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
2349 /* Walk the tree X, and record accesses to variables. If X is written by the
2350 parent tree, WRITER is the parent.
2351 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
2352 expression or its only operand forces a sequence point, then everything up
2353 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
2355 Once we return, we will have emitted warnings if any subexpression before
2356 such a sequence point could be undefined. On a higher level, however, the
2357 sequence point may not be relevant, and we'll merge the two lists.
2359 Example: (b++, a) + b;
2360 The call that processes the COMPOUND_EXPR will store the increment of B
2361 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
2362 processes the PLUS_EXPR will need to merge the two lists so that
2363 eventually, all accesses end up on the same list (and we'll warn about the
2364 unordered subexpressions b++ and b.
2366 A note on merging. If we modify the former example so that our expression
2369 care must be taken not simply to add all three expressions into the final
2370 PNO_SP list. The function merge_tlist takes care of that by merging the
2371 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
2372 way, so that no more than one access to B is recorded. */
2375 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
2378 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
2379 enum tree_code code;
2380 enum tree_code_class cl;
2382 /* X may be NULL if it is the operand of an empty statement expression
2388 code = TREE_CODE (x);
2389 cl = TREE_CODE_CLASS (code);
2391 if (warning_candidate_p (x))
2393 *pno_sp = new_tlist (*pno_sp, x, writer);
2403 case TRUTH_ANDIF_EXPR:
2404 case TRUTH_ORIF_EXPR:
2405 tmp_before = tmp_nosp = tmp_list3 = 0;
2406 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2407 warn_for_collisions (tmp_nosp);
2408 merge_tlist (pbefore_sp, tmp_before, 0);
2409 merge_tlist (pbefore_sp, tmp_nosp, 0);
2410 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
2411 merge_tlist (pbefore_sp, tmp_list3, 0);
2415 tmp_before = tmp_list2 = 0;
2416 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
2417 warn_for_collisions (tmp_list2);
2418 merge_tlist (pbefore_sp, tmp_before, 0);
2419 merge_tlist (pbefore_sp, tmp_list2, 1);
2421 tmp_list3 = tmp_nosp = 0;
2422 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
2423 warn_for_collisions (tmp_nosp);
2424 merge_tlist (pbefore_sp, tmp_list3, 0);
2426 tmp_list3 = tmp_list2 = 0;
2427 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
2428 warn_for_collisions (tmp_list2);
2429 merge_tlist (pbefore_sp, tmp_list3, 0);
2430 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
2431 two first, to avoid warning for (a ? b++ : b++). */
2432 merge_tlist (&tmp_nosp, tmp_list2, 0);
2433 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2436 case PREDECREMENT_EXPR:
2437 case PREINCREMENT_EXPR:
2438 case POSTDECREMENT_EXPR:
2439 case POSTINCREMENT_EXPR:
2440 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
2444 tmp_before = tmp_nosp = tmp_list3 = 0;
2445 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
2446 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
2447 /* Expressions inside the LHS are not ordered wrt. the sequence points
2448 in the RHS. Example:
2450 Despite the fact that the modification of "a" is in the before_sp
2451 list (tmp_before), it conflicts with the use of "a" in the LHS.
2452 We can handle this by adding the contents of tmp_list3
2453 to those of tmp_before, and redoing the collision warnings for that
2455 add_tlist (&tmp_before, tmp_list3, x, 1);
2456 warn_for_collisions (tmp_before);
2457 /* Exclude the LHS itself here; we first have to merge it into the
2458 tmp_nosp list. This is done to avoid warning for "a = a"; if we
2459 didn't exclude the LHS, we'd get it twice, once as a read and once
2461 add_tlist (pno_sp, tmp_list3, x, 0);
2462 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
2464 merge_tlist (pbefore_sp, tmp_before, 0);
2465 if (warning_candidate_p (TREE_OPERAND (x, 0)))
2466 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
2467 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
2471 /* We need to warn about conflicts among arguments and conflicts between
2472 args and the function address. Side effects of the function address,
2473 however, are not ordered by the sequence point of the call. */
2475 call_expr_arg_iterator iter;
2477 tmp_before = tmp_nosp = 0;
2478 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
2479 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
2481 tmp_list2 = tmp_list3 = 0;
2482 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
2483 merge_tlist (&tmp_list3, tmp_list2, 0);
2484 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
2486 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
2487 warn_for_collisions (tmp_before);
2488 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
2493 /* Scan all the list, e.g. indices of multi dimensional array. */
2496 tmp_before = tmp_nosp = 0;
2497 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
2498 merge_tlist (&tmp_nosp, tmp_before, 0);
2499 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2506 struct tlist_cache *t;
2507 for (t = save_expr_cache; t; t = t->next)
2513 t = XOBNEW (&tlist_obstack, struct tlist_cache);
2514 t->next = save_expr_cache;
2516 save_expr_cache = t;
2518 tmp_before = tmp_nosp = 0;
2519 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
2520 warn_for_collisions (tmp_nosp);
2525 struct tlist *t = tmp_nosp;
2527 merge_tlist (&tmp_list3, t, 0);
2529 t->cache_before_sp = tmp_before;
2530 t->cache_after_sp = tmp_list3;
2532 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
2533 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
2538 x = TREE_OPERAND (x, 0);
2545 /* For other expressions, simply recurse on their operands.
2546 Manual tail recursion for unary expressions.
2547 Other non-expressions need not be processed. */
2548 if (cl == tcc_unary)
2550 x = TREE_OPERAND (x, 0);
2554 else if (IS_EXPR_CODE_CLASS (cl))
2557 int max = TREE_OPERAND_LENGTH (x);
2558 for (lp = 0; lp < max; lp++)
2560 tmp_before = tmp_nosp = 0;
2561 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
2562 merge_tlist (&tmp_nosp, tmp_before, 0);
2563 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
2570 /* Try to warn for undefined behavior in EXPR due to missing sequence
2574 verify_sequence_points (tree expr)
2576 struct tlist *before_sp = 0, *after_sp = 0;
2579 save_expr_cache = 0;
2580 if (tlist_firstobj == 0)
2582 gcc_obstack_init (&tlist_obstack);
2583 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
2586 verify_tree (expr, &before_sp, &after_sp, 0);
2587 warn_for_collisions (after_sp);
2588 obstack_free (&tlist_obstack, tlist_firstobj);
2591 /* Validate the expression after `case' and apply default promotions. */
2594 check_case_value (tree value)
2596 if (value == NULL_TREE)
2599 /* ??? Can we ever get nops here for a valid case value? We
2601 STRIP_TYPE_NOPS (value);
2602 /* In C++, the following is allowed:
2605 switch (...) { case i: ... }
2607 So, we try to reduce the VALUE to a constant that way. */
2608 if (c_dialect_cxx ())
2610 value = decl_constant_value (value);
2611 STRIP_TYPE_NOPS (value);
2612 value = fold (value);
2615 if (TREE_CODE (value) == INTEGER_CST)
2616 /* Promote char or short to int. */
2617 value = perform_integral_promotions (value);
2618 else if (value != error_mark_node)
2620 error ("case label does not reduce to an integer constant");
2621 value = error_mark_node;
2624 constant_expression_warning (value);
2629 /* See if the case values LOW and HIGH are in the range of the original
2630 type (i.e. before the default conversion to int) of the switch testing
2632 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
2633 the type before promoting it. CASE_LOW_P is a pointer to the lower
2634 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
2635 if the case is not a case range.
2636 The caller has to make sure that we are not called with NULL for
2637 CASE_LOW_P (i.e. the default case).
2638 Returns true if the case label is in range of ORIG_TYPE (saturated or
2639 untouched) or false if the label is out of range. */
2642 check_case_bounds (tree type, tree orig_type,
2643 tree *case_low_p, tree *case_high_p)
2645 tree min_value, max_value;
2646 tree case_low = *case_low_p;
2647 tree case_high = case_high_p ? *case_high_p : case_low;
2649 /* If there was a problem with the original type, do nothing. */
2650 if (orig_type == error_mark_node)
2653 min_value = TYPE_MIN_VALUE (orig_type);
2654 max_value = TYPE_MAX_VALUE (orig_type);
2656 /* Case label is less than minimum for type. */
2657 if (tree_int_cst_compare (case_low, min_value) < 0
2658 && tree_int_cst_compare (case_high, min_value) < 0)
2660 warning (0, "case label value is less than minimum value for type");
2664 /* Case value is greater than maximum for type. */
2665 if (tree_int_cst_compare (case_low, max_value) > 0
2666 && tree_int_cst_compare (case_high, max_value) > 0)
2668 warning (0, "case label value exceeds maximum value for type");
2672 /* Saturate lower case label value to minimum. */
2673 if (tree_int_cst_compare (case_high, min_value) >= 0
2674 && tree_int_cst_compare (case_low, min_value) < 0)
2676 warning (0, "lower value in case label range"
2677 " less than minimum value for type");
2678 case_low = min_value;
2681 /* Saturate upper case label value to maximum. */
2682 if (tree_int_cst_compare (case_low, max_value) <= 0
2683 && tree_int_cst_compare (case_high, max_value) > 0)
2685 warning (0, "upper value in case label range"
2686 " exceeds maximum value for type");
2687 case_high = max_value;
2690 if (*case_low_p != case_low)
2691 *case_low_p = convert (type, case_low);
2692 if (case_high_p && *case_high_p != case_high)
2693 *case_high_p = convert (type, case_high);
2698 /* Return an integer type with BITS bits of precision,
2699 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
2702 c_common_type_for_size (unsigned int bits, int unsignedp)
2704 if (bits == TYPE_PRECISION (integer_type_node))
2705 return unsignedp ? unsigned_type_node : integer_type_node;
2707 if (bits == TYPE_PRECISION (signed_char_type_node))
2708 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2710 if (bits == TYPE_PRECISION (short_integer_type_node))
2711 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2713 if (bits == TYPE_PRECISION (long_integer_type_node))
2714 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2716 if (bits == TYPE_PRECISION (long_long_integer_type_node))
2717 return (unsignedp ? long_long_unsigned_type_node
2718 : long_long_integer_type_node);
2720 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
2721 return (unsignedp ? widest_unsigned_literal_type_node
2722 : widest_integer_literal_type_node);
2724 if (bits <= TYPE_PRECISION (intQI_type_node))
2725 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2727 if (bits <= TYPE_PRECISION (intHI_type_node))
2728 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2730 if (bits <= TYPE_PRECISION (intSI_type_node))
2731 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2733 if (bits <= TYPE_PRECISION (intDI_type_node))
2734 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2739 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
2740 that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
2741 and saturating if SATP is nonzero, otherwise not saturating. */
2744 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
2745 int unsignedp, int satp)
2747 enum machine_mode mode;
2749 mode = unsignedp ? UQQmode : QQmode;
2751 mode = unsignedp ? UHAmode : HAmode;
2753 for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
2754 if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
2757 if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
2759 sorry ("GCC cannot support operators with integer types and "
2760 "fixed-point types that have too many integral and "
2761 "fractional bits together");
2765 return c_common_type_for_mode (mode, satp);
2768 /* Used for communication between c_common_type_for_mode and
2769 c_register_builtin_type. */
2770 static GTY(()) tree registered_builtin_types;
2772 /* Return a data type that has machine mode MODE.
2773 If the mode is an integer,
2774 then UNSIGNEDP selects between signed and unsigned types.
2775 If the mode is a fixed-point mode,
2776 then UNSIGNEDP selects between saturating and nonsaturating types. */
2779 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
2783 if (mode == TYPE_MODE (integer_type_node))
2784 return unsignedp ? unsigned_type_node : integer_type_node;
2786 if (mode == TYPE_MODE (signed_char_type_node))
2787 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2789 if (mode == TYPE_MODE (short_integer_type_node))
2790 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2792 if (mode == TYPE_MODE (long_integer_type_node))
2793 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2795 if (mode == TYPE_MODE (long_long_integer_type_node))
2796 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2798 if (mode == TYPE_MODE (widest_integer_literal_type_node))
2799 return unsignedp ? widest_unsigned_literal_type_node
2800 : widest_integer_literal_type_node;
2803 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2806 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2809 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2812 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2814 #if HOST_BITS_PER_WIDE_INT >= 64
2815 if (mode == TYPE_MODE (intTI_type_node))
2816 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2819 if (mode == TYPE_MODE (float_type_node))
2820 return float_type_node;
2822 if (mode == TYPE_MODE (double_type_node))
2823 return double_type_node;
2825 if (mode == TYPE_MODE (long_double_type_node))
2826 return long_double_type_node;
2828 if (mode == TYPE_MODE (void_type_node))
2829 return void_type_node;
2831 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2833 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2834 : make_signed_type (GET_MODE_PRECISION (mode)));
2836 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2838 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2839 : make_signed_type (GET_MODE_PRECISION (mode)));
2841 if (COMPLEX_MODE_P (mode))
2843 enum machine_mode inner_mode;
2846 if (mode == TYPE_MODE (complex_float_type_node))
2847 return complex_float_type_node;
2848 if (mode == TYPE_MODE (complex_double_type_node))
2849 return complex_double_type_node;
2850 if (mode == TYPE_MODE (complex_long_double_type_node))
2851 return complex_long_double_type_node;
2853 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2854 return complex_integer_type_node;
2856 inner_mode = GET_MODE_INNER (mode);
2857 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2858 if (inner_type != NULL_TREE)
2859 return build_complex_type (inner_type);
2861 else if (VECTOR_MODE_P (mode))
2863 enum machine_mode inner_mode = GET_MODE_INNER (mode);
2864 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2865 if (inner_type != NULL_TREE)
2866 return build_vector_type_for_mode (inner_type, mode);
2869 if (mode == TYPE_MODE (dfloat32_type_node))
2870 return dfloat32_type_node;
2871 if (mode == TYPE_MODE (dfloat64_type_node))
2872 return dfloat64_type_node;
2873 if (mode == TYPE_MODE (dfloat128_type_node))
2874 return dfloat128_type_node;
2876 if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
2878 if (mode == TYPE_MODE (short_fract_type_node))
2879 return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
2880 if (mode == TYPE_MODE (fract_type_node))
2881 return unsignedp ? sat_fract_type_node : fract_type_node;
2882 if (mode == TYPE_MODE (long_fract_type_node))
2883 return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
2884 if (mode == TYPE_MODE (long_long_fract_type_node))
2885 return unsignedp ? sat_long_long_fract_type_node
2886 : long_long_fract_type_node;
2888 if (mode == TYPE_MODE (unsigned_short_fract_type_node))
2889 return unsignedp ? sat_unsigned_short_fract_type_node
2890 : unsigned_short_fract_type_node;
2891 if (mode == TYPE_MODE (unsigned_fract_type_node))
2892 return unsignedp ? sat_unsigned_fract_type_node
2893 : unsigned_fract_type_node;
2894 if (mode == TYPE_MODE (unsigned_long_fract_type_node))
2895 return unsignedp ? sat_unsigned_long_fract_type_node
2896 : unsigned_long_fract_type_node;
2897 if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
2898 return unsignedp ? sat_unsigned_long_long_fract_type_node
2899 : unsigned_long_long_fract_type_node;
2901 if (mode == TYPE_MODE (short_accum_type_node))
2902 return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
2903 if (mode == TYPE_MODE (accum_type_node))
2904 return unsignedp ? sat_accum_type_node : accum_type_node;
2905 if (mode == TYPE_MODE (long_accum_type_node))
2906 return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
2907 if (mode == TYPE_MODE (long_long_accum_type_node))
2908 return unsignedp ? sat_long_long_accum_type_node
2909 : long_long_accum_type_node;
2911 if (mode == TYPE_MODE (unsigned_short_accum_type_node))
2912 return unsignedp ? sat_unsigned_short_accum_type_node
2913 : unsigned_short_accum_type_node;
2914 if (mode == TYPE_MODE (unsigned_accum_type_node))
2915 return unsignedp ? sat_unsigned_accum_type_node
2916 : unsigned_accum_type_node;
2917 if (mode == TYPE_MODE (unsigned_long_accum_type_node))
2918 return unsignedp ? sat_unsigned_long_accum_type_node
2919 : unsigned_long_accum_type_node;
2920 if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
2921 return unsignedp ? sat_unsigned_long_long_accum_type_node
2922 : unsigned_long_long_accum_type_node;
2925 return unsignedp ? sat_qq_type_node : qq_type_node;
2927 return unsignedp ? sat_hq_type_node : hq_type_node;
2929 return unsignedp ? sat_sq_type_node : sq_type_node;
2931 return unsignedp ? sat_dq_type_node : dq_type_node;
2933 return unsignedp ? sat_tq_type_node : tq_type_node;
2935 if (mode == UQQmode)
2936 return unsignedp ? sat_uqq_type_node : uqq_type_node;
2937 if (mode == UHQmode)
2938 return unsignedp ? sat_uhq_type_node : uhq_type_node;
2939 if (mode == USQmode)
2940 return unsignedp ? sat_usq_type_node : usq_type_node;
2941 if (mode == UDQmode)
2942 return unsignedp ? sat_udq_type_node : udq_type_node;
2943 if (mode == UTQmode)
2944 return unsignedp ? sat_utq_type_node : utq_type_node;
2947 return unsignedp ? sat_ha_type_node : ha_type_node;
2949 return unsignedp ? sat_sa_type_node : sa_type_node;
2951 return unsignedp ? sat_da_type_node : da_type_node;
2953 return unsignedp ? sat_ta_type_node : ta_type_node;
2955 if (mode == UHAmode)
2956 return unsignedp ? sat_uha_type_node : uha_type_node;
2957 if (mode == USAmode)
2958 return unsignedp ? sat_usa_type_node : usa_type_node;
2959 if (mode == UDAmode)
2960 return unsignedp ? sat_uda_type_node : uda_type_node;
2961 if (mode == UTAmode)
2962 return unsignedp ? sat_uta_type_node : uta_type_node;
2965 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
2966 if (TYPE_MODE (TREE_VALUE (t)) == mode)
2967 return TREE_VALUE (t);
2973 c_common_unsigned_type (tree type)
2975 return c_common_signed_or_unsigned_type (1, type);
2978 /* Return a signed type the same as TYPE in other respects. */
2981 c_common_signed_type (tree type)
2983 return c_common_signed_or_unsigned_type (0, type);
2986 /* Return a type the same as TYPE except unsigned or
2987 signed according to UNSIGNEDP. */
2990 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2994 /* This block of code emulates the behavior of the old
2995 c_common_unsigned_type. In particular, it returns
2996 long_unsigned_type_node if passed a long, even when a int would
2997 have the same size. This is necessary for warnings to work
2998 correctly in archs where sizeof(int) == sizeof(long) */
3000 type1 = TYPE_MAIN_VARIANT (type);
3001 if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
3002 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3003 if (type1 == integer_type_node || type1 == unsigned_type_node)
3004 return unsignedp ? unsigned_type_node : integer_type_node;
3005 if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
3006 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3007 if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
3008 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3009 if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
3010 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
3011 if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
3012 return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
3013 #if HOST_BITS_PER_WIDE_INT >= 64
3014 if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
3015 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3017 if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
3018 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3019 if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
3020 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3021 if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
3022 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3023 if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
3024 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3026 #define C_COMMON_FIXED_TYPES(NAME) \
3027 if (type1 == short_ ## NAME ## _type_node \
3028 || type1 == unsigned_short_ ## NAME ## _type_node) \
3029 return unsignedp ? unsigned_short_ ## NAME ## _type_node \
3030 : short_ ## NAME ## _type_node; \
3031 if (type1 == NAME ## _type_node \
3032 || type1 == unsigned_ ## NAME ## _type_node) \
3033 return unsignedp ? unsigned_ ## NAME ## _type_node \
3034 : NAME ## _type_node; \
3035 if (type1 == long_ ## NAME ## _type_node \
3036 || type1 == unsigned_long_ ## NAME ## _type_node) \
3037 return unsignedp ? unsigned_long_ ## NAME ## _type_node \
3038 : long_ ## NAME ## _type_node; \
3039 if (type1 == long_long_ ## NAME ## _type_node \
3040 || type1 == unsigned_long_long_ ## NAME ## _type_node) \
3041 return unsignedp ? unsigned_long_long_ ## NAME ## _type_node \
3042 : long_long_ ## NAME ## _type_node;
3044 #define C_COMMON_FIXED_MODE_TYPES(NAME) \
3045 if (type1 == NAME ## _type_node \
3046 || type1 == u ## NAME ## _type_node) \
3047 return unsignedp ? u ## NAME ## _type_node \
3048 : NAME ## _type_node;
3050 #define C_COMMON_FIXED_TYPES_SAT(NAME) \
3051 if (type1 == sat_ ## short_ ## NAME ## _type_node \
3052 || type1 == sat_ ## unsigned_short_ ## NAME ## _type_node) \
3053 return unsignedp ? sat_ ## unsigned_short_ ## NAME ## _type_node \
3054 : sat_ ## short_ ## NAME ## _type_node; \
3055 if (type1 == sat_ ## NAME ## _type_node \
3056 || type1 == sat_ ## unsigned_ ## NAME ## _type_node) \
3057 return unsignedp ? sat_ ## unsigned_ ## NAME ## _type_node \
3058 : sat_ ## NAME ## _type_node; \
3059 if (type1 == sat_ ## long_ ## NAME ## _type_node \
3060 || type1 == sat_ ## unsigned_long_ ## NAME ## _type_node) \
3061 return unsignedp ? sat_ ## unsigned_long_ ## NAME ## _type_node \
3062 : sat_ ## long_ ## NAME ## _type_node; \
3063 if (type1 == sat_ ## long_long_ ## NAME ## _type_node \
3064 || type1 == sat_ ## unsigned_long_long_ ## NAME ## _type_node) \
3065 return unsignedp ? sat_ ## unsigned_long_long_ ## NAME ## _type_node \
3066 : sat_ ## long_long_ ## NAME ## _type_node;
3068 #define C_COMMON_FIXED_MODE_TYPES_SAT(NAME) \
3069 if (type1 == sat_ ## NAME ## _type_node \
3070 || type1 == sat_ ## u ## NAME ## _type_node) \
3071 return unsignedp ? sat_ ## u ## NAME ## _type_node \
3072 : sat_ ## NAME ## _type_node;
3074 C_COMMON_FIXED_TYPES (fract);
3075 C_COMMON_FIXED_TYPES_SAT (fract);
3076 C_COMMON_FIXED_TYPES (accum);
3077 C_COMMON_FIXED_TYPES_SAT (accum);
3079 C_COMMON_FIXED_MODE_TYPES (qq);
3080 C_COMMON_FIXED_MODE_TYPES (hq);
3081 C_COMMON_FIXED_MODE_TYPES (sq);
3082 C_COMMON_FIXED_MODE_TYPES (dq);
3083 C_COMMON_FIXED_MODE_TYPES (tq);
3084 C_COMMON_FIXED_MODE_TYPES_SAT (qq);
3085 C_COMMON_FIXED_MODE_TYPES_SAT (hq);
3086 C_COMMON_FIXED_MODE_TYPES_SAT (sq);
3087 C_COMMON_FIXED_MODE_TYPES_SAT (dq);
3088 C_COMMON_FIXED_MODE_TYPES_SAT (tq);
3089 C_COMMON_FIXED_MODE_TYPES (ha);
3090 C_COMMON_FIXED_MODE_TYPES (sa);
3091 C_COMMON_FIXED_MODE_TYPES (da);
3092 C_COMMON_FIXED_MODE_TYPES (ta);
3093 C_COMMON_FIXED_MODE_TYPES_SAT (ha);
3094 C_COMMON_FIXED_MODE_TYPES_SAT (sa);
3095 C_COMMON_FIXED_MODE_TYPES_SAT (da);
3096 C_COMMON_FIXED_MODE_TYPES_SAT (ta);
3098 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
3099 the precision; they have precision set to match their range, but
3100 may use a wider mode to match an ABI. If we change modes, we may
3101 wind up with bad conversions. For INTEGER_TYPEs in C, must check
3102 the precision as well, so as to yield correct results for
3103 bit-field types. C++ does not have these separate bit-field
3104 types, and producing a signed or unsigned variant of an
3105 ENUMERAL_TYPE may cause other problems as well. */
3107 if (!INTEGRAL_TYPE_P (type)
3108 || TYPE_UNSIGNED (type) == unsignedp)
3111 #define TYPE_OK(node) \
3112 (TYPE_MODE (type) == TYPE_MODE (node) \
3113 && TYPE_PRECISION (type) == TYPE_PRECISION (node))
3114 if (TYPE_OK (signed_char_type_node))
3115 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3116 if (TYPE_OK (integer_type_node))
3117 return unsignedp ? unsigned_type_node : integer_type_node;
3118 if (TYPE_OK (short_integer_type_node))
3119 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3120 if (TYPE_OK (long_integer_type_node))
3121 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3122 if (TYPE_OK (long_long_integer_type_node))
3123 return (unsignedp ? long_long_unsigned_type_node
3124 : long_long_integer_type_node);
3125 if (TYPE_OK (widest_integer_literal_type_node))
3126 return (unsignedp ? widest_unsigned_literal_type_node
3127 : widest_integer_literal_type_node);
3129 #if HOST_BITS_PER_WIDE_INT >= 64
3130 if (TYPE_OK (intTI_type_node))
3131 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
3133 if (TYPE_OK (intDI_type_node))
3134 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
3135 if (TYPE_OK (intSI_type_node))
3136 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
3137 if (TYPE_OK (intHI_type_node))
3138 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
3139 if (TYPE_OK (intQI_type_node))
3140 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
3143 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
3146 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
3149 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
3151 /* Extended integer types of the same width as a standard type have
3152 lesser rank, so those of the same width as int promote to int or
3153 unsigned int and are valid for printf formats expecting int or
3154 unsigned int. To avoid such special cases, avoid creating
3155 extended integer types for bit-fields if a standard integer type
3157 if (width == TYPE_PRECISION (integer_type_node))
3158 return unsignedp ? unsigned_type_node : integer_type_node;
3159 if (width == TYPE_PRECISION (signed_char_type_node))
3160 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
3161 if (width == TYPE_PRECISION (short_integer_type_node))
3162 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
3163 if (width == TYPE_PRECISION (long_integer_type_node))
3164 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
3165 if (width == TYPE_PRECISION (long_long_integer_type_node))
3166 return (unsignedp ? long_long_unsigned_type_node
3167 : long_long_integer_type_node);
3168 return build_nonstandard_integer_type (width, unsignedp);
3171 /* The C version of the register_builtin_type langhook. */
3174 c_register_builtin_type (tree type, const char* name)
3178 decl = build_decl (TYPE_DECL, get_identifier (name), type);
3179 DECL_ARTIFICIAL (decl) = 1;
3180 if (!TYPE_NAME (type))
3181 TYPE_NAME (type) = decl;
3184 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
3187 /* Print an error message for invalid operands to arith operation
3188 CODE with TYPE0 for operand 0, and TYPE1 for operand 1.
3189 LOCATION is the location of the message. */
3192 binary_op_error (location_t location, enum tree_code code,
3193 tree type0, tree type1)
3200 opname = "+"; break;
3202 opname = "-"; break;
3204 opname = "*"; break;
3206 opname = "max"; break;
3208 opname = "min"; break;
3210 opname = "=="; break;
3212 opname = "!="; break;
3214 opname = "<="; break;
3216 opname = ">="; break;
3218 opname = "<"; break;
3220 opname = ">"; break;
3222 opname = "<<"; break;
3224 opname = ">>"; break;
3225 case TRUNC_MOD_EXPR:
3226 case FLOOR_MOD_EXPR:
3227 opname = "%"; break;
3228 case TRUNC_DIV_EXPR:
3229 case FLOOR_DIV_EXPR:
3230 opname = "/"; break;
3232 opname = "&"; break;
3234 opname = "|"; break;
3235 case TRUTH_ANDIF_EXPR:
3236 opname = "&&"; break;
3237 case TRUTH_ORIF_EXPR:
3238 opname = "||"; break;
3240 opname = "^"; break;
3245 "invalid operands to binary %s (have %qT and %qT)", opname,
3249 /* Subroutine of build_binary_op, used for comparison operations.
3250 See if the operands have both been converted from subword integer types
3251 and, if so, perhaps change them both back to their original type.
3252 This function is also responsible for converting the two operands
3253 to the proper common type for comparison.
3255 The arguments of this function are all pointers to local variables
3256 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
3257 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
3259 If this function returns nonzero, it means that the comparison has
3260 a constant value. What this function returns is an expression for
3264 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
3265 enum tree_code *rescode_ptr)
3268 tree op0 = *op0_ptr;
3269 tree op1 = *op1_ptr;
3270 int unsignedp0, unsignedp1;
3272 tree primop0, primop1;
3273 enum tree_code code = *rescode_ptr;
3275 /* Throw away any conversions to wider types
3276 already present in the operands. */
3278 primop0 = get_narrower (op0, &unsignedp0);
3279 primop1 = get_narrower (op1, &unsignedp1);
3281 /* Handle the case that OP0 does not *contain* a conversion
3282 but it *requires* conversion to FINAL_TYPE. */
3284 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
3285 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
3286 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
3287 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
3289 /* If one of the operands must be floated, we cannot optimize. */
3290 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
3291 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
3293 /* If first arg is constant, swap the args (changing operation
3294 so value is preserved), for canonicalization. Don't do this if
3295 the second arg is 0. */
3297 if (TREE_CONSTANT (primop0)
3298 && !integer_zerop (primop1) && !real_zerop (primop1)
3299 && !fixed_zerop (primop1))
3302 int temi = unsignedp0;
3310 unsignedp0 = unsignedp1;
3333 *rescode_ptr = code;
3336 /* If comparing an integer against a constant more bits wide,
3337 maybe we can deduce a value of 1 or 0 independent of the data.
3338 Or else truncate the constant now
3339 rather than extend the variable at run time.
3341 This is only interesting if the constant is the wider arg.
3342 Also, it is not safe if the constant is unsigned and the
3343 variable arg is signed, since in this case the variable
3344 would be sign-extended and then regarded as unsigned.
3345 Our technique fails in this case because the lowest/highest
3346 possible unsigned results don't follow naturally from the
3347 lowest/highest possible values of the variable operand.
3348 For just EQ_EXPR and NE_EXPR there is another technique that
3349 could be used: see if the constant can be faithfully represented
3350 in the other operand's type, by truncating it and reextending it
3351 and see if that preserves the constant's value. */
3353 if (!real1 && !real2
3354 && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
3355 && TREE_CODE (primop1) == INTEGER_CST
3356 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
3358 int min_gt, max_gt, min_lt, max_lt;
3359 tree maxval, minval;
3360 /* 1 if comparison is nominally unsigned. */
3361 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
3364 type = c_common_signed_or_unsigned_type (unsignedp0,
3365 TREE_TYPE (primop0));
3367 maxval = TYPE_MAX_VALUE (type);
3368 minval = TYPE_MIN_VALUE (type);
3370 if (unsignedp && !unsignedp0)
3371 *restype_ptr = c_common_signed_type (*restype_ptr);
3373 if (TREE_TYPE (primop1) != *restype_ptr)
3375 /* Convert primop1 to target type, but do not introduce
3376 additional overflow. We know primop1 is an int_cst. */
3377 primop1 = force_fit_type_double (*restype_ptr,
3378 TREE_INT_CST_LOW (primop1),
3379 TREE_INT_CST_HIGH (primop1), 0,
3380 TREE_OVERFLOW (primop1));
3382 if (type != *restype_ptr)
3384 minval = convert (*restype_ptr, minval);
3385 maxval = convert (*restype_ptr, maxval);
3388 if (unsignedp && unsignedp0)
3390 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
3391 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
3392 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
3393 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
3397 min_gt = INT_CST_LT (primop1, minval);
3398 max_gt = INT_CST_LT (primop1, maxval);
3399 min_lt = INT_CST_LT (minval, primop1);
3400 max_lt = INT_CST_LT (maxval, primop1);
3404 /* This used to be a switch, but Genix compiler can't handle that. */
3405 if (code == NE_EXPR)
3407 if (max_lt || min_gt)
3408 val = truthvalue_true_node;
3410 else if (code == EQ_EXPR)
3412 if (max_lt || min_gt)
3413 val = truthvalue_false_node;
3415 else if (code == LT_EXPR)
3418 val = truthvalue_true_node;
3420 val = truthvalue_false_node;
3422 else if (code == GT_EXPR)
3425 val = truthvalue_true_node;
3427 val = truthvalue_false_node;
3429 else if (code == LE_EXPR)
3432 val = truthvalue_true_node;
3434 val = truthvalue_false_node;
3436 else if (code == GE_EXPR)
3439 val = truthvalue_true_node;
3441 val = truthvalue_false_node;
3444 /* If primop0 was sign-extended and unsigned comparison specd,
3445 we did a signed comparison above using the signed type bounds.
3446 But the comparison we output must be unsigned.
3448 Also, for inequalities, VAL is no good; but if the signed
3449 comparison had *any* fixed result, it follows that the
3450 unsigned comparison just tests the sign in reverse
3451 (positive values are LE, negative ones GE).
3452 So we can generate an unsigned comparison
3453 against an extreme value of the signed type. */
3455 if (unsignedp && !unsignedp0)
3462 primop1 = TYPE_MIN_VALUE (type);
3468 primop1 = TYPE_MAX_VALUE (type);
3475 type = c_common_unsigned_type (type);
3478 if (TREE_CODE (primop0) != INTEGER_CST)
3480 if (val == truthvalue_false_node)
3481 warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
3482 if (val == truthvalue_true_node)
3483 warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
3488 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3489 if (TREE_SIDE_EFFECTS (primop0))
3490 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
3494 /* Value is not predetermined, but do the comparison
3495 in the type of the operand that is not constant.
3496 TYPE is already properly set. */
3499 /* If either arg is decimal float and the other is float, find the
3500 proper common type to use for comparison. */
3501 else if (real1 && real2
3502 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
3503 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
3504 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3506 else if (real1 && real2
3507 && (TYPE_PRECISION (TREE_TYPE (primop0))
3508 == TYPE_PRECISION (TREE_TYPE (primop1))))
3509 type = TREE_TYPE (primop0);
3511 /* If args' natural types are both narrower than nominal type
3512 and both extend in the same manner, compare them
3513 in the type of the wider arg.
3514 Otherwise must actually extend both to the nominal
3515 common type lest different ways of extending
3517 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
3519 else if (unsignedp0 == unsignedp1 && real1 == real2
3520 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
3521 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
3523 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
3524 type = c_common_signed_or_unsigned_type (unsignedp0
3525 || TYPE_UNSIGNED (*restype_ptr),
3527 /* Make sure shorter operand is extended the right way
3528 to match the longer operand. */
3530 = convert (c_common_signed_or_unsigned_type (unsignedp0,
3531 TREE_TYPE (primop0)),
3534 = convert (c_common_signed_or_unsigned_type (unsignedp1,
3535 TREE_TYPE (primop1)),
3540 /* Here we must do the comparison on the nominal type
3541 using the args exactly as we received them. */
3542 type = *restype_ptr;
3546 if (!real1 && !real2 && integer_zerop (primop1)
3547 && TYPE_UNSIGNED (*restype_ptr))
3553 /* All unsigned values are >= 0, so we warn. However,
3554 if OP0 is a constant that is >= 0, the signedness of
3555 the comparison isn't an issue, so suppress the
3557 if (warn_type_limits && !in_system_header
3558 && !(TREE_CODE (primop0) == INTEGER_CST
3559 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3561 warning (OPT_Wtype_limits,
3562 "comparison of unsigned expression >= 0 is always true");
3563 value = truthvalue_true_node;
3567 if (warn_type_limits && !in_system_header
3568 && !(TREE_CODE (primop0) == INTEGER_CST
3569 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
3571 warning (OPT_Wtype_limits,
3572 "comparison of unsigned expression < 0 is always false");
3573 value = truthvalue_false_node;
3582 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
3583 if (TREE_SIDE_EFFECTS (primop0))
3584 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
3591 *op0_ptr = convert (type, primop0);
3592 *op1_ptr = convert (type, primop1);
3594 *restype_ptr = truthvalue_type_node;
3599 /* Return a tree for the sum or difference (RESULTCODE says which)
3600 of pointer PTROP and integer INTOP. */
3603 pointer_int_sum (location_t location, enum tree_code resultcode,
3604 tree ptrop, tree intop)
3608 /* The result is a pointer of the same type that is being added. */
3609 tree result_type = TREE_TYPE (ptrop);
3611 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
3613 pedwarn (location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3614 "pointer of type %<void *%> used in arithmetic");
3615 size_exp = integer_one_node;
3617 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
3619 pedwarn (location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3620 "pointer to a function used in arithmetic");
3621 size_exp = integer_one_node;
3623 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
3625 pedwarn (location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3626 "pointer to member function used in arithmetic");
3627 size_exp = integer_one_node;
3630 size_exp = size_in_bytes (TREE_TYPE (result_type));
3632 /* We are manipulating pointer values, so we don't need to warn
3633 about relying on undefined signed overflow. We disable the
3634 warning here because we use integer types so fold won't know that
3635 they are really pointers. */
3636 fold_defer_overflow_warnings ();
3638 /* If what we are about to multiply by the size of the elements
3639 contains a constant term, apply distributive law
3640 and multiply that constant term separately.
3641 This helps produce common subexpressions. */
3642 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
3643 && !TREE_CONSTANT (intop)
3644 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
3645 && TREE_CONSTANT (size_exp)
3646 /* If the constant comes from pointer subtraction,
3647 skip this optimization--it would cause an error. */
3648 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
3649 /* If the constant is unsigned, and smaller than the pointer size,
3650 then we must skip this optimization. This is because it could cause
3651 an overflow error if the constant is negative but INTOP is not. */
3652 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
3653 || (TYPE_PRECISION (TREE_TYPE (intop))
3654 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
3656 enum tree_code subcode = resultcode;
3657 tree int_type = TREE_TYPE (intop);
3658 if (TREE_CODE (intop) == MINUS_EXPR)
3659 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
3660 /* Convert both subexpression types to the type of intop,
3661 because weird cases involving pointer arithmetic
3662 can result in a sum or difference with different type args. */
3663 ptrop = build_binary_op (EXPR_LOCATION (TREE_OPERAND (intop, 1)),
3665 convert (int_type, TREE_OPERAND (intop, 1)), 1);
3666 intop = convert (int_type, TREE_OPERAND (intop, 0));
3669 /* Convert the integer argument to a type the same size as sizetype
3670 so the multiply won't overflow spuriously. */
3671 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
3672 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
3673 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
3674 TYPE_UNSIGNED (sizetype)), intop);
3676 /* Replace the integer argument with a suitable product by the object size.
3677 Do this multiplication as signed, then convert to the appropriate
3678 type for the pointer operation. */
3679 intop = convert (sizetype,
3680 build_binary_op (EXPR_LOCATION (intop),
3682 convert (TREE_TYPE (intop), size_exp), 1));
3684 /* Create the sum or difference. */
3685 if (resultcode == MINUS_EXPR)
3686 intop = fold_build1 (NEGATE_EXPR, sizetype, intop);
3688 if (TREE_CODE (intop) == INTEGER_CST)
3691 tree string_cst = string_constant (ptrop, &offset_node);
3694 && !(offset_node && TREE_CODE (offset_node) != INTEGER_CST))
3696 HOST_WIDE_INT max = TREE_STRING_LENGTH (string_cst);
3697 HOST_WIDE_INT offset;
3698 if (offset_node == 0)
3700 else if (! host_integerp (offset_node, 0))
3703 offset = tree_low_cst (offset_node, 0);
3705 offset = offset + tree_low_cst (intop, 0);
3706 if (offset < 0 || offset > max)
3707 warning_at (location, 0,
3708 "offset %<%wd%> outside bounds of constant string",
3709 tree_low_cst (intop, 0));
3713 ret = fold_build2 (POINTER_PLUS_EXPR, result_type, ptrop, intop);
3715 fold_undefer_and_ignore_overflow_warnings ();
3720 /* Wrap a SAVE_EXPR around EXPR, if appropriate. Like save_expr, but
3721 for C folds the inside expression and wraps a C_MAYBE_CONST_EXPR
3722 around the SAVE_EXPR if needed so that c_fully_fold does not need
3723 to look inside SAVE_EXPRs. */
3726 c_save_expr (tree expr)
3728 bool maybe_const = true;
3729 if (c_dialect_cxx ())
3730 return save_expr (expr);
3731 expr = c_fully_fold (expr, false, &maybe_const);
3732 expr = save_expr (expr);
3735 expr = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL, expr);
3736 C_MAYBE_CONST_EXPR_NON_CONST (expr) = 1;
3741 /* Return whether EXPR is a declaration whose address can never be
3745 decl_with_nonnull_addr_p (const_tree expr)
3747 return (DECL_P (expr)
3748 && (TREE_CODE (expr) == PARM_DECL
3749 || TREE_CODE (expr) == LABEL_DECL
3750 || !DECL_WEAK (expr)));
3753 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
3754 or for an `if' or `while' statement or ?..: exp. It should already
3755 have been validated to be of suitable type; otherwise, a bad
3756 diagnostic may result.
3758 The EXPR is located at LOCATION.
3760 This preparation consists of taking the ordinary
3761 representation of an expression expr and producing a valid tree
3762 boolean expression describing whether expr is nonzero. We could
3763 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
3764 but we optimize comparisons, &&, ||, and !.
3766 The resulting type should always be `truthvalue_type_node'. */
3769 c_common_truthvalue_conversion (location_t location, tree expr)
3771 switch (TREE_CODE (expr))
3773 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
3774 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
3775 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
3776 case ORDERED_EXPR: case UNORDERED_EXPR:
3777 if (TREE_TYPE (expr) == truthvalue_type_node)
3779 return build2 (TREE_CODE (expr), truthvalue_type_node,
3780 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
3782 case TRUTH_ANDIF_EXPR:
3783 case TRUTH_ORIF_EXPR:
3784 case TRUTH_AND_EXPR:
3786 case TRUTH_XOR_EXPR:
3787 if (TREE_TYPE (expr) == truthvalue_type_node)
3789 return build2 (TREE_CODE (expr), truthvalue_type_node,
3790 c_common_truthvalue_conversion (location,
3791 TREE_OPERAND (expr, 0)),
3792 c_common_truthvalue_conversion (location,
3793 TREE_OPERAND (expr, 1)));
3795 case TRUTH_NOT_EXPR:
3796 if (TREE_TYPE (expr) == truthvalue_type_node)
3798 return build1 (TREE_CODE (expr), truthvalue_type_node,
3799 c_common_truthvalue_conversion (location,
3800 TREE_OPERAND (expr, 0)));
3806 return integer_zerop (expr) ? truthvalue_false_node
3807 : truthvalue_true_node;
3810 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
3811 ? truthvalue_true_node
3812 : truthvalue_false_node;
3815 return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
3816 &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
3817 ? truthvalue_true_node
3818 : truthvalue_false_node;
3821 expr = build_unary_op (location, ADDR_EXPR, expr, 0);
3826 tree inner = TREE_OPERAND (expr, 0);
3827 if (decl_with_nonnull_addr_p (inner))
3829 /* Common Ada/Pascal programmer's mistake. */
3830 warning_at (location,
3832 "the address of %qD will always evaluate as %<true%>",
3834 return truthvalue_true_node;
3837 /* If we still have a decl, it is possible for its address to
3838 be NULL, so we cannot optimize. */
3841 gcc_assert (DECL_WEAK (inner));
3845 if (TREE_SIDE_EFFECTS (inner))
3846 return build2 (COMPOUND_EXPR, truthvalue_type_node,
3847 inner, truthvalue_true_node);
3849 return truthvalue_true_node;
3853 return build_binary_op (EXPR_LOCATION (expr),
3854 (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3855 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3856 c_common_truthvalue_conversion (location,
3857 TREE_OPERAND (expr, 0)),
3858 c_common_truthvalue_conversion (location,
3859 TREE_OPERAND (expr, 1)),
3865 /* These don't change whether an object is nonzero or zero. */
3866 return c_common_truthvalue_conversion (location, TREE_OPERAND (expr, 0));
3870 /* These don't change whether an object is zero or nonzero, but
3871 we can't ignore them if their second arg has side-effects. */
3872 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3873 return build2 (COMPOUND_EXPR, truthvalue_type_node,
3874 TREE_OPERAND (expr, 1),
3875 c_common_truthvalue_conversion
3876 (location, TREE_OPERAND (expr, 0)));
3878 return c_common_truthvalue_conversion (location,
3879 TREE_OPERAND (expr, 0));
3882 /* Distribute the conversion into the arms of a COND_EXPR. */
3883 if (c_dialect_cxx ())
3884 return fold_build3 (COND_EXPR, truthvalue_type_node,
3885 TREE_OPERAND (expr, 0),
3886 c_common_truthvalue_conversion (location,
3889 c_common_truthvalue_conversion (location,
3893 /* Folding will happen later for C. */
3894 return build3 (COND_EXPR, truthvalue_type_node,
3895 TREE_OPERAND (expr, 0),
3896 c_common_truthvalue_conversion (location,
3897 TREE_OPERAND (expr, 1)),
3898 c_common_truthvalue_conversion (location,
3899 TREE_OPERAND (expr, 2)));
3902 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3903 since that affects how `default_conversion' will behave. */
3904 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3905 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3907 /* If this is widening the argument, we can ignore it. */
3908 if (TYPE_PRECISION (TREE_TYPE (expr))
3909 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
3910 return c_common_truthvalue_conversion (location,
3911 TREE_OPERAND (expr, 0));
3915 if (!TREE_NO_WARNING (expr)
3916 && warn_parentheses)
3918 warning (OPT_Wparentheses,
3919 "suggest parentheses around assignment used as truth value");
3920 TREE_NO_WARNING (expr) = 1;
3928 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
3930 tree t = c_save_expr (expr);
3931 return (build_binary_op
3932 (EXPR_LOCATION (expr),
3933 (TREE_SIDE_EFFECTS (expr)
3934 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3935 c_common_truthvalue_conversion
3937 build_unary_op (location, REALPART_EXPR, t, 0)),
3938 c_common_truthvalue_conversion
3940 build_unary_op (location, IMAGPART_EXPR, t, 0)),
3944 if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
3946 tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
3948 (TREE_TYPE (expr))));
3949 return build_binary_op (EXPR_LOCATION (expr),
3950 NE_EXPR, expr, fixed_zero_node, 1);
3953 return build_binary_op (EXPR_LOCATION (expr),
3954 NE_EXPR, expr, integer_zero_node, 1);
3957 static void def_builtin_1 (enum built_in_function fncode,
3959 enum built_in_class fnclass,
3960 tree fntype, tree libtype,
3961 bool both_p, bool fallback_p, bool nonansi_p,
3962 tree fnattrs, bool implicit_p);
3965 /* Apply the TYPE_QUALS to the new DECL. */
3968 c_apply_type_quals_to_decl (int type_quals, tree decl)
3970 tree type = TREE_TYPE (decl);
3972 if (type == error_mark_node)
3975 if (((type_quals & TYPE_QUAL_CONST)
3976 || (type && TREE_CODE (type) == REFERENCE_TYPE))
3977 /* An object declared 'const' is only readonly after it is
3978 initialized. We don't have any way of expressing this currently,
3979 so we need to be conservative and unset TREE_READONLY for types
3980 with constructors. Otherwise aliasing code will ignore stores in
3981 an inline constructor. */
3982 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
3983 TREE_READONLY (decl) = 1;
3984 if (type_quals & TYPE_QUAL_VOLATILE)
3986 TREE_SIDE_EFFECTS (decl) = 1;
3987 TREE_THIS_VOLATILE (decl) = 1;
3989 if (type_quals & TYPE_QUAL_RESTRICT)
3991 while (type && TREE_CODE (type) == ARRAY_TYPE)
3992 /* Allow 'restrict' on arrays of pointers.
3993 FIXME currently we just ignore it. */
3994 type = TREE_TYPE (type);
3996 || !POINTER_TYPE_P (type)
3997 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
3998 error ("invalid use of %<restrict%>");
3999 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
4000 /* Indicate we need to make a unique alias set for this pointer.
4001 We can't do it here because it might be pointing to an
4003 DECL_POINTER_ALIAS_SET (decl) = -2;
4007 /* Hash function for the problem of multiple type definitions in
4008 different files. This must hash all types that will compare
4009 equal via comptypes to the same value. In practice it hashes
4010 on some of the simple stuff and leaves the details to comptypes. */
4013 c_type_hash (const void *p)
4017 const_tree const t = (const_tree) p;
4019 switch (TREE_CODE (t))
4021 /* For pointers, hash on pointee type plus some swizzling. */
4023 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
4024 /* Hash on number of elements and total size. */
4027 t2 = TYPE_VALUES (t);
4031 t2 = TYPE_FIELDS (t);
4033 case QUAL_UNION_TYPE:
4035 t2 = TYPE_FIELDS (t);
4039 t2 = TYPE_FIELDS (t);
4044 for (; t2; t2 = TREE_CHAIN (t2))
4046 /* We might have a VLA here. */
4047 if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
4050 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
4051 return ((size << 24) | (i << shift));
4054 static GTY((param_is (union tree_node))) htab_t type_hash_table;
4056 /* Return the typed-based alias set for T, which may be an expression
4057 or a type. Return -1 if we don't do anything special. */
4060 c_common_get_alias_set (tree t)
4065 /* Permit type-punning when accessing a union, provided the access
4066 is directly through the union. For example, this code does not
4067 permit taking the address of a union member and then storing
4068 through it. Even the type-punning allowed here is a GCC
4069 extension, albeit a common and useful one; the C standard says
4070 that such accesses have implementation-defined behavior. */
4072 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
4073 u = TREE_OPERAND (u, 0))
4074 if (TREE_CODE (u) == COMPONENT_REF
4075 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
4078 /* That's all the expressions we handle specially. */
4082 /* The C standard guarantees that any object may be accessed via an
4083 lvalue that has character type. */
4084 if (t == char_type_node
4085 || t == signed_char_type_node
4086 || t == unsigned_char_type_node)
4089 /* The C standard specifically allows aliasing between signed and
4090 unsigned variants of the same type. We treat the signed
4091 variant as canonical. */
4092 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
4094 tree t1 = c_common_signed_type (t);
4096 /* t1 == t can happen for boolean nodes which are always unsigned. */
4098 return get_alias_set (t1);
4100 else if (POINTER_TYPE_P (t))
4104 /* Unfortunately, there is no canonical form of a pointer type.
4105 In particular, if we have `typedef int I', then `int *', and
4106 `I *' are different types. So, we have to pick a canonical
4107 representative. We do this below.
4109 Technically, this approach is actually more conservative that
4110 it needs to be. In particular, `const int *' and `int *'
4111 should be in different alias sets, according to the C and C++
4112 standard, since their types are not the same, and so,
4113 technically, an `int **' and `const int **' cannot point at
4116 But, the standard is wrong. In particular, this code is
4121 const int* const* cipp = ipp;
4123 And, it doesn't make sense for that to be legal unless you
4124 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
4125 the pointed-to types. This issue has been reported to the
4127 t1 = build_type_no_quals (t);
4129 return get_alias_set (t1);
4132 /* Handle the case of multiple type nodes referring to "the same" type,
4133 which occurs with IMA. These share an alias set. FIXME: Currently only
4134 C90 is handled. (In C99 type compatibility is not transitive, which
4135 complicates things mightily. The alias set splay trees can theoretically
4136 represent this, but insertion is tricky when you consider all the
4137 different orders things might arrive in.) */
4139 if (c_language != clk_c || flag_isoc99)
4142 /* Save time if there's only one input file. */
4143 if (num_in_fnames == 1)
4146 /* Pointers need special handling if they point to any type that
4147 needs special handling (below). */
4148 if (TREE_CODE (t) == POINTER_TYPE)
4151 /* Find bottom type under any nested POINTERs. */
4152 for (t2 = TREE_TYPE (t);
4153 TREE_CODE (t2) == POINTER_TYPE;
4154 t2 = TREE_TYPE (t2))
4156 if (TREE_CODE (t2) != RECORD_TYPE
4157 && TREE_CODE (t2) != ENUMERAL_TYPE
4158 && TREE_CODE (t2) != QUAL_UNION_TYPE
4159 && TREE_CODE (t2) != UNION_TYPE)
4161 if (TYPE_SIZE (t2) == 0)
4164 /* These are the only cases that need special handling. */
4165 if (TREE_CODE (t) != RECORD_TYPE
4166 && TREE_CODE (t) != ENUMERAL_TYPE
4167 && TREE_CODE (t) != QUAL_UNION_TYPE
4168 && TREE_CODE (t) != UNION_TYPE
4169 && TREE_CODE (t) != POINTER_TYPE)
4172 if (TYPE_SIZE (t) == 0)
4175 /* Look up t in hash table. Only one of the compatible types within each
4176 alias set is recorded in the table. */
4177 if (!type_hash_table)
4178 type_hash_table = htab_create_ggc (1021, c_type_hash,
4179 (htab_eq) lang_hooks.types_compatible_p,
4181 slot = htab_find_slot (type_hash_table, t, INSERT);
4184 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
4185 return TYPE_ALIAS_SET ((tree)*slot);
4188 /* Our caller will assign and record (in t) a new alias set; all we need
4189 to do is remember t in the hash table. */
4195 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
4196 second parameter indicates which OPERATOR is being applied. The COMPLAIN
4197 flag controls whether we should diagnose possibly ill-formed
4198 constructs or not. */
4201 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
4203 const char *op_name;
4205 enum tree_code type_code = TREE_CODE (type);
4207 op_name = is_sizeof ? "sizeof" : "__alignof__";
4209 if (type_code == FUNCTION_TYPE)
4213 if (complain && (pedantic || warn_pointer_arith))
4214 pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4215 "invalid application of %<sizeof%> to a function type");
4217 return error_mark_node;
4218 value = size_one_node;
4221 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
4223 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
4225 if (type_code == VOID_TYPE
4226 && complain && (pedantic || warn_pointer_arith))
4227 pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
4228 "invalid application of %qs to a void type", op_name);
4230 return error_mark_node;
4231 value = size_one_node;
4233 else if (!COMPLETE_TYPE_P (type))
4236 error ("invalid application of %qs to incomplete type %qT ",
4238 value = size_zero_node;
4243 /* Convert in case a char is more than one unit. */
4244 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
4245 size_int (TYPE_PRECISION (char_type_node)
4248 value = size_int (TYPE_ALIGN_UNIT (type));
4251 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
4252 TYPE_IS_SIZETYPE means that certain things (like overflow) will
4253 never happen. However, this node should really have type
4254 `size_t', which is just a typedef for an ordinary integer type. */
4255 value = fold_convert (size_type_node, value);
4256 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
4261 /* Implement the __alignof keyword: Return the minimum required
4262 alignment of EXPR, measured in bytes. For VAR_DECLs,
4263 FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
4264 from an "aligned" __attribute__ specification). */
4267 c_alignof_expr (tree expr)
4271 if (VAR_OR_FUNCTION_DECL_P (expr))
4272 t = size_int (DECL_ALIGN_UNIT (expr));
4274 else if (TREE_CODE (expr) == COMPONENT_REF
4275 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
4277 error ("%<__alignof%> applied to a bit-field");
4280 else if (TREE_CODE (expr) == COMPONENT_REF
4281 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
4282 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
4284 else if (TREE_CODE (expr) == INDIRECT_REF)
4286 tree t = TREE_OPERAND (expr, 0);
4288 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4290 while (CONVERT_EXPR_P (t)
4291 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
4295 t = TREE_OPERAND (t, 0);
4296 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
4297 if (thisalign > bestalign)
4298 best = t, bestalign = thisalign;
4300 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
4303 return c_alignof (TREE_TYPE (expr));
4305 return fold_convert (size_type_node, t);
4308 /* Handle C and C++ default attributes. */
4310 enum built_in_attribute
4312 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4313 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4314 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4315 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4316 #include "builtin-attrs.def"
4317 #undef DEF_ATTR_NULL_TREE
4319 #undef DEF_ATTR_IDENT
4320 #undef DEF_ATTR_TREE_LIST
4324 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
4326 static void c_init_attributes (void);
4330 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
4331 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
4332 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
4333 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
4334 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4335 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4336 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
4337 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
4338 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
4339 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
4340 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
4341 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
4342 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
4343 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
4344 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
4346 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
4347 #include "builtin-types.def"
4348 #undef DEF_PRIMITIVE_TYPE
4349 #undef DEF_FUNCTION_TYPE_0
4350 #undef DEF_FUNCTION_TYPE_1
4351 #undef DEF_FUNCTION_TYPE_2
4352 #undef DEF_FUNCTION_TYPE_3
4353 #undef DEF_FUNCTION_TYPE_4
4354 #undef DEF_FUNCTION_TYPE_5
4355 #undef DEF_FUNCTION_TYPE_6
4356 #undef DEF_FUNCTION_TYPE_7
4357 #undef DEF_FUNCTION_TYPE_VAR_0
4358 #undef DEF_FUNCTION_TYPE_VAR_1
4359 #undef DEF_FUNCTION_TYPE_VAR_2
4360 #undef DEF_FUNCTION_TYPE_VAR_3
4361 #undef DEF_FUNCTION_TYPE_VAR_4
4362 #undef DEF_FUNCTION_TYPE_VAR_5
4363 #undef DEF_POINTER_TYPE
4367 typedef enum c_builtin_type builtin_type;
4369 /* A temporary array for c_common_nodes_and_builtins. Used in
4370 communication with def_fn_type. */
4371 static tree builtin_types[(int) BT_LAST + 1];
4373 /* A helper function for c_common_nodes_and_builtins. Build function type
4374 for DEF with return type RET and N arguments. If VAR is true, then the
4375 function should be variadic after those N arguments.
4377 Takes special care not to ICE if any of the types involved are
4378 error_mark_node, which indicates that said type is not in fact available
4379 (see builtin_type_for_size). In which case the function type as a whole
4380 should be error_mark_node. */
4383 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
4385 tree args = NULL, t;
4390 for (i = 0; i < n; ++i)
4392 builtin_type a = (builtin_type) va_arg (list, int);
4393 t = builtin_types[a];
4394 if (t == error_mark_node)
4396 args = tree_cons (NULL_TREE, t, args);
4400 args = nreverse (args);
4402 args = chainon (args, void_list_node);
4404 t = builtin_types[ret];
4405 if (t == error_mark_node)
4407 t = build_function_type (t, args);
4410 builtin_types[def] = t;
4413 /* Build builtin functions common to both C and C++ language
4417 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
4419 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
4420 builtin_types[ENUM] = VALUE;
4421 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
4422 def_fn_type (ENUM, RETURN, 0, 0);
4423 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
4424 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
4425 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
4426 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
4427 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4428 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
4429 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4430 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
4431 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4432 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4433 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4435 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
4436 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
4438 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
4439 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
4440 def_fn_type (ENUM, RETURN, 1, 0);
4441 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
4442 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
4443 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
4444 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
4445 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
4446 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
4447 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
4448 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
4449 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
4450 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
4451 #define DEF_POINTER_TYPE(ENUM, TYPE) \
4452 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
4454 #include "builtin-types.def"
4456 #undef DEF_PRIMITIVE_TYPE
4457 #undef DEF_FUNCTION_TYPE_1
4458 #undef DEF_FUNCTION_TYPE_2
4459 #undef DEF_FUNCTION_TYPE_3
4460 #undef DEF_FUNCTION_TYPE_4
4461 #undef DEF_FUNCTION_TYPE_5
4462 #undef DEF_FUNCTION_TYPE_6
4463 #undef DEF_FUNCTION_TYPE_VAR_0
4464 #undef DEF_FUNCTION_TYPE_VAR_1
4465 #undef DEF_FUNCTION_TYPE_VAR_2
4466 #undef DEF_FUNCTION_TYPE_VAR_3
4467 #undef DEF_FUNCTION_TYPE_VAR_4
4468 #undef DEF_FUNCTION_TYPE_VAR_5
4469 #undef DEF_POINTER_TYPE
4470 builtin_types[(int) BT_LAST] = NULL_TREE;
4472 c_init_attributes ();
4474 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
4475 NONANSI_P, ATTRS, IMPLICIT, COND) \
4477 def_builtin_1 (ENUM, NAME, CLASS, \
4478 builtin_types[(int) TYPE], \
4479 builtin_types[(int) LIBTYPE], \
4480 BOTH_P, FALLBACK_P, NONANSI_P, \
4481 built_in_attributes[(int) ATTRS], IMPLICIT);
4482 #include "builtins.def"
4485 targetm.init_builtins ();
4487 build_common_builtin_nodes ();
4493 /* Build tree nodes and builtin functions common to both C and C++ language
4497 c_common_nodes_and_builtins (void)
4499 int char16_type_size;
4500 int char32_type_size;
4501 int wchar_type_size;
4502 tree array_domain_type;
4503 tree va_list_ref_type_node;
4504 tree va_list_arg_type_node;
4506 /* Define `int' and `char' first so that dbx will output them first. */
4507 record_builtin_type (RID_INT, NULL, integer_type_node);
4508 record_builtin_type (RID_CHAR, "char", char_type_node);
4510 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
4511 "unsigned long", "long long unsigned" and "unsigned short" were in C++
4512 but not C. Are the conditionals here needed? */
4513 if (c_dialect_cxx ())
4514 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
4515 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
4516 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
4517 record_builtin_type (RID_MAX, "long unsigned int",
4518 long_unsigned_type_node);
4519 if (c_dialect_cxx ())
4520 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
4521 record_builtin_type (RID_MAX, "long long int",
4522 long_long_integer_type_node);
4523 record_builtin_type (RID_MAX, "long long unsigned int",
4524 long_long_unsigned_type_node);
4525 if (c_dialect_cxx ())
4526 record_builtin_type (RID_MAX, "long long unsigned",
4527 long_long_unsigned_type_node);
4528 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
4529 record_builtin_type (RID_MAX, "short unsigned int",
4530 short_unsigned_type_node);
4531 if (c_dialect_cxx ())
4532 record_builtin_type (RID_MAX, "unsigned short",
4533 short_unsigned_type_node);
4535 /* Define both `signed char' and `unsigned char'. */
4536 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
4537 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
4539 /* These are types that c_common_type_for_size and
4540 c_common_type_for_mode use. */
4541 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4543 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4545 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4547 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4549 #if HOST_BITS_PER_WIDE_INT >= 64
4550 if (targetm.scalar_mode_supported_p (TImode))
4551 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4552 get_identifier ("__int128_t"),
4555 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4556 unsigned_intQI_type_node));
4557 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4558 unsigned_intHI_type_node));
4559 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4560 unsigned_intSI_type_node));
4561 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4562 unsigned_intDI_type_node));
4563 #if HOST_BITS_PER_WIDE_INT >= 64
4564 if (targetm.scalar_mode_supported_p (TImode))
4565 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4566 get_identifier ("__uint128_t"),
4567 unsigned_intTI_type_node));
4570 /* Create the widest literal types. */
4571 widest_integer_literal_type_node
4572 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
4573 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4574 widest_integer_literal_type_node));
4576 widest_unsigned_literal_type_node
4577 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
4578 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
4579 widest_unsigned_literal_type_node));
4581 /* `unsigned long' is the standard type for sizeof.
4582 Note that stddef.h uses `unsigned long',
4583 and this must agree, even if long and int are the same size. */
4585 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
4586 signed_size_type_node = c_common_signed_type (size_type_node);
4587 set_sizetype (size_type_node);
4590 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
4592 build_common_tree_nodes_2 (flag_short_double);
4594 record_builtin_type (RID_FLOAT, NULL, float_type_node);
4595 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
4596 record_builtin_type (RID_MAX, "long double", long_double_type_node);
4598 /* Only supported decimal floating point extension if the target
4599 actually supports underlying modes. */
4600 if (targetm.scalar_mode_supported_p (SDmode)
4601 && targetm.scalar_mode_supported_p (DDmode)
4602 && targetm.scalar_mode_supported_p (TDmode))
4604 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
4605 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
4606 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
4609 if (targetm.fixed_point_supported_p ())
4611 record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
4612 record_builtin_type (RID_FRACT, NULL, fract_type_node);
4613 record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
4614 record_builtin_type (RID_MAX, "long long _Fract",
4615 long_long_fract_type_node);
4616 record_builtin_type (RID_MAX, "unsigned short _Fract",
4617 unsigned_short_fract_type_node);
4618 record_builtin_type (RID_MAX, "unsigned _Fract",
4619 unsigned_fract_type_node);
4620 record_builtin_type (RID_MAX, "unsigned long _Fract",
4621 unsigned_long_fract_type_node);
4622 record_builtin_type (RID_MAX, "unsigned long long _Fract",
4623 unsigned_long_long_fract_type_node);
4624 record_builtin_type (RID_MAX, "_Sat short _Fract",
4625 sat_short_fract_type_node);
4626 record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
4627 record_builtin_type (RID_MAX, "_Sat long _Fract",
4628 sat_long_fract_type_node);
4629 record_builtin_type (RID_MAX, "_Sat long long _Fract",
4630 sat_long_long_fract_type_node);
4631 record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
4632 sat_unsigned_short_fract_type_node);
4633 record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
4634 sat_unsigned_fract_type_node);
4635 record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
4636 sat_unsigned_long_fract_type_node);
4637 record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
4638 sat_unsigned_long_long_fract_type_node);
4639 record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
4640 record_builtin_type (RID_ACCUM, NULL, accum_type_node);
4641 record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
4642 record_builtin_type (RID_MAX, "long long _Accum",
4643 long_long_accum_type_node);
4644 record_builtin_type (RID_MAX, "unsigned short _Accum",
4645 unsigned_short_accum_type_node);
4646 record_builtin_type (RID_MAX, "unsigned _Accum",
4647 unsigned_accum_type_node);
4648 record_builtin_type (RID_MAX, "unsigned long _Accum",
4649 unsigned_long_accum_type_node);
4650 record_builtin_type (RID_MAX, "unsigned long long _Accum",
4651 unsigned_long_long_accum_type_node);
4652 record_builtin_type (RID_MAX, "_Sat short _Accum",
4653 sat_short_accum_type_node);
4654 record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
4655 record_builtin_type (RID_MAX, "_Sat long _Accum",
4656 sat_long_accum_type_node);
4657 record_builtin_type (RID_MAX, "_Sat long long _Accum",
4658 sat_long_long_accum_type_node);
4659 record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
4660 sat_unsigned_short_accum_type_node);
4661 record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
4662 sat_unsigned_accum_type_node);
4663 record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
4664 sat_unsigned_long_accum_type_node);
4665 record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
4666 sat_unsigned_long_long_accum_type_node);
4670 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4671 get_identifier ("complex int"),
4672 complex_integer_type_node));
4673 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4674 get_identifier ("complex float"),
4675 complex_float_type_node));
4676 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
4677 get_identifier ("complex double"),
4678 complex_double_type_node));
4679 lang_hooks.decls.pushdecl
4680 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
4681 complex_long_double_type_node));
4683 if (c_dialect_cxx ())
4684 /* For C++, make fileptr_type_node a distinct void * type until
4685 FILE type is defined. */
4686 fileptr_type_node = build_variant_type_copy (ptr_type_node);
4688 record_builtin_type (RID_VOID, NULL, void_type_node);
4690 /* Set the TYPE_NAME for any variants that were built before
4691 record_builtin_type gave names to the built-in types. */
4693 tree void_name = TYPE_NAME (void_type_node);
4694 TYPE_NAME (void_type_node) = NULL_TREE;
4695 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
4697 TYPE_NAME (void_type_node) = void_name;
4700 /* This node must not be shared. */
4701 void_zero_node = make_node (INTEGER_CST);
4702 TREE_TYPE (void_zero_node) = void_type_node;
4704 void_list_node = build_void_list_node ();
4706 /* Make a type to be the domain of a few array types
4707 whose domains don't really matter.
4708 200 is small enough that it always fits in size_t
4709 and large enough that it can hold most function names for the
4710 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
4711 array_domain_type = build_index_type (size_int (200));
4713 /* Make a type for arrays of characters.
4714 With luck nothing will ever really depend on the length of this
4716 char_array_type_node
4717 = build_array_type (char_type_node, array_domain_type);
4719 /* Likewise for arrays of ints. */
4721 = build_array_type (integer_type_node, array_domain_type);
4723 string_type_node = build_pointer_type (char_type_node);
4724 const_string_type_node
4725 = build_pointer_type (build_qualified_type
4726 (char_type_node, TYPE_QUAL_CONST));
4728 /* This is special for C++ so functions can be overloaded. */
4729 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
4730 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
4731 wchar_type_size = TYPE_PRECISION (wchar_type_node);
4732 if (c_dialect_cxx ())
4734 if (TYPE_UNSIGNED (wchar_type_node))
4735 wchar_type_node = make_unsigned_type (wchar_type_size);
4737 wchar_type_node = make_signed_type (wchar_type_size);
4738 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
4742 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
4743 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
4746 /* This is for wide string constants. */
4747 wchar_array_type_node
4748 = build_array_type (wchar_type_node, array_domain_type);
4750 /* Define 'char16_t'. */
4751 char16_type_node = get_identifier (CHAR16_TYPE);
4752 char16_type_node = TREE_TYPE (identifier_global_value (char16_type_node));
4753 char16_type_size = TYPE_PRECISION (char16_type_node);
4754 if (c_dialect_cxx ())
4756 char16_type_node = make_unsigned_type (char16_type_size);
4758 if (cxx_dialect == cxx0x)
4759 record_builtin_type (RID_CHAR16, "char16_t", char16_type_node);
4762 /* This is for UTF-16 string constants. */
4763 char16_array_type_node
4764 = build_array_type (char16_type_node, array_domain_type);
4766 /* Define 'char32_t'. */
4767 char32_type_node = get_identifier (CHAR32_TYPE);
4768 char32_type_node = TREE_TYPE (identifier_global_value (char32_type_node));
4769 char32_type_size = TYPE_PRECISION (char32_type_node);
4770 if (c_dialect_cxx ())
4772 char32_type_node = make_unsigned_type (char32_type_size);
4774 if (cxx_dialect == cxx0x)
4775 record_builtin_type (RID_CHAR32, "char32_t", char32_type_node);
4778 /* This is for UTF-32 string constants. */
4779 char32_array_type_node
4780 = build_array_type (char32_type_node, array_domain_type);
4783 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
4786 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
4788 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
4790 default_function_type = build_function_type (integer_type_node, NULL_TREE);
4792 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
4793 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
4795 lang_hooks.decls.pushdecl
4796 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
4797 va_list_type_node));
4798 #ifdef TARGET_ENUM_VA_LIST
4803 for (l = 0; TARGET_ENUM_VA_LIST (l, &pname, &ptype); ++l)
4805 lang_hooks.decls.pushdecl
4806 (build_decl (TYPE_DECL, get_identifier (pname),
4813 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
4815 va_list_arg_type_node = va_list_ref_type_node =
4816 build_pointer_type (TREE_TYPE (va_list_type_node));
4820 va_list_arg_type_node = va_list_type_node;
4821 va_list_ref_type_node = build_reference_type (va_list_type_node);
4824 if (!flag_preprocess_only)
4825 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
4827 main_identifier_node = get_identifier ("main");
4829 /* Create the built-in __null node. It is important that this is
4831 null_node = make_node (INTEGER_CST);
4832 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
4834 /* Since builtin_types isn't gc'ed, don't export these nodes. */
4835 memset (builtin_types, 0, sizeof (builtin_types));
4838 /* Look up the function in built_in_decls that corresponds to DECL
4839 and set ASMSPEC as its user assembler name. DECL must be a
4840 function decl that declares a builtin. */
4843 set_builtin_user_assembler_name (tree decl, const char *asmspec)
4846 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
4847 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
4850 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
4851 set_user_assembler_name (builtin, asmspec);
4852 switch (DECL_FUNCTION_CODE (decl))
4854 case BUILT_IN_MEMCPY:
4855 init_block_move_fn (asmspec);
4856 memcpy_libfunc = set_user_assembler_libfunc ("memcpy", asmspec);
4858 case BUILT_IN_MEMSET:
4859 init_block_clear_fn (asmspec);
4860 memset_libfunc = set_user_assembler_libfunc ("memset", asmspec);
4862 case BUILT_IN_MEMMOVE:
4863 memmove_libfunc = set_user_assembler_libfunc ("memmove", asmspec);
4865 case BUILT_IN_MEMCMP:
4866 memcmp_libfunc = set_user_assembler_libfunc ("memcmp", asmspec);
4868 case BUILT_IN_ABORT:
4869 abort_libfunc = set_user_assembler_libfunc ("abort", asmspec);
4876 /* The number of named compound-literals generated thus far. */
4877 static GTY(()) int compound_literal_number;
4879 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
4882 set_compound_literal_name (tree decl)
4885 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
4886 compound_literal_number);
4887 compound_literal_number++;
4888 DECL_NAME (decl) = get_identifier (name);
4892 build_va_arg (tree expr, tree type)
4894 return build1 (VA_ARG_EXPR, type, expr);
4898 /* Linked list of disabled built-in functions. */
4900 typedef struct disabled_builtin
4903 struct disabled_builtin *next;
4905 static disabled_builtin *disabled_builtins = NULL;
4907 static bool builtin_function_disabled_p (const char *);
4909 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
4910 begins with "__builtin_", give an error. */
4913 disable_builtin_function (const char *name)
4915 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
4916 error ("cannot disable built-in function %qs", name);
4919 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
4920 new_disabled_builtin->name = name;
4921 new_disabled_builtin->next = disabled_builtins;
4922 disabled_builtins = new_disabled_builtin;
4927 /* Return true if the built-in function NAME has been disabled, false
4931 builtin_function_disabled_p (const char *name)
4933 disabled_builtin *p;
4934 for (p = disabled_builtins; p != NULL; p = p->next)
4936 if (strcmp (name, p->name) == 0)
4943 /* Worker for DEF_BUILTIN.
4944 Possibly define a builtin function with one or two names.
4945 Does not declare a non-__builtin_ function if flag_no_builtin, or if
4946 nonansi_p and flag_no_nonansi_builtin. */
4949 def_builtin_1 (enum built_in_function fncode,
4951 enum built_in_class fnclass,
4952 tree fntype, tree libtype,
4953 bool both_p, bool fallback_p, bool nonansi_p,
4954 tree fnattrs, bool implicit_p)
4957 const char *libname;
4959 if (fntype == error_mark_node)
4962 gcc_assert ((!both_p && !fallback_p)
4963 || !strncmp (name, "__builtin_",
4964 strlen ("__builtin_")));
4966 libname = name + strlen ("__builtin_");
4967 decl = add_builtin_function (name, fntype, fncode, fnclass,
4968 (fallback_p ? libname : NULL),
4971 && !flag_no_builtin && !builtin_function_disabled_p (libname)
4972 && !(nonansi_p && flag_no_nonansi_builtin))
4973 add_builtin_function (libname, libtype, fncode, fnclass,
4976 built_in_decls[(int) fncode] = decl;
4978 implicit_built_in_decls[(int) fncode] = decl;
4981 /* Nonzero if the type T promotes to int. This is (nearly) the
4982 integral promotions defined in ISO C99 6.3.1.1/2. */
4985 c_promoting_integer_type_p (const_tree t)
4987 switch (TREE_CODE (t))
4990 return (TYPE_MAIN_VARIANT (t) == char_type_node
4991 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
4992 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
4993 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
4994 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
4995 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
4998 /* ??? Technically all enumerations not larger than an int
4999 promote to an int. But this is used along code paths
5000 that only want to notice a size change. */
5001 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
5011 /* Return 1 if PARMS specifies a fixed number of parameters
5012 and none of their types is affected by default promotions. */
5015 self_promoting_args_p (const_tree parms)
5018 for (t = parms; t; t = TREE_CHAIN (t))
5020 tree type = TREE_VALUE (t);
5022 if (type == error_mark_node)
5025 if (TREE_CHAIN (t) == 0 && type != void_type_node)
5031 if (TYPE_MAIN_VARIANT (type) == float_type_node)
5034 if (c_promoting_integer_type_p (type))
5040 /* Recursively remove any '*' or '&' operator from TYPE. */
5042 strip_pointer_operator (tree t)
5044 while (POINTER_TYPE_P (t))
5049 /* Recursively remove pointer or array type from TYPE. */
5051 strip_pointer_or_array_types (tree t)
5053 while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
5058 /* Used to compare case labels. K1 and K2 are actually tree nodes
5059 representing case labels, or NULL_TREE for a `default' label.
5060 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
5061 K2, and 0 if K1 and K2 are equal. */
5064 case_compare (splay_tree_key k1, splay_tree_key k2)
5066 /* Consider a NULL key (such as arises with a `default' label) to be
5067 smaller than anything else. */
5073 return tree_int_cst_compare ((tree) k1, (tree) k2);
5076 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
5077 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
5078 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
5079 case label was declared using the usual C/C++ syntax, rather than
5080 the GNU case range extension. CASES is a tree containing all the
5081 case ranges processed so far; COND is the condition for the
5082 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
5083 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
5086 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
5087 tree low_value, tree high_value)
5092 splay_tree_node node;
5094 /* Create the LABEL_DECL itself. */
5095 label = create_artificial_label ();
5097 /* If there was an error processing the switch condition, bail now
5098 before we get more confused. */
5099 if (!cond || cond == error_mark_node)
5102 if ((low_value && TREE_TYPE (low_value)
5103 && POINTER_TYPE_P (TREE_TYPE (low_value)))
5104 || (high_value && TREE_TYPE (high_value)
5105 && POINTER_TYPE_P (TREE_TYPE (high_value))))
5107 error ("pointers are not permitted as case values");
5111 /* Case ranges are a GNU extension. */
5113 pedwarn (input_location, OPT_pedantic,
5114 "range expressions in switch statements are non-standard");
5116 type = TREE_TYPE (cond);
5119 low_value = check_case_value (low_value);
5120 low_value = convert_and_check (type, low_value);
5121 if (low_value == error_mark_node)
5126 high_value = check_case_value (high_value);
5127 high_value = convert_and_check (type, high_value);
5128 if (high_value == error_mark_node)
5132 if (low_value && high_value)
5134 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
5135 really a case range, even though it was written that way.
5136 Remove the HIGH_VALUE to simplify later processing. */
5137 if (tree_int_cst_equal (low_value, high_value))
5138 high_value = NULL_TREE;
5139 else if (!tree_int_cst_lt (low_value, high_value))
5140 warning (0, "empty range specified");
5143 /* See if the case is in range of the type of the original testing
5144 expression. If both low_value and high_value are out of range,
5145 don't insert the case label and return NULL_TREE. */
5147 && !check_case_bounds (type, orig_type,
5148 &low_value, high_value ? &high_value : NULL))
5151 /* Look up the LOW_VALUE in the table of case labels we already
5153 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
5154 /* If there was not an exact match, check for overlapping ranges.
5155 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
5156 that's a `default' label and the only overlap is an exact match. */
5157 if (!node && (low_value || high_value))
5159 splay_tree_node low_bound;
5160 splay_tree_node high_bound;
5162 /* Even though there wasn't an exact match, there might be an
5163 overlap between this case range and another case range.
5164 Since we've (inductively) not allowed any overlapping case
5165 ranges, we simply need to find the greatest low case label
5166 that is smaller that LOW_VALUE, and the smallest low case
5167 label that is greater than LOW_VALUE. If there is an overlap
5168 it will occur in one of these two ranges. */
5169 low_bound = splay_tree_predecessor (cases,
5170 (splay_tree_key) low_value);
5171 high_bound = splay_tree_successor (cases,
5172 (splay_tree_key) low_value);
5174 /* Check to see if the LOW_BOUND overlaps. It is smaller than
5175 the LOW_VALUE, so there is no need to check unless the
5176 LOW_BOUND is in fact itself a case range. */
5178 && CASE_HIGH ((tree) low_bound->value)
5179 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
5182 /* Check to see if the HIGH_BOUND overlaps. The low end of that
5183 range is bigger than the low end of the current range, so we
5184 are only interested if the current range is a real range, and
5185 not an ordinary case label. */
5188 && (tree_int_cst_compare ((tree) high_bound->key,
5193 /* If there was an overlap, issue an error. */
5196 tree duplicate = CASE_LABEL ((tree) node->value);
5200 error ("duplicate (or overlapping) case value");
5201 error ("%Jthis is the first entry overlapping that value", duplicate);
5205 error ("duplicate case value") ;
5206 error ("%Jpreviously used here", duplicate);
5210 error ("multiple default labels in one switch");
5211 error ("%Jthis is the first default label", duplicate);
5216 /* Add a CASE_LABEL to the statement-tree. */
5217 case_label = add_stmt (build_case_label (low_value, high_value, label));
5218 /* Register this case label in the splay tree. */
5219 splay_tree_insert (cases,
5220 (splay_tree_key) low_value,
5221 (splay_tree_value) case_label);
5226 /* Add a label so that the back-end doesn't think that the beginning of
5227 the switch is unreachable. Note that we do not add a case label, as
5228 that just leads to duplicates and thence to failure later on. */
5231 tree t = create_artificial_label ();
5232 add_stmt (build_stmt (LABEL_EXPR, t));
5234 return error_mark_node;
5237 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
5238 Used to verify that case values match up with enumerator values. */
5241 match_case_to_enum_1 (tree key, tree type, tree label)
5243 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
5245 /* ??? Not working too hard to print the double-word value.
5246 Should perhaps be done with %lwd in the diagnostic routines? */
5247 if (TREE_INT_CST_HIGH (key) == 0)
5248 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
5249 TREE_INT_CST_LOW (key));
5250 else if (!TYPE_UNSIGNED (type)
5251 && TREE_INT_CST_HIGH (key) == -1
5252 && TREE_INT_CST_LOW (key) != 0)
5253 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
5254 -TREE_INT_CST_LOW (key));
5256 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
5257 (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (key),
5258 (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (key));
5260 if (TYPE_NAME (type) == 0)
5261 warning (warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5262 "%Jcase value %qs not in enumerated type",
5263 CASE_LABEL (label), buf);
5265 warning (warn_switch ? OPT_Wswitch : OPT_Wswitch_enum,
5266 "%Jcase value %qs not in enumerated type %qT",
5267 CASE_LABEL (label), buf, type);
5270 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
5271 Used to verify that case values match up with enumerator values. */
5274 match_case_to_enum (splay_tree_node node, void *data)
5276 tree label = (tree) node->value;
5277 tree type = (tree) data;
5279 /* Skip default case. */
5280 if (!CASE_LOW (label))
5283 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
5284 when we did our enum->case scan. Reset our scratch bit after. */
5285 if (!CASE_LOW_SEEN (label))
5286 match_case_to_enum_1 (CASE_LOW (label), type, label);
5288 CASE_LOW_SEEN (label) = 0;
5290 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
5291 not set, that means that CASE_HIGH did not appear when we did our
5292 enum->case scan. Reset our scratch bit after. */
5293 if (CASE_HIGH (label))
5295 if (!CASE_HIGH_SEEN (label))
5296 match_case_to_enum_1 (CASE_HIGH (label), type, label);
5298 CASE_HIGH_SEEN (label) = 0;
5304 /* Handle -Wswitch*. Called from the front end after parsing the
5305 switch construct. */
5306 /* ??? Should probably be somewhere generic, since other languages
5307 besides C and C++ would want this. At the moment, however, C/C++
5308 are the only tree-ssa languages that support enumerations at all,
5309 so the point is moot. */
5312 c_do_switch_warnings (splay_tree cases, location_t switch_location,
5313 tree type, tree cond)
5315 splay_tree_node default_node;
5316 splay_tree_node node;
5318 int saved_warn_switch;
5320 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
5323 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
5325 warning (OPT_Wswitch_default, "%Hswitch missing default case",
5328 /* From here on, we only care about about enumerated types. */
5329 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
5332 /* If the switch expression was an enumerated type, check that
5333 exactly all enumeration literals are covered by the cases.
5334 The check is made when -Wswitch was specified and there is no
5335 default case, or when -Wswitch-enum was specified. */
5337 if (!warn_switch_enum
5338 && !(warn_switch && !default_node))
5341 /* Clearing COND if it is not an integer constant simplifies
5342 the tests inside the loop below. */
5343 if (TREE_CODE (cond) != INTEGER_CST)
5346 /* The time complexity here is O(N*lg(N)) worst case, but for the
5347 common case of monotonically increasing enumerators, it is
5348 O(N), since the nature of the splay tree will keep the next
5349 element adjacent to the root at all times. */
5351 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
5353 tree value = TREE_VALUE (chain);
5354 if (TREE_CODE (value) == CONST_DECL)
5355 value = DECL_INITIAL (value);
5356 node = splay_tree_lookup (cases, (splay_tree_key) value);
5359 /* Mark the CASE_LOW part of the case entry as seen. */
5360 tree label = (tree) node->value;
5361 CASE_LOW_SEEN (label) = 1;
5365 /* Even though there wasn't an exact match, there might be a
5366 case range which includes the enumerator's value. */
5367 node = splay_tree_predecessor (cases, (splay_tree_key) value);
5368 if (node && CASE_HIGH ((tree) node->value))
5370 tree label = (tree) node->value;
5371 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
5374 /* If we match the upper bound exactly, mark the CASE_HIGH
5375 part of the case entry as seen. */
5377 CASE_HIGH_SEEN (label) = 1;
5382 /* We've now determined that this enumerated literal isn't
5383 handled by the case labels of the switch statement. */
5385 /* If the switch expression is a constant, we only really care
5386 about whether that constant is handled by the switch. */
5387 if (cond && tree_int_cst_compare (cond, value))
5390 /* If there is a default_node, the only relevant option is
5391 Wswitch-enum. Otherwise, if both are enabled then we prefer
5392 to warn using -Wswitch because -Wswitch is enabled by -Wall
5393 while -Wswitch-enum is explicit. */
5394 warning ((default_node || !warn_switch)
5395 ? OPT_Wswitch_enum : OPT_Wswitch,
5396 "%Henumeration value %qE not handled in switch",
5397 &switch_location, TREE_PURPOSE (chain));
5400 /* Warn if there are case expressions that don't correspond to
5401 enumerators. This can occur since C and C++ don't enforce
5402 type-checking of assignments to enumeration variables.
5404 The time complexity here is now always O(N) worst case, since
5405 we should have marked both the lower bound and upper bound of
5406 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
5407 above. This scan also resets those fields. */
5409 /* If there is a default_node, the only relevant option is
5410 Wswitch-enum. Otherwise, if both are enabled then we prefer
5411 to warn using -Wswitch because -Wswitch is enabled by -Wall
5412 while -Wswitch-enum is explicit. */
5413 saved_warn_switch = warn_switch;
5416 splay_tree_foreach (cases, match_case_to_enum, type);
5417 warn_switch = saved_warn_switch;
5421 /* Finish an expression taking the address of LABEL (an
5422 IDENTIFIER_NODE). Returns an expression for the address.
5424 LOC is the location for the expression returned. */
5427 finish_label_address_expr (tree label, location_t loc)
5431 pedwarn (input_location, OPT_pedantic, "taking the address of a label is non-standard");
5433 if (label == error_mark_node)
5434 return error_mark_node;
5436 label = lookup_label (label);
5437 if (label == NULL_TREE)
5438 result = null_pointer_node;
5441 TREE_USED (label) = 1;
5442 result = build1 (ADDR_EXPR, ptr_type_node, label);
5443 /* The current function in not necessarily uninlinable.
5444 Computed gotos are incompatible with inlining, but the value
5445 here could be used only in a diagnostic, for example. */
5446 protected_set_expr_location (result, loc);
5453 /* Given a boolean expression ARG, return a tree representing an increment
5454 or decrement (as indicated by CODE) of ARG. The front end must check for
5455 invalid cases (e.g., decrement in C++). */
5457 boolean_increment (enum tree_code code, tree arg)
5460 tree true_res = build_int_cst (TREE_TYPE (arg), 1);
5462 arg = stabilize_reference (arg);
5465 case PREINCREMENT_EXPR:
5466 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5468 case POSTINCREMENT_EXPR:
5469 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
5470 arg = save_expr (arg);
5471 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5472 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5474 case PREDECREMENT_EXPR:
5475 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5476 invert_truthvalue (arg));
5478 case POSTDECREMENT_EXPR:
5479 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
5480 invert_truthvalue (arg));
5481 arg = save_expr (arg);
5482 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
5483 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
5488 TREE_SIDE_EFFECTS (val) = 1;
5492 /* Built-in macros for stddef.h, that require macros defined in this
5495 c_stddef_cpp_builtins(void)
5497 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
5498 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
5499 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
5500 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
5501 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
5502 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
5503 builtin_define_with_value ("__CHAR16_TYPE__", CHAR16_TYPE, 0);
5504 builtin_define_with_value ("__CHAR32_TYPE__", CHAR32_TYPE, 0);
5508 c_init_attributes (void)
5510 /* Fill in the built_in_attributes array. */
5511 #define DEF_ATTR_NULL_TREE(ENUM) \
5512 built_in_attributes[(int) ENUM] = NULL_TREE;
5513 #define DEF_ATTR_INT(ENUM, VALUE) \
5514 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
5515 #define DEF_ATTR_IDENT(ENUM, STRING) \
5516 built_in_attributes[(int) ENUM] = get_identifier (STRING);
5517 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
5518 built_in_attributes[(int) ENUM] \
5519 = tree_cons (built_in_attributes[(int) PURPOSE], \
5520 built_in_attributes[(int) VALUE], \
5521 built_in_attributes[(int) CHAIN]);
5522 #include "builtin-attrs.def"
5523 #undef DEF_ATTR_NULL_TREE
5525 #undef DEF_ATTR_IDENT
5526 #undef DEF_ATTR_TREE_LIST
5529 /* Attribute handlers common to C front ends. */
5531 /* Handle a "packed" attribute; arguments as in
5532 struct attribute_spec.handler. */
5535 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5536 int flags, bool *no_add_attrs)
5540 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5541 *node = build_variant_type_copy (*node);
5542 TYPE_PACKED (*node) = 1;
5544 else if (TREE_CODE (*node) == FIELD_DECL)
5546 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT
5547 /* Still pack bitfields. */
5548 && ! DECL_INITIAL (*node))
5549 warning (OPT_Wattributes,
5550 "%qE attribute ignored for field of type %qT",
5551 name, TREE_TYPE (*node));
5553 DECL_PACKED (*node) = 1;
5555 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
5556 used for DECL_REGISTER. It wouldn't mean anything anyway.
5557 We can't set DECL_PACKED on the type of a TYPE_DECL, because
5558 that changes what the typedef is typing. */
5561 warning (OPT_Wattributes, "%qE attribute ignored", name);
5562 *no_add_attrs = true;
5568 /* Handle a "nocommon" attribute; arguments as in
5569 struct attribute_spec.handler. */
5572 handle_nocommon_attribute (tree *node, tree name,
5573 tree ARG_UNUSED (args),
5574 int ARG_UNUSED (flags), bool *no_add_attrs)
5576 if (TREE_CODE (*node) == VAR_DECL)
5577 DECL_COMMON (*node) = 0;
5580 warning (OPT_Wattributes, "%qE attribute ignored", name);
5581 *no_add_attrs = true;
5587 /* Handle a "common" attribute; arguments as in
5588 struct attribute_spec.handler. */
5591 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5592 int ARG_UNUSED (flags), bool *no_add_attrs)
5594 if (TREE_CODE (*node) == VAR_DECL)
5595 DECL_COMMON (*node) = 1;
5598 warning (OPT_Wattributes, "%qE attribute ignored", name);
5599 *no_add_attrs = true;
5605 /* Handle a "noreturn" attribute; arguments as in
5606 struct attribute_spec.handler. */
5609 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5610 int ARG_UNUSED (flags), bool *no_add_attrs)
5612 tree type = TREE_TYPE (*node);
5614 /* See FIXME comment in c_common_attribute_table. */
5615 if (TREE_CODE (*node) == FUNCTION_DECL)
5616 TREE_THIS_VOLATILE (*node) = 1;
5617 else if (TREE_CODE (type) == POINTER_TYPE
5618 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5620 = build_pointer_type
5621 (build_type_variant (TREE_TYPE (type),
5622 TYPE_READONLY (TREE_TYPE (type)), 1));
5625 warning (OPT_Wattributes, "%qE attribute ignored", name);
5626 *no_add_attrs = true;
5632 /* Handle a "hot" and attribute; arguments as in
5633 struct attribute_spec.handler. */
5636 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5637 int ARG_UNUSED (flags), bool *no_add_attrs)
5639 if (TREE_CODE (*node) == FUNCTION_DECL)
5641 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
5643 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5645 *no_add_attrs = true;
5647 /* Most of the rest of the hot processing is done later with
5648 lookup_attribute. */
5652 warning (OPT_Wattributes, "%qE attribute ignored", name);
5653 *no_add_attrs = true;
5658 /* Handle a "cold" and attribute; arguments as in
5659 struct attribute_spec.handler. */
5662 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5663 int ARG_UNUSED (flags), bool *no_add_attrs)
5665 if (TREE_CODE (*node) == FUNCTION_DECL)
5667 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
5669 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
5671 *no_add_attrs = true;
5673 /* Most of the rest of the cold processing is done later with
5674 lookup_attribute. */
5678 warning (OPT_Wattributes, "%qE attribute ignored", name);
5679 *no_add_attrs = true;
5685 /* Handle a "noinline" attribute; arguments as in
5686 struct attribute_spec.handler. */
5689 handle_noinline_attribute (tree *node, tree name,
5690 tree ARG_UNUSED (args),
5691 int ARG_UNUSED (flags), bool *no_add_attrs)
5693 if (TREE_CODE (*node) == FUNCTION_DECL)
5694 DECL_UNINLINABLE (*node) = 1;
5697 warning (OPT_Wattributes, "%qE attribute ignored", name);
5698 *no_add_attrs = true;
5704 /* Handle a "always_inline" attribute; arguments as in
5705 struct attribute_spec.handler. */
5708 handle_always_inline_attribute (tree *node, tree name,
5709 tree ARG_UNUSED (args),
5710 int ARG_UNUSED (flags),
5713 if (TREE_CODE (*node) == FUNCTION_DECL)
5715 /* Set the attribute and mark it for disregarding inline
5717 DECL_DISREGARD_INLINE_LIMITS (*node) = 1;
5721 warning (OPT_Wattributes, "%qE attribute ignored", name);
5722 *no_add_attrs = true;
5728 /* Handle a "gnu_inline" attribute; arguments as in
5729 struct attribute_spec.handler. */
5732 handle_gnu_inline_attribute (tree *node, tree name,
5733 tree ARG_UNUSED (args),
5734 int ARG_UNUSED (flags),
5737 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
5739 /* Do nothing else, just set the attribute. We'll get at
5740 it later with lookup_attribute. */
5744 warning (OPT_Wattributes, "%qE attribute ignored", name);
5745 *no_add_attrs = true;
5751 /* Handle an "artificial" attribute; arguments as in
5752 struct attribute_spec.handler. */
5755 handle_artificial_attribute (tree *node, tree name,
5756 tree ARG_UNUSED (args),
5757 int ARG_UNUSED (flags),
5760 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
5762 /* Do nothing else, just set the attribute. We'll get at
5763 it later with lookup_attribute. */
5767 warning (OPT_Wattributes, "%qE attribute ignored", name);
5768 *no_add_attrs = true;
5774 /* Handle a "flatten" attribute; arguments as in
5775 struct attribute_spec.handler. */
5778 handle_flatten_attribute (tree *node, tree name,
5779 tree args ATTRIBUTE_UNUSED,
5780 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5782 if (TREE_CODE (*node) == FUNCTION_DECL)
5783 /* Do nothing else, just set the attribute. We'll get at
5784 it later with lookup_attribute. */
5788 warning (OPT_Wattributes, "%qE attribute ignored", name);
5789 *no_add_attrs = true;
5795 /* Handle a "warning" or "error" attribute; arguments as in
5796 struct attribute_spec.handler. */
5799 handle_error_attribute (tree *node, tree name, tree args,
5800 int ARG_UNUSED (flags), bool *no_add_attrs)
5802 if (TREE_CODE (*node) == FUNCTION_DECL
5803 || TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5804 /* Do nothing else, just set the attribute. We'll get at
5805 it later with lookup_attribute. */
5809 warning (OPT_Wattributes, "%qE attribute ignored", name);
5810 *no_add_attrs = true;
5816 /* Handle a "used" attribute; arguments as in
5817 struct attribute_spec.handler. */
5820 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
5821 int ARG_UNUSED (flags), bool *no_add_attrs)
5825 if (TREE_CODE (node) == FUNCTION_DECL
5826 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
5828 TREE_USED (node) = 1;
5829 DECL_PRESERVE_P (node) = 1;
5833 warning (OPT_Wattributes, "%qE attribute ignored", name);
5834 *no_add_attrs = true;
5840 /* Handle a "unused" attribute; arguments as in
5841 struct attribute_spec.handler. */
5844 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5845 int flags, bool *no_add_attrs)
5851 if (TREE_CODE (decl) == PARM_DECL
5852 || TREE_CODE (decl) == VAR_DECL
5853 || TREE_CODE (decl) == FUNCTION_DECL
5854 || TREE_CODE (decl) == LABEL_DECL
5855 || TREE_CODE (decl) == TYPE_DECL)
5856 TREE_USED (decl) = 1;
5859 warning (OPT_Wattributes, "%qE attribute ignored", name);
5860 *no_add_attrs = true;
5865 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5866 *node = build_variant_type_copy (*node);
5867 TREE_USED (*node) = 1;
5873 /* Handle a "externally_visible" attribute; arguments as in
5874 struct attribute_spec.handler. */
5877 handle_externally_visible_attribute (tree *pnode, tree name,
5878 tree ARG_UNUSED (args),
5879 int ARG_UNUSED (flags),
5884 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
5886 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
5887 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
5889 warning (OPT_Wattributes,
5890 "%qE attribute have effect only on public objects", name);
5891 *no_add_attrs = true;
5896 warning (OPT_Wattributes, "%qE attribute ignored", name);
5897 *no_add_attrs = true;
5903 /* Handle a "const" attribute; arguments as in
5904 struct attribute_spec.handler. */
5907 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5908 int ARG_UNUSED (flags), bool *no_add_attrs)
5910 tree type = TREE_TYPE (*node);
5912 /* See FIXME comment on noreturn in c_common_attribute_table. */
5913 if (TREE_CODE (*node) == FUNCTION_DECL)
5914 TREE_READONLY (*node) = 1;
5915 else if (TREE_CODE (type) == POINTER_TYPE
5916 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5918 = build_pointer_type
5919 (build_type_variant (TREE_TYPE (type), 1,
5920 TREE_THIS_VOLATILE (TREE_TYPE (type))));
5923 warning (OPT_Wattributes, "%qE attribute ignored", name);
5924 *no_add_attrs = true;
5930 /* Handle a "transparent_union" attribute; arguments as in
5931 struct attribute_spec.handler. */
5934 handle_transparent_union_attribute (tree *node, tree name,
5935 tree ARG_UNUSED (args), int flags,
5940 *no_add_attrs = true;
5942 if (TREE_CODE (*node) == TYPE_DECL)
5943 node = &TREE_TYPE (*node);
5946 if (TREE_CODE (type) == UNION_TYPE)
5948 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
5949 the code in finish_struct. */
5950 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5952 if (TYPE_FIELDS (type) == NULL_TREE
5953 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
5956 /* A type variant isn't good enough, since we don't a cast
5957 to such a type removed as a no-op. */
5958 *node = type = build_duplicate_type (type);
5961 TYPE_TRANSPARENT_UNION (type) = 1;
5966 warning (OPT_Wattributes, "%qE attribute ignored", name);
5970 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
5971 get the requested priority for a constructor or destructor,
5972 possibly issuing diagnostics for invalid or reserved
5975 static priority_type
5976 get_priority (tree args, bool is_destructor)
5982 return DEFAULT_INIT_PRIORITY;
5984 if (!SUPPORTS_INIT_PRIORITY)
5987 error ("destructor priorities are not supported");
5989 error ("constructor priorities are not supported");
5990 return DEFAULT_INIT_PRIORITY;
5993 arg = TREE_VALUE (args);
5994 if (!host_integerp (arg, /*pos=*/0)
5995 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
5998 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
5999 if (pri < 0 || pri > MAX_INIT_PRIORITY)
6002 if (pri <= MAX_RESERVED_INIT_PRIORITY)
6006 "destructor priorities from 0 to %d are reserved "
6007 "for the implementation",
6008 MAX_RESERVED_INIT_PRIORITY);
6011 "constructor priorities from 0 to %d are reserved "
6012 "for the implementation",
6013 MAX_RESERVED_INIT_PRIORITY);
6019 error ("destructor priorities must be integers from 0 to %d inclusive",
6022 error ("constructor priorities must be integers from 0 to %d inclusive",
6024 return DEFAULT_INIT_PRIORITY;
6027 /* Handle a "constructor" attribute; arguments as in
6028 struct attribute_spec.handler. */
6031 handle_constructor_attribute (tree *node, tree name, tree args,
6032 int ARG_UNUSED (flags),
6036 tree type = TREE_TYPE (decl);
6038 if (TREE_CODE (decl) == FUNCTION_DECL
6039 && TREE_CODE (type) == FUNCTION_TYPE
6040 && decl_function_context (decl) == 0)
6042 priority_type priority;
6043 DECL_STATIC_CONSTRUCTOR (decl) = 1;
6044 priority = get_priority (args, /*is_destructor=*/false);
6045 SET_DECL_INIT_PRIORITY (decl, priority);
6046 TREE_USED (decl) = 1;
6050 warning (OPT_Wattributes, "%qE attribute ignored", name);
6051 *no_add_attrs = true;
6057 /* Handle a "destructor" attribute; arguments as in
6058 struct attribute_spec.handler. */
6061 handle_destructor_attribute (tree *node, tree name, tree args,
6062 int ARG_UNUSED (flags),
6066 tree type = TREE_TYPE (decl);
6068 if (TREE_CODE (decl) == FUNCTION_DECL
6069 && TREE_CODE (type) == FUNCTION_TYPE
6070 && decl_function_context (decl) == 0)
6072 priority_type priority;
6073 DECL_STATIC_DESTRUCTOR (decl) = 1;
6074 priority = get_priority (args, /*is_destructor=*/true);
6075 SET_DECL_FINI_PRIORITY (decl, priority);
6076 TREE_USED (decl) = 1;
6080 warning (OPT_Wattributes, "%qE attribute ignored", name);
6081 *no_add_attrs = true;
6087 /* Handle a "mode" attribute; arguments as in
6088 struct attribute_spec.handler. */
6091 handle_mode_attribute (tree *node, tree name, tree args,
6092 int ARG_UNUSED (flags), bool *no_add_attrs)
6096 *no_add_attrs = true;
6098 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
6099 warning (OPT_Wattributes, "%qE attribute ignored", name);
6103 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
6104 int len = strlen (p);
6105 enum machine_mode mode = VOIDmode;
6109 if (len > 4 && p[0] == '_' && p[1] == '_'
6110 && p[len - 1] == '_' && p[len - 2] == '_')
6112 char *newp = (char *) alloca (len - 1);
6114 strcpy (newp, &p[2]);
6115 newp[len - 4] = '\0';
6119 /* Change this type to have a type with the specified mode.
6120 First check for the special modes. */
6121 if (!strcmp (p, "byte"))
6123 else if (!strcmp (p, "word"))
6125 else if (!strcmp (p, "pointer"))
6127 else if (!strcmp (p, "libgcc_cmp_return"))
6128 mode = targetm.libgcc_cmp_return_mode ();
6129 else if (!strcmp (p, "libgcc_shift_count"))
6130 mode = targetm.libgcc_shift_count_mode ();
6131 else if (!strcmp (p, "unwind_word"))
6132 mode = targetm.unwind_word_mode ();
6134 for (j = 0; j < NUM_MACHINE_MODES; j++)
6135 if (!strcmp (p, GET_MODE_NAME (j)))
6137 mode = (enum machine_mode) j;
6141 if (mode == VOIDmode)
6143 error ("unknown machine mode %qs", p);
6148 switch (GET_MODE_CLASS (mode))
6151 case MODE_PARTIAL_INT:
6153 case MODE_DECIMAL_FLOAT:
6158 valid_mode = targetm.scalar_mode_supported_p (mode);
6161 case MODE_COMPLEX_INT:
6162 case MODE_COMPLEX_FLOAT:
6163 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
6166 case MODE_VECTOR_INT:
6167 case MODE_VECTOR_FLOAT:
6168 case MODE_VECTOR_FRACT:
6169 case MODE_VECTOR_UFRACT:
6170 case MODE_VECTOR_ACCUM:
6171 case MODE_VECTOR_UACCUM:
6172 warning (OPT_Wattributes, "specifying vector types with "
6173 "__attribute__ ((mode)) is deprecated");
6174 warning (OPT_Wattributes,
6175 "use __attribute__ ((vector_size)) instead");
6176 valid_mode = vector_mode_valid_p (mode);
6184 error ("unable to emulate %qs", p);
6188 if (POINTER_TYPE_P (type))
6190 tree (*fn)(tree, enum machine_mode, bool);
6192 if (!targetm.valid_pointer_mode (mode))
6194 error ("invalid pointer mode %qs", p);
6198 if (TREE_CODE (type) == POINTER_TYPE)
6199 fn = build_pointer_type_for_mode;
6201 fn = build_reference_type_for_mode;
6202 typefm = fn (TREE_TYPE (type), mode, false);
6206 /* For fixed-point modes, we need to test if the signness of type
6207 and the machine mode are consistent. */
6208 if (ALL_FIXED_POINT_MODE_P (mode)
6209 && TYPE_UNSIGNED (type) != UNSIGNED_FIXED_POINT_MODE_P (mode))
6211 error ("signness of type and machine mode %qs don't match", p);
6214 /* For fixed-point modes, we need to pass saturating info. */
6215 typefm = lang_hooks.types.type_for_mode (mode,
6216 ALL_FIXED_POINT_MODE_P (mode) ? TYPE_SATURATING (type)
6217 : TYPE_UNSIGNED (type));
6220 if (typefm == NULL_TREE)
6222 error ("no data type for mode %qs", p);
6225 else if (TREE_CODE (type) == ENUMERAL_TYPE)
6227 /* For enumeral types, copy the precision from the integer
6228 type returned above. If not an INTEGER_TYPE, we can't use
6229 this mode for this type. */
6230 if (TREE_CODE (typefm) != INTEGER_TYPE)
6232 error ("cannot use mode %qs for enumeral types", p);
6236 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
6238 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
6243 /* We cannot build a type variant, as there's code that assumes
6244 that TYPE_MAIN_VARIANT has the same mode. This includes the
6245 debug generators. Instead, create a subrange type. This
6246 results in all of the enumeral values being emitted only once
6247 in the original, and the subtype gets them by reference. */
6248 if (TYPE_UNSIGNED (type))
6249 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
6251 typefm = make_signed_type (TYPE_PRECISION (typefm));
6252 TREE_TYPE (typefm) = type;
6255 else if (VECTOR_MODE_P (mode)
6256 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
6257 : TREE_CODE (type) != TREE_CODE (typefm))
6259 error ("mode %qs applied to inappropriate type", p);
6269 /* Handle a "section" attribute; arguments as in
6270 struct attribute_spec.handler. */
6273 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6274 int ARG_UNUSED (flags), bool *no_add_attrs)
6278 if (targetm.have_named_sections)
6280 user_defined_section_attribute = true;
6282 if ((TREE_CODE (decl) == FUNCTION_DECL
6283 || TREE_CODE (decl) == VAR_DECL)
6284 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
6286 if (TREE_CODE (decl) == VAR_DECL
6287 && current_function_decl != NULL_TREE
6288 && !TREE_STATIC (decl))
6290 error ("%Jsection attribute cannot be specified for "
6291 "local variables", decl);
6292 *no_add_attrs = true;
6295 /* The decl may have already been given a section attribute
6296 from a previous declaration. Ensure they match. */
6297 else if (DECL_SECTION_NAME (decl) != NULL_TREE
6298 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
6299 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
6301 error ("section of %q+D conflicts with previous declaration",
6303 *no_add_attrs = true;
6305 else if (TREE_CODE (decl) == VAR_DECL
6306 && !targetm.have_tls && targetm.emutls.tmpl_section
6307 && DECL_THREAD_LOCAL_P (decl))
6309 error ("section of %q+D cannot be overridden", *node);
6310 *no_add_attrs = true;
6313 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
6317 error ("section attribute not allowed for %q+D", *node);
6318 *no_add_attrs = true;
6323 error ("%Jsection attributes are not supported for this target", *node);
6324 *no_add_attrs = true;
6330 /* Handle a "aligned" attribute; arguments as in
6331 struct attribute_spec.handler. */
6334 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6335 int flags, bool *no_add_attrs)
6337 tree decl = NULL_TREE;
6340 tree align_expr = (args ? TREE_VALUE (args)
6341 : size_int (ATTRIBUTE_ALIGNED_VALUE / BITS_PER_UNIT));
6347 type = &TREE_TYPE (decl);
6348 is_type = TREE_CODE (*node) == TYPE_DECL;
6350 else if (TYPE_P (*node))
6351 type = node, is_type = 1;
6353 if (TREE_CODE (align_expr) != INTEGER_CST)
6355 error ("requested alignment is not a constant");
6356 *no_add_attrs = true;
6358 else if ((i = tree_log2 (align_expr)) == -1)
6360 error ("requested alignment is not a power of 2");
6361 *no_add_attrs = true;
6363 else if (i >= HOST_BITS_PER_INT - BITS_PER_UNIT_LOG)
6365 error ("requested alignment is too large");
6366 *no_add_attrs = true;
6370 /* If we have a TYPE_DECL, then copy the type, so that we
6371 don't accidentally modify a builtin type. See pushdecl. */
6372 if (decl && TREE_TYPE (decl) != error_mark_node
6373 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
6375 tree tt = TREE_TYPE (decl);
6376 *type = build_variant_type_copy (*type);
6377 DECL_ORIGINAL_TYPE (decl) = tt;
6378 TYPE_NAME (*type) = decl;
6379 TREE_USED (*type) = TREE_USED (decl);
6380 TREE_TYPE (decl) = *type;
6382 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6383 *type = build_variant_type_copy (*type);
6385 TYPE_ALIGN (*type) = (1U << i) * BITS_PER_UNIT;
6386 TYPE_USER_ALIGN (*type) = 1;
6388 else if (! VAR_OR_FUNCTION_DECL_P (decl)
6389 && TREE_CODE (decl) != FIELD_DECL)
6391 error ("alignment may not be specified for %q+D", decl);
6392 *no_add_attrs = true;
6394 else if (TREE_CODE (decl) == FUNCTION_DECL
6395 && DECL_ALIGN (decl) > (1U << i) * BITS_PER_UNIT)
6397 if (DECL_USER_ALIGN (decl))
6398 error ("alignment for %q+D was previously specified as %d "
6399 "and may not be decreased", decl,
6400 DECL_ALIGN (decl) / BITS_PER_UNIT);
6402 error ("alignment for %q+D must be at least %d", decl,
6403 DECL_ALIGN (decl) / BITS_PER_UNIT);
6404 *no_add_attrs = true;
6408 DECL_ALIGN (decl) = (1U << i) * BITS_PER_UNIT;
6409 DECL_USER_ALIGN (decl) = 1;
6415 /* Handle a "weak" attribute; arguments as in
6416 struct attribute_spec.handler. */
6419 handle_weak_attribute (tree *node, tree name,
6420 tree ARG_UNUSED (args),
6421 int ARG_UNUSED (flags),
6422 bool * ARG_UNUSED (no_add_attrs))
6424 if (TREE_CODE (*node) == FUNCTION_DECL
6425 && DECL_DECLARED_INLINE_P (*node))
6427 error ("inline function %q+D cannot be declared weak", *node);
6428 *no_add_attrs = true;
6430 else if (TREE_CODE (*node) == FUNCTION_DECL
6431 || TREE_CODE (*node) == VAR_DECL)
6432 declare_weak (*node);
6434 warning (OPT_Wattributes, "%qE attribute ignored", name);
6439 /* Handle an "alias" attribute; arguments as in
6440 struct attribute_spec.handler. */
6443 handle_alias_attribute (tree *node, tree name, tree args,
6444 int ARG_UNUSED (flags), bool *no_add_attrs)
6448 if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL)
6450 warning (OPT_Wattributes, "%qE attribute ignored", name);
6451 *no_add_attrs = true;
6453 else if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
6454 || (TREE_CODE (decl) != FUNCTION_DECL
6455 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
6456 /* A static variable declaration is always a tentative definition,
6457 but the alias is a non-tentative definition which overrides. */
6458 || (TREE_CODE (decl) != FUNCTION_DECL
6459 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
6461 error ("%q+D defined both normally and as an alias", decl);
6462 *no_add_attrs = true;
6465 /* Note that the very first time we process a nested declaration,
6466 decl_function_context will not be set. Indeed, *would* never
6467 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
6468 we do below. After such frobbery, pushdecl would set the context.
6469 In any case, this is never what we want. */
6470 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
6474 id = TREE_VALUE (args);
6475 if (TREE_CODE (id) != STRING_CST)
6477 error ("alias argument not a string");
6478 *no_add_attrs = true;
6481 id = get_identifier (TREE_STRING_POINTER (id));
6482 /* This counts as a use of the object pointed to. */
6485 if (TREE_CODE (decl) == FUNCTION_DECL)
6486 DECL_INITIAL (decl) = error_mark_node;
6489 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
6490 DECL_EXTERNAL (decl) = 1;
6492 DECL_EXTERNAL (decl) = 0;
6493 TREE_STATIC (decl) = 1;
6498 warning (OPT_Wattributes, "%qE attribute ignored", name);
6499 *no_add_attrs = true;
6505 /* Handle a "weakref" attribute; arguments as in struct
6506 attribute_spec.handler. */
6509 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6510 int flags, bool *no_add_attrs)
6512 tree attr = NULL_TREE;
6514 /* We must ignore the attribute when it is associated with
6515 local-scoped decls, since attribute alias is ignored and many
6516 such symbols do not even have a DECL_WEAK field. */
6517 if (decl_function_context (*node)
6518 || current_function_decl
6519 || (TREE_CODE (*node) != VAR_DECL && TREE_CODE (*node) != FUNCTION_DECL))
6521 warning (OPT_Wattributes, "%qE attribute ignored", name);
6522 *no_add_attrs = true;
6526 /* The idea here is that `weakref("name")' mutates into `weakref,
6527 alias("name")', and weakref without arguments, in turn,
6528 implicitly adds weak. */
6532 attr = tree_cons (get_identifier ("alias"), args, attr);
6533 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
6535 *no_add_attrs = true;
6537 decl_attributes (node, attr, flags);
6541 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
6542 error ("%Jweakref attribute must appear before alias attribute",
6545 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
6546 and that isn't supported; and because it wants to add it to
6547 the list of weak decls, which isn't helpful. */
6548 DECL_WEAK (*node) = 1;
6554 /* Handle an "visibility" attribute; arguments as in
6555 struct attribute_spec.handler. */
6558 handle_visibility_attribute (tree *node, tree name, tree args,
6559 int ARG_UNUSED (flags),
6560 bool *ARG_UNUSED (no_add_attrs))
6563 tree id = TREE_VALUE (args);
6564 enum symbol_visibility vis;
6568 if (TREE_CODE (*node) == ENUMERAL_TYPE)
6570 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
6572 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
6576 else if (TYPE_FIELDS (*node))
6578 error ("%qE attribute ignored because %qT is already defined",
6583 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
6585 warning (OPT_Wattributes, "%qE attribute ignored", name);
6589 if (TREE_CODE (id) != STRING_CST)
6591 error ("visibility argument not a string");
6595 /* If this is a type, set the visibility on the type decl. */
6598 decl = TYPE_NAME (decl);
6601 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6603 warning (OPT_Wattributes, "%qE attribute ignored on types",
6609 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
6610 vis = VISIBILITY_DEFAULT;
6611 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
6612 vis = VISIBILITY_INTERNAL;
6613 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
6614 vis = VISIBILITY_HIDDEN;
6615 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
6616 vis = VISIBILITY_PROTECTED;
6619 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
6620 vis = VISIBILITY_DEFAULT;
6623 if (DECL_VISIBILITY_SPECIFIED (decl)
6624 && vis != DECL_VISIBILITY (decl))
6626 tree attributes = (TYPE_P (*node)
6627 ? TYPE_ATTRIBUTES (*node)
6628 : DECL_ATTRIBUTES (decl));
6629 if (lookup_attribute ("visibility", attributes))
6630 error ("%qD redeclared with different visibility", decl);
6631 else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6632 && lookup_attribute ("dllimport", attributes))
6633 error ("%qD was declared %qs which implies default visibility",
6635 else if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6636 && lookup_attribute ("dllexport", attributes))
6637 error ("%qD was declared %qs which implies default visibility",
6641 DECL_VISIBILITY (decl) = vis;
6642 DECL_VISIBILITY_SPECIFIED (decl) = 1;
6644 /* Go ahead and attach the attribute to the node as well. This is needed
6645 so we can determine whether we have VISIBILITY_DEFAULT because the
6646 visibility was not specified, or because it was explicitly overridden
6647 from the containing scope. */
6652 /* Determine the ELF symbol visibility for DECL, which is either a
6653 variable or a function. It is an error to use this function if a
6654 definition of DECL is not available in this translation unit.
6655 Returns true if the final visibility has been determined by this
6656 function; false if the caller is free to make additional
6660 c_determine_visibility (tree decl)
6662 gcc_assert (TREE_CODE (decl) == VAR_DECL
6663 || TREE_CODE (decl) == FUNCTION_DECL);
6665 /* If the user explicitly specified the visibility with an
6666 attribute, honor that. DECL_VISIBILITY will have been set during
6667 the processing of the attribute. We check for an explicit
6668 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
6669 to distinguish the use of an attribute from the use of a "#pragma
6670 GCC visibility push(...)"; in the latter case we still want other
6671 considerations to be able to overrule the #pragma. */
6672 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl))
6673 || (TARGET_DLLIMPORT_DECL_ATTRIBUTES
6674 && (lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl))
6675 || lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))))
6678 /* Set default visibility to whatever the user supplied with
6679 visibility_specified depending on #pragma GCC visibility. */
6680 if (!DECL_VISIBILITY_SPECIFIED (decl))
6682 if (visibility_options.inpragma
6683 || DECL_VISIBILITY (decl) != default_visibility)
6685 DECL_VISIBILITY (decl) = default_visibility;
6686 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
6687 /* If visibility changed and DECL already has DECL_RTL, ensure
6688 symbol flags are updated. */
6689 if (((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
6690 || TREE_CODE (decl) == FUNCTION_DECL)
6691 && DECL_RTL_SET_P (decl))
6692 make_decl_rtl (decl);
6698 /* Handle an "tls_model" attribute; arguments as in
6699 struct attribute_spec.handler. */
6702 handle_tls_model_attribute (tree *node, tree name, tree args,
6703 int ARG_UNUSED (flags), bool *no_add_attrs)
6707 enum tls_model kind;
6709 *no_add_attrs = true;
6711 if (TREE_CODE (decl) != VAR_DECL || !DECL_THREAD_LOCAL_P (decl))
6713 warning (OPT_Wattributes, "%qE attribute ignored", name);
6717 kind = DECL_TLS_MODEL (decl);
6718 id = TREE_VALUE (args);
6719 if (TREE_CODE (id) != STRING_CST)
6721 error ("tls_model argument not a string");
6725 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
6726 kind = TLS_MODEL_LOCAL_EXEC;
6727 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
6728 kind = TLS_MODEL_INITIAL_EXEC;
6729 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
6730 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
6731 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
6732 kind = TLS_MODEL_GLOBAL_DYNAMIC;
6734 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
6736 DECL_TLS_MODEL (decl) = kind;
6740 /* Handle a "no_instrument_function" attribute; arguments as in
6741 struct attribute_spec.handler. */
6744 handle_no_instrument_function_attribute (tree *node, tree name,
6745 tree ARG_UNUSED (args),
6746 int ARG_UNUSED (flags),
6751 if (TREE_CODE (decl) != FUNCTION_DECL)
6753 error ("%J%qE attribute applies only to functions", decl, name);
6754 *no_add_attrs = true;
6756 else if (DECL_INITIAL (decl))
6758 error ("%Jcan%'t set %qE attribute after definition", decl, name);
6759 *no_add_attrs = true;
6762 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
6767 /* Handle a "malloc" attribute; arguments as in
6768 struct attribute_spec.handler. */
6771 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6772 int ARG_UNUSED (flags), bool *no_add_attrs)
6774 if (TREE_CODE (*node) == FUNCTION_DECL
6775 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
6776 DECL_IS_MALLOC (*node) = 1;
6779 warning (OPT_Wattributes, "%qE attribute ignored", name);
6780 *no_add_attrs = true;
6786 /* Handle a "alloc_size" attribute; arguments as in
6787 struct attribute_spec.handler. */
6790 handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
6791 int ARG_UNUSED (flags), bool *no_add_attrs)
6793 unsigned arg_count = type_num_arguments (*node);
6794 for (; args; args = TREE_CHAIN (args))
6796 tree position = TREE_VALUE (args);
6798 if (TREE_CODE (position) != INTEGER_CST
6799 || TREE_INT_CST_HIGH (position)
6800 || TREE_INT_CST_LOW (position) < 1
6801 || TREE_INT_CST_LOW (position) > arg_count )
6803 warning (OPT_Wattributes,
6804 "alloc_size parameter outside range");
6805 *no_add_attrs = true;
6812 /* Handle a "returns_twice" attribute; arguments as in
6813 struct attribute_spec.handler. */
6816 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6817 int ARG_UNUSED (flags), bool *no_add_attrs)
6819 if (TREE_CODE (*node) == FUNCTION_DECL)
6820 DECL_IS_RETURNS_TWICE (*node) = 1;
6823 warning (OPT_Wattributes, "%qE attribute ignored", name);
6824 *no_add_attrs = true;
6830 /* Handle a "no_limit_stack" attribute; arguments as in
6831 struct attribute_spec.handler. */
6834 handle_no_limit_stack_attribute (tree *node, tree name,
6835 tree ARG_UNUSED (args),
6836 int ARG_UNUSED (flags),
6841 if (TREE_CODE (decl) != FUNCTION_DECL)
6843 error ("%J%qE attribute applies only to functions", decl, name);
6844 *no_add_attrs = true;
6846 else if (DECL_INITIAL (decl))
6848 error ("%Jcan%'t set %qE attribute after definition", decl, name);
6849 *no_add_attrs = true;
6852 DECL_NO_LIMIT_STACK (decl) = 1;
6857 /* Handle a "pure" attribute; arguments as in
6858 struct attribute_spec.handler. */
6861 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6862 int ARG_UNUSED (flags), bool *no_add_attrs)
6864 if (TREE_CODE (*node) == FUNCTION_DECL)
6865 DECL_PURE_P (*node) = 1;
6866 /* ??? TODO: Support types. */
6869 warning (OPT_Wattributes, "%qE attribute ignored", name);
6870 *no_add_attrs = true;
6876 /* Handle a "no vops" attribute; arguments as in
6877 struct attribute_spec.handler. */
6880 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
6881 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
6882 bool *ARG_UNUSED (no_add_attrs))
6884 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
6885 DECL_IS_NOVOPS (*node) = 1;
6889 /* Handle a "deprecated" attribute; arguments as in
6890 struct attribute_spec.handler. */
6893 handle_deprecated_attribute (tree *node, tree name,
6894 tree ARG_UNUSED (args), int flags,
6897 tree type = NULL_TREE;
6899 tree what = NULL_TREE;
6904 type = TREE_TYPE (decl);
6906 if (TREE_CODE (decl) == TYPE_DECL
6907 || TREE_CODE (decl) == PARM_DECL
6908 || TREE_CODE (decl) == VAR_DECL
6909 || TREE_CODE (decl) == FUNCTION_DECL
6910 || TREE_CODE (decl) == FIELD_DECL)
6911 TREE_DEPRECATED (decl) = 1;
6915 else if (TYPE_P (*node))
6917 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6918 *node = build_variant_type_copy (*node);
6919 TREE_DEPRECATED (*node) = 1;
6927 *no_add_attrs = true;
6928 if (type && TYPE_NAME (type))
6930 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
6931 what = TYPE_NAME (*node);
6932 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
6933 && DECL_NAME (TYPE_NAME (type)))
6934 what = DECL_NAME (TYPE_NAME (type));
6937 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
6939 warning (OPT_Wattributes, "%qE attribute ignored", name);
6945 /* Handle a "vector_size" attribute; arguments as in
6946 struct attribute_spec.handler. */
6949 handle_vector_size_attribute (tree *node, tree name, tree args,
6950 int ARG_UNUSED (flags),
6953 unsigned HOST_WIDE_INT vecsize, nunits;
6954 enum machine_mode orig_mode;
6955 tree type = *node, new_type, size;
6957 *no_add_attrs = true;
6959 size = TREE_VALUE (args);
6961 if (!host_integerp (size, 1))
6963 warning (OPT_Wattributes, "%qE attribute ignored", name);
6967 /* Get the vector size (in bytes). */
6968 vecsize = tree_low_cst (size, 1);
6970 /* We need to provide for vector pointers, vector arrays, and
6971 functions returning vectors. For example:
6973 __attribute__((vector_size(16))) short *foo;
6975 In this case, the mode is SI, but the type being modified is
6976 HI, so we need to look further. */
6978 while (POINTER_TYPE_P (type)
6979 || TREE_CODE (type) == FUNCTION_TYPE
6980 || TREE_CODE (type) == METHOD_TYPE
6981 || TREE_CODE (type) == ARRAY_TYPE
6982 || TREE_CODE (type) == OFFSET_TYPE)
6983 type = TREE_TYPE (type);
6985 /* Get the mode of the type being modified. */
6986 orig_mode = TYPE_MODE (type);
6988 if ((!INTEGRAL_TYPE_P (type)
6989 && !SCALAR_FLOAT_TYPE_P (type)
6990 && !FIXED_POINT_TYPE_P (type))
6991 || (!SCALAR_FLOAT_MODE_P (orig_mode)
6992 && GET_MODE_CLASS (orig_mode) != MODE_INT
6993 && !ALL_SCALAR_FIXED_POINT_MODE_P (orig_mode))
6994 || !host_integerp (TYPE_SIZE_UNIT (type), 1)
6995 || TREE_CODE (type) == BOOLEAN_TYPE)
6997 error ("invalid vector type for attribute %qE", name);
7001 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
7003 error ("vector size not an integral multiple of component size");
7009 error ("zero vector size");
7013 /* Calculate how many units fit in the vector. */
7014 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
7015 if (nunits & (nunits - 1))
7017 error ("number of components of the vector not a power of two");
7021 new_type = build_vector_type (type, nunits);
7023 /* Build back pointers if needed. */
7024 *node = lang_hooks.types.reconstruct_complex_type (*node, new_type);
7029 /* Handle the "nonnull" attribute. */
7031 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
7032 tree args, int ARG_UNUSED (flags),
7036 unsigned HOST_WIDE_INT attr_arg_num;
7038 /* If no arguments are specified, all pointer arguments should be
7039 non-null. Verify a full prototype is given so that the arguments
7040 will have the correct types when we actually check them later. */
7043 if (!TYPE_ARG_TYPES (type))
7045 error ("nonnull attribute without arguments on a non-prototype");
7046 *no_add_attrs = true;
7051 /* Argument list specified. Verify that each argument number references
7052 a pointer argument. */
7053 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
7056 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
7058 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
7060 error ("nonnull argument has invalid operand number (argument %lu)",
7061 (unsigned long) attr_arg_num);
7062 *no_add_attrs = true;
7066 argument = TYPE_ARG_TYPES (type);
7069 for (ck_num = 1; ; ck_num++)
7071 if (!argument || ck_num == arg_num)
7073 argument = TREE_CHAIN (argument);
7077 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
7079 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
7080 (unsigned long) attr_arg_num, (unsigned long) arg_num);
7081 *no_add_attrs = true;
7085 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
7087 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
7088 (unsigned long) attr_arg_num, (unsigned long) arg_num);
7089 *no_add_attrs = true;
7098 /* Check the argument list of a function call for null in argument slots
7099 that are marked as requiring a non-null pointer argument. The NARGS
7100 arguments are passed in the array ARGARRAY.
7104 check_function_nonnull (tree attrs, int nargs, tree *argarray)
7109 for (a = attrs; a; a = TREE_CHAIN (a))
7111 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
7113 args = TREE_VALUE (a);
7115 /* Walk the argument list. If we encounter an argument number we
7116 should check for non-null, do it. If the attribute has no args,
7117 then every pointer argument is checked (in which case the check
7118 for pointer type is done in check_nonnull_arg). */
7119 for (i = 0; i < nargs; i++)
7121 if (!args || nonnull_check_p (args, i + 1))
7122 check_function_arguments_recurse (check_nonnull_arg, NULL,
7130 /* Check that the Nth argument of a function call (counting backwards
7131 from the end) is a (pointer)0. The NARGS arguments are passed in the
7135 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
7137 tree attr = lookup_attribute ("sentinel", attrs);
7145 /* Skip over the named arguments. */
7146 while (typelist && len < nargs)
7148 typelist = TREE_CHAIN (typelist);
7152 if (TREE_VALUE (attr))
7154 tree p = TREE_VALUE (TREE_VALUE (attr));
7155 pos = TREE_INT_CST_LOW (p);
7158 /* The sentinel must be one of the varargs, i.e.
7159 in position >= the number of fixed arguments. */
7160 if ((nargs - 1 - pos) < len)
7162 warning (OPT_Wformat,
7163 "not enough variable arguments to fit a sentinel");
7167 /* Validate the sentinel. */
7168 sentinel = argarray[nargs - 1 - pos];
7169 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
7170 || !integer_zerop (sentinel))
7171 /* Although __null (in C++) is only an integer we allow it
7172 nevertheless, as we are guaranteed that it's exactly
7173 as wide as a pointer, and we don't want to force
7174 users to cast the NULL they have written there.
7175 We warn with -Wstrict-null-sentinel, though. */
7176 && (warn_strict_null_sentinel || null_node != sentinel))
7177 warning (OPT_Wformat, "missing sentinel in function call");
7181 /* Helper for check_function_nonnull; given a list of operands which
7182 must be non-null in ARGS, determine if operand PARAM_NUM should be
7186 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
7188 unsigned HOST_WIDE_INT arg_num = 0;
7190 for (; args; args = TREE_CHAIN (args))
7192 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
7196 if (arg_num == param_num)
7202 /* Check that the function argument PARAM (which is operand number
7203 PARAM_NUM) is non-null. This is called by check_function_nonnull
7204 via check_function_arguments_recurse. */
7207 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
7208 unsigned HOST_WIDE_INT param_num)
7210 /* Just skip checking the argument if it's not a pointer. This can
7211 happen if the "nonnull" attribute was given without an operand
7212 list (which means to check every pointer argument). */
7214 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
7217 if (integer_zerop (param))
7218 warning (OPT_Wnonnull, "null argument where non-null required "
7219 "(argument %lu)", (unsigned long) param_num);
7222 /* Helper for nonnull attribute handling; fetch the operand number
7223 from the attribute argument list. */
7226 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
7228 /* Verify the arg number is a constant. */
7229 if (TREE_CODE (arg_num_expr) != INTEGER_CST
7230 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
7233 *valp = TREE_INT_CST_LOW (arg_num_expr);
7237 /* Handle a "nothrow" attribute; arguments as in
7238 struct attribute_spec.handler. */
7241 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
7242 int ARG_UNUSED (flags), bool *no_add_attrs)
7244 if (TREE_CODE (*node) == FUNCTION_DECL)
7245 TREE_NOTHROW (*node) = 1;
7246 /* ??? TODO: Support types. */
7249 warning (OPT_Wattributes, "%qE attribute ignored", name);
7250 *no_add_attrs = true;
7256 /* Handle a "cleanup" attribute; arguments as in
7257 struct attribute_spec.handler. */
7260 handle_cleanup_attribute (tree *node, tree name, tree args,
7261 int ARG_UNUSED (flags), bool *no_add_attrs)
7264 tree cleanup_id, cleanup_decl;
7266 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
7267 for global destructors in C++. This requires infrastructure that
7268 we don't have generically at the moment. It's also not a feature
7269 we'd be missing too much, since we do have attribute constructor. */
7270 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
7272 warning (OPT_Wattributes, "%qE attribute ignored", name);
7273 *no_add_attrs = true;
7277 /* Verify that the argument is a function in scope. */
7278 /* ??? We could support pointers to functions here as well, if
7279 that was considered desirable. */
7280 cleanup_id = TREE_VALUE (args);
7281 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
7283 error ("cleanup argument not an identifier");
7284 *no_add_attrs = true;
7287 cleanup_decl = lookup_name (cleanup_id);
7288 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
7290 error ("cleanup argument not a function");
7291 *no_add_attrs = true;
7295 /* That the function has proper type is checked with the
7296 eventual call to build_function_call. */
7301 /* Handle a "warn_unused_result" attribute. No special handling. */
7304 handle_warn_unused_result_attribute (tree *node, tree name,
7305 tree ARG_UNUSED (args),
7306 int ARG_UNUSED (flags), bool *no_add_attrs)
7308 /* Ignore the attribute for functions not returning any value. */
7309 if (VOID_TYPE_P (TREE_TYPE (*node)))
7311 warning (OPT_Wattributes, "%qE attribute ignored", name);
7312 *no_add_attrs = true;
7318 /* Handle a "sentinel" attribute. */
7321 handle_sentinel_attribute (tree *node, tree name, tree args,
7322 int ARG_UNUSED (flags), bool *no_add_attrs)
7324 tree params = TYPE_ARG_TYPES (*node);
7328 warning (OPT_Wattributes,
7329 "%qE attribute requires prototypes with named arguments", name);
7330 *no_add_attrs = true;
7334 while (TREE_CHAIN (params))
7335 params = TREE_CHAIN (params);
7337 if (VOID_TYPE_P (TREE_VALUE (params)))
7339 warning (OPT_Wattributes,
7340 "%qE attribute only applies to variadic functions", name);
7341 *no_add_attrs = true;
7347 tree position = TREE_VALUE (args);
7349 if (TREE_CODE (position) != INTEGER_CST)
7351 warning (OPT_Wattributes,
7352 "requested position is not an integer constant");
7353 *no_add_attrs = true;
7357 if (tree_int_cst_lt (position, integer_zero_node))
7359 warning (OPT_Wattributes,
7360 "requested position is less than zero");
7361 *no_add_attrs = true;
7369 /* Handle a "type_generic" attribute. */
7372 handle_type_generic_attribute (tree *node, tree ARG_UNUSED (name),
7373 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
7374 bool * ARG_UNUSED (no_add_attrs))
7378 /* Ensure we have a function type. */
7379 gcc_assert (TREE_CODE (*node) == FUNCTION_TYPE);
7381 params = TYPE_ARG_TYPES (*node);
7382 while (params && ! VOID_TYPE_P (TREE_VALUE (params)))
7383 params = TREE_CHAIN (params);
7385 /* Ensure we have a variadic function. */
7386 gcc_assert (!params);
7391 /* Handle a "target" attribute. */
7394 handle_target_attribute (tree *node, tree name, tree args, int flags,
7397 /* Ensure we have a function type. */
7398 if (TREE_CODE (*node) != FUNCTION_DECL)
7400 warning (OPT_Wattributes, "%qE attribute ignored", name);
7401 *no_add_attrs = true;
7403 else if (! targetm.target_option.valid_attribute_p (*node, name, args,
7405 *no_add_attrs = true;
7410 /* Arguments being collected for optimization. */
7411 typedef const char *const_char_p; /* For DEF_VEC_P. */
7412 DEF_VEC_P(const_char_p);
7413 DEF_VEC_ALLOC_P(const_char_p, gc);
7414 static GTY(()) VEC(const_char_p, gc) *optimize_args;
7417 /* Inner function to convert a TREE_LIST to argv string to parse the optimize
7418 options in ARGS. ATTR_P is true if this is for attribute(optimize), and
7419 false for #pragma GCC optimize. */
7422 parse_optimize_options (tree args, bool attr_p)
7427 int saved_flag_strict_aliasing;
7428 const char **opt_argv;
7431 /* Build up argv vector. Just in case the string is stored away, use garbage
7432 collected strings. */
7433 VEC_truncate (const_char_p, optimize_args, 0);
7434 VEC_safe_push (const_char_p, gc, optimize_args, NULL);
7436 for (ap = args; ap != NULL_TREE; ap = TREE_CHAIN (ap))
7438 tree value = TREE_VALUE (ap);
7440 if (TREE_CODE (value) == INTEGER_CST)
7443 sprintf (buffer, "-O%ld", (long) TREE_INT_CST_LOW (value));
7444 VEC_safe_push (const_char_p, gc, optimize_args, ggc_strdup (buffer));
7447 else if (TREE_CODE (value) == STRING_CST)
7449 /* Split string into multiple substrings. */
7450 size_t len = TREE_STRING_LENGTH (value);
7451 char *p = ASTRDUP (TREE_STRING_POINTER (value));
7452 char *end = p + len;
7456 while (next_p != NULL)
7462 comma = strchr (p, ',');
7475 r = q = (char *) ggc_alloc (len2 + 3);
7477 /* If the user supplied -Oxxx or -fxxx, only allow -Oxxx or -fxxx
7479 if (*p == '-' && p[1] != 'O' && p[1] != 'f')
7483 warning (OPT_Wattributes,
7484 "Bad option %s to optimize attribute.", p);
7486 warning (OPT_Wpragmas,
7487 "Bad option %s to pragma attribute", p);
7495 /* Assume that Ox is -Ox, a numeric value is -Ox, a s by
7496 itself is -Os, and any other switch begins with a -f. */
7497 if ((*p >= '0' && *p <= '9')
7498 || (p[0] == 's' && p[1] == '\0'))
7504 memcpy (r, p, len2);
7506 VEC_safe_push (const_char_p, gc, optimize_args, q);
7512 opt_argc = VEC_length (const_char_p, optimize_args);
7513 opt_argv = (const char **) alloca (sizeof (char *) * (opt_argc + 1));
7515 for (i = 1; i < opt_argc; i++)
7516 opt_argv[i] = VEC_index (const_char_p, optimize_args, i);
7518 saved_flag_strict_aliasing = flag_strict_aliasing;
7520 /* Now parse the options. */
7521 decode_options (opt_argc, opt_argv);
7523 /* Don't allow changing -fstrict-aliasing. */
7524 flag_strict_aliasing = saved_flag_strict_aliasing;
7526 VEC_truncate (const_char_p, optimize_args, 0);
7530 /* For handling "optimize" attribute. arguments as in
7531 struct attribute_spec.handler. */
7534 handle_optimize_attribute (tree *node, tree name, tree args,
7535 int ARG_UNUSED (flags), bool *no_add_attrs)
7537 /* Ensure we have a function type. */
7538 if (TREE_CODE (*node) != FUNCTION_DECL)
7540 warning (OPT_Wattributes, "%qE attribute ignored", name);
7541 *no_add_attrs = true;
7545 struct cl_optimization cur_opts;
7546 tree old_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node);
7548 /* Save current options. */
7549 cl_optimization_save (&cur_opts);
7551 /* If we previously had some optimization options, use them as the
7554 cl_optimization_restore (TREE_OPTIMIZATION (old_opts));
7556 /* Parse options, and update the vector. */
7557 parse_optimize_options (args, true);
7558 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (*node)
7559 = build_optimization_node ();
7561 /* Restore current options. */
7562 cl_optimization_restore (&cur_opts);
7568 /* Check for valid arguments being passed to a function.
7569 ATTRS is a list of attributes. There are NARGS arguments in the array
7570 ARGARRAY. TYPELIST is the list of argument types for the function.
7573 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
7575 /* Check for null being passed in a pointer argument that must be
7576 non-null. We also need to do this if format checking is enabled. */
7579 check_function_nonnull (attrs, nargs, argarray);
7581 /* Check for errors in format strings. */
7583 if (warn_format || warn_missing_format_attribute)
7584 check_function_format (attrs, nargs, argarray);
7587 check_function_sentinel (attrs, nargs, argarray, typelist);
7590 /* Generic argument checking recursion routine. PARAM is the argument to
7591 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
7592 once the argument is resolved. CTX is context for the callback. */
7594 check_function_arguments_recurse (void (*callback)
7595 (void *, tree, unsigned HOST_WIDE_INT),
7596 void *ctx, tree param,
7597 unsigned HOST_WIDE_INT param_num)
7599 if (CONVERT_EXPR_P (param)
7600 && (TYPE_PRECISION (TREE_TYPE (param))
7601 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
7603 /* Strip coercion. */
7604 check_function_arguments_recurse (callback, ctx,
7605 TREE_OPERAND (param, 0), param_num);
7609 if (TREE_CODE (param) == CALL_EXPR)
7611 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
7613 bool found_format_arg = false;
7615 /* See if this is a call to a known internationalization function
7616 that modifies a format arg. Such a function may have multiple
7617 format_arg attributes (for example, ngettext). */
7619 for (attrs = TYPE_ATTRIBUTES (type);
7621 attrs = TREE_CHAIN (attrs))
7622 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
7625 tree format_num_expr;
7628 call_expr_arg_iterator iter;
7630 /* Extract the argument number, which was previously checked
7632 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
7634 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
7635 && !TREE_INT_CST_HIGH (format_num_expr));
7637 format_num = TREE_INT_CST_LOW (format_num_expr);
7639 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
7641 inner_arg = next_call_expr_arg (&iter), i++)
7642 if (i == format_num)
7644 check_function_arguments_recurse (callback, ctx,
7645 inner_arg, param_num);
7646 found_format_arg = true;
7651 /* If we found a format_arg attribute and did a recursive check,
7652 we are done with checking this argument. Otherwise, we continue
7653 and this will be considered a non-literal. */
7654 if (found_format_arg)
7658 if (TREE_CODE (param) == COND_EXPR)
7660 /* Check both halves of the conditional expression. */
7661 check_function_arguments_recurse (callback, ctx,
7662 TREE_OPERAND (param, 1), param_num);
7663 check_function_arguments_recurse (callback, ctx,
7664 TREE_OPERAND (param, 2), param_num);
7668 (*callback) (ctx, param, param_num);
7671 /* Checks the number of arguments NARGS against the required number
7672 REQUIRED and issues an error if there is a mismatch. Returns true
7673 if the number of arguments is correct, otherwise false. */
7676 validate_nargs (tree fndecl, int nargs, int required)
7678 if (nargs < required)
7680 error ("not enough arguments to function %qE", fndecl);
7683 else if (nargs > required)
7685 error ("too many arguments to function %qE", fndecl);
7691 /* Verifies the NARGS arguments ARGS to the builtin function FNDECL.
7692 Returns false if there was an error, otherwise true. */
7695 check_builtin_function_arguments (tree fndecl, int nargs, tree *args)
7697 if (!DECL_BUILT_IN (fndecl)
7698 || DECL_BUILT_IN_CLASS (fndecl) != BUILT_IN_NORMAL)
7701 switch (DECL_FUNCTION_CODE (fndecl))
7703 case BUILT_IN_CONSTANT_P:
7704 return validate_nargs (fndecl, nargs, 1);
7706 case BUILT_IN_ISFINITE:
7707 case BUILT_IN_ISINF:
7708 case BUILT_IN_ISINF_SIGN:
7709 case BUILT_IN_ISNAN:
7710 case BUILT_IN_ISNORMAL:
7711 if (validate_nargs (fndecl, nargs, 1))
7713 if (TREE_CODE (TREE_TYPE (args[0])) != REAL_TYPE)
7715 error ("non-floating-point argument in call to "
7716 "function %qE", fndecl);
7723 case BUILT_IN_ISGREATER:
7724 case BUILT_IN_ISGREATEREQUAL:
7725 case BUILT_IN_ISLESS:
7726 case BUILT_IN_ISLESSEQUAL:
7727 case BUILT_IN_ISLESSGREATER:
7728 case BUILT_IN_ISUNORDERED:
7729 if (validate_nargs (fndecl, nargs, 2))
7731 enum tree_code code0, code1;
7732 code0 = TREE_CODE (TREE_TYPE (args[0]));
7733 code1 = TREE_CODE (TREE_TYPE (args[1]));
7734 if (!((code0 == REAL_TYPE && code1 == REAL_TYPE)
7735 || (code0 == REAL_TYPE && code1 == INTEGER_TYPE)
7736 || (code0 == INTEGER_TYPE && code1 == REAL_TYPE)))
7738 error ("non-floating-point arguments in call to "
7739 "function %qE", fndecl);
7746 case BUILT_IN_FPCLASSIFY:
7747 if (validate_nargs (fndecl, nargs, 6))
7752 if (TREE_CODE (args[i]) != INTEGER_CST)
7754 error ("non-const integer argument %u in call to function %qE",
7759 if (TREE_CODE (TREE_TYPE (args[5])) != REAL_TYPE)
7761 error ("non-floating-point argument in call to function %qE",
7774 /* Function to help qsort sort FIELD_DECLs by name order. */
7777 field_decl_cmp (const void *x_p, const void *y_p)
7779 const tree *const x = (const tree *const) x_p;
7780 const tree *const y = (const tree *const) y_p;
7782 if (DECL_NAME (*x) == DECL_NAME (*y))
7783 /* A nontype is "greater" than a type. */
7784 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
7785 if (DECL_NAME (*x) == NULL_TREE)
7787 if (DECL_NAME (*y) == NULL_TREE)
7789 if (DECL_NAME (*x) < DECL_NAME (*y))
7795 gt_pointer_operator new_value;
7799 /* This routine compares two fields like field_decl_cmp but using the
7800 pointer operator in resort_data. */
7803 resort_field_decl_cmp (const void *x_p, const void *y_p)
7805 const tree *const x = (const tree *const) x_p;
7806 const tree *const y = (const tree *const) y_p;
7808 if (DECL_NAME (*x) == DECL_NAME (*y))
7809 /* A nontype is "greater" than a type. */
7810 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
7811 if (DECL_NAME (*x) == NULL_TREE)
7813 if (DECL_NAME (*y) == NULL_TREE)
7816 tree d1 = DECL_NAME (*x);
7817 tree d2 = DECL_NAME (*y);
7818 resort_data.new_value (&d1, resort_data.cookie);
7819 resort_data.new_value (&d2, resort_data.cookie);
7826 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
7829 resort_sorted_fields (void *obj,
7830 void * ARG_UNUSED (orig_obj),
7831 gt_pointer_operator new_value,
7834 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
7835 resort_data.new_value = new_value;
7836 resort_data.cookie = cookie;
7837 qsort (&sf->elts[0], sf->len, sizeof (tree),
7838 resort_field_decl_cmp);
7841 /* Subroutine of c_parse_error.
7842 Return the result of concatenating LHS and RHS. RHS is really
7843 a string literal, its first character is indicated by RHS_START and
7844 RHS_SIZE is its length (including the terminating NUL character).
7846 The caller is responsible for deleting the returned pointer. */
7849 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
7851 const int lhs_size = strlen (lhs);
7852 char *result = XNEWVEC (char, lhs_size + rhs_size);
7853 strncpy (result, lhs, lhs_size);
7854 strncpy (result + lhs_size, rhs_start, rhs_size);
7858 /* Issue the error given by GMSGID, indicating that it occurred before
7859 TOKEN, which had the associated VALUE. */
7862 c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
7864 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
7866 char *message = NULL;
7868 if (token == CPP_EOF)
7869 message = catenate_messages (gmsgid, " at end of input");
7870 else if (token == CPP_CHAR || token == CPP_WCHAR || token == CPP_CHAR16
7871 || token == CPP_CHAR32)
7873 unsigned int val = TREE_INT_CST_LOW (value);
7892 if (val <= UCHAR_MAX && ISGRAPH (val))
7893 message = catenate_messages (gmsgid, " before %s'%c'");
7895 message = catenate_messages (gmsgid, " before %s'\\x%x'");
7897 error (message, prefix, val);
7901 else if (token == CPP_STRING || token == CPP_WSTRING || token == CPP_STRING16
7902 || token == CPP_STRING32)
7903 message = catenate_messages (gmsgid, " before string constant");
7904 else if (token == CPP_NUMBER)
7905 message = catenate_messages (gmsgid, " before numeric constant");
7906 else if (token == CPP_NAME)
7908 message = catenate_messages (gmsgid, " before %qE");
7909 error (message, value);
7913 else if (token == CPP_PRAGMA)
7914 message = catenate_messages (gmsgid, " before %<#pragma%>");
7915 else if (token == CPP_PRAGMA_EOL)
7916 message = catenate_messages (gmsgid, " before end of line");
7917 else if (token < N_TTYPES)
7919 message = catenate_messages (gmsgid, " before %qs token");
7920 error (message, cpp_type2name (token));
7932 #undef catenate_messages
7935 /* Callback from cpp_error for PFILE to print diagnostics from the
7936 preprocessor. The diagnostic is of type LEVEL, at location
7937 LOCATION unless this is after lexing and the compiler's location
7938 should be used instead, with column number possibly overridden by
7939 COLUMN_OVERRIDE if not zero; MSG is the translated message and AP
7940 the arguments. Returns true if a diagnostic was emitted, false
7944 c_cpp_error (cpp_reader *pfile ATTRIBUTE_UNUSED, int level,
7945 location_t location, unsigned int column_override,
7946 const char *msg, va_list *ap)
7948 diagnostic_info diagnostic;
7949 diagnostic_t dlevel;
7950 int save_warn_system_headers = warn_system_headers;
7955 case CPP_DL_WARNING_SYSHDR:
7958 warn_system_headers = 1;
7960 case CPP_DL_WARNING:
7963 dlevel = DK_WARNING;
7965 case CPP_DL_PEDWARN:
7966 if (flag_no_output && !flag_pedantic_errors)
7968 dlevel = DK_PEDWARN;
7983 location = input_location;
7984 diagnostic_set_info_translated (&diagnostic, msg, ap,
7986 if (column_override)
7987 diagnostic_override_column (&diagnostic, column_override);
7988 ret = report_diagnostic (&diagnostic);
7989 if (level == CPP_DL_WARNING_SYSHDR)
7990 warn_system_headers = save_warn_system_headers;
7994 /* Walk a gimplified function and warn for functions whose return value is
7995 ignored and attribute((warn_unused_result)) is set. This is done before
7996 inlining, so we don't have to worry about that. */
7999 c_warn_unused_result (gimple_seq seq)
8002 gimple_stmt_iterator i;
8004 for (i = gsi_start (seq); !gsi_end_p (i); gsi_next (&i))
8006 gimple g = gsi_stmt (i);
8008 switch (gimple_code (g))
8011 c_warn_unused_result (gimple_bind_body (g));
8014 c_warn_unused_result (gimple_try_eval (g));
8015 c_warn_unused_result (gimple_try_cleanup (g));
8018 c_warn_unused_result (gimple_catch_handler (g));
8020 case GIMPLE_EH_FILTER:
8021 c_warn_unused_result (gimple_eh_filter_failure (g));
8025 if (gimple_call_lhs (g))
8028 /* This is a naked call, as opposed to a GIMPLE_CALL with an
8029 LHS. All calls whose value is ignored should be
8030 represented like this. Look for the attribute. */
8031 fdecl = gimple_call_fndecl (g);
8032 ftype = TREE_TYPE (TREE_TYPE (gimple_call_fn (g)));
8034 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
8036 location_t loc = gimple_location (g);
8039 warning (0, "%Hignoring return value of %qD, "
8040 "declared with attribute warn_unused_result",
8043 warning (0, "%Hignoring return value of function "
8044 "declared with attribute warn_unused_result",
8050 /* Not a container, not a call, or a call whose value is used. */
8056 /* Convert a character from the host to the target execution character
8057 set. cpplib handles this, mostly. */
8060 c_common_to_target_charset (HOST_WIDE_INT c)
8062 /* Character constants in GCC proper are sign-extended under -fsigned-char,
8063 zero-extended under -fno-signed-char. cpplib insists that characters
8064 and character constants are always unsigned. Hence we must convert
8066 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
8068 uc = cpp_host_to_exec_charset (parse_in, uc);
8070 if (flag_signed_char)
8071 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
8072 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
8077 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
8078 component references, with STOP_REF, or alternatively an INDIRECT_REF of
8079 NULL, at the bottom; much like the traditional rendering of offsetof as a
8080 macro. Returns the folded and properly cast result. */
8083 fold_offsetof_1 (tree expr, tree stop_ref)
8085 enum tree_code code = PLUS_EXPR;
8088 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
8089 return size_zero_node;
8091 switch (TREE_CODE (expr))
8097 error ("cannot apply %<offsetof%> to static data member %qD", expr);
8098 return error_mark_node;
8102 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
8103 return error_mark_node;
8106 gcc_assert (integer_zerop (expr));
8107 return size_zero_node;
8111 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8112 gcc_assert (base == error_mark_node || base == size_zero_node);
8116 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8117 if (base == error_mark_node)
8120 t = TREE_OPERAND (expr, 1);
8121 if (DECL_C_BIT_FIELD (t))
8123 error ("attempt to take address of bit-field structure "
8125 return error_mark_node;
8127 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
8128 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
8133 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
8134 if (base == error_mark_node)
8137 t = TREE_OPERAND (expr, 1);
8138 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
8141 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
8143 t = convert (sizetype, t);
8144 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
8148 /* Handle static members of volatile structs. */
8149 t = TREE_OPERAND (expr, 1);
8150 gcc_assert (TREE_CODE (t) == VAR_DECL);
8151 return fold_offsetof_1 (t, stop_ref);
8157 return size_binop (code, base, off);
8161 fold_offsetof (tree expr, tree stop_ref)
8163 /* Convert back from the internal sizetype to size_t. */
8164 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
8167 /* Print an error message for an invalid lvalue. USE says
8168 how the lvalue is being used and so selects the error message. */
8171 lvalue_error (enum lvalue_use use)
8176 error ("lvalue required as left operand of assignment");
8179 error ("lvalue required as increment operand");
8182 error ("lvalue required as decrement operand");
8185 error ("lvalue required as unary %<&%> operand");
8188 error ("lvalue required in asm statement");
8195 /* *PTYPE is an incomplete array. Complete it with a domain based on
8196 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
8197 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8198 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
8201 complete_array_type (tree *ptype, tree initial_value, bool do_default)
8203 tree maxindex, type, main_type, elt, unqual_elt;
8204 int failure = 0, quals;
8205 hashval_t hashcode = 0;
8207 maxindex = size_zero_node;
8210 if (TREE_CODE (initial_value) == STRING_CST)
8213 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
8214 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
8216 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
8218 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
8220 if (VEC_empty (constructor_elt, v))
8224 maxindex = integer_minus_one_node;
8229 unsigned HOST_WIDE_INT cnt;
8230 constructor_elt *ce;
8231 bool fold_p = false;
8233 if (VEC_index (constructor_elt, v, 0)->index)
8234 maxindex = fold_convert (sizetype,
8235 VEC_index (constructor_elt,
8237 curindex = maxindex;
8240 VEC_iterate (constructor_elt, v, cnt, ce);
8243 bool curfold_p = false;
8245 curindex = ce->index, curfold_p = true;
8249 curindex = fold_convert (sizetype, curindex);
8250 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
8252 if (tree_int_cst_lt (maxindex, curindex))
8253 maxindex = curindex, fold_p = curfold_p;
8256 maxindex = fold_convert (sizetype, maxindex);
8261 /* Make an error message unless that happened already. */
8262 if (initial_value != error_mark_node)
8274 elt = TREE_TYPE (type);
8275 quals = TYPE_QUALS (strip_array_types (elt));
8279 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
8281 /* Using build_distinct_type_copy and modifying things afterward instead
8282 of using build_array_type to create a new type preserves all of the
8283 TYPE_LANG_FLAG_? bits that the front end may have set. */
8284 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
8285 TREE_TYPE (main_type) = unqual_elt;
8286 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
8287 layout_type (main_type);
8289 /* Make sure we have the canonical MAIN_TYPE. */
8290 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
8291 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
8293 main_type = type_hash_canon (hashcode, main_type);
8295 /* Fix the canonical type. */
8296 if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (main_type))
8297 || TYPE_STRUCTURAL_EQUALITY_P (TYPE_DOMAIN (main_type)))
8298 SET_TYPE_STRUCTURAL_EQUALITY (main_type);
8299 else if (TYPE_CANONICAL (TREE_TYPE (main_type)) != TREE_TYPE (main_type)
8300 || (TYPE_CANONICAL (TYPE_DOMAIN (main_type))
8301 != TYPE_DOMAIN (main_type)))
8302 TYPE_CANONICAL (main_type)
8303 = build_array_type (TYPE_CANONICAL (TREE_TYPE (main_type)),
8304 TYPE_CANONICAL (TYPE_DOMAIN (main_type)));
8306 TYPE_CANONICAL (main_type) = main_type;
8311 type = c_build_qualified_type (main_type, quals);
8313 if (COMPLETE_TYPE_P (type)
8314 && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8315 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8317 error ("size of array is too large");
8318 /* If we proceed with the array type as it is, we'll eventually
8319 crash in tree_low_cst(). */
8320 type = error_mark_node;
8328 /* Used to help initialize the builtin-types.def table. When a type of
8329 the correct size doesn't exist, use error_mark_node instead of NULL.
8330 The later results in segfaults even when a decl using the type doesn't
8334 builtin_type_for_size (int size, bool unsignedp)
8336 tree type = lang_hooks.types.type_for_size (size, unsignedp);
8337 return type ? type : error_mark_node;
8340 /* A helper function for resolve_overloaded_builtin in resolving the
8341 overloaded __sync_ builtins. Returns a positive power of 2 if the
8342 first operand of PARAMS is a pointer to a supported data type.
8343 Returns 0 if an error is encountered. */
8346 sync_resolve_size (tree function, tree params)
8353 error ("too few arguments to function %qE", function);
8357 type = TREE_TYPE (TREE_VALUE (params));
8358 if (TREE_CODE (type) != POINTER_TYPE)
8361 type = TREE_TYPE (type);
8362 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
8365 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
8366 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
8370 error ("incompatible type for argument %d of %qE", 1, function);
8374 /* A helper function for resolve_overloaded_builtin. Adds casts to
8375 PARAMS to make arguments match up with those of FUNCTION. Drops
8376 the variadic arguments at the end. Returns false if some error
8377 was encountered; true on success. */
8380 sync_resolve_params (tree orig_function, tree function, tree params)
8382 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
8386 /* We've declared the implementation functions to use "volatile void *"
8387 as the pointer parameter, so we shouldn't get any complaints from the
8388 call to check_function_arguments what ever type the user used. */
8389 arg_types = TREE_CHAIN (arg_types);
8390 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
8393 /* For the rest of the values, we need to cast these to FTYPE, so that we
8394 don't get warnings for passing pointer types, etc. */
8395 while (arg_types != void_list_node)
8399 params = TREE_CHAIN (params);
8402 error ("too few arguments to function %qE", orig_function);
8406 /* ??? Ideally for the first conversion we'd use convert_for_assignment
8407 so that we get warnings for anything that doesn't match the pointer
8408 type. This isn't portable across the C and C++ front ends atm. */
8409 val = TREE_VALUE (params);
8410 val = convert (ptype, val);
8411 val = convert (TREE_VALUE (arg_types), val);
8412 TREE_VALUE (params) = val;
8414 arg_types = TREE_CHAIN (arg_types);
8418 /* The definition of these primitives is variadic, with the remaining
8419 being "an optional list of variables protected by the memory barrier".
8420 No clue what that's supposed to mean, precisely, but we consider all
8421 call-clobbered variables to be protected so we're safe. */
8422 TREE_CHAIN (params) = NULL;
8427 /* A helper function for resolve_overloaded_builtin. Adds a cast to
8428 RESULT to make it match the type of the first pointer argument in
8432 sync_resolve_return (tree params, tree result)
8434 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
8435 ptype = TYPE_MAIN_VARIANT (ptype);
8436 return convert (ptype, result);
8439 /* Some builtin functions are placeholders for other expressions. This
8440 function should be called immediately after parsing the call expression
8441 before surrounding code has committed to the type of the expression.
8443 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
8444 PARAMS is the argument list for the call. The return value is non-null
8445 when expansion is complete, and null if normal processing should
8449 resolve_overloaded_builtin (tree function, tree params)
8451 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
8452 switch (DECL_BUILT_IN_CLASS (function))
8454 case BUILT_IN_NORMAL:
8457 if (targetm.resolve_overloaded_builtin)
8458 return targetm.resolve_overloaded_builtin (function, params);
8465 /* Handle BUILT_IN_NORMAL here. */
8468 case BUILT_IN_FETCH_AND_ADD_N:
8469 case BUILT_IN_FETCH_AND_SUB_N:
8470 case BUILT_IN_FETCH_AND_OR_N:
8471 case BUILT_IN_FETCH_AND_AND_N:
8472 case BUILT_IN_FETCH_AND_XOR_N:
8473 case BUILT_IN_FETCH_AND_NAND_N:
8474 case BUILT_IN_ADD_AND_FETCH_N:
8475 case BUILT_IN_SUB_AND_FETCH_N:
8476 case BUILT_IN_OR_AND_FETCH_N:
8477 case BUILT_IN_AND_AND_FETCH_N:
8478 case BUILT_IN_XOR_AND_FETCH_N:
8479 case BUILT_IN_NAND_AND_FETCH_N:
8480 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
8481 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
8482 case BUILT_IN_LOCK_TEST_AND_SET_N:
8483 case BUILT_IN_LOCK_RELEASE_N:
8485 int n = sync_resolve_size (function, params);
8486 tree new_function, result;
8489 return error_mark_node;
8491 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
8492 if (!sync_resolve_params (function, new_function, params))
8493 return error_mark_node;
8495 result = build_function_call (new_function, params);
8496 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
8497 && orig_code != BUILT_IN_LOCK_RELEASE_N)
8498 result = sync_resolve_return (params, result);
8508 /* Ignoring their sign, return true if two scalar types are the same. */
8510 same_scalar_type_ignoring_signedness (tree t1, tree t2)
8512 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
8514 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE || c1 == FIXED_POINT_TYPE)
8515 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE
8516 || c2 == FIXED_POINT_TYPE));
8518 /* Equality works here because c_common_signed_type uses
8519 TYPE_MAIN_VARIANT. */
8520 return c_common_signed_type (t1)
8521 == c_common_signed_type (t2);
8524 /* Check for missing format attributes on function pointers. LTYPE is
8525 the new type or left-hand side type. RTYPE is the old type or
8526 right-hand side type. Returns TRUE if LTYPE is missing the desired
8530 check_missing_format_attribute (tree ltype, tree rtype)
8532 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
8535 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
8536 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
8541 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
8542 if (is_attribute_p ("format", TREE_PURPOSE (la)))
8550 /* Subscripting with type char is likely to lose on a machine where
8551 chars are signed. So warn on any machine, but optionally. Don't
8552 warn for unsigned char since that type is safe. Don't warn for
8553 signed char because anyone who uses that must have done so
8554 deliberately. Furthermore, we reduce the false positive load by
8555 warning only for non-constant value of type char. */
8558 warn_array_subscript_with_type_char (tree index)
8560 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
8561 && TREE_CODE (index) != INTEGER_CST)
8562 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
8565 /* Implement -Wparentheses for the unexpected C precedence rules, to
8566 cover cases like x + y << z which readers are likely to
8567 misinterpret. We have seen an expression in which CODE is a binary
8568 operator used to combine expressions ARG_LEFT and ARG_RIGHT, which
8569 before folding had CODE_LEFT and CODE_RIGHT. CODE_LEFT and
8570 CODE_RIGHT may be ERROR_MARK, which means that that side of the
8571 expression was not formed using a binary or unary operator, or it
8572 was enclosed in parentheses. */
8575 warn_about_parentheses (enum tree_code code,
8576 enum tree_code code_left, tree arg_left,
8577 enum tree_code code_right, tree arg_right)
8579 if (!warn_parentheses)
8582 /* This macro tests that the expression ARG with original tree code
8583 CODE appears to be a boolean expression. or the result of folding a
8584 boolean expression. */
8585 #define APPEARS_TO_BE_BOOLEAN_EXPR_P(CODE, ARG) \
8586 (truth_value_p (TREE_CODE (ARG)) \
8587 || TREE_CODE (TREE_TYPE (ARG)) == BOOLEAN_TYPE \
8588 /* Folding may create 0 or 1 integers from other expressions. */ \
8589 || ((CODE) != INTEGER_CST \
8590 && (integer_onep (ARG) || integer_zerop (ARG))))
8595 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8596 warning (OPT_Wparentheses,
8597 "suggest parentheses around %<+%> inside %<<<%>");
8598 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8599 warning (OPT_Wparentheses,
8600 "suggest parentheses around %<-%> inside %<<<%>");
8604 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8605 warning (OPT_Wparentheses,
8606 "suggest parentheses around %<+%> inside %<>>%>");
8607 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8608 warning (OPT_Wparentheses,
8609 "suggest parentheses around %<-%> inside %<>>%>");
8612 case TRUTH_ORIF_EXPR:
8613 if (code_left == TRUTH_ANDIF_EXPR || code_right == TRUTH_ANDIF_EXPR)
8614 warning (OPT_Wparentheses,
8615 "suggest parentheses around %<&&%> within %<||%>");
8619 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
8620 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8621 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
8622 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8623 warning (OPT_Wparentheses,
8624 "suggest parentheses around arithmetic in operand of %<|%>");
8625 /* Check cases like x|y==z */
8626 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8627 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8628 warning (OPT_Wparentheses,
8629 "suggest parentheses around comparison in operand of %<|%>");
8630 /* Check cases like !x | y */
8631 else if (code_left == TRUTH_NOT_EXPR
8632 && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8633 warning (OPT_Wparentheses, "suggest parentheses around operand of "
8634 "%<!%> or change %<|%> to %<||%> or %<!%> to %<~%>");
8638 if (code_left == BIT_AND_EXPR
8639 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
8640 || code_right == BIT_AND_EXPR
8641 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
8642 warning (OPT_Wparentheses,
8643 "suggest parentheses around arithmetic in operand of %<^%>");
8644 /* Check cases like x^y==z */
8645 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8646 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8647 warning (OPT_Wparentheses,
8648 "suggest parentheses around comparison in operand of %<^%>");
8652 if (code_left == PLUS_EXPR || code_right == PLUS_EXPR)
8653 warning (OPT_Wparentheses,
8654 "suggest parentheses around %<+%> in operand of %<&%>");
8655 else if (code_left == MINUS_EXPR || code_right == MINUS_EXPR)
8656 warning (OPT_Wparentheses,
8657 "suggest parentheses around %<-%> in operand of %<&%>");
8658 /* Check cases like x&y==z */
8659 else if (TREE_CODE_CLASS (code_left) == tcc_comparison
8660 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8661 warning (OPT_Wparentheses,
8662 "suggest parentheses around comparison in operand of %<&%>");
8663 /* Check cases like !x & y */
8664 else if (code_left == TRUTH_NOT_EXPR
8665 && !APPEARS_TO_BE_BOOLEAN_EXPR_P (code_right, arg_right))
8666 warning (OPT_Wparentheses, "suggest parentheses around operand of "
8667 "%<!%> or change %<&%> to %<&&%> or %<!%> to %<~%>");
8671 if (TREE_CODE_CLASS (code_left) == tcc_comparison
8672 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8673 warning (OPT_Wparentheses,
8674 "suggest parentheses around comparison in operand of %<==%>");
8677 if (TREE_CODE_CLASS (code_left) == tcc_comparison
8678 || TREE_CODE_CLASS (code_right) == tcc_comparison)
8679 warning (OPT_Wparentheses,
8680 "suggest parentheses around comparison in operand of %<!=%>");
8684 if (TREE_CODE_CLASS (code) == tcc_comparison
8685 && ((TREE_CODE_CLASS (code_left) == tcc_comparison
8686 && code_left != NE_EXPR && code_left != EQ_EXPR
8687 && INTEGRAL_TYPE_P (TREE_TYPE (arg_left)))
8688 || (TREE_CODE_CLASS (code_right) == tcc_comparison
8689 && code_right != NE_EXPR && code_right != EQ_EXPR
8690 && INTEGRAL_TYPE_P (TREE_TYPE (arg_right)))))
8691 warning (OPT_Wparentheses, "comparisons like %<X<=Y<=Z%> do not "
8692 "have their mathematical meaning");
8695 #undef NOT_A_BOOLEAN_EXPR_P
8698 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
8701 warn_for_unused_label (tree label)
8703 if (!TREE_USED (label))
8705 if (DECL_INITIAL (label))
8706 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
8708 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
8712 #ifndef TARGET_HAS_TARGETCM
8713 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
8716 /* Warn for division by zero according to the value of DIVISOR. LOC
8717 is the location of the division operator. */
8720 warn_for_div_by_zero (location_t loc, tree divisor)
8722 /* If DIVISOR is zero, and has integral or fixed-point type, issue a warning
8723 about division by zero. Do not issue a warning if DIVISOR has a
8724 floating-point type, since we consider 0.0/0.0 a valid way of
8725 generating a NaN. */
8726 if (skip_evaluation == 0
8727 && (integer_zerop (divisor) || fixed_zerop (divisor)))
8728 warning_at (loc, OPT_Wdiv_by_zero, "division by zero");
8731 /* Subroutine of build_binary_op. Give warnings for comparisons
8732 between signed and unsigned quantities that may fail. Do the
8733 checking based on the original operand trees ORIG_OP0 and ORIG_OP1,
8734 so that casts will be considered, but default promotions won't
8737 LOCATION is the location of the comparison operator.
8739 The arguments of this function map directly to local variables
8740 of build_binary_op. */
8743 warn_for_sign_compare (location_t location,
8744 tree orig_op0, tree orig_op1,
8746 tree result_type, enum tree_code resultcode)
8748 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
8749 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
8750 int unsignedp0, unsignedp1;
8752 /* In C++, check for comparison of different enum types. */
8754 && TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
8755 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
8756 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
8757 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
8759 warning_at (location,
8760 OPT_Wsign_compare, "comparison between types %qT and %qT",
8761 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
8764 /* Do not warn if the comparison is being done in a signed type,
8765 since the signed type will only be chosen if it can represent
8766 all the values of the unsigned type. */
8767 if (!TYPE_UNSIGNED (result_type))
8769 /* Do not warn if both operands are unsigned. */
8770 else if (op0_signed == op1_signed)
8774 tree sop, uop, base_type;
8778 sop = orig_op0, uop = orig_op1;
8780 sop = orig_op1, uop = orig_op0;
8782 STRIP_TYPE_NOPS (sop);
8783 STRIP_TYPE_NOPS (uop);
8784 base_type = (TREE_CODE (result_type) == COMPLEX_TYPE
8785 ? TREE_TYPE (result_type) : result_type);
8787 /* Do not warn if the signed quantity is an unsuffixed integer
8788 literal (or some static constant expression involving such
8789 literals or a conditional expression involving such literals)
8790 and it is non-negative. */
8791 if (tree_expr_nonnegative_warnv_p (sop, &ovf))
8793 /* Do not warn if the comparison is an equality operation, the
8794 unsigned quantity is an integral constant, and it would fit
8795 in the result if the result were signed. */
8796 else if (TREE_CODE (uop) == INTEGER_CST
8797 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
8798 && int_fits_type_p (uop, c_common_signed_type (base_type)))
8800 /* In C, do not warn if the unsigned quantity is an enumeration
8801 constant and its maximum value would fit in the result if the
8802 result were signed. */
8803 else if (!c_dialect_cxx() && TREE_CODE (uop) == INTEGER_CST
8804 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
8805 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (uop)),
8806 c_common_signed_type (base_type)))
8809 warning_at (location,
8811 "comparison between signed and unsigned integer expressions");
8814 /* Warn if two unsigned values are being compared in a size larger
8815 than their original size, and one (and only one) is the result of
8816 a `~' operator. This comparison will always fail.
8818 Also warn if one operand is a constant, and the constant does not
8819 have all bits set that are set in the ~ operand when it is
8822 op0 = get_narrower (op0, &unsignedp0);
8823 op1 = get_narrower (op1, &unsignedp1);
8825 if ((TREE_CODE (op0) == BIT_NOT_EXPR)
8826 ^ (TREE_CODE (op1) == BIT_NOT_EXPR))
8828 if (TREE_CODE (op0) == BIT_NOT_EXPR)
8829 op0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0);
8830 if (TREE_CODE (op1) == BIT_NOT_EXPR)
8831 op1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1);
8833 if (host_integerp (op0, 0) || host_integerp (op1, 0))
8836 HOST_WIDE_INT constant, mask;
8840 if (host_integerp (op0, 0))
8843 unsignedp = unsignedp1;
8844 constant = tree_low_cst (op0, 0);
8849 unsignedp = unsignedp0;
8850 constant = tree_low_cst (op1, 0);
8853 bits = TYPE_PRECISION (TREE_TYPE (primop));
8854 if (bits < TYPE_PRECISION (result_type)
8855 && bits < HOST_BITS_PER_LONG && unsignedp)
8857 mask = (~ (HOST_WIDE_INT) 0) << bits;
8858 if ((mask & constant) != mask)
8861 warning (OPT_Wsign_compare,
8862 "promoted ~unsigned is always non-zero");
8864 warning_at (location, OPT_Wsign_compare,
8865 "comparison of promoted ~unsigned with constant");
8869 else if (unsignedp0 && unsignedp1
8870 && (TYPE_PRECISION (TREE_TYPE (op0))
8871 < TYPE_PRECISION (result_type))
8872 && (TYPE_PRECISION (TREE_TYPE (op1))
8873 < TYPE_PRECISION (result_type)))
8874 warning_at (location, OPT_Wsign_compare,
8875 "comparison of promoted ~unsigned with unsigned");
8879 #include "gt-c-common.h"