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