re PR driver/31353 (gcc --help=target gives a linker error.)
[official-gcc.git] / gcc / c-common.c
blob8f71e6916ed7ce0c879bdd1979bb18523f04fd36
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
10 version.
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
15 for more details.
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
20 02110-1301, USA. */
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "intl.h"
27 #include "tree.h"
28 #include "flags.h"
29 #include "output.h"
30 #include "c-pragma.h"
31 #include "rtl.h"
32 #include "ggc.h"
33 #include "varray.h"
34 #include "expr.h"
35 #include "c-common.h"
36 #include "diagnostic.h"
37 #include "tm_p.h"
38 #include "obstack.h"
39 #include "cpplib.h"
40 #include "target.h"
41 #include "langhooks.h"
42 #include "tree-inline.h"
43 #include "c-tree.h"
44 #include "toplev.h"
45 #include "tree-iterator.h"
46 #include "hashtab.h"
47 #include "tree-mudflap.h"
48 #include "opts.h"
49 #include "real.h"
50 #include "cgraph.h"
51 #include "target-def.h"
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. */
61 #ifndef SIZE_TYPE
62 #define SIZE_TYPE "long unsigned int"
63 #endif
65 #ifndef PID_TYPE
66 #define PID_TYPE "int"
67 #endif
69 #ifndef WCHAR_TYPE
70 #define WCHAR_TYPE "int"
71 #endif
73 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
74 #define MODIFIED_WCHAR_TYPE \
75 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
77 #ifndef PTRDIFF_TYPE
78 #define PTRDIFF_TYPE "long int"
79 #endif
81 #ifndef WINT_TYPE
82 #define WINT_TYPE "unsigned int"
83 #endif
85 #ifndef INTMAX_TYPE
86 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
87 ? "int" \
88 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
89 ? "long int" \
90 : "long long int"))
91 #endif
93 #ifndef UINTMAX_TYPE
94 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
95 ? "unsigned int" \
96 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
97 ? "long unsigned int" \
98 : "long long unsigned int"))
99 #endif
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.
183 tree void_list_node;
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. */
214 char flag_no_output;
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
234 user's namespace. */
235 int flag_iso;
237 /* Nonzero if -undef was given. It suppresses target built-in macros
238 and assertions. */
239 int flag_undef;
241 /* Nonzero means don't recognize the non-ANSI builtin functions. */
243 int flag_no_builtin;
245 /* Nonzero means don't recognize the non-ANSI builtin functions.
246 -ansi sets this. */
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'. */
267 int flag_no_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.). */
280 int warn_format;
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
284 size. */
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. */
313 int flag_isoc94;
315 /* Nonzero means use the ISO C99 dialect of C. */
317 int flag_isoc99;
319 /* Nonzero means that we have builtin functions, and main is an int. */
321 int flag_hosted = 1;
323 /* Warn if main is suspicious. */
325 int warn_main;
328 /* ObjC language option variables. */
331 /* Open and close the file for outputting class declarations, if
332 requested (ObjC). */
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
365 aren't. */
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
375 required. */
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. */
391 int flag_rtti = 1;
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
396 definitions. */
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. */
407 int flag_check_new;
409 /* Nonzero if we want to allow the use of experimental features that
410 are likely to become part of C++0x. */
412 int flag_cpp0x = 0;
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. */
427 int flag_weak = 1;
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. */
450 int flag_permissive;
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
460 statics. */
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. */
478 tree *ridpointers;
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. */
484 int skip_evaluation;
486 /* Information about how a function name is generated. */
487 struct fname_var_t
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},
504 {NULL, 0, 0},
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,
518 bool *);
519 static tree handle_gnu_inline_attribute (tree *, tree, tree, int,
520 bool *);
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,
525 bool *);
526 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_transparent_union_attribute (tree *, tree, tree,
528 int, bool *);
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,
538 bool *);
539 static tree handle_tls_model_attribute (tree *, tree, tree, int,
540 bool *);
541 static tree handle_no_instrument_function_attribute (tree *, tree,
542 tree, int, bool *);
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,
546 bool *);
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,
550 bool *);
551 static tree handle_vector_size_attribute (tree *, tree, tree, int,
552 bool *);
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,
557 bool *);
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
661 descendants. */
663 const struct attribute_spec c_common_format_attribute_table[] =
665 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
666 { "format", 3, 3, false, true, true,
667 handle_format_attribute },
668 { "format_arg", 1, 1, false, true, true,
669 handle_format_arg_attribute },
670 { NULL, 0, 0, false, false, false, NULL }
673 /* Functions called automatically at the beginning and end of execution. */
675 tree static_ctors;
676 tree static_dtors;
678 /* Push current bindings for the function name VAR_DECLS. */
680 void
681 start_fname_decls (void)
683 unsigned ix;
684 tree saved = NULL_TREE;
686 for (ix = 0; fname_vars[ix].decl; ix++)
688 tree decl = *fname_vars[ix].decl;
690 if (decl)
692 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
693 *fname_vars[ix].decl = NULL_TREE;
696 if (saved || saved_function_name_decls)
697 /* Normally they'll have been NULL, so only push if we've got a
698 stack, or they are non-NULL. */
699 saved_function_name_decls = tree_cons (saved, NULL_TREE,
700 saved_function_name_decls);
703 /* Finish up the current bindings, adding them into the current function's
704 statement tree. This must be done _before_ finish_stmt_tree is called.
705 If there is no current function, we must be at file scope and no statements
706 are involved. Pop the previous bindings. */
708 void
709 finish_fname_decls (void)
711 unsigned ix;
712 tree stmts = NULL_TREE;
713 tree stack = saved_function_name_decls;
715 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
716 append_to_statement_list (TREE_VALUE (stack), &stmts);
718 if (stmts)
720 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
722 if (TREE_CODE (*bodyp) == BIND_EXPR)
723 bodyp = &BIND_EXPR_BODY (*bodyp);
725 append_to_statement_list_force (*bodyp, &stmts);
726 *bodyp = stmts;
729 for (ix = 0; fname_vars[ix].decl; ix++)
730 *fname_vars[ix].decl = NULL_TREE;
732 if (stack)
734 /* We had saved values, restore them. */
735 tree saved;
737 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
739 tree decl = TREE_PURPOSE (saved);
740 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
742 *fname_vars[ix].decl = decl;
744 stack = TREE_CHAIN (stack);
746 saved_function_name_decls = stack;
749 /* Return the text name of the current function, suitably prettified
750 by PRETTY_P. Return string must be freed by caller. */
752 const char *
753 fname_as_string (int pretty_p)
755 const char *name = "top level";
756 char *namep;
757 int vrb = 2;
759 if (!pretty_p)
761 name = "";
762 vrb = 0;
765 if (current_function_decl)
766 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
768 if (c_lex_string_translate)
770 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
771 cpp_string cstr = { 0, 0 }, strname;
773 namep = XNEWVEC (char, len);
774 snprintf (namep, len, "\"%s\"", name);
775 strname.text = (unsigned char *) namep;
776 strname.len = len - 1;
778 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
780 XDELETEVEC (namep);
781 return (char *) cstr.text;
784 else
785 namep = xstrdup (name);
787 return namep;
790 /* Expand DECL if it declares an entity not handled by the
791 common code. */
794 c_expand_decl (tree decl)
796 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
798 /* Let the back-end know about this variable. */
799 if (!anon_aggr_type_p (TREE_TYPE (decl)))
800 emit_local_var (decl);
801 else
802 expand_anon_union_decl (decl, NULL_TREE,
803 DECL_ANON_UNION_ELEMS (decl));
805 else
806 return 0;
808 return 1;
812 /* Return the VAR_DECL for a const char array naming the current
813 function. If the VAR_DECL has not yet been created, create it
814 now. RID indicates how it should be formatted and IDENTIFIER_NODE
815 ID is its name (unfortunately C and C++ hold the RID values of
816 keywords in different places, so we can't derive RID from ID in
817 this language independent code. */
819 tree
820 fname_decl (unsigned int rid, tree id)
822 unsigned ix;
823 tree decl = NULL_TREE;
825 for (ix = 0; fname_vars[ix].decl; ix++)
826 if (fname_vars[ix].rid == rid)
827 break;
829 decl = *fname_vars[ix].decl;
830 if (!decl)
832 /* If a tree is built here, it would normally have the lineno of
833 the current statement. Later this tree will be moved to the
834 beginning of the function and this line number will be wrong.
835 To avoid this problem set the lineno to 0 here; that prevents
836 it from appearing in the RTL. */
837 tree stmts;
838 location_t saved_location = input_location;
839 #ifdef USE_MAPPED_LOCATION
840 input_location = UNKNOWN_LOCATION;
841 #else
842 input_line = 0;
843 #endif
845 stmts = push_stmt_list ();
846 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
847 stmts = pop_stmt_list (stmts);
848 if (!IS_EMPTY_STMT (stmts))
849 saved_function_name_decls
850 = tree_cons (decl, stmts, saved_function_name_decls);
851 *fname_vars[ix].decl = decl;
852 input_location = saved_location;
854 if (!ix && !current_function_decl)
855 pedwarn ("%qD is not defined outside of function scope", decl);
857 return decl;
860 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
862 tree
863 fix_string_type (tree value)
865 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
866 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
867 int length = TREE_STRING_LENGTH (value);
868 int nchars;
869 tree e_type, i_type, a_type;
871 /* Compute the number of elements, for the array type. */
872 nchars = wide_flag ? length / wchar_bytes : length;
874 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
875 limit in C++98 Annex B is very large (65536) and is not normative,
876 so we do not diagnose it (warn_overlength_strings is forced off
877 in c_common_post_options). */
878 if (warn_overlength_strings)
880 const int nchars_max = flag_isoc99 ? 4095 : 509;
881 const int relevant_std = flag_isoc99 ? 99 : 90;
882 if (nchars - 1 > nchars_max)
883 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
884 separate the %d from the 'C'. 'ISO' should not be
885 translated, but it may be moved after 'C%d' in languages
886 where modifiers follow nouns. */
887 pedwarn ("string length %qd is greater than the length %qd "
888 "ISO C%d compilers are required to support",
889 nchars - 1, nchars_max, relevant_std);
892 /* Create the array type for the string constant. The ISO C++
893 standard says that a string literal has type `const char[N]' or
894 `const wchar_t[N]'. We use the same logic when invoked as a C
895 front-end with -Wwrite-strings.
896 ??? We should change the type of an expression depending on the
897 state of a warning flag. We should just be warning -- see how
898 this is handled in the C++ front-end for the deprecated implicit
899 conversion from string literals to `char*' or `wchar_t*'.
901 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
902 array type being the unqualified version of that type.
903 Therefore, if we are constructing an array of const char, we must
904 construct the matching unqualified array type first. The C front
905 end does not require this, but it does no harm, so we do it
906 unconditionally. */
907 e_type = wide_flag ? wchar_type_node : char_type_node;
908 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
909 a_type = build_array_type (e_type, i_type);
910 if (c_dialect_cxx() || warn_write_strings)
911 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
913 TREE_TYPE (value) = a_type;
914 TREE_CONSTANT (value) = 1;
915 TREE_INVARIANT (value) = 1;
916 TREE_READONLY (value) = 1;
917 TREE_STATIC (value) = 1;
918 return value;
921 /* Print a warning if a constant expression had overflow in folding.
922 Invoke this function on every expression that the language
923 requires to be a constant expression.
924 Note the ANSI C standard says it is erroneous for a
925 constant expression to overflow. */
927 void
928 constant_expression_warning (tree value)
930 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
931 || TREE_CODE (value) == VECTOR_CST
932 || TREE_CODE (value) == COMPLEX_CST)
933 && TREE_OVERFLOW (value)
934 && warn_overflow
935 && pedantic)
936 pedwarn ("overflow in constant expression");
939 /* Print a warning if an expression had overflow in folding and its
940 operands hadn't.
942 Invoke this function on every expression that
943 (1) appears in the source code, and
944 (2) is a constant expression that overflowed, and
945 (3) is not already checked by convert_and_check;
946 however, do not invoke this function on operands of explicit casts
947 or when the expression is the result of an operator and any operand
948 already overflowed. */
950 void
951 overflow_warning (tree value)
953 if (skip_evaluation) return;
955 switch (TREE_CODE (value))
957 case INTEGER_CST:
958 warning (OPT_Woverflow, "integer overflow in expression");
959 break;
961 case REAL_CST:
962 warning (OPT_Woverflow, "floating point overflow in expression");
963 break;
965 case VECTOR_CST:
966 warning (OPT_Woverflow, "vector overflow in expression");
967 break;
969 case COMPLEX_CST:
970 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
971 warning (OPT_Woverflow, "complex integer overflow in expression");
972 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
973 warning (OPT_Woverflow, "complex floating point overflow in expression");
974 break;
976 default:
977 break;
982 /* Warn about use of a logical || / && operator being used in a
983 context where it is likely that the bitwise equivalent was intended
984 by the programmer. CODE is the TREE_CODE of the operator, ARG1
985 and ARG2 the arguments. */
987 void
988 warn_logical_operator (enum tree_code code, tree arg1, tree
989 arg2)
991 switch (code)
993 case TRUTH_ANDIF_EXPR:
994 case TRUTH_ORIF_EXPR:
995 case TRUTH_OR_EXPR:
996 case TRUTH_AND_EXPR:
997 if (!TREE_NO_WARNING (arg1)
998 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
999 && !CONSTANT_CLASS_P (arg1)
1000 && TREE_CODE (arg2) == INTEGER_CST
1001 && !integer_zerop (arg2))
1003 warning (OPT_Wlogical_op,
1004 "logical %<%s%> with non-zero constant "
1005 "will always evaluate as true",
1006 ((code == TRUTH_ANDIF_EXPR)
1007 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1008 TREE_NO_WARNING (arg1) = true;
1010 break;
1011 default:
1012 break;
1017 /* Print a warning about casts that might indicate violation
1018 of strict aliasing rules if -Wstrict-aliasing is used and
1019 strict aliasing mode is in effect. OTYPE is the original
1020 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1022 void
1023 strict_aliasing_warning (tree otype, tree type, tree expr)
1025 if (flag_strict_aliasing && warn_strict_aliasing
1026 && POINTER_TYPE_P (type) && POINTER_TYPE_P (otype)
1027 && TREE_CODE (expr) == ADDR_EXPR
1028 && (DECL_P (TREE_OPERAND (expr, 0))
1029 || handled_component_p (TREE_OPERAND (expr, 0)))
1030 && !VOID_TYPE_P (TREE_TYPE (type)))
1032 /* Casting the address of an object to non void pointer. Warn
1033 if the cast breaks type based aliasing. */
1034 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
1035 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1036 "might break strict-aliasing rules");
1037 else
1039 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1040 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1042 if (!alias_sets_conflict_p (set1, set2))
1043 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1044 "pointer will break strict-aliasing rules");
1045 else if (warn_strict_aliasing > 1
1046 && !alias_sets_might_conflict_p (set1, set2))
1047 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1048 "pointer might break strict-aliasing rules");
1053 /* Print a warning about if (); or if () .. else; constructs
1054 via the special empty statement node that we create. INNER_THEN
1055 and INNER_ELSE are the statement lists of the if and the else
1056 block. */
1058 void
1059 empty_if_body_warning (tree inner_then, tree inner_else)
1061 if (TREE_CODE (inner_then) == STATEMENT_LIST
1062 && STATEMENT_LIST_TAIL (inner_then))
1063 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1065 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1066 && STATEMENT_LIST_TAIL (inner_else))
1067 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1069 if (IS_EMPTY_STMT (inner_then) && !inner_else)
1070 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1071 "in an %<if%> statement", EXPR_LOCUS (inner_then));
1073 else if (inner_else && IS_EMPTY_STMT (inner_else))
1074 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1075 "in an %<else%> statement", EXPR_LOCUS (inner_else));
1078 /* Warn for unlikely, improbable, or stupid DECL declarations
1079 of `main'. */
1081 void
1082 check_main_parameter_types (tree decl)
1084 tree args;
1085 int argct = 0;
1087 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1088 args = TREE_CHAIN (args))
1090 tree type = args ? TREE_VALUE (args) : 0;
1092 if (type == void_type_node || type == error_mark_node )
1093 break;
1095 ++argct;
1096 switch (argct)
1098 case 1:
1099 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1100 pedwarn ("first argument of %q+D should be %<int%>", decl);
1101 break;
1103 case 2:
1104 if (TREE_CODE (type) != POINTER_TYPE
1105 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1106 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1107 != char_type_node))
1108 pedwarn ("second argument of %q+D should be %<char **%>",
1109 decl);
1110 break;
1112 case 3:
1113 if (TREE_CODE (type) != POINTER_TYPE
1114 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1115 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1116 != char_type_node))
1117 pedwarn ("third argument of %q+D should probably be "
1118 "%<char **%>", decl);
1119 break;
1123 /* It is intentional that this message does not mention the third
1124 argument because it's only mentioned in an appendix of the
1125 standard. */
1126 if (argct > 0 && (argct < 2 || argct > 3))
1127 pedwarn ("%q+D takes only zero or two arguments", decl);
1130 /* True if vector types T1 and T2 can be converted to each other
1131 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1132 can only be converted with -flax-vector-conversions yet that is not
1133 in effect, emit a note telling the user about that option if such
1134 a note has not previously been emitted. */
1135 bool
1136 vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note)
1138 static bool emitted_lax_note = false;
1139 bool convertible_lax;
1141 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1142 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1143 return true;
1145 convertible_lax =
1146 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1147 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1148 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1149 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1150 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1152 if (!convertible_lax || flag_lax_vector_conversions)
1153 return convertible_lax;
1155 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1156 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2)))
1157 return true;
1159 if (emit_lax_note && !emitted_lax_note)
1161 emitted_lax_note = true;
1162 inform ("use -flax-vector-conversions to permit "
1163 "conversions between vectors with differing "
1164 "element types or numbers of subparts");
1167 return false;
1170 /* Warns if the conversion of EXPR to TYPE may alter a value.
1171 This is a helper function for warnings_for_convert_and_check. */
1173 static void
1174 conversion_warning (tree type, tree expr)
1176 bool give_warning = false;
1178 unsigned int formal_prec = TYPE_PRECISION (type);
1180 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1182 /* Warn for real constant that is not an exact integer converted
1183 to integer type. */
1184 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1185 && TREE_CODE (type) == INTEGER_TYPE)
1187 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1188 give_warning = true;
1190 /* Warn for an integer constant that does not fit into integer type. */
1191 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1192 && TREE_CODE (type) == INTEGER_TYPE
1193 && !int_fits_type_p (expr, type))
1195 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1196 warning (OPT_Wconversion,
1197 "negative integer implicitly converted to unsigned type");
1198 else
1199 give_warning = true;
1201 else if (TREE_CODE (type) == REAL_TYPE)
1203 /* Warn for an integer constant that does not fit into real type. */
1204 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1206 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1207 if (!exact_real_truncate (TYPE_MODE (type), &a))
1208 give_warning = true;
1210 /* Warn for a real constant that does not fit into a smaller
1211 real type. */
1212 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1213 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1215 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1216 if (!exact_real_truncate (TYPE_MODE (type), &a))
1217 give_warning = true;
1221 if (give_warning)
1222 warning (OPT_Wconversion,
1223 "conversion to %qT alters %qT constant value",
1224 type, TREE_TYPE (expr));
1226 else /* 'expr' is not a constant. */
1228 /* Warn for real types converted to integer types. */
1229 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1230 && TREE_CODE (type) == INTEGER_TYPE)
1231 give_warning = true;
1233 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1234 && TREE_CODE (type) == INTEGER_TYPE)
1236 /* Warn for integer types converted to smaller integer types. */
1237 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr))
1238 /* When they are the same width but different signedness,
1239 then the value may change. */
1240 || (formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1241 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1242 /* Even when converted to a bigger type, if the type is
1243 unsigned but expr is signed, then negative values
1244 will be changed. */
1245 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1246 give_warning = true;
1249 /* Warn for integer types converted to real types if and only if
1250 all the range of values of the integer type cannot be
1251 represented by the real type. */
1252 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1253 && TREE_CODE (type) == REAL_TYPE)
1255 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1256 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1257 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1258 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1260 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1261 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1262 give_warning = true;
1265 /* Warn for real types converted to smaller real types. */
1266 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1267 && TREE_CODE (type) == REAL_TYPE
1268 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1269 give_warning = true;
1272 if (give_warning)
1273 warning (OPT_Wconversion,
1274 "conversion to %qT from %qT may alter its value",
1275 type, TREE_TYPE (expr));
1279 /* Produce warnings after a conversion. RESULT is the result of
1280 converting EXPR to TYPE. This is a helper function for
1281 convert_and_check and cp_convert_and_check. */
1283 void
1284 warnings_for_convert_and_check (tree type, tree expr, tree result)
1286 if (TREE_CODE (expr) == INTEGER_CST
1287 && (TREE_CODE (type) == INTEGER_TYPE
1288 || TREE_CODE (type) == ENUMERAL_TYPE)
1289 && !int_fits_type_p (expr, type))
1291 /* Do not diagnose overflow in a constant expression merely
1292 because a conversion overflowed. */
1293 if (TREE_OVERFLOW (result))
1294 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1296 if (TYPE_UNSIGNED (type))
1298 /* This detects cases like converting -129 or 256 to
1299 unsigned char. */
1300 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1301 warning (OPT_Woverflow,
1302 "large integer implicitly truncated to unsigned type");
1303 else if (warn_conversion)
1304 conversion_warning (type, expr);
1306 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
1307 warning (OPT_Woverflow,
1308 "overflow in implicit constant conversion");
1309 /* No warning for converting 0x80000000 to int. */
1310 else if (pedantic
1311 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1312 || TYPE_PRECISION (TREE_TYPE (expr))
1313 != TYPE_PRECISION (type)))
1314 warning (OPT_Woverflow,
1315 "overflow in implicit constant conversion");
1317 else if (warn_conversion)
1318 conversion_warning (type, expr);
1320 else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
1321 warning (OPT_Woverflow,
1322 "overflow in implicit constant conversion");
1323 else if (warn_conversion)
1324 conversion_warning (type, expr);
1328 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1329 Invoke this function on every expression that is converted implicitly,
1330 i.e. because of language rules and not because of an explicit cast. */
1332 tree
1333 convert_and_check (tree type, tree expr)
1335 tree result;
1337 if (TREE_TYPE (expr) == type)
1338 return expr;
1340 result = convert (type, expr);
1342 if (!skip_evaluation && !TREE_OVERFLOW_P (expr))
1343 warnings_for_convert_and_check (type, expr, result);
1345 return result;
1348 /* A node in a list that describes references to variables (EXPR), which are
1349 either read accesses if WRITER is zero, or write accesses, in which case
1350 WRITER is the parent of EXPR. */
1351 struct tlist
1353 struct tlist *next;
1354 tree expr, writer;
1357 /* Used to implement a cache the results of a call to verify_tree. We only
1358 use this for SAVE_EXPRs. */
1359 struct tlist_cache
1361 struct tlist_cache *next;
1362 struct tlist *cache_before_sp;
1363 struct tlist *cache_after_sp;
1364 tree expr;
1367 /* Obstack to use when allocating tlist structures, and corresponding
1368 firstobj. */
1369 static struct obstack tlist_obstack;
1370 static char *tlist_firstobj = 0;
1372 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1373 warnings. */
1374 static struct tlist *warned_ids;
1375 /* SAVE_EXPRs need special treatment. We process them only once and then
1376 cache the results. */
1377 static struct tlist_cache *save_expr_cache;
1379 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1380 static void merge_tlist (struct tlist **, struct tlist *, int);
1381 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1382 static int warning_candidate_p (tree);
1383 static void warn_for_collisions (struct tlist *);
1384 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1385 static struct tlist *new_tlist (struct tlist *, tree, tree);
1387 /* Create a new struct tlist and fill in its fields. */
1388 static struct tlist *
1389 new_tlist (struct tlist *next, tree t, tree writer)
1391 struct tlist *l;
1392 l = XOBNEW (&tlist_obstack, struct tlist);
1393 l->next = next;
1394 l->expr = t;
1395 l->writer = writer;
1396 return l;
1399 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1400 is nonnull, we ignore any node we find which has a writer equal to it. */
1402 static void
1403 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1405 while (add)
1407 struct tlist *next = add->next;
1408 if (!copy)
1409 add->next = *to;
1410 if (!exclude_writer || add->writer != exclude_writer)
1411 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1412 add = next;
1416 /* Merge the nodes of ADD into TO. This merging process is done so that for
1417 each variable that already exists in TO, no new node is added; however if
1418 there is a write access recorded in ADD, and an occurrence on TO is only
1419 a read access, then the occurrence in TO will be modified to record the
1420 write. */
1422 static void
1423 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1425 struct tlist **end = to;
1427 while (*end)
1428 end = &(*end)->next;
1430 while (add)
1432 int found = 0;
1433 struct tlist *tmp2;
1434 struct tlist *next = add->next;
1436 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1437 if (tmp2->expr == add->expr)
1439 found = 1;
1440 if (!tmp2->writer)
1441 tmp2->writer = add->writer;
1443 if (!found)
1445 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1446 end = &(*end)->next;
1447 *end = 0;
1449 add = next;
1453 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1454 references in list LIST conflict with it, excluding reads if ONLY writers
1455 is nonzero. */
1457 static void
1458 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1459 int only_writes)
1461 struct tlist *tmp;
1463 /* Avoid duplicate warnings. */
1464 for (tmp = warned_ids; tmp; tmp = tmp->next)
1465 if (tmp->expr == written)
1466 return;
1468 while (list)
1470 if (list->expr == written
1471 && list->writer != writer
1472 && (!only_writes || list->writer)
1473 && DECL_NAME (list->expr))
1475 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1476 warning (0, "operation on %qE may be undefined", list->expr);
1478 list = list->next;
1482 /* Given a list LIST of references to variables, find whether any of these
1483 can cause conflicts due to missing sequence points. */
1485 static void
1486 warn_for_collisions (struct tlist *list)
1488 struct tlist *tmp;
1490 for (tmp = list; tmp; tmp = tmp->next)
1492 if (tmp->writer)
1493 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1497 /* Return nonzero if X is a tree that can be verified by the sequence point
1498 warnings. */
1499 static int
1500 warning_candidate_p (tree x)
1502 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1505 /* Walk the tree X, and record accesses to variables. If X is written by the
1506 parent tree, WRITER is the parent.
1507 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1508 expression or its only operand forces a sequence point, then everything up
1509 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1510 in PNO_SP.
1511 Once we return, we will have emitted warnings if any subexpression before
1512 such a sequence point could be undefined. On a higher level, however, the
1513 sequence point may not be relevant, and we'll merge the two lists.
1515 Example: (b++, a) + b;
1516 The call that processes the COMPOUND_EXPR will store the increment of B
1517 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1518 processes the PLUS_EXPR will need to merge the two lists so that
1519 eventually, all accesses end up on the same list (and we'll warn about the
1520 unordered subexpressions b++ and b.
1522 A note on merging. If we modify the former example so that our expression
1523 becomes
1524 (b++, b) + a
1525 care must be taken not simply to add all three expressions into the final
1526 PNO_SP list. The function merge_tlist takes care of that by merging the
1527 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1528 way, so that no more than one access to B is recorded. */
1530 static void
1531 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1532 tree writer)
1534 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1535 enum tree_code code;
1536 enum tree_code_class cl;
1538 /* X may be NULL if it is the operand of an empty statement expression
1539 ({ }). */
1540 if (x == NULL)
1541 return;
1543 restart:
1544 code = TREE_CODE (x);
1545 cl = TREE_CODE_CLASS (code);
1547 if (warning_candidate_p (x))
1549 *pno_sp = new_tlist (*pno_sp, x, writer);
1550 return;
1553 switch (code)
1555 case CONSTRUCTOR:
1556 return;
1558 case COMPOUND_EXPR:
1559 case TRUTH_ANDIF_EXPR:
1560 case TRUTH_ORIF_EXPR:
1561 tmp_before = tmp_nosp = tmp_list3 = 0;
1562 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1563 warn_for_collisions (tmp_nosp);
1564 merge_tlist (pbefore_sp, tmp_before, 0);
1565 merge_tlist (pbefore_sp, tmp_nosp, 0);
1566 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1567 merge_tlist (pbefore_sp, tmp_list3, 0);
1568 return;
1570 case COND_EXPR:
1571 tmp_before = tmp_list2 = 0;
1572 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1573 warn_for_collisions (tmp_list2);
1574 merge_tlist (pbefore_sp, tmp_before, 0);
1575 merge_tlist (pbefore_sp, tmp_list2, 1);
1577 tmp_list3 = tmp_nosp = 0;
1578 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1579 warn_for_collisions (tmp_nosp);
1580 merge_tlist (pbefore_sp, tmp_list3, 0);
1582 tmp_list3 = tmp_list2 = 0;
1583 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1584 warn_for_collisions (tmp_list2);
1585 merge_tlist (pbefore_sp, tmp_list3, 0);
1586 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1587 two first, to avoid warning for (a ? b++ : b++). */
1588 merge_tlist (&tmp_nosp, tmp_list2, 0);
1589 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1590 return;
1592 case PREDECREMENT_EXPR:
1593 case PREINCREMENT_EXPR:
1594 case POSTDECREMENT_EXPR:
1595 case POSTINCREMENT_EXPR:
1596 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1597 return;
1599 case MODIFY_EXPR:
1600 tmp_before = tmp_nosp = tmp_list3 = 0;
1601 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1602 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1603 /* Expressions inside the LHS are not ordered wrt. the sequence points
1604 in the RHS. Example:
1605 *a = (a++, 2)
1606 Despite the fact that the modification of "a" is in the before_sp
1607 list (tmp_before), it conflicts with the use of "a" in the LHS.
1608 We can handle this by adding the contents of tmp_list3
1609 to those of tmp_before, and redoing the collision warnings for that
1610 list. */
1611 add_tlist (&tmp_before, tmp_list3, x, 1);
1612 warn_for_collisions (tmp_before);
1613 /* Exclude the LHS itself here; we first have to merge it into the
1614 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1615 didn't exclude the LHS, we'd get it twice, once as a read and once
1616 as a write. */
1617 add_tlist (pno_sp, tmp_list3, x, 0);
1618 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1620 merge_tlist (pbefore_sp, tmp_before, 0);
1621 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1622 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1623 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1624 return;
1626 case CALL_EXPR:
1627 /* We need to warn about conflicts among arguments and conflicts between
1628 args and the function address. Side effects of the function address,
1629 however, are not ordered by the sequence point of the call. */
1631 call_expr_arg_iterator iter;
1632 tree arg;
1633 tmp_before = tmp_nosp = 0;
1634 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1635 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1637 tmp_list2 = tmp_list3 = 0;
1638 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1639 merge_tlist (&tmp_list3, tmp_list2, 0);
1640 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1642 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1643 warn_for_collisions (tmp_before);
1644 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1645 return;
1648 case TREE_LIST:
1649 /* Scan all the list, e.g. indices of multi dimensional array. */
1650 while (x)
1652 tmp_before = tmp_nosp = 0;
1653 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1654 merge_tlist (&tmp_nosp, tmp_before, 0);
1655 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1656 x = TREE_CHAIN (x);
1658 return;
1660 case SAVE_EXPR:
1662 struct tlist_cache *t;
1663 for (t = save_expr_cache; t; t = t->next)
1664 if (t->expr == x)
1665 break;
1667 if (!t)
1669 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1670 t->next = save_expr_cache;
1671 t->expr = x;
1672 save_expr_cache = t;
1674 tmp_before = tmp_nosp = 0;
1675 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1676 warn_for_collisions (tmp_nosp);
1678 tmp_list3 = 0;
1679 while (tmp_nosp)
1681 struct tlist *t = tmp_nosp;
1682 tmp_nosp = t->next;
1683 merge_tlist (&tmp_list3, t, 0);
1685 t->cache_before_sp = tmp_before;
1686 t->cache_after_sp = tmp_list3;
1688 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1689 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1690 return;
1693 default:
1694 /* For other expressions, simply recurse on their operands.
1695 Manual tail recursion for unary expressions.
1696 Other non-expressions need not be processed. */
1697 if (cl == tcc_unary)
1699 x = TREE_OPERAND (x, 0);
1700 writer = 0;
1701 goto restart;
1703 else if (IS_EXPR_CODE_CLASS (cl))
1705 int lp;
1706 int max = TREE_OPERAND_LENGTH (x);
1707 for (lp = 0; lp < max; lp++)
1709 tmp_before = tmp_nosp = 0;
1710 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1711 merge_tlist (&tmp_nosp, tmp_before, 0);
1712 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1715 return;
1719 /* Try to warn for undefined behavior in EXPR due to missing sequence
1720 points. */
1722 void
1723 verify_sequence_points (tree expr)
1725 struct tlist *before_sp = 0, *after_sp = 0;
1727 warned_ids = 0;
1728 save_expr_cache = 0;
1729 if (tlist_firstobj == 0)
1731 gcc_obstack_init (&tlist_obstack);
1732 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1735 verify_tree (expr, &before_sp, &after_sp, 0);
1736 warn_for_collisions (after_sp);
1737 obstack_free (&tlist_obstack, tlist_firstobj);
1740 /* Validate the expression after `case' and apply default promotions. */
1742 static tree
1743 check_case_value (tree value)
1745 if (value == NULL_TREE)
1746 return value;
1748 /* ??? Can we ever get nops here for a valid case value? We
1749 shouldn't for C. */
1750 STRIP_TYPE_NOPS (value);
1751 /* In C++, the following is allowed:
1753 const int i = 3;
1754 switch (...) { case i: ... }
1756 So, we try to reduce the VALUE to a constant that way. */
1757 if (c_dialect_cxx ())
1759 value = decl_constant_value (value);
1760 STRIP_TYPE_NOPS (value);
1761 value = fold (value);
1764 if (TREE_CODE (value) == INTEGER_CST)
1765 /* Promote char or short to int. */
1766 value = perform_integral_promotions (value);
1767 else if (value != error_mark_node)
1769 error ("case label does not reduce to an integer constant");
1770 value = error_mark_node;
1773 constant_expression_warning (value);
1775 return value;
1778 /* See if the case values LOW and HIGH are in the range of the original
1779 type (i.e. before the default conversion to int) of the switch testing
1780 expression.
1781 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1782 the type before promoting it. CASE_LOW_P is a pointer to the lower
1783 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1784 if the case is not a case range.
1785 The caller has to make sure that we are not called with NULL for
1786 CASE_LOW_P (i.e. the default case).
1787 Returns true if the case label is in range of ORIG_TYPE (saturated or
1788 untouched) or false if the label is out of range. */
1790 static bool
1791 check_case_bounds (tree type, tree orig_type,
1792 tree *case_low_p, tree *case_high_p)
1794 tree min_value, max_value;
1795 tree case_low = *case_low_p;
1796 tree case_high = case_high_p ? *case_high_p : case_low;
1798 /* If there was a problem with the original type, do nothing. */
1799 if (orig_type == error_mark_node)
1800 return true;
1802 min_value = TYPE_MIN_VALUE (orig_type);
1803 max_value = TYPE_MAX_VALUE (orig_type);
1805 /* Case label is less than minimum for type. */
1806 if (tree_int_cst_compare (case_low, min_value) < 0
1807 && tree_int_cst_compare (case_high, min_value) < 0)
1809 warning (0, "case label value is less than minimum value for type");
1810 return false;
1813 /* Case value is greater than maximum for type. */
1814 if (tree_int_cst_compare (case_low, max_value) > 0
1815 && tree_int_cst_compare (case_high, max_value) > 0)
1817 warning (0, "case label value exceeds maximum value for type");
1818 return false;
1821 /* Saturate lower case label value to minimum. */
1822 if (tree_int_cst_compare (case_high, min_value) >= 0
1823 && tree_int_cst_compare (case_low, min_value) < 0)
1825 warning (0, "lower value in case label range"
1826 " less than minimum value for type");
1827 case_low = min_value;
1830 /* Saturate upper case label value to maximum. */
1831 if (tree_int_cst_compare (case_low, max_value) <= 0
1832 && tree_int_cst_compare (case_high, max_value) > 0)
1834 warning (0, "upper value in case label range"
1835 " exceeds maximum value for type");
1836 case_high = max_value;
1839 if (*case_low_p != case_low)
1840 *case_low_p = convert (type, case_low);
1841 if (case_high_p && *case_high_p != case_high)
1842 *case_high_p = convert (type, case_high);
1844 return true;
1847 /* Return an integer type with BITS bits of precision,
1848 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1850 tree
1851 c_common_type_for_size (unsigned int bits, int unsignedp)
1853 if (bits == TYPE_PRECISION (integer_type_node))
1854 return unsignedp ? unsigned_type_node : integer_type_node;
1856 if (bits == TYPE_PRECISION (signed_char_type_node))
1857 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1859 if (bits == TYPE_PRECISION (short_integer_type_node))
1860 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1862 if (bits == TYPE_PRECISION (long_integer_type_node))
1863 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1865 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1866 return (unsignedp ? long_long_unsigned_type_node
1867 : long_long_integer_type_node);
1869 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1870 return (unsignedp ? widest_unsigned_literal_type_node
1871 : widest_integer_literal_type_node);
1873 if (bits <= TYPE_PRECISION (intQI_type_node))
1874 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1876 if (bits <= TYPE_PRECISION (intHI_type_node))
1877 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1879 if (bits <= TYPE_PRECISION (intSI_type_node))
1880 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1882 if (bits <= TYPE_PRECISION (intDI_type_node))
1883 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1885 return 0;
1888 /* Used for communication between c_common_type_for_mode and
1889 c_register_builtin_type. */
1890 static GTY(()) tree registered_builtin_types;
1892 /* Return a data type that has machine mode MODE.
1893 If the mode is an integer,
1894 then UNSIGNEDP selects between signed and unsigned types. */
1896 tree
1897 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1899 tree t;
1901 if (mode == TYPE_MODE (integer_type_node))
1902 return unsignedp ? unsigned_type_node : integer_type_node;
1904 if (mode == TYPE_MODE (signed_char_type_node))
1905 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1907 if (mode == TYPE_MODE (short_integer_type_node))
1908 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1910 if (mode == TYPE_MODE (long_integer_type_node))
1911 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1913 if (mode == TYPE_MODE (long_long_integer_type_node))
1914 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1916 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1917 return unsignedp ? widest_unsigned_literal_type_node
1918 : widest_integer_literal_type_node;
1920 if (mode == QImode)
1921 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1923 if (mode == HImode)
1924 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1926 if (mode == SImode)
1927 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1929 if (mode == DImode)
1930 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1932 #if HOST_BITS_PER_WIDE_INT >= 64
1933 if (mode == TYPE_MODE (intTI_type_node))
1934 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1935 #endif
1937 if (mode == TYPE_MODE (float_type_node))
1938 return float_type_node;
1940 if (mode == TYPE_MODE (double_type_node))
1941 return double_type_node;
1943 if (mode == TYPE_MODE (long_double_type_node))
1944 return long_double_type_node;
1946 if (mode == TYPE_MODE (void_type_node))
1947 return void_type_node;
1949 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1950 return (unsignedp
1951 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1952 : make_signed_type (GET_MODE_PRECISION (mode)));
1954 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1955 return (unsignedp
1956 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1957 : make_signed_type (GET_MODE_PRECISION (mode)));
1959 if (COMPLEX_MODE_P (mode))
1961 enum machine_mode inner_mode;
1962 tree inner_type;
1964 if (mode == TYPE_MODE (complex_float_type_node))
1965 return complex_float_type_node;
1966 if (mode == TYPE_MODE (complex_double_type_node))
1967 return complex_double_type_node;
1968 if (mode == TYPE_MODE (complex_long_double_type_node))
1969 return complex_long_double_type_node;
1971 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
1972 return complex_integer_type_node;
1974 inner_mode = GET_MODE_INNER (mode);
1975 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1976 if (inner_type != NULL_TREE)
1977 return build_complex_type (inner_type);
1979 else if (VECTOR_MODE_P (mode))
1981 enum machine_mode inner_mode = GET_MODE_INNER (mode);
1982 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1983 if (inner_type != NULL_TREE)
1984 return build_vector_type_for_mode (inner_type, mode);
1987 if (mode == TYPE_MODE (dfloat32_type_node))
1988 return dfloat32_type_node;
1989 if (mode == TYPE_MODE (dfloat64_type_node))
1990 return dfloat64_type_node;
1991 if (mode == TYPE_MODE (dfloat128_type_node))
1992 return dfloat128_type_node;
1994 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1995 if (TYPE_MODE (TREE_VALUE (t)) == mode)
1996 return TREE_VALUE (t);
1998 return 0;
2001 /* Return an unsigned type the same as TYPE in other respects. */
2002 tree
2003 c_common_unsigned_type (tree type)
2005 tree type1 = TYPE_MAIN_VARIANT (type);
2006 if (type1 == signed_char_type_node || type1 == char_type_node)
2007 return unsigned_char_type_node;
2008 if (type1 == integer_type_node)
2009 return unsigned_type_node;
2010 if (type1 == short_integer_type_node)
2011 return short_unsigned_type_node;
2012 if (type1 == long_integer_type_node)
2013 return long_unsigned_type_node;
2014 if (type1 == long_long_integer_type_node)
2015 return long_long_unsigned_type_node;
2016 if (type1 == widest_integer_literal_type_node)
2017 return widest_unsigned_literal_type_node;
2018 #if HOST_BITS_PER_WIDE_INT >= 64
2019 if (type1 == intTI_type_node)
2020 return unsigned_intTI_type_node;
2021 #endif
2022 if (type1 == intDI_type_node)
2023 return unsigned_intDI_type_node;
2024 if (type1 == intSI_type_node)
2025 return unsigned_intSI_type_node;
2026 if (type1 == intHI_type_node)
2027 return unsigned_intHI_type_node;
2028 if (type1 == intQI_type_node)
2029 return unsigned_intQI_type_node;
2031 return c_common_signed_or_unsigned_type (1, type);
2034 /* Return a signed type the same as TYPE in other respects. */
2036 tree
2037 c_common_signed_type (tree type)
2039 tree type1 = TYPE_MAIN_VARIANT (type);
2040 if (type1 == unsigned_char_type_node || type1 == char_type_node)
2041 return signed_char_type_node;
2042 if (type1 == unsigned_type_node)
2043 return integer_type_node;
2044 if (type1 == short_unsigned_type_node)
2045 return short_integer_type_node;
2046 if (type1 == long_unsigned_type_node)
2047 return long_integer_type_node;
2048 if (type1 == long_long_unsigned_type_node)
2049 return long_long_integer_type_node;
2050 if (type1 == widest_unsigned_literal_type_node)
2051 return widest_integer_literal_type_node;
2052 #if HOST_BITS_PER_WIDE_INT >= 64
2053 if (type1 == unsigned_intTI_type_node)
2054 return intTI_type_node;
2055 #endif
2056 if (type1 == unsigned_intDI_type_node)
2057 return intDI_type_node;
2058 if (type1 == unsigned_intSI_type_node)
2059 return intSI_type_node;
2060 if (type1 == unsigned_intHI_type_node)
2061 return intHI_type_node;
2062 if (type1 == unsigned_intQI_type_node)
2063 return intQI_type_node;
2065 return c_common_signed_or_unsigned_type (0, type);
2068 /* Return a type the same as TYPE except unsigned or
2069 signed according to UNSIGNEDP. */
2071 tree
2072 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2074 if (!INTEGRAL_TYPE_P (type)
2075 || TYPE_UNSIGNED (type) == unsignedp)
2076 return type;
2078 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2079 the precision; they have precision set to match their range, but
2080 may use a wider mode to match an ABI. If we change modes, we may
2081 wind up with bad conversions. For INTEGER_TYPEs in C, must check
2082 the precision as well, so as to yield correct results for
2083 bit-field types. C++ does not have these separate bit-field
2084 types, and producing a signed or unsigned variant of an
2085 ENUMERAL_TYPE may cause other problems as well. */
2087 #define TYPE_OK(node) \
2088 (TYPE_MODE (type) == TYPE_MODE (node) \
2089 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2090 if (TYPE_OK (signed_char_type_node))
2091 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2092 if (TYPE_OK (integer_type_node))
2093 return unsignedp ? unsigned_type_node : integer_type_node;
2094 if (TYPE_OK (short_integer_type_node))
2095 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2096 if (TYPE_OK (long_integer_type_node))
2097 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2098 if (TYPE_OK (long_long_integer_type_node))
2099 return (unsignedp ? long_long_unsigned_type_node
2100 : long_long_integer_type_node);
2101 if (TYPE_OK (widest_integer_literal_type_node))
2102 return (unsignedp ? widest_unsigned_literal_type_node
2103 : widest_integer_literal_type_node);
2105 #if HOST_BITS_PER_WIDE_INT >= 64
2106 if (TYPE_OK (intTI_type_node))
2107 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2108 #endif
2109 if (TYPE_OK (intDI_type_node))
2110 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2111 if (TYPE_OK (intSI_type_node))
2112 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2113 if (TYPE_OK (intHI_type_node))
2114 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2115 if (TYPE_OK (intQI_type_node))
2116 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2117 #undef TYPE_OK
2119 if (c_dialect_cxx ())
2120 return type;
2121 else
2122 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2125 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2127 tree
2128 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2130 /* Extended integer types of the same width as a standard type have
2131 lesser rank, so those of the same width as int promote to int or
2132 unsigned int and are valid for printf formats expecting int or
2133 unsigned int. To avoid such special cases, avoid creating
2134 extended integer types for bit-fields if a standard integer type
2135 is available. */
2136 if (width == TYPE_PRECISION (integer_type_node))
2137 return unsignedp ? unsigned_type_node : integer_type_node;
2138 if (width == TYPE_PRECISION (signed_char_type_node))
2139 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2140 if (width == TYPE_PRECISION (short_integer_type_node))
2141 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2142 if (width == TYPE_PRECISION (long_integer_type_node))
2143 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2144 if (width == TYPE_PRECISION (long_long_integer_type_node))
2145 return (unsignedp ? long_long_unsigned_type_node
2146 : long_long_integer_type_node);
2147 return build_nonstandard_integer_type (width, unsignedp);
2150 /* The C version of the register_builtin_type langhook. */
2152 void
2153 c_register_builtin_type (tree type, const char* name)
2155 tree decl;
2157 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2158 DECL_ARTIFICIAL (decl) = 1;
2159 if (!TYPE_NAME (type))
2160 TYPE_NAME (type) = decl;
2161 pushdecl (decl);
2163 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2167 /* Return the minimum number of bits needed to represent VALUE in a
2168 signed or unsigned type, UNSIGNEDP says which. */
2170 unsigned int
2171 min_precision (tree value, int unsignedp)
2173 int log;
2175 /* If the value is negative, compute its negative minus 1. The latter
2176 adjustment is because the absolute value of the largest negative value
2177 is one larger than the largest positive value. This is equivalent to
2178 a bit-wise negation, so use that operation instead. */
2180 if (tree_int_cst_sgn (value) < 0)
2181 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2183 /* Return the number of bits needed, taking into account the fact
2184 that we need one more bit for a signed than unsigned type. */
2186 if (integer_zerop (value))
2187 log = 0;
2188 else
2189 log = tree_floor_log2 (value);
2191 return log + 1 + !unsignedp;
2194 /* Print an error message for invalid operands to arith operation
2195 CODE. */
2197 void
2198 binary_op_error (enum tree_code code)
2200 const char *opname;
2202 switch (code)
2204 case PLUS_EXPR:
2205 opname = "+"; break;
2206 case MINUS_EXPR:
2207 opname = "-"; break;
2208 case MULT_EXPR:
2209 opname = "*"; break;
2210 case MAX_EXPR:
2211 opname = "max"; break;
2212 case MIN_EXPR:
2213 opname = "min"; break;
2214 case EQ_EXPR:
2215 opname = "=="; break;
2216 case NE_EXPR:
2217 opname = "!="; break;
2218 case LE_EXPR:
2219 opname = "<="; break;
2220 case GE_EXPR:
2221 opname = ">="; break;
2222 case LT_EXPR:
2223 opname = "<"; break;
2224 case GT_EXPR:
2225 opname = ">"; break;
2226 case LSHIFT_EXPR:
2227 opname = "<<"; break;
2228 case RSHIFT_EXPR:
2229 opname = ">>"; break;
2230 case TRUNC_MOD_EXPR:
2231 case FLOOR_MOD_EXPR:
2232 opname = "%"; break;
2233 case TRUNC_DIV_EXPR:
2234 case FLOOR_DIV_EXPR:
2235 opname = "/"; break;
2236 case BIT_AND_EXPR:
2237 opname = "&"; break;
2238 case BIT_IOR_EXPR:
2239 opname = "|"; break;
2240 case TRUTH_ANDIF_EXPR:
2241 opname = "&&"; break;
2242 case TRUTH_ORIF_EXPR:
2243 opname = "||"; break;
2244 case BIT_XOR_EXPR:
2245 opname = "^"; break;
2246 default:
2247 gcc_unreachable ();
2249 error ("invalid operands to binary %s", opname);
2252 /* Subroutine of build_binary_op, used for comparison operations.
2253 See if the operands have both been converted from subword integer types
2254 and, if so, perhaps change them both back to their original type.
2255 This function is also responsible for converting the two operands
2256 to the proper common type for comparison.
2258 The arguments of this function are all pointers to local variables
2259 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2260 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2262 If this function returns nonzero, it means that the comparison has
2263 a constant value. What this function returns is an expression for
2264 that value. */
2266 tree
2267 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2268 enum tree_code *rescode_ptr)
2270 tree type;
2271 tree op0 = *op0_ptr;
2272 tree op1 = *op1_ptr;
2273 int unsignedp0, unsignedp1;
2274 int real1, real2;
2275 tree primop0, primop1;
2276 enum tree_code code = *rescode_ptr;
2278 /* Throw away any conversions to wider types
2279 already present in the operands. */
2281 primop0 = get_narrower (op0, &unsignedp0);
2282 primop1 = get_narrower (op1, &unsignedp1);
2284 /* Handle the case that OP0 does not *contain* a conversion
2285 but it *requires* conversion to FINAL_TYPE. */
2287 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2288 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2289 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2290 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2292 /* If one of the operands must be floated, we cannot optimize. */
2293 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2294 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2296 /* If first arg is constant, swap the args (changing operation
2297 so value is preserved), for canonicalization. Don't do this if
2298 the second arg is 0. */
2300 if (TREE_CONSTANT (primop0)
2301 && !integer_zerop (primop1) && !real_zerop (primop1))
2303 tree tem = primop0;
2304 int temi = unsignedp0;
2305 primop0 = primop1;
2306 primop1 = tem;
2307 tem = op0;
2308 op0 = op1;
2309 op1 = tem;
2310 *op0_ptr = op0;
2311 *op1_ptr = op1;
2312 unsignedp0 = unsignedp1;
2313 unsignedp1 = temi;
2314 temi = real1;
2315 real1 = real2;
2316 real2 = temi;
2318 switch (code)
2320 case LT_EXPR:
2321 code = GT_EXPR;
2322 break;
2323 case GT_EXPR:
2324 code = LT_EXPR;
2325 break;
2326 case LE_EXPR:
2327 code = GE_EXPR;
2328 break;
2329 case GE_EXPR:
2330 code = LE_EXPR;
2331 break;
2332 default:
2333 break;
2335 *rescode_ptr = code;
2338 /* If comparing an integer against a constant more bits wide,
2339 maybe we can deduce a value of 1 or 0 independent of the data.
2340 Or else truncate the constant now
2341 rather than extend the variable at run time.
2343 This is only interesting if the constant is the wider arg.
2344 Also, it is not safe if the constant is unsigned and the
2345 variable arg is signed, since in this case the variable
2346 would be sign-extended and then regarded as unsigned.
2347 Our technique fails in this case because the lowest/highest
2348 possible unsigned results don't follow naturally from the
2349 lowest/highest possible values of the variable operand.
2350 For just EQ_EXPR and NE_EXPR there is another technique that
2351 could be used: see if the constant can be faithfully represented
2352 in the other operand's type, by truncating it and reextending it
2353 and see if that preserves the constant's value. */
2355 if (!real1 && !real2
2356 && TREE_CODE (primop1) == INTEGER_CST
2357 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2359 int min_gt, max_gt, min_lt, max_lt;
2360 tree maxval, minval;
2361 /* 1 if comparison is nominally unsigned. */
2362 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2363 tree val;
2365 type = c_common_signed_or_unsigned_type (unsignedp0,
2366 TREE_TYPE (primop0));
2368 maxval = TYPE_MAX_VALUE (type);
2369 minval = TYPE_MIN_VALUE (type);
2371 if (unsignedp && !unsignedp0)
2372 *restype_ptr = c_common_signed_type (*restype_ptr);
2374 if (TREE_TYPE (primop1) != *restype_ptr)
2376 /* Convert primop1 to target type, but do not introduce
2377 additional overflow. We know primop1 is an int_cst. */
2378 primop1 = force_fit_type_double (*restype_ptr,
2379 TREE_INT_CST_LOW (primop1),
2380 TREE_INT_CST_HIGH (primop1), 0,
2381 TREE_OVERFLOW (primop1));
2383 if (type != *restype_ptr)
2385 minval = convert (*restype_ptr, minval);
2386 maxval = convert (*restype_ptr, maxval);
2389 if (unsignedp && unsignedp0)
2391 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2392 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2393 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2394 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2396 else
2398 min_gt = INT_CST_LT (primop1, minval);
2399 max_gt = INT_CST_LT (primop1, maxval);
2400 min_lt = INT_CST_LT (minval, primop1);
2401 max_lt = INT_CST_LT (maxval, primop1);
2404 val = 0;
2405 /* This used to be a switch, but Genix compiler can't handle that. */
2406 if (code == NE_EXPR)
2408 if (max_lt || min_gt)
2409 val = truthvalue_true_node;
2411 else if (code == EQ_EXPR)
2413 if (max_lt || min_gt)
2414 val = truthvalue_false_node;
2416 else if (code == LT_EXPR)
2418 if (max_lt)
2419 val = truthvalue_true_node;
2420 if (!min_lt)
2421 val = truthvalue_false_node;
2423 else if (code == GT_EXPR)
2425 if (min_gt)
2426 val = truthvalue_true_node;
2427 if (!max_gt)
2428 val = truthvalue_false_node;
2430 else if (code == LE_EXPR)
2432 if (!max_gt)
2433 val = truthvalue_true_node;
2434 if (min_gt)
2435 val = truthvalue_false_node;
2437 else if (code == GE_EXPR)
2439 if (!min_lt)
2440 val = truthvalue_true_node;
2441 if (max_lt)
2442 val = truthvalue_false_node;
2445 /* If primop0 was sign-extended and unsigned comparison specd,
2446 we did a signed comparison above using the signed type bounds.
2447 But the comparison we output must be unsigned.
2449 Also, for inequalities, VAL is no good; but if the signed
2450 comparison had *any* fixed result, it follows that the
2451 unsigned comparison just tests the sign in reverse
2452 (positive values are LE, negative ones GE).
2453 So we can generate an unsigned comparison
2454 against an extreme value of the signed type. */
2456 if (unsignedp && !unsignedp0)
2458 if (val != 0)
2459 switch (code)
2461 case LT_EXPR:
2462 case GE_EXPR:
2463 primop1 = TYPE_MIN_VALUE (type);
2464 val = 0;
2465 break;
2467 case LE_EXPR:
2468 case GT_EXPR:
2469 primop1 = TYPE_MAX_VALUE (type);
2470 val = 0;
2471 break;
2473 default:
2474 break;
2476 type = c_common_unsigned_type (type);
2479 if (TREE_CODE (primop0) != INTEGER_CST)
2481 if (val == truthvalue_false_node)
2482 warning (0, "comparison is always false due to limited range of data type");
2483 if (val == truthvalue_true_node)
2484 warning (0, "comparison is always true due to limited range of data type");
2487 if (val != 0)
2489 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2490 if (TREE_SIDE_EFFECTS (primop0))
2491 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2492 return val;
2495 /* Value is not predetermined, but do the comparison
2496 in the type of the operand that is not constant.
2497 TYPE is already properly set. */
2500 /* If either arg is decimal float and the other is float, find the
2501 proper common type to use for comparison. */
2502 else if (real1 && real2
2503 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2504 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2505 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2507 else if (real1 && real2
2508 && (TYPE_PRECISION (TREE_TYPE (primop0))
2509 == TYPE_PRECISION (TREE_TYPE (primop1))))
2510 type = TREE_TYPE (primop0);
2512 /* If args' natural types are both narrower than nominal type
2513 and both extend in the same manner, compare them
2514 in the type of the wider arg.
2515 Otherwise must actually extend both to the nominal
2516 common type lest different ways of extending
2517 alter the result.
2518 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2520 else if (unsignedp0 == unsignedp1 && real1 == real2
2521 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2522 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2524 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2525 type = c_common_signed_or_unsigned_type (unsignedp0
2526 || TYPE_UNSIGNED (*restype_ptr),
2527 type);
2528 /* Make sure shorter operand is extended the right way
2529 to match the longer operand. */
2530 primop0
2531 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2532 TREE_TYPE (primop0)),
2533 primop0);
2534 primop1
2535 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2536 TREE_TYPE (primop1)),
2537 primop1);
2539 else
2541 /* Here we must do the comparison on the nominal type
2542 using the args exactly as we received them. */
2543 type = *restype_ptr;
2544 primop0 = op0;
2545 primop1 = op1;
2547 if (!real1 && !real2 && integer_zerop (primop1)
2548 && TYPE_UNSIGNED (*restype_ptr))
2550 tree value = 0;
2551 switch (code)
2553 case GE_EXPR:
2554 /* All unsigned values are >= 0, so we warn if extra warnings
2555 are requested. However, if OP0 is a constant that is
2556 >= 0, the signedness of the comparison isn't an issue,
2557 so suppress the warning. */
2558 if (extra_warnings && !in_system_header
2559 && !(TREE_CODE (primop0) == INTEGER_CST
2560 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2561 primop0))))
2562 warning (0, "comparison of unsigned expression >= 0 is always true");
2563 value = truthvalue_true_node;
2564 break;
2566 case LT_EXPR:
2567 if (extra_warnings && !in_system_header
2568 && !(TREE_CODE (primop0) == INTEGER_CST
2569 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2570 primop0))))
2571 warning (0, "comparison of unsigned expression < 0 is always false");
2572 value = truthvalue_false_node;
2573 break;
2575 default:
2576 break;
2579 if (value != 0)
2581 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2582 if (TREE_SIDE_EFFECTS (primop0))
2583 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2584 primop0, value);
2585 return value;
2590 *op0_ptr = convert (type, primop0);
2591 *op1_ptr = convert (type, primop1);
2593 *restype_ptr = truthvalue_type_node;
2595 return 0;
2598 /* Return a tree for the sum or difference (RESULTCODE says which)
2599 of pointer PTROP and integer INTOP. */
2601 tree
2602 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2604 tree size_exp, ret;
2606 /* The result is a pointer of the same type that is being added. */
2608 tree result_type = TREE_TYPE (ptrop);
2610 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2612 if (pedantic || warn_pointer_arith)
2613 pedwarn ("pointer of type %<void *%> used in arithmetic");
2614 size_exp = integer_one_node;
2616 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2618 if (pedantic || warn_pointer_arith)
2619 pedwarn ("pointer to a function used in arithmetic");
2620 size_exp = integer_one_node;
2622 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2624 if (pedantic || warn_pointer_arith)
2625 pedwarn ("pointer to member function used in arithmetic");
2626 size_exp = integer_one_node;
2628 else
2629 size_exp = size_in_bytes (TREE_TYPE (result_type));
2631 /* We are manipulating pointer values, so we don't need to warn
2632 about relying on undefined signed overflow. We disable the
2633 warning here because we use integer types so fold won't know that
2634 they are really pointers. */
2635 fold_defer_overflow_warnings ();
2637 /* If what we are about to multiply by the size of the elements
2638 contains a constant term, apply distributive law
2639 and multiply that constant term separately.
2640 This helps produce common subexpressions. */
2642 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2643 && !TREE_CONSTANT (intop)
2644 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2645 && TREE_CONSTANT (size_exp)
2646 /* If the constant comes from pointer subtraction,
2647 skip this optimization--it would cause an error. */
2648 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2649 /* If the constant is unsigned, and smaller than the pointer size,
2650 then we must skip this optimization. This is because it could cause
2651 an overflow error if the constant is negative but INTOP is not. */
2652 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2653 || (TYPE_PRECISION (TREE_TYPE (intop))
2654 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2656 enum tree_code subcode = resultcode;
2657 tree int_type = TREE_TYPE (intop);
2658 if (TREE_CODE (intop) == MINUS_EXPR)
2659 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2660 /* Convert both subexpression types to the type of intop,
2661 because weird cases involving pointer arithmetic
2662 can result in a sum or difference with different type args. */
2663 ptrop = build_binary_op (subcode, ptrop,
2664 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2665 intop = convert (int_type, TREE_OPERAND (intop, 0));
2668 /* Convert the integer argument to a type the same size as sizetype
2669 so the multiply won't overflow spuriously. */
2671 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2672 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2673 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2674 TYPE_UNSIGNED (sizetype)), intop);
2676 /* Replace the integer argument with a suitable product by the object size.
2677 Do this multiplication as signed, then convert to the appropriate
2678 pointer type (actually unsigned integral). */
2680 intop = convert (result_type,
2681 build_binary_op (MULT_EXPR, intop,
2682 convert (TREE_TYPE (intop), size_exp), 1));
2684 /* Create the sum or difference. */
2685 ret = fold_build2 (resultcode, result_type, ptrop, intop);
2687 fold_undefer_and_ignore_overflow_warnings ();
2689 return ret;
2692 /* Return whether EXPR is a declaration whose address can never be
2693 NULL. */
2695 bool
2696 decl_with_nonnull_addr_p (tree expr)
2698 return (DECL_P (expr)
2699 && (TREE_CODE (expr) == PARM_DECL
2700 || TREE_CODE (expr) == LABEL_DECL
2701 || !DECL_WEAK (expr)));
2704 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2705 or for an `if' or `while' statement or ?..: exp. It should already
2706 have been validated to be of suitable type; otherwise, a bad
2707 diagnostic may result.
2709 This preparation consists of taking the ordinary
2710 representation of an expression expr and producing a valid tree
2711 boolean expression describing whether expr is nonzero. We could
2712 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2713 but we optimize comparisons, &&, ||, and !.
2715 The resulting type should always be `truthvalue_type_node'. */
2717 tree
2718 c_common_truthvalue_conversion (tree expr)
2720 switch (TREE_CODE (expr))
2722 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
2723 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2724 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2725 case ORDERED_EXPR: case UNORDERED_EXPR:
2726 if (TREE_TYPE (expr) == truthvalue_type_node)
2727 return expr;
2728 return build2 (TREE_CODE (expr), truthvalue_type_node,
2729 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2731 case TRUTH_ANDIF_EXPR:
2732 case TRUTH_ORIF_EXPR:
2733 case TRUTH_AND_EXPR:
2734 case TRUTH_OR_EXPR:
2735 case TRUTH_XOR_EXPR:
2736 if (TREE_TYPE (expr) == truthvalue_type_node)
2737 return expr;
2738 return build2 (TREE_CODE (expr), truthvalue_type_node,
2739 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2740 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2742 case TRUTH_NOT_EXPR:
2743 if (TREE_TYPE (expr) == truthvalue_type_node)
2744 return expr;
2745 return build1 (TREE_CODE (expr), truthvalue_type_node,
2746 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2748 case ERROR_MARK:
2749 return expr;
2751 case INTEGER_CST:
2752 return integer_zerop (expr) ? truthvalue_false_node
2753 : truthvalue_true_node;
2755 case REAL_CST:
2756 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2757 ? truthvalue_true_node
2758 : truthvalue_false_node;
2760 case FUNCTION_DECL:
2761 expr = build_unary_op (ADDR_EXPR, expr, 0);
2762 /* Fall through. */
2764 case ADDR_EXPR:
2766 tree inner = TREE_OPERAND (expr, 0);
2767 if (decl_with_nonnull_addr_p (inner))
2769 /* Common Ada/Pascal programmer's mistake. */
2770 warning (OPT_Waddress,
2771 "the address of %qD will always evaluate as %<true%>",
2772 inner);
2773 return truthvalue_true_node;
2776 /* If we still have a decl, it is possible for its address to
2777 be NULL, so we cannot optimize. */
2778 if (DECL_P (inner))
2780 gcc_assert (DECL_WEAK (inner));
2781 break;
2784 if (TREE_SIDE_EFFECTS (inner))
2785 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2786 inner, truthvalue_true_node);
2787 else
2788 return truthvalue_true_node;
2791 case COMPLEX_EXPR:
2792 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2793 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2794 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2795 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2798 case NEGATE_EXPR:
2799 case ABS_EXPR:
2800 case FLOAT_EXPR:
2801 /* These don't change whether an object is nonzero or zero. */
2802 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2804 case LROTATE_EXPR:
2805 case RROTATE_EXPR:
2806 /* These don't change whether an object is zero or nonzero, but
2807 we can't ignore them if their second arg has side-effects. */
2808 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2809 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2810 TREE_OPERAND (expr, 1),
2811 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2812 else
2813 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2815 case COND_EXPR:
2816 /* Distribute the conversion into the arms of a COND_EXPR. */
2817 return fold_build3 (COND_EXPR, truthvalue_type_node,
2818 TREE_OPERAND (expr, 0),
2819 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2820 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
2822 case CONVERT_EXPR:
2823 case NOP_EXPR:
2824 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2825 since that affects how `default_conversion' will behave. */
2826 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2827 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2828 break;
2829 /* If this is widening the argument, we can ignore it. */
2830 if (TYPE_PRECISION (TREE_TYPE (expr))
2831 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2832 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2833 break;
2835 case MODIFY_EXPR:
2836 if (!TREE_NO_WARNING (expr)
2837 && warn_parentheses)
2839 warning (OPT_Wparentheses,
2840 "suggest parentheses around assignment used as truth value");
2841 TREE_NO_WARNING (expr) = 1;
2843 break;
2845 default:
2846 break;
2849 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2851 tree t = save_expr (expr);
2852 return (build_binary_op
2853 ((TREE_SIDE_EFFECTS (expr)
2854 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2855 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2856 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2857 0));
2860 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2863 static void def_builtin_1 (enum built_in_function fncode,
2864 const char *name,
2865 enum built_in_class fnclass,
2866 tree fntype, tree libtype,
2867 bool both_p, bool fallback_p, bool nonansi_p,
2868 tree fnattrs, bool implicit_p);
2870 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2871 down to the element type of an array. */
2873 tree
2874 c_build_qualified_type (tree type, int type_quals)
2876 if (type == error_mark_node)
2877 return type;
2879 if (TREE_CODE (type) == ARRAY_TYPE)
2881 tree t;
2882 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2883 type_quals);
2885 /* See if we already have an identically qualified type. */
2886 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2888 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2889 && TYPE_NAME (t) == TYPE_NAME (type)
2890 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2891 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2892 TYPE_ATTRIBUTES (type)))
2893 break;
2895 if (!t)
2897 t = build_variant_type_copy (type);
2898 TREE_TYPE (t) = element_type;
2900 return t;
2903 /* A restrict-qualified pointer type must be a pointer to object or
2904 incomplete type. Note that the use of POINTER_TYPE_P also allows
2905 REFERENCE_TYPEs, which is appropriate for C++. */
2906 if ((type_quals & TYPE_QUAL_RESTRICT)
2907 && (!POINTER_TYPE_P (type)
2908 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2910 error ("invalid use of %<restrict%>");
2911 type_quals &= ~TYPE_QUAL_RESTRICT;
2914 return build_qualified_type (type, type_quals);
2917 /* Apply the TYPE_QUALS to the new DECL. */
2919 void
2920 c_apply_type_quals_to_decl (int type_quals, tree decl)
2922 tree type = TREE_TYPE (decl);
2924 if (type == error_mark_node)
2925 return;
2927 if (((type_quals & TYPE_QUAL_CONST)
2928 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2929 /* An object declared 'const' is only readonly after it is
2930 initialized. We don't have any way of expressing this currently,
2931 so we need to be conservative and unset TREE_READONLY for types
2932 with constructors. Otherwise aliasing code will ignore stores in
2933 an inline constructor. */
2934 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2935 TREE_READONLY (decl) = 1;
2936 if (type_quals & TYPE_QUAL_VOLATILE)
2938 TREE_SIDE_EFFECTS (decl) = 1;
2939 TREE_THIS_VOLATILE (decl) = 1;
2941 if (type_quals & TYPE_QUAL_RESTRICT)
2943 while (type && TREE_CODE (type) == ARRAY_TYPE)
2944 /* Allow 'restrict' on arrays of pointers.
2945 FIXME currently we just ignore it. */
2946 type = TREE_TYPE (type);
2947 if (!type
2948 || !POINTER_TYPE_P (type)
2949 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2950 error ("invalid use of %<restrict%>");
2951 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2952 /* Indicate we need to make a unique alias set for this pointer.
2953 We can't do it here because it might be pointing to an
2954 incomplete type. */
2955 DECL_POINTER_ALIAS_SET (decl) = -2;
2959 /* Hash function for the problem of multiple type definitions in
2960 different files. This must hash all types that will compare
2961 equal via comptypes to the same value. In practice it hashes
2962 on some of the simple stuff and leaves the details to comptypes. */
2964 static hashval_t
2965 c_type_hash (const void *p)
2967 int i = 0;
2968 int shift, size;
2969 tree t = (tree) p;
2970 tree t2;
2971 switch (TREE_CODE (t))
2973 /* For pointers, hash on pointee type plus some swizzling. */
2974 case POINTER_TYPE:
2975 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2976 /* Hash on number of elements and total size. */
2977 case ENUMERAL_TYPE:
2978 shift = 3;
2979 t2 = TYPE_VALUES (t);
2980 break;
2981 case RECORD_TYPE:
2982 shift = 0;
2983 t2 = TYPE_FIELDS (t);
2984 break;
2985 case QUAL_UNION_TYPE:
2986 shift = 1;
2987 t2 = TYPE_FIELDS (t);
2988 break;
2989 case UNION_TYPE:
2990 shift = 2;
2991 t2 = TYPE_FIELDS (t);
2992 break;
2993 default:
2994 gcc_unreachable ();
2996 for (; t2; t2 = TREE_CHAIN (t2))
2997 i++;
2998 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2999 return ((size << 24) | (i << shift));
3002 static GTY((param_is (union tree_node))) htab_t type_hash_table;
3004 /* Return the typed-based alias set for T, which may be an expression
3005 or a type. Return -1 if we don't do anything special. */
3007 HOST_WIDE_INT
3008 c_common_get_alias_set (tree t)
3010 tree u;
3011 PTR *slot;
3013 /* Permit type-punning when accessing a union, provided the access
3014 is directly through the union. For example, this code does not
3015 permit taking the address of a union member and then storing
3016 through it. Even the type-punning allowed here is a GCC
3017 extension, albeit a common and useful one; the C standard says
3018 that such accesses have implementation-defined behavior. */
3019 for (u = t;
3020 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3021 u = TREE_OPERAND (u, 0))
3022 if (TREE_CODE (u) == COMPONENT_REF
3023 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3024 return 0;
3026 /* That's all the expressions we handle specially. */
3027 if (!TYPE_P (t))
3028 return -1;
3030 /* The C standard guarantees that any object may be accessed via an
3031 lvalue that has character type. */
3032 if (t == char_type_node
3033 || t == signed_char_type_node
3034 || t == unsigned_char_type_node)
3035 return 0;
3037 /* If it has the may_alias attribute, it can alias anything. */
3038 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
3039 return 0;
3041 /* The C standard specifically allows aliasing between signed and
3042 unsigned variants of the same type. We treat the signed
3043 variant as canonical. */
3044 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3046 tree t1 = c_common_signed_type (t);
3048 /* t1 == t can happen for boolean nodes which are always unsigned. */
3049 if (t1 != t)
3050 return get_alias_set (t1);
3052 else if (POINTER_TYPE_P (t))
3054 tree t1;
3056 /* Unfortunately, there is no canonical form of a pointer type.
3057 In particular, if we have `typedef int I', then `int *', and
3058 `I *' are different types. So, we have to pick a canonical
3059 representative. We do this below.
3061 Technically, this approach is actually more conservative that
3062 it needs to be. In particular, `const int *' and `int *'
3063 should be in different alias sets, according to the C and C++
3064 standard, since their types are not the same, and so,
3065 technically, an `int **' and `const int **' cannot point at
3066 the same thing.
3068 But, the standard is wrong. In particular, this code is
3069 legal C++:
3071 int *ip;
3072 int **ipp = &ip;
3073 const int* const* cipp = ipp;
3075 And, it doesn't make sense for that to be legal unless you
3076 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3077 the pointed-to types. This issue has been reported to the
3078 C++ committee. */
3079 t1 = build_type_no_quals (t);
3080 if (t1 != t)
3081 return get_alias_set (t1);
3084 /* Handle the case of multiple type nodes referring to "the same" type,
3085 which occurs with IMA. These share an alias set. FIXME: Currently only
3086 C90 is handled. (In C99 type compatibility is not transitive, which
3087 complicates things mightily. The alias set splay trees can theoretically
3088 represent this, but insertion is tricky when you consider all the
3089 different orders things might arrive in.) */
3091 if (c_language != clk_c || flag_isoc99)
3092 return -1;
3094 /* Save time if there's only one input file. */
3095 if (num_in_fnames == 1)
3096 return -1;
3098 /* Pointers need special handling if they point to any type that
3099 needs special handling (below). */
3100 if (TREE_CODE (t) == POINTER_TYPE)
3102 tree t2;
3103 /* Find bottom type under any nested POINTERs. */
3104 for (t2 = TREE_TYPE (t);
3105 TREE_CODE (t2) == POINTER_TYPE;
3106 t2 = TREE_TYPE (t2))
3108 if (TREE_CODE (t2) != RECORD_TYPE
3109 && TREE_CODE (t2) != ENUMERAL_TYPE
3110 && TREE_CODE (t2) != QUAL_UNION_TYPE
3111 && TREE_CODE (t2) != UNION_TYPE)
3112 return -1;
3113 if (TYPE_SIZE (t2) == 0)
3114 return -1;
3116 /* These are the only cases that need special handling. */
3117 if (TREE_CODE (t) != RECORD_TYPE
3118 && TREE_CODE (t) != ENUMERAL_TYPE
3119 && TREE_CODE (t) != QUAL_UNION_TYPE
3120 && TREE_CODE (t) != UNION_TYPE
3121 && TREE_CODE (t) != POINTER_TYPE)
3122 return -1;
3123 /* Undefined? */
3124 if (TYPE_SIZE (t) == 0)
3125 return -1;
3127 /* Look up t in hash table. Only one of the compatible types within each
3128 alias set is recorded in the table. */
3129 if (!type_hash_table)
3130 type_hash_table = htab_create_ggc (1021, c_type_hash,
3131 (htab_eq) lang_hooks.types_compatible_p,
3132 NULL);
3133 slot = htab_find_slot (type_hash_table, t, INSERT);
3134 if (*slot != NULL)
3136 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3137 return TYPE_ALIAS_SET ((tree)*slot);
3139 else
3140 /* Our caller will assign and record (in t) a new alias set; all we need
3141 to do is remember t in the hash table. */
3142 *slot = t;
3144 return -1;
3147 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3148 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3149 flag controls whether we should diagnose possibly ill-formed
3150 constructs or not. */
3152 tree
3153 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3155 const char *op_name;
3156 tree value = NULL;
3157 enum tree_code type_code = TREE_CODE (type);
3159 op_name = is_sizeof ? "sizeof" : "__alignof__";
3161 if (type_code == FUNCTION_TYPE)
3163 if (is_sizeof)
3165 if (complain && (pedantic || warn_pointer_arith))
3166 pedwarn ("invalid application of %<sizeof%> to a function type");
3167 value = size_one_node;
3169 else
3170 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3172 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3174 if (type_code == VOID_TYPE
3175 && complain && (pedantic || warn_pointer_arith))
3176 pedwarn ("invalid application of %qs to a void type", op_name);
3177 value = size_one_node;
3179 else if (!COMPLETE_TYPE_P (type))
3181 if (complain)
3182 error ("invalid application of %qs to incomplete type %qT ",
3183 op_name, type);
3184 value = size_zero_node;
3186 else
3188 if (is_sizeof)
3189 /* Convert in case a char is more than one unit. */
3190 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3191 size_int (TYPE_PRECISION (char_type_node)
3192 / BITS_PER_UNIT));
3193 else
3194 value = size_int (TYPE_ALIGN_UNIT (type));
3197 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3198 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3199 never happen. However, this node should really have type
3200 `size_t', which is just a typedef for an ordinary integer type. */
3201 value = fold_convert (size_type_node, value);
3202 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3204 return value;
3207 /* Implement the __alignof keyword: Return the minimum required
3208 alignment of EXPR, measured in bytes. For VAR_DECL's and
3209 FIELD_DECL's return DECL_ALIGN (which can be set from an
3210 "aligned" __attribute__ specification). */
3212 tree
3213 c_alignof_expr (tree expr)
3215 tree t;
3217 if (TREE_CODE (expr) == VAR_DECL)
3218 t = size_int (DECL_ALIGN_UNIT (expr));
3220 else if (TREE_CODE (expr) == COMPONENT_REF
3221 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3223 error ("%<__alignof%> applied to a bit-field");
3224 t = size_one_node;
3226 else if (TREE_CODE (expr) == COMPONENT_REF
3227 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3228 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3230 else if (TREE_CODE (expr) == INDIRECT_REF)
3232 tree t = TREE_OPERAND (expr, 0);
3233 tree best = t;
3234 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3236 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3237 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3239 int thisalign;
3241 t = TREE_OPERAND (t, 0);
3242 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3243 if (thisalign > bestalign)
3244 best = t, bestalign = thisalign;
3246 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3248 else
3249 return c_alignof (TREE_TYPE (expr));
3251 return fold_convert (size_type_node, t);
3254 /* Handle C and C++ default attributes. */
3256 enum built_in_attribute
3258 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3259 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3260 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3261 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3262 #include "builtin-attrs.def"
3263 #undef DEF_ATTR_NULL_TREE
3264 #undef DEF_ATTR_INT
3265 #undef DEF_ATTR_IDENT
3266 #undef DEF_ATTR_TREE_LIST
3267 ATTR_LAST
3270 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3272 static void c_init_attributes (void);
3274 enum c_builtin_type
3276 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3277 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3278 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3279 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3280 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3281 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3282 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3283 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3284 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3285 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3286 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3287 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3288 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3289 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3290 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3291 NAME,
3292 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3293 #include "builtin-types.def"
3294 #undef DEF_PRIMITIVE_TYPE
3295 #undef DEF_FUNCTION_TYPE_0
3296 #undef DEF_FUNCTION_TYPE_1
3297 #undef DEF_FUNCTION_TYPE_2
3298 #undef DEF_FUNCTION_TYPE_3
3299 #undef DEF_FUNCTION_TYPE_4
3300 #undef DEF_FUNCTION_TYPE_5
3301 #undef DEF_FUNCTION_TYPE_6
3302 #undef DEF_FUNCTION_TYPE_7
3303 #undef DEF_FUNCTION_TYPE_VAR_0
3304 #undef DEF_FUNCTION_TYPE_VAR_1
3305 #undef DEF_FUNCTION_TYPE_VAR_2
3306 #undef DEF_FUNCTION_TYPE_VAR_3
3307 #undef DEF_FUNCTION_TYPE_VAR_4
3308 #undef DEF_FUNCTION_TYPE_VAR_5
3309 #undef DEF_POINTER_TYPE
3310 BT_LAST
3313 typedef enum c_builtin_type builtin_type;
3315 /* A temporary array for c_common_nodes_and_builtins. Used in
3316 communication with def_fn_type. */
3317 static tree builtin_types[(int) BT_LAST + 1];
3319 /* A helper function for c_common_nodes_and_builtins. Build function type
3320 for DEF with return type RET and N arguments. If VAR is true, then the
3321 function should be variadic after those N arguments.
3323 Takes special care not to ICE if any of the types involved are
3324 error_mark_node, which indicates that said type is not in fact available
3325 (see builtin_type_for_size). In which case the function type as a whole
3326 should be error_mark_node. */
3328 static void
3329 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3331 tree args = NULL, t;
3332 va_list list;
3333 int i;
3335 va_start (list, n);
3336 for (i = 0; i < n; ++i)
3338 builtin_type a = va_arg (list, builtin_type);
3339 t = builtin_types[a];
3340 if (t == error_mark_node)
3341 goto egress;
3342 args = tree_cons (NULL_TREE, t, args);
3344 va_end (list);
3346 args = nreverse (args);
3347 if (!var)
3348 args = chainon (args, void_list_node);
3350 t = builtin_types[ret];
3351 if (t == error_mark_node)
3352 goto egress;
3353 t = build_function_type (t, args);
3355 egress:
3356 builtin_types[def] = t;
3359 /* Build builtin functions common to both C and C++ language
3360 frontends. */
3362 static void
3363 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3365 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3366 builtin_types[ENUM] = VALUE;
3367 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3368 def_fn_type (ENUM, RETURN, 0, 0);
3369 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3370 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3371 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3372 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3373 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3374 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3375 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3376 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3377 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3378 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3379 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3380 ARG6) \
3381 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3382 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3383 ARG6, ARG7) \
3384 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3385 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3386 def_fn_type (ENUM, RETURN, 1, 0);
3387 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3388 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3389 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3390 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3391 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3392 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3393 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3394 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3395 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3396 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3397 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3398 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3400 #include "builtin-types.def"
3402 #undef DEF_PRIMITIVE_TYPE
3403 #undef DEF_FUNCTION_TYPE_1
3404 #undef DEF_FUNCTION_TYPE_2
3405 #undef DEF_FUNCTION_TYPE_3
3406 #undef DEF_FUNCTION_TYPE_4
3407 #undef DEF_FUNCTION_TYPE_5
3408 #undef DEF_FUNCTION_TYPE_6
3409 #undef DEF_FUNCTION_TYPE_VAR_0
3410 #undef DEF_FUNCTION_TYPE_VAR_1
3411 #undef DEF_FUNCTION_TYPE_VAR_2
3412 #undef DEF_FUNCTION_TYPE_VAR_3
3413 #undef DEF_FUNCTION_TYPE_VAR_4
3414 #undef DEF_FUNCTION_TYPE_VAR_5
3415 #undef DEF_POINTER_TYPE
3416 builtin_types[(int) BT_LAST] = NULL_TREE;
3418 c_init_attributes ();
3420 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3421 NONANSI_P, ATTRS, IMPLICIT, COND) \
3422 if (NAME && COND) \
3423 def_builtin_1 (ENUM, NAME, CLASS, \
3424 builtin_types[(int) TYPE], \
3425 builtin_types[(int) LIBTYPE], \
3426 BOTH_P, FALLBACK_P, NONANSI_P, \
3427 built_in_attributes[(int) ATTRS], IMPLICIT);
3428 #include "builtins.def"
3429 #undef DEF_BUILTIN
3431 build_common_builtin_nodes ();
3433 targetm.init_builtins ();
3434 if (flag_mudflap)
3435 mudflap_init ();
3438 /* Build tree nodes and builtin functions common to both C and C++ language
3439 frontends. */
3441 void
3442 c_common_nodes_and_builtins (void)
3444 int wchar_type_size;
3445 tree array_domain_type;
3446 tree va_list_ref_type_node;
3447 tree va_list_arg_type_node;
3449 /* Define `int' and `char' first so that dbx will output them first. */
3450 record_builtin_type (RID_INT, NULL, integer_type_node);
3451 record_builtin_type (RID_CHAR, "char", char_type_node);
3453 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3454 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3455 but not C. Are the conditionals here needed? */
3456 if (c_dialect_cxx ())
3457 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3458 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3459 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3460 record_builtin_type (RID_MAX, "long unsigned int",
3461 long_unsigned_type_node);
3462 if (c_dialect_cxx ())
3463 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3464 record_builtin_type (RID_MAX, "long long int",
3465 long_long_integer_type_node);
3466 record_builtin_type (RID_MAX, "long long unsigned int",
3467 long_long_unsigned_type_node);
3468 if (c_dialect_cxx ())
3469 record_builtin_type (RID_MAX, "long long unsigned",
3470 long_long_unsigned_type_node);
3471 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3472 record_builtin_type (RID_MAX, "short unsigned int",
3473 short_unsigned_type_node);
3474 if (c_dialect_cxx ())
3475 record_builtin_type (RID_MAX, "unsigned short",
3476 short_unsigned_type_node);
3478 /* Define both `signed char' and `unsigned char'. */
3479 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3480 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3482 /* These are types that c_common_type_for_size and
3483 c_common_type_for_mode use. */
3484 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3485 intQI_type_node));
3486 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3487 intHI_type_node));
3488 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3489 intSI_type_node));
3490 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3491 intDI_type_node));
3492 #if HOST_BITS_PER_WIDE_INT >= 64
3493 if (targetm.scalar_mode_supported_p (TImode))
3494 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3495 get_identifier ("__int128_t"),
3496 intTI_type_node));
3497 #endif
3498 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3499 unsigned_intQI_type_node));
3500 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3501 unsigned_intHI_type_node));
3502 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3503 unsigned_intSI_type_node));
3504 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3505 unsigned_intDI_type_node));
3506 #if HOST_BITS_PER_WIDE_INT >= 64
3507 if (targetm.scalar_mode_supported_p (TImode))
3508 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3509 get_identifier ("__uint128_t"),
3510 unsigned_intTI_type_node));
3511 #endif
3513 /* Create the widest literal types. */
3514 widest_integer_literal_type_node
3515 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3516 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3517 widest_integer_literal_type_node));
3519 widest_unsigned_literal_type_node
3520 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3521 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3522 widest_unsigned_literal_type_node));
3524 /* `unsigned long' is the standard type for sizeof.
3525 Note that stddef.h uses `unsigned long',
3526 and this must agree, even if long and int are the same size. */
3527 size_type_node =
3528 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3529 signed_size_type_node = c_common_signed_type (size_type_node);
3530 set_sizetype (size_type_node);
3532 pid_type_node =
3533 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3535 build_common_tree_nodes_2 (flag_short_double);
3537 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3538 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3539 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3541 /* Only supported decimal floating point extension if the target
3542 actually supports underlying modes. */
3543 if (targetm.scalar_mode_supported_p (SDmode)
3544 && targetm.scalar_mode_supported_p (DDmode)
3545 && targetm.scalar_mode_supported_p (TDmode))
3547 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3548 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3549 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3552 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3553 get_identifier ("complex int"),
3554 complex_integer_type_node));
3555 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3556 get_identifier ("complex float"),
3557 complex_float_type_node));
3558 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3559 get_identifier ("complex double"),
3560 complex_double_type_node));
3561 lang_hooks.decls.pushdecl
3562 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3563 complex_long_double_type_node));
3565 if (c_dialect_cxx ())
3566 /* For C++, make fileptr_type_node a distinct void * type until
3567 FILE type is defined. */
3568 fileptr_type_node = build_variant_type_copy (ptr_type_node);
3570 record_builtin_type (RID_VOID, NULL, void_type_node);
3572 /* Set the TYPE_NAME for any variants that were built before
3573 record_builtin_type gave names to the built-in types. */
3575 tree void_name = TYPE_NAME (void_type_node);
3576 TYPE_NAME (void_type_node) = NULL_TREE;
3577 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3578 = void_name;
3579 TYPE_NAME (void_type_node) = void_name;
3582 /* This node must not be shared. */
3583 void_zero_node = make_node (INTEGER_CST);
3584 TREE_TYPE (void_zero_node) = void_type_node;
3586 void_list_node = build_void_list_node ();
3588 /* Make a type to be the domain of a few array types
3589 whose domains don't really matter.
3590 200 is small enough that it always fits in size_t
3591 and large enough that it can hold most function names for the
3592 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3593 array_domain_type = build_index_type (size_int (200));
3595 /* Make a type for arrays of characters.
3596 With luck nothing will ever really depend on the length of this
3597 array type. */
3598 char_array_type_node
3599 = build_array_type (char_type_node, array_domain_type);
3601 /* Likewise for arrays of ints. */
3602 int_array_type_node
3603 = build_array_type (integer_type_node, array_domain_type);
3605 string_type_node = build_pointer_type (char_type_node);
3606 const_string_type_node
3607 = build_pointer_type (build_qualified_type
3608 (char_type_node, TYPE_QUAL_CONST));
3610 /* This is special for C++ so functions can be overloaded. */
3611 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3612 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3613 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3614 if (c_dialect_cxx ())
3616 if (TYPE_UNSIGNED (wchar_type_node))
3617 wchar_type_node = make_unsigned_type (wchar_type_size);
3618 else
3619 wchar_type_node = make_signed_type (wchar_type_size);
3620 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3622 else
3624 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3625 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3628 /* This is for wide string constants. */
3629 wchar_array_type_node
3630 = build_array_type (wchar_type_node, array_domain_type);
3632 wint_type_node =
3633 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3635 intmax_type_node =
3636 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3637 uintmax_type_node =
3638 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3640 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3641 ptrdiff_type_node
3642 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3643 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3645 lang_hooks.decls.pushdecl
3646 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3647 va_list_type_node));
3649 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3651 va_list_arg_type_node = va_list_ref_type_node =
3652 build_pointer_type (TREE_TYPE (va_list_type_node));
3654 else
3656 va_list_arg_type_node = va_list_type_node;
3657 va_list_ref_type_node = build_reference_type (va_list_type_node);
3660 if (!flag_preprocess_only)
3661 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
3663 main_identifier_node = get_identifier ("main");
3665 /* Create the built-in __null node. It is important that this is
3666 not shared. */
3667 null_node = make_node (INTEGER_CST);
3668 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3670 /* Since builtin_types isn't gc'ed, don't export these nodes. */
3671 memset (builtin_types, 0, sizeof (builtin_types));
3674 /* Look up the function in built_in_decls that corresponds to DECL
3675 and set ASMSPEC as its user assembler name. DECL must be a
3676 function decl that declares a builtin. */
3678 void
3679 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3681 tree builtin;
3682 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3683 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3684 && asmspec != 0);
3686 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3687 set_user_assembler_name (builtin, asmspec);
3688 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3689 init_block_move_fn (asmspec);
3690 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3691 init_block_clear_fn (asmspec);
3694 /* The number of named compound-literals generated thus far. */
3695 static GTY(()) int compound_literal_number;
3697 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
3699 void
3700 set_compound_literal_name (tree decl)
3702 char *name;
3703 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3704 compound_literal_number);
3705 compound_literal_number++;
3706 DECL_NAME (decl) = get_identifier (name);
3709 tree
3710 build_va_arg (tree expr, tree type)
3712 return build1 (VA_ARG_EXPR, type, expr);
3716 /* Linked list of disabled built-in functions. */
3718 typedef struct disabled_builtin
3720 const char *name;
3721 struct disabled_builtin *next;
3722 } disabled_builtin;
3723 static disabled_builtin *disabled_builtins = NULL;
3725 static bool builtin_function_disabled_p (const char *);
3727 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3728 begins with "__builtin_", give an error. */
3730 void
3731 disable_builtin_function (const char *name)
3733 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3734 error ("cannot disable built-in function %qs", name);
3735 else
3737 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3738 new_disabled_builtin->name = name;
3739 new_disabled_builtin->next = disabled_builtins;
3740 disabled_builtins = new_disabled_builtin;
3745 /* Return true if the built-in function NAME has been disabled, false
3746 otherwise. */
3748 static bool
3749 builtin_function_disabled_p (const char *name)
3751 disabled_builtin *p;
3752 for (p = disabled_builtins; p != NULL; p = p->next)
3754 if (strcmp (name, p->name) == 0)
3755 return true;
3757 return false;
3761 /* Worker for DEF_BUILTIN.
3762 Possibly define a builtin function with one or two names.
3763 Does not declare a non-__builtin_ function if flag_no_builtin, or if
3764 nonansi_p and flag_no_nonansi_builtin. */
3766 static void
3767 def_builtin_1 (enum built_in_function fncode,
3768 const char *name,
3769 enum built_in_class fnclass,
3770 tree fntype, tree libtype,
3771 bool both_p, bool fallback_p, bool nonansi_p,
3772 tree fnattrs, bool implicit_p)
3774 tree decl;
3775 const char *libname;
3777 if (fntype == error_mark_node)
3778 return;
3780 gcc_assert ((!both_p && !fallback_p)
3781 || !strncmp (name, "__builtin_",
3782 strlen ("__builtin_")));
3784 libname = name + strlen ("__builtin_");
3785 decl = add_builtin_function (name, fntype, fncode, fnclass,
3786 (fallback_p ? libname : NULL),
3787 fnattrs);
3788 if (both_p
3789 && !flag_no_builtin && !builtin_function_disabled_p (libname)
3790 && !(nonansi_p && flag_no_nonansi_builtin))
3791 add_builtin_function (libname, libtype, fncode, fnclass,
3792 NULL, fnattrs);
3794 built_in_decls[(int) fncode] = decl;
3795 if (implicit_p)
3796 implicit_built_in_decls[(int) fncode] = decl;
3799 /* Nonzero if the type T promotes to int. This is (nearly) the
3800 integral promotions defined in ISO C99 6.3.1.1/2. */
3802 bool
3803 c_promoting_integer_type_p (tree t)
3805 switch (TREE_CODE (t))
3807 case INTEGER_TYPE:
3808 return (TYPE_MAIN_VARIANT (t) == char_type_node
3809 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3810 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3811 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3812 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3813 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3815 case ENUMERAL_TYPE:
3816 /* ??? Technically all enumerations not larger than an int
3817 promote to an int. But this is used along code paths
3818 that only want to notice a size change. */
3819 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3821 case BOOLEAN_TYPE:
3822 return 1;
3824 default:
3825 return 0;
3829 /* Return 1 if PARMS specifies a fixed number of parameters
3830 and none of their types is affected by default promotions. */
3833 self_promoting_args_p (tree parms)
3835 tree t;
3836 for (t = parms; t; t = TREE_CHAIN (t))
3838 tree type = TREE_VALUE (t);
3840 if (type == error_mark_node)
3841 continue;
3843 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3844 return 0;
3846 if (type == 0)
3847 return 0;
3849 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3850 return 0;
3852 if (c_promoting_integer_type_p (type))
3853 return 0;
3855 return 1;
3858 /* Recursively examines the array elements of TYPE, until a non-array
3859 element type is found. */
3861 tree
3862 strip_array_types (tree type)
3864 while (TREE_CODE (type) == ARRAY_TYPE)
3865 type = TREE_TYPE (type);
3867 return type;
3870 /* Recursively remove any '*' or '&' operator from TYPE. */
3871 tree
3872 strip_pointer_operator (tree t)
3874 while (POINTER_TYPE_P (t))
3875 t = TREE_TYPE (t);
3876 return t;
3879 /* Used to compare case labels. K1 and K2 are actually tree nodes
3880 representing case labels, or NULL_TREE for a `default' label.
3881 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3882 K2, and 0 if K1 and K2 are equal. */
3885 case_compare (splay_tree_key k1, splay_tree_key k2)
3887 /* Consider a NULL key (such as arises with a `default' label) to be
3888 smaller than anything else. */
3889 if (!k1)
3890 return k2 ? -1 : 0;
3891 else if (!k2)
3892 return k1 ? 1 : 0;
3894 return tree_int_cst_compare ((tree) k1, (tree) k2);
3897 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3898 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3899 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3900 case label was declared using the usual C/C++ syntax, rather than
3901 the GNU case range extension. CASES is a tree containing all the
3902 case ranges processed so far; COND is the condition for the
3903 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3904 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
3906 tree
3907 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3908 tree low_value, tree high_value)
3910 tree type;
3911 tree label;
3912 tree case_label;
3913 splay_tree_node node;
3915 /* Create the LABEL_DECL itself. */
3916 label = create_artificial_label ();
3918 /* If there was an error processing the switch condition, bail now
3919 before we get more confused. */
3920 if (!cond || cond == error_mark_node)
3921 goto error_out;
3923 if ((low_value && TREE_TYPE (low_value)
3924 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3925 || (high_value && TREE_TYPE (high_value)
3926 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3928 error ("pointers are not permitted as case values");
3929 goto error_out;
3932 /* Case ranges are a GNU extension. */
3933 if (high_value && pedantic)
3934 pedwarn ("range expressions in switch statements are non-standard");
3936 type = TREE_TYPE (cond);
3937 if (low_value)
3939 low_value = check_case_value (low_value);
3940 low_value = convert_and_check (type, low_value);
3941 if (low_value == error_mark_node)
3942 goto error_out;
3944 if (high_value)
3946 high_value = check_case_value (high_value);
3947 high_value = convert_and_check (type, high_value);
3948 if (high_value == error_mark_node)
3949 goto error_out;
3952 if (low_value && high_value)
3954 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3955 really a case range, even though it was written that way.
3956 Remove the HIGH_VALUE to simplify later processing. */
3957 if (tree_int_cst_equal (low_value, high_value))
3958 high_value = NULL_TREE;
3959 else if (!tree_int_cst_lt (low_value, high_value))
3960 warning (0, "empty range specified");
3963 /* See if the case is in range of the type of the original testing
3964 expression. If both low_value and high_value are out of range,
3965 don't insert the case label and return NULL_TREE. */
3966 if (low_value
3967 && !check_case_bounds (type, orig_type,
3968 &low_value, high_value ? &high_value : NULL))
3969 return NULL_TREE;
3971 /* Look up the LOW_VALUE in the table of case labels we already
3972 have. */
3973 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3974 /* If there was not an exact match, check for overlapping ranges.
3975 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3976 that's a `default' label and the only overlap is an exact match. */
3977 if (!node && (low_value || high_value))
3979 splay_tree_node low_bound;
3980 splay_tree_node high_bound;
3982 /* Even though there wasn't an exact match, there might be an
3983 overlap between this case range and another case range.
3984 Since we've (inductively) not allowed any overlapping case
3985 ranges, we simply need to find the greatest low case label
3986 that is smaller that LOW_VALUE, and the smallest low case
3987 label that is greater than LOW_VALUE. If there is an overlap
3988 it will occur in one of these two ranges. */
3989 low_bound = splay_tree_predecessor (cases,
3990 (splay_tree_key) low_value);
3991 high_bound = splay_tree_successor (cases,
3992 (splay_tree_key) low_value);
3994 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3995 the LOW_VALUE, so there is no need to check unless the
3996 LOW_BOUND is in fact itself a case range. */
3997 if (low_bound
3998 && CASE_HIGH ((tree) low_bound->value)
3999 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
4000 low_value) >= 0)
4001 node = low_bound;
4002 /* Check to see if the HIGH_BOUND overlaps. The low end of that
4003 range is bigger than the low end of the current range, so we
4004 are only interested if the current range is a real range, and
4005 not an ordinary case label. */
4006 else if (high_bound
4007 && high_value
4008 && (tree_int_cst_compare ((tree) high_bound->key,
4009 high_value)
4010 <= 0))
4011 node = high_bound;
4013 /* If there was an overlap, issue an error. */
4014 if (node)
4016 tree duplicate = CASE_LABEL ((tree) node->value);
4018 if (high_value)
4020 error ("duplicate (or overlapping) case value");
4021 error ("%Jthis is the first entry overlapping that value", duplicate);
4023 else if (low_value)
4025 error ("duplicate case value") ;
4026 error ("%Jpreviously used here", duplicate);
4028 else
4030 error ("multiple default labels in one switch");
4031 error ("%Jthis is the first default label", duplicate);
4033 goto error_out;
4036 /* Add a CASE_LABEL to the statement-tree. */
4037 case_label = add_stmt (build_case_label (low_value, high_value, label));
4038 /* Register this case label in the splay tree. */
4039 splay_tree_insert (cases,
4040 (splay_tree_key) low_value,
4041 (splay_tree_value) case_label);
4043 return case_label;
4045 error_out:
4046 /* Add a label so that the back-end doesn't think that the beginning of
4047 the switch is unreachable. Note that we do not add a case label, as
4048 that just leads to duplicates and thence to failure later on. */
4049 if (!cases->root)
4051 tree t = create_artificial_label ();
4052 add_stmt (build_stmt (LABEL_EXPR, t));
4054 return error_mark_node;
4057 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
4058 Used to verify that case values match up with enumerator values. */
4060 static void
4061 match_case_to_enum_1 (tree key, tree type, tree label)
4063 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
4065 /* ??? Not working too hard to print the double-word value.
4066 Should perhaps be done with %lwd in the diagnostic routines? */
4067 if (TREE_INT_CST_HIGH (key) == 0)
4068 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
4069 TREE_INT_CST_LOW (key));
4070 else if (!TYPE_UNSIGNED (type)
4071 && TREE_INT_CST_HIGH (key) == -1
4072 && TREE_INT_CST_LOW (key) != 0)
4073 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
4074 -TREE_INT_CST_LOW (key));
4075 else
4076 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
4077 TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
4079 if (TYPE_NAME (type) == 0)
4080 warning (0, "%Jcase value %qs not in enumerated type",
4081 CASE_LABEL (label), buf);
4082 else
4083 warning (0, "%Jcase value %qs not in enumerated type %qT",
4084 CASE_LABEL (label), buf, type);
4087 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
4088 Used to verify that case values match up with enumerator values. */
4090 static int
4091 match_case_to_enum (splay_tree_node node, void *data)
4093 tree label = (tree) node->value;
4094 tree type = (tree) data;
4096 /* Skip default case. */
4097 if (!CASE_LOW (label))
4098 return 0;
4100 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
4101 when we did our enum->case scan. Reset our scratch bit after. */
4102 if (!CASE_LOW_SEEN (label))
4103 match_case_to_enum_1 (CASE_LOW (label), type, label);
4104 else
4105 CASE_LOW_SEEN (label) = 0;
4107 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
4108 not set, that means that CASE_HIGH did not appear when we did our
4109 enum->case scan. Reset our scratch bit after. */
4110 if (CASE_HIGH (label))
4112 if (!CASE_HIGH_SEEN (label))
4113 match_case_to_enum_1 (CASE_HIGH (label), type, label);
4114 else
4115 CASE_HIGH_SEEN (label) = 0;
4118 return 0;
4121 /* Handle -Wswitch*. Called from the front end after parsing the
4122 switch construct. */
4123 /* ??? Should probably be somewhere generic, since other languages
4124 besides C and C++ would want this. At the moment, however, C/C++
4125 are the only tree-ssa languages that support enumerations at all,
4126 so the point is moot. */
4128 void
4129 c_do_switch_warnings (splay_tree cases, location_t switch_location,
4130 tree type, tree cond)
4132 splay_tree_node default_node;
4133 splay_tree_node node;
4134 tree chain;
4136 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
4137 return;
4139 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
4140 if (!default_node)
4141 warning (OPT_Wswitch_default, "%Hswitch missing default case",
4142 &switch_location);
4144 /* From here on, we only care about about enumerated types. */
4145 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
4146 return;
4148 /* If the switch expression was an enumerated type, check that
4149 exactly all enumeration literals are covered by the cases.
4150 The check is made when -Wswitch was specified and there is no
4151 default case, or when -Wswitch-enum was specified. */
4153 if (!warn_switch_enum
4154 && !(warn_switch && !default_node))
4155 return;
4157 /* Clearing COND if it is not an integer constant simplifies
4158 the tests inside the loop below. */
4159 if (TREE_CODE (cond) != INTEGER_CST)
4160 cond = NULL_TREE;
4162 /* The time complexity here is O(N*lg(N)) worst case, but for the
4163 common case of monotonically increasing enumerators, it is
4164 O(N), since the nature of the splay tree will keep the next
4165 element adjacent to the root at all times. */
4167 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
4169 tree value = TREE_VALUE (chain);
4170 node = splay_tree_lookup (cases, (splay_tree_key) value);
4171 if (node)
4173 /* Mark the CASE_LOW part of the case entry as seen. */
4174 tree label = (tree) node->value;
4175 CASE_LOW_SEEN (label) = 1;
4176 continue;
4179 /* Even though there wasn't an exact match, there might be a
4180 case range which includes the enumator's value. */
4181 node = splay_tree_predecessor (cases, (splay_tree_key) value);
4182 if (node && CASE_HIGH ((tree) node->value))
4184 tree label = (tree) node->value;
4185 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
4186 if (cmp >= 0)
4188 /* If we match the upper bound exactly, mark the CASE_HIGH
4189 part of the case entry as seen. */
4190 if (cmp == 0)
4191 CASE_HIGH_SEEN (label) = 1;
4192 continue;
4196 /* We've now determined that this enumerated literal isn't
4197 handled by the case labels of the switch statement. */
4199 /* If the switch expression is a constant, we only really care
4200 about whether that constant is handled by the switch. */
4201 if (cond && tree_int_cst_compare (cond, value))
4202 continue;
4204 warning (0, "%Henumeration value %qE not handled in switch",
4205 &switch_location, TREE_PURPOSE (chain));
4208 /* Warn if there are case expressions that don't correspond to
4209 enumerators. This can occur since C and C++ don't enforce
4210 type-checking of assignments to enumeration variables.
4212 The time complexity here is now always O(N) worst case, since
4213 we should have marked both the lower bound and upper bound of
4214 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
4215 above. This scan also resets those fields. */
4216 splay_tree_foreach (cases, match_case_to_enum, type);
4219 /* Finish an expression taking the address of LABEL (an
4220 IDENTIFIER_NODE). Returns an expression for the address. */
4222 tree
4223 finish_label_address_expr (tree label)
4225 tree result;
4227 if (pedantic)
4228 pedwarn ("taking the address of a label is non-standard");
4230 if (label == error_mark_node)
4231 return error_mark_node;
4233 label = lookup_label (label);
4234 if (label == NULL_TREE)
4235 result = null_pointer_node;
4236 else
4238 TREE_USED (label) = 1;
4239 result = build1 (ADDR_EXPR, ptr_type_node, label);
4240 /* The current function in not necessarily uninlinable.
4241 Computed gotos are incompatible with inlining, but the value
4242 here could be used only in a diagnostic, for example. */
4245 return result;
4248 /* Hook used by expand_expr to expand language-specific tree codes. */
4249 /* The only things that should go here are bits needed to expand
4250 constant initializers. Everything else should be handled by the
4251 gimplification routines. */
4254 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
4255 int modifier /* Actually enum_modifier. */,
4256 rtx *alt_rtl)
4258 switch (TREE_CODE (exp))
4260 case COMPOUND_LITERAL_EXPR:
4262 /* Initialize the anonymous variable declared in the compound
4263 literal, then return the variable. */
4264 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4265 emit_local_var (decl);
4266 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
4269 default:
4270 gcc_unreachable ();
4275 /* Generate the RTL for the body of FNDECL. */
4277 void
4278 c_expand_body (tree fndecl)
4281 if (!DECL_INITIAL (fndecl)
4282 || DECL_INITIAL (fndecl) == error_mark_node)
4283 return;
4285 tree_rest_of_compilation (fndecl);
4287 if (DECL_STATIC_CONSTRUCTOR (fndecl)
4288 && targetm.have_ctors_dtors)
4289 targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
4290 decl_init_priority_lookup (fndecl));
4291 if (DECL_STATIC_DESTRUCTOR (fndecl)
4292 && targetm.have_ctors_dtors)
4293 targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
4294 decl_fini_priority_lookup (fndecl));
4297 /* Hook used by staticp to handle language-specific tree codes. */
4299 tree
4300 c_staticp (tree exp)
4302 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4303 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4304 ? exp : NULL);
4308 /* Given a boolean expression ARG, return a tree representing an increment
4309 or decrement (as indicated by CODE) of ARG. The front end must check for
4310 invalid cases (e.g., decrement in C++). */
4311 tree
4312 boolean_increment (enum tree_code code, tree arg)
4314 tree val;
4315 tree true_res = boolean_true_node;
4317 arg = stabilize_reference (arg);
4318 switch (code)
4320 case PREINCREMENT_EXPR:
4321 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4322 break;
4323 case POSTINCREMENT_EXPR:
4324 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4325 arg = save_expr (arg);
4326 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4327 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4328 break;
4329 case PREDECREMENT_EXPR:
4330 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4331 invert_truthvalue (arg));
4332 break;
4333 case POSTDECREMENT_EXPR:
4334 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4335 invert_truthvalue (arg));
4336 arg = save_expr (arg);
4337 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4338 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4339 break;
4340 default:
4341 gcc_unreachable ();
4343 TREE_SIDE_EFFECTS (val) = 1;
4344 return val;
4347 /* Built-in macros for stddef.h, that require macros defined in this
4348 file. */
4349 void
4350 c_stddef_cpp_builtins(void)
4352 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4353 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4354 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4355 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4356 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4357 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4360 static void
4361 c_init_attributes (void)
4363 /* Fill in the built_in_attributes array. */
4364 #define DEF_ATTR_NULL_TREE(ENUM) \
4365 built_in_attributes[(int) ENUM] = NULL_TREE;
4366 #define DEF_ATTR_INT(ENUM, VALUE) \
4367 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4368 #define DEF_ATTR_IDENT(ENUM, STRING) \
4369 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4370 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4371 built_in_attributes[(int) ENUM] \
4372 = tree_cons (built_in_attributes[(int) PURPOSE], \
4373 built_in_attributes[(int) VALUE], \
4374 built_in_attributes[(int) CHAIN]);
4375 #include "builtin-attrs.def"
4376 #undef DEF_ATTR_NULL_TREE
4377 #undef DEF_ATTR_INT
4378 #undef DEF_ATTR_IDENT
4379 #undef DEF_ATTR_TREE_LIST
4382 /* Attribute handlers common to C front ends. */
4384 /* Handle a "packed" attribute; arguments as in
4385 struct attribute_spec.handler. */
4387 static tree
4388 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4389 int flags, bool *no_add_attrs)
4391 if (TYPE_P (*node))
4393 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4394 *node = build_variant_type_copy (*node);
4395 TYPE_PACKED (*node) = 1;
4397 else if (TREE_CODE (*node) == FIELD_DECL)
4399 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4400 warning (OPT_Wattributes,
4401 "%qE attribute ignored for field of type %qT",
4402 name, TREE_TYPE (*node));
4403 else
4404 DECL_PACKED (*node) = 1;
4406 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4407 used for DECL_REGISTER. It wouldn't mean anything anyway.
4408 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4409 that changes what the typedef is typing. */
4410 else
4412 warning (OPT_Wattributes, "%qE attribute ignored", name);
4413 *no_add_attrs = true;
4416 return NULL_TREE;
4419 /* Handle a "nocommon" attribute; arguments as in
4420 struct attribute_spec.handler. */
4422 static tree
4423 handle_nocommon_attribute (tree *node, tree name,
4424 tree ARG_UNUSED (args),
4425 int ARG_UNUSED (flags), bool *no_add_attrs)
4427 if (TREE_CODE (*node) == VAR_DECL)
4428 DECL_COMMON (*node) = 0;
4429 else
4431 warning (OPT_Wattributes, "%qE attribute ignored", name);
4432 *no_add_attrs = true;
4435 return NULL_TREE;
4438 /* Handle a "common" attribute; arguments as in
4439 struct attribute_spec.handler. */
4441 static tree
4442 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4443 int ARG_UNUSED (flags), bool *no_add_attrs)
4445 if (TREE_CODE (*node) == VAR_DECL)
4446 DECL_COMMON (*node) = 1;
4447 else
4449 warning (OPT_Wattributes, "%qE attribute ignored", name);
4450 *no_add_attrs = true;
4453 return NULL_TREE;
4456 /* Handle a "noreturn" attribute; arguments as in
4457 struct attribute_spec.handler. */
4459 static tree
4460 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4461 int ARG_UNUSED (flags), bool *no_add_attrs)
4463 tree type = TREE_TYPE (*node);
4465 /* See FIXME comment in c_common_attribute_table. */
4466 if (TREE_CODE (*node) == FUNCTION_DECL)
4467 TREE_THIS_VOLATILE (*node) = 1;
4468 else if (TREE_CODE (type) == POINTER_TYPE
4469 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4470 TREE_TYPE (*node)
4471 = build_pointer_type
4472 (build_type_variant (TREE_TYPE (type),
4473 TYPE_READONLY (TREE_TYPE (type)), 1));
4474 else
4476 warning (OPT_Wattributes, "%qE attribute ignored", name);
4477 *no_add_attrs = true;
4480 return NULL_TREE;
4483 /* Handle a "hot" and attribute; arguments as in
4484 struct attribute_spec.handler. */
4486 static tree
4487 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4488 int ARG_UNUSED (flags), bool *no_add_attrs)
4490 if (TREE_CODE (*node) == FUNCTION_DECL)
4492 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
4494 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4495 name, "cold");
4496 *no_add_attrs = true;
4498 /* Do nothing else, just set the attribute. We'll get at
4499 it later with lookup_attribute. */
4501 else
4503 warning (OPT_Wattributes, "%qE attribute ignored", name);
4504 *no_add_attrs = true;
4507 return NULL_TREE;
4509 /* Handle a "cold" and attribute; arguments as in
4510 struct attribute_spec.handler. */
4512 static tree
4513 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4514 int ARG_UNUSED (flags), bool *no_add_attrs)
4516 if (TREE_CODE (*node) == FUNCTION_DECL)
4518 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
4520 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4521 name, "hot");
4522 *no_add_attrs = true;
4524 /* Do nothing else, just set the attribute. We'll get at
4525 it later with lookup_attribute. */
4527 else
4529 warning (OPT_Wattributes, "%qE attribute ignored", name);
4530 *no_add_attrs = true;
4533 return NULL_TREE;
4536 /* Handle a "noinline" attribute; arguments as in
4537 struct attribute_spec.handler. */
4539 static tree
4540 handle_noinline_attribute (tree *node, tree name,
4541 tree ARG_UNUSED (args),
4542 int ARG_UNUSED (flags), bool *no_add_attrs)
4544 if (TREE_CODE (*node) == FUNCTION_DECL)
4545 DECL_UNINLINABLE (*node) = 1;
4546 else
4548 warning (OPT_Wattributes, "%qE attribute ignored", name);
4549 *no_add_attrs = true;
4552 return NULL_TREE;
4555 /* Handle a "always_inline" attribute; arguments as in
4556 struct attribute_spec.handler. */
4558 static tree
4559 handle_always_inline_attribute (tree *node, tree name,
4560 tree ARG_UNUSED (args),
4561 int ARG_UNUSED (flags),
4562 bool *no_add_attrs)
4564 if (TREE_CODE (*node) == FUNCTION_DECL)
4566 /* Do nothing else, just set the attribute. We'll get at
4567 it later with lookup_attribute. */
4569 else
4571 warning (OPT_Wattributes, "%qE attribute ignored", name);
4572 *no_add_attrs = true;
4575 return NULL_TREE;
4578 /* Handle a "gnu_inline" attribute; arguments as in
4579 struct attribute_spec.handler. */
4581 static tree
4582 handle_gnu_inline_attribute (tree *node, tree name,
4583 tree ARG_UNUSED (args),
4584 int ARG_UNUSED (flags),
4585 bool *no_add_attrs)
4587 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4589 /* Do nothing else, just set the attribute. We'll get at
4590 it later with lookup_attribute. */
4592 else
4594 warning (OPT_Wattributes, "%qE attribute ignored", name);
4595 *no_add_attrs = true;
4598 return NULL_TREE;
4601 /* Handle a "flatten" attribute; arguments as in
4602 struct attribute_spec.handler. */
4604 static tree
4605 handle_flatten_attribute (tree *node, tree name,
4606 tree args ATTRIBUTE_UNUSED,
4607 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4609 if (TREE_CODE (*node) == FUNCTION_DECL)
4610 /* Do nothing else, just set the attribute. We'll get at
4611 it later with lookup_attribute. */
4613 else
4615 warning (OPT_Wattributes, "%qE attribute ignored", name);
4616 *no_add_attrs = true;
4619 return NULL_TREE;
4623 /* Handle a "used" attribute; arguments as in
4624 struct attribute_spec.handler. */
4626 static tree
4627 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4628 int ARG_UNUSED (flags), bool *no_add_attrs)
4630 tree node = *pnode;
4632 if (TREE_CODE (node) == FUNCTION_DECL
4633 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4635 TREE_USED (node) = 1;
4636 DECL_PRESERVE_P (node) = 1;
4638 else
4640 warning (OPT_Wattributes, "%qE attribute ignored", name);
4641 *no_add_attrs = true;
4644 return NULL_TREE;
4647 /* Handle a "unused" attribute; arguments as in
4648 struct attribute_spec.handler. */
4650 static tree
4651 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4652 int flags, bool *no_add_attrs)
4654 if (DECL_P (*node))
4656 tree decl = *node;
4658 if (TREE_CODE (decl) == PARM_DECL
4659 || TREE_CODE (decl) == VAR_DECL
4660 || TREE_CODE (decl) == FUNCTION_DECL
4661 || TREE_CODE (decl) == LABEL_DECL
4662 || TREE_CODE (decl) == TYPE_DECL)
4663 TREE_USED (decl) = 1;
4664 else
4666 warning (OPT_Wattributes, "%qE attribute ignored", name);
4667 *no_add_attrs = true;
4670 else
4672 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4673 *node = build_variant_type_copy (*node);
4674 TREE_USED (*node) = 1;
4677 return NULL_TREE;
4680 /* Handle a "externally_visible" attribute; arguments as in
4681 struct attribute_spec.handler. */
4683 static tree
4684 handle_externally_visible_attribute (tree *pnode, tree name,
4685 tree ARG_UNUSED (args),
4686 int ARG_UNUSED (flags),
4687 bool *no_add_attrs)
4689 tree node = *pnode;
4691 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
4693 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
4694 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
4696 warning (OPT_Wattributes,
4697 "%qE attribute have effect only on public objects", name);
4698 *no_add_attrs = true;
4701 else
4703 warning (OPT_Wattributes, "%qE attribute ignored", name);
4704 *no_add_attrs = true;
4707 return NULL_TREE;
4710 /* Handle a "const" attribute; arguments as in
4711 struct attribute_spec.handler. */
4713 static tree
4714 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4715 int ARG_UNUSED (flags), bool *no_add_attrs)
4717 tree type = TREE_TYPE (*node);
4719 /* See FIXME comment on noreturn in c_common_attribute_table. */
4720 if (TREE_CODE (*node) == FUNCTION_DECL)
4721 TREE_READONLY (*node) = 1;
4722 else if (TREE_CODE (type) == POINTER_TYPE
4723 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4724 TREE_TYPE (*node)
4725 = build_pointer_type
4726 (build_type_variant (TREE_TYPE (type), 1,
4727 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4728 else
4730 warning (OPT_Wattributes, "%qE attribute ignored", name);
4731 *no_add_attrs = true;
4734 return NULL_TREE;
4737 /* Handle a "transparent_union" attribute; arguments as in
4738 struct attribute_spec.handler. */
4740 static tree
4741 handle_transparent_union_attribute (tree *node, tree name,
4742 tree ARG_UNUSED (args), int flags,
4743 bool *no_add_attrs)
4745 tree type = NULL;
4747 *no_add_attrs = true;
4749 if (DECL_P (*node))
4751 if (TREE_CODE (*node) != TYPE_DECL)
4752 goto ignored;
4753 node = &TREE_TYPE (*node);
4754 type = *node;
4756 else if (TYPE_P (*node))
4757 type = *node;
4758 else
4759 goto ignored;
4761 if (TREE_CODE (type) == UNION_TYPE)
4763 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4764 the code in finish_struct. */
4765 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4767 if (TYPE_FIELDS (type) == NULL_TREE
4768 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4769 goto ignored;
4771 /* A type variant isn't good enough, since we don't a cast
4772 to such a type removed as a no-op. */
4773 *node = type = build_duplicate_type (type);
4776 TYPE_TRANSPARENT_UNION (type) = 1;
4777 return NULL_TREE;
4780 ignored:
4781 warning (OPT_Wattributes, "%qE attribute ignored", name);
4782 return NULL_TREE;
4785 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
4786 get the requested priority for a constructor or destructor,
4787 possibly issuing diagnostics for invalid or reserved
4788 priorities. */
4790 static priority_type
4791 get_priority (tree args, bool is_destructor)
4793 HOST_WIDE_INT pri;
4794 tree arg;
4796 if (!args)
4797 return DEFAULT_INIT_PRIORITY;
4799 if (!SUPPORTS_INIT_PRIORITY)
4801 if (is_destructor)
4802 error ("destructor priorities are not supported");
4803 else
4804 error ("constructor priorities are not supported");
4805 return DEFAULT_INIT_PRIORITY;
4808 arg = TREE_VALUE (args);
4809 if (!host_integerp (arg, /*pos=*/0)
4810 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4811 goto invalid;
4813 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
4814 if (pri < 0 || pri > MAX_INIT_PRIORITY)
4815 goto invalid;
4817 if (pri <= MAX_RESERVED_INIT_PRIORITY)
4819 if (is_destructor)
4820 warning (0,
4821 "destructor priorities from 0 to %d are reserved "
4822 "for the implementation",
4823 MAX_RESERVED_INIT_PRIORITY);
4824 else
4825 warning (0,
4826 "constructor priorities from 0 to %d are reserved "
4827 "for the implementation",
4828 MAX_RESERVED_INIT_PRIORITY);
4830 return pri;
4832 invalid:
4833 if (is_destructor)
4834 error ("destructor priorities must be integers from 0 to %d inclusive",
4835 MAX_INIT_PRIORITY);
4836 else
4837 error ("constructor priorities must be integers from 0 to %d inclusive",
4838 MAX_INIT_PRIORITY);
4839 return DEFAULT_INIT_PRIORITY;
4842 /* Handle a "constructor" attribute; arguments as in
4843 struct attribute_spec.handler. */
4845 static tree
4846 handle_constructor_attribute (tree *node, tree name, tree args,
4847 int ARG_UNUSED (flags),
4848 bool *no_add_attrs)
4850 tree decl = *node;
4851 tree type = TREE_TYPE (decl);
4853 if (TREE_CODE (decl) == FUNCTION_DECL
4854 && TREE_CODE (type) == FUNCTION_TYPE
4855 && decl_function_context (decl) == 0)
4857 priority_type priority;
4858 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4859 priority = get_priority (args, /*is_destructor=*/false);
4860 SET_DECL_INIT_PRIORITY (decl, priority);
4861 TREE_USED (decl) = 1;
4863 else
4865 warning (OPT_Wattributes, "%qE attribute ignored", name);
4866 *no_add_attrs = true;
4869 return NULL_TREE;
4872 /* Handle a "destructor" attribute; arguments as in
4873 struct attribute_spec.handler. */
4875 static tree
4876 handle_destructor_attribute (tree *node, tree name, tree args,
4877 int ARG_UNUSED (flags),
4878 bool *no_add_attrs)
4880 tree decl = *node;
4881 tree type = TREE_TYPE (decl);
4883 if (TREE_CODE (decl) == FUNCTION_DECL
4884 && TREE_CODE (type) == FUNCTION_TYPE
4885 && decl_function_context (decl) == 0)
4887 priority_type priority;
4888 DECL_STATIC_DESTRUCTOR (decl) = 1;
4889 priority = get_priority (args, /*is_destructor=*/true);
4890 SET_DECL_FINI_PRIORITY (decl, priority);
4891 TREE_USED (decl) = 1;
4893 else
4895 warning (OPT_Wattributes, "%qE attribute ignored", name);
4896 *no_add_attrs = true;
4899 return NULL_TREE;
4902 /* Handle a "mode" attribute; arguments as in
4903 struct attribute_spec.handler. */
4905 static tree
4906 handle_mode_attribute (tree *node, tree name, tree args,
4907 int ARG_UNUSED (flags), bool *no_add_attrs)
4909 tree type = *node;
4911 *no_add_attrs = true;
4913 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4914 warning (OPT_Wattributes, "%qE attribute ignored", name);
4915 else
4917 int j;
4918 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4919 int len = strlen (p);
4920 enum machine_mode mode = VOIDmode;
4921 tree typefm;
4922 bool valid_mode;
4924 if (len > 4 && p[0] == '_' && p[1] == '_'
4925 && p[len - 1] == '_' && p[len - 2] == '_')
4927 char *newp = (char *) alloca (len - 1);
4929 strcpy (newp, &p[2]);
4930 newp[len - 4] = '\0';
4931 p = newp;
4934 /* Change this type to have a type with the specified mode.
4935 First check for the special modes. */
4936 if (!strcmp (p, "byte"))
4937 mode = byte_mode;
4938 else if (!strcmp (p, "word"))
4939 mode = word_mode;
4940 else if (!strcmp (p, "pointer"))
4941 mode = ptr_mode;
4942 else
4943 for (j = 0; j < NUM_MACHINE_MODES; j++)
4944 if (!strcmp (p, GET_MODE_NAME (j)))
4946 mode = (enum machine_mode) j;
4947 break;
4950 if (mode == VOIDmode)
4952 error ("unknown machine mode %qs", p);
4953 return NULL_TREE;
4956 valid_mode = false;
4957 switch (GET_MODE_CLASS (mode))
4959 case MODE_INT:
4960 case MODE_PARTIAL_INT:
4961 case MODE_FLOAT:
4962 case MODE_DECIMAL_FLOAT:
4963 valid_mode = targetm.scalar_mode_supported_p (mode);
4964 break;
4966 case MODE_COMPLEX_INT:
4967 case MODE_COMPLEX_FLOAT:
4968 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4969 break;
4971 case MODE_VECTOR_INT:
4972 case MODE_VECTOR_FLOAT:
4973 warning (OPT_Wattributes, "specifying vector types with "
4974 "__attribute__ ((mode)) is deprecated");
4975 warning (OPT_Wattributes,
4976 "use __attribute__ ((vector_size)) instead");
4977 valid_mode = vector_mode_valid_p (mode);
4978 break;
4980 default:
4981 break;
4983 if (!valid_mode)
4985 error ("unable to emulate %qs", p);
4986 return NULL_TREE;
4989 if (POINTER_TYPE_P (type))
4991 tree (*fn)(tree, enum machine_mode, bool);
4993 if (!targetm.valid_pointer_mode (mode))
4995 error ("invalid pointer mode %qs", p);
4996 return NULL_TREE;
4999 if (TREE_CODE (type) == POINTER_TYPE)
5000 fn = build_pointer_type_for_mode;
5001 else
5002 fn = build_reference_type_for_mode;
5003 typefm = fn (TREE_TYPE (type), mode, false);
5005 else
5006 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
5008 if (typefm == NULL_TREE)
5010 error ("no data type for mode %qs", p);
5011 return NULL_TREE;
5013 else if (TREE_CODE (type) == ENUMERAL_TYPE)
5015 /* For enumeral types, copy the precision from the integer
5016 type returned above. If not an INTEGER_TYPE, we can't use
5017 this mode for this type. */
5018 if (TREE_CODE (typefm) != INTEGER_TYPE)
5020 error ("cannot use mode %qs for enumeral types", p);
5021 return NULL_TREE;
5024 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
5026 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
5027 typefm = type;
5029 else
5031 /* We cannot build a type variant, as there's code that assumes
5032 that TYPE_MAIN_VARIANT has the same mode. This includes the
5033 debug generators. Instead, create a subrange type. This
5034 results in all of the enumeral values being emitted only once
5035 in the original, and the subtype gets them by reference. */
5036 if (TYPE_UNSIGNED (type))
5037 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
5038 else
5039 typefm = make_signed_type (TYPE_PRECISION (typefm));
5040 TREE_TYPE (typefm) = type;
5043 else if (VECTOR_MODE_P (mode)
5044 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
5045 : TREE_CODE (type) != TREE_CODE (typefm))
5047 error ("mode %qs applied to inappropriate type", p);
5048 return NULL_TREE;
5051 *node = typefm;
5054 return NULL_TREE;
5057 /* Handle a "section" attribute; arguments as in
5058 struct attribute_spec.handler. */
5060 static tree
5061 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5062 int ARG_UNUSED (flags), bool *no_add_attrs)
5064 tree decl = *node;
5066 if (targetm.have_named_sections)
5068 user_defined_section_attribute = true;
5070 if ((TREE_CODE (decl) == FUNCTION_DECL
5071 || TREE_CODE (decl) == VAR_DECL)
5072 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5074 if (TREE_CODE (decl) == VAR_DECL
5075 && current_function_decl != NULL_TREE
5076 && !TREE_STATIC (decl))
5078 error ("%Jsection attribute cannot be specified for "
5079 "local variables", decl);
5080 *no_add_attrs = true;
5083 /* The decl may have already been given a section attribute
5084 from a previous declaration. Ensure they match. */
5085 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5086 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5087 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5089 error ("section of %q+D conflicts with previous declaration",
5090 *node);
5091 *no_add_attrs = true;
5093 else
5094 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5096 else
5098 error ("section attribute not allowed for %q+D", *node);
5099 *no_add_attrs = true;
5102 else
5104 error ("%Jsection attributes are not supported for this target", *node);
5105 *no_add_attrs = true;
5108 return NULL_TREE;
5111 /* Handle a "aligned" attribute; arguments as in
5112 struct attribute_spec.handler. */
5114 static tree
5115 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5116 int flags, bool *no_add_attrs)
5118 tree decl = NULL_TREE;
5119 tree *type = NULL;
5120 int is_type = 0;
5121 tree align_expr = (args ? TREE_VALUE (args)
5122 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5123 int i;
5125 if (DECL_P (*node))
5127 decl = *node;
5128 type = &TREE_TYPE (decl);
5129 is_type = TREE_CODE (*node) == TYPE_DECL;
5131 else if (TYPE_P (*node))
5132 type = node, is_type = 1;
5134 if (TREE_CODE (align_expr) != INTEGER_CST)
5136 error ("requested alignment is not a constant");
5137 *no_add_attrs = true;
5139 else if ((i = tree_log2 (align_expr)) == -1)
5141 error ("requested alignment is not a power of 2");
5142 *no_add_attrs = true;
5144 else if (i > HOST_BITS_PER_INT - 2)
5146 error ("requested alignment is too large");
5147 *no_add_attrs = true;
5149 else if (is_type)
5151 /* If we have a TYPE_DECL, then copy the type, so that we
5152 don't accidentally modify a builtin type. See pushdecl. */
5153 if (decl && TREE_TYPE (decl) != error_mark_node
5154 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5156 tree tt = TREE_TYPE (decl);
5157 *type = build_variant_type_copy (*type);
5158 DECL_ORIGINAL_TYPE (decl) = tt;
5159 TYPE_NAME (*type) = decl;
5160 TREE_USED (*type) = TREE_USED (decl);
5161 TREE_TYPE (decl) = *type;
5163 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5164 *type = build_variant_type_copy (*type);
5166 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5167 TYPE_USER_ALIGN (*type) = 1;
5169 else if (TREE_CODE (decl) != VAR_DECL
5170 && TREE_CODE (decl) != FIELD_DECL)
5172 error ("alignment may not be specified for %q+D", decl);
5173 *no_add_attrs = true;
5175 else
5177 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5178 DECL_USER_ALIGN (decl) = 1;
5181 return NULL_TREE;
5184 /* Handle a "weak" attribute; arguments as in
5185 struct attribute_spec.handler. */
5187 static tree
5188 handle_weak_attribute (tree *node, tree name,
5189 tree ARG_UNUSED (args),
5190 int ARG_UNUSED (flags),
5191 bool * ARG_UNUSED (no_add_attrs))
5193 if (TREE_CODE (*node) == FUNCTION_DECL
5194 || TREE_CODE (*node) == VAR_DECL)
5195 declare_weak (*node);
5196 else
5197 warning (OPT_Wattributes, "%qE attribute ignored", name);
5200 return NULL_TREE;
5203 /* Handle an "alias" attribute; arguments as in
5204 struct attribute_spec.handler. */
5206 static tree
5207 handle_alias_attribute (tree *node, tree name, tree args,
5208 int ARG_UNUSED (flags), bool *no_add_attrs)
5210 tree decl = *node;
5212 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5213 || (TREE_CODE (decl) != FUNCTION_DECL
5214 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
5215 /* A static variable declaration is always a tentative definition,
5216 but the alias is a non-tentative definition which overrides. */
5217 || (TREE_CODE (decl) != FUNCTION_DECL
5218 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
5220 error ("%q+D defined both normally and as an alias", decl);
5221 *no_add_attrs = true;
5224 /* Note that the very first time we process a nested declaration,
5225 decl_function_context will not be set. Indeed, *would* never
5226 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
5227 we do below. After such frobbery, pushdecl would set the context.
5228 In any case, this is never what we want. */
5229 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
5231 tree id;
5233 id = TREE_VALUE (args);
5234 if (TREE_CODE (id) != STRING_CST)
5236 error ("alias argument not a string");
5237 *no_add_attrs = true;
5238 return NULL_TREE;
5240 id = get_identifier (TREE_STRING_POINTER (id));
5241 /* This counts as a use of the object pointed to. */
5242 TREE_USED (id) = 1;
5244 if (TREE_CODE (decl) == FUNCTION_DECL)
5245 DECL_INITIAL (decl) = error_mark_node;
5246 else
5248 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5249 DECL_EXTERNAL (decl) = 1;
5250 else
5251 DECL_EXTERNAL (decl) = 0;
5252 TREE_STATIC (decl) = 1;
5255 else
5257 warning (OPT_Wattributes, "%qE attribute ignored", name);
5258 *no_add_attrs = true;
5261 return NULL_TREE;
5264 /* Handle a "weakref" attribute; arguments as in struct
5265 attribute_spec.handler. */
5267 static tree
5268 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5269 int flags, bool *no_add_attrs)
5271 tree attr = NULL_TREE;
5273 /* We must ignore the attribute when it is associated with
5274 local-scoped decls, since attribute alias is ignored and many
5275 such symbols do not even have a DECL_WEAK field. */
5276 if (decl_function_context (*node) || current_function_decl)
5278 warning (OPT_Wattributes, "%qE attribute ignored", name);
5279 *no_add_attrs = true;
5280 return NULL_TREE;
5283 /* The idea here is that `weakref("name")' mutates into `weakref,
5284 alias("name")', and weakref without arguments, in turn,
5285 implicitly adds weak. */
5287 if (args)
5289 attr = tree_cons (get_identifier ("alias"), args, attr);
5290 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
5292 *no_add_attrs = true;
5294 decl_attributes (node, attr, flags);
5296 else
5298 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
5299 error ("%Jweakref attribute must appear before alias attribute",
5300 *node);
5302 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
5303 and that isn't supported; and because it wants to add it to
5304 the list of weak decls, which isn't helpful. */
5305 DECL_WEAK (*node) = 1;
5308 return NULL_TREE;
5311 /* Handle an "visibility" attribute; arguments as in
5312 struct attribute_spec.handler. */
5314 static tree
5315 handle_visibility_attribute (tree *node, tree name, tree args,
5316 int ARG_UNUSED (flags),
5317 bool *ARG_UNUSED (no_add_attrs))
5319 tree decl = *node;
5320 tree id = TREE_VALUE (args);
5321 enum symbol_visibility vis;
5323 if (TYPE_P (*node))
5325 if (TREE_CODE (*node) == ENUMERAL_TYPE)
5326 /* OK */;
5327 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
5329 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
5330 name);
5331 return NULL_TREE;
5333 else if (TYPE_FIELDS (*node))
5335 error ("%qE attribute ignored because %qT is already defined",
5336 name, *node);
5337 return NULL_TREE;
5340 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
5342 warning (OPT_Wattributes, "%qE attribute ignored", name);
5343 return NULL_TREE;
5346 if (TREE_CODE (id) != STRING_CST)
5348 error ("visibility argument not a string");
5349 return NULL_TREE;
5352 /* If this is a type, set the visibility on the type decl. */
5353 if (TYPE_P (decl))
5355 decl = TYPE_NAME (decl);
5356 if (!decl)
5357 return NULL_TREE;
5358 if (TREE_CODE (decl) == IDENTIFIER_NODE)
5360 warning (OPT_Wattributes, "%qE attribute ignored on types",
5361 name);
5362 return NULL_TREE;
5366 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
5367 vis = VISIBILITY_DEFAULT;
5368 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
5369 vis = VISIBILITY_INTERNAL;
5370 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
5371 vis = VISIBILITY_HIDDEN;
5372 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
5373 vis = VISIBILITY_PROTECTED;
5374 else
5376 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
5377 vis = VISIBILITY_DEFAULT;
5380 if (DECL_VISIBILITY_SPECIFIED (decl)
5381 && vis != DECL_VISIBILITY (decl)
5382 && lookup_attribute ("visibility", (TYPE_P (*node)
5383 ? TYPE_ATTRIBUTES (*node)
5384 : DECL_ATTRIBUTES (decl))))
5385 error ("%qD redeclared with different visibility", decl);
5387 DECL_VISIBILITY (decl) = vis;
5388 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5390 /* Go ahead and attach the attribute to the node as well. This is needed
5391 so we can determine whether we have VISIBILITY_DEFAULT because the
5392 visibility was not specified, or because it was explicitly overridden
5393 from the containing scope. */
5395 return NULL_TREE;
5398 /* Determine the ELF symbol visibility for DECL, which is either a
5399 variable or a function. It is an error to use this function if a
5400 definition of DECL is not available in this translation unit.
5401 Returns true if the final visibility has been determined by this
5402 function; false if the caller is free to make additional
5403 modifications. */
5405 bool
5406 c_determine_visibility (tree decl)
5408 gcc_assert (TREE_CODE (decl) == VAR_DECL
5409 || TREE_CODE (decl) == FUNCTION_DECL);
5411 /* If the user explicitly specified the visibility with an
5412 attribute, honor that. DECL_VISIBILITY will have been set during
5413 the processing of the attribute. We check for an explicit
5414 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
5415 to distinguish the use of an attribute from the use of a "#pragma
5416 GCC visibility push(...)"; in the latter case we still want other
5417 considerations to be able to overrule the #pragma. */
5418 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
5419 return true;
5421 /* Anything that is exported must have default visibility. */
5422 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5423 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
5425 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5426 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5427 return true;
5430 /* Set default visibility to whatever the user supplied with
5431 visibility_specified depending on #pragma GCC visibility. */
5432 if (!DECL_VISIBILITY_SPECIFIED (decl))
5434 DECL_VISIBILITY (decl) = default_visibility;
5435 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
5437 return false;
5440 /* Handle an "tls_model" attribute; arguments as in
5441 struct attribute_spec.handler. */
5443 static tree
5444 handle_tls_model_attribute (tree *node, tree name, tree args,
5445 int ARG_UNUSED (flags), bool *no_add_attrs)
5447 tree id;
5448 tree decl = *node;
5449 enum tls_model kind;
5451 *no_add_attrs = true;
5453 if (!DECL_THREAD_LOCAL_P (decl))
5455 warning (OPT_Wattributes, "%qE attribute ignored", name);
5456 return NULL_TREE;
5459 kind = DECL_TLS_MODEL (decl);
5460 id = TREE_VALUE (args);
5461 if (TREE_CODE (id) != STRING_CST)
5463 error ("tls_model argument not a string");
5464 return NULL_TREE;
5467 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
5468 kind = TLS_MODEL_LOCAL_EXEC;
5469 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
5470 kind = TLS_MODEL_INITIAL_EXEC;
5471 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
5472 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
5473 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5474 kind = TLS_MODEL_GLOBAL_DYNAMIC;
5475 else
5476 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5478 DECL_TLS_MODEL (decl) = kind;
5479 return NULL_TREE;
5482 /* Handle a "no_instrument_function" attribute; arguments as in
5483 struct attribute_spec.handler. */
5485 static tree
5486 handle_no_instrument_function_attribute (tree *node, tree name,
5487 tree ARG_UNUSED (args),
5488 int ARG_UNUSED (flags),
5489 bool *no_add_attrs)
5491 tree decl = *node;
5493 if (TREE_CODE (decl) != FUNCTION_DECL)
5495 error ("%J%qE attribute applies only to functions", decl, name);
5496 *no_add_attrs = true;
5498 else if (DECL_INITIAL (decl))
5500 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5501 *no_add_attrs = true;
5503 else
5504 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5506 return NULL_TREE;
5509 /* Handle a "malloc" attribute; arguments as in
5510 struct attribute_spec.handler. */
5512 static tree
5513 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5514 int ARG_UNUSED (flags), bool *no_add_attrs)
5516 if (TREE_CODE (*node) == FUNCTION_DECL
5517 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
5518 DECL_IS_MALLOC (*node) = 1;
5519 else
5521 warning (OPT_Wattributes, "%qE attribute ignored", name);
5522 *no_add_attrs = true;
5525 return NULL_TREE;
5528 /* Handle a "returns_twice" attribute; arguments as in
5529 struct attribute_spec.handler. */
5531 static tree
5532 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5533 int ARG_UNUSED (flags), bool *no_add_attrs)
5535 if (TREE_CODE (*node) == FUNCTION_DECL)
5536 DECL_IS_RETURNS_TWICE (*node) = 1;
5537 else
5539 warning (OPT_Wattributes, "%qE attribute ignored", name);
5540 *no_add_attrs = true;
5543 return NULL_TREE;
5546 /* Handle a "no_limit_stack" attribute; arguments as in
5547 struct attribute_spec.handler. */
5549 static tree
5550 handle_no_limit_stack_attribute (tree *node, tree name,
5551 tree ARG_UNUSED (args),
5552 int ARG_UNUSED (flags),
5553 bool *no_add_attrs)
5555 tree decl = *node;
5557 if (TREE_CODE (decl) != FUNCTION_DECL)
5559 error ("%J%qE attribute applies only to functions", decl, name);
5560 *no_add_attrs = true;
5562 else if (DECL_INITIAL (decl))
5564 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5565 *no_add_attrs = true;
5567 else
5568 DECL_NO_LIMIT_STACK (decl) = 1;
5570 return NULL_TREE;
5573 /* Handle a "pure" attribute; arguments as in
5574 struct attribute_spec.handler. */
5576 static tree
5577 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5578 int ARG_UNUSED (flags), bool *no_add_attrs)
5580 if (TREE_CODE (*node) == FUNCTION_DECL)
5581 DECL_IS_PURE (*node) = 1;
5582 /* ??? TODO: Support types. */
5583 else
5585 warning (OPT_Wattributes, "%qE attribute ignored", name);
5586 *no_add_attrs = true;
5589 return NULL_TREE;
5592 /* Handle a "no vops" attribute; arguments as in
5593 struct attribute_spec.handler. */
5595 static tree
5596 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5597 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5598 bool *ARG_UNUSED (no_add_attrs))
5600 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5601 DECL_IS_NOVOPS (*node) = 1;
5602 return NULL_TREE;
5605 /* Handle a "deprecated" attribute; arguments as in
5606 struct attribute_spec.handler. */
5608 static tree
5609 handle_deprecated_attribute (tree *node, tree name,
5610 tree ARG_UNUSED (args), int flags,
5611 bool *no_add_attrs)
5613 tree type = NULL_TREE;
5614 int warn = 0;
5615 tree what = NULL_TREE;
5617 if (DECL_P (*node))
5619 tree decl = *node;
5620 type = TREE_TYPE (decl);
5622 if (TREE_CODE (decl) == TYPE_DECL
5623 || TREE_CODE (decl) == PARM_DECL
5624 || TREE_CODE (decl) == VAR_DECL
5625 || TREE_CODE (decl) == FUNCTION_DECL
5626 || TREE_CODE (decl) == FIELD_DECL)
5627 TREE_DEPRECATED (decl) = 1;
5628 else
5629 warn = 1;
5631 else if (TYPE_P (*node))
5633 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5634 *node = build_variant_type_copy (*node);
5635 TREE_DEPRECATED (*node) = 1;
5636 type = *node;
5638 else
5639 warn = 1;
5641 if (warn)
5643 *no_add_attrs = true;
5644 if (type && TYPE_NAME (type))
5646 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5647 what = TYPE_NAME (*node);
5648 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5649 && DECL_NAME (TYPE_NAME (type)))
5650 what = DECL_NAME (TYPE_NAME (type));
5652 if (what)
5653 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
5654 else
5655 warning (OPT_Wattributes, "%qE attribute ignored", name);
5658 return NULL_TREE;
5661 /* Handle a "vector_size" attribute; arguments as in
5662 struct attribute_spec.handler. */
5664 static tree
5665 handle_vector_size_attribute (tree *node, tree name, tree args,
5666 int ARG_UNUSED (flags),
5667 bool *no_add_attrs)
5669 unsigned HOST_WIDE_INT vecsize, nunits;
5670 enum machine_mode orig_mode;
5671 tree type = *node, new_type, size;
5673 *no_add_attrs = true;
5675 size = TREE_VALUE (args);
5677 if (!host_integerp (size, 1))
5679 warning (OPT_Wattributes, "%qE attribute ignored", name);
5680 return NULL_TREE;
5683 /* Get the vector size (in bytes). */
5684 vecsize = tree_low_cst (size, 1);
5686 /* We need to provide for vector pointers, vector arrays, and
5687 functions returning vectors. For example:
5689 __attribute__((vector_size(16))) short *foo;
5691 In this case, the mode is SI, but the type being modified is
5692 HI, so we need to look further. */
5694 while (POINTER_TYPE_P (type)
5695 || TREE_CODE (type) == FUNCTION_TYPE
5696 || TREE_CODE (type) == METHOD_TYPE
5697 || TREE_CODE (type) == ARRAY_TYPE)
5698 type = TREE_TYPE (type);
5700 /* Get the mode of the type being modified. */
5701 orig_mode = TYPE_MODE (type);
5703 if (TREE_CODE (type) == RECORD_TYPE
5704 || TREE_CODE (type) == UNION_TYPE
5705 || TREE_CODE (type) == VECTOR_TYPE
5706 || (!SCALAR_FLOAT_MODE_P (orig_mode)
5707 && GET_MODE_CLASS (orig_mode) != MODE_INT)
5708 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
5710 error ("invalid vector type for attribute %qE", name);
5711 return NULL_TREE;
5714 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
5716 error ("vector size not an integral multiple of component size");
5717 return NULL;
5720 if (vecsize == 0)
5722 error ("zero vector size");
5723 return NULL;
5726 /* Calculate how many units fit in the vector. */
5727 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5728 if (nunits & (nunits - 1))
5730 error ("number of components of the vector not a power of two");
5731 return NULL_TREE;
5734 new_type = build_vector_type (type, nunits);
5736 /* Build back pointers if needed. */
5737 *node = reconstruct_complex_type (*node, new_type);
5739 return NULL_TREE;
5742 /* Handle the "nonnull" attribute. */
5743 static tree
5744 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5745 tree args, int ARG_UNUSED (flags),
5746 bool *no_add_attrs)
5748 tree type = *node;
5749 unsigned HOST_WIDE_INT attr_arg_num;
5751 /* If no arguments are specified, all pointer arguments should be
5752 non-null. Verify a full prototype is given so that the arguments
5753 will have the correct types when we actually check them later. */
5754 if (!args)
5756 if (!TYPE_ARG_TYPES (type))
5758 error ("nonnull attribute without arguments on a non-prototype");
5759 *no_add_attrs = true;
5761 return NULL_TREE;
5764 /* Argument list specified. Verify that each argument number references
5765 a pointer argument. */
5766 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5768 tree argument;
5769 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
5771 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
5773 error ("nonnull argument has invalid operand number (argument %lu)",
5774 (unsigned long) attr_arg_num);
5775 *no_add_attrs = true;
5776 return NULL_TREE;
5779 argument = TYPE_ARG_TYPES (type);
5780 if (argument)
5782 for (ck_num = 1; ; ck_num++)
5784 if (!argument || ck_num == arg_num)
5785 break;
5786 argument = TREE_CHAIN (argument);
5789 if (!argument
5790 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5792 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5793 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5794 *no_add_attrs = true;
5795 return NULL_TREE;
5798 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5800 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5801 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5802 *no_add_attrs = true;
5803 return NULL_TREE;
5808 return NULL_TREE;
5811 /* Check the argument list of a function call for null in argument slots
5812 that are marked as requiring a non-null pointer argument. The NARGS
5813 arguments are passed in the array ARGARRAY.
5816 static void
5817 check_function_nonnull (tree attrs, int nargs, tree *argarray)
5819 tree a, args;
5820 int i;
5822 for (a = attrs; a; a = TREE_CHAIN (a))
5824 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5826 args = TREE_VALUE (a);
5828 /* Walk the argument list. If we encounter an argument number we
5829 should check for non-null, do it. If the attribute has no args,
5830 then every pointer argument is checked (in which case the check
5831 for pointer type is done in check_nonnull_arg). */
5832 for (i = 0; i < nargs; i++)
5834 if (!args || nonnull_check_p (args, i + 1))
5835 check_function_arguments_recurse (check_nonnull_arg, NULL,
5836 argarray[i],
5837 i + 1);
5843 /* Check that the Nth argument of a function call (counting backwards
5844 from the end) is a (pointer)0. The NARGS arguments are passed in the
5845 array ARGARRAY. */
5847 static void
5848 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
5850 tree attr = lookup_attribute ("sentinel", attrs);
5852 if (attr)
5854 int len = 0;
5855 int pos = 0;
5856 tree sentinel;
5858 /* Skip over the named arguments. */
5859 while (typelist && len < nargs)
5861 typelist = TREE_CHAIN (typelist);
5862 len++;
5865 if (TREE_VALUE (attr))
5867 tree p = TREE_VALUE (TREE_VALUE (attr));
5868 pos = TREE_INT_CST_LOW (p);
5871 /* The sentinel must be one of the varargs, i.e.
5872 in position >= the number of fixed arguments. */
5873 if ((nargs - 1 - pos) < len)
5875 warning (OPT_Wformat,
5876 "not enough variable arguments to fit a sentinel");
5877 return;
5880 /* Validate the sentinel. */
5881 sentinel = argarray[nargs - 1 - pos];
5882 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
5883 || !integer_zerop (sentinel))
5884 /* Although __null (in C++) is only an integer we allow it
5885 nevertheless, as we are guaranteed that it's exactly
5886 as wide as a pointer, and we don't want to force
5887 users to cast the NULL they have written there.
5888 We warn with -Wstrict-null-sentinel, though. */
5889 && (warn_strict_null_sentinel || null_node != sentinel))
5890 warning (OPT_Wformat, "missing sentinel in function call");
5894 /* Helper for check_function_nonnull; given a list of operands which
5895 must be non-null in ARGS, determine if operand PARAM_NUM should be
5896 checked. */
5898 static bool
5899 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5901 unsigned HOST_WIDE_INT arg_num = 0;
5903 for (; args; args = TREE_CHAIN (args))
5905 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5907 gcc_assert (found);
5909 if (arg_num == param_num)
5910 return true;
5912 return false;
5915 /* Check that the function argument PARAM (which is operand number
5916 PARAM_NUM) is non-null. This is called by check_function_nonnull
5917 via check_function_arguments_recurse. */
5919 static void
5920 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5921 unsigned HOST_WIDE_INT param_num)
5923 /* Just skip checking the argument if it's not a pointer. This can
5924 happen if the "nonnull" attribute was given without an operand
5925 list (which means to check every pointer argument). */
5927 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5928 return;
5930 if (integer_zerop (param))
5931 warning (OPT_Wnonnull, "null argument where non-null required "
5932 "(argument %lu)", (unsigned long) param_num);
5935 /* Helper for nonnull attribute handling; fetch the operand number
5936 from the attribute argument list. */
5938 static bool
5939 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5941 /* Verify the arg number is a constant. */
5942 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5943 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5944 return false;
5946 *valp = TREE_INT_CST_LOW (arg_num_expr);
5947 return true;
5950 /* Handle a "nothrow" attribute; arguments as in
5951 struct attribute_spec.handler. */
5953 static tree
5954 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5955 int ARG_UNUSED (flags), bool *no_add_attrs)
5957 if (TREE_CODE (*node) == FUNCTION_DECL)
5958 TREE_NOTHROW (*node) = 1;
5959 /* ??? TODO: Support types. */
5960 else
5962 warning (OPT_Wattributes, "%qE attribute ignored", name);
5963 *no_add_attrs = true;
5966 return NULL_TREE;
5969 /* Handle a "cleanup" attribute; arguments as in
5970 struct attribute_spec.handler. */
5972 static tree
5973 handle_cleanup_attribute (tree *node, tree name, tree args,
5974 int ARG_UNUSED (flags), bool *no_add_attrs)
5976 tree decl = *node;
5977 tree cleanup_id, cleanup_decl;
5979 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5980 for global destructors in C++. This requires infrastructure that
5981 we don't have generically at the moment. It's also not a feature
5982 we'd be missing too much, since we do have attribute constructor. */
5983 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5985 warning (OPT_Wattributes, "%qE attribute ignored", name);
5986 *no_add_attrs = true;
5987 return NULL_TREE;
5990 /* Verify that the argument is a function in scope. */
5991 /* ??? We could support pointers to functions here as well, if
5992 that was considered desirable. */
5993 cleanup_id = TREE_VALUE (args);
5994 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5996 error ("cleanup argument not an identifier");
5997 *no_add_attrs = true;
5998 return NULL_TREE;
6000 cleanup_decl = lookup_name (cleanup_id);
6001 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
6003 error ("cleanup argument not a function");
6004 *no_add_attrs = true;
6005 return NULL_TREE;
6008 /* That the function has proper type is checked with the
6009 eventual call to build_function_call. */
6011 return NULL_TREE;
6014 /* Handle a "warn_unused_result" attribute. No special handling. */
6016 static tree
6017 handle_warn_unused_result_attribute (tree *node, tree name,
6018 tree ARG_UNUSED (args),
6019 int ARG_UNUSED (flags), bool *no_add_attrs)
6021 /* Ignore the attribute for functions not returning any value. */
6022 if (VOID_TYPE_P (TREE_TYPE (*node)))
6024 warning (OPT_Wattributes, "%qE attribute ignored", name);
6025 *no_add_attrs = true;
6028 return NULL_TREE;
6031 /* Handle a "sentinel" attribute. */
6033 static tree
6034 handle_sentinel_attribute (tree *node, tree name, tree args,
6035 int ARG_UNUSED (flags), bool *no_add_attrs)
6037 tree params = TYPE_ARG_TYPES (*node);
6039 if (!params)
6041 warning (OPT_Wattributes,
6042 "%qE attribute requires prototypes with named arguments", name);
6043 *no_add_attrs = true;
6045 else
6047 while (TREE_CHAIN (params))
6048 params = TREE_CHAIN (params);
6050 if (VOID_TYPE_P (TREE_VALUE (params)))
6052 warning (OPT_Wattributes,
6053 "%qE attribute only applies to variadic functions", name);
6054 *no_add_attrs = true;
6058 if (args)
6060 tree position = TREE_VALUE (args);
6062 if (TREE_CODE (position) != INTEGER_CST)
6064 warning (0, "requested position is not an integer constant");
6065 *no_add_attrs = true;
6067 else
6069 if (tree_int_cst_lt (position, integer_zero_node))
6071 warning (0, "requested position is less than zero");
6072 *no_add_attrs = true;
6077 return NULL_TREE;
6080 /* Check for valid arguments being passed to a function.
6081 ATTRS is a list of attributes. There are NARGS arguments in the array
6082 ARGARRAY. TYPELIST is the list of argument types for the function.
6084 void
6085 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
6087 /* Check for null being passed in a pointer argument that must be
6088 non-null. We also need to do this if format checking is enabled. */
6090 if (warn_nonnull)
6091 check_function_nonnull (attrs, nargs, argarray);
6093 /* Check for errors in format strings. */
6095 if (warn_format || warn_missing_format_attribute)
6096 check_function_format (attrs, nargs, argarray);
6098 if (warn_format)
6099 check_function_sentinel (attrs, nargs, argarray, typelist);
6102 /* Generic argument checking recursion routine. PARAM is the argument to
6103 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
6104 once the argument is resolved. CTX is context for the callback. */
6105 void
6106 check_function_arguments_recurse (void (*callback)
6107 (void *, tree, unsigned HOST_WIDE_INT),
6108 void *ctx, tree param,
6109 unsigned HOST_WIDE_INT param_num)
6111 if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
6112 && (TYPE_PRECISION (TREE_TYPE (param))
6113 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
6115 /* Strip coercion. */
6116 check_function_arguments_recurse (callback, ctx,
6117 TREE_OPERAND (param, 0), param_num);
6118 return;
6121 if (TREE_CODE (param) == CALL_EXPR)
6123 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
6124 tree attrs;
6125 bool found_format_arg = false;
6127 /* See if this is a call to a known internationalization function
6128 that modifies a format arg. Such a function may have multiple
6129 format_arg attributes (for example, ngettext). */
6131 for (attrs = TYPE_ATTRIBUTES (type);
6132 attrs;
6133 attrs = TREE_CHAIN (attrs))
6134 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
6136 tree inner_arg;
6137 tree format_num_expr;
6138 int format_num;
6139 int i;
6140 call_expr_arg_iterator iter;
6142 /* Extract the argument number, which was previously checked
6143 to be valid. */
6144 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
6146 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
6147 && !TREE_INT_CST_HIGH (format_num_expr));
6149 format_num = TREE_INT_CST_LOW (format_num_expr);
6151 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
6152 inner_arg != 0;
6153 inner_arg = next_call_expr_arg (&iter), i++)
6154 if (i == format_num)
6156 check_function_arguments_recurse (callback, ctx,
6157 inner_arg, param_num);
6158 found_format_arg = true;
6159 break;
6163 /* If we found a format_arg attribute and did a recursive check,
6164 we are done with checking this argument. Otherwise, we continue
6165 and this will be considered a non-literal. */
6166 if (found_format_arg)
6167 return;
6170 if (TREE_CODE (param) == COND_EXPR)
6172 /* Check both halves of the conditional expression. */
6173 check_function_arguments_recurse (callback, ctx,
6174 TREE_OPERAND (param, 1), param_num);
6175 check_function_arguments_recurse (callback, ctx,
6176 TREE_OPERAND (param, 2), param_num);
6177 return;
6180 (*callback) (ctx, param, param_num);
6183 /* Function to help qsort sort FIELD_DECLs by name order. */
6186 field_decl_cmp (const void *x_p, const void *y_p)
6188 const tree *const x = (const tree *const) x_p;
6189 const tree *const y = (const tree *const) y_p;
6191 if (DECL_NAME (*x) == DECL_NAME (*y))
6192 /* A nontype is "greater" than a type. */
6193 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6194 if (DECL_NAME (*x) == NULL_TREE)
6195 return -1;
6196 if (DECL_NAME (*y) == NULL_TREE)
6197 return 1;
6198 if (DECL_NAME (*x) < DECL_NAME (*y))
6199 return -1;
6200 return 1;
6203 static struct {
6204 gt_pointer_operator new_value;
6205 void *cookie;
6206 } resort_data;
6208 /* This routine compares two fields like field_decl_cmp but using the
6209 pointer operator in resort_data. */
6211 static int
6212 resort_field_decl_cmp (const void *x_p, const void *y_p)
6214 const tree *const x = (const tree *const) x_p;
6215 const tree *const y = (const tree *const) y_p;
6217 if (DECL_NAME (*x) == DECL_NAME (*y))
6218 /* A nontype is "greater" than a type. */
6219 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6220 if (DECL_NAME (*x) == NULL_TREE)
6221 return -1;
6222 if (DECL_NAME (*y) == NULL_TREE)
6223 return 1;
6225 tree d1 = DECL_NAME (*x);
6226 tree d2 = DECL_NAME (*y);
6227 resort_data.new_value (&d1, resort_data.cookie);
6228 resort_data.new_value (&d2, resort_data.cookie);
6229 if (d1 < d2)
6230 return -1;
6232 return 1;
6235 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
6237 void
6238 resort_sorted_fields (void *obj,
6239 void * ARG_UNUSED (orig_obj),
6240 gt_pointer_operator new_value,
6241 void *cookie)
6243 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
6244 resort_data.new_value = new_value;
6245 resort_data.cookie = cookie;
6246 qsort (&sf->elts[0], sf->len, sizeof (tree),
6247 resort_field_decl_cmp);
6250 /* Subroutine of c_parse_error.
6251 Return the result of concatenating LHS and RHS. RHS is really
6252 a string literal, its first character is indicated by RHS_START and
6253 RHS_SIZE is its length (including the terminating NUL character).
6255 The caller is responsible for deleting the returned pointer. */
6257 static char *
6258 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
6260 const int lhs_size = strlen (lhs);
6261 char *result = XNEWVEC (char, lhs_size + rhs_size);
6262 strncpy (result, lhs, lhs_size);
6263 strncpy (result + lhs_size, rhs_start, rhs_size);
6264 return result;
6267 /* Issue the error given by GMSGID, indicating that it occurred before
6268 TOKEN, which had the associated VALUE. */
6270 void
6271 c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
6273 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
6275 char *message = NULL;
6277 if (token == CPP_EOF)
6278 message = catenate_messages (gmsgid, " at end of input");
6279 else if (token == CPP_CHAR || token == CPP_WCHAR)
6281 unsigned int val = TREE_INT_CST_LOW (value);
6282 const char *const ell = (token == CPP_CHAR) ? "" : "L";
6283 if (val <= UCHAR_MAX && ISGRAPH (val))
6284 message = catenate_messages (gmsgid, " before %s'%c'");
6285 else
6286 message = catenate_messages (gmsgid, " before %s'\\x%x'");
6288 error (message, ell, val);
6289 free (message);
6290 message = NULL;
6292 else if (token == CPP_STRING || token == CPP_WSTRING)
6293 message = catenate_messages (gmsgid, " before string constant");
6294 else if (token == CPP_NUMBER)
6295 message = catenate_messages (gmsgid, " before numeric constant");
6296 else if (token == CPP_NAME)
6298 message = catenate_messages (gmsgid, " before %qE");
6299 error (message, value);
6300 free (message);
6301 message = NULL;
6303 else if (token == CPP_PRAGMA)
6304 message = catenate_messages (gmsgid, " before %<#pragma%>");
6305 else if (token == CPP_PRAGMA_EOL)
6306 message = catenate_messages (gmsgid, " before end of line");
6307 else if (token < N_TTYPES)
6309 message = catenate_messages (gmsgid, " before %qs token");
6310 error (message, cpp_type2name (token));
6311 free (message);
6312 message = NULL;
6314 else
6315 error (gmsgid);
6317 if (message)
6319 error (message);
6320 free (message);
6322 #undef catenate_messages
6325 /* Walk a gimplified function and warn for functions whose return value is
6326 ignored and attribute((warn_unused_result)) is set. This is done before
6327 inlining, so we don't have to worry about that. */
6329 void
6330 c_warn_unused_result (tree *top_p)
6332 tree t = *top_p;
6333 tree_stmt_iterator i;
6334 tree fdecl, ftype;
6336 switch (TREE_CODE (t))
6338 case STATEMENT_LIST:
6339 for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
6340 c_warn_unused_result (tsi_stmt_ptr (i));
6341 break;
6343 case COND_EXPR:
6344 c_warn_unused_result (&COND_EXPR_THEN (t));
6345 c_warn_unused_result (&COND_EXPR_ELSE (t));
6346 break;
6347 case BIND_EXPR:
6348 c_warn_unused_result (&BIND_EXPR_BODY (t));
6349 break;
6350 case TRY_FINALLY_EXPR:
6351 case TRY_CATCH_EXPR:
6352 c_warn_unused_result (&TREE_OPERAND (t, 0));
6353 c_warn_unused_result (&TREE_OPERAND (t, 1));
6354 break;
6355 case CATCH_EXPR:
6356 c_warn_unused_result (&CATCH_BODY (t));
6357 break;
6358 case EH_FILTER_EXPR:
6359 c_warn_unused_result (&EH_FILTER_FAILURE (t));
6360 break;
6362 case CALL_EXPR:
6363 if (TREE_USED (t))
6364 break;
6366 /* This is a naked call, as opposed to a CALL_EXPR nested inside
6367 a MODIFY_EXPR. All calls whose value is ignored should be
6368 represented like this. Look for the attribute. */
6369 fdecl = get_callee_fndecl (t);
6370 if (fdecl)
6371 ftype = TREE_TYPE (fdecl);
6372 else
6374 ftype = TREE_TYPE (CALL_EXPR_FN (t));
6375 /* Look past pointer-to-function to the function type itself. */
6376 ftype = TREE_TYPE (ftype);
6379 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
6381 if (fdecl)
6382 warning (0, "%Hignoring return value of %qD, "
6383 "declared with attribute warn_unused_result",
6384 EXPR_LOCUS (t), fdecl);
6385 else
6386 warning (0, "%Hignoring return value of function "
6387 "declared with attribute warn_unused_result",
6388 EXPR_LOCUS (t));
6390 break;
6392 default:
6393 /* Not a container, not a call, or a call whose value is used. */
6394 break;
6398 /* Convert a character from the host to the target execution character
6399 set. cpplib handles this, mostly. */
6401 HOST_WIDE_INT
6402 c_common_to_target_charset (HOST_WIDE_INT c)
6404 /* Character constants in GCC proper are sign-extended under -fsigned-char,
6405 zero-extended under -fno-signed-char. cpplib insists that characters
6406 and character constants are always unsigned. Hence we must convert
6407 back and forth. */
6408 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
6410 uc = cpp_host_to_exec_charset (parse_in, uc);
6412 if (flag_signed_char)
6413 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
6414 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
6415 else
6416 return uc;
6419 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
6420 component references, with STOP_REF, or alternatively an INDIRECT_REF of
6421 NULL, at the bottom; much like the traditional rendering of offsetof as a
6422 macro. Returns the folded and properly cast result. */
6424 static tree
6425 fold_offsetof_1 (tree expr, tree stop_ref)
6427 enum tree_code code = PLUS_EXPR;
6428 tree base, off, t;
6430 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
6431 return size_zero_node;
6433 switch (TREE_CODE (expr))
6435 case ERROR_MARK:
6436 return expr;
6438 case VAR_DECL:
6439 error ("cannot apply %<offsetof%> to static data member %qD", expr);
6440 return error_mark_node;
6442 case CALL_EXPR:
6443 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
6444 return error_mark_node;
6446 case INTEGER_CST:
6447 gcc_assert (integer_zerop (expr));
6448 return size_zero_node;
6450 case NOP_EXPR:
6451 case INDIRECT_REF:
6452 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6453 gcc_assert (base == error_mark_node || base == size_zero_node);
6454 return base;
6456 case COMPONENT_REF:
6457 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6458 if (base == error_mark_node)
6459 return base;
6461 t = TREE_OPERAND (expr, 1);
6462 if (DECL_C_BIT_FIELD (t))
6464 error ("attempt to take address of bit-field structure "
6465 "member %qD", t);
6466 return error_mark_node;
6468 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
6469 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
6470 / BITS_PER_UNIT));
6471 break;
6473 case ARRAY_REF:
6474 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6475 if (base == error_mark_node)
6476 return base;
6478 t = TREE_OPERAND (expr, 1);
6479 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
6481 code = MINUS_EXPR;
6482 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
6484 t = convert (sizetype, t);
6485 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
6486 break;
6488 case COMPOUND_EXPR:
6489 /* Handle static members of volatile structs. */
6490 t = TREE_OPERAND (expr, 1);
6491 gcc_assert (TREE_CODE (t) == VAR_DECL);
6492 return fold_offsetof_1 (t, stop_ref);
6494 default:
6495 gcc_unreachable ();
6498 return size_binop (code, base, off);
6501 tree
6502 fold_offsetof (tree expr, tree stop_ref)
6504 /* Convert back from the internal sizetype to size_t. */
6505 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
6508 /* Print an error message for an invalid lvalue. USE says
6509 how the lvalue is being used and so selects the error message. */
6511 void
6512 lvalue_error (enum lvalue_use use)
6514 switch (use)
6516 case lv_assign:
6517 error ("lvalue required as left operand of assignment");
6518 break;
6519 case lv_increment:
6520 error ("lvalue required as increment operand");
6521 break;
6522 case lv_decrement:
6523 error ("lvalue required as decrement operand");
6524 break;
6525 case lv_addressof:
6526 error ("lvalue required as unary %<&%> operand");
6527 break;
6528 case lv_asm:
6529 error ("lvalue required in asm statement");
6530 break;
6531 default:
6532 gcc_unreachable ();
6536 /* *PTYPE is an incomplete array. Complete it with a domain based on
6537 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6538 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6539 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
6542 complete_array_type (tree *ptype, tree initial_value, bool do_default)
6544 tree maxindex, type, main_type, elt, unqual_elt;
6545 int failure = 0, quals;
6546 hashval_t hashcode = 0;
6548 maxindex = size_zero_node;
6549 if (initial_value)
6551 if (TREE_CODE (initial_value) == STRING_CST)
6553 int eltsize
6554 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6555 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6557 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6559 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6561 if (VEC_empty (constructor_elt, v))
6563 if (pedantic)
6564 failure = 3;
6565 maxindex = integer_minus_one_node;
6567 else
6569 tree curindex;
6570 unsigned HOST_WIDE_INT cnt;
6571 constructor_elt *ce;
6573 if (VEC_index (constructor_elt, v, 0)->index)
6574 maxindex = fold_convert (sizetype,
6575 VEC_index (constructor_elt,
6576 v, 0)->index);
6577 curindex = maxindex;
6579 for (cnt = 1;
6580 VEC_iterate (constructor_elt, v, cnt, ce);
6581 cnt++)
6583 if (ce->index)
6584 curindex = fold_convert (sizetype, ce->index);
6585 else
6586 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6588 if (tree_int_cst_lt (maxindex, curindex))
6589 maxindex = curindex;
6593 else
6595 /* Make an error message unless that happened already. */
6596 if (initial_value != error_mark_node)
6597 failure = 1;
6600 else
6602 failure = 2;
6603 if (!do_default)
6604 return failure;
6607 type = *ptype;
6608 elt = TREE_TYPE (type);
6609 quals = TYPE_QUALS (strip_array_types (elt));
6610 if (quals == 0)
6611 unqual_elt = elt;
6612 else
6613 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6615 /* Using build_distinct_type_copy and modifying things afterward instead
6616 of using build_array_type to create a new type preserves all of the
6617 TYPE_LANG_FLAG_? bits that the front end may have set. */
6618 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6619 TREE_TYPE (main_type) = unqual_elt;
6620 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6621 layout_type (main_type);
6623 /* Make sure we have the canonical MAIN_TYPE. */
6624 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
6625 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
6626 hashcode);
6627 main_type = type_hash_canon (hashcode, main_type);
6629 if (quals == 0)
6630 type = main_type;
6631 else
6632 type = c_build_qualified_type (main_type, quals);
6634 *ptype = type;
6635 return failure;
6639 /* Used to help initialize the builtin-types.def table. When a type of
6640 the correct size doesn't exist, use error_mark_node instead of NULL.
6641 The later results in segfaults even when a decl using the type doesn't
6642 get invoked. */
6644 tree
6645 builtin_type_for_size (int size, bool unsignedp)
6647 tree type = lang_hooks.types.type_for_size (size, unsignedp);
6648 return type ? type : error_mark_node;
6651 /* A helper function for resolve_overloaded_builtin in resolving the
6652 overloaded __sync_ builtins. Returns a positive power of 2 if the
6653 first operand of PARAMS is a pointer to a supported data type.
6654 Returns 0 if an error is encountered. */
6656 static int
6657 sync_resolve_size (tree function, tree params)
6659 tree type;
6660 int size;
6662 if (params == NULL)
6664 error ("too few arguments to function %qE", function);
6665 return 0;
6668 type = TREE_TYPE (TREE_VALUE (params));
6669 if (TREE_CODE (type) != POINTER_TYPE)
6670 goto incompatible;
6672 type = TREE_TYPE (type);
6673 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6674 goto incompatible;
6676 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6677 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
6678 return size;
6680 incompatible:
6681 error ("incompatible type for argument %d of %qE", 1, function);
6682 return 0;
6685 /* A helper function for resolve_overloaded_builtin. Adds casts to
6686 PARAMS to make arguments match up with those of FUNCTION. Drops
6687 the variadic arguments at the end. Returns false if some error
6688 was encountered; true on success. */
6690 static bool
6691 sync_resolve_params (tree orig_function, tree function, tree params)
6693 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6694 tree ptype;
6695 int number;
6697 /* We've declared the implementation functions to use "volatile void *"
6698 as the pointer parameter, so we shouldn't get any complaints from the
6699 call to check_function_arguments what ever type the user used. */
6700 arg_types = TREE_CHAIN (arg_types);
6701 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6702 number = 2;
6704 /* For the rest of the values, we need to cast these to FTYPE, so that we
6705 don't get warnings for passing pointer types, etc. */
6706 while (arg_types != void_list_node)
6708 tree val;
6710 params = TREE_CHAIN (params);
6711 if (params == NULL)
6713 error ("too few arguments to function %qE", orig_function);
6714 return false;
6717 /* ??? Ideally for the first conversion we'd use convert_for_assignment
6718 so that we get warnings for anything that doesn't match the pointer
6719 type. This isn't portable across the C and C++ front ends atm. */
6720 val = TREE_VALUE (params);
6721 val = convert (ptype, val);
6722 val = convert (TREE_VALUE (arg_types), val);
6723 TREE_VALUE (params) = val;
6725 arg_types = TREE_CHAIN (arg_types);
6726 number++;
6729 /* The definition of these primitives is variadic, with the remaining
6730 being "an optional list of variables protected by the memory barrier".
6731 No clue what that's supposed to mean, precisely, but we consider all
6732 call-clobbered variables to be protected so we're safe. */
6733 TREE_CHAIN (params) = NULL;
6735 return true;
6738 /* A helper function for resolve_overloaded_builtin. Adds a cast to
6739 RESULT to make it match the type of the first pointer argument in
6740 PARAMS. */
6742 static tree
6743 sync_resolve_return (tree params, tree result)
6745 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6746 ptype = TYPE_MAIN_VARIANT (ptype);
6747 return convert (ptype, result);
6750 /* Some builtin functions are placeholders for other expressions. This
6751 function should be called immediately after parsing the call expression
6752 before surrounding code has committed to the type of the expression.
6754 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6755 PARAMS is the argument list for the call. The return value is non-null
6756 when expansion is complete, and null if normal processing should
6757 continue. */
6759 tree
6760 resolve_overloaded_builtin (tree function, tree params)
6762 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
6763 switch (DECL_BUILT_IN_CLASS (function))
6765 case BUILT_IN_NORMAL:
6766 break;
6767 case BUILT_IN_MD:
6768 if (targetm.resolve_overloaded_builtin)
6769 return targetm.resolve_overloaded_builtin (function, params);
6770 else
6771 return NULL_TREE;
6772 default:
6773 return NULL_TREE;
6776 /* Handle BUILT_IN_NORMAL here. */
6777 switch (orig_code)
6779 case BUILT_IN_FETCH_AND_ADD_N:
6780 case BUILT_IN_FETCH_AND_SUB_N:
6781 case BUILT_IN_FETCH_AND_OR_N:
6782 case BUILT_IN_FETCH_AND_AND_N:
6783 case BUILT_IN_FETCH_AND_XOR_N:
6784 case BUILT_IN_FETCH_AND_NAND_N:
6785 case BUILT_IN_ADD_AND_FETCH_N:
6786 case BUILT_IN_SUB_AND_FETCH_N:
6787 case BUILT_IN_OR_AND_FETCH_N:
6788 case BUILT_IN_AND_AND_FETCH_N:
6789 case BUILT_IN_XOR_AND_FETCH_N:
6790 case BUILT_IN_NAND_AND_FETCH_N:
6791 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6792 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6793 case BUILT_IN_LOCK_TEST_AND_SET_N:
6794 case BUILT_IN_LOCK_RELEASE_N:
6796 int n = sync_resolve_size (function, params);
6797 tree new_function, result;
6799 if (n == 0)
6800 return error_mark_node;
6802 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6803 if (!sync_resolve_params (function, new_function, params))
6804 return error_mark_node;
6806 result = build_function_call (new_function, params);
6807 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6808 && orig_code != BUILT_IN_LOCK_RELEASE_N)
6809 result = sync_resolve_return (params, result);
6811 return result;
6814 default:
6815 return NULL_TREE;
6819 /* Ignoring their sign, return true if two scalar types are the same. */
6820 bool
6821 same_scalar_type_ignoring_signedness (tree t1, tree t2)
6823 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6825 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6826 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6828 /* Equality works here because c_common_signed_type uses
6829 TYPE_MAIN_VARIANT. */
6830 return lang_hooks.types.signed_type (t1)
6831 == lang_hooks.types.signed_type (t2);
6834 /* Check for missing format attributes on function pointers. LTYPE is
6835 the new type or left-hand side type. RTYPE is the old type or
6836 right-hand side type. Returns TRUE if LTYPE is missing the desired
6837 attribute. */
6839 bool
6840 check_missing_format_attribute (tree ltype, tree rtype)
6842 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6843 tree ra;
6845 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6846 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6847 break;
6848 if (ra)
6850 tree la;
6851 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6852 if (is_attribute_p ("format", TREE_PURPOSE (la)))
6853 break;
6854 return !la;
6856 else
6857 return false;
6860 /* Subscripting with type char is likely to lose on a machine where
6861 chars are signed. So warn on any machine, but optionally. Don't
6862 warn for unsigned char since that type is safe. Don't warn for
6863 signed char because anyone who uses that must have done so
6864 deliberately. Furthermore, we reduce the false positive load by
6865 warning only for non-constant value of type char. */
6867 void
6868 warn_array_subscript_with_type_char (tree index)
6870 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
6871 && TREE_CODE (index) != INTEGER_CST)
6872 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
6875 /* Implement -Wparentheses for the unexpected C precedence rules, to
6876 cover cases like x + y << z which readers are likely to
6877 misinterpret. We have seen an expression in which CODE is a binary
6878 operator used to combine expressions headed by CODE_LEFT and
6879 CODE_RIGHT. CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
6880 means that that side of the expression was not formed using a
6881 binary operator, or it was enclosed in parentheses. */
6883 void
6884 warn_about_parentheses (enum tree_code code, enum tree_code code_left,
6885 enum tree_code code_right)
6887 if (!warn_parentheses)
6888 return;
6890 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
6892 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6893 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6894 warning (OPT_Wparentheses,
6895 "suggest parentheses around + or - inside shift");
6898 if (code == TRUTH_ORIF_EXPR)
6900 if (code_left == TRUTH_ANDIF_EXPR
6901 || code_right == TRUTH_ANDIF_EXPR)
6902 warning (OPT_Wparentheses,
6903 "suggest parentheses around && within ||");
6906 if (code == BIT_IOR_EXPR)
6908 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
6909 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6910 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
6911 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6912 warning (OPT_Wparentheses,
6913 "suggest parentheses around arithmetic in operand of |");
6914 /* Check cases like x|y==z */
6915 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6916 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6917 warning (OPT_Wparentheses,
6918 "suggest parentheses around comparison in operand of |");
6921 if (code == BIT_XOR_EXPR)
6923 if (code_left == BIT_AND_EXPR
6924 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6925 || code_right == BIT_AND_EXPR
6926 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6927 warning (OPT_Wparentheses,
6928 "suggest parentheses around arithmetic in operand of ^");
6929 /* Check cases like x^y==z */
6930 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6931 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6932 warning (OPT_Wparentheses,
6933 "suggest parentheses around comparison in operand of ^");
6936 if (code == BIT_AND_EXPR)
6938 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6939 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6940 warning (OPT_Wparentheses,
6941 "suggest parentheses around + or - in operand of &");
6942 /* Check cases like x&y==z */
6943 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6944 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6945 warning (OPT_Wparentheses,
6946 "suggest parentheses around comparison in operand of &");
6949 if (code == EQ_EXPR || code == NE_EXPR)
6951 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6952 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6953 warning (OPT_Wparentheses,
6954 "suggest parentheses around comparison in operand of %s",
6955 code == EQ_EXPR ? "==" : "!=");
6957 else if (TREE_CODE_CLASS (code) == tcc_comparison)
6959 if ((TREE_CODE_CLASS (code_left) == tcc_comparison
6960 && code_left != NE_EXPR && code_left != EQ_EXPR)
6961 || (TREE_CODE_CLASS (code_right) == tcc_comparison
6962 && code_right != NE_EXPR && code_right != EQ_EXPR))
6963 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
6964 "have their mathematical meaning");
6968 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
6970 void
6971 warn_for_unused_label (tree label)
6973 if (!TREE_USED (label))
6975 if (DECL_INITIAL (label))
6976 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
6977 else
6978 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
6982 /* If FNDECL is a static constructor or destructor, add it to the list
6983 of functions to be called by the file scope initialization
6984 function. */
6986 void
6987 c_record_cdtor_fn (tree fndecl)
6989 if (targetm.have_ctors_dtors)
6990 return;
6992 if (DECL_STATIC_CONSTRUCTOR (fndecl))
6993 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6994 if (DECL_STATIC_DESTRUCTOR (fndecl))
6995 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6998 /* Synthesize a function which calls all the global ctors or global
6999 dtors in this file. This is only used for targets which do not
7000 support .ctors/.dtors sections. FIXME: Migrate into cgraph. */
7001 static void
7002 build_cdtor (int method_type, tree cdtors)
7004 tree body = 0;
7006 if (!cdtors)
7007 return;
7009 for (; cdtors; cdtors = TREE_CHAIN (cdtors))
7010 append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
7011 &body);
7013 cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
7016 /* Generate functions to call static constructors and destructors
7017 for targets that do not support .ctors/.dtors sections. These
7018 functions have magic names which are detected by collect2. */
7020 void
7021 c_build_cdtor_fns (void)
7023 if (!targetm.have_ctors_dtors)
7025 build_cdtor ('I', static_ctors);
7026 static_ctors = NULL_TREE;
7027 build_cdtor ('D', static_dtors);
7028 static_dtors = NULL_TREE;
7030 else
7032 gcc_assert (!static_ctors);
7033 gcc_assert (!static_dtors);
7037 #ifndef TARGET_HAS_TARGETCM
7038 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
7039 #endif
7041 /* Warn for division by zero according to the value of DIVISOR. */
7043 void
7044 warn_for_div_by_zero (tree divisor)
7046 /* If DIVISOR is zero, and has integral type, issue a warning about
7047 division by zero. Do not issue a warning if DIVISOR has a
7048 floating-point type, since we consider 0.0/0.0 a valid way of
7049 generating a NaN. */
7050 if (skip_evaluation == 0 && integer_zerop (divisor))
7051 warning (OPT_Wdiv_by_zero, "division by zero");
7054 #include "gt-c-common.h"