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 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
24 #include "coretypes.h"
36 #include "diagnostic.h"
41 #include "langhooks.h"
42 #include "tree-inline.h"
45 #include "tree-iterator.h"
47 #include "tree-mudflap.h"
51 #include "target-def.h"
53 cpp_reader *parse_in; /* Declared in c-pragma.h. */
55 /* We let tm.h override the types used here, to handle trivial differences
56 such as the choice of unsigned int or long unsigned int for size_t.
57 When machines start needing nontrivial differences in the size type,
58 it would be best to do something here to figure out automatically
59 from other information what type to use. */
62 #define SIZE_TYPE "long unsigned int"
66 #define PID_TYPE "int"
70 #define WCHAR_TYPE "int"
73 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
74 #define MODIFIED_WCHAR_TYPE \
75 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
78 #define PTRDIFF_TYPE "long int"
82 #define WINT_TYPE "unsigned int"
86 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
88 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
94 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
96 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
97 ? "long unsigned int" \
98 : "long long unsigned int"))
101 /* The following symbols are subsumed in the c_global_trees array, and
102 listed here individually for documentation purposes.
104 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
106 tree short_integer_type_node;
107 tree long_integer_type_node;
108 tree long_long_integer_type_node;
110 tree short_unsigned_type_node;
111 tree long_unsigned_type_node;
112 tree long_long_unsigned_type_node;
114 tree truthvalue_type_node;
115 tree truthvalue_false_node;
116 tree truthvalue_true_node;
118 tree ptrdiff_type_node;
120 tree unsigned_char_type_node;
121 tree signed_char_type_node;
122 tree wchar_type_node;
123 tree signed_wchar_type_node;
124 tree unsigned_wchar_type_node;
126 tree float_type_node;
127 tree double_type_node;
128 tree long_double_type_node;
130 tree complex_integer_type_node;
131 tree complex_float_type_node;
132 tree complex_double_type_node;
133 tree complex_long_double_type_node;
135 tree dfloat32_type_node;
136 tree dfloat64_type_node;
137 tree_dfloat128_type_node;
139 tree intQI_type_node;
140 tree intHI_type_node;
141 tree intSI_type_node;
142 tree intDI_type_node;
143 tree intTI_type_node;
145 tree unsigned_intQI_type_node;
146 tree unsigned_intHI_type_node;
147 tree unsigned_intSI_type_node;
148 tree unsigned_intDI_type_node;
149 tree unsigned_intTI_type_node;
151 tree widest_integer_literal_type_node;
152 tree widest_unsigned_literal_type_node;
154 Nodes for types `void *' and `const void *'.
156 tree ptr_type_node, const_ptr_type_node;
158 Nodes for types `char *' and `const char *'.
160 tree string_type_node, const_string_type_node;
162 Type `char[SOMENUMBER]'.
163 Used when an array of char is needed and the size is irrelevant.
165 tree char_array_type_node;
167 Type `int[SOMENUMBER]' or something like it.
168 Used when an array of int needed and the size is irrelevant.
170 tree int_array_type_node;
172 Type `wchar_t[SOMENUMBER]' or something like it.
173 Used when a wide string literal is created.
175 tree wchar_array_type_node;
177 Type `int ()' -- used for implicit declaration of functions.
179 tree default_function_type;
181 A VOID_TYPE node, packaged in a TREE_LIST.
185 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
186 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
187 VAR_DECLS, but C++ does.)
189 tree function_name_decl_node;
190 tree pretty_function_name_decl_node;
191 tree c99_function_name_decl_node;
193 Stack of nested function name VAR_DECLs.
195 tree saved_function_name_decls;
199 tree c_global_trees[CTI_MAX];
201 /* Switches common to the C front ends. */
203 /* Nonzero if prepreprocessing only. */
205 int flag_preprocess_only;
207 /* Nonzero means don't output line number information. */
209 char flag_no_line_commands;
211 /* Nonzero causes -E output not to be done, but directives such as
212 #define that have side effects are still obeyed. */
216 /* Nonzero means dump macros in some fashion. */
218 char flag_dump_macros;
220 /* Nonzero means pass #include lines through to the output. */
222 char flag_dump_includes;
224 /* Nonzero means process PCH files while preprocessing. */
226 bool flag_pch_preprocess;
228 /* The file name to which we should write a precompiled header, or
229 NULL if no header will be written in this compile. */
231 const char *pch_file;
233 /* Nonzero if an ISO standard was selected. It rejects macros in the
237 /* Nonzero if -undef was given. It suppresses target built-in macros
241 /* Nonzero means don't recognize the non-ANSI builtin functions. */
245 /* Nonzero means don't recognize the non-ANSI builtin functions.
248 int flag_no_nonansi_builtin;
250 /* Nonzero means give `double' the same size as `float'. */
252 int flag_short_double;
254 /* Nonzero means give `wchar_t' the same size as `short'. */
256 int flag_short_wchar;
258 /* Nonzero means allow implicit conversions between vectors with
259 differing numbers of subparts and/or differing element types. */
260 int flag_lax_vector_conversions;
262 /* Nonzero means allow Microsoft extensions without warnings or errors. */
263 int flag_ms_extensions;
265 /* Nonzero means don't recognize the keyword `asm'. */
269 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
271 int flag_signed_bitfields = 1;
273 /* Warn about #pragma directives that are not recognized. */
275 int warn_unknown_pragmas; /* Tri state variable. */
277 /* Warn about format/argument anomalies in calls to formatted I/O functions
278 (*printf, *scanf, strftime, strfmon, etc.). */
282 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
283 with GCC this doesn't matter as __null is guaranteed to have the right
286 int warn_strict_null_sentinel;
288 /* Zero means that faster, ...NonNil variants of objc_msgSend...
289 calls will be used in ObjC; passing nil receivers to such calls
290 will most likely result in crashes. */
291 int flag_nil_receivers = 1;
293 /* Nonzero means that code generation will be altered to support
294 "zero-link" execution. This currently affects ObjC only, but may
295 affect other languages in the future. */
296 int flag_zero_link = 0;
298 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
299 unit. It will inform the ObjC runtime that class definition(s) herein
300 contained are to replace one(s) previously loaded. */
301 int flag_replace_objc_classes = 0;
303 /* C/ObjC language option variables. */
306 /* Nonzero means allow type mismatches in conditional expressions;
307 just make their values `void'. */
309 int flag_cond_mismatch;
311 /* Nonzero means enable C89 Amendment 1 features. */
315 /* Nonzero means use the ISO C99 dialect of C. */
319 /* Nonzero means that we have builtin functions, and main is an int. */
323 /* Warn if main is suspicious. */
328 /* ObjC language option variables. */
331 /* Open and close the file for outputting class declarations, if
334 int flag_gen_declaration;
336 /* Tells the compiler that this is a special run. Do not perform any
337 compiling, instead we are to test some platform dependent features
338 and output a C header file with appropriate definitions. */
340 int print_struct_values;
342 /* Tells the compiler what is the constant string class for Objc. */
344 const char *constant_string_class_name;
347 /* C++ language option variables. */
350 /* Nonzero means don't recognize any extension keywords. */
352 int flag_no_gnu_keywords;
354 /* Nonzero means do emit exported implementations of functions even if
355 they can be inlined. */
357 int flag_implement_inlines = 1;
359 /* Nonzero means that implicit instantiations will be emitted if needed. */
361 int flag_implicit_templates = 1;
363 /* Nonzero means that implicit instantiations of inline templates will be
364 emitted if needed, even if instantiations of non-inline templates
367 int flag_implicit_inline_templates = 1;
369 /* Nonzero means generate separate instantiation control files and
370 juggle them at link time. */
372 int flag_use_repository;
374 /* Nonzero if we want to issue diagnostics that the standard says are not
377 int flag_optional_diags = 1;
379 /* Nonzero means we should attempt to elide constructors when possible. */
381 int flag_elide_constructors = 1;
383 /* Nonzero means that member functions defined in class scope are
384 inline by default. */
386 int flag_default_inline = 1;
388 /* Controls whether compiler generates 'type descriptor' that give
389 run-time type information. */
393 /* Nonzero if we want to conserve space in the .o files. We do this
394 by putting uninitialized data and runtime initialized data into
395 .common instead of .data at the expense of not flagging multiple
398 int flag_conserve_space;
400 /* Nonzero if we want to obey access control semantics. */
402 int flag_access_control = 1;
404 /* Nonzero if we want to check the return value of new and avoid calling
405 constructors if it is a null pointer. */
409 /* Nonzero if we want to allow the use of experimental features that
410 are likely to become part of C++0x. */
414 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
415 initialization variables.
416 0: Old rules, set by -fno-for-scope.
417 2: New ISO rules, set by -ffor-scope.
418 1: Try to implement new ISO rules, but with backup compatibility
419 (and warnings). This is the default, for now. */
421 int flag_new_for_scope = 1;
423 /* Nonzero if we want to emit defined symbols with common-like linkage as
424 weak symbols where possible, in order to conform to C++ semantics.
425 Otherwise, emit them as local symbols. */
429 /* 0 means we want the preprocessor to not emit line directives for
430 the current working directory. 1 means we want it to do it. -1
431 means we should decide depending on whether debugging information
432 is being emitted or not. */
434 int flag_working_directory = -1;
436 /* Nonzero to use __cxa_atexit, rather than atexit, to register
437 destructors for local statics and global objects. '2' means it has been
438 set nonzero as a default, not by a command-line flag. */
440 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
442 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
443 code. '2' means it has not been set explicitly on the command line. */
445 int flag_use_cxa_get_exception_ptr = 2;
447 /* Nonzero means make the default pedwarns warnings instead of errors.
448 The value of this flag is ignored if -pedantic is specified. */
452 /* Nonzero means to implement standard semantics for exception
453 specifications, calling unexpected if an exception is thrown that
454 doesn't match the specification. Zero means to treat them as
455 assertions and optimize accordingly, but not check them. */
457 int flag_enforce_eh_specs = 1;
459 /* Nonzero means to generate thread-safe code for initializing local
462 int flag_threadsafe_statics = 1;
464 /* Nonzero means warn about implicit declarations. */
466 int warn_implicit = 1;
468 /* Maximum template instantiation depth. This limit is rather
469 arbitrary, but it exists to limit the time it takes to notice
470 infinite template instantiations. */
472 int max_tinst_depth = 500;
476 /* The elements of `ridpointers' are identifier nodes for the reserved
477 type names and storage classes. It is indexed by a RID_... value. */
480 tree (*make_fname_decl) (tree, int);
482 /* Nonzero means the expression being parsed will never be evaluated.
483 This is a count, since unevaluated expressions can nest. */
486 /* Information about how a function name is generated. */
489 tree *const decl; /* pointer to the VAR_DECL. */
490 const unsigned rid; /* RID number for the identifier. */
491 const int pretty; /* How pretty is it? */
494 /* The three ways of getting then name of the current function. */
496 const struct fname_var_t fname_vars[] =
498 /* C99 compliant __func__, must be first. */
499 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
500 /* GCC __FUNCTION__ compliant. */
501 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
502 /* GCC __PRETTY_FUNCTION__ compliant. */
503 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
507 static tree check_case_value (tree);
508 static bool check_case_bounds (tree, tree, tree *, tree *);
510 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
511 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
512 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
513 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
514 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
515 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
516 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
517 static tree handle_always_inline_attribute (tree *, tree, tree, int,
519 static tree handle_gnu_inline_attribute (tree *, tree, tree, int,
521 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
522 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
523 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
526 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_transparent_union_attribute (tree *, tree, tree,
529 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
533 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
534 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
535 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
536 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
537 static tree handle_visibility_attribute (tree *, tree, tree, int,
539 static tree handle_tls_model_attribute (tree *, tree, tree, int,
541 static tree handle_no_instrument_function_attribute (tree *, tree,
543 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
544 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
545 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
547 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
548 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
549 static tree handle_deprecated_attribute (tree *, tree, tree, int,
551 static tree handle_vector_size_attribute (tree *, tree, tree, int,
553 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
554 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
555 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
556 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
558 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
560 static void check_function_nonnull (tree, int, tree *);
561 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
562 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
563 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
564 static int resort_field_decl_cmp (const void *, const void *);
566 /* Table of machine-independent attributes common to all C-like languages. */
567 const struct attribute_spec c_common_attribute_table[] =
569 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
570 { "packed", 0, 0, false, false, false,
571 handle_packed_attribute },
572 { "nocommon", 0, 0, true, false, false,
573 handle_nocommon_attribute },
574 { "common", 0, 0, true, false, false,
575 handle_common_attribute },
576 /* FIXME: logically, noreturn attributes should be listed as
577 "false, true, true" and apply to function types. But implementing this
578 would require all the places in the compiler that use TREE_THIS_VOLATILE
579 on a decl to identify non-returning functions to be located and fixed
580 to check the function type instead. */
581 { "noreturn", 0, 0, true, false, false,
582 handle_noreturn_attribute },
583 { "volatile", 0, 0, true, false, false,
584 handle_noreturn_attribute },
585 { "noinline", 0, 0, true, false, false,
586 handle_noinline_attribute },
587 { "always_inline", 0, 0, true, false, false,
588 handle_always_inline_attribute },
589 { "gnu_inline", 0, 0, true, false, false,
590 handle_gnu_inline_attribute },
591 { "flatten", 0, 0, true, false, false,
592 handle_flatten_attribute },
593 { "used", 0, 0, true, false, false,
594 handle_used_attribute },
595 { "unused", 0, 0, false, false, false,
596 handle_unused_attribute },
597 { "externally_visible", 0, 0, true, false, false,
598 handle_externally_visible_attribute },
599 /* The same comments as for noreturn attributes apply to const ones. */
600 { "const", 0, 0, true, false, false,
601 handle_const_attribute },
602 { "transparent_union", 0, 0, false, false, false,
603 handle_transparent_union_attribute },
604 { "constructor", 0, 1, true, false, false,
605 handle_constructor_attribute },
606 { "destructor", 0, 1, true, false, false,
607 handle_destructor_attribute },
608 { "mode", 1, 1, false, true, false,
609 handle_mode_attribute },
610 { "section", 1, 1, true, false, false,
611 handle_section_attribute },
612 { "aligned", 0, 1, false, false, false,
613 handle_aligned_attribute },
614 { "weak", 0, 0, true, false, false,
615 handle_weak_attribute },
616 { "alias", 1, 1, true, false, false,
617 handle_alias_attribute },
618 { "weakref", 0, 1, true, false, false,
619 handle_weakref_attribute },
620 { "no_instrument_function", 0, 0, true, false, false,
621 handle_no_instrument_function_attribute },
622 { "malloc", 0, 0, true, false, false,
623 handle_malloc_attribute },
624 { "returns_twice", 0, 0, true, false, false,
625 handle_returns_twice_attribute },
626 { "no_stack_limit", 0, 0, true, false, false,
627 handle_no_limit_stack_attribute },
628 { "pure", 0, 0, true, false, false,
629 handle_pure_attribute },
630 /* For internal use (marking of builtins) only. The name contains space
631 to prevent its usage in source code. */
632 { "no vops", 0, 0, true, false, false,
633 handle_novops_attribute },
634 { "deprecated", 0, 0, false, false, false,
635 handle_deprecated_attribute },
636 { "vector_size", 1, 1, false, true, false,
637 handle_vector_size_attribute },
638 { "visibility", 1, 1, false, false, false,
639 handle_visibility_attribute },
640 { "tls_model", 1, 1, true, false, false,
641 handle_tls_model_attribute },
642 { "nonnull", 0, -1, false, true, true,
643 handle_nonnull_attribute },
644 { "nothrow", 0, 0, true, false, false,
645 handle_nothrow_attribute },
646 { "may_alias", 0, 0, false, true, false, NULL },
647 { "cleanup", 1, 1, true, false, false,
648 handle_cleanup_attribute },
649 { "warn_unused_result", 0, 0, false, true, true,
650 handle_warn_unused_result_attribute },
651 { "sentinel", 0, 1, false, true, true,
652 handle_sentinel_attribute },
653 { "cold", 0, 0, true, false, false,
654 handle_cold_attribute },
655 { "hot", 0, 0, true, false, false,
656 handle_hot_attribute },
657 { NULL, 0, 0, false, false, false, NULL }
660 /* Give the specifications for the format attributes, used by C and all
663 const struct attribute_spec c_common_format_attribute_table[] =
665 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
666 { "format", 3, 3, false, true, true,
667 handle_format_attribute },
668 { "format_arg", 1, 1, false, true, true,
669 handle_format_arg_attribute },
670 { NULL, 0, 0, false, false, false, NULL }
673 /* Functions called automatically at the beginning and end of execution. */
678 /* Push current bindings for the function name VAR_DECLS. */
681 start_fname_decls (void)
684 tree saved = NULL_TREE;
686 for (ix = 0; fname_vars[ix].decl; ix++)
688 tree decl = *fname_vars[ix].decl;
692 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
693 *fname_vars[ix].decl = NULL_TREE;
696 if (saved || saved_function_name_decls)
697 /* Normally they'll have been NULL, so only push if we've got a
698 stack, or they are non-NULL. */
699 saved_function_name_decls = tree_cons (saved, NULL_TREE,
700 saved_function_name_decls);
703 /* Finish up the current bindings, adding them into the current function's
704 statement tree. This must be done _before_ finish_stmt_tree is called.
705 If there is no current function, we must be at file scope and no statements
706 are involved. Pop the previous bindings. */
709 finish_fname_decls (void)
712 tree stmts = NULL_TREE;
713 tree stack = saved_function_name_decls;
715 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
716 append_to_statement_list (TREE_VALUE (stack), &stmts);
720 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
722 if (TREE_CODE (*bodyp) == BIND_EXPR)
723 bodyp = &BIND_EXPR_BODY (*bodyp);
725 append_to_statement_list_force (*bodyp, &stmts);
729 for (ix = 0; fname_vars[ix].decl; ix++)
730 *fname_vars[ix].decl = NULL_TREE;
734 /* We had saved values, restore them. */
737 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
739 tree decl = TREE_PURPOSE (saved);
740 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
742 *fname_vars[ix].decl = decl;
744 stack = TREE_CHAIN (stack);
746 saved_function_name_decls = stack;
749 /* Return the text name of the current function, suitably prettified
750 by PRETTY_P. Return string must be freed by caller. */
753 fname_as_string (int pretty_p)
755 const char *name = "top level";
765 if (current_function_decl)
766 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
768 if (c_lex_string_translate)
770 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
771 cpp_string cstr = { 0, 0 }, strname;
773 namep = XNEWVEC (char, len);
774 snprintf (namep, len, "\"%s\"", name);
775 strname.text = (unsigned char *) namep;
776 strname.len = len - 1;
778 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
781 return (char *) cstr.text;
785 namep = xstrdup (name);
790 /* Expand DECL if it declares an entity not handled by the
794 c_expand_decl (tree decl)
796 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
798 /* Let the back-end know about this variable. */
799 if (!anon_aggr_type_p (TREE_TYPE (decl)))
800 emit_local_var (decl);
802 expand_anon_union_decl (decl, NULL_TREE,
803 DECL_ANON_UNION_ELEMS (decl));
812 /* Return the VAR_DECL for a const char array naming the current
813 function. If the VAR_DECL has not yet been created, create it
814 now. RID indicates how it should be formatted and IDENTIFIER_NODE
815 ID is its name (unfortunately C and C++ hold the RID values of
816 keywords in different places, so we can't derive RID from ID in
817 this language independent code. */
820 fname_decl (unsigned int rid, tree id)
823 tree decl = NULL_TREE;
825 for (ix = 0; fname_vars[ix].decl; ix++)
826 if (fname_vars[ix].rid == rid)
829 decl = *fname_vars[ix].decl;
832 /* If a tree is built here, it would normally have the lineno of
833 the current statement. Later this tree will be moved to the
834 beginning of the function and this line number will be wrong.
835 To avoid this problem set the lineno to 0 here; that prevents
836 it from appearing in the RTL. */
838 location_t saved_location = input_location;
839 #ifdef USE_MAPPED_LOCATION
840 input_location = UNKNOWN_LOCATION;
845 stmts = push_stmt_list ();
846 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
847 stmts = pop_stmt_list (stmts);
848 if (!IS_EMPTY_STMT (stmts))
849 saved_function_name_decls
850 = tree_cons (decl, stmts, saved_function_name_decls);
851 *fname_vars[ix].decl = decl;
852 input_location = saved_location;
854 if (!ix && !current_function_decl)
855 pedwarn ("%qD is not defined outside of function scope", decl);
860 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
863 fix_string_type (tree value)
865 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
866 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
867 int length = TREE_STRING_LENGTH (value);
869 tree e_type, i_type, a_type;
871 /* Compute the number of elements, for the array type. */
872 nchars = wide_flag ? length / wchar_bytes : length;
874 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
875 limit in C++98 Annex B is very large (65536) and is not normative,
876 so we do not diagnose it (warn_overlength_strings is forced off
877 in c_common_post_options). */
878 if (warn_overlength_strings)
880 const int nchars_max = flag_isoc99 ? 4095 : 509;
881 const int relevant_std = flag_isoc99 ? 99 : 90;
882 if (nchars - 1 > nchars_max)
883 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
884 separate the %d from the 'C'. 'ISO' should not be
885 translated, but it may be moved after 'C%d' in languages
886 where modifiers follow nouns. */
887 pedwarn ("string length %qd is greater than the length %qd "
888 "ISO C%d compilers are required to support",
889 nchars - 1, nchars_max, relevant_std);
892 /* Create the array type for the string constant. The ISO C++
893 standard says that a string literal has type `const char[N]' or
894 `const wchar_t[N]'. We use the same logic when invoked as a C
895 front-end with -Wwrite-strings.
896 ??? We should change the type of an expression depending on the
897 state of a warning flag. We should just be warning -- see how
898 this is handled in the C++ front-end for the deprecated implicit
899 conversion from string literals to `char*' or `wchar_t*'.
901 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
902 array type being the unqualified version of that type.
903 Therefore, if we are constructing an array of const char, we must
904 construct the matching unqualified array type first. The C front
905 end does not require this, but it does no harm, so we do it
907 e_type = wide_flag ? wchar_type_node : char_type_node;
908 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
909 a_type = build_array_type (e_type, i_type);
910 if (c_dialect_cxx() || warn_write_strings)
911 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
913 TREE_TYPE (value) = a_type;
914 TREE_CONSTANT (value) = 1;
915 TREE_INVARIANT (value) = 1;
916 TREE_READONLY (value) = 1;
917 TREE_STATIC (value) = 1;
921 /* Print a warning if a constant expression had overflow in folding.
922 Invoke this function on every expression that the language
923 requires to be a constant expression.
924 Note the ANSI C standard says it is erroneous for a
925 constant expression to overflow. */
928 constant_expression_warning (tree value)
930 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
931 || TREE_CODE (value) == VECTOR_CST
932 || TREE_CODE (value) == COMPLEX_CST)
933 && TREE_OVERFLOW (value)
936 pedwarn ("overflow in constant expression");
939 /* Print a warning if an expression had overflow in folding and its
942 Invoke this function on every expression that
943 (1) appears in the source code, and
944 (2) is a constant expression that overflowed, and
945 (3) is not already checked by convert_and_check;
946 however, do not invoke this function on operands of explicit casts
947 or when the expression is the result of an operator and any operand
948 already overflowed. */
951 overflow_warning (tree value)
953 if (skip_evaluation) return;
955 switch (TREE_CODE (value))
958 warning (OPT_Woverflow, "integer overflow in expression");
962 warning (OPT_Woverflow, "floating point overflow in expression");
966 warning (OPT_Woverflow, "vector overflow in expression");
970 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
971 warning (OPT_Woverflow, "complex integer overflow in expression");
972 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
973 warning (OPT_Woverflow, "complex floating point overflow in expression");
982 /* Warn about use of a logical || / && operator being used in a
983 context where it is likely that the bitwise equivalent was intended
984 by the programmer. CODE is the TREE_CODE of the operator, ARG1
985 and ARG2 the arguments. */
988 warn_logical_operator (enum tree_code code, tree arg1, tree
993 case TRUTH_ANDIF_EXPR:
994 case TRUTH_ORIF_EXPR:
997 if (!TREE_NO_WARNING (arg1)
998 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
999 && !CONSTANT_CLASS_P (arg1)
1000 && TREE_CODE (arg2) == INTEGER_CST
1001 && !integer_zerop (arg2))
1003 warning (OPT_Wlogical_op,
1004 "logical %<%s%> with non-zero constant "
1005 "will always evaluate as true",
1006 ((code == TRUTH_ANDIF_EXPR)
1007 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1008 TREE_NO_WARNING (arg1) = true;
1017 /* Print a warning about casts that might indicate violation
1018 of strict aliasing rules if -Wstrict-aliasing is used and
1019 strict aliasing mode is in effect. OTYPE is the original
1020 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1023 strict_aliasing_warning (tree otype, tree type, tree expr)
1025 if (flag_strict_aliasing && warn_strict_aliasing
1026 && POINTER_TYPE_P (type) && POINTER_TYPE_P (otype)
1027 && TREE_CODE (expr) == ADDR_EXPR
1028 && (DECL_P (TREE_OPERAND (expr, 0))
1029 || handled_component_p (TREE_OPERAND (expr, 0)))
1030 && !VOID_TYPE_P (TREE_TYPE (type)))
1032 /* Casting the address of an object to non void pointer. Warn
1033 if the cast breaks type based aliasing. */
1034 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
1035 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1036 "might break strict-aliasing rules");
1039 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1040 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1042 if (!alias_sets_conflict_p (set1, set2))
1043 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1044 "pointer will break strict-aliasing rules");
1045 else if (warn_strict_aliasing > 1
1046 && !alias_sets_might_conflict_p (set1, set2))
1047 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1048 "pointer might break strict-aliasing rules");
1053 /* Print a warning about if (); or if () .. else; constructs
1054 via the special empty statement node that we create. INNER_THEN
1055 and INNER_ELSE are the statement lists of the if and the else
1059 empty_body_warning (tree inner_then, tree inner_else)
1061 if (warn_empty_body)
1063 if (TREE_CODE (inner_then) == STATEMENT_LIST
1064 && STATEMENT_LIST_TAIL (inner_then))
1065 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1067 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1068 && STATEMENT_LIST_TAIL (inner_else))
1069 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1071 if (IS_EMPTY_STMT (inner_then) && !inner_else)
1072 warning (OPT_Wempty_body, "%Hempty body in an if-statement",
1073 EXPR_LOCUS (inner_then));
1075 if (inner_else && IS_EMPTY_STMT (inner_else))
1076 warning (OPT_Wempty_body, "%Hempty body in an else-statement",
1077 EXPR_LOCUS (inner_else));
1081 /* Warn for unlikely, improbable, or stupid DECL declarations
1085 check_main_parameter_types (tree decl)
1090 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1091 args = TREE_CHAIN (args))
1093 tree type = args ? TREE_VALUE (args) : 0;
1095 if (type == void_type_node || type == error_mark_node )
1102 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1103 pedwarn ("first argument of %q+D should be %<int%>", decl);
1107 if (TREE_CODE (type) != POINTER_TYPE
1108 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1109 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1111 pedwarn ("second argument of %q+D should be %<char **%>",
1116 if (TREE_CODE (type) != POINTER_TYPE
1117 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1118 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1120 pedwarn ("third argument of %q+D should probably be "
1121 "%<char **%>", decl);
1126 /* It is intentional that this message does not mention the third
1127 argument because it's only mentioned in an appendix of the
1129 if (argct > 0 && (argct < 2 || argct > 3))
1130 pedwarn ("%q+D takes only zero or two arguments", decl);
1133 /* True if vector types T1 and T2 can be converted to each other
1134 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1135 can only be converted with -flax-vector-conversions yet that is not
1136 in effect, emit a note telling the user about that option if such
1137 a note has not previously been emitted. */
1139 vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note)
1141 static bool emitted_lax_note = false;
1142 bool convertible_lax;
1144 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1145 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1149 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1150 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1151 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1152 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1153 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1155 if (!convertible_lax || flag_lax_vector_conversions)
1156 return convertible_lax;
1158 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1159 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2)))
1162 if (emit_lax_note && !emitted_lax_note)
1164 emitted_lax_note = true;
1165 inform ("use -flax-vector-conversions to permit "
1166 "conversions between vectors with differing "
1167 "element types or numbers of subparts");
1173 /* Warns if the conversion of EXPR to TYPE may alter a value.
1174 This function is called from convert_and_check. */
1177 conversion_warning (tree type, tree expr)
1179 bool give_warning = false;
1181 unsigned int formal_prec = TYPE_PRECISION (type);
1183 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1185 /* Warn for real constant that is not an exact integer converted
1187 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1188 && TREE_CODE (type) == INTEGER_TYPE)
1190 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1191 give_warning = true;
1193 /* Warn for an integer constant that does not fit into integer type. */
1194 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1195 && TREE_CODE (type) == INTEGER_TYPE
1196 && !int_fits_type_p (expr, type))
1198 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1199 warning (OPT_Wconversion,
1200 "negative integer implicitly converted to unsigned type");
1202 give_warning = true;
1204 else if (TREE_CODE (type) == REAL_TYPE)
1206 /* Warn for an integer constant that does not fit into real type. */
1207 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1209 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1210 if (!exact_real_truncate (TYPE_MODE (type), &a))
1211 give_warning = true;
1213 /* Warn for a real constant that does not fit into a smaller
1215 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1216 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1218 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1219 if (!exact_real_truncate (TYPE_MODE (type), &a))
1220 give_warning = true;
1225 warning (OPT_Wconversion,
1226 "conversion to %qT alters %qT constant value",
1227 type, TREE_TYPE (expr));
1229 else /* 'expr' is not a constant. */
1231 /* Warn for real types converted to integer types. */
1232 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1233 && TREE_CODE (type) == INTEGER_TYPE)
1234 give_warning = true;
1236 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1237 && TREE_CODE (type) == INTEGER_TYPE)
1239 /* Warn for integer types converted to smaller integer types. */
1240 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr))
1241 /* When they are the same width but different signedness,
1242 then the value may change. */
1243 || (formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1244 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1245 /* Even when converted to a bigger type, if the type is
1246 unsigned but expr is signed, then negative values
1248 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1249 give_warning = true;
1252 /* Warn for integer types converted to real types if and only if
1253 all the range of values of the integer type cannot be
1254 represented by the real type. */
1255 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1256 && TREE_CODE (type) == REAL_TYPE)
1258 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1259 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1260 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1261 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1263 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1264 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1265 give_warning = true;
1268 /* Warn for real types converted to smaller real types. */
1269 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1270 && TREE_CODE (type) == REAL_TYPE
1271 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1272 give_warning = true;
1276 warning (OPT_Wconversion,
1277 "conversion to %qT from %qT may alter its value",
1278 type, TREE_TYPE (expr));
1282 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1283 Invoke this function on every expression that is converted implicitly,
1284 i.e. because of language rules and not because of an explicit cast. */
1287 convert_and_check (tree type, tree expr)
1291 if (TREE_TYPE (expr) == type)
1294 result = convert (type, expr);
1296 if (skip_evaluation || TREE_OVERFLOW_P (expr))
1299 if (TREE_CODE (expr) == INTEGER_CST
1300 && (TREE_CODE (type) == INTEGER_TYPE
1301 || TREE_CODE (type) == ENUMERAL_TYPE)
1302 && !int_fits_type_p (expr, type))
1304 /* Do not diagnose overflow in a constant expression merely
1305 because a conversion overflowed. */
1306 if (TREE_OVERFLOW (result))
1307 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1309 if (TYPE_UNSIGNED (type))
1311 /* This detects cases like converting -129 or 256 to
1313 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1314 warning (OPT_Woverflow,
1315 "large integer implicitly truncated to unsigned type");
1316 else if (warn_conversion)
1317 conversion_warning (type, expr);
1319 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
1320 warning (OPT_Woverflow,
1321 "overflow in implicit constant conversion");
1322 /* No warning for converting 0x80000000 to int. */
1324 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1325 || TYPE_PRECISION (TREE_TYPE (expr))
1326 != TYPE_PRECISION (type)))
1327 warning (OPT_Woverflow,
1328 "overflow in implicit constant conversion");
1330 else if (warn_conversion)
1331 conversion_warning (type, expr);
1333 else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
1334 warning (OPT_Woverflow,
1335 "overflow in implicit constant conversion");
1336 else if (warn_conversion)
1337 conversion_warning (type, expr);
1342 /* A node in a list that describes references to variables (EXPR), which are
1343 either read accesses if WRITER is zero, or write accesses, in which case
1344 WRITER is the parent of EXPR. */
1351 /* Used to implement a cache the results of a call to verify_tree. We only
1352 use this for SAVE_EXPRs. */
1355 struct tlist_cache *next;
1356 struct tlist *cache_before_sp;
1357 struct tlist *cache_after_sp;
1361 /* Obstack to use when allocating tlist structures, and corresponding
1363 static struct obstack tlist_obstack;
1364 static char *tlist_firstobj = 0;
1366 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1368 static struct tlist *warned_ids;
1369 /* SAVE_EXPRs need special treatment. We process them only once and then
1370 cache the results. */
1371 static struct tlist_cache *save_expr_cache;
1373 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1374 static void merge_tlist (struct tlist **, struct tlist *, int);
1375 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1376 static int warning_candidate_p (tree);
1377 static void warn_for_collisions (struct tlist *);
1378 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1379 static struct tlist *new_tlist (struct tlist *, tree, tree);
1381 /* Create a new struct tlist and fill in its fields. */
1382 static struct tlist *
1383 new_tlist (struct tlist *next, tree t, tree writer)
1386 l = XOBNEW (&tlist_obstack, struct tlist);
1393 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1394 is nonnull, we ignore any node we find which has a writer equal to it. */
1397 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1401 struct tlist *next = add->next;
1404 if (!exclude_writer || add->writer != exclude_writer)
1405 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1410 /* Merge the nodes of ADD into TO. This merging process is done so that for
1411 each variable that already exists in TO, no new node is added; however if
1412 there is a write access recorded in ADD, and an occurrence on TO is only
1413 a read access, then the occurrence in TO will be modified to record the
1417 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1419 struct tlist **end = to;
1422 end = &(*end)->next;
1428 struct tlist *next = add->next;
1430 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1431 if (tmp2->expr == add->expr)
1435 tmp2->writer = add->writer;
1439 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1440 end = &(*end)->next;
1447 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1448 references in list LIST conflict with it, excluding reads if ONLY writers
1452 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1457 /* Avoid duplicate warnings. */
1458 for (tmp = warned_ids; tmp; tmp = tmp->next)
1459 if (tmp->expr == written)
1464 if (list->expr == written
1465 && list->writer != writer
1466 && (!only_writes || list->writer)
1467 && DECL_NAME (list->expr))
1469 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1470 warning (0, "operation on %qE may be undefined", list->expr);
1476 /* Given a list LIST of references to variables, find whether any of these
1477 can cause conflicts due to missing sequence points. */
1480 warn_for_collisions (struct tlist *list)
1484 for (tmp = list; tmp; tmp = tmp->next)
1487 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1491 /* Return nonzero if X is a tree that can be verified by the sequence point
1494 warning_candidate_p (tree x)
1496 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1499 /* Walk the tree X, and record accesses to variables. If X is written by the
1500 parent tree, WRITER is the parent.
1501 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1502 expression or its only operand forces a sequence point, then everything up
1503 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1505 Once we return, we will have emitted warnings if any subexpression before
1506 such a sequence point could be undefined. On a higher level, however, the
1507 sequence point may not be relevant, and we'll merge the two lists.
1509 Example: (b++, a) + b;
1510 The call that processes the COMPOUND_EXPR will store the increment of B
1511 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1512 processes the PLUS_EXPR will need to merge the two lists so that
1513 eventually, all accesses end up on the same list (and we'll warn about the
1514 unordered subexpressions b++ and b.
1516 A note on merging. If we modify the former example so that our expression
1519 care must be taken not simply to add all three expressions into the final
1520 PNO_SP list. The function merge_tlist takes care of that by merging the
1521 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1522 way, so that no more than one access to B is recorded. */
1525 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1528 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1529 enum tree_code code;
1530 enum tree_code_class cl;
1532 /* X may be NULL if it is the operand of an empty statement expression
1538 code = TREE_CODE (x);
1539 cl = TREE_CODE_CLASS (code);
1541 if (warning_candidate_p (x))
1543 *pno_sp = new_tlist (*pno_sp, x, writer);
1553 case TRUTH_ANDIF_EXPR:
1554 case TRUTH_ORIF_EXPR:
1555 tmp_before = tmp_nosp = tmp_list3 = 0;
1556 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1557 warn_for_collisions (tmp_nosp);
1558 merge_tlist (pbefore_sp, tmp_before, 0);
1559 merge_tlist (pbefore_sp, tmp_nosp, 0);
1560 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1561 merge_tlist (pbefore_sp, tmp_list3, 0);
1565 tmp_before = tmp_list2 = 0;
1566 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1567 warn_for_collisions (tmp_list2);
1568 merge_tlist (pbefore_sp, tmp_before, 0);
1569 merge_tlist (pbefore_sp, tmp_list2, 1);
1571 tmp_list3 = tmp_nosp = 0;
1572 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1573 warn_for_collisions (tmp_nosp);
1574 merge_tlist (pbefore_sp, tmp_list3, 0);
1576 tmp_list3 = tmp_list2 = 0;
1577 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1578 warn_for_collisions (tmp_list2);
1579 merge_tlist (pbefore_sp, tmp_list3, 0);
1580 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1581 two first, to avoid warning for (a ? b++ : b++). */
1582 merge_tlist (&tmp_nosp, tmp_list2, 0);
1583 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1586 case PREDECREMENT_EXPR:
1587 case PREINCREMENT_EXPR:
1588 case POSTDECREMENT_EXPR:
1589 case POSTINCREMENT_EXPR:
1590 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1594 tmp_before = tmp_nosp = tmp_list3 = 0;
1595 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1596 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1597 /* Expressions inside the LHS are not ordered wrt. the sequence points
1598 in the RHS. Example:
1600 Despite the fact that the modification of "a" is in the before_sp
1601 list (tmp_before), it conflicts with the use of "a" in the LHS.
1602 We can handle this by adding the contents of tmp_list3
1603 to those of tmp_before, and redoing the collision warnings for that
1605 add_tlist (&tmp_before, tmp_list3, x, 1);
1606 warn_for_collisions (tmp_before);
1607 /* Exclude the LHS itself here; we first have to merge it into the
1608 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1609 didn't exclude the LHS, we'd get it twice, once as a read and once
1611 add_tlist (pno_sp, tmp_list3, x, 0);
1612 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1614 merge_tlist (pbefore_sp, tmp_before, 0);
1615 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1616 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1617 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1621 /* We need to warn about conflicts among arguments and conflicts between
1622 args and the function address. Side effects of the function address,
1623 however, are not ordered by the sequence point of the call. */
1625 call_expr_arg_iterator iter;
1627 tmp_before = tmp_nosp = 0;
1628 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1629 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1631 tmp_list2 = tmp_list3 = 0;
1632 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1633 merge_tlist (&tmp_list3, tmp_list2, 0);
1634 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1636 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1637 warn_for_collisions (tmp_before);
1638 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1643 /* Scan all the list, e.g. indices of multi dimensional array. */
1646 tmp_before = tmp_nosp = 0;
1647 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1648 merge_tlist (&tmp_nosp, tmp_before, 0);
1649 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1656 struct tlist_cache *t;
1657 for (t = save_expr_cache; t; t = t->next)
1663 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1664 t->next = save_expr_cache;
1666 save_expr_cache = t;
1668 tmp_before = tmp_nosp = 0;
1669 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1670 warn_for_collisions (tmp_nosp);
1675 struct tlist *t = tmp_nosp;
1677 merge_tlist (&tmp_list3, t, 0);
1679 t->cache_before_sp = tmp_before;
1680 t->cache_after_sp = tmp_list3;
1682 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1683 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1688 /* For other expressions, simply recurse on their operands.
1689 Manual tail recursion for unary expressions.
1690 Other non-expressions need not be processed. */
1691 if (cl == tcc_unary)
1693 x = TREE_OPERAND (x, 0);
1697 else if (IS_EXPR_CODE_CLASS (cl))
1700 int max = TREE_OPERAND_LENGTH (x);
1701 for (lp = 0; lp < max; lp++)
1703 tmp_before = tmp_nosp = 0;
1704 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1705 merge_tlist (&tmp_nosp, tmp_before, 0);
1706 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1713 /* Try to warn for undefined behavior in EXPR due to missing sequence
1717 verify_sequence_points (tree expr)
1719 struct tlist *before_sp = 0, *after_sp = 0;
1722 save_expr_cache = 0;
1723 if (tlist_firstobj == 0)
1725 gcc_obstack_init (&tlist_obstack);
1726 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1729 verify_tree (expr, &before_sp, &after_sp, 0);
1730 warn_for_collisions (after_sp);
1731 obstack_free (&tlist_obstack, tlist_firstobj);
1734 /* Validate the expression after `case' and apply default promotions. */
1737 check_case_value (tree value)
1739 if (value == NULL_TREE)
1742 /* ??? Can we ever get nops here for a valid case value? We
1744 STRIP_TYPE_NOPS (value);
1745 /* In C++, the following is allowed:
1748 switch (...) { case i: ... }
1750 So, we try to reduce the VALUE to a constant that way. */
1751 if (c_dialect_cxx ())
1753 value = decl_constant_value (value);
1754 STRIP_TYPE_NOPS (value);
1755 value = fold (value);
1758 if (TREE_CODE (value) == INTEGER_CST)
1759 /* Promote char or short to int. */
1760 value = perform_integral_promotions (value);
1761 else if (value != error_mark_node)
1763 error ("case label does not reduce to an integer constant");
1764 value = error_mark_node;
1767 constant_expression_warning (value);
1772 /* See if the case values LOW and HIGH are in the range of the original
1773 type (i.e. before the default conversion to int) of the switch testing
1775 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1776 the type before promoting it. CASE_LOW_P is a pointer to the lower
1777 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1778 if the case is not a case range.
1779 The caller has to make sure that we are not called with NULL for
1780 CASE_LOW_P (i.e. the default case).
1781 Returns true if the case label is in range of ORIG_TYPE (saturated or
1782 untouched) or false if the label is out of range. */
1785 check_case_bounds (tree type, tree orig_type,
1786 tree *case_low_p, tree *case_high_p)
1788 tree min_value, max_value;
1789 tree case_low = *case_low_p;
1790 tree case_high = case_high_p ? *case_high_p : case_low;
1792 /* If there was a problem with the original type, do nothing. */
1793 if (orig_type == error_mark_node)
1796 min_value = TYPE_MIN_VALUE (orig_type);
1797 max_value = TYPE_MAX_VALUE (orig_type);
1799 /* Case label is less than minimum for type. */
1800 if (tree_int_cst_compare (case_low, min_value) < 0
1801 && tree_int_cst_compare (case_high, min_value) < 0)
1803 warning (0, "case label value is less than minimum value for type");
1807 /* Case value is greater than maximum for type. */
1808 if (tree_int_cst_compare (case_low, max_value) > 0
1809 && tree_int_cst_compare (case_high, max_value) > 0)
1811 warning (0, "case label value exceeds maximum value for type");
1815 /* Saturate lower case label value to minimum. */
1816 if (tree_int_cst_compare (case_high, min_value) >= 0
1817 && tree_int_cst_compare (case_low, min_value) < 0)
1819 warning (0, "lower value in case label range"
1820 " less than minimum value for type");
1821 case_low = min_value;
1824 /* Saturate upper case label value to maximum. */
1825 if (tree_int_cst_compare (case_low, max_value) <= 0
1826 && tree_int_cst_compare (case_high, max_value) > 0)
1828 warning (0, "upper value in case label range"
1829 " exceeds maximum value for type");
1830 case_high = max_value;
1833 if (*case_low_p != case_low)
1834 *case_low_p = convert (type, case_low);
1835 if (case_high_p && *case_high_p != case_high)
1836 *case_high_p = convert (type, case_high);
1841 /* Return an integer type with BITS bits of precision,
1842 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1845 c_common_type_for_size (unsigned int bits, int unsignedp)
1847 if (bits == TYPE_PRECISION (integer_type_node))
1848 return unsignedp ? unsigned_type_node : integer_type_node;
1850 if (bits == TYPE_PRECISION (signed_char_type_node))
1851 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1853 if (bits == TYPE_PRECISION (short_integer_type_node))
1854 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1856 if (bits == TYPE_PRECISION (long_integer_type_node))
1857 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1859 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1860 return (unsignedp ? long_long_unsigned_type_node
1861 : long_long_integer_type_node);
1863 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1864 return (unsignedp ? widest_unsigned_literal_type_node
1865 : widest_integer_literal_type_node);
1867 if (bits <= TYPE_PRECISION (intQI_type_node))
1868 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1870 if (bits <= TYPE_PRECISION (intHI_type_node))
1871 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1873 if (bits <= TYPE_PRECISION (intSI_type_node))
1874 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1876 if (bits <= TYPE_PRECISION (intDI_type_node))
1877 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1882 /* Used for communication between c_common_type_for_mode and
1883 c_register_builtin_type. */
1884 static GTY(()) tree registered_builtin_types;
1886 /* Return a data type that has machine mode MODE.
1887 If the mode is an integer,
1888 then UNSIGNEDP selects between signed and unsigned types. */
1891 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1895 if (mode == TYPE_MODE (integer_type_node))
1896 return unsignedp ? unsigned_type_node : integer_type_node;
1898 if (mode == TYPE_MODE (signed_char_type_node))
1899 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1901 if (mode == TYPE_MODE (short_integer_type_node))
1902 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1904 if (mode == TYPE_MODE (long_integer_type_node))
1905 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1907 if (mode == TYPE_MODE (long_long_integer_type_node))
1908 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1910 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1911 return unsignedp ? widest_unsigned_literal_type_node
1912 : widest_integer_literal_type_node;
1915 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1918 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1921 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1924 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1926 #if HOST_BITS_PER_WIDE_INT >= 64
1927 if (mode == TYPE_MODE (intTI_type_node))
1928 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1931 if (mode == TYPE_MODE (float_type_node))
1932 return float_type_node;
1934 if (mode == TYPE_MODE (double_type_node))
1935 return double_type_node;
1937 if (mode == TYPE_MODE (long_double_type_node))
1938 return long_double_type_node;
1940 if (mode == TYPE_MODE (void_type_node))
1941 return void_type_node;
1943 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1945 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1946 : make_signed_type (GET_MODE_PRECISION (mode)));
1948 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1950 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1951 : make_signed_type (GET_MODE_PRECISION (mode)));
1953 if (COMPLEX_MODE_P (mode))
1955 enum machine_mode inner_mode;
1958 if (mode == TYPE_MODE (complex_float_type_node))
1959 return complex_float_type_node;
1960 if (mode == TYPE_MODE (complex_double_type_node))
1961 return complex_double_type_node;
1962 if (mode == TYPE_MODE (complex_long_double_type_node))
1963 return complex_long_double_type_node;
1965 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
1966 return complex_integer_type_node;
1968 inner_mode = GET_MODE_INNER (mode);
1969 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1970 if (inner_type != NULL_TREE)
1971 return build_complex_type (inner_type);
1973 else if (VECTOR_MODE_P (mode))
1975 enum machine_mode inner_mode = GET_MODE_INNER (mode);
1976 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1977 if (inner_type != NULL_TREE)
1978 return build_vector_type_for_mode (inner_type, mode);
1981 if (mode == TYPE_MODE (dfloat32_type_node))
1982 return dfloat32_type_node;
1983 if (mode == TYPE_MODE (dfloat64_type_node))
1984 return dfloat64_type_node;
1985 if (mode == TYPE_MODE (dfloat128_type_node))
1986 return dfloat128_type_node;
1988 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1989 if (TYPE_MODE (TREE_VALUE (t)) == mode)
1990 return TREE_VALUE (t);
1995 /* Return an unsigned type the same as TYPE in other respects. */
1997 c_common_unsigned_type (tree type)
1999 tree type1 = TYPE_MAIN_VARIANT (type);
2000 if (type1 == signed_char_type_node || type1 == char_type_node)
2001 return unsigned_char_type_node;
2002 if (type1 == integer_type_node)
2003 return unsigned_type_node;
2004 if (type1 == short_integer_type_node)
2005 return short_unsigned_type_node;
2006 if (type1 == long_integer_type_node)
2007 return long_unsigned_type_node;
2008 if (type1 == long_long_integer_type_node)
2009 return long_long_unsigned_type_node;
2010 if (type1 == widest_integer_literal_type_node)
2011 return widest_unsigned_literal_type_node;
2012 #if HOST_BITS_PER_WIDE_INT >= 64
2013 if (type1 == intTI_type_node)
2014 return unsigned_intTI_type_node;
2016 if (type1 == intDI_type_node)
2017 return unsigned_intDI_type_node;
2018 if (type1 == intSI_type_node)
2019 return unsigned_intSI_type_node;
2020 if (type1 == intHI_type_node)
2021 return unsigned_intHI_type_node;
2022 if (type1 == intQI_type_node)
2023 return unsigned_intQI_type_node;
2025 return c_common_signed_or_unsigned_type (1, type);
2028 /* Return a signed type the same as TYPE in other respects. */
2031 c_common_signed_type (tree type)
2033 tree type1 = TYPE_MAIN_VARIANT (type);
2034 if (type1 == unsigned_char_type_node || type1 == char_type_node)
2035 return signed_char_type_node;
2036 if (type1 == unsigned_type_node)
2037 return integer_type_node;
2038 if (type1 == short_unsigned_type_node)
2039 return short_integer_type_node;
2040 if (type1 == long_unsigned_type_node)
2041 return long_integer_type_node;
2042 if (type1 == long_long_unsigned_type_node)
2043 return long_long_integer_type_node;
2044 if (type1 == widest_unsigned_literal_type_node)
2045 return widest_integer_literal_type_node;
2046 #if HOST_BITS_PER_WIDE_INT >= 64
2047 if (type1 == unsigned_intTI_type_node)
2048 return intTI_type_node;
2050 if (type1 == unsigned_intDI_type_node)
2051 return intDI_type_node;
2052 if (type1 == unsigned_intSI_type_node)
2053 return intSI_type_node;
2054 if (type1 == unsigned_intHI_type_node)
2055 return intHI_type_node;
2056 if (type1 == unsigned_intQI_type_node)
2057 return intQI_type_node;
2059 return c_common_signed_or_unsigned_type (0, type);
2062 /* Return a type the same as TYPE except unsigned or
2063 signed according to UNSIGNEDP. */
2066 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2068 if (!INTEGRAL_TYPE_P (type)
2069 || TYPE_UNSIGNED (type) == unsignedp)
2072 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2073 the precision; they have precision set to match their range, but
2074 may use a wider mode to match an ABI. If we change modes, we may
2075 wind up with bad conversions. For INTEGER_TYPEs in C, must check
2076 the precision as well, so as to yield correct results for
2077 bit-field types. C++ does not have these separate bit-field
2078 types, and producing a signed or unsigned variant of an
2079 ENUMERAL_TYPE may cause other problems as well. */
2081 #define TYPE_OK(node) \
2082 (TYPE_MODE (type) == TYPE_MODE (node) \
2083 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2084 if (TYPE_OK (signed_char_type_node))
2085 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2086 if (TYPE_OK (integer_type_node))
2087 return unsignedp ? unsigned_type_node : integer_type_node;
2088 if (TYPE_OK (short_integer_type_node))
2089 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2090 if (TYPE_OK (long_integer_type_node))
2091 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2092 if (TYPE_OK (long_long_integer_type_node))
2093 return (unsignedp ? long_long_unsigned_type_node
2094 : long_long_integer_type_node);
2095 if (TYPE_OK (widest_integer_literal_type_node))
2096 return (unsignedp ? widest_unsigned_literal_type_node
2097 : widest_integer_literal_type_node);
2099 #if HOST_BITS_PER_WIDE_INT >= 64
2100 if (TYPE_OK (intTI_type_node))
2101 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2103 if (TYPE_OK (intDI_type_node))
2104 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2105 if (TYPE_OK (intSI_type_node))
2106 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2107 if (TYPE_OK (intHI_type_node))
2108 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2109 if (TYPE_OK (intQI_type_node))
2110 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2113 if (c_dialect_cxx ())
2116 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2119 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2122 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2124 /* Extended integer types of the same width as a standard type have
2125 lesser rank, so those of the same width as int promote to int or
2126 unsigned int and are valid for printf formats expecting int or
2127 unsigned int. To avoid such special cases, avoid creating
2128 extended integer types for bit-fields if a standard integer type
2130 if (width == TYPE_PRECISION (integer_type_node))
2131 return unsignedp ? unsigned_type_node : integer_type_node;
2132 if (width == TYPE_PRECISION (signed_char_type_node))
2133 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2134 if (width == TYPE_PRECISION (short_integer_type_node))
2135 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2136 if (width == TYPE_PRECISION (long_integer_type_node))
2137 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2138 if (width == TYPE_PRECISION (long_long_integer_type_node))
2139 return (unsignedp ? long_long_unsigned_type_node
2140 : long_long_integer_type_node);
2141 return build_nonstandard_integer_type (width, unsignedp);
2144 /* The C version of the register_builtin_type langhook. */
2147 c_register_builtin_type (tree type, const char* name)
2151 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2152 DECL_ARTIFICIAL (decl) = 1;
2153 if (!TYPE_NAME (type))
2154 TYPE_NAME (type) = decl;
2157 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2161 /* Return the minimum number of bits needed to represent VALUE in a
2162 signed or unsigned type, UNSIGNEDP says which. */
2165 min_precision (tree value, int unsignedp)
2169 /* If the value is negative, compute its negative minus 1. The latter
2170 adjustment is because the absolute value of the largest negative value
2171 is one larger than the largest positive value. This is equivalent to
2172 a bit-wise negation, so use that operation instead. */
2174 if (tree_int_cst_sgn (value) < 0)
2175 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2177 /* Return the number of bits needed, taking into account the fact
2178 that we need one more bit for a signed than unsigned type. */
2180 if (integer_zerop (value))
2183 log = tree_floor_log2 (value);
2185 return log + 1 + !unsignedp;
2188 /* Print an error message for invalid operands to arith operation
2192 binary_op_error (enum tree_code code)
2199 opname = "+"; break;
2201 opname = "-"; break;
2203 opname = "*"; break;
2205 opname = "max"; break;
2207 opname = "min"; break;
2209 opname = "=="; break;
2211 opname = "!="; break;
2213 opname = "<="; break;
2215 opname = ">="; break;
2217 opname = "<"; break;
2219 opname = ">"; break;
2221 opname = "<<"; break;
2223 opname = ">>"; break;
2224 case TRUNC_MOD_EXPR:
2225 case FLOOR_MOD_EXPR:
2226 opname = "%"; break;
2227 case TRUNC_DIV_EXPR:
2228 case FLOOR_DIV_EXPR:
2229 opname = "/"; break;
2231 opname = "&"; break;
2233 opname = "|"; break;
2234 case TRUTH_ANDIF_EXPR:
2235 opname = "&&"; break;
2236 case TRUTH_ORIF_EXPR:
2237 opname = "||"; break;
2239 opname = "^"; break;
2243 error ("invalid operands to binary %s", opname);
2246 /* Subroutine of build_binary_op, used for comparison operations.
2247 See if the operands have both been converted from subword integer types
2248 and, if so, perhaps change them both back to their original type.
2249 This function is also responsible for converting the two operands
2250 to the proper common type for comparison.
2252 The arguments of this function are all pointers to local variables
2253 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2254 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2256 If this function returns nonzero, it means that the comparison has
2257 a constant value. What this function returns is an expression for
2261 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2262 enum tree_code *rescode_ptr)
2265 tree op0 = *op0_ptr;
2266 tree op1 = *op1_ptr;
2267 int unsignedp0, unsignedp1;
2269 tree primop0, primop1;
2270 enum tree_code code = *rescode_ptr;
2272 /* Throw away any conversions to wider types
2273 already present in the operands. */
2275 primop0 = get_narrower (op0, &unsignedp0);
2276 primop1 = get_narrower (op1, &unsignedp1);
2278 /* Handle the case that OP0 does not *contain* a conversion
2279 but it *requires* conversion to FINAL_TYPE. */
2281 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2282 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2283 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2284 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2286 /* If one of the operands must be floated, we cannot optimize. */
2287 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2288 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2290 /* If first arg is constant, swap the args (changing operation
2291 so value is preserved), for canonicalization. Don't do this if
2292 the second arg is 0. */
2294 if (TREE_CONSTANT (primop0)
2295 && !integer_zerop (primop1) && !real_zerop (primop1))
2298 int temi = unsignedp0;
2306 unsignedp0 = unsignedp1;
2329 *rescode_ptr = code;
2332 /* If comparing an integer against a constant more bits wide,
2333 maybe we can deduce a value of 1 or 0 independent of the data.
2334 Or else truncate the constant now
2335 rather than extend the variable at run time.
2337 This is only interesting if the constant is the wider arg.
2338 Also, it is not safe if the constant is unsigned and the
2339 variable arg is signed, since in this case the variable
2340 would be sign-extended and then regarded as unsigned.
2341 Our technique fails in this case because the lowest/highest
2342 possible unsigned results don't follow naturally from the
2343 lowest/highest possible values of the variable operand.
2344 For just EQ_EXPR and NE_EXPR there is another technique that
2345 could be used: see if the constant can be faithfully represented
2346 in the other operand's type, by truncating it and reextending it
2347 and see if that preserves the constant's value. */
2349 if (!real1 && !real2
2350 && TREE_CODE (primop1) == INTEGER_CST
2351 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2353 int min_gt, max_gt, min_lt, max_lt;
2354 tree maxval, minval;
2355 /* 1 if comparison is nominally unsigned. */
2356 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2359 type = c_common_signed_or_unsigned_type (unsignedp0,
2360 TREE_TYPE (primop0));
2362 maxval = TYPE_MAX_VALUE (type);
2363 minval = TYPE_MIN_VALUE (type);
2365 if (unsignedp && !unsignedp0)
2366 *restype_ptr = c_common_signed_type (*restype_ptr);
2368 if (TREE_TYPE (primop1) != *restype_ptr)
2370 /* Convert primop1 to target type, but do not introduce
2371 additional overflow. We know primop1 is an int_cst. */
2372 primop1 = force_fit_type_double (*restype_ptr,
2373 TREE_INT_CST_LOW (primop1),
2374 TREE_INT_CST_HIGH (primop1), 0,
2375 TREE_OVERFLOW (primop1));
2377 if (type != *restype_ptr)
2379 minval = convert (*restype_ptr, minval);
2380 maxval = convert (*restype_ptr, maxval);
2383 if (unsignedp && unsignedp0)
2385 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2386 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2387 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2388 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2392 min_gt = INT_CST_LT (primop1, minval);
2393 max_gt = INT_CST_LT (primop1, maxval);
2394 min_lt = INT_CST_LT (minval, primop1);
2395 max_lt = INT_CST_LT (maxval, primop1);
2399 /* This used to be a switch, but Genix compiler can't handle that. */
2400 if (code == NE_EXPR)
2402 if (max_lt || min_gt)
2403 val = truthvalue_true_node;
2405 else if (code == EQ_EXPR)
2407 if (max_lt || min_gt)
2408 val = truthvalue_false_node;
2410 else if (code == LT_EXPR)
2413 val = truthvalue_true_node;
2415 val = truthvalue_false_node;
2417 else if (code == GT_EXPR)
2420 val = truthvalue_true_node;
2422 val = truthvalue_false_node;
2424 else if (code == LE_EXPR)
2427 val = truthvalue_true_node;
2429 val = truthvalue_false_node;
2431 else if (code == GE_EXPR)
2434 val = truthvalue_true_node;
2436 val = truthvalue_false_node;
2439 /* If primop0 was sign-extended and unsigned comparison specd,
2440 we did a signed comparison above using the signed type bounds.
2441 But the comparison we output must be unsigned.
2443 Also, for inequalities, VAL is no good; but if the signed
2444 comparison had *any* fixed result, it follows that the
2445 unsigned comparison just tests the sign in reverse
2446 (positive values are LE, negative ones GE).
2447 So we can generate an unsigned comparison
2448 against an extreme value of the signed type. */
2450 if (unsignedp && !unsignedp0)
2457 primop1 = TYPE_MIN_VALUE (type);
2463 primop1 = TYPE_MAX_VALUE (type);
2470 type = c_common_unsigned_type (type);
2473 if (TREE_CODE (primop0) != INTEGER_CST)
2475 if (val == truthvalue_false_node)
2476 warning (0, "comparison is always false due to limited range of data type");
2477 if (val == truthvalue_true_node)
2478 warning (0, "comparison is always true due to limited range of data type");
2483 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2484 if (TREE_SIDE_EFFECTS (primop0))
2485 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2489 /* Value is not predetermined, but do the comparison
2490 in the type of the operand that is not constant.
2491 TYPE is already properly set. */
2494 /* If either arg is decimal float and the other is float, find the
2495 proper common type to use for comparison. */
2496 else if (real1 && real2
2497 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2498 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2499 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2501 else if (real1 && real2
2502 && (TYPE_PRECISION (TREE_TYPE (primop0))
2503 == TYPE_PRECISION (TREE_TYPE (primop1))))
2504 type = TREE_TYPE (primop0);
2506 /* If args' natural types are both narrower than nominal type
2507 and both extend in the same manner, compare them
2508 in the type of the wider arg.
2509 Otherwise must actually extend both to the nominal
2510 common type lest different ways of extending
2512 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2514 else if (unsignedp0 == unsignedp1 && real1 == real2
2515 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2516 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2518 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2519 type = c_common_signed_or_unsigned_type (unsignedp0
2520 || TYPE_UNSIGNED (*restype_ptr),
2522 /* Make sure shorter operand is extended the right way
2523 to match the longer operand. */
2525 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2526 TREE_TYPE (primop0)),
2529 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2530 TREE_TYPE (primop1)),
2535 /* Here we must do the comparison on the nominal type
2536 using the args exactly as we received them. */
2537 type = *restype_ptr;
2541 if (!real1 && !real2 && integer_zerop (primop1)
2542 && TYPE_UNSIGNED (*restype_ptr))
2548 /* All unsigned values are >= 0, so we warn if extra warnings
2549 are requested. However, if OP0 is a constant that is
2550 >= 0, the signedness of the comparison isn't an issue,
2551 so suppress the warning. */
2552 if (extra_warnings && !in_system_header
2553 && !(TREE_CODE (primop0) == INTEGER_CST
2554 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2556 warning (0, "comparison of unsigned expression >= 0 is always true");
2557 value = truthvalue_true_node;
2561 if (extra_warnings && !in_system_header
2562 && !(TREE_CODE (primop0) == INTEGER_CST
2563 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2565 warning (0, "comparison of unsigned expression < 0 is always false");
2566 value = truthvalue_false_node;
2575 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2576 if (TREE_SIDE_EFFECTS (primop0))
2577 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2584 *op0_ptr = convert (type, primop0);
2585 *op1_ptr = convert (type, primop1);
2587 *restype_ptr = truthvalue_type_node;
2592 /* Return a tree for the sum or difference (RESULTCODE says which)
2593 of pointer PTROP and integer INTOP. */
2596 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2600 /* The result is a pointer of the same type that is being added. */
2602 tree result_type = TREE_TYPE (ptrop);
2604 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2606 if (pedantic || warn_pointer_arith)
2607 pedwarn ("pointer of type %<void *%> used in arithmetic");
2608 size_exp = integer_one_node;
2610 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2612 if (pedantic || warn_pointer_arith)
2613 pedwarn ("pointer to a function used in arithmetic");
2614 size_exp = integer_one_node;
2616 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2618 if (pedantic || warn_pointer_arith)
2619 pedwarn ("pointer to member function used in arithmetic");
2620 size_exp = integer_one_node;
2623 size_exp = size_in_bytes (TREE_TYPE (result_type));
2625 /* We are manipulating pointer values, so we don't need to warn
2626 about relying on undefined signed overflow. We disable the
2627 warning here because we use integer types so fold won't know that
2628 they are really pointers. */
2629 fold_defer_overflow_warnings ();
2631 /* If what we are about to multiply by the size of the elements
2632 contains a constant term, apply distributive law
2633 and multiply that constant term separately.
2634 This helps produce common subexpressions. */
2636 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2637 && !TREE_CONSTANT (intop)
2638 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2639 && TREE_CONSTANT (size_exp)
2640 /* If the constant comes from pointer subtraction,
2641 skip this optimization--it would cause an error. */
2642 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2643 /* If the constant is unsigned, and smaller than the pointer size,
2644 then we must skip this optimization. This is because it could cause
2645 an overflow error if the constant is negative but INTOP is not. */
2646 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2647 || (TYPE_PRECISION (TREE_TYPE (intop))
2648 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2650 enum tree_code subcode = resultcode;
2651 tree int_type = TREE_TYPE (intop);
2652 if (TREE_CODE (intop) == MINUS_EXPR)
2653 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2654 /* Convert both subexpression types to the type of intop,
2655 because weird cases involving pointer arithmetic
2656 can result in a sum or difference with different type args. */
2657 ptrop = build_binary_op (subcode, ptrop,
2658 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2659 intop = convert (int_type, TREE_OPERAND (intop, 0));
2662 /* Convert the integer argument to a type the same size as sizetype
2663 so the multiply won't overflow spuriously. */
2665 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2666 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2667 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2668 TYPE_UNSIGNED (sizetype)), intop);
2670 /* Replace the integer argument with a suitable product by the object size.
2671 Do this multiplication as signed, then convert to the appropriate
2672 pointer type (actually unsigned integral). */
2674 intop = convert (result_type,
2675 build_binary_op (MULT_EXPR, intop,
2676 convert (TREE_TYPE (intop), size_exp), 1));
2678 /* Create the sum or difference. */
2679 ret = fold_build2 (resultcode, result_type, ptrop, intop);
2681 fold_undefer_and_ignore_overflow_warnings ();
2686 /* Return whether EXPR is a declaration whose address can never be
2690 decl_with_nonnull_addr_p (tree expr)
2692 return (DECL_P (expr)
2693 && (TREE_CODE (expr) == PARM_DECL
2694 || TREE_CODE (expr) == LABEL_DECL
2695 || !DECL_WEAK (expr)));
2698 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2699 or for an `if' or `while' statement or ?..: exp. It should already
2700 have been validated to be of suitable type; otherwise, a bad
2701 diagnostic may result.
2703 This preparation consists of taking the ordinary
2704 representation of an expression expr and producing a valid tree
2705 boolean expression describing whether expr is nonzero. We could
2706 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2707 but we optimize comparisons, &&, ||, and !.
2709 The resulting type should always be `truthvalue_type_node'. */
2712 c_common_truthvalue_conversion (tree expr)
2714 switch (TREE_CODE (expr))
2716 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
2717 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2718 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2719 case ORDERED_EXPR: case UNORDERED_EXPR:
2720 if (TREE_TYPE (expr) == truthvalue_type_node)
2722 return build2 (TREE_CODE (expr), truthvalue_type_node,
2723 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2725 case TRUTH_ANDIF_EXPR:
2726 case TRUTH_ORIF_EXPR:
2727 case TRUTH_AND_EXPR:
2729 case TRUTH_XOR_EXPR:
2730 if (TREE_TYPE (expr) == truthvalue_type_node)
2732 return build2 (TREE_CODE (expr), truthvalue_type_node,
2733 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2734 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2736 case TRUTH_NOT_EXPR:
2737 if (TREE_TYPE (expr) == truthvalue_type_node)
2739 return build1 (TREE_CODE (expr), truthvalue_type_node,
2740 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2746 return integer_zerop (expr) ? truthvalue_false_node
2747 : truthvalue_true_node;
2750 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2751 ? truthvalue_true_node
2752 : truthvalue_false_node;
2755 expr = build_unary_op (ADDR_EXPR, expr, 0);
2760 tree inner = TREE_OPERAND (expr, 0);
2761 if (decl_with_nonnull_addr_p (inner))
2763 /* Common Ada/Pascal programmer's mistake. */
2764 warning (OPT_Waddress,
2765 "the address of %qD will always evaluate as %<true%>",
2767 return truthvalue_true_node;
2770 /* If we still have a decl, it is possible for its address to
2771 be NULL, so we cannot optimize. */
2774 gcc_assert (DECL_WEAK (inner));
2778 if (TREE_SIDE_EFFECTS (inner))
2779 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2780 inner, truthvalue_true_node);
2782 return truthvalue_true_node;
2786 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2787 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2788 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2789 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2795 /* These don't change whether an object is nonzero or zero. */
2796 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2800 /* These don't change whether an object is zero or nonzero, but
2801 we can't ignore them if their second arg has side-effects. */
2802 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2803 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2804 TREE_OPERAND (expr, 1),
2805 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2807 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2810 /* Distribute the conversion into the arms of a COND_EXPR. */
2811 return fold_build3 (COND_EXPR, truthvalue_type_node,
2812 TREE_OPERAND (expr, 0),
2813 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2814 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
2818 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2819 since that affects how `default_conversion' will behave. */
2820 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2821 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2823 /* If this is widening the argument, we can ignore it. */
2824 if (TYPE_PRECISION (TREE_TYPE (expr))
2825 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2826 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2830 if (!TREE_NO_WARNING (expr)
2831 && warn_parentheses)
2833 warning (OPT_Wparentheses,
2834 "suggest parentheses around assignment used as truth value");
2835 TREE_NO_WARNING (expr) = 1;
2843 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2845 tree t = save_expr (expr);
2846 return (build_binary_op
2847 ((TREE_SIDE_EFFECTS (expr)
2848 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2849 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2850 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2854 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2857 static void def_builtin_1 (enum built_in_function fncode,
2859 enum built_in_class fnclass,
2860 tree fntype, tree libtype,
2861 bool both_p, bool fallback_p, bool nonansi_p,
2862 tree fnattrs, bool implicit_p);
2864 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2865 down to the element type of an array. */
2868 c_build_qualified_type (tree type, int type_quals)
2870 if (type == error_mark_node)
2873 if (TREE_CODE (type) == ARRAY_TYPE)
2876 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2879 /* See if we already have an identically qualified type. */
2880 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2882 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2883 && TYPE_NAME (t) == TYPE_NAME (type)
2884 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2885 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2886 TYPE_ATTRIBUTES (type)))
2891 t = build_variant_type_copy (type);
2892 TREE_TYPE (t) = element_type;
2897 /* A restrict-qualified pointer type must be a pointer to object or
2898 incomplete type. Note that the use of POINTER_TYPE_P also allows
2899 REFERENCE_TYPEs, which is appropriate for C++. */
2900 if ((type_quals & TYPE_QUAL_RESTRICT)
2901 && (!POINTER_TYPE_P (type)
2902 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2904 error ("invalid use of %<restrict%>");
2905 type_quals &= ~TYPE_QUAL_RESTRICT;
2908 return build_qualified_type (type, type_quals);
2911 /* Apply the TYPE_QUALS to the new DECL. */
2914 c_apply_type_quals_to_decl (int type_quals, tree decl)
2916 tree type = TREE_TYPE (decl);
2918 if (type == error_mark_node)
2921 if (((type_quals & TYPE_QUAL_CONST)
2922 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2923 /* An object declared 'const' is only readonly after it is
2924 initialized. We don't have any way of expressing this currently,
2925 so we need to be conservative and unset TREE_READONLY for types
2926 with constructors. Otherwise aliasing code will ignore stores in
2927 an inline constructor. */
2928 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2929 TREE_READONLY (decl) = 1;
2930 if (type_quals & TYPE_QUAL_VOLATILE)
2932 TREE_SIDE_EFFECTS (decl) = 1;
2933 TREE_THIS_VOLATILE (decl) = 1;
2935 if (type_quals & TYPE_QUAL_RESTRICT)
2937 while (type && TREE_CODE (type) == ARRAY_TYPE)
2938 /* Allow 'restrict' on arrays of pointers.
2939 FIXME currently we just ignore it. */
2940 type = TREE_TYPE (type);
2942 || !POINTER_TYPE_P (type)
2943 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2944 error ("invalid use of %<restrict%>");
2945 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2946 /* Indicate we need to make a unique alias set for this pointer.
2947 We can't do it here because it might be pointing to an
2949 DECL_POINTER_ALIAS_SET (decl) = -2;
2953 /* Hash function for the problem of multiple type definitions in
2954 different files. This must hash all types that will compare
2955 equal via comptypes to the same value. In practice it hashes
2956 on some of the simple stuff and leaves the details to comptypes. */
2959 c_type_hash (const void *p)
2965 switch (TREE_CODE (t))
2967 /* For pointers, hash on pointee type plus some swizzling. */
2969 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2970 /* Hash on number of elements and total size. */
2973 t2 = TYPE_VALUES (t);
2977 t2 = TYPE_FIELDS (t);
2979 case QUAL_UNION_TYPE:
2981 t2 = TYPE_FIELDS (t);
2985 t2 = TYPE_FIELDS (t);
2990 for (; t2; t2 = TREE_CHAIN (t2))
2992 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2993 return ((size << 24) | (i << shift));
2996 static GTY((param_is (union tree_node))) htab_t type_hash_table;
2998 /* Return the typed-based alias set for T, which may be an expression
2999 or a type. Return -1 if we don't do anything special. */
3002 c_common_get_alias_set (tree t)
3007 /* Permit type-punning when accessing a union, provided the access
3008 is directly through the union. For example, this code does not
3009 permit taking the address of a union member and then storing
3010 through it. Even the type-punning allowed here is a GCC
3011 extension, albeit a common and useful one; the C standard says
3012 that such accesses have implementation-defined behavior. */
3014 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3015 u = TREE_OPERAND (u, 0))
3016 if (TREE_CODE (u) == COMPONENT_REF
3017 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3020 /* That's all the expressions we handle specially. */
3024 /* The C standard guarantees that any object may be accessed via an
3025 lvalue that has character type. */
3026 if (t == char_type_node
3027 || t == signed_char_type_node
3028 || t == unsigned_char_type_node)
3031 /* If it has the may_alias attribute, it can alias anything. */
3032 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
3035 /* The C standard specifically allows aliasing between signed and
3036 unsigned variants of the same type. We treat the signed
3037 variant as canonical. */
3038 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3040 tree t1 = c_common_signed_type (t);
3042 /* t1 == t can happen for boolean nodes which are always unsigned. */
3044 return get_alias_set (t1);
3046 else if (POINTER_TYPE_P (t))
3050 /* Unfortunately, there is no canonical form of a pointer type.
3051 In particular, if we have `typedef int I', then `int *', and
3052 `I *' are different types. So, we have to pick a canonical
3053 representative. We do this below.
3055 Technically, this approach is actually more conservative that
3056 it needs to be. In particular, `const int *' and `int *'
3057 should be in different alias sets, according to the C and C++
3058 standard, since their types are not the same, and so,
3059 technically, an `int **' and `const int **' cannot point at
3062 But, the standard is wrong. In particular, this code is
3067 const int* const* cipp = ipp;
3069 And, it doesn't make sense for that to be legal unless you
3070 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3071 the pointed-to types. This issue has been reported to the
3073 t1 = build_type_no_quals (t);
3075 return get_alias_set (t1);
3078 /* Handle the case of multiple type nodes referring to "the same" type,
3079 which occurs with IMA. These share an alias set. FIXME: Currently only
3080 C90 is handled. (In C99 type compatibility is not transitive, which
3081 complicates things mightily. The alias set splay trees can theoretically
3082 represent this, but insertion is tricky when you consider all the
3083 different orders things might arrive in.) */
3085 if (c_language != clk_c || flag_isoc99)
3088 /* Save time if there's only one input file. */
3089 if (num_in_fnames == 1)
3092 /* Pointers need special handling if they point to any type that
3093 needs special handling (below). */
3094 if (TREE_CODE (t) == POINTER_TYPE)
3097 /* Find bottom type under any nested POINTERs. */
3098 for (t2 = TREE_TYPE (t);
3099 TREE_CODE (t2) == POINTER_TYPE;
3100 t2 = TREE_TYPE (t2))
3102 if (TREE_CODE (t2) != RECORD_TYPE
3103 && TREE_CODE (t2) != ENUMERAL_TYPE
3104 && TREE_CODE (t2) != QUAL_UNION_TYPE
3105 && TREE_CODE (t2) != UNION_TYPE)
3107 if (TYPE_SIZE (t2) == 0)
3110 /* These are the only cases that need special handling. */
3111 if (TREE_CODE (t) != RECORD_TYPE
3112 && TREE_CODE (t) != ENUMERAL_TYPE
3113 && TREE_CODE (t) != QUAL_UNION_TYPE
3114 && TREE_CODE (t) != UNION_TYPE
3115 && TREE_CODE (t) != POINTER_TYPE)
3118 if (TYPE_SIZE (t) == 0)
3121 /* Look up t in hash table. Only one of the compatible types within each
3122 alias set is recorded in the table. */
3123 if (!type_hash_table)
3124 type_hash_table = htab_create_ggc (1021, c_type_hash,
3125 (htab_eq) lang_hooks.types_compatible_p,
3127 slot = htab_find_slot (type_hash_table, t, INSERT);
3130 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3131 return TYPE_ALIAS_SET ((tree)*slot);
3134 /* Our caller will assign and record (in t) a new alias set; all we need
3135 to do is remember t in the hash table. */
3141 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3142 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3143 flag controls whether we should diagnose possibly ill-formed
3144 constructs or not. */
3147 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3149 const char *op_name;
3151 enum tree_code type_code = TREE_CODE (type);
3153 op_name = is_sizeof ? "sizeof" : "__alignof__";
3155 if (type_code == FUNCTION_TYPE)
3159 if (complain && (pedantic || warn_pointer_arith))
3160 pedwarn ("invalid application of %<sizeof%> to a function type");
3161 value = size_one_node;
3164 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3166 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3168 if (type_code == VOID_TYPE
3169 && complain && (pedantic || warn_pointer_arith))
3170 pedwarn ("invalid application of %qs to a void type", op_name);
3171 value = size_one_node;
3173 else if (!COMPLETE_TYPE_P (type))
3176 error ("invalid application of %qs to incomplete type %qT ",
3178 value = size_zero_node;
3183 /* Convert in case a char is more than one unit. */
3184 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3185 size_int (TYPE_PRECISION (char_type_node)
3188 value = size_int (TYPE_ALIGN_UNIT (type));
3191 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3192 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3193 never happen. However, this node should really have type
3194 `size_t', which is just a typedef for an ordinary integer type. */
3195 value = fold_convert (size_type_node, value);
3196 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3201 /* Implement the __alignof keyword: Return the minimum required
3202 alignment of EXPR, measured in bytes. For VAR_DECL's and
3203 FIELD_DECL's return DECL_ALIGN (which can be set from an
3204 "aligned" __attribute__ specification). */
3207 c_alignof_expr (tree expr)
3211 if (TREE_CODE (expr) == VAR_DECL)
3212 t = size_int (DECL_ALIGN_UNIT (expr));
3214 else if (TREE_CODE (expr) == COMPONENT_REF
3215 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3217 error ("%<__alignof%> applied to a bit-field");
3220 else if (TREE_CODE (expr) == COMPONENT_REF
3221 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3222 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3224 else if (TREE_CODE (expr) == INDIRECT_REF)
3226 tree t = TREE_OPERAND (expr, 0);
3228 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3230 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3231 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3235 t = TREE_OPERAND (t, 0);
3236 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3237 if (thisalign > bestalign)
3238 best = t, bestalign = thisalign;
3240 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3243 return c_alignof (TREE_TYPE (expr));
3245 return fold_convert (size_type_node, t);
3248 /* Handle C and C++ default attributes. */
3250 enum built_in_attribute
3252 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3253 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3254 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3255 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3256 #include "builtin-attrs.def"
3257 #undef DEF_ATTR_NULL_TREE
3259 #undef DEF_ATTR_IDENT
3260 #undef DEF_ATTR_TREE_LIST
3264 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3266 static void c_init_attributes (void);
3270 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3271 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3272 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3273 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3274 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3275 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3276 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3277 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3278 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3279 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3280 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3281 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3282 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3283 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3284 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3286 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3287 #include "builtin-types.def"
3288 #undef DEF_PRIMITIVE_TYPE
3289 #undef DEF_FUNCTION_TYPE_0
3290 #undef DEF_FUNCTION_TYPE_1
3291 #undef DEF_FUNCTION_TYPE_2
3292 #undef DEF_FUNCTION_TYPE_3
3293 #undef DEF_FUNCTION_TYPE_4
3294 #undef DEF_FUNCTION_TYPE_5
3295 #undef DEF_FUNCTION_TYPE_6
3296 #undef DEF_FUNCTION_TYPE_7
3297 #undef DEF_FUNCTION_TYPE_VAR_0
3298 #undef DEF_FUNCTION_TYPE_VAR_1
3299 #undef DEF_FUNCTION_TYPE_VAR_2
3300 #undef DEF_FUNCTION_TYPE_VAR_3
3301 #undef DEF_FUNCTION_TYPE_VAR_4
3302 #undef DEF_FUNCTION_TYPE_VAR_5
3303 #undef DEF_POINTER_TYPE
3307 typedef enum c_builtin_type builtin_type;
3309 /* A temporary array for c_common_nodes_and_builtins. Used in
3310 communication with def_fn_type. */
3311 static tree builtin_types[(int) BT_LAST + 1];
3313 /* A helper function for c_common_nodes_and_builtins. Build function type
3314 for DEF with return type RET and N arguments. If VAR is true, then the
3315 function should be variadic after those N arguments.
3317 Takes special care not to ICE if any of the types involved are
3318 error_mark_node, which indicates that said type is not in fact available
3319 (see builtin_type_for_size). In which case the function type as a whole
3320 should be error_mark_node. */
3323 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3325 tree args = NULL, t;
3330 for (i = 0; i < n; ++i)
3332 builtin_type a = va_arg (list, builtin_type);
3333 t = builtin_types[a];
3334 if (t == error_mark_node)
3336 args = tree_cons (NULL_TREE, t, args);
3340 args = nreverse (args);
3342 args = chainon (args, void_list_node);
3344 t = builtin_types[ret];
3345 if (t == error_mark_node)
3347 t = build_function_type (t, args);
3350 builtin_types[def] = t;
3353 /* Build builtin functions common to both C and C++ language
3357 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3359 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3360 builtin_types[ENUM] = VALUE;
3361 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3362 def_fn_type (ENUM, RETURN, 0, 0);
3363 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3364 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3365 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3366 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3367 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3368 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3369 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3370 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3371 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3372 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3373 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3375 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3376 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3378 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3379 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3380 def_fn_type (ENUM, RETURN, 1, 0);
3381 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3382 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3383 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3384 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3385 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3386 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3387 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3388 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3389 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3390 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3391 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3392 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3394 #include "builtin-types.def"
3396 #undef DEF_PRIMITIVE_TYPE
3397 #undef DEF_FUNCTION_TYPE_1
3398 #undef DEF_FUNCTION_TYPE_2
3399 #undef DEF_FUNCTION_TYPE_3
3400 #undef DEF_FUNCTION_TYPE_4
3401 #undef DEF_FUNCTION_TYPE_5
3402 #undef DEF_FUNCTION_TYPE_6
3403 #undef DEF_FUNCTION_TYPE_VAR_0
3404 #undef DEF_FUNCTION_TYPE_VAR_1
3405 #undef DEF_FUNCTION_TYPE_VAR_2
3406 #undef DEF_FUNCTION_TYPE_VAR_3
3407 #undef DEF_FUNCTION_TYPE_VAR_4
3408 #undef DEF_FUNCTION_TYPE_VAR_5
3409 #undef DEF_POINTER_TYPE
3410 builtin_types[(int) BT_LAST] = NULL_TREE;
3412 c_init_attributes ();
3414 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3415 NONANSI_P, ATTRS, IMPLICIT, COND) \
3417 def_builtin_1 (ENUM, NAME, CLASS, \
3418 builtin_types[(int) TYPE], \
3419 builtin_types[(int) LIBTYPE], \
3420 BOTH_P, FALLBACK_P, NONANSI_P, \
3421 built_in_attributes[(int) ATTRS], IMPLICIT);
3422 #include "builtins.def"
3425 build_common_builtin_nodes ();
3427 targetm.init_builtins ();
3432 /* Build tree nodes and builtin functions common to both C and C++ language
3436 c_common_nodes_and_builtins (void)
3438 int wchar_type_size;
3439 tree array_domain_type;
3440 tree va_list_ref_type_node;
3441 tree va_list_arg_type_node;
3443 /* Define `int' and `char' first so that dbx will output them first. */
3444 record_builtin_type (RID_INT, NULL, integer_type_node);
3445 record_builtin_type (RID_CHAR, "char", char_type_node);
3447 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3448 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3449 but not C. Are the conditionals here needed? */
3450 if (c_dialect_cxx ())
3451 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3452 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3453 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3454 record_builtin_type (RID_MAX, "long unsigned int",
3455 long_unsigned_type_node);
3456 if (c_dialect_cxx ())
3457 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3458 record_builtin_type (RID_MAX, "long long int",
3459 long_long_integer_type_node);
3460 record_builtin_type (RID_MAX, "long long unsigned int",
3461 long_long_unsigned_type_node);
3462 if (c_dialect_cxx ())
3463 record_builtin_type (RID_MAX, "long long unsigned",
3464 long_long_unsigned_type_node);
3465 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3466 record_builtin_type (RID_MAX, "short unsigned int",
3467 short_unsigned_type_node);
3468 if (c_dialect_cxx ())
3469 record_builtin_type (RID_MAX, "unsigned short",
3470 short_unsigned_type_node);
3472 /* Define both `signed char' and `unsigned char'. */
3473 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3474 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3476 /* These are types that c_common_type_for_size and
3477 c_common_type_for_mode use. */
3478 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3480 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3482 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3484 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3486 #if HOST_BITS_PER_WIDE_INT >= 64
3487 if (targetm.scalar_mode_supported_p (TImode))
3488 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3489 get_identifier ("__int128_t"),
3492 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3493 unsigned_intQI_type_node));
3494 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3495 unsigned_intHI_type_node));
3496 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3497 unsigned_intSI_type_node));
3498 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3499 unsigned_intDI_type_node));
3500 #if HOST_BITS_PER_WIDE_INT >= 64
3501 if (targetm.scalar_mode_supported_p (TImode))
3502 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3503 get_identifier ("__uint128_t"),
3504 unsigned_intTI_type_node));
3507 /* Create the widest literal types. */
3508 widest_integer_literal_type_node
3509 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3510 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3511 widest_integer_literal_type_node));
3513 widest_unsigned_literal_type_node
3514 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3515 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3516 widest_unsigned_literal_type_node));
3518 /* `unsigned long' is the standard type for sizeof.
3519 Note that stddef.h uses `unsigned long',
3520 and this must agree, even if long and int are the same size. */
3522 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3523 signed_size_type_node = c_common_signed_type (size_type_node);
3524 set_sizetype (size_type_node);
3527 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3529 build_common_tree_nodes_2 (flag_short_double);
3531 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3532 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3533 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3535 /* Only supported decimal floating point extension if the target
3536 actually supports underlying modes. */
3537 if (targetm.scalar_mode_supported_p (SDmode)
3538 && targetm.scalar_mode_supported_p (DDmode)
3539 && targetm.scalar_mode_supported_p (TDmode))
3541 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3542 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3543 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3546 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3547 get_identifier ("complex int"),
3548 complex_integer_type_node));
3549 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3550 get_identifier ("complex float"),
3551 complex_float_type_node));
3552 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3553 get_identifier ("complex double"),
3554 complex_double_type_node));
3555 lang_hooks.decls.pushdecl
3556 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3557 complex_long_double_type_node));
3559 if (c_dialect_cxx ())
3560 /* For C++, make fileptr_type_node a distinct void * type until
3561 FILE type is defined. */
3562 fileptr_type_node = build_variant_type_copy (ptr_type_node);
3564 record_builtin_type (RID_VOID, NULL, void_type_node);
3566 /* Set the TYPE_NAME for any variants that were built before
3567 record_builtin_type gave names to the built-in types. */
3569 tree void_name = TYPE_NAME (void_type_node);
3570 TYPE_NAME (void_type_node) = NULL_TREE;
3571 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3573 TYPE_NAME (void_type_node) = void_name;
3576 /* This node must not be shared. */
3577 void_zero_node = make_node (INTEGER_CST);
3578 TREE_TYPE (void_zero_node) = void_type_node;
3580 void_list_node = build_void_list_node ();
3582 /* Make a type to be the domain of a few array types
3583 whose domains don't really matter.
3584 200 is small enough that it always fits in size_t
3585 and large enough that it can hold most function names for the
3586 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3587 array_domain_type = build_index_type (size_int (200));
3589 /* Make a type for arrays of characters.
3590 With luck nothing will ever really depend on the length of this
3592 char_array_type_node
3593 = build_array_type (char_type_node, array_domain_type);
3595 /* Likewise for arrays of ints. */
3597 = build_array_type (integer_type_node, array_domain_type);
3599 string_type_node = build_pointer_type (char_type_node);
3600 const_string_type_node
3601 = build_pointer_type (build_qualified_type
3602 (char_type_node, TYPE_QUAL_CONST));
3604 /* This is special for C++ so functions can be overloaded. */
3605 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3606 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3607 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3608 if (c_dialect_cxx ())
3610 if (TYPE_UNSIGNED (wchar_type_node))
3611 wchar_type_node = make_unsigned_type (wchar_type_size);
3613 wchar_type_node = make_signed_type (wchar_type_size);
3614 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3618 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3619 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3622 /* This is for wide string constants. */
3623 wchar_array_type_node
3624 = build_array_type (wchar_type_node, array_domain_type);
3627 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3630 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3632 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3634 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3636 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3637 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3639 lang_hooks.decls.pushdecl
3640 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3641 va_list_type_node));
3643 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3645 va_list_arg_type_node = va_list_ref_type_node =
3646 build_pointer_type (TREE_TYPE (va_list_type_node));
3650 va_list_arg_type_node = va_list_type_node;
3651 va_list_ref_type_node = build_reference_type (va_list_type_node);
3654 if (!flag_preprocess_only)
3655 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
3657 main_identifier_node = get_identifier ("main");
3659 /* Create the built-in __null node. It is important that this is
3661 null_node = make_node (INTEGER_CST);
3662 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3664 /* Since builtin_types isn't gc'ed, don't export these nodes. */
3665 memset (builtin_types, 0, sizeof (builtin_types));
3668 /* Look up the function in built_in_decls that corresponds to DECL
3669 and set ASMSPEC as its user assembler name. DECL must be a
3670 function decl that declares a builtin. */
3673 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3676 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3677 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3680 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3681 set_user_assembler_name (builtin, asmspec);
3682 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3683 init_block_move_fn (asmspec);
3684 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3685 init_block_clear_fn (asmspec);
3688 /* The number of named compound-literals generated thus far. */
3689 static GTY(()) int compound_literal_number;
3691 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
3694 set_compound_literal_name (tree decl)
3697 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3698 compound_literal_number);
3699 compound_literal_number++;
3700 DECL_NAME (decl) = get_identifier (name);
3704 build_va_arg (tree expr, tree type)
3706 return build1 (VA_ARG_EXPR, type, expr);
3710 /* Linked list of disabled built-in functions. */
3712 typedef struct disabled_builtin
3715 struct disabled_builtin *next;
3717 static disabled_builtin *disabled_builtins = NULL;
3719 static bool builtin_function_disabled_p (const char *);
3721 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3722 begins with "__builtin_", give an error. */
3725 disable_builtin_function (const char *name)
3727 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3728 error ("cannot disable built-in function %qs", name);
3731 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3732 new_disabled_builtin->name = name;
3733 new_disabled_builtin->next = disabled_builtins;
3734 disabled_builtins = new_disabled_builtin;
3739 /* Return true if the built-in function NAME has been disabled, false
3743 builtin_function_disabled_p (const char *name)
3745 disabled_builtin *p;
3746 for (p = disabled_builtins; p != NULL; p = p->next)
3748 if (strcmp (name, p->name) == 0)
3755 /* Worker for DEF_BUILTIN.
3756 Possibly define a builtin function with one or two names.
3757 Does not declare a non-__builtin_ function if flag_no_builtin, or if
3758 nonansi_p and flag_no_nonansi_builtin. */
3761 def_builtin_1 (enum built_in_function fncode,
3763 enum built_in_class fnclass,
3764 tree fntype, tree libtype,
3765 bool both_p, bool fallback_p, bool nonansi_p,
3766 tree fnattrs, bool implicit_p)
3769 const char *libname;
3771 if (fntype == error_mark_node)
3774 gcc_assert ((!both_p && !fallback_p)
3775 || !strncmp (name, "__builtin_",
3776 strlen ("__builtin_")));
3778 libname = name + strlen ("__builtin_");
3779 decl = add_builtin_function (name, fntype, fncode, fnclass,
3780 (fallback_p ? libname : NULL),
3783 && !flag_no_builtin && !builtin_function_disabled_p (libname)
3784 && !(nonansi_p && flag_no_nonansi_builtin))
3785 add_builtin_function (libname, libtype, fncode, fnclass,
3788 built_in_decls[(int) fncode] = decl;
3790 implicit_built_in_decls[(int) fncode] = decl;
3793 /* Nonzero if the type T promotes to int. This is (nearly) the
3794 integral promotions defined in ISO C99 6.3.1.1/2. */
3797 c_promoting_integer_type_p (tree t)
3799 switch (TREE_CODE (t))
3802 return (TYPE_MAIN_VARIANT (t) == char_type_node
3803 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3804 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3805 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3806 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3807 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3810 /* ??? Technically all enumerations not larger than an int
3811 promote to an int. But this is used along code paths
3812 that only want to notice a size change. */
3813 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3823 /* Return 1 if PARMS specifies a fixed number of parameters
3824 and none of their types is affected by default promotions. */
3827 self_promoting_args_p (tree parms)
3830 for (t = parms; t; t = TREE_CHAIN (t))
3832 tree type = TREE_VALUE (t);
3834 if (type == error_mark_node)
3837 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3843 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3846 if (c_promoting_integer_type_p (type))
3852 /* Recursively examines the array elements of TYPE, until a non-array
3853 element type is found. */
3856 strip_array_types (tree type)
3858 while (TREE_CODE (type) == ARRAY_TYPE)
3859 type = TREE_TYPE (type);
3864 /* Recursively remove any '*' or '&' operator from TYPE. */
3866 strip_pointer_operator (tree t)
3868 while (POINTER_TYPE_P (t))
3873 /* Used to compare case labels. K1 and K2 are actually tree nodes
3874 representing case labels, or NULL_TREE for a `default' label.
3875 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3876 K2, and 0 if K1 and K2 are equal. */
3879 case_compare (splay_tree_key k1, splay_tree_key k2)
3881 /* Consider a NULL key (such as arises with a `default' label) to be
3882 smaller than anything else. */
3888 return tree_int_cst_compare ((tree) k1, (tree) k2);
3891 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3892 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3893 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3894 case label was declared using the usual C/C++ syntax, rather than
3895 the GNU case range extension. CASES is a tree containing all the
3896 case ranges processed so far; COND is the condition for the
3897 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3898 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
3901 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3902 tree low_value, tree high_value)
3907 splay_tree_node node;
3909 /* Create the LABEL_DECL itself. */
3910 label = create_artificial_label ();
3912 /* If there was an error processing the switch condition, bail now
3913 before we get more confused. */
3914 if (!cond || cond == error_mark_node)
3917 if ((low_value && TREE_TYPE (low_value)
3918 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3919 || (high_value && TREE_TYPE (high_value)
3920 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3922 error ("pointers are not permitted as case values");
3926 /* Case ranges are a GNU extension. */
3927 if (high_value && pedantic)
3928 pedwarn ("range expressions in switch statements are non-standard");
3930 type = TREE_TYPE (cond);
3933 low_value = check_case_value (low_value);
3934 low_value = convert_and_check (type, low_value);
3935 if (low_value == error_mark_node)
3940 high_value = check_case_value (high_value);
3941 high_value = convert_and_check (type, high_value);
3942 if (high_value == error_mark_node)
3946 if (low_value && high_value)
3948 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3949 really a case range, even though it was written that way.
3950 Remove the HIGH_VALUE to simplify later processing. */
3951 if (tree_int_cst_equal (low_value, high_value))
3952 high_value = NULL_TREE;
3953 else if (!tree_int_cst_lt (low_value, high_value))
3954 warning (0, "empty range specified");
3957 /* See if the case is in range of the type of the original testing
3958 expression. If both low_value and high_value are out of range,
3959 don't insert the case label and return NULL_TREE. */
3961 && !check_case_bounds (type, orig_type,
3962 &low_value, high_value ? &high_value : NULL))
3965 /* Look up the LOW_VALUE in the table of case labels we already
3967 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3968 /* If there was not an exact match, check for overlapping ranges.
3969 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3970 that's a `default' label and the only overlap is an exact match. */
3971 if (!node && (low_value || high_value))
3973 splay_tree_node low_bound;
3974 splay_tree_node high_bound;
3976 /* Even though there wasn't an exact match, there might be an
3977 overlap between this case range and another case range.
3978 Since we've (inductively) not allowed any overlapping case
3979 ranges, we simply need to find the greatest low case label
3980 that is smaller that LOW_VALUE, and the smallest low case
3981 label that is greater than LOW_VALUE. If there is an overlap
3982 it will occur in one of these two ranges. */
3983 low_bound = splay_tree_predecessor (cases,
3984 (splay_tree_key) low_value);
3985 high_bound = splay_tree_successor (cases,
3986 (splay_tree_key) low_value);
3988 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3989 the LOW_VALUE, so there is no need to check unless the
3990 LOW_BOUND is in fact itself a case range. */
3992 && CASE_HIGH ((tree) low_bound->value)
3993 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3996 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3997 range is bigger than the low end of the current range, so we
3998 are only interested if the current range is a real range, and
3999 not an ordinary case label. */
4002 && (tree_int_cst_compare ((tree) high_bound->key,
4007 /* If there was an overlap, issue an error. */
4010 tree duplicate = CASE_LABEL ((tree) node->value);
4014 error ("duplicate (or overlapping) case value");
4015 error ("%Jthis is the first entry overlapping that value", duplicate);
4019 error ("duplicate case value") ;
4020 error ("%Jpreviously used here", duplicate);
4024 error ("multiple default labels in one switch");
4025 error ("%Jthis is the first default label", duplicate);
4030 /* Add a CASE_LABEL to the statement-tree. */
4031 case_label = add_stmt (build_case_label (low_value, high_value, label));
4032 /* Register this case label in the splay tree. */
4033 splay_tree_insert (cases,
4034 (splay_tree_key) low_value,
4035 (splay_tree_value) case_label);
4040 /* Add a label so that the back-end doesn't think that the beginning of
4041 the switch is unreachable. Note that we do not add a case label, as
4042 that just leads to duplicates and thence to failure later on. */
4045 tree t = create_artificial_label ();
4046 add_stmt (build_stmt (LABEL_EXPR, t));
4048 return error_mark_node;
4051 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
4052 Used to verify that case values match up with enumerator values. */
4055 match_case_to_enum_1 (tree key, tree type, tree label)
4057 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
4059 /* ??? Not working too hard to print the double-word value.
4060 Should perhaps be done with %lwd in the diagnostic routines? */
4061 if (TREE_INT_CST_HIGH (key) == 0)
4062 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
4063 TREE_INT_CST_LOW (key));
4064 else if (!TYPE_UNSIGNED (type)
4065 && TREE_INT_CST_HIGH (key) == -1
4066 && TREE_INT_CST_LOW (key) != 0)
4067 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
4068 -TREE_INT_CST_LOW (key));
4070 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
4071 TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
4073 if (TYPE_NAME (type) == 0)
4074 warning (0, "%Jcase value %qs not in enumerated type",
4075 CASE_LABEL (label), buf);
4077 warning (0, "%Jcase value %qs not in enumerated type %qT",
4078 CASE_LABEL (label), buf, type);
4081 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
4082 Used to verify that case values match up with enumerator values. */
4085 match_case_to_enum (splay_tree_node node, void *data)
4087 tree label = (tree) node->value;
4088 tree type = (tree) data;
4090 /* Skip default case. */
4091 if (!CASE_LOW (label))
4094 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
4095 when we did our enum->case scan. Reset our scratch bit after. */
4096 if (!CASE_LOW_SEEN (label))
4097 match_case_to_enum_1 (CASE_LOW (label), type, label);
4099 CASE_LOW_SEEN (label) = 0;
4101 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
4102 not set, that means that CASE_HIGH did not appear when we did our
4103 enum->case scan. Reset our scratch bit after. */
4104 if (CASE_HIGH (label))
4106 if (!CASE_HIGH_SEEN (label))
4107 match_case_to_enum_1 (CASE_HIGH (label), type, label);
4109 CASE_HIGH_SEEN (label) = 0;
4115 /* Handle -Wswitch*. Called from the front end after parsing the
4116 switch construct. */
4117 /* ??? Should probably be somewhere generic, since other languages
4118 besides C and C++ would want this. At the moment, however, C/C++
4119 are the only tree-ssa languages that support enumerations at all,
4120 so the point is moot. */
4123 c_do_switch_warnings (splay_tree cases, location_t switch_location,
4124 tree type, tree cond)
4126 splay_tree_node default_node;
4127 splay_tree_node node;
4130 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
4133 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
4135 warning (OPT_Wswitch_default, "%Hswitch missing default case",
4138 /* From here on, we only care about about enumerated types. */
4139 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
4142 /* If the switch expression was an enumerated type, check that
4143 exactly all enumeration literals are covered by the cases.
4144 The check is made when -Wswitch was specified and there is no
4145 default case, or when -Wswitch-enum was specified. */
4147 if (!warn_switch_enum
4148 && !(warn_switch && !default_node))
4151 /* Clearing COND if it is not an integer constant simplifies
4152 the tests inside the loop below. */
4153 if (TREE_CODE (cond) != INTEGER_CST)
4156 /* The time complexity here is O(N*lg(N)) worst case, but for the
4157 common case of monotonically increasing enumerators, it is
4158 O(N), since the nature of the splay tree will keep the next
4159 element adjacent to the root at all times. */
4161 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
4163 tree value = TREE_VALUE (chain);
4164 node = splay_tree_lookup (cases, (splay_tree_key) value);
4167 /* Mark the CASE_LOW part of the case entry as seen. */
4168 tree label = (tree) node->value;
4169 CASE_LOW_SEEN (label) = 1;
4173 /* Even though there wasn't an exact match, there might be a
4174 case range which includes the enumator's value. */
4175 node = splay_tree_predecessor (cases, (splay_tree_key) value);
4176 if (node && CASE_HIGH ((tree) node->value))
4178 tree label = (tree) node->value;
4179 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
4182 /* If we match the upper bound exactly, mark the CASE_HIGH
4183 part of the case entry as seen. */
4185 CASE_HIGH_SEEN (label) = 1;
4190 /* We've now determined that this enumerated literal isn't
4191 handled by the case labels of the switch statement. */
4193 /* If the switch expression is a constant, we only really care
4194 about whether that constant is handled by the switch. */
4195 if (cond && tree_int_cst_compare (cond, value))
4198 warning (0, "%Henumeration value %qE not handled in switch",
4199 &switch_location, TREE_PURPOSE (chain));
4202 /* Warn if there are case expressions that don't correspond to
4203 enumerators. This can occur since C and C++ don't enforce
4204 type-checking of assignments to enumeration variables.
4206 The time complexity here is now always O(N) worst case, since
4207 we should have marked both the lower bound and upper bound of
4208 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
4209 above. This scan also resets those fields. */
4210 splay_tree_foreach (cases, match_case_to_enum, type);
4213 /* Finish an expression taking the address of LABEL (an
4214 IDENTIFIER_NODE). Returns an expression for the address. */
4217 finish_label_address_expr (tree label)
4222 pedwarn ("taking the address of a label is non-standard");
4224 if (label == error_mark_node)
4225 return error_mark_node;
4227 label = lookup_label (label);
4228 if (label == NULL_TREE)
4229 result = null_pointer_node;
4232 TREE_USED (label) = 1;
4233 result = build1 (ADDR_EXPR, ptr_type_node, label);
4234 /* The current function in not necessarily uninlinable.
4235 Computed gotos are incompatible with inlining, but the value
4236 here could be used only in a diagnostic, for example. */
4242 /* Hook used by expand_expr to expand language-specific tree codes. */
4243 /* The only things that should go here are bits needed to expand
4244 constant initializers. Everything else should be handled by the
4245 gimplification routines. */
4248 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
4249 int modifier /* Actually enum_modifier. */,
4252 switch (TREE_CODE (exp))
4254 case COMPOUND_LITERAL_EXPR:
4256 /* Initialize the anonymous variable declared in the compound
4257 literal, then return the variable. */
4258 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4259 emit_local_var (decl);
4260 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
4269 /* Generate the RTL for the body of FNDECL. */
4272 c_expand_body (tree fndecl)
4275 if (!DECL_INITIAL (fndecl)
4276 || DECL_INITIAL (fndecl) == error_mark_node)
4279 tree_rest_of_compilation (fndecl);
4281 if (DECL_STATIC_CONSTRUCTOR (fndecl)
4282 && targetm.have_ctors_dtors)
4283 targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
4284 decl_init_priority_lookup (fndecl));
4285 if (DECL_STATIC_DESTRUCTOR (fndecl)
4286 && targetm.have_ctors_dtors)
4287 targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
4288 decl_fini_priority_lookup (fndecl));
4291 /* Hook used by staticp to handle language-specific tree codes. */
4294 c_staticp (tree exp)
4296 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4297 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4302 /* Given a boolean expression ARG, return a tree representing an increment
4303 or decrement (as indicated by CODE) of ARG. The front end must check for
4304 invalid cases (e.g., decrement in C++). */
4306 boolean_increment (enum tree_code code, tree arg)
4309 tree true_res = boolean_true_node;
4311 arg = stabilize_reference (arg);
4314 case PREINCREMENT_EXPR:
4315 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4317 case POSTINCREMENT_EXPR:
4318 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4319 arg = save_expr (arg);
4320 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4321 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4323 case PREDECREMENT_EXPR:
4324 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4325 invert_truthvalue (arg));
4327 case POSTDECREMENT_EXPR:
4328 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4329 invert_truthvalue (arg));
4330 arg = save_expr (arg);
4331 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4332 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4337 TREE_SIDE_EFFECTS (val) = 1;
4341 /* Built-in macros for stddef.h, that require macros defined in this
4344 c_stddef_cpp_builtins(void)
4346 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4347 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4348 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4349 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4350 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4351 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4355 c_init_attributes (void)
4357 /* Fill in the built_in_attributes array. */
4358 #define DEF_ATTR_NULL_TREE(ENUM) \
4359 built_in_attributes[(int) ENUM] = NULL_TREE;
4360 #define DEF_ATTR_INT(ENUM, VALUE) \
4361 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4362 #define DEF_ATTR_IDENT(ENUM, STRING) \
4363 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4364 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4365 built_in_attributes[(int) ENUM] \
4366 = tree_cons (built_in_attributes[(int) PURPOSE], \
4367 built_in_attributes[(int) VALUE], \
4368 built_in_attributes[(int) CHAIN]);
4369 #include "builtin-attrs.def"
4370 #undef DEF_ATTR_NULL_TREE
4372 #undef DEF_ATTR_IDENT
4373 #undef DEF_ATTR_TREE_LIST
4376 /* Attribute handlers common to C front ends. */
4378 /* Handle a "packed" attribute; arguments as in
4379 struct attribute_spec.handler. */
4382 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4383 int flags, bool *no_add_attrs)
4387 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4388 *node = build_variant_type_copy (*node);
4389 TYPE_PACKED (*node) = 1;
4391 else if (TREE_CODE (*node) == FIELD_DECL)
4393 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4394 warning (OPT_Wattributes,
4395 "%qE attribute ignored for field of type %qT",
4396 name, TREE_TYPE (*node));
4398 DECL_PACKED (*node) = 1;
4400 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4401 used for DECL_REGISTER. It wouldn't mean anything anyway.
4402 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4403 that changes what the typedef is typing. */
4406 warning (OPT_Wattributes, "%qE attribute ignored", name);
4407 *no_add_attrs = true;
4413 /* Handle a "nocommon" attribute; arguments as in
4414 struct attribute_spec.handler. */
4417 handle_nocommon_attribute (tree *node, tree name,
4418 tree ARG_UNUSED (args),
4419 int ARG_UNUSED (flags), bool *no_add_attrs)
4421 if (TREE_CODE (*node) == VAR_DECL)
4422 DECL_COMMON (*node) = 0;
4425 warning (OPT_Wattributes, "%qE attribute ignored", name);
4426 *no_add_attrs = true;
4432 /* Handle a "common" attribute; arguments as in
4433 struct attribute_spec.handler. */
4436 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4437 int ARG_UNUSED (flags), bool *no_add_attrs)
4439 if (TREE_CODE (*node) == VAR_DECL)
4440 DECL_COMMON (*node) = 1;
4443 warning (OPT_Wattributes, "%qE attribute ignored", name);
4444 *no_add_attrs = true;
4450 /* Handle a "noreturn" attribute; arguments as in
4451 struct attribute_spec.handler. */
4454 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4455 int ARG_UNUSED (flags), bool *no_add_attrs)
4457 tree type = TREE_TYPE (*node);
4459 /* See FIXME comment in c_common_attribute_table. */
4460 if (TREE_CODE (*node) == FUNCTION_DECL)
4461 TREE_THIS_VOLATILE (*node) = 1;
4462 else if (TREE_CODE (type) == POINTER_TYPE
4463 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4465 = build_pointer_type
4466 (build_type_variant (TREE_TYPE (type),
4467 TYPE_READONLY (TREE_TYPE (type)), 1));
4470 warning (OPT_Wattributes, "%qE attribute ignored", name);
4471 *no_add_attrs = true;
4477 /* Handle a "hot" and attribute; arguments as in
4478 struct attribute_spec.handler. */
4481 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4482 int ARG_UNUSED (flags), bool *no_add_attrs)
4484 if (TREE_CODE (*node) == FUNCTION_DECL)
4486 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
4488 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4490 *no_add_attrs = true;
4492 /* Do nothing else, just set the attribute. We'll get at
4493 it later with lookup_attribute. */
4497 warning (OPT_Wattributes, "%qE attribute ignored", name);
4498 *no_add_attrs = true;
4503 /* Handle a "cold" and attribute; arguments as in
4504 struct attribute_spec.handler. */
4507 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4508 int ARG_UNUSED (flags), bool *no_add_attrs)
4510 if (TREE_CODE (*node) == FUNCTION_DECL)
4512 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
4514 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4516 *no_add_attrs = true;
4518 /* Do nothing else, just set the attribute. We'll get at
4519 it later with lookup_attribute. */
4523 warning (OPT_Wattributes, "%qE attribute ignored", name);
4524 *no_add_attrs = true;
4530 /* Handle a "noinline" attribute; arguments as in
4531 struct attribute_spec.handler. */
4534 handle_noinline_attribute (tree *node, tree name,
4535 tree ARG_UNUSED (args),
4536 int ARG_UNUSED (flags), bool *no_add_attrs)
4538 if (TREE_CODE (*node) == FUNCTION_DECL)
4539 DECL_UNINLINABLE (*node) = 1;
4542 warning (OPT_Wattributes, "%qE attribute ignored", name);
4543 *no_add_attrs = true;
4549 /* Handle a "always_inline" attribute; arguments as in
4550 struct attribute_spec.handler. */
4553 handle_always_inline_attribute (tree *node, tree name,
4554 tree ARG_UNUSED (args),
4555 int ARG_UNUSED (flags),
4558 if (TREE_CODE (*node) == FUNCTION_DECL)
4560 /* Do nothing else, just set the attribute. We'll get at
4561 it later with lookup_attribute. */
4565 warning (OPT_Wattributes, "%qE attribute ignored", name);
4566 *no_add_attrs = true;
4572 /* Handle a "gnu_inline" attribute; arguments as in
4573 struct attribute_spec.handler. */
4576 handle_gnu_inline_attribute (tree *node, tree name,
4577 tree ARG_UNUSED (args),
4578 int ARG_UNUSED (flags),
4581 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4583 /* Do nothing else, just set the attribute. We'll get at
4584 it later with lookup_attribute. */
4588 warning (OPT_Wattributes, "%qE attribute ignored", name);
4589 *no_add_attrs = true;
4595 /* Handle a "flatten" attribute; arguments as in
4596 struct attribute_spec.handler. */
4599 handle_flatten_attribute (tree *node, tree name,
4600 tree args ATTRIBUTE_UNUSED,
4601 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4603 if (TREE_CODE (*node) == FUNCTION_DECL)
4604 /* Do nothing else, just set the attribute. We'll get at
4605 it later with lookup_attribute. */
4609 warning (OPT_Wattributes, "%qE attribute ignored", name);
4610 *no_add_attrs = true;
4617 /* Handle a "used" attribute; arguments as in
4618 struct attribute_spec.handler. */
4621 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4622 int ARG_UNUSED (flags), bool *no_add_attrs)
4626 if (TREE_CODE (node) == FUNCTION_DECL
4627 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4629 TREE_USED (node) = 1;
4630 DECL_PRESERVE_P (node) = 1;
4634 warning (OPT_Wattributes, "%qE attribute ignored", name);
4635 *no_add_attrs = true;
4641 /* Handle a "unused" attribute; arguments as in
4642 struct attribute_spec.handler. */
4645 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4646 int flags, bool *no_add_attrs)
4652 if (TREE_CODE (decl) == PARM_DECL
4653 || TREE_CODE (decl) == VAR_DECL
4654 || TREE_CODE (decl) == FUNCTION_DECL
4655 || TREE_CODE (decl) == LABEL_DECL
4656 || TREE_CODE (decl) == TYPE_DECL)
4657 TREE_USED (decl) = 1;
4660 warning (OPT_Wattributes, "%qE attribute ignored", name);
4661 *no_add_attrs = true;
4666 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4667 *node = build_variant_type_copy (*node);
4668 TREE_USED (*node) = 1;
4674 /* Handle a "externally_visible" attribute; arguments as in
4675 struct attribute_spec.handler. */
4678 handle_externally_visible_attribute (tree *pnode, tree name,
4679 tree ARG_UNUSED (args),
4680 int ARG_UNUSED (flags),
4685 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
4687 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
4688 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
4690 warning (OPT_Wattributes,
4691 "%qE attribute have effect only on public objects", name);
4692 *no_add_attrs = true;
4697 warning (OPT_Wattributes, "%qE attribute ignored", name);
4698 *no_add_attrs = true;
4704 /* Handle a "const" attribute; arguments as in
4705 struct attribute_spec.handler. */
4708 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4709 int ARG_UNUSED (flags), bool *no_add_attrs)
4711 tree type = TREE_TYPE (*node);
4713 /* See FIXME comment on noreturn in c_common_attribute_table. */
4714 if (TREE_CODE (*node) == FUNCTION_DECL)
4715 TREE_READONLY (*node) = 1;
4716 else if (TREE_CODE (type) == POINTER_TYPE
4717 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4719 = build_pointer_type
4720 (build_type_variant (TREE_TYPE (type), 1,
4721 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4724 warning (OPT_Wattributes, "%qE attribute ignored", name);
4725 *no_add_attrs = true;
4731 /* Handle a "transparent_union" attribute; arguments as in
4732 struct attribute_spec.handler. */
4735 handle_transparent_union_attribute (tree *node, tree name,
4736 tree ARG_UNUSED (args), int flags,
4741 *no_add_attrs = true;
4745 if (TREE_CODE (*node) != TYPE_DECL)
4747 node = &TREE_TYPE (*node);
4750 else if (TYPE_P (*node))
4755 if (TREE_CODE (type) == UNION_TYPE)
4757 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4758 the code in finish_struct. */
4759 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4761 if (TYPE_FIELDS (type) == NULL_TREE
4762 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4765 /* A type variant isn't good enough, since we don't a cast
4766 to such a type removed as a no-op. */
4767 *node = type = build_duplicate_type (type);
4770 TYPE_TRANSPARENT_UNION (type) = 1;
4775 warning (OPT_Wattributes, "%qE attribute ignored", name);
4779 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
4780 get the requested priority for a constructor or destructor,
4781 possibly issuing diagnostics for invalid or reserved
4784 static priority_type
4785 get_priority (tree args, bool is_destructor)
4791 return DEFAULT_INIT_PRIORITY;
4793 if (!SUPPORTS_INIT_PRIORITY)
4796 error ("destructor priorities are not supported");
4798 error ("constructor priorities are not supported");
4799 return DEFAULT_INIT_PRIORITY;
4802 arg = TREE_VALUE (args);
4803 if (!host_integerp (arg, /*pos=*/0)
4804 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4807 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
4808 if (pri < 0 || pri > MAX_INIT_PRIORITY)
4811 if (pri <= MAX_RESERVED_INIT_PRIORITY)
4815 "destructor priorities from 0 to %d are reserved "
4816 "for the implementation",
4817 MAX_RESERVED_INIT_PRIORITY);
4820 "constructor priorities from 0 to %d are reserved "
4821 "for the implementation",
4822 MAX_RESERVED_INIT_PRIORITY);
4828 error ("destructor priorities must be integers from 0 to %d inclusive",
4831 error ("constructor priorities must be integers from 0 to %d inclusive",
4833 return DEFAULT_INIT_PRIORITY;
4836 /* Handle a "constructor" attribute; arguments as in
4837 struct attribute_spec.handler. */
4840 handle_constructor_attribute (tree *node, tree name, tree args,
4841 int ARG_UNUSED (flags),
4845 tree type = TREE_TYPE (decl);
4847 if (TREE_CODE (decl) == FUNCTION_DECL
4848 && TREE_CODE (type) == FUNCTION_TYPE
4849 && decl_function_context (decl) == 0)
4851 priority_type priority;
4852 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4853 priority = get_priority (args, /*is_destructor=*/false);
4854 SET_DECL_INIT_PRIORITY (decl, priority);
4855 TREE_USED (decl) = 1;
4859 warning (OPT_Wattributes, "%qE attribute ignored", name);
4860 *no_add_attrs = true;
4866 /* Handle a "destructor" attribute; arguments as in
4867 struct attribute_spec.handler. */
4870 handle_destructor_attribute (tree *node, tree name, tree args,
4871 int ARG_UNUSED (flags),
4875 tree type = TREE_TYPE (decl);
4877 if (TREE_CODE (decl) == FUNCTION_DECL
4878 && TREE_CODE (type) == FUNCTION_TYPE
4879 && decl_function_context (decl) == 0)
4881 priority_type priority;
4882 DECL_STATIC_DESTRUCTOR (decl) = 1;
4883 priority = get_priority (args, /*is_destructor=*/true);
4884 SET_DECL_FINI_PRIORITY (decl, priority);
4885 TREE_USED (decl) = 1;
4889 warning (OPT_Wattributes, "%qE attribute ignored", name);
4890 *no_add_attrs = true;
4896 /* Handle a "mode" attribute; arguments as in
4897 struct attribute_spec.handler. */
4900 handle_mode_attribute (tree *node, tree name, tree args,
4901 int ARG_UNUSED (flags), bool *no_add_attrs)
4905 *no_add_attrs = true;
4907 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4908 warning (OPT_Wattributes, "%qE attribute ignored", name);
4912 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4913 int len = strlen (p);
4914 enum machine_mode mode = VOIDmode;
4918 if (len > 4 && p[0] == '_' && p[1] == '_'
4919 && p[len - 1] == '_' && p[len - 2] == '_')
4921 char *newp = (char *) alloca (len - 1);
4923 strcpy (newp, &p[2]);
4924 newp[len - 4] = '\0';
4928 /* Change this type to have a type with the specified mode.
4929 First check for the special modes. */
4930 if (!strcmp (p, "byte"))
4932 else if (!strcmp (p, "word"))
4934 else if (!strcmp (p, "pointer"))
4937 for (j = 0; j < NUM_MACHINE_MODES; j++)
4938 if (!strcmp (p, GET_MODE_NAME (j)))
4940 mode = (enum machine_mode) j;
4944 if (mode == VOIDmode)
4946 error ("unknown machine mode %qs", p);
4951 switch (GET_MODE_CLASS (mode))
4954 case MODE_PARTIAL_INT:
4956 case MODE_DECIMAL_FLOAT:
4957 valid_mode = targetm.scalar_mode_supported_p (mode);
4960 case MODE_COMPLEX_INT:
4961 case MODE_COMPLEX_FLOAT:
4962 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4965 case MODE_VECTOR_INT:
4966 case MODE_VECTOR_FLOAT:
4967 warning (OPT_Wattributes, "specifying vector types with "
4968 "__attribute__ ((mode)) is deprecated");
4969 warning (OPT_Wattributes,
4970 "use __attribute__ ((vector_size)) instead");
4971 valid_mode = vector_mode_valid_p (mode);
4979 error ("unable to emulate %qs", p);
4983 if (POINTER_TYPE_P (type))
4985 tree (*fn)(tree, enum machine_mode, bool);
4987 if (!targetm.valid_pointer_mode (mode))
4989 error ("invalid pointer mode %qs", p);
4993 if (TREE_CODE (type) == POINTER_TYPE)
4994 fn = build_pointer_type_for_mode;
4996 fn = build_reference_type_for_mode;
4997 typefm = fn (TREE_TYPE (type), mode, false);
5000 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
5002 if (typefm == NULL_TREE)
5004 error ("no data type for mode %qs", p);
5007 else if (TREE_CODE (type) == ENUMERAL_TYPE)
5009 /* For enumeral types, copy the precision from the integer
5010 type returned above. If not an INTEGER_TYPE, we can't use
5011 this mode for this type. */
5012 if (TREE_CODE (typefm) != INTEGER_TYPE)
5014 error ("cannot use mode %qs for enumeral types", p);
5018 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
5020 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
5025 /* We cannot build a type variant, as there's code that assumes
5026 that TYPE_MAIN_VARIANT has the same mode. This includes the
5027 debug generators. Instead, create a subrange type. This
5028 results in all of the enumeral values being emitted only once
5029 in the original, and the subtype gets them by reference. */
5030 if (TYPE_UNSIGNED (type))
5031 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
5033 typefm = make_signed_type (TYPE_PRECISION (typefm));
5034 TREE_TYPE (typefm) = type;
5037 else if (VECTOR_MODE_P (mode)
5038 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
5039 : TREE_CODE (type) != TREE_CODE (typefm))
5041 error ("mode %qs applied to inappropriate type", p);
5051 /* Handle a "section" attribute; arguments as in
5052 struct attribute_spec.handler. */
5055 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5056 int ARG_UNUSED (flags), bool *no_add_attrs)
5060 if (targetm.have_named_sections)
5062 user_defined_section_attribute = true;
5064 if ((TREE_CODE (decl) == FUNCTION_DECL
5065 || TREE_CODE (decl) == VAR_DECL)
5066 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5068 if (TREE_CODE (decl) == VAR_DECL
5069 && current_function_decl != NULL_TREE
5070 && !TREE_STATIC (decl))
5072 error ("%Jsection attribute cannot be specified for "
5073 "local variables", decl);
5074 *no_add_attrs = true;
5077 /* The decl may have already been given a section attribute
5078 from a previous declaration. Ensure they match. */
5079 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5080 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5081 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5083 error ("section of %q+D conflicts with previous declaration",
5085 *no_add_attrs = true;
5088 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5092 error ("section attribute not allowed for %q+D", *node);
5093 *no_add_attrs = true;
5098 error ("%Jsection attributes are not supported for this target", *node);
5099 *no_add_attrs = true;
5105 /* Handle a "aligned" attribute; arguments as in
5106 struct attribute_spec.handler. */
5109 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5110 int flags, bool *no_add_attrs)
5112 tree decl = NULL_TREE;
5115 tree align_expr = (args ? TREE_VALUE (args)
5116 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5122 type = &TREE_TYPE (decl);
5123 is_type = TREE_CODE (*node) == TYPE_DECL;
5125 else if (TYPE_P (*node))
5126 type = node, is_type = 1;
5128 if (TREE_CODE (align_expr) != INTEGER_CST)
5130 error ("requested alignment is not a constant");
5131 *no_add_attrs = true;
5133 else if ((i = tree_log2 (align_expr)) == -1)
5135 error ("requested alignment is not a power of 2");
5136 *no_add_attrs = true;
5138 else if (i > HOST_BITS_PER_INT - 2)
5140 error ("requested alignment is too large");
5141 *no_add_attrs = true;
5145 /* If we have a TYPE_DECL, then copy the type, so that we
5146 don't accidentally modify a builtin type. See pushdecl. */
5147 if (decl && TREE_TYPE (decl) != error_mark_node
5148 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5150 tree tt = TREE_TYPE (decl);
5151 *type = build_variant_type_copy (*type);
5152 DECL_ORIGINAL_TYPE (decl) = tt;
5153 TYPE_NAME (*type) = decl;
5154 TREE_USED (*type) = TREE_USED (decl);
5155 TREE_TYPE (decl) = *type;
5157 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5158 *type = build_variant_type_copy (*type);
5160 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5161 TYPE_USER_ALIGN (*type) = 1;
5163 else if (TREE_CODE (decl) != VAR_DECL
5164 && TREE_CODE (decl) != FIELD_DECL)
5166 error ("alignment may not be specified for %q+D", decl);
5167 *no_add_attrs = true;
5171 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5172 DECL_USER_ALIGN (decl) = 1;
5178 /* Handle a "weak" attribute; arguments as in
5179 struct attribute_spec.handler. */
5182 handle_weak_attribute (tree *node, tree name,
5183 tree ARG_UNUSED (args),
5184 int ARG_UNUSED (flags),
5185 bool * ARG_UNUSED (no_add_attrs))
5187 if (TREE_CODE (*node) == FUNCTION_DECL
5188 || TREE_CODE (*node) == VAR_DECL)
5189 declare_weak (*node);
5191 warning (OPT_Wattributes, "%qE attribute ignored", name);
5197 /* Handle an "alias" attribute; arguments as in
5198 struct attribute_spec.handler. */
5201 handle_alias_attribute (tree *node, tree name, tree args,
5202 int ARG_UNUSED (flags), bool *no_add_attrs)
5206 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5207 || (TREE_CODE (decl) != FUNCTION_DECL
5208 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
5209 /* A static variable declaration is always a tentative definition,
5210 but the alias is a non-tentative definition which overrides. */
5211 || (TREE_CODE (decl) != FUNCTION_DECL
5212 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
5214 error ("%q+D defined both normally and as an alias", decl);
5215 *no_add_attrs = true;
5218 /* Note that the very first time we process a nested declaration,
5219 decl_function_context will not be set. Indeed, *would* never
5220 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
5221 we do below. After such frobbery, pushdecl would set the context.
5222 In any case, this is never what we want. */
5223 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
5227 id = TREE_VALUE (args);
5228 if (TREE_CODE (id) != STRING_CST)
5230 error ("alias argument not a string");
5231 *no_add_attrs = true;
5234 id = get_identifier (TREE_STRING_POINTER (id));
5235 /* This counts as a use of the object pointed to. */
5238 if (TREE_CODE (decl) == FUNCTION_DECL)
5239 DECL_INITIAL (decl) = error_mark_node;
5242 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5243 DECL_EXTERNAL (decl) = 1;
5245 DECL_EXTERNAL (decl) = 0;
5246 TREE_STATIC (decl) = 1;
5251 warning (OPT_Wattributes, "%qE attribute ignored", name);
5252 *no_add_attrs = true;
5258 /* Handle a "weakref" attribute; arguments as in struct
5259 attribute_spec.handler. */
5262 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5263 int flags, bool *no_add_attrs)
5265 tree attr = NULL_TREE;
5267 /* We must ignore the attribute when it is associated with
5268 local-scoped decls, since attribute alias is ignored and many
5269 such symbols do not even have a DECL_WEAK field. */
5270 if (decl_function_context (*node) || current_function_decl)
5272 warning (OPT_Wattributes, "%qE attribute ignored", name);
5273 *no_add_attrs = true;
5277 /* The idea here is that `weakref("name")' mutates into `weakref,
5278 alias("name")', and weakref without arguments, in turn,
5279 implicitly adds weak. */
5283 attr = tree_cons (get_identifier ("alias"), args, attr);
5284 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
5286 *no_add_attrs = true;
5288 decl_attributes (node, attr, flags);
5292 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
5293 error ("%Jweakref attribute must appear before alias attribute",
5296 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
5297 and that isn't supported; and because it wants to add it to
5298 the list of weak decls, which isn't helpful. */
5299 DECL_WEAK (*node) = 1;
5305 /* Handle an "visibility" attribute; arguments as in
5306 struct attribute_spec.handler. */
5309 handle_visibility_attribute (tree *node, tree name, tree args,
5310 int ARG_UNUSED (flags),
5311 bool *ARG_UNUSED (no_add_attrs))
5314 tree id = TREE_VALUE (args);
5315 enum symbol_visibility vis;
5319 if (TREE_CODE (*node) == ENUMERAL_TYPE)
5321 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
5323 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
5327 else if (TYPE_FIELDS (*node))
5329 error ("%qE attribute ignored because %qT is already defined",
5334 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
5336 warning (OPT_Wattributes, "%qE attribute ignored", name);
5340 if (TREE_CODE (id) != STRING_CST)
5342 error ("visibility argument not a string");
5346 /* If this is a type, set the visibility on the type decl. */
5349 decl = TYPE_NAME (decl);
5352 if (TREE_CODE (decl) == IDENTIFIER_NODE)
5354 warning (OPT_Wattributes, "%qE attribute ignored on types",
5360 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
5361 vis = VISIBILITY_DEFAULT;
5362 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
5363 vis = VISIBILITY_INTERNAL;
5364 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
5365 vis = VISIBILITY_HIDDEN;
5366 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
5367 vis = VISIBILITY_PROTECTED;
5370 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
5371 vis = VISIBILITY_DEFAULT;
5374 if (DECL_VISIBILITY_SPECIFIED (decl)
5375 && vis != DECL_VISIBILITY (decl)
5376 && lookup_attribute ("visibility", (TYPE_P (*node)
5377 ? TYPE_ATTRIBUTES (*node)
5378 : DECL_ATTRIBUTES (decl))))
5379 error ("%qD redeclared with different visibility", decl);
5381 DECL_VISIBILITY (decl) = vis;
5382 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5384 /* Go ahead and attach the attribute to the node as well. This is needed
5385 so we can determine whether we have VISIBILITY_DEFAULT because the
5386 visibility was not specified, or because it was explicitly overridden
5387 from the containing scope. */
5392 /* Determine the ELF symbol visibility for DECL, which is either a
5393 variable or a function. It is an error to use this function if a
5394 definition of DECL is not available in this translation unit.
5395 Returns true if the final visibility has been determined by this
5396 function; false if the caller is free to make additional
5400 c_determine_visibility (tree decl)
5402 gcc_assert (TREE_CODE (decl) == VAR_DECL
5403 || TREE_CODE (decl) == FUNCTION_DECL);
5405 /* If the user explicitly specified the visibility with an
5406 attribute, honor that. DECL_VISIBILITY will have been set during
5407 the processing of the attribute. We check for an explicit
5408 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
5409 to distinguish the use of an attribute from the use of a "#pragma
5410 GCC visibility push(...)"; in the latter case we still want other
5411 considerations to be able to overrule the #pragma. */
5412 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
5415 /* Anything that is exported must have default visibility. */
5416 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5417 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
5419 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5420 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5424 /* Set default visibility to whatever the user supplied with
5425 visibility_specified depending on #pragma GCC visibility. */
5426 if (!DECL_VISIBILITY_SPECIFIED (decl))
5428 DECL_VISIBILITY (decl) = default_visibility;
5429 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
5434 /* Handle an "tls_model" attribute; arguments as in
5435 struct attribute_spec.handler. */
5438 handle_tls_model_attribute (tree *node, tree name, tree args,
5439 int ARG_UNUSED (flags), bool *no_add_attrs)
5443 enum tls_model kind;
5445 *no_add_attrs = true;
5447 if (!DECL_THREAD_LOCAL_P (decl))
5449 warning (OPT_Wattributes, "%qE attribute ignored", name);
5453 kind = DECL_TLS_MODEL (decl);
5454 id = TREE_VALUE (args);
5455 if (TREE_CODE (id) != STRING_CST)
5457 error ("tls_model argument not a string");
5461 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
5462 kind = TLS_MODEL_LOCAL_EXEC;
5463 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
5464 kind = TLS_MODEL_INITIAL_EXEC;
5465 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
5466 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
5467 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5468 kind = TLS_MODEL_GLOBAL_DYNAMIC;
5470 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5472 DECL_TLS_MODEL (decl) = kind;
5476 /* Handle a "no_instrument_function" attribute; arguments as in
5477 struct attribute_spec.handler. */
5480 handle_no_instrument_function_attribute (tree *node, tree name,
5481 tree ARG_UNUSED (args),
5482 int ARG_UNUSED (flags),
5487 if (TREE_CODE (decl) != FUNCTION_DECL)
5489 error ("%J%qE attribute applies only to functions", decl, name);
5490 *no_add_attrs = true;
5492 else if (DECL_INITIAL (decl))
5494 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5495 *no_add_attrs = true;
5498 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5503 /* Handle a "malloc" attribute; arguments as in
5504 struct attribute_spec.handler. */
5507 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5508 int ARG_UNUSED (flags), bool *no_add_attrs)
5510 if (TREE_CODE (*node) == FUNCTION_DECL
5511 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
5512 DECL_IS_MALLOC (*node) = 1;
5515 warning (OPT_Wattributes, "%qE attribute ignored", name);
5516 *no_add_attrs = true;
5522 /* Handle a "returns_twice" attribute; arguments as in
5523 struct attribute_spec.handler. */
5526 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5527 int ARG_UNUSED (flags), bool *no_add_attrs)
5529 if (TREE_CODE (*node) == FUNCTION_DECL)
5530 DECL_IS_RETURNS_TWICE (*node) = 1;
5533 warning (OPT_Wattributes, "%qE attribute ignored", name);
5534 *no_add_attrs = true;
5540 /* Handle a "no_limit_stack" attribute; arguments as in
5541 struct attribute_spec.handler. */
5544 handle_no_limit_stack_attribute (tree *node, tree name,
5545 tree ARG_UNUSED (args),
5546 int ARG_UNUSED (flags),
5551 if (TREE_CODE (decl) != FUNCTION_DECL)
5553 error ("%J%qE attribute applies only to functions", decl, name);
5554 *no_add_attrs = true;
5556 else if (DECL_INITIAL (decl))
5558 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5559 *no_add_attrs = true;
5562 DECL_NO_LIMIT_STACK (decl) = 1;
5567 /* Handle a "pure" attribute; arguments as in
5568 struct attribute_spec.handler. */
5571 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5572 int ARG_UNUSED (flags), bool *no_add_attrs)
5574 if (TREE_CODE (*node) == FUNCTION_DECL)
5575 DECL_IS_PURE (*node) = 1;
5576 /* ??? TODO: Support types. */
5579 warning (OPT_Wattributes, "%qE attribute ignored", name);
5580 *no_add_attrs = true;
5586 /* Handle a "no vops" attribute; arguments as in
5587 struct attribute_spec.handler. */
5590 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5591 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5592 bool *ARG_UNUSED (no_add_attrs))
5594 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5595 DECL_IS_NOVOPS (*node) = 1;
5599 /* Handle a "deprecated" attribute; arguments as in
5600 struct attribute_spec.handler. */
5603 handle_deprecated_attribute (tree *node, tree name,
5604 tree ARG_UNUSED (args), int flags,
5607 tree type = NULL_TREE;
5609 tree what = NULL_TREE;
5614 type = TREE_TYPE (decl);
5616 if (TREE_CODE (decl) == TYPE_DECL
5617 || TREE_CODE (decl) == PARM_DECL
5618 || TREE_CODE (decl) == VAR_DECL
5619 || TREE_CODE (decl) == FUNCTION_DECL
5620 || TREE_CODE (decl) == FIELD_DECL)
5621 TREE_DEPRECATED (decl) = 1;
5625 else if (TYPE_P (*node))
5627 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5628 *node = build_variant_type_copy (*node);
5629 TREE_DEPRECATED (*node) = 1;
5637 *no_add_attrs = true;
5638 if (type && TYPE_NAME (type))
5640 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5641 what = TYPE_NAME (*node);
5642 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5643 && DECL_NAME (TYPE_NAME (type)))
5644 what = DECL_NAME (TYPE_NAME (type));
5647 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
5649 warning (OPT_Wattributes, "%qE attribute ignored", name);
5655 /* Handle a "vector_size" attribute; arguments as in
5656 struct attribute_spec.handler. */
5659 handle_vector_size_attribute (tree *node, tree name, tree args,
5660 int ARG_UNUSED (flags),
5663 unsigned HOST_WIDE_INT vecsize, nunits;
5664 enum machine_mode orig_mode;
5665 tree type = *node, new_type, size;
5667 *no_add_attrs = true;
5669 size = TREE_VALUE (args);
5671 if (!host_integerp (size, 1))
5673 warning (OPT_Wattributes, "%qE attribute ignored", name);
5677 /* Get the vector size (in bytes). */
5678 vecsize = tree_low_cst (size, 1);
5680 /* We need to provide for vector pointers, vector arrays, and
5681 functions returning vectors. For example:
5683 __attribute__((vector_size(16))) short *foo;
5685 In this case, the mode is SI, but the type being modified is
5686 HI, so we need to look further. */
5688 while (POINTER_TYPE_P (type)
5689 || TREE_CODE (type) == FUNCTION_TYPE
5690 || TREE_CODE (type) == METHOD_TYPE
5691 || TREE_CODE (type) == ARRAY_TYPE)
5692 type = TREE_TYPE (type);
5694 /* Get the mode of the type being modified. */
5695 orig_mode = TYPE_MODE (type);
5697 if (TREE_CODE (type) == RECORD_TYPE
5698 || TREE_CODE (type) == UNION_TYPE
5699 || TREE_CODE (type) == VECTOR_TYPE
5700 || (!SCALAR_FLOAT_MODE_P (orig_mode)
5701 && GET_MODE_CLASS (orig_mode) != MODE_INT)
5702 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
5704 error ("invalid vector type for attribute %qE", name);
5708 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
5710 error ("vector size not an integral multiple of component size");
5716 error ("zero vector size");
5720 /* Calculate how many units fit in the vector. */
5721 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5722 if (nunits & (nunits - 1))
5724 error ("number of components of the vector not a power of two");
5728 new_type = build_vector_type (type, nunits);
5730 /* Build back pointers if needed. */
5731 *node = reconstruct_complex_type (*node, new_type);
5736 /* Handle the "nonnull" attribute. */
5738 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5739 tree args, int ARG_UNUSED (flags),
5743 unsigned HOST_WIDE_INT attr_arg_num;
5745 /* If no arguments are specified, all pointer arguments should be
5746 non-null. Verify a full prototype is given so that the arguments
5747 will have the correct types when we actually check them later. */
5750 if (!TYPE_ARG_TYPES (type))
5752 error ("nonnull attribute without arguments on a non-prototype");
5753 *no_add_attrs = true;
5758 /* Argument list specified. Verify that each argument number references
5759 a pointer argument. */
5760 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5763 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
5765 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
5767 error ("nonnull argument has invalid operand number (argument %lu)",
5768 (unsigned long) attr_arg_num);
5769 *no_add_attrs = true;
5773 argument = TYPE_ARG_TYPES (type);
5776 for (ck_num = 1; ; ck_num++)
5778 if (!argument || ck_num == arg_num)
5780 argument = TREE_CHAIN (argument);
5784 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5786 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5787 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5788 *no_add_attrs = true;
5792 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5794 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5795 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5796 *no_add_attrs = true;
5805 /* Check the argument list of a function call for null in argument slots
5806 that are marked as requiring a non-null pointer argument. The NARGS
5807 arguments are passed in the array ARGARRAY.
5811 check_function_nonnull (tree attrs, int nargs, tree *argarray)
5816 for (a = attrs; a; a = TREE_CHAIN (a))
5818 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5820 args = TREE_VALUE (a);
5822 /* Walk the argument list. If we encounter an argument number we
5823 should check for non-null, do it. If the attribute has no args,
5824 then every pointer argument is checked (in which case the check
5825 for pointer type is done in check_nonnull_arg). */
5826 for (i = 0; i < nargs; i++)
5828 if (!args || nonnull_check_p (args, i + 1))
5829 check_function_arguments_recurse (check_nonnull_arg, NULL,
5837 /* Check that the Nth argument of a function call (counting backwards
5838 from the end) is a (pointer)0. The NARGS arguments are passed in the
5842 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
5844 tree attr = lookup_attribute ("sentinel", attrs);
5852 /* Skip over the named arguments. */
5853 while (typelist && len < nargs)
5855 typelist = TREE_CHAIN (typelist);
5859 if (TREE_VALUE (attr))
5861 tree p = TREE_VALUE (TREE_VALUE (attr));
5862 pos = TREE_INT_CST_LOW (p);
5865 /* The sentinel must be one of the varargs, i.e.
5866 in position >= the number of fixed arguments. */
5867 if ((nargs - 1 - pos) < len)
5869 warning (OPT_Wformat,
5870 "not enough variable arguments to fit a sentinel");
5874 /* Validate the sentinel. */
5875 sentinel = argarray[nargs - 1 - pos];
5876 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
5877 || !integer_zerop (sentinel))
5878 /* Although __null (in C++) is only an integer we allow it
5879 nevertheless, as we are guaranteed that it's exactly
5880 as wide as a pointer, and we don't want to force
5881 users to cast the NULL they have written there.
5882 We warn with -Wstrict-null-sentinel, though. */
5883 && (warn_strict_null_sentinel || null_node != sentinel))
5884 warning (OPT_Wformat, "missing sentinel in function call");
5888 /* Helper for check_function_nonnull; given a list of operands which
5889 must be non-null in ARGS, determine if operand PARAM_NUM should be
5893 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5895 unsigned HOST_WIDE_INT arg_num = 0;
5897 for (; args; args = TREE_CHAIN (args))
5899 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5903 if (arg_num == param_num)
5909 /* Check that the function argument PARAM (which is operand number
5910 PARAM_NUM) is non-null. This is called by check_function_nonnull
5911 via check_function_arguments_recurse. */
5914 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5915 unsigned HOST_WIDE_INT param_num)
5917 /* Just skip checking the argument if it's not a pointer. This can
5918 happen if the "nonnull" attribute was given without an operand
5919 list (which means to check every pointer argument). */
5921 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5924 if (integer_zerop (param))
5925 warning (OPT_Wnonnull, "null argument where non-null required "
5926 "(argument %lu)", (unsigned long) param_num);
5929 /* Helper for nonnull attribute handling; fetch the operand number
5930 from the attribute argument list. */
5933 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5935 /* Verify the arg number is a constant. */
5936 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5937 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5940 *valp = TREE_INT_CST_LOW (arg_num_expr);
5944 /* Handle a "nothrow" attribute; arguments as in
5945 struct attribute_spec.handler. */
5948 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5949 int ARG_UNUSED (flags), bool *no_add_attrs)
5951 if (TREE_CODE (*node) == FUNCTION_DECL)
5952 TREE_NOTHROW (*node) = 1;
5953 /* ??? TODO: Support types. */
5956 warning (OPT_Wattributes, "%qE attribute ignored", name);
5957 *no_add_attrs = true;
5963 /* Handle a "cleanup" attribute; arguments as in
5964 struct attribute_spec.handler. */
5967 handle_cleanup_attribute (tree *node, tree name, tree args,
5968 int ARG_UNUSED (flags), bool *no_add_attrs)
5971 tree cleanup_id, cleanup_decl;
5973 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5974 for global destructors in C++. This requires infrastructure that
5975 we don't have generically at the moment. It's also not a feature
5976 we'd be missing too much, since we do have attribute constructor. */
5977 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5979 warning (OPT_Wattributes, "%qE attribute ignored", name);
5980 *no_add_attrs = true;
5984 /* Verify that the argument is a function in scope. */
5985 /* ??? We could support pointers to functions here as well, if
5986 that was considered desirable. */
5987 cleanup_id = TREE_VALUE (args);
5988 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5990 error ("cleanup argument not an identifier");
5991 *no_add_attrs = true;
5994 cleanup_decl = lookup_name (cleanup_id);
5995 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5997 error ("cleanup argument not a function");
5998 *no_add_attrs = true;
6002 /* That the function has proper type is checked with the
6003 eventual call to build_function_call. */
6008 /* Handle a "warn_unused_result" attribute. No special handling. */
6011 handle_warn_unused_result_attribute (tree *node, tree name,
6012 tree ARG_UNUSED (args),
6013 int ARG_UNUSED (flags), bool *no_add_attrs)
6015 /* Ignore the attribute for functions not returning any value. */
6016 if (VOID_TYPE_P (TREE_TYPE (*node)))
6018 warning (OPT_Wattributes, "%qE attribute ignored", name);
6019 *no_add_attrs = true;
6025 /* Handle a "sentinel" attribute. */
6028 handle_sentinel_attribute (tree *node, tree name, tree args,
6029 int ARG_UNUSED (flags), bool *no_add_attrs)
6031 tree params = TYPE_ARG_TYPES (*node);
6035 warning (OPT_Wattributes,
6036 "%qE attribute requires prototypes with named arguments", name);
6037 *no_add_attrs = true;
6041 while (TREE_CHAIN (params))
6042 params = TREE_CHAIN (params);
6044 if (VOID_TYPE_P (TREE_VALUE (params)))
6046 warning (OPT_Wattributes,
6047 "%qE attribute only applies to variadic functions", name);
6048 *no_add_attrs = true;
6054 tree position = TREE_VALUE (args);
6056 if (TREE_CODE (position) != INTEGER_CST)
6058 warning (0, "requested position is not an integer constant");
6059 *no_add_attrs = true;
6063 if (tree_int_cst_lt (position, integer_zero_node))
6065 warning (0, "requested position is less than zero");
6066 *no_add_attrs = true;
6074 /* Check for valid arguments being passed to a function.
6075 ATTRS is a list of attributes. There are NARGS arguments in the array
6076 ARGARRAY. TYPELIST is the list of argument types for the function.
6079 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
6081 /* Check for null being passed in a pointer argument that must be
6082 non-null. We also need to do this if format checking is enabled. */
6085 check_function_nonnull (attrs, nargs, argarray);
6087 /* Check for errors in format strings. */
6089 if (warn_format || warn_missing_format_attribute)
6090 check_function_format (attrs, nargs, argarray);
6093 check_function_sentinel (attrs, nargs, argarray, typelist);
6096 /* Generic argument checking recursion routine. PARAM is the argument to
6097 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
6098 once the argument is resolved. CTX is context for the callback. */
6100 check_function_arguments_recurse (void (*callback)
6101 (void *, tree, unsigned HOST_WIDE_INT),
6102 void *ctx, tree param,
6103 unsigned HOST_WIDE_INT param_num)
6105 if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
6106 && (TYPE_PRECISION (TREE_TYPE (param))
6107 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
6109 /* Strip coercion. */
6110 check_function_arguments_recurse (callback, ctx,
6111 TREE_OPERAND (param, 0), param_num);
6115 if (TREE_CODE (param) == CALL_EXPR)
6117 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
6119 bool found_format_arg = false;
6121 /* See if this is a call to a known internationalization function
6122 that modifies a format arg. Such a function may have multiple
6123 format_arg attributes (for example, ngettext). */
6125 for (attrs = TYPE_ATTRIBUTES (type);
6127 attrs = TREE_CHAIN (attrs))
6128 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
6131 tree format_num_expr;
6134 call_expr_arg_iterator iter;
6136 /* Extract the argument number, which was previously checked
6138 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
6140 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
6141 && !TREE_INT_CST_HIGH (format_num_expr));
6143 format_num = TREE_INT_CST_LOW (format_num_expr);
6145 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
6147 inner_arg = next_call_expr_arg (&iter), i++)
6148 if (i == format_num)
6150 check_function_arguments_recurse (callback, ctx,
6151 inner_arg, param_num);
6152 found_format_arg = true;
6157 /* If we found a format_arg attribute and did a recursive check,
6158 we are done with checking this argument. Otherwise, we continue
6159 and this will be considered a non-literal. */
6160 if (found_format_arg)
6164 if (TREE_CODE (param) == COND_EXPR)
6166 /* Check both halves of the conditional expression. */
6167 check_function_arguments_recurse (callback, ctx,
6168 TREE_OPERAND (param, 1), param_num);
6169 check_function_arguments_recurse (callback, ctx,
6170 TREE_OPERAND (param, 2), param_num);
6174 (*callback) (ctx, param, param_num);
6177 /* Function to help qsort sort FIELD_DECLs by name order. */
6180 field_decl_cmp (const void *x_p, const void *y_p)
6182 const tree *const x = (const tree *const) x_p;
6183 const tree *const y = (const tree *const) y_p;
6185 if (DECL_NAME (*x) == DECL_NAME (*y))
6186 /* A nontype is "greater" than a type. */
6187 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6188 if (DECL_NAME (*x) == NULL_TREE)
6190 if (DECL_NAME (*y) == NULL_TREE)
6192 if (DECL_NAME (*x) < DECL_NAME (*y))
6198 gt_pointer_operator new_value;
6202 /* This routine compares two fields like field_decl_cmp but using the
6203 pointer operator in resort_data. */
6206 resort_field_decl_cmp (const void *x_p, const void *y_p)
6208 const tree *const x = (const tree *const) x_p;
6209 const tree *const y = (const tree *const) y_p;
6211 if (DECL_NAME (*x) == DECL_NAME (*y))
6212 /* A nontype is "greater" than a type. */
6213 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6214 if (DECL_NAME (*x) == NULL_TREE)
6216 if (DECL_NAME (*y) == NULL_TREE)
6219 tree d1 = DECL_NAME (*x);
6220 tree d2 = DECL_NAME (*y);
6221 resort_data.new_value (&d1, resort_data.cookie);
6222 resort_data.new_value (&d2, resort_data.cookie);
6229 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
6232 resort_sorted_fields (void *obj,
6233 void * ARG_UNUSED (orig_obj),
6234 gt_pointer_operator new_value,
6237 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
6238 resort_data.new_value = new_value;
6239 resort_data.cookie = cookie;
6240 qsort (&sf->elts[0], sf->len, sizeof (tree),
6241 resort_field_decl_cmp);
6244 /* Subroutine of c_parse_error.
6245 Return the result of concatenating LHS and RHS. RHS is really
6246 a string literal, its first character is indicated by RHS_START and
6247 RHS_SIZE is its length (including the terminating NUL character).
6249 The caller is responsible for deleting the returned pointer. */
6252 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
6254 const int lhs_size = strlen (lhs);
6255 char *result = XNEWVEC (char, lhs_size + rhs_size);
6256 strncpy (result, lhs, lhs_size);
6257 strncpy (result + lhs_size, rhs_start, rhs_size);
6261 /* Issue the error given by GMSGID, indicating that it occurred before
6262 TOKEN, which had the associated VALUE. */
6265 c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
6267 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
6269 char *message = NULL;
6271 if (token == CPP_EOF)
6272 message = catenate_messages (gmsgid, " at end of input");
6273 else if (token == CPP_CHAR || token == CPP_WCHAR)
6275 unsigned int val = TREE_INT_CST_LOW (value);
6276 const char *const ell = (token == CPP_CHAR) ? "" : "L";
6277 if (val <= UCHAR_MAX && ISGRAPH (val))
6278 message = catenate_messages (gmsgid, " before %s'%c'");
6280 message = catenate_messages (gmsgid, " before %s'\\x%x'");
6282 error (message, ell, val);
6286 else if (token == CPP_STRING || token == CPP_WSTRING)
6287 message = catenate_messages (gmsgid, " before string constant");
6288 else if (token == CPP_NUMBER)
6289 message = catenate_messages (gmsgid, " before numeric constant");
6290 else if (token == CPP_NAME)
6292 message = catenate_messages (gmsgid, " before %qE");
6293 error (message, value);
6297 else if (token == CPP_PRAGMA)
6298 message = catenate_messages (gmsgid, " before %<#pragma%>");
6299 else if (token == CPP_PRAGMA_EOL)
6300 message = catenate_messages (gmsgid, " before end of line");
6301 else if (token < N_TTYPES)
6303 message = catenate_messages (gmsgid, " before %qs token");
6304 error (message, cpp_type2name (token));
6316 #undef catenate_messages
6319 /* Walk a gimplified function and warn for functions whose return value is
6320 ignored and attribute((warn_unused_result)) is set. This is done before
6321 inlining, so we don't have to worry about that. */
6324 c_warn_unused_result (tree *top_p)
6327 tree_stmt_iterator i;
6330 switch (TREE_CODE (t))
6332 case STATEMENT_LIST:
6333 for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
6334 c_warn_unused_result (tsi_stmt_ptr (i));
6338 c_warn_unused_result (&COND_EXPR_THEN (t));
6339 c_warn_unused_result (&COND_EXPR_ELSE (t));
6342 c_warn_unused_result (&BIND_EXPR_BODY (t));
6344 case TRY_FINALLY_EXPR:
6345 case TRY_CATCH_EXPR:
6346 c_warn_unused_result (&TREE_OPERAND (t, 0));
6347 c_warn_unused_result (&TREE_OPERAND (t, 1));
6350 c_warn_unused_result (&CATCH_BODY (t));
6352 case EH_FILTER_EXPR:
6353 c_warn_unused_result (&EH_FILTER_FAILURE (t));
6360 /* This is a naked call, as opposed to a CALL_EXPR nested inside
6361 a MODIFY_EXPR. All calls whose value is ignored should be
6362 represented like this. Look for the attribute. */
6363 fdecl = get_callee_fndecl (t);
6365 ftype = TREE_TYPE (fdecl);
6368 ftype = TREE_TYPE (CALL_EXPR_FN (t));
6369 /* Look past pointer-to-function to the function type itself. */
6370 ftype = TREE_TYPE (ftype);
6373 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
6376 warning (0, "%Hignoring return value of %qD, "
6377 "declared with attribute warn_unused_result",
6378 EXPR_LOCUS (t), fdecl);
6380 warning (0, "%Hignoring return value of function "
6381 "declared with attribute warn_unused_result",
6387 /* Not a container, not a call, or a call whose value is used. */
6392 /* Convert a character from the host to the target execution character
6393 set. cpplib handles this, mostly. */
6396 c_common_to_target_charset (HOST_WIDE_INT c)
6398 /* Character constants in GCC proper are sign-extended under -fsigned-char,
6399 zero-extended under -fno-signed-char. cpplib insists that characters
6400 and character constants are always unsigned. Hence we must convert
6402 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
6404 uc = cpp_host_to_exec_charset (parse_in, uc);
6406 if (flag_signed_char)
6407 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
6408 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
6413 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
6414 component references, with STOP_REF, or alternatively an INDIRECT_REF of
6415 NULL, at the bottom; much like the traditional rendering of offsetof as a
6416 macro. Returns the folded and properly cast result. */
6419 fold_offsetof_1 (tree expr, tree stop_ref)
6421 enum tree_code code = PLUS_EXPR;
6424 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
6425 return size_zero_node;
6427 switch (TREE_CODE (expr))
6433 error ("cannot apply %<offsetof%> to static data member %qD", expr);
6434 return error_mark_node;
6437 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
6438 return error_mark_node;
6441 gcc_assert (integer_zerop (expr));
6442 return size_zero_node;
6446 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6447 gcc_assert (base == error_mark_node || base == size_zero_node);
6451 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6452 if (base == error_mark_node)
6455 t = TREE_OPERAND (expr, 1);
6456 if (DECL_C_BIT_FIELD (t))
6458 error ("attempt to take address of bit-field structure "
6460 return error_mark_node;
6462 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
6463 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
6468 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6469 if (base == error_mark_node)
6472 t = TREE_OPERAND (expr, 1);
6473 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
6476 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
6478 t = convert (sizetype, t);
6479 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
6483 /* Handle static members of volatile structs. */
6484 t = TREE_OPERAND (expr, 1);
6485 gcc_assert (TREE_CODE (t) == VAR_DECL);
6486 return fold_offsetof_1 (t, stop_ref);
6492 return size_binop (code, base, off);
6496 fold_offsetof (tree expr, tree stop_ref)
6498 /* Convert back from the internal sizetype to size_t. */
6499 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
6502 /* Print an error message for an invalid lvalue. USE says
6503 how the lvalue is being used and so selects the error message. */
6506 lvalue_error (enum lvalue_use use)
6511 error ("lvalue required as left operand of assignment");
6514 error ("lvalue required as increment operand");
6517 error ("lvalue required as decrement operand");
6520 error ("lvalue required as unary %<&%> operand");
6523 error ("lvalue required in asm statement");
6530 /* *PTYPE is an incomplete array. Complete it with a domain based on
6531 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6532 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6533 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
6536 complete_array_type (tree *ptype, tree initial_value, bool do_default)
6538 tree maxindex, type, main_type, elt, unqual_elt;
6539 int failure = 0, quals;
6540 hashval_t hashcode = 0;
6542 maxindex = size_zero_node;
6545 if (TREE_CODE (initial_value) == STRING_CST)
6548 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6549 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6551 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6553 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6555 if (VEC_empty (constructor_elt, v))
6559 maxindex = integer_minus_one_node;
6564 unsigned HOST_WIDE_INT cnt;
6565 constructor_elt *ce;
6567 if (VEC_index (constructor_elt, v, 0)->index)
6568 maxindex = fold_convert (sizetype,
6569 VEC_index (constructor_elt,
6571 curindex = maxindex;
6574 VEC_iterate (constructor_elt, v, cnt, ce);
6578 curindex = fold_convert (sizetype, ce->index);
6580 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6582 if (tree_int_cst_lt (maxindex, curindex))
6583 maxindex = curindex;
6589 /* Make an error message unless that happened already. */
6590 if (initial_value != error_mark_node)
6602 elt = TREE_TYPE (type);
6603 quals = TYPE_QUALS (strip_array_types (elt));
6607 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6609 /* Using build_distinct_type_copy and modifying things afterward instead
6610 of using build_array_type to create a new type preserves all of the
6611 TYPE_LANG_FLAG_? bits that the front end may have set. */
6612 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6613 TREE_TYPE (main_type) = unqual_elt;
6614 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6615 layout_type (main_type);
6617 /* Make sure we have the canonical MAIN_TYPE. */
6618 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
6619 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
6621 main_type = type_hash_canon (hashcode, main_type);
6626 type = c_build_qualified_type (main_type, quals);
6633 /* Used to help initialize the builtin-types.def table. When a type of
6634 the correct size doesn't exist, use error_mark_node instead of NULL.
6635 The later results in segfaults even when a decl using the type doesn't
6639 builtin_type_for_size (int size, bool unsignedp)
6641 tree type = lang_hooks.types.type_for_size (size, unsignedp);
6642 return type ? type : error_mark_node;
6645 /* A helper function for resolve_overloaded_builtin in resolving the
6646 overloaded __sync_ builtins. Returns a positive power of 2 if the
6647 first operand of PARAMS is a pointer to a supported data type.
6648 Returns 0 if an error is encountered. */
6651 sync_resolve_size (tree function, tree params)
6658 error ("too few arguments to function %qE", function);
6662 type = TREE_TYPE (TREE_VALUE (params));
6663 if (TREE_CODE (type) != POINTER_TYPE)
6666 type = TREE_TYPE (type);
6667 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6670 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6671 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
6675 error ("incompatible type for argument %d of %qE", 1, function);
6679 /* A helper function for resolve_overloaded_builtin. Adds casts to
6680 PARAMS to make arguments match up with those of FUNCTION. Drops
6681 the variadic arguments at the end. Returns false if some error
6682 was encountered; true on success. */
6685 sync_resolve_params (tree orig_function, tree function, tree params)
6687 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6691 /* We've declared the implementation functions to use "volatile void *"
6692 as the pointer parameter, so we shouldn't get any complaints from the
6693 call to check_function_arguments what ever type the user used. */
6694 arg_types = TREE_CHAIN (arg_types);
6695 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6698 /* For the rest of the values, we need to cast these to FTYPE, so that we
6699 don't get warnings for passing pointer types, etc. */
6700 while (arg_types != void_list_node)
6704 params = TREE_CHAIN (params);
6707 error ("too few arguments to function %qE", orig_function);
6711 /* ??? Ideally for the first conversion we'd use convert_for_assignment
6712 so that we get warnings for anything that doesn't match the pointer
6713 type. This isn't portable across the C and C++ front ends atm. */
6714 val = TREE_VALUE (params);
6715 val = convert (ptype, val);
6716 val = convert (TREE_VALUE (arg_types), val);
6717 TREE_VALUE (params) = val;
6719 arg_types = TREE_CHAIN (arg_types);
6723 /* The definition of these primitives is variadic, with the remaining
6724 being "an optional list of variables protected by the memory barrier".
6725 No clue what that's supposed to mean, precisely, but we consider all
6726 call-clobbered variables to be protected so we're safe. */
6727 TREE_CHAIN (params) = NULL;
6732 /* A helper function for resolve_overloaded_builtin. Adds a cast to
6733 RESULT to make it match the type of the first pointer argument in
6737 sync_resolve_return (tree params, tree result)
6739 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6740 ptype = TYPE_MAIN_VARIANT (ptype);
6741 return convert (ptype, result);
6744 /* Some builtin functions are placeholders for other expressions. This
6745 function should be called immediately after parsing the call expression
6746 before surrounding code has committed to the type of the expression.
6748 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6749 PARAMS is the argument list for the call. The return value is non-null
6750 when expansion is complete, and null if normal processing should
6754 resolve_overloaded_builtin (tree function, tree params)
6756 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
6757 switch (DECL_BUILT_IN_CLASS (function))
6759 case BUILT_IN_NORMAL:
6762 if (targetm.resolve_overloaded_builtin)
6763 return targetm.resolve_overloaded_builtin (function, params);
6770 /* Handle BUILT_IN_NORMAL here. */
6773 case BUILT_IN_FETCH_AND_ADD_N:
6774 case BUILT_IN_FETCH_AND_SUB_N:
6775 case BUILT_IN_FETCH_AND_OR_N:
6776 case BUILT_IN_FETCH_AND_AND_N:
6777 case BUILT_IN_FETCH_AND_XOR_N:
6778 case BUILT_IN_FETCH_AND_NAND_N:
6779 case BUILT_IN_ADD_AND_FETCH_N:
6780 case BUILT_IN_SUB_AND_FETCH_N:
6781 case BUILT_IN_OR_AND_FETCH_N:
6782 case BUILT_IN_AND_AND_FETCH_N:
6783 case BUILT_IN_XOR_AND_FETCH_N:
6784 case BUILT_IN_NAND_AND_FETCH_N:
6785 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6786 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6787 case BUILT_IN_LOCK_TEST_AND_SET_N:
6788 case BUILT_IN_LOCK_RELEASE_N:
6790 int n = sync_resolve_size (function, params);
6791 tree new_function, result;
6794 return error_mark_node;
6796 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6797 if (!sync_resolve_params (function, new_function, params))
6798 return error_mark_node;
6800 result = build_function_call (new_function, params);
6801 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6802 && orig_code != BUILT_IN_LOCK_RELEASE_N)
6803 result = sync_resolve_return (params, result);
6813 /* Ignoring their sign, return true if two scalar types are the same. */
6815 same_scalar_type_ignoring_signedness (tree t1, tree t2)
6817 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6819 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6820 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6822 /* Equality works here because c_common_signed_type uses
6823 TYPE_MAIN_VARIANT. */
6824 return lang_hooks.types.signed_type (t1)
6825 == lang_hooks.types.signed_type (t2);
6828 /* Check for missing format attributes on function pointers. LTYPE is
6829 the new type or left-hand side type. RTYPE is the old type or
6830 right-hand side type. Returns TRUE if LTYPE is missing the desired
6834 check_missing_format_attribute (tree ltype, tree rtype)
6836 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6839 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6840 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6845 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6846 if (is_attribute_p ("format", TREE_PURPOSE (la)))
6854 /* Subscripting with type char is likely to lose on a machine where
6855 chars are signed. So warn on any machine, but optionally. Don't
6856 warn for unsigned char since that type is safe. Don't warn for
6857 signed char because anyone who uses that must have done so
6858 deliberately. Furthermore, we reduce the false positive load by
6859 warning only for non-constant value of type char. */
6862 warn_array_subscript_with_type_char (tree index)
6864 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
6865 && TREE_CODE (index) != INTEGER_CST)
6866 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
6869 /* Implement -Wparentheses for the unexpected C precedence rules, to
6870 cover cases like x + y << z which readers are likely to
6871 misinterpret. We have seen an expression in which CODE is a binary
6872 operator used to combine expressions headed by CODE_LEFT and
6873 CODE_RIGHT. CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
6874 means that that side of the expression was not formed using a
6875 binary operator, or it was enclosed in parentheses. */
6878 warn_about_parentheses (enum tree_code code, enum tree_code code_left,
6879 enum tree_code code_right)
6881 if (!warn_parentheses)
6884 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
6886 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6887 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6888 warning (OPT_Wparentheses,
6889 "suggest parentheses around + or - inside shift");
6892 if (code == TRUTH_ORIF_EXPR)
6894 if (code_left == TRUTH_ANDIF_EXPR
6895 || code_right == TRUTH_ANDIF_EXPR)
6896 warning (OPT_Wparentheses,
6897 "suggest parentheses around && within ||");
6900 if (code == BIT_IOR_EXPR)
6902 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
6903 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6904 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
6905 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6906 warning (OPT_Wparentheses,
6907 "suggest parentheses around arithmetic in operand of |");
6908 /* Check cases like x|y==z */
6909 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6910 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6911 warning (OPT_Wparentheses,
6912 "suggest parentheses around comparison in operand of |");
6915 if (code == BIT_XOR_EXPR)
6917 if (code_left == BIT_AND_EXPR
6918 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6919 || code_right == BIT_AND_EXPR
6920 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6921 warning (OPT_Wparentheses,
6922 "suggest parentheses around arithmetic in operand of ^");
6923 /* Check cases like x^y==z */
6924 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6925 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6926 warning (OPT_Wparentheses,
6927 "suggest parentheses around comparison in operand of ^");
6930 if (code == BIT_AND_EXPR)
6932 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6933 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6934 warning (OPT_Wparentheses,
6935 "suggest parentheses around + or - in operand of &");
6936 /* Check cases like x&y==z */
6937 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6938 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6939 warning (OPT_Wparentheses,
6940 "suggest parentheses around comparison in operand of &");
6943 if (code == EQ_EXPR || code == NE_EXPR)
6945 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6946 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6947 warning (OPT_Wparentheses,
6948 "suggest parentheses around comparison in operand of %s",
6949 code == EQ_EXPR ? "==" : "!=");
6951 else if (TREE_CODE_CLASS (code) == tcc_comparison)
6953 if ((TREE_CODE_CLASS (code_left) == tcc_comparison
6954 && code_left != NE_EXPR && code_left != EQ_EXPR)
6955 || (TREE_CODE_CLASS (code_right) == tcc_comparison
6956 && code_right != NE_EXPR && code_right != EQ_EXPR))
6957 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
6958 "have their mathematical meaning");
6962 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
6965 warn_for_unused_label (tree label)
6967 if (!TREE_USED (label))
6969 if (DECL_INITIAL (label))
6970 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
6972 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
6976 /* If FNDECL is a static constructor or destructor, add it to the list
6977 of functions to be called by the file scope initialization
6981 c_record_cdtor_fn (tree fndecl)
6983 if (targetm.have_ctors_dtors)
6986 if (DECL_STATIC_CONSTRUCTOR (fndecl))
6987 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6988 if (DECL_STATIC_DESTRUCTOR (fndecl))
6989 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6992 /* Synthesize a function which calls all the global ctors or global
6993 dtors in this file. This is only used for targets which do not
6994 support .ctors/.dtors sections. FIXME: Migrate into cgraph. */
6996 build_cdtor (int method_type, tree cdtors)
7003 for (; cdtors; cdtors = TREE_CHAIN (cdtors))
7004 append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
7007 cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
7010 /* Generate functions to call static constructors and destructors
7011 for targets that do not support .ctors/.dtors sections. These
7012 functions have magic names which are detected by collect2. */
7015 c_build_cdtor_fns (void)
7017 if (!targetm.have_ctors_dtors)
7019 build_cdtor ('I', static_ctors);
7020 static_ctors = NULL_TREE;
7021 build_cdtor ('D', static_dtors);
7022 static_dtors = NULL_TREE;
7026 gcc_assert (!static_ctors);
7027 gcc_assert (!static_dtors);
7031 #ifndef TARGET_HAS_TARGETCM
7032 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
7035 /* Warn for division by zero according to the value of DIVISOR. */
7038 warn_for_div_by_zero (tree divisor)
7040 /* If DIVISOR is zero, and has integral type, issue a warning about
7041 division by zero. Do not issue a warning if DIVISOR has a
7042 floating-point type, since we consider 0.0/0.0 a valid way of
7043 generating a NaN. */
7044 if (skip_evaluation == 0 && integer_zerop (divisor))
7045 warning (OPT_Wdiv_by_zero, "division by zero");
7048 #include "gt-c-common.h"