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 /* Push current bindings for the function name VAR_DECLS. */
676 start_fname_decls (void)
679 tree saved = NULL_TREE;
681 for (ix = 0; fname_vars[ix].decl; ix++)
683 tree decl = *fname_vars[ix].decl;
687 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
688 *fname_vars[ix].decl = NULL_TREE;
691 if (saved || saved_function_name_decls)
692 /* Normally they'll have been NULL, so only push if we've got a
693 stack, or they are non-NULL. */
694 saved_function_name_decls = tree_cons (saved, NULL_TREE,
695 saved_function_name_decls);
698 /* Finish up the current bindings, adding them into the current function's
699 statement tree. This must be done _before_ finish_stmt_tree is called.
700 If there is no current function, we must be at file scope and no statements
701 are involved. Pop the previous bindings. */
704 finish_fname_decls (void)
707 tree stmts = NULL_TREE;
708 tree stack = saved_function_name_decls;
710 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
711 append_to_statement_list (TREE_VALUE (stack), &stmts);
715 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
717 if (TREE_CODE (*bodyp) == BIND_EXPR)
718 bodyp = &BIND_EXPR_BODY (*bodyp);
720 append_to_statement_list_force (*bodyp, &stmts);
724 for (ix = 0; fname_vars[ix].decl; ix++)
725 *fname_vars[ix].decl = NULL_TREE;
729 /* We had saved values, restore them. */
732 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
734 tree decl = TREE_PURPOSE (saved);
735 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
737 *fname_vars[ix].decl = decl;
739 stack = TREE_CHAIN (stack);
741 saved_function_name_decls = stack;
744 /* Return the text name of the current function, suitably prettified
745 by PRETTY_P. Return string must be freed by caller. */
748 fname_as_string (int pretty_p)
750 const char *name = "top level";
760 if (current_function_decl)
761 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
763 if (c_lex_string_translate)
765 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
766 cpp_string cstr = { 0, 0 }, strname;
768 namep = XNEWVEC (char, len);
769 snprintf (namep, len, "\"%s\"", name);
770 strname.text = (unsigned char *) namep;
771 strname.len = len - 1;
773 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
776 return (char *) cstr.text;
780 namep = xstrdup (name);
785 /* Expand DECL if it declares an entity not handled by the
789 c_expand_decl (tree decl)
791 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
793 /* Let the back-end know about this variable. */
794 if (!anon_aggr_type_p (TREE_TYPE (decl)))
795 emit_local_var (decl);
797 expand_anon_union_decl (decl, NULL_TREE,
798 DECL_ANON_UNION_ELEMS (decl));
807 /* Return the VAR_DECL for a const char array naming the current
808 function. If the VAR_DECL has not yet been created, create it
809 now. RID indicates how it should be formatted and IDENTIFIER_NODE
810 ID is its name (unfortunately C and C++ hold the RID values of
811 keywords in different places, so we can't derive RID from ID in
812 this language independent code. */
815 fname_decl (unsigned int rid, tree id)
818 tree decl = NULL_TREE;
820 for (ix = 0; fname_vars[ix].decl; ix++)
821 if (fname_vars[ix].rid == rid)
824 decl = *fname_vars[ix].decl;
827 /* If a tree is built here, it would normally have the lineno of
828 the current statement. Later this tree will be moved to the
829 beginning of the function and this line number will be wrong.
830 To avoid this problem set the lineno to 0 here; that prevents
831 it from appearing in the RTL. */
833 location_t saved_location = input_location;
834 #ifdef USE_MAPPED_LOCATION
835 input_location = UNKNOWN_LOCATION;
840 stmts = push_stmt_list ();
841 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
842 stmts = pop_stmt_list (stmts);
843 if (!IS_EMPTY_STMT (stmts))
844 saved_function_name_decls
845 = tree_cons (decl, stmts, saved_function_name_decls);
846 *fname_vars[ix].decl = decl;
847 input_location = saved_location;
849 if (!ix && !current_function_decl)
850 pedwarn ("%qD is not defined outside of function scope", decl);
855 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
858 fix_string_type (tree value)
860 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
861 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
862 int length = TREE_STRING_LENGTH (value);
864 tree e_type, i_type, a_type;
866 /* Compute the number of elements, for the array type. */
867 nchars = wide_flag ? length / wchar_bytes : length;
869 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
870 limit in C++98 Annex B is very large (65536) and is not normative,
871 so we do not diagnose it (warn_overlength_strings is forced off
872 in c_common_post_options). */
873 if (warn_overlength_strings)
875 const int nchars_max = flag_isoc99 ? 4095 : 509;
876 const int relevant_std = flag_isoc99 ? 99 : 90;
877 if (nchars - 1 > nchars_max)
878 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
879 separate the %d from the 'C'. 'ISO' should not be
880 translated, but it may be moved after 'C%d' in languages
881 where modifiers follow nouns. */
882 pedwarn ("string length %qd is greater than the length %qd "
883 "ISO C%d compilers are required to support",
884 nchars - 1, nchars_max, relevant_std);
887 /* Create the array type for the string constant. The ISO C++
888 standard says that a string literal has type `const char[N]' or
889 `const wchar_t[N]'. We use the same logic when invoked as a C
890 front-end with -Wwrite-strings.
891 ??? We should change the type of an expression depending on the
892 state of a warning flag. We should just be warning -- see how
893 this is handled in the C++ front-end for the deprecated implicit
894 conversion from string literals to `char*' or `wchar_t*'.
896 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
897 array type being the unqualified version of that type.
898 Therefore, if we are constructing an array of const char, we must
899 construct the matching unqualified array type first. The C front
900 end does not require this, but it does no harm, so we do it
902 e_type = wide_flag ? wchar_type_node : char_type_node;
903 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
904 a_type = build_array_type (e_type, i_type);
905 if (c_dialect_cxx() || warn_write_strings)
906 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
908 TREE_TYPE (value) = a_type;
909 TREE_CONSTANT (value) = 1;
910 TREE_INVARIANT (value) = 1;
911 TREE_READONLY (value) = 1;
912 TREE_STATIC (value) = 1;
916 /* Print a warning if a constant expression had overflow in folding.
917 Invoke this function on every expression that the language
918 requires to be a constant expression.
919 Note the ANSI C standard says it is erroneous for a
920 constant expression to overflow. */
923 constant_expression_warning (tree value)
925 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
926 || TREE_CODE (value) == VECTOR_CST
927 || TREE_CODE (value) == COMPLEX_CST)
928 && TREE_OVERFLOW (value)
931 pedwarn ("overflow in constant expression");
934 /* Print a warning if an expression had overflow in folding and its
937 Invoke this function on every expression that
938 (1) appears in the source code, and
939 (2) is a constant expression that overflowed, and
940 (3) is not already checked by convert_and_check;
941 however, do not invoke this function on operands of explicit casts
942 or when the expression is the result of an operator and any operand
943 already overflowed. */
946 overflow_warning (tree value)
948 if (skip_evaluation) return;
950 switch (TREE_CODE (value))
953 warning (OPT_Woverflow, "integer overflow in expression");
957 warning (OPT_Woverflow, "floating point overflow in expression");
961 warning (OPT_Woverflow, "vector overflow in expression");
965 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
966 warning (OPT_Woverflow, "complex integer overflow in expression");
967 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
968 warning (OPT_Woverflow, "complex floating point overflow in expression");
977 /* Warn about use of a logical || / && operator being used in a
978 context where it is likely that the bitwise equivalent was intended
979 by the programmer. CODE is the TREE_CODE of the operator, ARG1
980 and ARG2 the arguments. */
983 warn_logical_operator (enum tree_code code, tree arg1, tree
988 case TRUTH_ANDIF_EXPR:
989 case TRUTH_ORIF_EXPR:
992 if (!TREE_NO_WARNING (arg1)
993 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
994 && !CONSTANT_CLASS_P (arg1)
995 && TREE_CODE (arg2) == INTEGER_CST
996 && !integer_zerop (arg2))
998 warning (OPT_Wlogical_op,
999 "logical %<%s%> with non-zero constant "
1000 "will always evaluate as true",
1001 ((code == TRUTH_ANDIF_EXPR)
1002 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1003 TREE_NO_WARNING (arg1) = true;
1012 /* Print a warning about casts that might indicate violation
1013 of strict aliasing rules if -Wstrict-aliasing is used and
1014 strict aliasing mode is in effect. OTYPE is the original
1015 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1018 strict_aliasing_warning (tree otype, tree type, tree expr)
1020 if (!(flag_strict_aliasing && POINTER_TYPE_P (type)
1021 && POINTER_TYPE_P (otype) && !VOID_TYPE_P (TREE_TYPE (type))))
1024 if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1025 && (DECL_P (TREE_OPERAND (expr, 0))
1026 || handled_component_p (TREE_OPERAND (expr, 0))))
1028 /* Casting the address of an object to non void pointer. Warn
1029 if the cast breaks type based aliasing. */
1030 if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1032 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1033 "might break strict-aliasing rules");
1038 /* warn_strict_aliasing >= 3. This includes the default (3).
1039 Only warn if the cast is dereferenced immediately. */
1040 HOST_WIDE_INT set1 =
1041 get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1042 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1044 if (!alias_sets_conflict_p (set1, set2))
1046 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1047 "pointer will break strict-aliasing rules");
1050 else if (warn_strict_aliasing == 2
1051 && !alias_sets_might_conflict_p (set1, set2))
1053 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1054 "pointer might break strict-aliasing rules");
1060 if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1062 /* At this level, warn for any conversions, even if an address is
1063 not taken in the same statement. This will likely produce many
1064 false positives, but could be useful to pinpoint problems that
1065 are not revealed at higher levels. */
1066 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (otype));
1067 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1068 if (!COMPLETE_TYPE_P(type)
1069 || !alias_sets_might_conflict_p (set1, set2))
1071 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1072 "pointer might break strict-aliasing rules");
1080 /* Print a warning about if (); or if () .. else; constructs
1081 via the special empty statement node that we create. INNER_THEN
1082 and INNER_ELSE are the statement lists of the if and the else
1086 empty_if_body_warning (tree inner_then, tree inner_else)
1088 if (TREE_CODE (inner_then) == STATEMENT_LIST
1089 && STATEMENT_LIST_TAIL (inner_then))
1090 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1092 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1093 && STATEMENT_LIST_TAIL (inner_else))
1094 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1096 if (IS_EMPTY_STMT (inner_then) && !inner_else)
1097 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1098 "in an %<if%> statement", EXPR_LOCUS (inner_then));
1100 else if (inner_else && IS_EMPTY_STMT (inner_else))
1101 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1102 "in an %<else%> statement", EXPR_LOCUS (inner_else));
1105 /* Warn for unlikely, improbable, or stupid DECL declarations
1109 check_main_parameter_types (tree decl)
1114 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1115 args = TREE_CHAIN (args))
1117 tree type = args ? TREE_VALUE (args) : 0;
1119 if (type == void_type_node || type == error_mark_node )
1126 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1127 pedwarn ("first argument of %q+D should be %<int%>", decl);
1131 if (TREE_CODE (type) != POINTER_TYPE
1132 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1133 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1135 pedwarn ("second argument of %q+D should be %<char **%>",
1140 if (TREE_CODE (type) != POINTER_TYPE
1141 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1142 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1144 pedwarn ("third argument of %q+D should probably be "
1145 "%<char **%>", decl);
1150 /* It is intentional that this message does not mention the third
1151 argument because it's only mentioned in an appendix of the
1153 if (argct > 0 && (argct < 2 || argct > 3))
1154 pedwarn ("%q+D takes only zero or two arguments", decl);
1157 /* True if vector types T1 and T2 can be converted to each other
1158 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1159 can only be converted with -flax-vector-conversions yet that is not
1160 in effect, emit a note telling the user about that option if such
1161 a note has not previously been emitted. */
1163 vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note)
1165 static bool emitted_lax_note = false;
1166 bool convertible_lax;
1168 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1169 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1173 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1174 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1175 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1176 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1177 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1179 if (!convertible_lax || flag_lax_vector_conversions)
1180 return convertible_lax;
1182 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1183 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2)))
1186 if (emit_lax_note && !emitted_lax_note)
1188 emitted_lax_note = true;
1189 inform ("use -flax-vector-conversions to permit "
1190 "conversions between vectors with differing "
1191 "element types or numbers of subparts");
1197 /* Warns if the conversion of EXPR to TYPE may alter a value.
1198 This is a helper function for warnings_for_convert_and_check. */
1201 conversion_warning (tree type, tree expr)
1203 bool give_warning = false;
1205 unsigned int formal_prec = TYPE_PRECISION (type);
1207 if (!warn_conversion && !warn_sign_conversion)
1210 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1212 /* Warn for real constant that is not an exact integer converted
1214 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1215 && TREE_CODE (type) == INTEGER_TYPE)
1217 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1218 give_warning = true;
1220 /* Warn for an integer constant that does not fit into integer type. */
1221 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1222 && TREE_CODE (type) == INTEGER_TYPE
1223 && !int_fits_type_p (expr, type))
1225 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1226 warning (OPT_Wsign_conversion,
1227 "negative integer implicitly converted to unsigned type");
1228 else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (TREE_TYPE (expr)))
1229 warning (OPT_Wsign_conversion,
1230 "conversion of unsigned constant value to negative integer");
1232 give_warning = true;
1234 else if (TREE_CODE (type) == REAL_TYPE)
1236 /* Warn for an integer constant that does not fit into real type. */
1237 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1239 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1240 if (!exact_real_truncate (TYPE_MODE (type), &a))
1241 give_warning = true;
1243 /* Warn for a real constant that does not fit into a smaller
1245 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1246 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1248 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1249 if (!exact_real_truncate (TYPE_MODE (type), &a))
1250 give_warning = true;
1255 warning (OPT_Wconversion,
1256 "conversion to %qT alters %qT constant value",
1257 type, TREE_TYPE (expr));
1259 else /* 'expr' is not a constant. */
1261 /* Warn for real types converted to integer types. */
1262 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1263 && TREE_CODE (type) == INTEGER_TYPE)
1264 give_warning = true;
1266 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1267 && TREE_CODE (type) == INTEGER_TYPE)
1269 /* Warn for integer types converted to smaller integer types. */
1270 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1271 give_warning = true;
1273 /* When they are the same width but different signedness,
1274 then the value may change. */
1275 else if ((formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1276 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1277 /* Even when converted to a bigger type, if the type is
1278 unsigned but expr is signed, then negative values
1280 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1281 warning (OPT_Wsign_conversion,
1282 "conversion to %qT from %qT may change the sign of the result",
1283 type, TREE_TYPE (expr));
1286 /* Warn for integer types converted to real types if and only if
1287 all the range of values of the integer type cannot be
1288 represented by the real type. */
1289 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1290 && TREE_CODE (type) == REAL_TYPE)
1292 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1293 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1294 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1295 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1297 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1298 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1299 give_warning = true;
1302 /* Warn for real types converted to smaller real types. */
1303 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1304 && TREE_CODE (type) == REAL_TYPE
1305 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1306 give_warning = true;
1310 warning (OPT_Wconversion,
1311 "conversion to %qT from %qT may alter its value",
1312 type, TREE_TYPE (expr));
1316 /* Produce warnings after a conversion. RESULT is the result of
1317 converting EXPR to TYPE. This is a helper function for
1318 convert_and_check and cp_convert_and_check. */
1321 warnings_for_convert_and_check (tree type, tree expr, tree result)
1323 if (TREE_CODE (expr) == INTEGER_CST
1324 && (TREE_CODE (type) == INTEGER_TYPE
1325 || TREE_CODE (type) == ENUMERAL_TYPE)
1326 && !int_fits_type_p (expr, type))
1328 /* Do not diagnose overflow in a constant expression merely
1329 because a conversion overflowed. */
1330 if (TREE_OVERFLOW (result))
1331 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1333 if (TYPE_UNSIGNED (type))
1335 /* This detects cases like converting -129 or 256 to
1337 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1338 warning (OPT_Woverflow,
1339 "large integer implicitly truncated to unsigned type");
1341 conversion_warning (type, expr);
1343 else if (!int_fits_type_p (expr, unsigned_type_for (type)))
1344 warning (OPT_Woverflow,
1345 "overflow in implicit constant conversion");
1346 /* No warning for converting 0x80000000 to int. */
1348 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1349 || TYPE_PRECISION (TREE_TYPE (expr))
1350 != TYPE_PRECISION (type)))
1351 warning (OPT_Woverflow,
1352 "overflow in implicit constant conversion");
1355 conversion_warning (type, expr);
1357 else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
1358 warning (OPT_Woverflow,
1359 "overflow in implicit constant conversion");
1361 conversion_warning (type, expr);
1365 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1366 Invoke this function on every expression that is converted implicitly,
1367 i.e. because of language rules and not because of an explicit cast. */
1370 convert_and_check (tree type, tree expr)
1374 if (TREE_TYPE (expr) == type)
1377 result = convert (type, expr);
1379 if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
1380 warnings_for_convert_and_check (type, expr, result);
1385 /* A node in a list that describes references to variables (EXPR), which are
1386 either read accesses if WRITER is zero, or write accesses, in which case
1387 WRITER is the parent of EXPR. */
1394 /* Used to implement a cache the results of a call to verify_tree. We only
1395 use this for SAVE_EXPRs. */
1398 struct tlist_cache *next;
1399 struct tlist *cache_before_sp;
1400 struct tlist *cache_after_sp;
1404 /* Obstack to use when allocating tlist structures, and corresponding
1406 static struct obstack tlist_obstack;
1407 static char *tlist_firstobj = 0;
1409 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1411 static struct tlist *warned_ids;
1412 /* SAVE_EXPRs need special treatment. We process them only once and then
1413 cache the results. */
1414 static struct tlist_cache *save_expr_cache;
1416 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1417 static void merge_tlist (struct tlist **, struct tlist *, int);
1418 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1419 static int warning_candidate_p (tree);
1420 static void warn_for_collisions (struct tlist *);
1421 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1422 static struct tlist *new_tlist (struct tlist *, tree, tree);
1424 /* Create a new struct tlist and fill in its fields. */
1425 static struct tlist *
1426 new_tlist (struct tlist *next, tree t, tree writer)
1429 l = XOBNEW (&tlist_obstack, struct tlist);
1436 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1437 is nonnull, we ignore any node we find which has a writer equal to it. */
1440 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1444 struct tlist *next = add->next;
1447 if (!exclude_writer || add->writer != exclude_writer)
1448 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1453 /* Merge the nodes of ADD into TO. This merging process is done so that for
1454 each variable that already exists in TO, no new node is added; however if
1455 there is a write access recorded in ADD, and an occurrence on TO is only
1456 a read access, then the occurrence in TO will be modified to record the
1460 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1462 struct tlist **end = to;
1465 end = &(*end)->next;
1471 struct tlist *next = add->next;
1473 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1474 if (tmp2->expr == add->expr)
1478 tmp2->writer = add->writer;
1482 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1483 end = &(*end)->next;
1490 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1491 references in list LIST conflict with it, excluding reads if ONLY writers
1495 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1500 /* Avoid duplicate warnings. */
1501 for (tmp = warned_ids; tmp; tmp = tmp->next)
1502 if (tmp->expr == written)
1507 if (list->expr == written
1508 && list->writer != writer
1509 && (!only_writes || list->writer)
1510 && DECL_NAME (list->expr))
1512 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1513 warning (0, "operation on %qE may be undefined", list->expr);
1519 /* Given a list LIST of references to variables, find whether any of these
1520 can cause conflicts due to missing sequence points. */
1523 warn_for_collisions (struct tlist *list)
1527 for (tmp = list; tmp; tmp = tmp->next)
1530 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1534 /* Return nonzero if X is a tree that can be verified by the sequence point
1537 warning_candidate_p (tree x)
1539 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1542 /* Walk the tree X, and record accesses to variables. If X is written by the
1543 parent tree, WRITER is the parent.
1544 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1545 expression or its only operand forces a sequence point, then everything up
1546 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1548 Once we return, we will have emitted warnings if any subexpression before
1549 such a sequence point could be undefined. On a higher level, however, the
1550 sequence point may not be relevant, and we'll merge the two lists.
1552 Example: (b++, a) + b;
1553 The call that processes the COMPOUND_EXPR will store the increment of B
1554 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1555 processes the PLUS_EXPR will need to merge the two lists so that
1556 eventually, all accesses end up on the same list (and we'll warn about the
1557 unordered subexpressions b++ and b.
1559 A note on merging. If we modify the former example so that our expression
1562 care must be taken not simply to add all three expressions into the final
1563 PNO_SP list. The function merge_tlist takes care of that by merging the
1564 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1565 way, so that no more than one access to B is recorded. */
1568 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1571 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1572 enum tree_code code;
1573 enum tree_code_class cl;
1575 /* X may be NULL if it is the operand of an empty statement expression
1581 code = TREE_CODE (x);
1582 cl = TREE_CODE_CLASS (code);
1584 if (warning_candidate_p (x))
1586 *pno_sp = new_tlist (*pno_sp, x, writer);
1596 case TRUTH_ANDIF_EXPR:
1597 case TRUTH_ORIF_EXPR:
1598 tmp_before = tmp_nosp = tmp_list3 = 0;
1599 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1600 warn_for_collisions (tmp_nosp);
1601 merge_tlist (pbefore_sp, tmp_before, 0);
1602 merge_tlist (pbefore_sp, tmp_nosp, 0);
1603 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1604 merge_tlist (pbefore_sp, tmp_list3, 0);
1608 tmp_before = tmp_list2 = 0;
1609 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1610 warn_for_collisions (tmp_list2);
1611 merge_tlist (pbefore_sp, tmp_before, 0);
1612 merge_tlist (pbefore_sp, tmp_list2, 1);
1614 tmp_list3 = tmp_nosp = 0;
1615 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1616 warn_for_collisions (tmp_nosp);
1617 merge_tlist (pbefore_sp, tmp_list3, 0);
1619 tmp_list3 = tmp_list2 = 0;
1620 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1621 warn_for_collisions (tmp_list2);
1622 merge_tlist (pbefore_sp, tmp_list3, 0);
1623 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1624 two first, to avoid warning for (a ? b++ : b++). */
1625 merge_tlist (&tmp_nosp, tmp_list2, 0);
1626 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1629 case PREDECREMENT_EXPR:
1630 case PREINCREMENT_EXPR:
1631 case POSTDECREMENT_EXPR:
1632 case POSTINCREMENT_EXPR:
1633 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1637 tmp_before = tmp_nosp = tmp_list3 = 0;
1638 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1639 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1640 /* Expressions inside the LHS are not ordered wrt. the sequence points
1641 in the RHS. Example:
1643 Despite the fact that the modification of "a" is in the before_sp
1644 list (tmp_before), it conflicts with the use of "a" in the LHS.
1645 We can handle this by adding the contents of tmp_list3
1646 to those of tmp_before, and redoing the collision warnings for that
1648 add_tlist (&tmp_before, tmp_list3, x, 1);
1649 warn_for_collisions (tmp_before);
1650 /* Exclude the LHS itself here; we first have to merge it into the
1651 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1652 didn't exclude the LHS, we'd get it twice, once as a read and once
1654 add_tlist (pno_sp, tmp_list3, x, 0);
1655 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1657 merge_tlist (pbefore_sp, tmp_before, 0);
1658 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1659 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1660 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1664 /* We need to warn about conflicts among arguments and conflicts between
1665 args and the function address. Side effects of the function address,
1666 however, are not ordered by the sequence point of the call. */
1668 call_expr_arg_iterator iter;
1670 tmp_before = tmp_nosp = 0;
1671 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1672 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1674 tmp_list2 = tmp_list3 = 0;
1675 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1676 merge_tlist (&tmp_list3, tmp_list2, 0);
1677 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1679 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1680 warn_for_collisions (tmp_before);
1681 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1686 /* Scan all the list, e.g. indices of multi dimensional array. */
1689 tmp_before = tmp_nosp = 0;
1690 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1691 merge_tlist (&tmp_nosp, tmp_before, 0);
1692 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1699 struct tlist_cache *t;
1700 for (t = save_expr_cache; t; t = t->next)
1706 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1707 t->next = save_expr_cache;
1709 save_expr_cache = t;
1711 tmp_before = tmp_nosp = 0;
1712 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1713 warn_for_collisions (tmp_nosp);
1718 struct tlist *t = tmp_nosp;
1720 merge_tlist (&tmp_list3, t, 0);
1722 t->cache_before_sp = tmp_before;
1723 t->cache_after_sp = tmp_list3;
1725 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1726 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1731 /* For other expressions, simply recurse on their operands.
1732 Manual tail recursion for unary expressions.
1733 Other non-expressions need not be processed. */
1734 if (cl == tcc_unary)
1736 x = TREE_OPERAND (x, 0);
1740 else if (IS_EXPR_CODE_CLASS (cl))
1743 int max = TREE_OPERAND_LENGTH (x);
1744 for (lp = 0; lp < max; lp++)
1746 tmp_before = tmp_nosp = 0;
1747 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1748 merge_tlist (&tmp_nosp, tmp_before, 0);
1749 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1756 /* Try to warn for undefined behavior in EXPR due to missing sequence
1760 verify_sequence_points (tree expr)
1762 struct tlist *before_sp = 0, *after_sp = 0;
1765 save_expr_cache = 0;
1766 if (tlist_firstobj == 0)
1768 gcc_obstack_init (&tlist_obstack);
1769 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1772 verify_tree (expr, &before_sp, &after_sp, 0);
1773 warn_for_collisions (after_sp);
1774 obstack_free (&tlist_obstack, tlist_firstobj);
1777 /* Validate the expression after `case' and apply default promotions. */
1780 check_case_value (tree value)
1782 if (value == NULL_TREE)
1785 /* ??? Can we ever get nops here for a valid case value? We
1787 STRIP_TYPE_NOPS (value);
1788 /* In C++, the following is allowed:
1791 switch (...) { case i: ... }
1793 So, we try to reduce the VALUE to a constant that way. */
1794 if (c_dialect_cxx ())
1796 value = decl_constant_value (value);
1797 STRIP_TYPE_NOPS (value);
1798 value = fold (value);
1801 if (TREE_CODE (value) == INTEGER_CST)
1802 /* Promote char or short to int. */
1803 value = perform_integral_promotions (value);
1804 else if (value != error_mark_node)
1806 error ("case label does not reduce to an integer constant");
1807 value = error_mark_node;
1810 constant_expression_warning (value);
1815 /* See if the case values LOW and HIGH are in the range of the original
1816 type (i.e. before the default conversion to int) of the switch testing
1818 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1819 the type before promoting it. CASE_LOW_P is a pointer to the lower
1820 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1821 if the case is not a case range.
1822 The caller has to make sure that we are not called with NULL for
1823 CASE_LOW_P (i.e. the default case).
1824 Returns true if the case label is in range of ORIG_TYPE (saturated or
1825 untouched) or false if the label is out of range. */
1828 check_case_bounds (tree type, tree orig_type,
1829 tree *case_low_p, tree *case_high_p)
1831 tree min_value, max_value;
1832 tree case_low = *case_low_p;
1833 tree case_high = case_high_p ? *case_high_p : case_low;
1835 /* If there was a problem with the original type, do nothing. */
1836 if (orig_type == error_mark_node)
1839 min_value = TYPE_MIN_VALUE (orig_type);
1840 max_value = TYPE_MAX_VALUE (orig_type);
1842 /* Case label is less than minimum for type. */
1843 if (tree_int_cst_compare (case_low, min_value) < 0
1844 && tree_int_cst_compare (case_high, min_value) < 0)
1846 warning (0, "case label value is less than minimum value for type");
1850 /* Case value is greater than maximum for type. */
1851 if (tree_int_cst_compare (case_low, max_value) > 0
1852 && tree_int_cst_compare (case_high, max_value) > 0)
1854 warning (0, "case label value exceeds maximum value for type");
1858 /* Saturate lower case label value to minimum. */
1859 if (tree_int_cst_compare (case_high, min_value) >= 0
1860 && tree_int_cst_compare (case_low, min_value) < 0)
1862 warning (0, "lower value in case label range"
1863 " less than minimum value for type");
1864 case_low = min_value;
1867 /* Saturate upper case label value to maximum. */
1868 if (tree_int_cst_compare (case_low, max_value) <= 0
1869 && tree_int_cst_compare (case_high, max_value) > 0)
1871 warning (0, "upper value in case label range"
1872 " exceeds maximum value for type");
1873 case_high = max_value;
1876 if (*case_low_p != case_low)
1877 *case_low_p = convert (type, case_low);
1878 if (case_high_p && *case_high_p != case_high)
1879 *case_high_p = convert (type, case_high);
1884 /* Return an integer type with BITS bits of precision,
1885 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1888 c_common_type_for_size (unsigned int bits, int unsignedp)
1890 if (bits == TYPE_PRECISION (integer_type_node))
1891 return unsignedp ? unsigned_type_node : integer_type_node;
1893 if (bits == TYPE_PRECISION (signed_char_type_node))
1894 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1896 if (bits == TYPE_PRECISION (short_integer_type_node))
1897 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1899 if (bits == TYPE_PRECISION (long_integer_type_node))
1900 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1902 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1903 return (unsignedp ? long_long_unsigned_type_node
1904 : long_long_integer_type_node);
1906 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1907 return (unsignedp ? widest_unsigned_literal_type_node
1908 : widest_integer_literal_type_node);
1910 if (bits <= TYPE_PRECISION (intQI_type_node))
1911 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1913 if (bits <= TYPE_PRECISION (intHI_type_node))
1914 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1916 if (bits <= TYPE_PRECISION (intSI_type_node))
1917 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1919 if (bits <= TYPE_PRECISION (intDI_type_node))
1920 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1925 /* Used for communication between c_common_type_for_mode and
1926 c_register_builtin_type. */
1927 static GTY(()) tree registered_builtin_types;
1929 /* Return a data type that has machine mode MODE.
1930 If the mode is an integer,
1931 then UNSIGNEDP selects between signed and unsigned types. */
1934 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1938 if (mode == TYPE_MODE (integer_type_node))
1939 return unsignedp ? unsigned_type_node : integer_type_node;
1941 if (mode == TYPE_MODE (signed_char_type_node))
1942 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1944 if (mode == TYPE_MODE (short_integer_type_node))
1945 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1947 if (mode == TYPE_MODE (long_integer_type_node))
1948 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1950 if (mode == TYPE_MODE (long_long_integer_type_node))
1951 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1953 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1954 return unsignedp ? widest_unsigned_literal_type_node
1955 : widest_integer_literal_type_node;
1958 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1961 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1964 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1967 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1969 #if HOST_BITS_PER_WIDE_INT >= 64
1970 if (mode == TYPE_MODE (intTI_type_node))
1971 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1974 if (mode == TYPE_MODE (float_type_node))
1975 return float_type_node;
1977 if (mode == TYPE_MODE (double_type_node))
1978 return double_type_node;
1980 if (mode == TYPE_MODE (long_double_type_node))
1981 return long_double_type_node;
1983 if (mode == TYPE_MODE (void_type_node))
1984 return void_type_node;
1986 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1988 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1989 : make_signed_type (GET_MODE_PRECISION (mode)));
1991 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1993 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1994 : make_signed_type (GET_MODE_PRECISION (mode)));
1996 if (COMPLEX_MODE_P (mode))
1998 enum machine_mode inner_mode;
2001 if (mode == TYPE_MODE (complex_float_type_node))
2002 return complex_float_type_node;
2003 if (mode == TYPE_MODE (complex_double_type_node))
2004 return complex_double_type_node;
2005 if (mode == TYPE_MODE (complex_long_double_type_node))
2006 return complex_long_double_type_node;
2008 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2009 return complex_integer_type_node;
2011 inner_mode = GET_MODE_INNER (mode);
2012 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2013 if (inner_type != NULL_TREE)
2014 return build_complex_type (inner_type);
2016 else if (VECTOR_MODE_P (mode))
2018 enum machine_mode inner_mode = GET_MODE_INNER (mode);
2019 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2020 if (inner_type != NULL_TREE)
2021 return build_vector_type_for_mode (inner_type, mode);
2024 if (mode == TYPE_MODE (dfloat32_type_node))
2025 return dfloat32_type_node;
2026 if (mode == TYPE_MODE (dfloat64_type_node))
2027 return dfloat64_type_node;
2028 if (mode == TYPE_MODE (dfloat128_type_node))
2029 return dfloat128_type_node;
2031 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
2032 if (TYPE_MODE (TREE_VALUE (t)) == mode)
2033 return TREE_VALUE (t);
2038 /* Return a signed type the same as TYPE in other respects. */
2041 c_common_signed_type (tree type)
2043 tree type1 = TYPE_MAIN_VARIANT (type);
2044 if (type1 == unsigned_char_type_node || type1 == char_type_node)
2045 return signed_char_type_node;
2046 if (type1 == unsigned_type_node)
2047 return integer_type_node;
2048 if (type1 == short_unsigned_type_node)
2049 return short_integer_type_node;
2050 if (type1 == long_unsigned_type_node)
2051 return long_integer_type_node;
2052 if (type1 == long_long_unsigned_type_node)
2053 return long_long_integer_type_node;
2054 if (type1 == widest_unsigned_literal_type_node)
2055 return widest_integer_literal_type_node;
2056 #if HOST_BITS_PER_WIDE_INT >= 64
2057 if (type1 == unsigned_intTI_type_node)
2058 return intTI_type_node;
2060 if (type1 == unsigned_intDI_type_node)
2061 return intDI_type_node;
2062 if (type1 == unsigned_intSI_type_node)
2063 return intSI_type_node;
2064 if (type1 == unsigned_intHI_type_node)
2065 return intHI_type_node;
2066 if (type1 == unsigned_intQI_type_node)
2067 return intQI_type_node;
2069 return c_common_signed_or_unsigned_type (0, type);
2072 /* Return a type the same as TYPE except unsigned or
2073 signed according to UNSIGNEDP. */
2076 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2079 if (!INTEGRAL_TYPE_P (type)
2080 || TYPE_UNSIGNED (type) == unsignedp)
2083 /* This block of code emulates the behavior of the old
2084 c_common_unsigned_type. In particular, it returns
2085 long_unsigned_type_node if passed a long, even when a int would
2086 have the same size. This is necessary for warnings to work
2087 correctly in archs where sizeof(int) == sizeof(long) */
2089 type1 = TYPE_MAIN_VARIANT (type);
2090 if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
2091 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2092 if (type1 == integer_type_node || type1 == unsigned_type_node)
2093 return unsignedp ? unsigned_type_node : integer_type_node;
2094 if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
2095 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2096 if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
2097 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2098 if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
2099 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2100 if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
2101 return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
2102 #if HOST_BITS_PER_WIDE_INT >= 64
2103 if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
2104 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2106 if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
2107 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2108 if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
2109 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2110 if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
2111 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2112 if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
2113 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2115 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2116 the precision; they have precision set to match their range, but
2117 may use a wider mode to match an ABI. If we change modes, we may
2118 wind up with bad conversions. For INTEGER_TYPEs in C, must check
2119 the precision as well, so as to yield correct results for
2120 bit-field types. C++ does not have these separate bit-field
2121 types, and producing a signed or unsigned variant of an
2122 ENUMERAL_TYPE may cause other problems as well. */
2124 #define TYPE_OK(node) \
2125 (TYPE_MODE (type) == TYPE_MODE (node) \
2126 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2127 if (TYPE_OK (signed_char_type_node))
2128 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2129 if (TYPE_OK (integer_type_node))
2130 return unsignedp ? unsigned_type_node : integer_type_node;
2131 if (TYPE_OK (short_integer_type_node))
2132 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2133 if (TYPE_OK (long_integer_type_node))
2134 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2135 if (TYPE_OK (long_long_integer_type_node))
2136 return (unsignedp ? long_long_unsigned_type_node
2137 : long_long_integer_type_node);
2138 if (TYPE_OK (widest_integer_literal_type_node))
2139 return (unsignedp ? widest_unsigned_literal_type_node
2140 : widest_integer_literal_type_node);
2142 #if HOST_BITS_PER_WIDE_INT >= 64
2143 if (TYPE_OK (intTI_type_node))
2144 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2146 if (TYPE_OK (intDI_type_node))
2147 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2148 if (TYPE_OK (intSI_type_node))
2149 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2150 if (TYPE_OK (intHI_type_node))
2151 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2152 if (TYPE_OK (intQI_type_node))
2153 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2156 if (c_dialect_cxx ())
2159 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2162 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2165 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2167 /* Extended integer types of the same width as a standard type have
2168 lesser rank, so those of the same width as int promote to int or
2169 unsigned int and are valid for printf formats expecting int or
2170 unsigned int. To avoid such special cases, avoid creating
2171 extended integer types for bit-fields if a standard integer type
2173 if (width == TYPE_PRECISION (integer_type_node))
2174 return unsignedp ? unsigned_type_node : integer_type_node;
2175 if (width == TYPE_PRECISION (signed_char_type_node))
2176 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2177 if (width == TYPE_PRECISION (short_integer_type_node))
2178 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2179 if (width == TYPE_PRECISION (long_integer_type_node))
2180 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2181 if (width == TYPE_PRECISION (long_long_integer_type_node))
2182 return (unsignedp ? long_long_unsigned_type_node
2183 : long_long_integer_type_node);
2184 return build_nonstandard_integer_type (width, unsignedp);
2187 /* The C version of the register_builtin_type langhook. */
2190 c_register_builtin_type (tree type, const char* name)
2194 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2195 DECL_ARTIFICIAL (decl) = 1;
2196 if (!TYPE_NAME (type))
2197 TYPE_NAME (type) = decl;
2200 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2204 /* Return the minimum number of bits needed to represent VALUE in a
2205 signed or unsigned type, UNSIGNEDP says which. */
2208 min_precision (tree value, int unsignedp)
2212 /* If the value is negative, compute its negative minus 1. The latter
2213 adjustment is because the absolute value of the largest negative value
2214 is one larger than the largest positive value. This is equivalent to
2215 a bit-wise negation, so use that operation instead. */
2217 if (tree_int_cst_sgn (value) < 0)
2218 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2220 /* Return the number of bits needed, taking into account the fact
2221 that we need one more bit for a signed than unsigned type. */
2223 if (integer_zerop (value))
2226 log = tree_floor_log2 (value);
2228 return log + 1 + !unsignedp;
2231 /* Print an error message for invalid operands to arith operation
2235 binary_op_error (enum tree_code code)
2242 opname = "+"; break;
2244 opname = "-"; break;
2246 opname = "*"; break;
2248 opname = "max"; break;
2250 opname = "min"; break;
2252 opname = "=="; break;
2254 opname = "!="; break;
2256 opname = "<="; break;
2258 opname = ">="; break;
2260 opname = "<"; break;
2262 opname = ">"; break;
2264 opname = "<<"; break;
2266 opname = ">>"; break;
2267 case TRUNC_MOD_EXPR:
2268 case FLOOR_MOD_EXPR:
2269 opname = "%"; break;
2270 case TRUNC_DIV_EXPR:
2271 case FLOOR_DIV_EXPR:
2272 opname = "/"; break;
2274 opname = "&"; break;
2276 opname = "|"; break;
2277 case TRUTH_ANDIF_EXPR:
2278 opname = "&&"; break;
2279 case TRUTH_ORIF_EXPR:
2280 opname = "||"; break;
2282 opname = "^"; break;
2286 error ("invalid operands to binary %s", opname);
2289 /* Subroutine of build_binary_op, used for comparison operations.
2290 See if the operands have both been converted from subword integer types
2291 and, if so, perhaps change them both back to their original type.
2292 This function is also responsible for converting the two operands
2293 to the proper common type for comparison.
2295 The arguments of this function are all pointers to local variables
2296 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2297 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2299 If this function returns nonzero, it means that the comparison has
2300 a constant value. What this function returns is an expression for
2304 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2305 enum tree_code *rescode_ptr)
2308 tree op0 = *op0_ptr;
2309 tree op1 = *op1_ptr;
2310 int unsignedp0, unsignedp1;
2312 tree primop0, primop1;
2313 enum tree_code code = *rescode_ptr;
2315 /* Throw away any conversions to wider types
2316 already present in the operands. */
2318 primop0 = get_narrower (op0, &unsignedp0);
2319 primop1 = get_narrower (op1, &unsignedp1);
2321 /* Handle the case that OP0 does not *contain* a conversion
2322 but it *requires* conversion to FINAL_TYPE. */
2324 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2325 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2326 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2327 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2329 /* If one of the operands must be floated, we cannot optimize. */
2330 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2331 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2333 /* If first arg is constant, swap the args (changing operation
2334 so value is preserved), for canonicalization. Don't do this if
2335 the second arg is 0. */
2337 if (TREE_CONSTANT (primop0)
2338 && !integer_zerop (primop1) && !real_zerop (primop1))
2341 int temi = unsignedp0;
2349 unsignedp0 = unsignedp1;
2372 *rescode_ptr = code;
2375 /* If comparing an integer against a constant more bits wide,
2376 maybe we can deduce a value of 1 or 0 independent of the data.
2377 Or else truncate the constant now
2378 rather than extend the variable at run time.
2380 This is only interesting if the constant is the wider arg.
2381 Also, it is not safe if the constant is unsigned and the
2382 variable arg is signed, since in this case the variable
2383 would be sign-extended and then regarded as unsigned.
2384 Our technique fails in this case because the lowest/highest
2385 possible unsigned results don't follow naturally from the
2386 lowest/highest possible values of the variable operand.
2387 For just EQ_EXPR and NE_EXPR there is another technique that
2388 could be used: see if the constant can be faithfully represented
2389 in the other operand's type, by truncating it and reextending it
2390 and see if that preserves the constant's value. */
2392 if (!real1 && !real2
2393 && TREE_CODE (primop1) == INTEGER_CST
2394 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2396 int min_gt, max_gt, min_lt, max_lt;
2397 tree maxval, minval;
2398 /* 1 if comparison is nominally unsigned. */
2399 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2402 type = c_common_signed_or_unsigned_type (unsignedp0,
2403 TREE_TYPE (primop0));
2405 maxval = TYPE_MAX_VALUE (type);
2406 minval = TYPE_MIN_VALUE (type);
2408 if (unsignedp && !unsignedp0)
2409 *restype_ptr = c_common_signed_type (*restype_ptr);
2411 if (TREE_TYPE (primop1) != *restype_ptr)
2413 /* Convert primop1 to target type, but do not introduce
2414 additional overflow. We know primop1 is an int_cst. */
2415 primop1 = force_fit_type_double (*restype_ptr,
2416 TREE_INT_CST_LOW (primop1),
2417 TREE_INT_CST_HIGH (primop1), 0,
2418 TREE_OVERFLOW (primop1));
2420 if (type != *restype_ptr)
2422 minval = convert (*restype_ptr, minval);
2423 maxval = convert (*restype_ptr, maxval);
2426 if (unsignedp && unsignedp0)
2428 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2429 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2430 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2431 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2435 min_gt = INT_CST_LT (primop1, minval);
2436 max_gt = INT_CST_LT (primop1, maxval);
2437 min_lt = INT_CST_LT (minval, primop1);
2438 max_lt = INT_CST_LT (maxval, primop1);
2442 /* This used to be a switch, but Genix compiler can't handle that. */
2443 if (code == NE_EXPR)
2445 if (max_lt || min_gt)
2446 val = truthvalue_true_node;
2448 else if (code == EQ_EXPR)
2450 if (max_lt || min_gt)
2451 val = truthvalue_false_node;
2453 else if (code == LT_EXPR)
2456 val = truthvalue_true_node;
2458 val = truthvalue_false_node;
2460 else if (code == GT_EXPR)
2463 val = truthvalue_true_node;
2465 val = truthvalue_false_node;
2467 else if (code == LE_EXPR)
2470 val = truthvalue_true_node;
2472 val = truthvalue_false_node;
2474 else if (code == GE_EXPR)
2477 val = truthvalue_true_node;
2479 val = truthvalue_false_node;
2482 /* If primop0 was sign-extended and unsigned comparison specd,
2483 we did a signed comparison above using the signed type bounds.
2484 But the comparison we output must be unsigned.
2486 Also, for inequalities, VAL is no good; but if the signed
2487 comparison had *any* fixed result, it follows that the
2488 unsigned comparison just tests the sign in reverse
2489 (positive values are LE, negative ones GE).
2490 So we can generate an unsigned comparison
2491 against an extreme value of the signed type. */
2493 if (unsignedp && !unsignedp0)
2500 primop1 = TYPE_MIN_VALUE (type);
2506 primop1 = TYPE_MAX_VALUE (type);
2513 /* unsigned_type_for doesn't support C bit fields */
2514 type = c_common_signed_or_unsigned_type (1, type);
2517 if (TREE_CODE (primop0) != INTEGER_CST)
2519 if (val == truthvalue_false_node)
2520 warning (0, "comparison is always false due to limited range of data type");
2521 if (val == truthvalue_true_node)
2522 warning (0, "comparison is always true due to limited range of data type");
2527 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2528 if (TREE_SIDE_EFFECTS (primop0))
2529 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2533 /* Value is not predetermined, but do the comparison
2534 in the type of the operand that is not constant.
2535 TYPE is already properly set. */
2538 /* If either arg is decimal float and the other is float, find the
2539 proper common type to use for comparison. */
2540 else if (real1 && real2
2541 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2542 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2543 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2545 else if (real1 && real2
2546 && (TYPE_PRECISION (TREE_TYPE (primop0))
2547 == TYPE_PRECISION (TREE_TYPE (primop1))))
2548 type = TREE_TYPE (primop0);
2550 /* If args' natural types are both narrower than nominal type
2551 and both extend in the same manner, compare them
2552 in the type of the wider arg.
2553 Otherwise must actually extend both to the nominal
2554 common type lest different ways of extending
2556 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2558 else if (unsignedp0 == unsignedp1 && real1 == real2
2559 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2560 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2562 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2563 type = c_common_signed_or_unsigned_type (unsignedp0
2564 || TYPE_UNSIGNED (*restype_ptr),
2566 /* Make sure shorter operand is extended the right way
2567 to match the longer operand. */
2569 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2570 TREE_TYPE (primop0)),
2573 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2574 TREE_TYPE (primop1)),
2579 /* Here we must do the comparison on the nominal type
2580 using the args exactly as we received them. */
2581 type = *restype_ptr;
2585 if (!real1 && !real2 && integer_zerop (primop1)
2586 && TYPE_UNSIGNED (*restype_ptr))
2592 /* All unsigned values are >= 0, so we warn if extra warnings
2593 are requested. However, if OP0 is a constant that is
2594 >= 0, the signedness of the comparison isn't an issue,
2595 so suppress the warning. */
2596 if (extra_warnings && !in_system_header
2597 && !(TREE_CODE (primop0) == INTEGER_CST
2598 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2600 warning (0, "comparison of unsigned expression >= 0 is always true");
2601 value = truthvalue_true_node;
2605 if (extra_warnings && !in_system_header
2606 && !(TREE_CODE (primop0) == INTEGER_CST
2607 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2609 warning (0, "comparison of unsigned expression < 0 is always false");
2610 value = truthvalue_false_node;
2619 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2620 if (TREE_SIDE_EFFECTS (primop0))
2621 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2628 *op0_ptr = convert (type, primop0);
2629 *op1_ptr = convert (type, primop1);
2631 *restype_ptr = truthvalue_type_node;
2636 /* Return a tree for the sum or difference (RESULTCODE says which)
2637 of pointer PTROP and integer INTOP. */
2640 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2644 /* The result is a pointer of the same type that is being added. */
2646 tree result_type = TREE_TYPE (ptrop);
2648 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2650 if (pedantic || warn_pointer_arith)
2651 pedwarn ("pointer of type %<void *%> used in arithmetic");
2652 size_exp = integer_one_node;
2654 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2656 if (pedantic || warn_pointer_arith)
2657 pedwarn ("pointer to a function used in arithmetic");
2658 size_exp = integer_one_node;
2660 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2662 if (pedantic || warn_pointer_arith)
2663 pedwarn ("pointer to member function used in arithmetic");
2664 size_exp = integer_one_node;
2667 size_exp = size_in_bytes (TREE_TYPE (result_type));
2669 /* We are manipulating pointer values, so we don't need to warn
2670 about relying on undefined signed overflow. We disable the
2671 warning here because we use integer types so fold won't know that
2672 they are really pointers. */
2673 fold_defer_overflow_warnings ();
2675 /* If what we are about to multiply by the size of the elements
2676 contains a constant term, apply distributive law
2677 and multiply that constant term separately.
2678 This helps produce common subexpressions. */
2680 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2681 && !TREE_CONSTANT (intop)
2682 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2683 && TREE_CONSTANT (size_exp)
2684 /* If the constant comes from pointer subtraction,
2685 skip this optimization--it would cause an error. */
2686 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2687 /* If the constant is unsigned, and smaller than the pointer size,
2688 then we must skip this optimization. This is because it could cause
2689 an overflow error if the constant is negative but INTOP is not. */
2690 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2691 || (TYPE_PRECISION (TREE_TYPE (intop))
2692 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2694 enum tree_code subcode = resultcode;
2695 tree int_type = TREE_TYPE (intop);
2696 if (TREE_CODE (intop) == MINUS_EXPR)
2697 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2698 /* Convert both subexpression types to the type of intop,
2699 because weird cases involving pointer arithmetic
2700 can result in a sum or difference with different type args. */
2701 ptrop = build_binary_op (subcode, ptrop,
2702 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2703 intop = convert (int_type, TREE_OPERAND (intop, 0));
2706 /* Convert the integer argument to a type the same size as sizetype
2707 so the multiply won't overflow spuriously. */
2709 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2710 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2711 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2712 TYPE_UNSIGNED (sizetype)), intop);
2714 /* Replace the integer argument with a suitable product by the object size.
2715 Do this multiplication as signed, then convert to the appropriate
2716 pointer type (actually unsigned integral). */
2718 intop = convert (result_type,
2719 build_binary_op (MULT_EXPR, intop,
2720 convert (TREE_TYPE (intop), size_exp), 1));
2722 /* Create the sum or difference. */
2723 ret = fold_build2 (resultcode, result_type, ptrop, intop);
2725 fold_undefer_and_ignore_overflow_warnings ();
2730 /* Return whether EXPR is a declaration whose address can never be
2734 decl_with_nonnull_addr_p (tree expr)
2736 return (DECL_P (expr)
2737 && (TREE_CODE (expr) == PARM_DECL
2738 || TREE_CODE (expr) == LABEL_DECL
2739 || !DECL_WEAK (expr)));
2742 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2743 or for an `if' or `while' statement or ?..: exp. It should already
2744 have been validated to be of suitable type; otherwise, a bad
2745 diagnostic may result.
2747 This preparation consists of taking the ordinary
2748 representation of an expression expr and producing a valid tree
2749 boolean expression describing whether expr is nonzero. We could
2750 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2751 but we optimize comparisons, &&, ||, and !.
2753 The resulting type should always be `truthvalue_type_node'. */
2756 c_common_truthvalue_conversion (tree expr)
2758 switch (TREE_CODE (expr))
2760 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
2761 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2762 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2763 case ORDERED_EXPR: case UNORDERED_EXPR:
2764 if (TREE_TYPE (expr) == truthvalue_type_node)
2766 return build2 (TREE_CODE (expr), truthvalue_type_node,
2767 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2769 case TRUTH_ANDIF_EXPR:
2770 case TRUTH_ORIF_EXPR:
2771 case TRUTH_AND_EXPR:
2773 case TRUTH_XOR_EXPR:
2774 if (TREE_TYPE (expr) == truthvalue_type_node)
2776 return build2 (TREE_CODE (expr), truthvalue_type_node,
2777 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2778 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2780 case TRUTH_NOT_EXPR:
2781 if (TREE_TYPE (expr) == truthvalue_type_node)
2783 return build1 (TREE_CODE (expr), truthvalue_type_node,
2784 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2790 return integer_zerop (expr) ? truthvalue_false_node
2791 : truthvalue_true_node;
2794 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2795 ? truthvalue_true_node
2796 : truthvalue_false_node;
2799 expr = build_unary_op (ADDR_EXPR, expr, 0);
2804 tree inner = TREE_OPERAND (expr, 0);
2805 if (decl_with_nonnull_addr_p (inner))
2807 /* Common Ada/Pascal programmer's mistake. */
2808 warning (OPT_Waddress,
2809 "the address of %qD will always evaluate as %<true%>",
2811 return truthvalue_true_node;
2814 /* If we still have a decl, it is possible for its address to
2815 be NULL, so we cannot optimize. */
2818 gcc_assert (DECL_WEAK (inner));
2822 if (TREE_SIDE_EFFECTS (inner))
2823 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2824 inner, truthvalue_true_node);
2826 return truthvalue_true_node;
2830 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2831 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2832 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2833 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2839 /* These don't change whether an object is nonzero or zero. */
2840 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2844 /* These don't change whether an object is zero or nonzero, but
2845 we can't ignore them if their second arg has side-effects. */
2846 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2847 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2848 TREE_OPERAND (expr, 1),
2849 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2851 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2854 /* Distribute the conversion into the arms of a COND_EXPR. */
2855 return fold_build3 (COND_EXPR, truthvalue_type_node,
2856 TREE_OPERAND (expr, 0),
2857 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2858 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
2862 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2863 since that affects how `default_conversion' will behave. */
2864 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2865 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2867 /* If this is widening the argument, we can ignore it. */
2868 if (TYPE_PRECISION (TREE_TYPE (expr))
2869 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2870 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2874 if (!TREE_NO_WARNING (expr)
2875 && warn_parentheses)
2877 warning (OPT_Wparentheses,
2878 "suggest parentheses around assignment used as truth value");
2879 TREE_NO_WARNING (expr) = 1;
2887 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2889 tree t = save_expr (expr);
2890 return (build_binary_op
2891 ((TREE_SIDE_EFFECTS (expr)
2892 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2893 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2894 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2898 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2901 static void def_builtin_1 (enum built_in_function fncode,
2903 enum built_in_class fnclass,
2904 tree fntype, tree libtype,
2905 bool both_p, bool fallback_p, bool nonansi_p,
2906 tree fnattrs, bool implicit_p);
2908 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2909 down to the element type of an array. */
2912 c_build_qualified_type (tree type, int type_quals)
2914 if (type == error_mark_node)
2917 if (TREE_CODE (type) == ARRAY_TYPE)
2920 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2923 /* See if we already have an identically qualified type. */
2924 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2926 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2927 && TYPE_NAME (t) == TYPE_NAME (type)
2928 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2929 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2930 TYPE_ATTRIBUTES (type)))
2935 tree domain = TYPE_DOMAIN (type);
2937 t = build_variant_type_copy (type);
2938 TREE_TYPE (t) = element_type;
2940 if (TYPE_STRUCTURAL_EQUALITY_P (element_type)
2941 || (domain && TYPE_STRUCTURAL_EQUALITY_P (domain)))
2942 SET_TYPE_STRUCTURAL_EQUALITY (t);
2943 else if (TYPE_CANONICAL (element_type) != element_type
2944 || (domain && TYPE_CANONICAL (domain) != domain))
2946 tree unqualified_canon
2947 = build_array_type (TYPE_CANONICAL (element_type),
2948 domain? TYPE_CANONICAL (domain)
2951 = c_build_qualified_type (unqualified_canon, type_quals);
2954 TYPE_CANONICAL (t) = t;
2959 /* A restrict-qualified pointer type must be a pointer to object or
2960 incomplete type. Note that the use of POINTER_TYPE_P also allows
2961 REFERENCE_TYPEs, which is appropriate for C++. */
2962 if ((type_quals & TYPE_QUAL_RESTRICT)
2963 && (!POINTER_TYPE_P (type)
2964 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2966 error ("invalid use of %<restrict%>");
2967 type_quals &= ~TYPE_QUAL_RESTRICT;
2970 return build_qualified_type (type, type_quals);
2973 /* Apply the TYPE_QUALS to the new DECL. */
2976 c_apply_type_quals_to_decl (int type_quals, tree decl)
2978 tree type = TREE_TYPE (decl);
2980 if (type == error_mark_node)
2983 if (((type_quals & TYPE_QUAL_CONST)
2984 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2985 /* An object declared 'const' is only readonly after it is
2986 initialized. We don't have any way of expressing this currently,
2987 so we need to be conservative and unset TREE_READONLY for types
2988 with constructors. Otherwise aliasing code will ignore stores in
2989 an inline constructor. */
2990 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2991 TREE_READONLY (decl) = 1;
2992 if (type_quals & TYPE_QUAL_VOLATILE)
2994 TREE_SIDE_EFFECTS (decl) = 1;
2995 TREE_THIS_VOLATILE (decl) = 1;
2997 if (type_quals & TYPE_QUAL_RESTRICT)
2999 while (type && TREE_CODE (type) == ARRAY_TYPE)
3000 /* Allow 'restrict' on arrays of pointers.
3001 FIXME currently we just ignore it. */
3002 type = TREE_TYPE (type);
3004 || !POINTER_TYPE_P (type)
3005 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
3006 error ("invalid use of %<restrict%>");
3007 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
3008 /* Indicate we need to make a unique alias set for this pointer.
3009 We can't do it here because it might be pointing to an
3011 DECL_POINTER_ALIAS_SET (decl) = -2;
3015 /* Hash function for the problem of multiple type definitions in
3016 different files. This must hash all types that will compare
3017 equal via comptypes to the same value. In practice it hashes
3018 on some of the simple stuff and leaves the details to comptypes. */
3021 c_type_hash (const void *p)
3027 switch (TREE_CODE (t))
3029 /* For pointers, hash on pointee type plus some swizzling. */
3031 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
3032 /* Hash on number of elements and total size. */
3035 t2 = TYPE_VALUES (t);
3039 t2 = TYPE_FIELDS (t);
3041 case QUAL_UNION_TYPE:
3043 t2 = TYPE_FIELDS (t);
3047 t2 = TYPE_FIELDS (t);
3052 for (; t2; t2 = TREE_CHAIN (t2))
3054 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
3055 return ((size << 24) | (i << shift));
3058 static GTY((param_is (union tree_node))) htab_t type_hash_table;
3060 /* Return the typed-based alias set for T, which may be an expression
3061 or a type. Return -1 if we don't do anything special. */
3064 c_common_get_alias_set (tree t)
3069 /* Permit type-punning when accessing a union, provided the access
3070 is directly through the union. For example, this code does not
3071 permit taking the address of a union member and then storing
3072 through it. Even the type-punning allowed here is a GCC
3073 extension, albeit a common and useful one; the C standard says
3074 that such accesses have implementation-defined behavior. */
3076 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3077 u = TREE_OPERAND (u, 0))
3078 if (TREE_CODE (u) == COMPONENT_REF
3079 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3082 /* That's all the expressions we handle specially. */
3086 /* The C standard guarantees that any object may be accessed via an
3087 lvalue that has character type. */
3088 if (t == char_type_node
3089 || t == signed_char_type_node
3090 || t == unsigned_char_type_node)
3093 /* If it has the may_alias attribute, it can alias anything. */
3094 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
3097 /* The C standard specifically allows aliasing between signed and
3098 unsigned variants of the same type. We treat the signed
3099 variant as canonical. */
3100 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3102 tree t1 = c_common_signed_type (t);
3104 /* t1 == t can happen for boolean nodes which are always unsigned. */
3106 return get_alias_set (t1);
3108 else if (POINTER_TYPE_P (t))
3112 /* Unfortunately, there is no canonical form of a pointer type.
3113 In particular, if we have `typedef int I', then `int *', and
3114 `I *' are different types. So, we have to pick a canonical
3115 representative. We do this below.
3117 Technically, this approach is actually more conservative that
3118 it needs to be. In particular, `const int *' and `int *'
3119 should be in different alias sets, according to the C and C++
3120 standard, since their types are not the same, and so,
3121 technically, an `int **' and `const int **' cannot point at
3124 But, the standard is wrong. In particular, this code is
3129 const int* const* cipp = ipp;
3131 And, it doesn't make sense for that to be legal unless you
3132 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3133 the pointed-to types. This issue has been reported to the
3135 t1 = build_type_no_quals (t);
3137 return get_alias_set (t1);
3140 /* Handle the case of multiple type nodes referring to "the same" type,
3141 which occurs with IMA. These share an alias set. FIXME: Currently only
3142 C90 is handled. (In C99 type compatibility is not transitive, which
3143 complicates things mightily. The alias set splay trees can theoretically
3144 represent this, but insertion is tricky when you consider all the
3145 different orders things might arrive in.) */
3147 if (c_language != clk_c || flag_isoc99)
3150 /* Save time if there's only one input file. */
3151 if (num_in_fnames == 1)
3154 /* Pointers need special handling if they point to any type that
3155 needs special handling (below). */
3156 if (TREE_CODE (t) == POINTER_TYPE)
3159 /* Find bottom type under any nested POINTERs. */
3160 for (t2 = TREE_TYPE (t);
3161 TREE_CODE (t2) == POINTER_TYPE;
3162 t2 = TREE_TYPE (t2))
3164 if (TREE_CODE (t2) != RECORD_TYPE
3165 && TREE_CODE (t2) != ENUMERAL_TYPE
3166 && TREE_CODE (t2) != QUAL_UNION_TYPE
3167 && TREE_CODE (t2) != UNION_TYPE)
3169 if (TYPE_SIZE (t2) == 0)
3172 /* These are the only cases that need special handling. */
3173 if (TREE_CODE (t) != RECORD_TYPE
3174 && TREE_CODE (t) != ENUMERAL_TYPE
3175 && TREE_CODE (t) != QUAL_UNION_TYPE
3176 && TREE_CODE (t) != UNION_TYPE
3177 && TREE_CODE (t) != POINTER_TYPE)
3180 if (TYPE_SIZE (t) == 0)
3183 /* Look up t in hash table. Only one of the compatible types within each
3184 alias set is recorded in the table. */
3185 if (!type_hash_table)
3186 type_hash_table = htab_create_ggc (1021, c_type_hash,
3187 (htab_eq) lang_hooks.types_compatible_p,
3189 slot = htab_find_slot (type_hash_table, t, INSERT);
3192 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3193 return TYPE_ALIAS_SET ((tree)*slot);
3196 /* Our caller will assign and record (in t) a new alias set; all we need
3197 to do is remember t in the hash table. */
3203 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3204 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3205 flag controls whether we should diagnose possibly ill-formed
3206 constructs or not. */
3209 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3211 const char *op_name;
3213 enum tree_code type_code = TREE_CODE (type);
3215 op_name = is_sizeof ? "sizeof" : "__alignof__";
3217 if (type_code == FUNCTION_TYPE)
3221 if (complain && (pedantic || warn_pointer_arith))
3222 pedwarn ("invalid application of %<sizeof%> to a function type");
3223 value = size_one_node;
3226 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3228 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3230 if (type_code == VOID_TYPE
3231 && complain && (pedantic || warn_pointer_arith))
3232 pedwarn ("invalid application of %qs to a void type", op_name);
3233 value = size_one_node;
3235 else if (!COMPLETE_TYPE_P (type))
3238 error ("invalid application of %qs to incomplete type %qT ",
3240 value = size_zero_node;
3245 /* Convert in case a char is more than one unit. */
3246 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3247 size_int (TYPE_PRECISION (char_type_node)
3250 value = size_int (TYPE_ALIGN_UNIT (type));
3253 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3254 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3255 never happen. However, this node should really have type
3256 `size_t', which is just a typedef for an ordinary integer type. */
3257 value = fold_convert (size_type_node, value);
3258 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3263 /* Implement the __alignof keyword: Return the minimum required
3264 alignment of EXPR, measured in bytes. For VAR_DECL's and
3265 FIELD_DECL's return DECL_ALIGN (which can be set from an
3266 "aligned" __attribute__ specification). */
3269 c_alignof_expr (tree expr)
3273 if (TREE_CODE (expr) == VAR_DECL)
3274 t = size_int (DECL_ALIGN_UNIT (expr));
3276 else if (TREE_CODE (expr) == COMPONENT_REF
3277 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3279 error ("%<__alignof%> applied to a bit-field");
3282 else if (TREE_CODE (expr) == COMPONENT_REF
3283 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3284 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3286 else if (TREE_CODE (expr) == INDIRECT_REF)
3288 tree t = TREE_OPERAND (expr, 0);
3290 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3292 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3293 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3297 t = TREE_OPERAND (t, 0);
3298 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3299 if (thisalign > bestalign)
3300 best = t, bestalign = thisalign;
3302 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3305 return c_alignof (TREE_TYPE (expr));
3307 return fold_convert (size_type_node, t);
3310 /* Handle C and C++ default attributes. */
3312 enum built_in_attribute
3314 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3315 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3316 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3317 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3318 #include "builtin-attrs.def"
3319 #undef DEF_ATTR_NULL_TREE
3321 #undef DEF_ATTR_IDENT
3322 #undef DEF_ATTR_TREE_LIST
3326 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3328 static void c_init_attributes (void);
3332 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3333 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3334 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3335 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3336 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3337 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3338 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3339 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3340 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3341 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3342 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3343 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3344 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3345 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3346 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3348 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3349 #include "builtin-types.def"
3350 #undef DEF_PRIMITIVE_TYPE
3351 #undef DEF_FUNCTION_TYPE_0
3352 #undef DEF_FUNCTION_TYPE_1
3353 #undef DEF_FUNCTION_TYPE_2
3354 #undef DEF_FUNCTION_TYPE_3
3355 #undef DEF_FUNCTION_TYPE_4
3356 #undef DEF_FUNCTION_TYPE_5
3357 #undef DEF_FUNCTION_TYPE_6
3358 #undef DEF_FUNCTION_TYPE_7
3359 #undef DEF_FUNCTION_TYPE_VAR_0
3360 #undef DEF_FUNCTION_TYPE_VAR_1
3361 #undef DEF_FUNCTION_TYPE_VAR_2
3362 #undef DEF_FUNCTION_TYPE_VAR_3
3363 #undef DEF_FUNCTION_TYPE_VAR_4
3364 #undef DEF_FUNCTION_TYPE_VAR_5
3365 #undef DEF_POINTER_TYPE
3369 typedef enum c_builtin_type builtin_type;
3371 /* A temporary array for c_common_nodes_and_builtins. Used in
3372 communication with def_fn_type. */
3373 static tree builtin_types[(int) BT_LAST + 1];
3375 /* A helper function for c_common_nodes_and_builtins. Build function type
3376 for DEF with return type RET and N arguments. If VAR is true, then the
3377 function should be variadic after those N arguments.
3379 Takes special care not to ICE if any of the types involved are
3380 error_mark_node, which indicates that said type is not in fact available
3381 (see builtin_type_for_size). In which case the function type as a whole
3382 should be error_mark_node. */
3385 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3387 tree args = NULL, t;
3392 for (i = 0; i < n; ++i)
3394 builtin_type a = va_arg (list, builtin_type);
3395 t = builtin_types[a];
3396 if (t == error_mark_node)
3398 args = tree_cons (NULL_TREE, t, args);
3402 args = nreverse (args);
3404 args = chainon (args, void_list_node);
3406 t = builtin_types[ret];
3407 if (t == error_mark_node)
3409 t = build_function_type (t, args);
3412 builtin_types[def] = t;
3415 /* Build builtin functions common to both C and C++ language
3419 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3421 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3422 builtin_types[ENUM] = VALUE;
3423 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3424 def_fn_type (ENUM, RETURN, 0, 0);
3425 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3426 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3427 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3428 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3429 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3430 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3431 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3432 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3433 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3434 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3435 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3437 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3438 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3440 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3441 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3442 def_fn_type (ENUM, RETURN, 1, 0);
3443 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3444 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3445 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3446 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3447 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3448 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3449 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3450 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3451 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3452 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3453 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3454 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3456 #include "builtin-types.def"
3458 #undef DEF_PRIMITIVE_TYPE
3459 #undef DEF_FUNCTION_TYPE_1
3460 #undef DEF_FUNCTION_TYPE_2
3461 #undef DEF_FUNCTION_TYPE_3
3462 #undef DEF_FUNCTION_TYPE_4
3463 #undef DEF_FUNCTION_TYPE_5
3464 #undef DEF_FUNCTION_TYPE_6
3465 #undef DEF_FUNCTION_TYPE_VAR_0
3466 #undef DEF_FUNCTION_TYPE_VAR_1
3467 #undef DEF_FUNCTION_TYPE_VAR_2
3468 #undef DEF_FUNCTION_TYPE_VAR_3
3469 #undef DEF_FUNCTION_TYPE_VAR_4
3470 #undef DEF_FUNCTION_TYPE_VAR_5
3471 #undef DEF_POINTER_TYPE
3472 builtin_types[(int) BT_LAST] = NULL_TREE;
3474 c_init_attributes ();
3476 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3477 NONANSI_P, ATTRS, IMPLICIT, COND) \
3479 def_builtin_1 (ENUM, NAME, CLASS, \
3480 builtin_types[(int) TYPE], \
3481 builtin_types[(int) LIBTYPE], \
3482 BOTH_P, FALLBACK_P, NONANSI_P, \
3483 built_in_attributes[(int) ATTRS], IMPLICIT);
3484 #include "builtins.def"
3487 build_common_builtin_nodes ();
3489 targetm.init_builtins ();
3494 /* Build tree nodes and builtin functions common to both C and C++ language
3498 c_common_nodes_and_builtins (void)
3500 int wchar_type_size;
3501 tree array_domain_type;
3502 tree va_list_ref_type_node;
3503 tree va_list_arg_type_node;
3505 /* Define `int' and `char' first so that dbx will output them first. */
3506 record_builtin_type (RID_INT, NULL, integer_type_node);
3507 record_builtin_type (RID_CHAR, "char", char_type_node);
3509 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3510 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3511 but not C. Are the conditionals here needed? */
3512 if (c_dialect_cxx ())
3513 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3514 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3515 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3516 record_builtin_type (RID_MAX, "long unsigned int",
3517 long_unsigned_type_node);
3518 if (c_dialect_cxx ())
3519 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3520 record_builtin_type (RID_MAX, "long long int",
3521 long_long_integer_type_node);
3522 record_builtin_type (RID_MAX, "long long unsigned int",
3523 long_long_unsigned_type_node);
3524 if (c_dialect_cxx ())
3525 record_builtin_type (RID_MAX, "long long unsigned",
3526 long_long_unsigned_type_node);
3527 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3528 record_builtin_type (RID_MAX, "short unsigned int",
3529 short_unsigned_type_node);
3530 if (c_dialect_cxx ())
3531 record_builtin_type (RID_MAX, "unsigned short",
3532 short_unsigned_type_node);
3534 /* Define both `signed char' and `unsigned char'. */
3535 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3536 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3538 /* These are types that c_common_type_for_size and
3539 c_common_type_for_mode use. */
3540 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3542 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3544 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3546 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3548 #if HOST_BITS_PER_WIDE_INT >= 64
3549 if (targetm.scalar_mode_supported_p (TImode))
3550 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3551 get_identifier ("__int128_t"),
3554 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3555 unsigned_intQI_type_node));
3556 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3557 unsigned_intHI_type_node));
3558 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3559 unsigned_intSI_type_node));
3560 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3561 unsigned_intDI_type_node));
3562 #if HOST_BITS_PER_WIDE_INT >= 64
3563 if (targetm.scalar_mode_supported_p (TImode))
3564 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3565 get_identifier ("__uint128_t"),
3566 unsigned_intTI_type_node));
3569 /* Create the widest literal types. */
3570 widest_integer_literal_type_node
3571 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3572 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3573 widest_integer_literal_type_node));
3575 widest_unsigned_literal_type_node
3576 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3577 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3578 widest_unsigned_literal_type_node));
3580 /* `unsigned long' is the standard type for sizeof.
3581 Note that stddef.h uses `unsigned long',
3582 and this must agree, even if long and int are the same size. */
3584 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3585 signed_size_type_node = c_common_signed_type (size_type_node);
3586 set_sizetype (size_type_node);
3589 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3591 build_common_tree_nodes_2 (flag_short_double);
3593 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3594 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3595 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3597 /* Only supported decimal floating point extension if the target
3598 actually supports underlying modes. */
3599 if (targetm.scalar_mode_supported_p (SDmode)
3600 && targetm.scalar_mode_supported_p (DDmode)
3601 && targetm.scalar_mode_supported_p (TDmode))
3603 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3604 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3605 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3608 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3609 get_identifier ("complex int"),
3610 complex_integer_type_node));
3611 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3612 get_identifier ("complex float"),
3613 complex_float_type_node));
3614 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3615 get_identifier ("complex double"),
3616 complex_double_type_node));
3617 lang_hooks.decls.pushdecl
3618 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3619 complex_long_double_type_node));
3621 if (c_dialect_cxx ())
3622 /* For C++, make fileptr_type_node a distinct void * type until
3623 FILE type is defined. */
3624 fileptr_type_node = build_variant_type_copy (ptr_type_node);
3626 record_builtin_type (RID_VOID, NULL, void_type_node);
3628 /* Set the TYPE_NAME for any variants that were built before
3629 record_builtin_type gave names to the built-in types. */
3631 tree void_name = TYPE_NAME (void_type_node);
3632 TYPE_NAME (void_type_node) = NULL_TREE;
3633 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3635 TYPE_NAME (void_type_node) = void_name;
3638 /* This node must not be shared. */
3639 void_zero_node = make_node (INTEGER_CST);
3640 TREE_TYPE (void_zero_node) = void_type_node;
3642 void_list_node = build_void_list_node ();
3644 /* Make a type to be the domain of a few array types
3645 whose domains don't really matter.
3646 200 is small enough that it always fits in size_t
3647 and large enough that it can hold most function names for the
3648 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3649 array_domain_type = build_index_type (size_int (200));
3651 /* Make a type for arrays of characters.
3652 With luck nothing will ever really depend on the length of this
3654 char_array_type_node
3655 = build_array_type (char_type_node, array_domain_type);
3657 /* Likewise for arrays of ints. */
3659 = build_array_type (integer_type_node, array_domain_type);
3661 string_type_node = build_pointer_type (char_type_node);
3662 const_string_type_node
3663 = build_pointer_type (build_qualified_type
3664 (char_type_node, TYPE_QUAL_CONST));
3666 /* This is special for C++ so functions can be overloaded. */
3667 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3668 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3669 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3670 if (c_dialect_cxx ())
3672 if (TYPE_UNSIGNED (wchar_type_node))
3673 wchar_type_node = make_unsigned_type (wchar_type_size);
3675 wchar_type_node = make_signed_type (wchar_type_size);
3676 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3680 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3681 unsigned_wchar_type_node = unsigned_type_for (wchar_type_node);
3684 /* This is for wide string constants. */
3685 wchar_array_type_node
3686 = build_array_type (wchar_type_node, array_domain_type);
3689 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3692 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3694 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3696 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3698 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3699 unsigned_ptrdiff_type_node = unsigned_type_for (ptrdiff_type_node);
3701 lang_hooks.decls.pushdecl
3702 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3703 va_list_type_node));
3705 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3707 va_list_arg_type_node = va_list_ref_type_node =
3708 build_pointer_type (TREE_TYPE (va_list_type_node));
3712 va_list_arg_type_node = va_list_type_node;
3713 va_list_ref_type_node = build_reference_type (va_list_type_node);
3716 if (!flag_preprocess_only)
3717 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
3719 main_identifier_node = get_identifier ("main");
3721 /* Create the built-in __null node. It is important that this is
3723 null_node = make_node (INTEGER_CST);
3724 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3726 /* Since builtin_types isn't gc'ed, don't export these nodes. */
3727 memset (builtin_types, 0, sizeof (builtin_types));
3730 /* Look up the function in built_in_decls that corresponds to DECL
3731 and set ASMSPEC as its user assembler name. DECL must be a
3732 function decl that declares a builtin. */
3735 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3738 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3739 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3742 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3743 set_user_assembler_name (builtin, asmspec);
3744 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3745 init_block_move_fn (asmspec);
3746 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3747 init_block_clear_fn (asmspec);
3750 /* The number of named compound-literals generated thus far. */
3751 static GTY(()) int compound_literal_number;
3753 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
3756 set_compound_literal_name (tree decl)
3759 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3760 compound_literal_number);
3761 compound_literal_number++;
3762 DECL_NAME (decl) = get_identifier (name);
3766 build_va_arg (tree expr, tree type)
3768 return build1 (VA_ARG_EXPR, type, expr);
3772 /* Linked list of disabled built-in functions. */
3774 typedef struct disabled_builtin
3777 struct disabled_builtin *next;
3779 static disabled_builtin *disabled_builtins = NULL;
3781 static bool builtin_function_disabled_p (const char *);
3783 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3784 begins with "__builtin_", give an error. */
3787 disable_builtin_function (const char *name)
3789 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3790 error ("cannot disable built-in function %qs", name);
3793 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3794 new_disabled_builtin->name = name;
3795 new_disabled_builtin->next = disabled_builtins;
3796 disabled_builtins = new_disabled_builtin;
3801 /* Return true if the built-in function NAME has been disabled, false
3805 builtin_function_disabled_p (const char *name)
3807 disabled_builtin *p;
3808 for (p = disabled_builtins; p != NULL; p = p->next)
3810 if (strcmp (name, p->name) == 0)
3817 /* Worker for DEF_BUILTIN.
3818 Possibly define a builtin function with one or two names.
3819 Does not declare a non-__builtin_ function if flag_no_builtin, or if
3820 nonansi_p and flag_no_nonansi_builtin. */
3823 def_builtin_1 (enum built_in_function fncode,
3825 enum built_in_class fnclass,
3826 tree fntype, tree libtype,
3827 bool both_p, bool fallback_p, bool nonansi_p,
3828 tree fnattrs, bool implicit_p)
3831 const char *libname;
3833 if (fntype == error_mark_node)
3836 gcc_assert ((!both_p && !fallback_p)
3837 || !strncmp (name, "__builtin_",
3838 strlen ("__builtin_")));
3840 libname = name + strlen ("__builtin_");
3841 decl = add_builtin_function (name, fntype, fncode, fnclass,
3842 (fallback_p ? libname : NULL),
3845 && !flag_no_builtin && !builtin_function_disabled_p (libname)
3846 && !(nonansi_p && flag_no_nonansi_builtin))
3847 add_builtin_function (libname, libtype, fncode, fnclass,
3850 built_in_decls[(int) fncode] = decl;
3852 implicit_built_in_decls[(int) fncode] = decl;
3855 /* Nonzero if the type T promotes to int. This is (nearly) the
3856 integral promotions defined in ISO C99 6.3.1.1/2. */
3859 c_promoting_integer_type_p (tree t)
3861 switch (TREE_CODE (t))
3864 return (TYPE_MAIN_VARIANT (t) == char_type_node
3865 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3866 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3867 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3868 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3869 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3872 /* ??? Technically all enumerations not larger than an int
3873 promote to an int. But this is used along code paths
3874 that only want to notice a size change. */
3875 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3885 /* Return 1 if PARMS specifies a fixed number of parameters
3886 and none of their types is affected by default promotions. */
3889 self_promoting_args_p (tree parms)
3892 for (t = parms; t; t = TREE_CHAIN (t))
3894 tree type = TREE_VALUE (t);
3896 if (type == error_mark_node)
3899 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3905 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3908 if (c_promoting_integer_type_p (type))
3914 /* Recursively examines the array elements of TYPE, until a non-array
3915 element type is found. */
3918 strip_array_types (tree type)
3920 while (TREE_CODE (type) == ARRAY_TYPE)
3921 type = TREE_TYPE (type);
3926 /* Recursively remove any '*' or '&' operator from TYPE. */
3928 strip_pointer_operator (tree t)
3930 while (POINTER_TYPE_P (t))
3935 /* Recursively remove pointer or array type from TYPE. */
3937 strip_pointer_or_array_types (tree t)
3939 while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
3944 /* Used to compare case labels. K1 and K2 are actually tree nodes
3945 representing case labels, or NULL_TREE for a `default' label.
3946 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3947 K2, and 0 if K1 and K2 are equal. */
3950 case_compare (splay_tree_key k1, splay_tree_key k2)
3952 /* Consider a NULL key (such as arises with a `default' label) to be
3953 smaller than anything else. */
3959 return tree_int_cst_compare ((tree) k1, (tree) k2);
3962 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3963 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3964 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3965 case label was declared using the usual C/C++ syntax, rather than
3966 the GNU case range extension. CASES is a tree containing all the
3967 case ranges processed so far; COND is the condition for the
3968 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3969 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
3972 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3973 tree low_value, tree high_value)
3978 splay_tree_node node;
3980 /* Create the LABEL_DECL itself. */
3981 label = create_artificial_label ();
3983 /* If there was an error processing the switch condition, bail now
3984 before we get more confused. */
3985 if (!cond || cond == error_mark_node)
3988 if ((low_value && TREE_TYPE (low_value)
3989 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3990 || (high_value && TREE_TYPE (high_value)
3991 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3993 error ("pointers are not permitted as case values");
3997 /* Case ranges are a GNU extension. */
3998 if (high_value && pedantic)
3999 pedwarn ("range expressions in switch statements are non-standard");
4001 type = TREE_TYPE (cond);
4004 low_value = check_case_value (low_value);
4005 low_value = convert_and_check (type, low_value);
4006 if (low_value == error_mark_node)
4011 high_value = check_case_value (high_value);
4012 high_value = convert_and_check (type, high_value);
4013 if (high_value == error_mark_node)
4017 if (low_value && high_value)
4019 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
4020 really a case range, even though it was written that way.
4021 Remove the HIGH_VALUE to simplify later processing. */
4022 if (tree_int_cst_equal (low_value, high_value))
4023 high_value = NULL_TREE;
4024 else if (!tree_int_cst_lt (low_value, high_value))
4025 warning (0, "empty range specified");
4028 /* See if the case is in range of the type of the original testing
4029 expression. If both low_value and high_value are out of range,
4030 don't insert the case label and return NULL_TREE. */
4032 && !check_case_bounds (type, orig_type,
4033 &low_value, high_value ? &high_value : NULL))
4036 /* Look up the LOW_VALUE in the table of case labels we already
4038 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
4039 /* If there was not an exact match, check for overlapping ranges.
4040 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
4041 that's a `default' label and the only overlap is an exact match. */
4042 if (!node && (low_value || high_value))
4044 splay_tree_node low_bound;
4045 splay_tree_node high_bound;
4047 /* Even though there wasn't an exact match, there might be an
4048 overlap between this case range and another case range.
4049 Since we've (inductively) not allowed any overlapping case
4050 ranges, we simply need to find the greatest low case label
4051 that is smaller that LOW_VALUE, and the smallest low case
4052 label that is greater than LOW_VALUE. If there is an overlap
4053 it will occur in one of these two ranges. */
4054 low_bound = splay_tree_predecessor (cases,
4055 (splay_tree_key) low_value);
4056 high_bound = splay_tree_successor (cases,
4057 (splay_tree_key) low_value);
4059 /* Check to see if the LOW_BOUND overlaps. It is smaller than
4060 the LOW_VALUE, so there is no need to check unless the
4061 LOW_BOUND is in fact itself a case range. */
4063 && CASE_HIGH ((tree) low_bound->value)
4064 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
4067 /* Check to see if the HIGH_BOUND overlaps. The low end of that
4068 range is bigger than the low end of the current range, so we
4069 are only interested if the current range is a real range, and
4070 not an ordinary case label. */
4073 && (tree_int_cst_compare ((tree) high_bound->key,
4078 /* If there was an overlap, issue an error. */
4081 tree duplicate = CASE_LABEL ((tree) node->value);
4085 error ("duplicate (or overlapping) case value");
4086 error ("%Jthis is the first entry overlapping that value", duplicate);
4090 error ("duplicate case value") ;
4091 error ("%Jpreviously used here", duplicate);
4095 error ("multiple default labels in one switch");
4096 error ("%Jthis is the first default label", duplicate);
4101 /* Add a CASE_LABEL to the statement-tree. */
4102 case_label = add_stmt (build_case_label (low_value, high_value, label));
4103 /* Register this case label in the splay tree. */
4104 splay_tree_insert (cases,
4105 (splay_tree_key) low_value,
4106 (splay_tree_value) case_label);
4111 /* Add a label so that the back-end doesn't think that the beginning of
4112 the switch is unreachable. Note that we do not add a case label, as
4113 that just leads to duplicates and thence to failure later on. */
4116 tree t = create_artificial_label ();
4117 add_stmt (build_stmt (LABEL_EXPR, t));
4119 return error_mark_node;
4122 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
4123 Used to verify that case values match up with enumerator values. */
4126 match_case_to_enum_1 (tree key, tree type, tree label)
4128 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
4130 /* ??? Not working too hard to print the double-word value.
4131 Should perhaps be done with %lwd in the diagnostic routines? */
4132 if (TREE_INT_CST_HIGH (key) == 0)
4133 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
4134 TREE_INT_CST_LOW (key));
4135 else if (!TYPE_UNSIGNED (type)
4136 && TREE_INT_CST_HIGH (key) == -1
4137 && TREE_INT_CST_LOW (key) != 0)
4138 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
4139 -TREE_INT_CST_LOW (key));
4141 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
4142 TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
4144 if (TYPE_NAME (type) == 0)
4145 warning (0, "%Jcase value %qs not in enumerated type",
4146 CASE_LABEL (label), buf);
4148 warning (0, "%Jcase value %qs not in enumerated type %qT",
4149 CASE_LABEL (label), buf, type);
4152 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
4153 Used to verify that case values match up with enumerator values. */
4156 match_case_to_enum (splay_tree_node node, void *data)
4158 tree label = (tree) node->value;
4159 tree type = (tree) data;
4161 /* Skip default case. */
4162 if (!CASE_LOW (label))
4165 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
4166 when we did our enum->case scan. Reset our scratch bit after. */
4167 if (!CASE_LOW_SEEN (label))
4168 match_case_to_enum_1 (CASE_LOW (label), type, label);
4170 CASE_LOW_SEEN (label) = 0;
4172 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
4173 not set, that means that CASE_HIGH did not appear when we did our
4174 enum->case scan. Reset our scratch bit after. */
4175 if (CASE_HIGH (label))
4177 if (!CASE_HIGH_SEEN (label))
4178 match_case_to_enum_1 (CASE_HIGH (label), type, label);
4180 CASE_HIGH_SEEN (label) = 0;
4186 /* Handle -Wswitch*. Called from the front end after parsing the
4187 switch construct. */
4188 /* ??? Should probably be somewhere generic, since other languages
4189 besides C and C++ would want this. At the moment, however, C/C++
4190 are the only tree-ssa languages that support enumerations at all,
4191 so the point is moot. */
4194 c_do_switch_warnings (splay_tree cases, location_t switch_location,
4195 tree type, tree cond)
4197 splay_tree_node default_node;
4198 splay_tree_node node;
4201 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
4204 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
4206 warning (OPT_Wswitch_default, "%Hswitch missing default case",
4209 /* From here on, we only care about about enumerated types. */
4210 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
4213 /* If the switch expression was an enumerated type, check that
4214 exactly all enumeration literals are covered by the cases.
4215 The check is made when -Wswitch was specified and there is no
4216 default case, or when -Wswitch-enum was specified. */
4218 if (!warn_switch_enum
4219 && !(warn_switch && !default_node))
4222 /* Clearing COND if it is not an integer constant simplifies
4223 the tests inside the loop below. */
4224 if (TREE_CODE (cond) != INTEGER_CST)
4227 /* The time complexity here is O(N*lg(N)) worst case, but for the
4228 common case of monotonically increasing enumerators, it is
4229 O(N), since the nature of the splay tree will keep the next
4230 element adjacent to the root at all times. */
4232 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
4234 tree value = TREE_VALUE (chain);
4235 node = splay_tree_lookup (cases, (splay_tree_key) value);
4238 /* Mark the CASE_LOW part of the case entry as seen. */
4239 tree label = (tree) node->value;
4240 CASE_LOW_SEEN (label) = 1;
4244 /* Even though there wasn't an exact match, there might be a
4245 case range which includes the enumator's value. */
4246 node = splay_tree_predecessor (cases, (splay_tree_key) value);
4247 if (node && CASE_HIGH ((tree) node->value))
4249 tree label = (tree) node->value;
4250 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
4253 /* If we match the upper bound exactly, mark the CASE_HIGH
4254 part of the case entry as seen. */
4256 CASE_HIGH_SEEN (label) = 1;
4261 /* We've now determined that this enumerated literal isn't
4262 handled by the case labels of the switch statement. */
4264 /* If the switch expression is a constant, we only really care
4265 about whether that constant is handled by the switch. */
4266 if (cond && tree_int_cst_compare (cond, value))
4269 warning (0, "%Henumeration value %qE not handled in switch",
4270 &switch_location, TREE_PURPOSE (chain));
4273 /* Warn if there are case expressions that don't correspond to
4274 enumerators. This can occur since C and C++ don't enforce
4275 type-checking of assignments to enumeration variables.
4277 The time complexity here is now always O(N) worst case, since
4278 we should have marked both the lower bound and upper bound of
4279 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
4280 above. This scan also resets those fields. */
4281 splay_tree_foreach (cases, match_case_to_enum, type);
4284 /* Finish an expression taking the address of LABEL (an
4285 IDENTIFIER_NODE). Returns an expression for the address. */
4288 finish_label_address_expr (tree label)
4293 pedwarn ("taking the address of a label is non-standard");
4295 if (label == error_mark_node)
4296 return error_mark_node;
4298 label = lookup_label (label);
4299 if (label == NULL_TREE)
4300 result = null_pointer_node;
4303 TREE_USED (label) = 1;
4304 result = build1 (ADDR_EXPR, ptr_type_node, label);
4305 /* The current function in not necessarily uninlinable.
4306 Computed gotos are incompatible with inlining, but the value
4307 here could be used only in a diagnostic, for example. */
4313 /* Hook used by expand_expr to expand language-specific tree codes. */
4314 /* The only things that should go here are bits needed to expand
4315 constant initializers. Everything else should be handled by the
4316 gimplification routines. */
4319 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
4320 int modifier /* Actually enum_modifier. */,
4323 switch (TREE_CODE (exp))
4325 case COMPOUND_LITERAL_EXPR:
4327 /* Initialize the anonymous variable declared in the compound
4328 literal, then return the variable. */
4329 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4330 emit_local_var (decl);
4331 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
4340 /* Generate the RTL for the body of FNDECL. */
4343 c_expand_body (tree fndecl)
4345 tree_rest_of_compilation (fndecl);
4348 /* Hook used by staticp to handle language-specific tree codes. */
4351 c_staticp (tree exp)
4353 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4354 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4359 /* Given a boolean expression ARG, return a tree representing an increment
4360 or decrement (as indicated by CODE) of ARG. The front end must check for
4361 invalid cases (e.g., decrement in C++). */
4363 boolean_increment (enum tree_code code, tree arg)
4366 tree true_res = boolean_true_node;
4368 arg = stabilize_reference (arg);
4371 case PREINCREMENT_EXPR:
4372 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4374 case POSTINCREMENT_EXPR:
4375 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4376 arg = save_expr (arg);
4377 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4378 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4380 case PREDECREMENT_EXPR:
4381 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4382 invert_truthvalue (arg));
4384 case POSTDECREMENT_EXPR:
4385 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4386 invert_truthvalue (arg));
4387 arg = save_expr (arg);
4388 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4389 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4394 TREE_SIDE_EFFECTS (val) = 1;
4398 /* Built-in macros for stddef.h, that require macros defined in this
4401 c_stddef_cpp_builtins(void)
4403 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4404 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4405 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4406 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4407 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4408 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4412 c_init_attributes (void)
4414 /* Fill in the built_in_attributes array. */
4415 #define DEF_ATTR_NULL_TREE(ENUM) \
4416 built_in_attributes[(int) ENUM] = NULL_TREE;
4417 #define DEF_ATTR_INT(ENUM, VALUE) \
4418 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4419 #define DEF_ATTR_IDENT(ENUM, STRING) \
4420 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4421 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4422 built_in_attributes[(int) ENUM] \
4423 = tree_cons (built_in_attributes[(int) PURPOSE], \
4424 built_in_attributes[(int) VALUE], \
4425 built_in_attributes[(int) CHAIN]);
4426 #include "builtin-attrs.def"
4427 #undef DEF_ATTR_NULL_TREE
4429 #undef DEF_ATTR_IDENT
4430 #undef DEF_ATTR_TREE_LIST
4433 /* Attribute handlers common to C front ends. */
4435 /* Handle a "packed" attribute; arguments as in
4436 struct attribute_spec.handler. */
4439 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4440 int flags, bool *no_add_attrs)
4444 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4445 *node = build_variant_type_copy (*node);
4446 TYPE_PACKED (*node) = 1;
4448 else if (TREE_CODE (*node) == FIELD_DECL)
4450 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4451 warning (OPT_Wattributes,
4452 "%qE attribute ignored for field of type %qT",
4453 name, TREE_TYPE (*node));
4455 DECL_PACKED (*node) = 1;
4457 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4458 used for DECL_REGISTER. It wouldn't mean anything anyway.
4459 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4460 that changes what the typedef is typing. */
4463 warning (OPT_Wattributes, "%qE attribute ignored", name);
4464 *no_add_attrs = true;
4470 /* Handle a "nocommon" attribute; arguments as in
4471 struct attribute_spec.handler. */
4474 handle_nocommon_attribute (tree *node, tree name,
4475 tree ARG_UNUSED (args),
4476 int ARG_UNUSED (flags), bool *no_add_attrs)
4478 if (TREE_CODE (*node) == VAR_DECL)
4479 DECL_COMMON (*node) = 0;
4482 warning (OPT_Wattributes, "%qE attribute ignored", name);
4483 *no_add_attrs = true;
4489 /* Handle a "common" attribute; arguments as in
4490 struct attribute_spec.handler. */
4493 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4494 int ARG_UNUSED (flags), bool *no_add_attrs)
4496 if (TREE_CODE (*node) == VAR_DECL)
4497 DECL_COMMON (*node) = 1;
4500 warning (OPT_Wattributes, "%qE attribute ignored", name);
4501 *no_add_attrs = true;
4507 /* Handle a "noreturn" attribute; arguments as in
4508 struct attribute_spec.handler. */
4511 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4512 int ARG_UNUSED (flags), bool *no_add_attrs)
4514 tree type = TREE_TYPE (*node);
4516 /* See FIXME comment in c_common_attribute_table. */
4517 if (TREE_CODE (*node) == FUNCTION_DECL)
4518 TREE_THIS_VOLATILE (*node) = 1;
4519 else if (TREE_CODE (type) == POINTER_TYPE
4520 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4522 = build_pointer_type
4523 (build_type_variant (TREE_TYPE (type),
4524 TYPE_READONLY (TREE_TYPE (type)), 1));
4527 warning (OPT_Wattributes, "%qE attribute ignored", name);
4528 *no_add_attrs = true;
4534 /* Handle a "hot" and attribute; arguments as in
4535 struct attribute_spec.handler. */
4538 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4539 int ARG_UNUSED (flags), bool *no_add_attrs)
4541 if (TREE_CODE (*node) == FUNCTION_DECL)
4543 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
4545 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4547 *no_add_attrs = true;
4549 /* Do nothing else, just set the attribute. We'll get at
4550 it later with lookup_attribute. */
4554 warning (OPT_Wattributes, "%qE attribute ignored", name);
4555 *no_add_attrs = true;
4560 /* Handle a "cold" and attribute; arguments as in
4561 struct attribute_spec.handler. */
4564 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4565 int ARG_UNUSED (flags), bool *no_add_attrs)
4567 if (TREE_CODE (*node) == FUNCTION_DECL)
4569 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
4571 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4573 *no_add_attrs = true;
4575 /* Do nothing else, just set the attribute. We'll get at
4576 it later with lookup_attribute. */
4580 warning (OPT_Wattributes, "%qE attribute ignored", name);
4581 *no_add_attrs = true;
4587 /* Handle a "noinline" attribute; arguments as in
4588 struct attribute_spec.handler. */
4591 handle_noinline_attribute (tree *node, tree name,
4592 tree ARG_UNUSED (args),
4593 int ARG_UNUSED (flags), bool *no_add_attrs)
4595 if (TREE_CODE (*node) == FUNCTION_DECL)
4596 DECL_UNINLINABLE (*node) = 1;
4599 warning (OPT_Wattributes, "%qE attribute ignored", name);
4600 *no_add_attrs = true;
4606 /* Handle a "always_inline" attribute; arguments as in
4607 struct attribute_spec.handler. */
4610 handle_always_inline_attribute (tree *node, tree name,
4611 tree ARG_UNUSED (args),
4612 int ARG_UNUSED (flags),
4615 if (TREE_CODE (*node) == FUNCTION_DECL)
4617 /* Do nothing else, just set the attribute. We'll get at
4618 it later with lookup_attribute. */
4622 warning (OPT_Wattributes, "%qE attribute ignored", name);
4623 *no_add_attrs = true;
4629 /* Handle a "gnu_inline" attribute; arguments as in
4630 struct attribute_spec.handler. */
4633 handle_gnu_inline_attribute (tree *node, tree name,
4634 tree ARG_UNUSED (args),
4635 int ARG_UNUSED (flags),
4638 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4640 /* Do nothing else, just set the attribute. We'll get at
4641 it later with lookup_attribute. */
4645 warning (OPT_Wattributes, "%qE attribute ignored", name);
4646 *no_add_attrs = true;
4652 /* Handle a "flatten" attribute; arguments as in
4653 struct attribute_spec.handler. */
4656 handle_flatten_attribute (tree *node, tree name,
4657 tree args ATTRIBUTE_UNUSED,
4658 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4660 if (TREE_CODE (*node) == FUNCTION_DECL)
4661 /* Do nothing else, just set the attribute. We'll get at
4662 it later with lookup_attribute. */
4666 warning (OPT_Wattributes, "%qE attribute ignored", name);
4667 *no_add_attrs = true;
4674 /* Handle a "used" attribute; arguments as in
4675 struct attribute_spec.handler. */
4678 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4679 int ARG_UNUSED (flags), bool *no_add_attrs)
4683 if (TREE_CODE (node) == FUNCTION_DECL
4684 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4686 TREE_USED (node) = 1;
4687 DECL_PRESERVE_P (node) = 1;
4691 warning (OPT_Wattributes, "%qE attribute ignored", name);
4692 *no_add_attrs = true;
4698 /* Handle a "unused" attribute; arguments as in
4699 struct attribute_spec.handler. */
4702 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4703 int flags, bool *no_add_attrs)
4709 if (TREE_CODE (decl) == PARM_DECL
4710 || TREE_CODE (decl) == VAR_DECL
4711 || TREE_CODE (decl) == FUNCTION_DECL
4712 || TREE_CODE (decl) == LABEL_DECL
4713 || TREE_CODE (decl) == TYPE_DECL)
4714 TREE_USED (decl) = 1;
4717 warning (OPT_Wattributes, "%qE attribute ignored", name);
4718 *no_add_attrs = true;
4723 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4724 *node = build_variant_type_copy (*node);
4725 TREE_USED (*node) = 1;
4731 /* Handle a "externally_visible" attribute; arguments as in
4732 struct attribute_spec.handler. */
4735 handle_externally_visible_attribute (tree *pnode, tree name,
4736 tree ARG_UNUSED (args),
4737 int ARG_UNUSED (flags),
4742 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
4744 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
4745 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
4747 warning (OPT_Wattributes,
4748 "%qE attribute have effect only on public objects", name);
4749 *no_add_attrs = true;
4754 warning (OPT_Wattributes, "%qE attribute ignored", name);
4755 *no_add_attrs = true;
4761 /* Handle a "const" attribute; arguments as in
4762 struct attribute_spec.handler. */
4765 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4766 int ARG_UNUSED (flags), bool *no_add_attrs)
4768 tree type = TREE_TYPE (*node);
4770 /* See FIXME comment on noreturn in c_common_attribute_table. */
4771 if (TREE_CODE (*node) == FUNCTION_DECL)
4772 TREE_READONLY (*node) = 1;
4773 else if (TREE_CODE (type) == POINTER_TYPE
4774 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4776 = build_pointer_type
4777 (build_type_variant (TREE_TYPE (type), 1,
4778 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4781 warning (OPT_Wattributes, "%qE attribute ignored", name);
4782 *no_add_attrs = true;
4788 /* Handle a "transparent_union" attribute; arguments as in
4789 struct attribute_spec.handler. */
4792 handle_transparent_union_attribute (tree *node, tree name,
4793 tree ARG_UNUSED (args), int flags,
4798 *no_add_attrs = true;
4802 if (TREE_CODE (*node) != TYPE_DECL)
4804 node = &TREE_TYPE (*node);
4807 else if (TYPE_P (*node))
4812 if (TREE_CODE (type) == UNION_TYPE)
4814 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4815 the code in finish_struct. */
4816 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4818 if (TYPE_FIELDS (type) == NULL_TREE
4819 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4822 /* A type variant isn't good enough, since we don't a cast
4823 to such a type removed as a no-op. */
4824 *node = type = build_duplicate_type (type);
4827 TYPE_TRANSPARENT_UNION (type) = 1;
4832 warning (OPT_Wattributes, "%qE attribute ignored", name);
4836 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
4837 get the requested priority for a constructor or destructor,
4838 possibly issuing diagnostics for invalid or reserved
4841 static priority_type
4842 get_priority (tree args, bool is_destructor)
4848 return DEFAULT_INIT_PRIORITY;
4850 if (!SUPPORTS_INIT_PRIORITY)
4853 error ("destructor priorities are not supported");
4855 error ("constructor priorities are not supported");
4856 return DEFAULT_INIT_PRIORITY;
4859 arg = TREE_VALUE (args);
4860 if (!host_integerp (arg, /*pos=*/0)
4861 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4864 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
4865 if (pri < 0 || pri > MAX_INIT_PRIORITY)
4868 if (pri <= MAX_RESERVED_INIT_PRIORITY)
4872 "destructor priorities from 0 to %d are reserved "
4873 "for the implementation",
4874 MAX_RESERVED_INIT_PRIORITY);
4877 "constructor priorities from 0 to %d are reserved "
4878 "for the implementation",
4879 MAX_RESERVED_INIT_PRIORITY);
4885 error ("destructor priorities must be integers from 0 to %d inclusive",
4888 error ("constructor priorities must be integers from 0 to %d inclusive",
4890 return DEFAULT_INIT_PRIORITY;
4893 /* Handle a "constructor" attribute; arguments as in
4894 struct attribute_spec.handler. */
4897 handle_constructor_attribute (tree *node, tree name, tree args,
4898 int ARG_UNUSED (flags),
4902 tree type = TREE_TYPE (decl);
4904 if (TREE_CODE (decl) == FUNCTION_DECL
4905 && TREE_CODE (type) == FUNCTION_TYPE
4906 && decl_function_context (decl) == 0)
4908 priority_type priority;
4909 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4910 priority = get_priority (args, /*is_destructor=*/false);
4911 SET_DECL_INIT_PRIORITY (decl, priority);
4912 TREE_USED (decl) = 1;
4916 warning (OPT_Wattributes, "%qE attribute ignored", name);
4917 *no_add_attrs = true;
4923 /* Handle a "destructor" attribute; arguments as in
4924 struct attribute_spec.handler. */
4927 handle_destructor_attribute (tree *node, tree name, tree args,
4928 int ARG_UNUSED (flags),
4932 tree type = TREE_TYPE (decl);
4934 if (TREE_CODE (decl) == FUNCTION_DECL
4935 && TREE_CODE (type) == FUNCTION_TYPE
4936 && decl_function_context (decl) == 0)
4938 priority_type priority;
4939 DECL_STATIC_DESTRUCTOR (decl) = 1;
4940 priority = get_priority (args, /*is_destructor=*/true);
4941 SET_DECL_FINI_PRIORITY (decl, priority);
4942 TREE_USED (decl) = 1;
4946 warning (OPT_Wattributes, "%qE attribute ignored", name);
4947 *no_add_attrs = true;
4953 /* Handle a "mode" attribute; arguments as in
4954 struct attribute_spec.handler. */
4957 handle_mode_attribute (tree *node, tree name, tree args,
4958 int ARG_UNUSED (flags), bool *no_add_attrs)
4962 *no_add_attrs = true;
4964 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4965 warning (OPT_Wattributes, "%qE attribute ignored", name);
4969 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4970 int len = strlen (p);
4971 enum machine_mode mode = VOIDmode;
4975 if (len > 4 && p[0] == '_' && p[1] == '_'
4976 && p[len - 1] == '_' && p[len - 2] == '_')
4978 char *newp = (char *) alloca (len - 1);
4980 strcpy (newp, &p[2]);
4981 newp[len - 4] = '\0';
4985 /* Change this type to have a type with the specified mode.
4986 First check for the special modes. */
4987 if (!strcmp (p, "byte"))
4989 else if (!strcmp (p, "word"))
4991 else if (!strcmp (p, "pointer"))
4994 for (j = 0; j < NUM_MACHINE_MODES; j++)
4995 if (!strcmp (p, GET_MODE_NAME (j)))
4997 mode = (enum machine_mode) j;
5001 if (mode == VOIDmode)
5003 error ("unknown machine mode %qs", p);
5008 switch (GET_MODE_CLASS (mode))
5011 case MODE_PARTIAL_INT:
5013 case MODE_DECIMAL_FLOAT:
5014 valid_mode = targetm.scalar_mode_supported_p (mode);
5017 case MODE_COMPLEX_INT:
5018 case MODE_COMPLEX_FLOAT:
5019 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
5022 case MODE_VECTOR_INT:
5023 case MODE_VECTOR_FLOAT:
5024 warning (OPT_Wattributes, "specifying vector types with "
5025 "__attribute__ ((mode)) is deprecated");
5026 warning (OPT_Wattributes,
5027 "use __attribute__ ((vector_size)) instead");
5028 valid_mode = vector_mode_valid_p (mode);
5036 error ("unable to emulate %qs", p);
5040 if (POINTER_TYPE_P (type))
5042 tree (*fn)(tree, enum machine_mode, bool);
5044 if (!targetm.valid_pointer_mode (mode))
5046 error ("invalid pointer mode %qs", p);
5050 if (TREE_CODE (type) == POINTER_TYPE)
5051 fn = build_pointer_type_for_mode;
5053 fn = build_reference_type_for_mode;
5054 typefm = fn (TREE_TYPE (type), mode, false);
5057 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
5059 if (typefm == NULL_TREE)
5061 error ("no data type for mode %qs", p);
5064 else if (TREE_CODE (type) == ENUMERAL_TYPE)
5066 /* For enumeral types, copy the precision from the integer
5067 type returned above. If not an INTEGER_TYPE, we can't use
5068 this mode for this type. */
5069 if (TREE_CODE (typefm) != INTEGER_TYPE)
5071 error ("cannot use mode %qs for enumeral types", p);
5075 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
5077 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
5082 /* We cannot build a type variant, as there's code that assumes
5083 that TYPE_MAIN_VARIANT has the same mode. This includes the
5084 debug generators. Instead, create a subrange type. This
5085 results in all of the enumeral values being emitted only once
5086 in the original, and the subtype gets them by reference. */
5087 if (TYPE_UNSIGNED (type))
5088 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
5090 typefm = make_signed_type (TYPE_PRECISION (typefm));
5091 TREE_TYPE (typefm) = type;
5094 else if (VECTOR_MODE_P (mode)
5095 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
5096 : TREE_CODE (type) != TREE_CODE (typefm))
5098 error ("mode %qs applied to inappropriate type", p);
5108 /* Handle a "section" attribute; arguments as in
5109 struct attribute_spec.handler. */
5112 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5113 int ARG_UNUSED (flags), bool *no_add_attrs)
5117 if (targetm.have_named_sections)
5119 user_defined_section_attribute = true;
5121 if ((TREE_CODE (decl) == FUNCTION_DECL
5122 || TREE_CODE (decl) == VAR_DECL)
5123 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5125 if (TREE_CODE (decl) == VAR_DECL
5126 && current_function_decl != NULL_TREE
5127 && !TREE_STATIC (decl))
5129 error ("%Jsection attribute cannot be specified for "
5130 "local variables", decl);
5131 *no_add_attrs = true;
5134 /* The decl may have already been given a section attribute
5135 from a previous declaration. Ensure they match. */
5136 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5137 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5138 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5140 error ("section of %q+D conflicts with previous declaration",
5142 *no_add_attrs = true;
5145 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5149 error ("section attribute not allowed for %q+D", *node);
5150 *no_add_attrs = true;
5155 error ("%Jsection attributes are not supported for this target", *node);
5156 *no_add_attrs = true;
5162 /* Handle a "aligned" attribute; arguments as in
5163 struct attribute_spec.handler. */
5166 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5167 int flags, bool *no_add_attrs)
5169 tree decl = NULL_TREE;
5172 tree align_expr = (args ? TREE_VALUE (args)
5173 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5179 type = &TREE_TYPE (decl);
5180 is_type = TREE_CODE (*node) == TYPE_DECL;
5182 else if (TYPE_P (*node))
5183 type = node, is_type = 1;
5185 if (TREE_CODE (align_expr) != INTEGER_CST)
5187 error ("requested alignment is not a constant");
5188 *no_add_attrs = true;
5190 else if ((i = tree_log2 (align_expr)) == -1)
5192 error ("requested alignment is not a power of 2");
5193 *no_add_attrs = true;
5195 else if (i > HOST_BITS_PER_INT - 2)
5197 error ("requested alignment is too large");
5198 *no_add_attrs = true;
5202 /* If we have a TYPE_DECL, then copy the type, so that we
5203 don't accidentally modify a builtin type. See pushdecl. */
5204 if (decl && TREE_TYPE (decl) != error_mark_node
5205 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5207 tree tt = TREE_TYPE (decl);
5208 *type = build_variant_type_copy (*type);
5209 DECL_ORIGINAL_TYPE (decl) = tt;
5210 TYPE_NAME (*type) = decl;
5211 TREE_USED (*type) = TREE_USED (decl);
5212 TREE_TYPE (decl) = *type;
5214 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5215 *type = build_variant_type_copy (*type);
5217 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5218 TYPE_USER_ALIGN (*type) = 1;
5220 else if (TREE_CODE (decl) != VAR_DECL
5221 && TREE_CODE (decl) != FIELD_DECL)
5223 error ("alignment may not be specified for %q+D", decl);
5224 *no_add_attrs = true;
5228 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5229 DECL_USER_ALIGN (decl) = 1;
5235 /* Handle a "weak" attribute; arguments as in
5236 struct attribute_spec.handler. */
5239 handle_weak_attribute (tree *node, tree name,
5240 tree ARG_UNUSED (args),
5241 int ARG_UNUSED (flags),
5242 bool * ARG_UNUSED (no_add_attrs))
5244 if (TREE_CODE (*node) == FUNCTION_DECL
5245 || TREE_CODE (*node) == VAR_DECL)
5246 declare_weak (*node);
5248 warning (OPT_Wattributes, "%qE attribute ignored", name);
5254 /* Handle an "alias" attribute; arguments as in
5255 struct attribute_spec.handler. */
5258 handle_alias_attribute (tree *node, tree name, tree args,
5259 int ARG_UNUSED (flags), bool *no_add_attrs)
5263 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5264 || (TREE_CODE (decl) != FUNCTION_DECL
5265 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
5266 /* A static variable declaration is always a tentative definition,
5267 but the alias is a non-tentative definition which overrides. */
5268 || (TREE_CODE (decl) != FUNCTION_DECL
5269 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
5271 error ("%q+D defined both normally and as an alias", decl);
5272 *no_add_attrs = true;
5275 /* Note that the very first time we process a nested declaration,
5276 decl_function_context will not be set. Indeed, *would* never
5277 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
5278 we do below. After such frobbery, pushdecl would set the context.
5279 In any case, this is never what we want. */
5280 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
5284 id = TREE_VALUE (args);
5285 if (TREE_CODE (id) != STRING_CST)
5287 error ("alias argument not a string");
5288 *no_add_attrs = true;
5291 id = get_identifier (TREE_STRING_POINTER (id));
5292 /* This counts as a use of the object pointed to. */
5295 if (TREE_CODE (decl) == FUNCTION_DECL)
5296 DECL_INITIAL (decl) = error_mark_node;
5299 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5300 DECL_EXTERNAL (decl) = 1;
5302 DECL_EXTERNAL (decl) = 0;
5303 TREE_STATIC (decl) = 1;
5308 warning (OPT_Wattributes, "%qE attribute ignored", name);
5309 *no_add_attrs = true;
5315 /* Handle a "weakref" attribute; arguments as in struct
5316 attribute_spec.handler. */
5319 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5320 int flags, bool *no_add_attrs)
5322 tree attr = NULL_TREE;
5324 /* We must ignore the attribute when it is associated with
5325 local-scoped decls, since attribute alias is ignored and many
5326 such symbols do not even have a DECL_WEAK field. */
5327 if (decl_function_context (*node) || current_function_decl)
5329 warning (OPT_Wattributes, "%qE attribute ignored", name);
5330 *no_add_attrs = true;
5334 /* The idea here is that `weakref("name")' mutates into `weakref,
5335 alias("name")', and weakref without arguments, in turn,
5336 implicitly adds weak. */
5340 attr = tree_cons (get_identifier ("alias"), args, attr);
5341 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
5343 *no_add_attrs = true;
5345 decl_attributes (node, attr, flags);
5349 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
5350 error ("%Jweakref attribute must appear before alias attribute",
5353 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
5354 and that isn't supported; and because it wants to add it to
5355 the list of weak decls, which isn't helpful. */
5356 DECL_WEAK (*node) = 1;
5362 /* Handle an "visibility" attribute; arguments as in
5363 struct attribute_spec.handler. */
5366 handle_visibility_attribute (tree *node, tree name, tree args,
5367 int ARG_UNUSED (flags),
5368 bool *ARG_UNUSED (no_add_attrs))
5371 tree id = TREE_VALUE (args);
5372 enum symbol_visibility vis;
5376 if (TREE_CODE (*node) == ENUMERAL_TYPE)
5378 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
5380 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
5384 else if (TYPE_FIELDS (*node))
5386 error ("%qE attribute ignored because %qT is already defined",
5391 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
5393 warning (OPT_Wattributes, "%qE attribute ignored", name);
5397 if (TREE_CODE (id) != STRING_CST)
5399 error ("visibility argument not a string");
5403 /* If this is a type, set the visibility on the type decl. */
5406 decl = TYPE_NAME (decl);
5409 if (TREE_CODE (decl) == IDENTIFIER_NODE)
5411 warning (OPT_Wattributes, "%qE attribute ignored on types",
5417 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
5418 vis = VISIBILITY_DEFAULT;
5419 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
5420 vis = VISIBILITY_INTERNAL;
5421 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
5422 vis = VISIBILITY_HIDDEN;
5423 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
5424 vis = VISIBILITY_PROTECTED;
5427 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
5428 vis = VISIBILITY_DEFAULT;
5431 if (DECL_VISIBILITY_SPECIFIED (decl)
5432 && vis != DECL_VISIBILITY (decl)
5433 && lookup_attribute ("visibility", (TYPE_P (*node)
5434 ? TYPE_ATTRIBUTES (*node)
5435 : DECL_ATTRIBUTES (decl))))
5436 error ("%qD redeclared with different visibility", decl);
5438 DECL_VISIBILITY (decl) = vis;
5439 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5441 /* Go ahead and attach the attribute to the node as well. This is needed
5442 so we can determine whether we have VISIBILITY_DEFAULT because the
5443 visibility was not specified, or because it was explicitly overridden
5444 from the containing scope. */
5449 /* Determine the ELF symbol visibility for DECL, which is either a
5450 variable or a function. It is an error to use this function if a
5451 definition of DECL is not available in this translation unit.
5452 Returns true if the final visibility has been determined by this
5453 function; false if the caller is free to make additional
5457 c_determine_visibility (tree decl)
5459 gcc_assert (TREE_CODE (decl) == VAR_DECL
5460 || TREE_CODE (decl) == FUNCTION_DECL);
5462 /* If the user explicitly specified the visibility with an
5463 attribute, honor that. DECL_VISIBILITY will have been set during
5464 the processing of the attribute. We check for an explicit
5465 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
5466 to distinguish the use of an attribute from the use of a "#pragma
5467 GCC visibility push(...)"; in the latter case we still want other
5468 considerations to be able to overrule the #pragma. */
5469 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
5472 /* Anything that is exported must have default visibility. */
5473 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5474 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
5476 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5477 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5481 /* Set default visibility to whatever the user supplied with
5482 visibility_specified depending on #pragma GCC visibility. */
5483 if (!DECL_VISIBILITY_SPECIFIED (decl))
5485 DECL_VISIBILITY (decl) = default_visibility;
5486 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
5491 /* Handle an "tls_model" attribute; arguments as in
5492 struct attribute_spec.handler. */
5495 handle_tls_model_attribute (tree *node, tree name, tree args,
5496 int ARG_UNUSED (flags), bool *no_add_attrs)
5500 enum tls_model kind;
5502 *no_add_attrs = true;
5504 if (!DECL_THREAD_LOCAL_P (decl))
5506 warning (OPT_Wattributes, "%qE attribute ignored", name);
5510 kind = DECL_TLS_MODEL (decl);
5511 id = TREE_VALUE (args);
5512 if (TREE_CODE (id) != STRING_CST)
5514 error ("tls_model argument not a string");
5518 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
5519 kind = TLS_MODEL_LOCAL_EXEC;
5520 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
5521 kind = TLS_MODEL_INITIAL_EXEC;
5522 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
5523 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
5524 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5525 kind = TLS_MODEL_GLOBAL_DYNAMIC;
5527 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5529 DECL_TLS_MODEL (decl) = kind;
5533 /* Handle a "no_instrument_function" attribute; arguments as in
5534 struct attribute_spec.handler. */
5537 handle_no_instrument_function_attribute (tree *node, tree name,
5538 tree ARG_UNUSED (args),
5539 int ARG_UNUSED (flags),
5544 if (TREE_CODE (decl) != FUNCTION_DECL)
5546 error ("%J%qE attribute applies only to functions", decl, name);
5547 *no_add_attrs = true;
5549 else if (DECL_INITIAL (decl))
5551 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5552 *no_add_attrs = true;
5555 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5560 /* Handle a "malloc" attribute; arguments as in
5561 struct attribute_spec.handler. */
5564 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5565 int ARG_UNUSED (flags), bool *no_add_attrs)
5567 if (TREE_CODE (*node) == FUNCTION_DECL
5568 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
5569 DECL_IS_MALLOC (*node) = 1;
5572 warning (OPT_Wattributes, "%qE attribute ignored", name);
5573 *no_add_attrs = true;
5579 /* Handle a "returns_twice" attribute; arguments as in
5580 struct attribute_spec.handler. */
5583 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5584 int ARG_UNUSED (flags), bool *no_add_attrs)
5586 if (TREE_CODE (*node) == FUNCTION_DECL)
5587 DECL_IS_RETURNS_TWICE (*node) = 1;
5590 warning (OPT_Wattributes, "%qE attribute ignored", name);
5591 *no_add_attrs = true;
5597 /* Handle a "no_limit_stack" attribute; arguments as in
5598 struct attribute_spec.handler. */
5601 handle_no_limit_stack_attribute (tree *node, tree name,
5602 tree ARG_UNUSED (args),
5603 int ARG_UNUSED (flags),
5608 if (TREE_CODE (decl) != FUNCTION_DECL)
5610 error ("%J%qE attribute applies only to functions", decl, name);
5611 *no_add_attrs = true;
5613 else if (DECL_INITIAL (decl))
5615 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5616 *no_add_attrs = true;
5619 DECL_NO_LIMIT_STACK (decl) = 1;
5624 /* Handle a "pure" attribute; arguments as in
5625 struct attribute_spec.handler. */
5628 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5629 int ARG_UNUSED (flags), bool *no_add_attrs)
5631 if (TREE_CODE (*node) == FUNCTION_DECL)
5632 DECL_IS_PURE (*node) = 1;
5633 /* ??? TODO: Support types. */
5636 warning (OPT_Wattributes, "%qE attribute ignored", name);
5637 *no_add_attrs = true;
5643 /* Handle a "no vops" attribute; arguments as in
5644 struct attribute_spec.handler. */
5647 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5648 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5649 bool *ARG_UNUSED (no_add_attrs))
5651 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5652 DECL_IS_NOVOPS (*node) = 1;
5656 /* Handle a "deprecated" attribute; arguments as in
5657 struct attribute_spec.handler. */
5660 handle_deprecated_attribute (tree *node, tree name,
5661 tree ARG_UNUSED (args), int flags,
5664 tree type = NULL_TREE;
5666 tree what = NULL_TREE;
5671 type = TREE_TYPE (decl);
5673 if (TREE_CODE (decl) == TYPE_DECL
5674 || TREE_CODE (decl) == PARM_DECL
5675 || TREE_CODE (decl) == VAR_DECL
5676 || TREE_CODE (decl) == FUNCTION_DECL
5677 || TREE_CODE (decl) == FIELD_DECL)
5678 TREE_DEPRECATED (decl) = 1;
5682 else if (TYPE_P (*node))
5684 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5685 *node = build_variant_type_copy (*node);
5686 TREE_DEPRECATED (*node) = 1;
5694 *no_add_attrs = true;
5695 if (type && TYPE_NAME (type))
5697 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5698 what = TYPE_NAME (*node);
5699 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5700 && DECL_NAME (TYPE_NAME (type)))
5701 what = DECL_NAME (TYPE_NAME (type));
5704 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
5706 warning (OPT_Wattributes, "%qE attribute ignored", name);
5712 /* Handle a "vector_size" attribute; arguments as in
5713 struct attribute_spec.handler. */
5716 handle_vector_size_attribute (tree *node, tree name, tree args,
5717 int ARG_UNUSED (flags),
5720 unsigned HOST_WIDE_INT vecsize, nunits;
5721 enum machine_mode orig_mode;
5722 tree type = *node, new_type, size;
5724 *no_add_attrs = true;
5726 size = TREE_VALUE (args);
5728 if (!host_integerp (size, 1))
5730 warning (OPT_Wattributes, "%qE attribute ignored", name);
5734 /* Get the vector size (in bytes). */
5735 vecsize = tree_low_cst (size, 1);
5737 /* We need to provide for vector pointers, vector arrays, and
5738 functions returning vectors. For example:
5740 __attribute__((vector_size(16))) short *foo;
5742 In this case, the mode is SI, but the type being modified is
5743 HI, so we need to look further. */
5745 while (POINTER_TYPE_P (type)
5746 || TREE_CODE (type) == FUNCTION_TYPE
5747 || TREE_CODE (type) == METHOD_TYPE
5748 || TREE_CODE (type) == ARRAY_TYPE)
5749 type = TREE_TYPE (type);
5751 /* Get the mode of the type being modified. */
5752 orig_mode = TYPE_MODE (type);
5754 if (TREE_CODE (type) == RECORD_TYPE
5755 || TREE_CODE (type) == UNION_TYPE
5756 || TREE_CODE (type) == VECTOR_TYPE
5757 || (!SCALAR_FLOAT_MODE_P (orig_mode)
5758 && GET_MODE_CLASS (orig_mode) != MODE_INT)
5759 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
5761 error ("invalid vector type for attribute %qE", name);
5765 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
5767 error ("vector size not an integral multiple of component size");
5773 error ("zero vector size");
5777 /* Calculate how many units fit in the vector. */
5778 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5779 if (nunits & (nunits - 1))
5781 error ("number of components of the vector not a power of two");
5785 new_type = build_vector_type (type, nunits);
5787 /* Build back pointers if needed. */
5788 *node = reconstruct_complex_type (*node, new_type);
5793 /* Handle the "nonnull" attribute. */
5795 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5796 tree args, int ARG_UNUSED (flags),
5800 unsigned HOST_WIDE_INT attr_arg_num;
5802 /* If no arguments are specified, all pointer arguments should be
5803 non-null. Verify a full prototype is given so that the arguments
5804 will have the correct types when we actually check them later. */
5807 if (!TYPE_ARG_TYPES (type))
5809 error ("nonnull attribute without arguments on a non-prototype");
5810 *no_add_attrs = true;
5815 /* Argument list specified. Verify that each argument number references
5816 a pointer argument. */
5817 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5820 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
5822 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
5824 error ("nonnull argument has invalid operand number (argument %lu)",
5825 (unsigned long) attr_arg_num);
5826 *no_add_attrs = true;
5830 argument = TYPE_ARG_TYPES (type);
5833 for (ck_num = 1; ; ck_num++)
5835 if (!argument || ck_num == arg_num)
5837 argument = TREE_CHAIN (argument);
5841 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5843 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5844 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5845 *no_add_attrs = true;
5849 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5851 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5852 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5853 *no_add_attrs = true;
5862 /* Check the argument list of a function call for null in argument slots
5863 that are marked as requiring a non-null pointer argument. The NARGS
5864 arguments are passed in the array ARGARRAY.
5868 check_function_nonnull (tree attrs, int nargs, tree *argarray)
5873 for (a = attrs; a; a = TREE_CHAIN (a))
5875 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5877 args = TREE_VALUE (a);
5879 /* Walk the argument list. If we encounter an argument number we
5880 should check for non-null, do it. If the attribute has no args,
5881 then every pointer argument is checked (in which case the check
5882 for pointer type is done in check_nonnull_arg). */
5883 for (i = 0; i < nargs; i++)
5885 if (!args || nonnull_check_p (args, i + 1))
5886 check_function_arguments_recurse (check_nonnull_arg, NULL,
5894 /* Check that the Nth argument of a function call (counting backwards
5895 from the end) is a (pointer)0. The NARGS arguments are passed in the
5899 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
5901 tree attr = lookup_attribute ("sentinel", attrs);
5909 /* Skip over the named arguments. */
5910 while (typelist && len < nargs)
5912 typelist = TREE_CHAIN (typelist);
5916 if (TREE_VALUE (attr))
5918 tree p = TREE_VALUE (TREE_VALUE (attr));
5919 pos = TREE_INT_CST_LOW (p);
5922 /* The sentinel must be one of the varargs, i.e.
5923 in position >= the number of fixed arguments. */
5924 if ((nargs - 1 - pos) < len)
5926 warning (OPT_Wformat,
5927 "not enough variable arguments to fit a sentinel");
5931 /* Validate the sentinel. */
5932 sentinel = argarray[nargs - 1 - pos];
5933 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
5934 || !integer_zerop (sentinel))
5935 /* Although __null (in C++) is only an integer we allow it
5936 nevertheless, as we are guaranteed that it's exactly
5937 as wide as a pointer, and we don't want to force
5938 users to cast the NULL they have written there.
5939 We warn with -Wstrict-null-sentinel, though. */
5940 && (warn_strict_null_sentinel || null_node != sentinel))
5941 warning (OPT_Wformat, "missing sentinel in function call");
5945 /* Helper for check_function_nonnull; given a list of operands which
5946 must be non-null in ARGS, determine if operand PARAM_NUM should be
5950 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5952 unsigned HOST_WIDE_INT arg_num = 0;
5954 for (; args; args = TREE_CHAIN (args))
5956 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5960 if (arg_num == param_num)
5966 /* Check that the function argument PARAM (which is operand number
5967 PARAM_NUM) is non-null. This is called by check_function_nonnull
5968 via check_function_arguments_recurse. */
5971 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5972 unsigned HOST_WIDE_INT param_num)
5974 /* Just skip checking the argument if it's not a pointer. This can
5975 happen if the "nonnull" attribute was given without an operand
5976 list (which means to check every pointer argument). */
5978 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5981 if (integer_zerop (param))
5982 warning (OPT_Wnonnull, "null argument where non-null required "
5983 "(argument %lu)", (unsigned long) param_num);
5986 /* Helper for nonnull attribute handling; fetch the operand number
5987 from the attribute argument list. */
5990 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5992 /* Verify the arg number is a constant. */
5993 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5994 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5997 *valp = TREE_INT_CST_LOW (arg_num_expr);
6001 /* Handle a "nothrow" attribute; arguments as in
6002 struct attribute_spec.handler. */
6005 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6006 int ARG_UNUSED (flags), bool *no_add_attrs)
6008 if (TREE_CODE (*node) == FUNCTION_DECL)
6009 TREE_NOTHROW (*node) = 1;
6010 /* ??? TODO: Support types. */
6013 warning (OPT_Wattributes, "%qE attribute ignored", name);
6014 *no_add_attrs = true;
6020 /* Handle a "cleanup" attribute; arguments as in
6021 struct attribute_spec.handler. */
6024 handle_cleanup_attribute (tree *node, tree name, tree args,
6025 int ARG_UNUSED (flags), bool *no_add_attrs)
6028 tree cleanup_id, cleanup_decl;
6030 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
6031 for global destructors in C++. This requires infrastructure that
6032 we don't have generically at the moment. It's also not a feature
6033 we'd be missing too much, since we do have attribute constructor. */
6034 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
6036 warning (OPT_Wattributes, "%qE attribute ignored", name);
6037 *no_add_attrs = true;
6041 /* Verify that the argument is a function in scope. */
6042 /* ??? We could support pointers to functions here as well, if
6043 that was considered desirable. */
6044 cleanup_id = TREE_VALUE (args);
6045 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
6047 error ("cleanup argument not an identifier");
6048 *no_add_attrs = true;
6051 cleanup_decl = lookup_name (cleanup_id);
6052 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
6054 error ("cleanup argument not a function");
6055 *no_add_attrs = true;
6059 /* That the function has proper type is checked with the
6060 eventual call to build_function_call. */
6065 /* Handle a "warn_unused_result" attribute. No special handling. */
6068 handle_warn_unused_result_attribute (tree *node, tree name,
6069 tree ARG_UNUSED (args),
6070 int ARG_UNUSED (flags), bool *no_add_attrs)
6072 /* Ignore the attribute for functions not returning any value. */
6073 if (VOID_TYPE_P (TREE_TYPE (*node)))
6075 warning (OPT_Wattributes, "%qE attribute ignored", name);
6076 *no_add_attrs = true;
6082 /* Handle a "sentinel" attribute. */
6085 handle_sentinel_attribute (tree *node, tree name, tree args,
6086 int ARG_UNUSED (flags), bool *no_add_attrs)
6088 tree params = TYPE_ARG_TYPES (*node);
6092 warning (OPT_Wattributes,
6093 "%qE attribute requires prototypes with named arguments", name);
6094 *no_add_attrs = true;
6098 while (TREE_CHAIN (params))
6099 params = TREE_CHAIN (params);
6101 if (VOID_TYPE_P (TREE_VALUE (params)))
6103 warning (OPT_Wattributes,
6104 "%qE attribute only applies to variadic functions", name);
6105 *no_add_attrs = true;
6111 tree position = TREE_VALUE (args);
6113 if (TREE_CODE (position) != INTEGER_CST)
6115 warning (OPT_Wattributes,
6116 "requested position is not an integer constant");
6117 *no_add_attrs = true;
6121 if (tree_int_cst_lt (position, integer_zero_node))
6123 warning (OPT_Wattributes,
6124 "requested position is less than zero");
6125 *no_add_attrs = true;
6133 /* Check for valid arguments being passed to a function.
6134 ATTRS is a list of attributes. There are NARGS arguments in the array
6135 ARGARRAY. TYPELIST is the list of argument types for the function.
6138 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
6140 /* Check for null being passed in a pointer argument that must be
6141 non-null. We also need to do this if format checking is enabled. */
6144 check_function_nonnull (attrs, nargs, argarray);
6146 /* Check for errors in format strings. */
6148 if (warn_format || warn_missing_format_attribute)
6149 check_function_format (attrs, nargs, argarray);
6152 check_function_sentinel (attrs, nargs, argarray, typelist);
6155 /* Generic argument checking recursion routine. PARAM is the argument to
6156 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
6157 once the argument is resolved. CTX is context for the callback. */
6159 check_function_arguments_recurse (void (*callback)
6160 (void *, tree, unsigned HOST_WIDE_INT),
6161 void *ctx, tree param,
6162 unsigned HOST_WIDE_INT param_num)
6164 if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
6165 && (TYPE_PRECISION (TREE_TYPE (param))
6166 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
6168 /* Strip coercion. */
6169 check_function_arguments_recurse (callback, ctx,
6170 TREE_OPERAND (param, 0), param_num);
6174 if (TREE_CODE (param) == CALL_EXPR)
6176 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
6178 bool found_format_arg = false;
6180 /* See if this is a call to a known internationalization function
6181 that modifies a format arg. Such a function may have multiple
6182 format_arg attributes (for example, ngettext). */
6184 for (attrs = TYPE_ATTRIBUTES (type);
6186 attrs = TREE_CHAIN (attrs))
6187 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
6190 tree format_num_expr;
6193 call_expr_arg_iterator iter;
6195 /* Extract the argument number, which was previously checked
6197 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
6199 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
6200 && !TREE_INT_CST_HIGH (format_num_expr));
6202 format_num = TREE_INT_CST_LOW (format_num_expr);
6204 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
6206 inner_arg = next_call_expr_arg (&iter), i++)
6207 if (i == format_num)
6209 check_function_arguments_recurse (callback, ctx,
6210 inner_arg, param_num);
6211 found_format_arg = true;
6216 /* If we found a format_arg attribute and did a recursive check,
6217 we are done with checking this argument. Otherwise, we continue
6218 and this will be considered a non-literal. */
6219 if (found_format_arg)
6223 if (TREE_CODE (param) == COND_EXPR)
6225 /* Check both halves of the conditional expression. */
6226 check_function_arguments_recurse (callback, ctx,
6227 TREE_OPERAND (param, 1), param_num);
6228 check_function_arguments_recurse (callback, ctx,
6229 TREE_OPERAND (param, 2), param_num);
6233 (*callback) (ctx, param, param_num);
6236 /* Function to help qsort sort FIELD_DECLs by name order. */
6239 field_decl_cmp (const void *x_p, const void *y_p)
6241 const tree *const x = (const tree *const) x_p;
6242 const tree *const y = (const tree *const) y_p;
6244 if (DECL_NAME (*x) == DECL_NAME (*y))
6245 /* A nontype is "greater" than a type. */
6246 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6247 if (DECL_NAME (*x) == NULL_TREE)
6249 if (DECL_NAME (*y) == NULL_TREE)
6251 if (DECL_NAME (*x) < DECL_NAME (*y))
6257 gt_pointer_operator new_value;
6261 /* This routine compares two fields like field_decl_cmp but using the
6262 pointer operator in resort_data. */
6265 resort_field_decl_cmp (const void *x_p, const void *y_p)
6267 const tree *const x = (const tree *const) x_p;
6268 const tree *const y = (const tree *const) y_p;
6270 if (DECL_NAME (*x) == DECL_NAME (*y))
6271 /* A nontype is "greater" than a type. */
6272 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6273 if (DECL_NAME (*x) == NULL_TREE)
6275 if (DECL_NAME (*y) == NULL_TREE)
6278 tree d1 = DECL_NAME (*x);
6279 tree d2 = DECL_NAME (*y);
6280 resort_data.new_value (&d1, resort_data.cookie);
6281 resort_data.new_value (&d2, resort_data.cookie);
6288 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
6291 resort_sorted_fields (void *obj,
6292 void * ARG_UNUSED (orig_obj),
6293 gt_pointer_operator new_value,
6296 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
6297 resort_data.new_value = new_value;
6298 resort_data.cookie = cookie;
6299 qsort (&sf->elts[0], sf->len, sizeof (tree),
6300 resort_field_decl_cmp);
6303 /* Subroutine of c_parse_error.
6304 Return the result of concatenating LHS and RHS. RHS is really
6305 a string literal, its first character is indicated by RHS_START and
6306 RHS_SIZE is its length (including the terminating NUL character).
6308 The caller is responsible for deleting the returned pointer. */
6311 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
6313 const int lhs_size = strlen (lhs);
6314 char *result = XNEWVEC (char, lhs_size + rhs_size);
6315 strncpy (result, lhs, lhs_size);
6316 strncpy (result + lhs_size, rhs_start, rhs_size);
6320 /* Issue the error given by GMSGID, indicating that it occurred before
6321 TOKEN, which had the associated VALUE. */
6324 c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
6326 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
6328 char *message = NULL;
6330 if (token == CPP_EOF)
6331 message = catenate_messages (gmsgid, " at end of input");
6332 else if (token == CPP_CHAR || token == CPP_WCHAR)
6334 unsigned int val = TREE_INT_CST_LOW (value);
6335 const char *const ell = (token == CPP_CHAR) ? "" : "L";
6336 if (val <= UCHAR_MAX && ISGRAPH (val))
6337 message = catenate_messages (gmsgid, " before %s'%c'");
6339 message = catenate_messages (gmsgid, " before %s'\\x%x'");
6341 error (message, ell, val);
6345 else if (token == CPP_STRING || token == CPP_WSTRING)
6346 message = catenate_messages (gmsgid, " before string constant");
6347 else if (token == CPP_NUMBER)
6348 message = catenate_messages (gmsgid, " before numeric constant");
6349 else if (token == CPP_NAME)
6351 message = catenate_messages (gmsgid, " before %qE");
6352 error (message, value);
6356 else if (token == CPP_PRAGMA)
6357 message = catenate_messages (gmsgid, " before %<#pragma%>");
6358 else if (token == CPP_PRAGMA_EOL)
6359 message = catenate_messages (gmsgid, " before end of line");
6360 else if (token < N_TTYPES)
6362 message = catenate_messages (gmsgid, " before %qs token");
6363 error (message, cpp_type2name (token));
6375 #undef catenate_messages
6378 /* Walk a gimplified function and warn for functions whose return value is
6379 ignored and attribute((warn_unused_result)) is set. This is done before
6380 inlining, so we don't have to worry about that. */
6383 c_warn_unused_result (tree *top_p)
6386 tree_stmt_iterator i;
6389 switch (TREE_CODE (t))
6391 case STATEMENT_LIST:
6392 for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
6393 c_warn_unused_result (tsi_stmt_ptr (i));
6397 c_warn_unused_result (&COND_EXPR_THEN (t));
6398 c_warn_unused_result (&COND_EXPR_ELSE (t));
6401 c_warn_unused_result (&BIND_EXPR_BODY (t));
6403 case TRY_FINALLY_EXPR:
6404 case TRY_CATCH_EXPR:
6405 c_warn_unused_result (&TREE_OPERAND (t, 0));
6406 c_warn_unused_result (&TREE_OPERAND (t, 1));
6409 c_warn_unused_result (&CATCH_BODY (t));
6411 case EH_FILTER_EXPR:
6412 c_warn_unused_result (&EH_FILTER_FAILURE (t));
6419 /* This is a naked call, as opposed to a CALL_EXPR nested inside
6420 a MODIFY_EXPR. All calls whose value is ignored should be
6421 represented like this. Look for the attribute. */
6422 fdecl = get_callee_fndecl (t);
6424 ftype = TREE_TYPE (fdecl);
6427 ftype = TREE_TYPE (CALL_EXPR_FN (t));
6428 /* Look past pointer-to-function to the function type itself. */
6429 ftype = TREE_TYPE (ftype);
6432 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
6435 warning (0, "%Hignoring return value of %qD, "
6436 "declared with attribute warn_unused_result",
6437 EXPR_LOCUS (t), fdecl);
6439 warning (0, "%Hignoring return value of function "
6440 "declared with attribute warn_unused_result",
6446 /* Not a container, not a call, or a call whose value is used. */
6451 /* Convert a character from the host to the target execution character
6452 set. cpplib handles this, mostly. */
6455 c_common_to_target_charset (HOST_WIDE_INT c)
6457 /* Character constants in GCC proper are sign-extended under -fsigned-char,
6458 zero-extended under -fno-signed-char. cpplib insists that characters
6459 and character constants are always unsigned. Hence we must convert
6461 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
6463 uc = cpp_host_to_exec_charset (parse_in, uc);
6465 if (flag_signed_char)
6466 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
6467 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
6472 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
6473 component references, with STOP_REF, or alternatively an INDIRECT_REF of
6474 NULL, at the bottom; much like the traditional rendering of offsetof as a
6475 macro. Returns the folded and properly cast result. */
6478 fold_offsetof_1 (tree expr, tree stop_ref)
6480 enum tree_code code = PLUS_EXPR;
6483 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
6484 return size_zero_node;
6486 switch (TREE_CODE (expr))
6492 error ("cannot apply %<offsetof%> to static data member %qD", expr);
6493 return error_mark_node;
6496 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
6497 return error_mark_node;
6500 gcc_assert (integer_zerop (expr));
6501 return size_zero_node;
6505 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6506 gcc_assert (base == error_mark_node || base == size_zero_node);
6510 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6511 if (base == error_mark_node)
6514 t = TREE_OPERAND (expr, 1);
6515 if (DECL_C_BIT_FIELD (t))
6517 error ("attempt to take address of bit-field structure "
6519 return error_mark_node;
6521 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
6522 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
6527 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6528 if (base == error_mark_node)
6531 t = TREE_OPERAND (expr, 1);
6532 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
6535 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
6537 t = convert (sizetype, t);
6538 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
6542 /* Handle static members of volatile structs. */
6543 t = TREE_OPERAND (expr, 1);
6544 gcc_assert (TREE_CODE (t) == VAR_DECL);
6545 return fold_offsetof_1 (t, stop_ref);
6551 return size_binop (code, base, off);
6555 fold_offsetof (tree expr, tree stop_ref)
6557 /* Convert back from the internal sizetype to size_t. */
6558 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
6561 /* Print an error message for an invalid lvalue. USE says
6562 how the lvalue is being used and so selects the error message. */
6565 lvalue_error (enum lvalue_use use)
6570 error ("lvalue required as left operand of assignment");
6573 error ("lvalue required as increment operand");
6576 error ("lvalue required as decrement operand");
6579 error ("lvalue required as unary %<&%> operand");
6582 error ("lvalue required in asm statement");
6589 /* *PTYPE is an incomplete array. Complete it with a domain based on
6590 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6591 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6592 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
6595 complete_array_type (tree *ptype, tree initial_value, bool do_default)
6597 tree maxindex, type, main_type, elt, unqual_elt;
6598 int failure = 0, quals;
6599 hashval_t hashcode = 0;
6601 maxindex = size_zero_node;
6604 if (TREE_CODE (initial_value) == STRING_CST)
6607 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6608 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6610 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6612 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6614 if (VEC_empty (constructor_elt, v))
6618 maxindex = integer_minus_one_node;
6623 unsigned HOST_WIDE_INT cnt;
6624 constructor_elt *ce;
6626 if (VEC_index (constructor_elt, v, 0)->index)
6627 maxindex = fold_convert (sizetype,
6628 VEC_index (constructor_elt,
6630 curindex = maxindex;
6633 VEC_iterate (constructor_elt, v, cnt, ce);
6637 curindex = fold_convert (sizetype, ce->index);
6639 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6641 if (tree_int_cst_lt (maxindex, curindex))
6642 maxindex = curindex;
6648 /* Make an error message unless that happened already. */
6649 if (initial_value != error_mark_node)
6661 elt = TREE_TYPE (type);
6662 quals = TYPE_QUALS (strip_array_types (elt));
6666 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6668 /* Using build_distinct_type_copy and modifying things afterward instead
6669 of using build_array_type to create a new type preserves all of the
6670 TYPE_LANG_FLAG_? bits that the front end may have set. */
6671 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6672 TREE_TYPE (main_type) = unqual_elt;
6673 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6674 layout_type (main_type);
6676 /* Make sure we have the canonical MAIN_TYPE. */
6677 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
6678 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
6680 main_type = type_hash_canon (hashcode, main_type);
6685 type = c_build_qualified_type (main_type, quals);
6692 /* Used to help initialize the builtin-types.def table. When a type of
6693 the correct size doesn't exist, use error_mark_node instead of NULL.
6694 The later results in segfaults even when a decl using the type doesn't
6698 builtin_type_for_size (int size, bool unsignedp)
6700 tree type = lang_hooks.types.type_for_size (size, unsignedp);
6701 return type ? type : error_mark_node;
6704 /* A helper function for resolve_overloaded_builtin in resolving the
6705 overloaded __sync_ builtins. Returns a positive power of 2 if the
6706 first operand of PARAMS is a pointer to a supported data type.
6707 Returns 0 if an error is encountered. */
6710 sync_resolve_size (tree function, tree params)
6717 error ("too few arguments to function %qE", function);
6721 type = TREE_TYPE (TREE_VALUE (params));
6722 if (TREE_CODE (type) != POINTER_TYPE)
6725 type = TREE_TYPE (type);
6726 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6729 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6730 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
6734 error ("incompatible type for argument %d of %qE", 1, function);
6738 /* A helper function for resolve_overloaded_builtin. Adds casts to
6739 PARAMS to make arguments match up with those of FUNCTION. Drops
6740 the variadic arguments at the end. Returns false if some error
6741 was encountered; true on success. */
6744 sync_resolve_params (tree orig_function, tree function, tree params)
6746 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6750 /* We've declared the implementation functions to use "volatile void *"
6751 as the pointer parameter, so we shouldn't get any complaints from the
6752 call to check_function_arguments what ever type the user used. */
6753 arg_types = TREE_CHAIN (arg_types);
6754 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6757 /* For the rest of the values, we need to cast these to FTYPE, so that we
6758 don't get warnings for passing pointer types, etc. */
6759 while (arg_types != void_list_node)
6763 params = TREE_CHAIN (params);
6766 error ("too few arguments to function %qE", orig_function);
6770 /* ??? Ideally for the first conversion we'd use convert_for_assignment
6771 so that we get warnings for anything that doesn't match the pointer
6772 type. This isn't portable across the C and C++ front ends atm. */
6773 val = TREE_VALUE (params);
6774 val = convert (ptype, val);
6775 val = convert (TREE_VALUE (arg_types), val);
6776 TREE_VALUE (params) = val;
6778 arg_types = TREE_CHAIN (arg_types);
6782 /* The definition of these primitives is variadic, with the remaining
6783 being "an optional list of variables protected by the memory barrier".
6784 No clue what that's supposed to mean, precisely, but we consider all
6785 call-clobbered variables to be protected so we're safe. */
6786 TREE_CHAIN (params) = NULL;
6791 /* A helper function for resolve_overloaded_builtin. Adds a cast to
6792 RESULT to make it match the type of the first pointer argument in
6796 sync_resolve_return (tree params, tree result)
6798 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6799 ptype = TYPE_MAIN_VARIANT (ptype);
6800 return convert (ptype, result);
6803 /* Some builtin functions are placeholders for other expressions. This
6804 function should be called immediately after parsing the call expression
6805 before surrounding code has committed to the type of the expression.
6807 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6808 PARAMS is the argument list for the call. The return value is non-null
6809 when expansion is complete, and null if normal processing should
6813 resolve_overloaded_builtin (tree function, tree params)
6815 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
6816 switch (DECL_BUILT_IN_CLASS (function))
6818 case BUILT_IN_NORMAL:
6821 if (targetm.resolve_overloaded_builtin)
6822 return targetm.resolve_overloaded_builtin (function, params);
6829 /* Handle BUILT_IN_NORMAL here. */
6832 case BUILT_IN_FETCH_AND_ADD_N:
6833 case BUILT_IN_FETCH_AND_SUB_N:
6834 case BUILT_IN_FETCH_AND_OR_N:
6835 case BUILT_IN_FETCH_AND_AND_N:
6836 case BUILT_IN_FETCH_AND_XOR_N:
6837 case BUILT_IN_FETCH_AND_NAND_N:
6838 case BUILT_IN_ADD_AND_FETCH_N:
6839 case BUILT_IN_SUB_AND_FETCH_N:
6840 case BUILT_IN_OR_AND_FETCH_N:
6841 case BUILT_IN_AND_AND_FETCH_N:
6842 case BUILT_IN_XOR_AND_FETCH_N:
6843 case BUILT_IN_NAND_AND_FETCH_N:
6844 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6845 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6846 case BUILT_IN_LOCK_TEST_AND_SET_N:
6847 case BUILT_IN_LOCK_RELEASE_N:
6849 int n = sync_resolve_size (function, params);
6850 tree new_function, result;
6853 return error_mark_node;
6855 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6856 if (!sync_resolve_params (function, new_function, params))
6857 return error_mark_node;
6859 result = build_function_call (new_function, params);
6860 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6861 && orig_code != BUILT_IN_LOCK_RELEASE_N)
6862 result = sync_resolve_return (params, result);
6872 /* Ignoring their sign, return true if two scalar types are the same. */
6874 same_scalar_type_ignoring_signedness (tree t1, tree t2)
6876 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6878 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6879 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6881 /* Equality works here because c_common_signed_type uses
6882 TYPE_MAIN_VARIANT. */
6883 return lang_hooks.types.signed_type (t1)
6884 == lang_hooks.types.signed_type (t2);
6887 /* Check for missing format attributes on function pointers. LTYPE is
6888 the new type or left-hand side type. RTYPE is the old type or
6889 right-hand side type. Returns TRUE if LTYPE is missing the desired
6893 check_missing_format_attribute (tree ltype, tree rtype)
6895 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6898 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6899 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6904 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6905 if (is_attribute_p ("format", TREE_PURPOSE (la)))
6913 /* Subscripting with type char is likely to lose on a machine where
6914 chars are signed. So warn on any machine, but optionally. Don't
6915 warn for unsigned char since that type is safe. Don't warn for
6916 signed char because anyone who uses that must have done so
6917 deliberately. Furthermore, we reduce the false positive load by
6918 warning only for non-constant value of type char. */
6921 warn_array_subscript_with_type_char (tree index)
6923 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
6924 && TREE_CODE (index) != INTEGER_CST)
6925 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
6928 /* Implement -Wparentheses for the unexpected C precedence rules, to
6929 cover cases like x + y << z which readers are likely to
6930 misinterpret. We have seen an expression in which CODE is a binary
6931 operator used to combine expressions headed by CODE_LEFT and
6932 CODE_RIGHT. CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
6933 means that that side of the expression was not formed using a
6934 binary operator, or it was enclosed in parentheses. */
6937 warn_about_parentheses (enum tree_code code, enum tree_code code_left,
6938 enum tree_code code_right)
6940 if (!warn_parentheses)
6943 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
6945 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6946 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6947 warning (OPT_Wparentheses,
6948 "suggest parentheses around + or - inside shift");
6951 if (code == TRUTH_ORIF_EXPR)
6953 if (code_left == TRUTH_ANDIF_EXPR
6954 || code_right == TRUTH_ANDIF_EXPR)
6955 warning (OPT_Wparentheses,
6956 "suggest parentheses around && within ||");
6959 if (code == BIT_IOR_EXPR)
6961 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
6962 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6963 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
6964 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6965 warning (OPT_Wparentheses,
6966 "suggest parentheses around arithmetic in operand of |");
6967 /* Check cases like x|y==z */
6968 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6969 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6970 warning (OPT_Wparentheses,
6971 "suggest parentheses around comparison in operand of |");
6974 if (code == BIT_XOR_EXPR)
6976 if (code_left == BIT_AND_EXPR
6977 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6978 || code_right == BIT_AND_EXPR
6979 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6980 warning (OPT_Wparentheses,
6981 "suggest parentheses around arithmetic in operand of ^");
6982 /* Check cases like x^y==z */
6983 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6984 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6985 warning (OPT_Wparentheses,
6986 "suggest parentheses around comparison in operand of ^");
6989 if (code == BIT_AND_EXPR)
6991 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6992 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6993 warning (OPT_Wparentheses,
6994 "suggest parentheses around + or - in operand of &");
6995 /* Check cases like x&y==z */
6996 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6997 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6998 warning (OPT_Wparentheses,
6999 "suggest parentheses around comparison in operand of &");
7002 if (code == EQ_EXPR || code == NE_EXPR)
7004 if (TREE_CODE_CLASS (code_left) == tcc_comparison
7005 || TREE_CODE_CLASS (code_right) == tcc_comparison)
7006 warning (OPT_Wparentheses,
7007 "suggest parentheses around comparison in operand of %s",
7008 code == EQ_EXPR ? "==" : "!=");
7010 else if (TREE_CODE_CLASS (code) == tcc_comparison)
7012 if ((TREE_CODE_CLASS (code_left) == tcc_comparison
7013 && code_left != NE_EXPR && code_left != EQ_EXPR)
7014 || (TREE_CODE_CLASS (code_right) == tcc_comparison
7015 && code_right != NE_EXPR && code_right != EQ_EXPR))
7016 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
7017 "have their mathematical meaning");
7021 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
7024 warn_for_unused_label (tree label)
7026 if (!TREE_USED (label))
7028 if (DECL_INITIAL (label))
7029 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
7031 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
7035 #ifndef TARGET_HAS_TARGETCM
7036 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
7039 /* Warn for division by zero according to the value of DIVISOR. */
7042 warn_for_div_by_zero (tree divisor)
7044 /* If DIVISOR is zero, and has integral type, issue a warning about
7045 division by zero. Do not issue a warning if DIVISOR has a
7046 floating-point type, since we consider 0.0/0.0 a valid way of
7047 generating a NaN. */
7048 if (skip_evaluation == 0 && integer_zerop (divisor))
7049 warning (OPT_Wdiv_by_zero, "division by zero");
7052 #include "gt-c-common.h"