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