2007-05-30 H.J. Lu <hongjiu.lu@intel.com>
[official-gcc.git] / gcc / c-common.c
blob2edf807e91dabc41eed0d6dc2256c4686e3f8eae
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 *);
559 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
561 static void check_function_nonnull (tree, int, tree *);
562 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
563 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
564 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
565 static int resort_field_decl_cmp (const void *, const void *);
567 /* Table of machine-independent attributes common to all C-like languages. */
568 const struct attribute_spec c_common_attribute_table[] =
570 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
571 { "packed", 0, 0, false, false, false,
572 handle_packed_attribute },
573 { "nocommon", 0, 0, true, false, false,
574 handle_nocommon_attribute },
575 { "common", 0, 0, true, false, false,
576 handle_common_attribute },
577 /* FIXME: logically, noreturn attributes should be listed as
578 "false, true, true" and apply to function types. But implementing this
579 would require all the places in the compiler that use TREE_THIS_VOLATILE
580 on a decl to identify non-returning functions to be located and fixed
581 to check the function type instead. */
582 { "noreturn", 0, 0, true, false, false,
583 handle_noreturn_attribute },
584 { "volatile", 0, 0, true, false, false,
585 handle_noreturn_attribute },
586 { "noinline", 0, 0, true, false, false,
587 handle_noinline_attribute },
588 { "always_inline", 0, 0, true, false, false,
589 handle_always_inline_attribute },
590 { "gnu_inline", 0, 0, true, false, false,
591 handle_gnu_inline_attribute },
592 { "flatten", 0, 0, true, false, false,
593 handle_flatten_attribute },
594 { "used", 0, 0, true, false, false,
595 handle_used_attribute },
596 { "unused", 0, 0, false, false, false,
597 handle_unused_attribute },
598 { "externally_visible", 0, 0, true, false, false,
599 handle_externally_visible_attribute },
600 /* The same comments as for noreturn attributes apply to const ones. */
601 { "const", 0, 0, true, false, false,
602 handle_const_attribute },
603 { "transparent_union", 0, 0, false, false, false,
604 handle_transparent_union_attribute },
605 { "constructor", 0, 1, true, false, false,
606 handle_constructor_attribute },
607 { "destructor", 0, 1, true, false, false,
608 handle_destructor_attribute },
609 { "mode", 1, 1, false, true, false,
610 handle_mode_attribute },
611 { "section", 1, 1, true, false, false,
612 handle_section_attribute },
613 { "aligned", 0, 1, false, false, false,
614 handle_aligned_attribute },
615 { "weak", 0, 0, true, false, false,
616 handle_weak_attribute },
617 { "alias", 1, 1, true, false, false,
618 handle_alias_attribute },
619 { "weakref", 0, 1, true, false, false,
620 handle_weakref_attribute },
621 { "no_instrument_function", 0, 0, true, false, false,
622 handle_no_instrument_function_attribute },
623 { "malloc", 0, 0, true, false, false,
624 handle_malloc_attribute },
625 { "returns_twice", 0, 0, true, false, false,
626 handle_returns_twice_attribute },
627 { "no_stack_limit", 0, 0, true, false, false,
628 handle_no_limit_stack_attribute },
629 { "pure", 0, 0, true, false, false,
630 handle_pure_attribute },
631 /* For internal use (marking of builtins) only. The name contains space
632 to prevent its usage in source code. */
633 { "no vops", 0, 0, true, false, false,
634 handle_novops_attribute },
635 { "deprecated", 0, 0, false, false, false,
636 handle_deprecated_attribute },
637 { "vector_size", 1, 1, false, true, false,
638 handle_vector_size_attribute },
639 { "visibility", 1, 1, false, false, false,
640 handle_visibility_attribute },
641 { "tls_model", 1, 1, true, false, false,
642 handle_tls_model_attribute },
643 { "nonnull", 0, -1, false, true, true,
644 handle_nonnull_attribute },
645 { "nothrow", 0, 0, true, false, false,
646 handle_nothrow_attribute },
647 { "may_alias", 0, 0, false, true, false, NULL },
648 { "cleanup", 1, 1, true, false, false,
649 handle_cleanup_attribute },
650 { "warn_unused_result", 0, 0, false, true, true,
651 handle_warn_unused_result_attribute },
652 { "sentinel", 0, 1, false, true, true,
653 handle_sentinel_attribute },
654 { "alloc_size", 1, 2, false, true, true,
655 handle_alloc_size_attribute },
656 { "cold", 0, 0, true, false, false,
657 handle_cold_attribute },
658 { "hot", 0, 0, true, false, false,
659 handle_hot_attribute },
660 { NULL, 0, 0, false, false, false, NULL }
663 /* Give the specifications for the format attributes, used by C and all
664 descendants. */
666 const struct attribute_spec c_common_format_attribute_table[] =
668 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
669 { "format", 3, 3, false, true, true,
670 handle_format_attribute },
671 { "format_arg", 1, 1, false, true, true,
672 handle_format_arg_attribute },
673 { NULL, 0, 0, false, false, false, NULL }
676 /* Push current bindings for the function name VAR_DECLS. */
678 void
679 start_fname_decls (void)
681 unsigned ix;
682 tree saved = NULL_TREE;
684 for (ix = 0; fname_vars[ix].decl; ix++)
686 tree decl = *fname_vars[ix].decl;
688 if (decl)
690 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
691 *fname_vars[ix].decl = NULL_TREE;
694 if (saved || saved_function_name_decls)
695 /* Normally they'll have been NULL, so only push if we've got a
696 stack, or they are non-NULL. */
697 saved_function_name_decls = tree_cons (saved, NULL_TREE,
698 saved_function_name_decls);
701 /* Finish up the current bindings, adding them into the current function's
702 statement tree. This must be done _before_ finish_stmt_tree is called.
703 If there is no current function, we must be at file scope and no statements
704 are involved. Pop the previous bindings. */
706 void
707 finish_fname_decls (void)
709 unsigned ix;
710 tree stmts = NULL_TREE;
711 tree stack = saved_function_name_decls;
713 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
714 append_to_statement_list (TREE_VALUE (stack), &stmts);
716 if (stmts)
718 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
720 if (TREE_CODE (*bodyp) == BIND_EXPR)
721 bodyp = &BIND_EXPR_BODY (*bodyp);
723 append_to_statement_list_force (*bodyp, &stmts);
724 *bodyp = stmts;
727 for (ix = 0; fname_vars[ix].decl; ix++)
728 *fname_vars[ix].decl = NULL_TREE;
730 if (stack)
732 /* We had saved values, restore them. */
733 tree saved;
735 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
737 tree decl = TREE_PURPOSE (saved);
738 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
740 *fname_vars[ix].decl = decl;
742 stack = TREE_CHAIN (stack);
744 saved_function_name_decls = stack;
747 /* Return the text name of the current function, suitably prettified
748 by PRETTY_P. Return string must be freed by caller. */
750 const char *
751 fname_as_string (int pretty_p)
753 const char *name = "top level";
754 char *namep;
755 int vrb = 2;
757 if (!pretty_p)
759 name = "";
760 vrb = 0;
763 if (current_function_decl)
764 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
766 if (c_lex_string_translate)
768 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
769 cpp_string cstr = { 0, 0 }, strname;
771 namep = XNEWVEC (char, len);
772 snprintf (namep, len, "\"%s\"", name);
773 strname.text = (unsigned char *) namep;
774 strname.len = len - 1;
776 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
778 XDELETEVEC (namep);
779 return (char *) cstr.text;
782 else
783 namep = xstrdup (name);
785 return namep;
788 /* Expand DECL if it declares an entity not handled by the
789 common code. */
792 c_expand_decl (tree decl)
794 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
796 /* Let the back-end know about this variable. */
797 if (!anon_aggr_type_p (TREE_TYPE (decl)))
798 emit_local_var (decl);
799 else
800 expand_anon_union_decl (decl, NULL_TREE,
801 DECL_ANON_UNION_ELEMS (decl));
803 else
804 return 0;
806 return 1;
810 /* Return the VAR_DECL for a const char array naming the current
811 function. If the VAR_DECL has not yet been created, create it
812 now. RID indicates how it should be formatted and IDENTIFIER_NODE
813 ID is its name (unfortunately C and C++ hold the RID values of
814 keywords in different places, so we can't derive RID from ID in
815 this language independent code. */
817 tree
818 fname_decl (unsigned int rid, tree id)
820 unsigned ix;
821 tree decl = NULL_TREE;
823 for (ix = 0; fname_vars[ix].decl; ix++)
824 if (fname_vars[ix].rid == rid)
825 break;
827 decl = *fname_vars[ix].decl;
828 if (!decl)
830 /* If a tree is built here, it would normally have the lineno of
831 the current statement. Later this tree will be moved to the
832 beginning of the function and this line number will be wrong.
833 To avoid this problem set the lineno to 0 here; that prevents
834 it from appearing in the RTL. */
835 tree stmts;
836 location_t saved_location = input_location;
837 #ifdef USE_MAPPED_LOCATION
838 input_location = UNKNOWN_LOCATION;
839 #else
840 input_line = 0;
841 #endif
843 stmts = push_stmt_list ();
844 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
845 stmts = pop_stmt_list (stmts);
846 if (!IS_EMPTY_STMT (stmts))
847 saved_function_name_decls
848 = tree_cons (decl, stmts, saved_function_name_decls);
849 *fname_vars[ix].decl = decl;
850 input_location = saved_location;
852 if (!ix && !current_function_decl)
853 pedwarn ("%qD is not defined outside of function scope", decl);
855 return decl;
858 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
860 tree
861 fix_string_type (tree value)
863 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
864 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
865 int length = TREE_STRING_LENGTH (value);
866 int nchars;
867 tree e_type, i_type, a_type;
869 /* Compute the number of elements, for the array type. */
870 nchars = wide_flag ? length / wchar_bytes : length;
872 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
873 limit in C++98 Annex B is very large (65536) and is not normative,
874 so we do not diagnose it (warn_overlength_strings is forced off
875 in c_common_post_options). */
876 if (warn_overlength_strings)
878 const int nchars_max = flag_isoc99 ? 4095 : 509;
879 const int relevant_std = flag_isoc99 ? 99 : 90;
880 if (nchars - 1 > nchars_max)
881 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
882 separate the %d from the 'C'. 'ISO' should not be
883 translated, but it may be moved after 'C%d' in languages
884 where modifiers follow nouns. */
885 pedwarn ("string length %qd is greater than the length %qd "
886 "ISO C%d compilers are required to support",
887 nchars - 1, nchars_max, relevant_std);
890 /* Create the array type for the string constant. The ISO C++
891 standard says that a string literal has type `const char[N]' or
892 `const wchar_t[N]'. We use the same logic when invoked as a C
893 front-end with -Wwrite-strings.
894 ??? We should change the type of an expression depending on the
895 state of a warning flag. We should just be warning -- see how
896 this is handled in the C++ front-end for the deprecated implicit
897 conversion from string literals to `char*' or `wchar_t*'.
899 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
900 array type being the unqualified version of that type.
901 Therefore, if we are constructing an array of const char, we must
902 construct the matching unqualified array type first. The C front
903 end does not require this, but it does no harm, so we do it
904 unconditionally. */
905 e_type = wide_flag ? wchar_type_node : char_type_node;
906 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
907 a_type = build_array_type (e_type, i_type);
908 if (c_dialect_cxx() || warn_write_strings)
909 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
911 TREE_TYPE (value) = a_type;
912 TREE_CONSTANT (value) = 1;
913 TREE_INVARIANT (value) = 1;
914 TREE_READONLY (value) = 1;
915 TREE_STATIC (value) = 1;
916 return value;
919 /* Print a warning if a constant expression had overflow in folding.
920 Invoke this function on every expression that the language
921 requires to be a constant expression.
922 Note the ANSI C standard says it is erroneous for a
923 constant expression to overflow. */
925 void
926 constant_expression_warning (tree value)
928 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
929 || TREE_CODE (value) == VECTOR_CST
930 || TREE_CODE (value) == COMPLEX_CST)
931 && TREE_OVERFLOW (value)
932 && warn_overflow
933 && pedantic)
934 pedwarn ("overflow in constant expression");
937 /* Print a warning if an expression had overflow in folding and its
938 operands hadn't.
940 Invoke this function on every expression that
941 (1) appears in the source code, and
942 (2) is a constant expression that overflowed, and
943 (3) is not already checked by convert_and_check;
944 however, do not invoke this function on operands of explicit casts
945 or when the expression is the result of an operator and any operand
946 already overflowed. */
948 void
949 overflow_warning (tree value)
951 if (skip_evaluation) return;
953 switch (TREE_CODE (value))
955 case INTEGER_CST:
956 warning (OPT_Woverflow, "integer overflow in expression");
957 break;
959 case REAL_CST:
960 warning (OPT_Woverflow, "floating point overflow in expression");
961 break;
963 case VECTOR_CST:
964 warning (OPT_Woverflow, "vector overflow in expression");
965 break;
967 case COMPLEX_CST:
968 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
969 warning (OPT_Woverflow, "complex integer overflow in expression");
970 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
971 warning (OPT_Woverflow, "complex floating point overflow in expression");
972 break;
974 default:
975 break;
980 /* Warn about use of a logical || / && operator being used in a
981 context where it is likely that the bitwise equivalent was intended
982 by the programmer. CODE is the TREE_CODE of the operator, ARG1
983 and ARG2 the arguments. */
985 void
986 warn_logical_operator (enum tree_code code, tree arg1, tree
987 arg2)
989 switch (code)
991 case TRUTH_ANDIF_EXPR:
992 case TRUTH_ORIF_EXPR:
993 case TRUTH_OR_EXPR:
994 case TRUTH_AND_EXPR:
995 if (!TREE_NO_WARNING (arg1)
996 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
997 && !CONSTANT_CLASS_P (arg1)
998 && TREE_CODE (arg2) == INTEGER_CST
999 && !integer_zerop (arg2))
1001 warning (OPT_Wlogical_op,
1002 "logical %<%s%> with non-zero constant "
1003 "will always evaluate as true",
1004 ((code == TRUTH_ANDIF_EXPR)
1005 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1006 TREE_NO_WARNING (arg1) = true;
1008 break;
1009 default:
1010 break;
1015 /* Print a warning about casts that might indicate violation
1016 of strict aliasing rules if -Wstrict-aliasing is used and
1017 strict aliasing mode is in effect. OTYPE is the original
1018 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1020 bool
1021 strict_aliasing_warning (tree otype, tree type, tree expr)
1023 if (!(flag_strict_aliasing && POINTER_TYPE_P (type)
1024 && POINTER_TYPE_P (otype) && !VOID_TYPE_P (TREE_TYPE (type))))
1025 return false;
1027 if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1028 && (DECL_P (TREE_OPERAND (expr, 0))
1029 || handled_component_p (TREE_OPERAND (expr, 0))))
1031 /* Casting the address of an object to non void pointer. Warn
1032 if the cast breaks type based aliasing. */
1033 if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1035 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1036 "might break strict-aliasing rules");
1037 return true;
1039 else
1041 /* warn_strict_aliasing >= 3. This includes the default (3).
1042 Only warn if the cast is dereferenced immediately. */
1043 HOST_WIDE_INT set1 =
1044 get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1045 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1047 if (!alias_sets_conflict_p (set1, set2))
1049 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1050 "pointer will break strict-aliasing rules");
1051 return true;
1053 else if (warn_strict_aliasing == 2
1054 && !alias_sets_might_conflict_p (set1, set2))
1056 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1057 "pointer might break strict-aliasing rules");
1058 return true;
1062 else
1063 if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1065 /* At this level, warn for any conversions, even if an address is
1066 not taken in the same statement. This will likely produce many
1067 false positives, but could be useful to pinpoint problems that
1068 are not revealed at higher levels. */
1069 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (otype));
1070 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1071 if (!COMPLETE_TYPE_P(type)
1072 || !alias_sets_might_conflict_p (set1, set2))
1074 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1075 "pointer might break strict-aliasing rules");
1076 return true;
1080 return false;
1083 /* Print a warning about if (); or if () .. else; constructs
1084 via the special empty statement node that we create. INNER_THEN
1085 and INNER_ELSE are the statement lists of the if and the else
1086 block. */
1088 void
1089 empty_if_body_warning (tree inner_then, tree inner_else)
1091 if (TREE_CODE (inner_then) == STATEMENT_LIST
1092 && STATEMENT_LIST_TAIL (inner_then))
1093 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1095 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1096 && STATEMENT_LIST_TAIL (inner_else))
1097 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1099 if (IS_EMPTY_STMT (inner_then) && !inner_else)
1100 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1101 "in an %<if%> statement", EXPR_LOCUS (inner_then));
1103 else if (inner_else && IS_EMPTY_STMT (inner_else))
1104 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1105 "in an %<else%> statement", EXPR_LOCUS (inner_else));
1108 /* Warn for unlikely, improbable, or stupid DECL declarations
1109 of `main'. */
1111 void
1112 check_main_parameter_types (tree decl)
1114 tree args;
1115 int argct = 0;
1117 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1118 args = TREE_CHAIN (args))
1120 tree type = args ? TREE_VALUE (args) : 0;
1122 if (type == void_type_node || type == error_mark_node )
1123 break;
1125 ++argct;
1126 switch (argct)
1128 case 1:
1129 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1130 pedwarn ("first argument of %q+D should be %<int%>", decl);
1131 break;
1133 case 2:
1134 if (TREE_CODE (type) != POINTER_TYPE
1135 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1136 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1137 != char_type_node))
1138 pedwarn ("second argument of %q+D should be %<char **%>",
1139 decl);
1140 break;
1142 case 3:
1143 if (TREE_CODE (type) != POINTER_TYPE
1144 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1145 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1146 != char_type_node))
1147 pedwarn ("third argument of %q+D should probably be "
1148 "%<char **%>", decl);
1149 break;
1153 /* It is intentional that this message does not mention the third
1154 argument because it's only mentioned in an appendix of the
1155 standard. */
1156 if (argct > 0 && (argct < 2 || argct > 3))
1157 pedwarn ("%q+D takes only zero or two arguments", decl);
1160 /* True if vector types T1 and T2 can be converted to each other
1161 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1162 can only be converted with -flax-vector-conversions yet that is not
1163 in effect, emit a note telling the user about that option if such
1164 a note has not previously been emitted. */
1165 bool
1166 vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note)
1168 static bool emitted_lax_note = false;
1169 bool convertible_lax;
1171 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1172 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1173 return true;
1175 convertible_lax =
1176 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1177 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1178 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1179 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1180 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1182 if (!convertible_lax || flag_lax_vector_conversions)
1183 return convertible_lax;
1185 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1186 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2)))
1187 return true;
1189 if (emit_lax_note && !emitted_lax_note)
1191 emitted_lax_note = true;
1192 inform ("use -flax-vector-conversions to permit "
1193 "conversions between vectors with differing "
1194 "element types or numbers of subparts");
1197 return false;
1200 /* Warns if the conversion of EXPR to TYPE may alter a value.
1201 This is a helper function for warnings_for_convert_and_check. */
1203 static void
1204 conversion_warning (tree type, tree expr)
1206 bool give_warning = false;
1208 unsigned int formal_prec = TYPE_PRECISION (type);
1210 if (!warn_conversion && !warn_sign_conversion)
1211 return;
1213 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1215 /* Warn for real constant that is not an exact integer converted
1216 to integer type. */
1217 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1218 && TREE_CODE (type) == INTEGER_TYPE)
1220 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1221 give_warning = true;
1223 /* Warn for an integer constant that does not fit into integer type. */
1224 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1225 && TREE_CODE (type) == INTEGER_TYPE
1226 && !int_fits_type_p (expr, type))
1228 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1229 warning (OPT_Wsign_conversion,
1230 "negative integer implicitly converted to unsigned type");
1231 else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (TREE_TYPE (expr)))
1232 warning (OPT_Wsign_conversion,
1233 "conversion of unsigned constant value to negative integer");
1234 else
1235 give_warning = true;
1237 else if (TREE_CODE (type) == REAL_TYPE)
1239 /* Warn for an integer constant that does not fit into real type. */
1240 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1242 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1243 if (!exact_real_truncate (TYPE_MODE (type), &a))
1244 give_warning = true;
1246 /* Warn for a real constant that does not fit into a smaller
1247 real type. */
1248 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1249 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1251 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1252 if (!exact_real_truncate (TYPE_MODE (type), &a))
1253 give_warning = true;
1257 if (give_warning)
1258 warning (OPT_Wconversion,
1259 "conversion to %qT alters %qT constant value",
1260 type, TREE_TYPE (expr));
1262 else /* 'expr' is not a constant. */
1264 /* Warn for real types converted to integer types. */
1265 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1266 && TREE_CODE (type) == INTEGER_TYPE)
1267 give_warning = true;
1269 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1270 && TREE_CODE (type) == INTEGER_TYPE)
1272 /* Warn for integer types converted to smaller integer types. */
1273 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1274 give_warning = true;
1276 /* When they are the same width but different signedness,
1277 then the value may change. */
1278 else if ((formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1279 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1280 /* Even when converted to a bigger type, if the type is
1281 unsigned but expr is signed, then negative values
1282 will be changed. */
1283 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1284 warning (OPT_Wsign_conversion,
1285 "conversion to %qT from %qT may change the sign of the result",
1286 type, TREE_TYPE (expr));
1289 /* Warn for integer types converted to real types if and only if
1290 all the range of values of the integer type cannot be
1291 represented by the real type. */
1292 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1293 && TREE_CODE (type) == REAL_TYPE)
1295 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1296 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1297 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1298 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1300 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1301 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1302 give_warning = true;
1305 /* Warn for real types converted to smaller real types. */
1306 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1307 && TREE_CODE (type) == REAL_TYPE
1308 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1309 give_warning = true;
1312 if (give_warning)
1313 warning (OPT_Wconversion,
1314 "conversion to %qT from %qT may alter its value",
1315 type, TREE_TYPE (expr));
1319 /* Produce warnings after a conversion. RESULT is the result of
1320 converting EXPR to TYPE. This is a helper function for
1321 convert_and_check and cp_convert_and_check. */
1323 void
1324 warnings_for_convert_and_check (tree type, tree expr, tree result)
1326 if (TREE_CODE (expr) == INTEGER_CST
1327 && (TREE_CODE (type) == INTEGER_TYPE
1328 || TREE_CODE (type) == ENUMERAL_TYPE)
1329 && !int_fits_type_p (expr, type))
1331 /* Do not diagnose overflow in a constant expression merely
1332 because a conversion overflowed. */
1333 if (TREE_OVERFLOW (result))
1334 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1336 if (TYPE_UNSIGNED (type))
1338 /* This detects cases like converting -129 or 256 to
1339 unsigned char. */
1340 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1341 warning (OPT_Woverflow,
1342 "large integer implicitly truncated to unsigned type");
1343 else
1344 conversion_warning (type, expr);
1346 else if (!int_fits_type_p (expr, unsigned_type_for (type)))
1347 warning (OPT_Woverflow,
1348 "overflow in implicit constant conversion");
1349 /* No warning for converting 0x80000000 to int. */
1350 else if (pedantic
1351 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1352 || TYPE_PRECISION (TREE_TYPE (expr))
1353 != TYPE_PRECISION (type)))
1354 warning (OPT_Woverflow,
1355 "overflow in implicit constant conversion");
1357 else
1358 conversion_warning (type, expr);
1360 else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
1361 warning (OPT_Woverflow,
1362 "overflow in implicit constant conversion");
1363 else
1364 conversion_warning (type, expr);
1368 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1369 Invoke this function on every expression that is converted implicitly,
1370 i.e. because of language rules and not because of an explicit cast. */
1372 tree
1373 convert_and_check (tree type, tree expr)
1375 tree result;
1377 if (TREE_TYPE (expr) == type)
1378 return expr;
1380 result = convert (type, expr);
1382 if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
1383 warnings_for_convert_and_check (type, expr, result);
1385 return result;
1388 /* A node in a list that describes references to variables (EXPR), which are
1389 either read accesses if WRITER is zero, or write accesses, in which case
1390 WRITER is the parent of EXPR. */
1391 struct tlist
1393 struct tlist *next;
1394 tree expr, writer;
1397 /* Used to implement a cache the results of a call to verify_tree. We only
1398 use this for SAVE_EXPRs. */
1399 struct tlist_cache
1401 struct tlist_cache *next;
1402 struct tlist *cache_before_sp;
1403 struct tlist *cache_after_sp;
1404 tree expr;
1407 /* Obstack to use when allocating tlist structures, and corresponding
1408 firstobj. */
1409 static struct obstack tlist_obstack;
1410 static char *tlist_firstobj = 0;
1412 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1413 warnings. */
1414 static struct tlist *warned_ids;
1415 /* SAVE_EXPRs need special treatment. We process them only once and then
1416 cache the results. */
1417 static struct tlist_cache *save_expr_cache;
1419 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1420 static void merge_tlist (struct tlist **, struct tlist *, int);
1421 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1422 static int warning_candidate_p (tree);
1423 static void warn_for_collisions (struct tlist *);
1424 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1425 static struct tlist *new_tlist (struct tlist *, tree, tree);
1427 /* Create a new struct tlist and fill in its fields. */
1428 static struct tlist *
1429 new_tlist (struct tlist *next, tree t, tree writer)
1431 struct tlist *l;
1432 l = XOBNEW (&tlist_obstack, struct tlist);
1433 l->next = next;
1434 l->expr = t;
1435 l->writer = writer;
1436 return l;
1439 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1440 is nonnull, we ignore any node we find which has a writer equal to it. */
1442 static void
1443 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1445 while (add)
1447 struct tlist *next = add->next;
1448 if (!copy)
1449 add->next = *to;
1450 if (!exclude_writer || add->writer != exclude_writer)
1451 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1452 add = next;
1456 /* Merge the nodes of ADD into TO. This merging process is done so that for
1457 each variable that already exists in TO, no new node is added; however if
1458 there is a write access recorded in ADD, and an occurrence on TO is only
1459 a read access, then the occurrence in TO will be modified to record the
1460 write. */
1462 static void
1463 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1465 struct tlist **end = to;
1467 while (*end)
1468 end = &(*end)->next;
1470 while (add)
1472 int found = 0;
1473 struct tlist *tmp2;
1474 struct tlist *next = add->next;
1476 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1477 if (tmp2->expr == add->expr)
1479 found = 1;
1480 if (!tmp2->writer)
1481 tmp2->writer = add->writer;
1483 if (!found)
1485 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1486 end = &(*end)->next;
1487 *end = 0;
1489 add = next;
1493 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1494 references in list LIST conflict with it, excluding reads if ONLY writers
1495 is nonzero. */
1497 static void
1498 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1499 int only_writes)
1501 struct tlist *tmp;
1503 /* Avoid duplicate warnings. */
1504 for (tmp = warned_ids; tmp; tmp = tmp->next)
1505 if (tmp->expr == written)
1506 return;
1508 while (list)
1510 if (list->expr == written
1511 && list->writer != writer
1512 && (!only_writes || list->writer)
1513 && DECL_NAME (list->expr))
1515 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1516 warning (0, "operation on %qE may be undefined", list->expr);
1518 list = list->next;
1522 /* Given a list LIST of references to variables, find whether any of these
1523 can cause conflicts due to missing sequence points. */
1525 static void
1526 warn_for_collisions (struct tlist *list)
1528 struct tlist *tmp;
1530 for (tmp = list; tmp; tmp = tmp->next)
1532 if (tmp->writer)
1533 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1537 /* Return nonzero if X is a tree that can be verified by the sequence point
1538 warnings. */
1539 static int
1540 warning_candidate_p (tree x)
1542 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1545 /* Walk the tree X, and record accesses to variables. If X is written by the
1546 parent tree, WRITER is the parent.
1547 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1548 expression or its only operand forces a sequence point, then everything up
1549 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1550 in PNO_SP.
1551 Once we return, we will have emitted warnings if any subexpression before
1552 such a sequence point could be undefined. On a higher level, however, the
1553 sequence point may not be relevant, and we'll merge the two lists.
1555 Example: (b++, a) + b;
1556 The call that processes the COMPOUND_EXPR will store the increment of B
1557 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1558 processes the PLUS_EXPR will need to merge the two lists so that
1559 eventually, all accesses end up on the same list (and we'll warn about the
1560 unordered subexpressions b++ and b.
1562 A note on merging. If we modify the former example so that our expression
1563 becomes
1564 (b++, b) + a
1565 care must be taken not simply to add all three expressions into the final
1566 PNO_SP list. The function merge_tlist takes care of that by merging the
1567 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1568 way, so that no more than one access to B is recorded. */
1570 static void
1571 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1572 tree writer)
1574 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1575 enum tree_code code;
1576 enum tree_code_class cl;
1578 /* X may be NULL if it is the operand of an empty statement expression
1579 ({ }). */
1580 if (x == NULL)
1581 return;
1583 restart:
1584 code = TREE_CODE (x);
1585 cl = TREE_CODE_CLASS (code);
1587 if (warning_candidate_p (x))
1589 *pno_sp = new_tlist (*pno_sp, x, writer);
1590 return;
1593 switch (code)
1595 case CONSTRUCTOR:
1596 return;
1598 case COMPOUND_EXPR:
1599 case TRUTH_ANDIF_EXPR:
1600 case TRUTH_ORIF_EXPR:
1601 tmp_before = tmp_nosp = tmp_list3 = 0;
1602 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1603 warn_for_collisions (tmp_nosp);
1604 merge_tlist (pbefore_sp, tmp_before, 0);
1605 merge_tlist (pbefore_sp, tmp_nosp, 0);
1606 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1607 merge_tlist (pbefore_sp, tmp_list3, 0);
1608 return;
1610 case COND_EXPR:
1611 tmp_before = tmp_list2 = 0;
1612 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1613 warn_for_collisions (tmp_list2);
1614 merge_tlist (pbefore_sp, tmp_before, 0);
1615 merge_tlist (pbefore_sp, tmp_list2, 1);
1617 tmp_list3 = tmp_nosp = 0;
1618 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1619 warn_for_collisions (tmp_nosp);
1620 merge_tlist (pbefore_sp, tmp_list3, 0);
1622 tmp_list3 = tmp_list2 = 0;
1623 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1624 warn_for_collisions (tmp_list2);
1625 merge_tlist (pbefore_sp, tmp_list3, 0);
1626 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1627 two first, to avoid warning for (a ? b++ : b++). */
1628 merge_tlist (&tmp_nosp, tmp_list2, 0);
1629 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1630 return;
1632 case PREDECREMENT_EXPR:
1633 case PREINCREMENT_EXPR:
1634 case POSTDECREMENT_EXPR:
1635 case POSTINCREMENT_EXPR:
1636 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1637 return;
1639 case MODIFY_EXPR:
1640 tmp_before = tmp_nosp = tmp_list3 = 0;
1641 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1642 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1643 /* Expressions inside the LHS are not ordered wrt. the sequence points
1644 in the RHS. Example:
1645 *a = (a++, 2)
1646 Despite the fact that the modification of "a" is in the before_sp
1647 list (tmp_before), it conflicts with the use of "a" in the LHS.
1648 We can handle this by adding the contents of tmp_list3
1649 to those of tmp_before, and redoing the collision warnings for that
1650 list. */
1651 add_tlist (&tmp_before, tmp_list3, x, 1);
1652 warn_for_collisions (tmp_before);
1653 /* Exclude the LHS itself here; we first have to merge it into the
1654 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1655 didn't exclude the LHS, we'd get it twice, once as a read and once
1656 as a write. */
1657 add_tlist (pno_sp, tmp_list3, x, 0);
1658 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1660 merge_tlist (pbefore_sp, tmp_before, 0);
1661 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1662 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1663 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1664 return;
1666 case CALL_EXPR:
1667 /* We need to warn about conflicts among arguments and conflicts between
1668 args and the function address. Side effects of the function address,
1669 however, are not ordered by the sequence point of the call. */
1671 call_expr_arg_iterator iter;
1672 tree arg;
1673 tmp_before = tmp_nosp = 0;
1674 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1675 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1677 tmp_list2 = tmp_list3 = 0;
1678 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1679 merge_tlist (&tmp_list3, tmp_list2, 0);
1680 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1682 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1683 warn_for_collisions (tmp_before);
1684 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1685 return;
1688 case TREE_LIST:
1689 /* Scan all the list, e.g. indices of multi dimensional array. */
1690 while (x)
1692 tmp_before = tmp_nosp = 0;
1693 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1694 merge_tlist (&tmp_nosp, tmp_before, 0);
1695 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1696 x = TREE_CHAIN (x);
1698 return;
1700 case SAVE_EXPR:
1702 struct tlist_cache *t;
1703 for (t = save_expr_cache; t; t = t->next)
1704 if (t->expr == x)
1705 break;
1707 if (!t)
1709 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1710 t->next = save_expr_cache;
1711 t->expr = x;
1712 save_expr_cache = t;
1714 tmp_before = tmp_nosp = 0;
1715 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1716 warn_for_collisions (tmp_nosp);
1718 tmp_list3 = 0;
1719 while (tmp_nosp)
1721 struct tlist *t = tmp_nosp;
1722 tmp_nosp = t->next;
1723 merge_tlist (&tmp_list3, t, 0);
1725 t->cache_before_sp = tmp_before;
1726 t->cache_after_sp = tmp_list3;
1728 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1729 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1730 return;
1733 default:
1734 /* For other expressions, simply recurse on their operands.
1735 Manual tail recursion for unary expressions.
1736 Other non-expressions need not be processed. */
1737 if (cl == tcc_unary)
1739 x = TREE_OPERAND (x, 0);
1740 writer = 0;
1741 goto restart;
1743 else if (IS_EXPR_CODE_CLASS (cl))
1745 int lp;
1746 int max = TREE_OPERAND_LENGTH (x);
1747 for (lp = 0; lp < max; lp++)
1749 tmp_before = tmp_nosp = 0;
1750 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1751 merge_tlist (&tmp_nosp, tmp_before, 0);
1752 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1755 return;
1759 /* Try to warn for undefined behavior in EXPR due to missing sequence
1760 points. */
1762 void
1763 verify_sequence_points (tree expr)
1765 struct tlist *before_sp = 0, *after_sp = 0;
1767 warned_ids = 0;
1768 save_expr_cache = 0;
1769 if (tlist_firstobj == 0)
1771 gcc_obstack_init (&tlist_obstack);
1772 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1775 verify_tree (expr, &before_sp, &after_sp, 0);
1776 warn_for_collisions (after_sp);
1777 obstack_free (&tlist_obstack, tlist_firstobj);
1780 /* Validate the expression after `case' and apply default promotions. */
1782 static tree
1783 check_case_value (tree value)
1785 if (value == NULL_TREE)
1786 return value;
1788 /* ??? Can we ever get nops here for a valid case value? We
1789 shouldn't for C. */
1790 STRIP_TYPE_NOPS (value);
1791 /* In C++, the following is allowed:
1793 const int i = 3;
1794 switch (...) { case i: ... }
1796 So, we try to reduce the VALUE to a constant that way. */
1797 if (c_dialect_cxx ())
1799 value = decl_constant_value (value);
1800 STRIP_TYPE_NOPS (value);
1801 value = fold (value);
1804 if (TREE_CODE (value) == INTEGER_CST)
1805 /* Promote char or short to int. */
1806 value = perform_integral_promotions (value);
1807 else if (value != error_mark_node)
1809 error ("case label does not reduce to an integer constant");
1810 value = error_mark_node;
1813 constant_expression_warning (value);
1815 return value;
1818 /* See if the case values LOW and HIGH are in the range of the original
1819 type (i.e. before the default conversion to int) of the switch testing
1820 expression.
1821 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1822 the type before promoting it. CASE_LOW_P is a pointer to the lower
1823 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1824 if the case is not a case range.
1825 The caller has to make sure that we are not called with NULL for
1826 CASE_LOW_P (i.e. the default case).
1827 Returns true if the case label is in range of ORIG_TYPE (saturated or
1828 untouched) or false if the label is out of range. */
1830 static bool
1831 check_case_bounds (tree type, tree orig_type,
1832 tree *case_low_p, tree *case_high_p)
1834 tree min_value, max_value;
1835 tree case_low = *case_low_p;
1836 tree case_high = case_high_p ? *case_high_p : case_low;
1838 /* If there was a problem with the original type, do nothing. */
1839 if (orig_type == error_mark_node)
1840 return true;
1842 min_value = TYPE_MIN_VALUE (orig_type);
1843 max_value = TYPE_MAX_VALUE (orig_type);
1845 /* Case label is less than minimum for type. */
1846 if (tree_int_cst_compare (case_low, min_value) < 0
1847 && tree_int_cst_compare (case_high, min_value) < 0)
1849 warning (0, "case label value is less than minimum value for type");
1850 return false;
1853 /* Case value is greater than maximum for type. */
1854 if (tree_int_cst_compare (case_low, max_value) > 0
1855 && tree_int_cst_compare (case_high, max_value) > 0)
1857 warning (0, "case label value exceeds maximum value for type");
1858 return false;
1861 /* Saturate lower case label value to minimum. */
1862 if (tree_int_cst_compare (case_high, min_value) >= 0
1863 && tree_int_cst_compare (case_low, min_value) < 0)
1865 warning (0, "lower value in case label range"
1866 " less than minimum value for type");
1867 case_low = min_value;
1870 /* Saturate upper case label value to maximum. */
1871 if (tree_int_cst_compare (case_low, max_value) <= 0
1872 && tree_int_cst_compare (case_high, max_value) > 0)
1874 warning (0, "upper value in case label range"
1875 " exceeds maximum value for type");
1876 case_high = max_value;
1879 if (*case_low_p != case_low)
1880 *case_low_p = convert (type, case_low);
1881 if (case_high_p && *case_high_p != case_high)
1882 *case_high_p = convert (type, case_high);
1884 return true;
1887 /* Return an integer type with BITS bits of precision,
1888 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1890 tree
1891 c_common_type_for_size (unsigned int bits, int unsignedp)
1893 if (bits == TYPE_PRECISION (integer_type_node))
1894 return unsignedp ? unsigned_type_node : integer_type_node;
1896 if (bits == TYPE_PRECISION (signed_char_type_node))
1897 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1899 if (bits == TYPE_PRECISION (short_integer_type_node))
1900 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1902 if (bits == TYPE_PRECISION (long_integer_type_node))
1903 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1905 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1906 return (unsignedp ? long_long_unsigned_type_node
1907 : long_long_integer_type_node);
1909 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1910 return (unsignedp ? widest_unsigned_literal_type_node
1911 : widest_integer_literal_type_node);
1913 if (bits <= TYPE_PRECISION (intQI_type_node))
1914 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1916 if (bits <= TYPE_PRECISION (intHI_type_node))
1917 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1919 if (bits <= TYPE_PRECISION (intSI_type_node))
1920 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1922 if (bits <= TYPE_PRECISION (intDI_type_node))
1923 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1925 return 0;
1928 /* Used for communication between c_common_type_for_mode and
1929 c_register_builtin_type. */
1930 static GTY(()) tree registered_builtin_types;
1932 /* Return a data type that has machine mode MODE.
1933 If the mode is an integer,
1934 then UNSIGNEDP selects between signed and unsigned types. */
1936 tree
1937 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1939 tree t;
1941 if (mode == TYPE_MODE (integer_type_node))
1942 return unsignedp ? unsigned_type_node : integer_type_node;
1944 if (mode == TYPE_MODE (signed_char_type_node))
1945 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1947 if (mode == TYPE_MODE (short_integer_type_node))
1948 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1950 if (mode == TYPE_MODE (long_integer_type_node))
1951 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1953 if (mode == TYPE_MODE (long_long_integer_type_node))
1954 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1956 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1957 return unsignedp ? widest_unsigned_literal_type_node
1958 : widest_integer_literal_type_node;
1960 if (mode == QImode)
1961 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1963 if (mode == HImode)
1964 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1966 if (mode == SImode)
1967 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1969 if (mode == DImode)
1970 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1972 #if HOST_BITS_PER_WIDE_INT >= 64
1973 if (mode == TYPE_MODE (intTI_type_node))
1974 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1975 #endif
1977 if (mode == TYPE_MODE (float_type_node))
1978 return float_type_node;
1980 if (mode == TYPE_MODE (double_type_node))
1981 return double_type_node;
1983 if (mode == TYPE_MODE (long_double_type_node))
1984 return long_double_type_node;
1986 if (mode == TYPE_MODE (void_type_node))
1987 return void_type_node;
1989 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1990 return (unsignedp
1991 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1992 : make_signed_type (GET_MODE_PRECISION (mode)));
1994 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1995 return (unsignedp
1996 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1997 : make_signed_type (GET_MODE_PRECISION (mode)));
1999 if (COMPLEX_MODE_P (mode))
2001 enum machine_mode inner_mode;
2002 tree inner_type;
2004 if (mode == TYPE_MODE (complex_float_type_node))
2005 return complex_float_type_node;
2006 if (mode == TYPE_MODE (complex_double_type_node))
2007 return complex_double_type_node;
2008 if (mode == TYPE_MODE (complex_long_double_type_node))
2009 return complex_long_double_type_node;
2011 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2012 return complex_integer_type_node;
2014 inner_mode = GET_MODE_INNER (mode);
2015 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2016 if (inner_type != NULL_TREE)
2017 return build_complex_type (inner_type);
2019 else if (VECTOR_MODE_P (mode))
2021 enum machine_mode inner_mode = GET_MODE_INNER (mode);
2022 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2023 if (inner_type != NULL_TREE)
2024 return build_vector_type_for_mode (inner_type, mode);
2027 if (mode == TYPE_MODE (dfloat32_type_node))
2028 return dfloat32_type_node;
2029 if (mode == TYPE_MODE (dfloat64_type_node))
2030 return dfloat64_type_node;
2031 if (mode == TYPE_MODE (dfloat128_type_node))
2032 return dfloat128_type_node;
2034 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
2035 if (TYPE_MODE (TREE_VALUE (t)) == mode)
2036 return TREE_VALUE (t);
2038 return 0;
2041 /* Return a signed type the same as TYPE in other respects. */
2043 tree
2044 c_common_signed_type (tree type)
2046 tree type1 = TYPE_MAIN_VARIANT (type);
2047 if (type1 == unsigned_char_type_node || type1 == char_type_node)
2048 return signed_char_type_node;
2049 if (type1 == unsigned_type_node)
2050 return integer_type_node;
2051 if (type1 == short_unsigned_type_node)
2052 return short_integer_type_node;
2053 if (type1 == long_unsigned_type_node)
2054 return long_integer_type_node;
2055 if (type1 == long_long_unsigned_type_node)
2056 return long_long_integer_type_node;
2057 if (type1 == widest_unsigned_literal_type_node)
2058 return widest_integer_literal_type_node;
2059 #if HOST_BITS_PER_WIDE_INT >= 64
2060 if (type1 == unsigned_intTI_type_node)
2061 return intTI_type_node;
2062 #endif
2063 if (type1 == unsigned_intDI_type_node)
2064 return intDI_type_node;
2065 if (type1 == unsigned_intSI_type_node)
2066 return intSI_type_node;
2067 if (type1 == unsigned_intHI_type_node)
2068 return intHI_type_node;
2069 if (type1 == unsigned_intQI_type_node)
2070 return intQI_type_node;
2072 return c_common_signed_or_unsigned_type (0, type);
2075 /* Return a type the same as TYPE except unsigned or
2076 signed according to UNSIGNEDP. */
2078 tree
2079 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2081 tree type1;
2083 /* This block of code emulates the behavior of the old
2084 c_common_unsigned_type. In particular, it returns
2085 long_unsigned_type_node if passed a long, even when a int would
2086 have the same size. This is necessary for warnings to work
2087 correctly in archs where sizeof(int) == sizeof(long) */
2089 type1 = TYPE_MAIN_VARIANT (type);
2090 if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
2091 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2092 if (type1 == integer_type_node || type1 == unsigned_type_node)
2093 return unsignedp ? unsigned_type_node : integer_type_node;
2094 if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
2095 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2096 if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
2097 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2098 if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
2099 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2100 if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
2101 return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
2102 #if HOST_BITS_PER_WIDE_INT >= 64
2103 if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
2104 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2105 #endif
2106 if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
2107 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2108 if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
2109 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2110 if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
2111 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2112 if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
2113 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2115 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2116 the precision; they have precision set to match their range, but
2117 may use a wider mode to match an ABI. If we change modes, we may
2118 wind up with bad conversions. For INTEGER_TYPEs in C, must check
2119 the precision as well, so as to yield correct results for
2120 bit-field types. C++ does not have these separate bit-field
2121 types, and producing a signed or unsigned variant of an
2122 ENUMERAL_TYPE may cause other problems as well. */
2124 if (!INTEGRAL_TYPE_P (type)
2125 || TYPE_UNSIGNED (type) == unsignedp)
2126 return type;
2128 #define TYPE_OK(node) \
2129 (TYPE_MODE (type) == TYPE_MODE (node) \
2130 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2131 if (TYPE_OK (signed_char_type_node))
2132 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2133 if (TYPE_OK (integer_type_node))
2134 return unsignedp ? unsigned_type_node : integer_type_node;
2135 if (TYPE_OK (short_integer_type_node))
2136 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2137 if (TYPE_OK (long_integer_type_node))
2138 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2139 if (TYPE_OK (long_long_integer_type_node))
2140 return (unsignedp ? long_long_unsigned_type_node
2141 : long_long_integer_type_node);
2142 if (TYPE_OK (widest_integer_literal_type_node))
2143 return (unsignedp ? widest_unsigned_literal_type_node
2144 : widest_integer_literal_type_node);
2146 #if HOST_BITS_PER_WIDE_INT >= 64
2147 if (TYPE_OK (intTI_type_node))
2148 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2149 #endif
2150 if (TYPE_OK (intDI_type_node))
2151 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2152 if (TYPE_OK (intSI_type_node))
2153 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2154 if (TYPE_OK (intHI_type_node))
2155 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2156 if (TYPE_OK (intQI_type_node))
2157 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2158 #undef TYPE_OK
2160 if (c_dialect_cxx ())
2161 return type;
2162 else
2163 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2166 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2168 tree
2169 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2171 /* Extended integer types of the same width as a standard type have
2172 lesser rank, so those of the same width as int promote to int or
2173 unsigned int and are valid for printf formats expecting int or
2174 unsigned int. To avoid such special cases, avoid creating
2175 extended integer types for bit-fields if a standard integer type
2176 is available. */
2177 if (width == TYPE_PRECISION (integer_type_node))
2178 return unsignedp ? unsigned_type_node : integer_type_node;
2179 if (width == TYPE_PRECISION (signed_char_type_node))
2180 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2181 if (width == TYPE_PRECISION (short_integer_type_node))
2182 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2183 if (width == TYPE_PRECISION (long_integer_type_node))
2184 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2185 if (width == TYPE_PRECISION (long_long_integer_type_node))
2186 return (unsignedp ? long_long_unsigned_type_node
2187 : long_long_integer_type_node);
2188 return build_nonstandard_integer_type (width, unsignedp);
2191 /* The C version of the register_builtin_type langhook. */
2193 void
2194 c_register_builtin_type (tree type, const char* name)
2196 tree decl;
2198 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2199 DECL_ARTIFICIAL (decl) = 1;
2200 if (!TYPE_NAME (type))
2201 TYPE_NAME (type) = decl;
2202 pushdecl (decl);
2204 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2208 /* Return the minimum number of bits needed to represent VALUE in a
2209 signed or unsigned type, UNSIGNEDP says which. */
2211 unsigned int
2212 min_precision (tree value, int unsignedp)
2214 int log;
2216 /* If the value is negative, compute its negative minus 1. The latter
2217 adjustment is because the absolute value of the largest negative value
2218 is one larger than the largest positive value. This is equivalent to
2219 a bit-wise negation, so use that operation instead. */
2221 if (tree_int_cst_sgn (value) < 0)
2222 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2224 /* Return the number of bits needed, taking into account the fact
2225 that we need one more bit for a signed than unsigned type. */
2227 if (integer_zerop (value))
2228 log = 0;
2229 else
2230 log = tree_floor_log2 (value);
2232 return log + 1 + !unsignedp;
2235 /* Print an error message for invalid operands to arith operation
2236 CODE. */
2238 void
2239 binary_op_error (enum tree_code code)
2241 const char *opname;
2243 switch (code)
2245 case PLUS_EXPR:
2246 opname = "+"; break;
2247 case MINUS_EXPR:
2248 opname = "-"; break;
2249 case MULT_EXPR:
2250 opname = "*"; break;
2251 case MAX_EXPR:
2252 opname = "max"; break;
2253 case MIN_EXPR:
2254 opname = "min"; break;
2255 case EQ_EXPR:
2256 opname = "=="; break;
2257 case NE_EXPR:
2258 opname = "!="; break;
2259 case LE_EXPR:
2260 opname = "<="; break;
2261 case GE_EXPR:
2262 opname = ">="; break;
2263 case LT_EXPR:
2264 opname = "<"; break;
2265 case GT_EXPR:
2266 opname = ">"; break;
2267 case LSHIFT_EXPR:
2268 opname = "<<"; break;
2269 case RSHIFT_EXPR:
2270 opname = ">>"; break;
2271 case TRUNC_MOD_EXPR:
2272 case FLOOR_MOD_EXPR:
2273 opname = "%"; break;
2274 case TRUNC_DIV_EXPR:
2275 case FLOOR_DIV_EXPR:
2276 opname = "/"; break;
2277 case BIT_AND_EXPR:
2278 opname = "&"; break;
2279 case BIT_IOR_EXPR:
2280 opname = "|"; break;
2281 case TRUTH_ANDIF_EXPR:
2282 opname = "&&"; break;
2283 case TRUTH_ORIF_EXPR:
2284 opname = "||"; break;
2285 case BIT_XOR_EXPR:
2286 opname = "^"; break;
2287 default:
2288 gcc_unreachable ();
2290 error ("invalid operands to binary %s", opname);
2293 /* Subroutine of build_binary_op, used for comparison operations.
2294 See if the operands have both been converted from subword integer types
2295 and, if so, perhaps change them both back to their original type.
2296 This function is also responsible for converting the two operands
2297 to the proper common type for comparison.
2299 The arguments of this function are all pointers to local variables
2300 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2301 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2303 If this function returns nonzero, it means that the comparison has
2304 a constant value. What this function returns is an expression for
2305 that value. */
2307 tree
2308 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2309 enum tree_code *rescode_ptr)
2311 tree type;
2312 tree op0 = *op0_ptr;
2313 tree op1 = *op1_ptr;
2314 int unsignedp0, unsignedp1;
2315 int real1, real2;
2316 tree primop0, primop1;
2317 enum tree_code code = *rescode_ptr;
2319 /* Throw away any conversions to wider types
2320 already present in the operands. */
2322 primop0 = get_narrower (op0, &unsignedp0);
2323 primop1 = get_narrower (op1, &unsignedp1);
2325 /* Handle the case that OP0 does not *contain* a conversion
2326 but it *requires* conversion to FINAL_TYPE. */
2328 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2329 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2330 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2331 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2333 /* If one of the operands must be floated, we cannot optimize. */
2334 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2335 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2337 /* If first arg is constant, swap the args (changing operation
2338 so value is preserved), for canonicalization. Don't do this if
2339 the second arg is 0. */
2341 if (TREE_CONSTANT (primop0)
2342 && !integer_zerop (primop1) && !real_zerop (primop1))
2344 tree tem = primop0;
2345 int temi = unsignedp0;
2346 primop0 = primop1;
2347 primop1 = tem;
2348 tem = op0;
2349 op0 = op1;
2350 op1 = tem;
2351 *op0_ptr = op0;
2352 *op1_ptr = op1;
2353 unsignedp0 = unsignedp1;
2354 unsignedp1 = temi;
2355 temi = real1;
2356 real1 = real2;
2357 real2 = temi;
2359 switch (code)
2361 case LT_EXPR:
2362 code = GT_EXPR;
2363 break;
2364 case GT_EXPR:
2365 code = LT_EXPR;
2366 break;
2367 case LE_EXPR:
2368 code = GE_EXPR;
2369 break;
2370 case GE_EXPR:
2371 code = LE_EXPR;
2372 break;
2373 default:
2374 break;
2376 *rescode_ptr = code;
2379 /* If comparing an integer against a constant more bits wide,
2380 maybe we can deduce a value of 1 or 0 independent of the data.
2381 Or else truncate the constant now
2382 rather than extend the variable at run time.
2384 This is only interesting if the constant is the wider arg.
2385 Also, it is not safe if the constant is unsigned and the
2386 variable arg is signed, since in this case the variable
2387 would be sign-extended and then regarded as unsigned.
2388 Our technique fails in this case because the lowest/highest
2389 possible unsigned results don't follow naturally from the
2390 lowest/highest possible values of the variable operand.
2391 For just EQ_EXPR and NE_EXPR there is another technique that
2392 could be used: see if the constant can be faithfully represented
2393 in the other operand's type, by truncating it and reextending it
2394 and see if that preserves the constant's value. */
2396 if (!real1 && !real2
2397 && TREE_CODE (primop1) == INTEGER_CST
2398 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2400 int min_gt, max_gt, min_lt, max_lt;
2401 tree maxval, minval;
2402 /* 1 if comparison is nominally unsigned. */
2403 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2404 tree val;
2406 type = c_common_signed_or_unsigned_type (unsignedp0,
2407 TREE_TYPE (primop0));
2409 maxval = TYPE_MAX_VALUE (type);
2410 minval = TYPE_MIN_VALUE (type);
2412 if (unsignedp && !unsignedp0)
2413 *restype_ptr = c_common_signed_type (*restype_ptr);
2415 if (TREE_TYPE (primop1) != *restype_ptr)
2417 /* Convert primop1 to target type, but do not introduce
2418 additional overflow. We know primop1 is an int_cst. */
2419 primop1 = force_fit_type_double (*restype_ptr,
2420 TREE_INT_CST_LOW (primop1),
2421 TREE_INT_CST_HIGH (primop1), 0,
2422 TREE_OVERFLOW (primop1));
2424 if (type != *restype_ptr)
2426 minval = convert (*restype_ptr, minval);
2427 maxval = convert (*restype_ptr, maxval);
2430 if (unsignedp && unsignedp0)
2432 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2433 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2434 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2435 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2437 else
2439 min_gt = INT_CST_LT (primop1, minval);
2440 max_gt = INT_CST_LT (primop1, maxval);
2441 min_lt = INT_CST_LT (minval, primop1);
2442 max_lt = INT_CST_LT (maxval, primop1);
2445 val = 0;
2446 /* This used to be a switch, but Genix compiler can't handle that. */
2447 if (code == NE_EXPR)
2449 if (max_lt || min_gt)
2450 val = truthvalue_true_node;
2452 else if (code == EQ_EXPR)
2454 if (max_lt || min_gt)
2455 val = truthvalue_false_node;
2457 else if (code == LT_EXPR)
2459 if (max_lt)
2460 val = truthvalue_true_node;
2461 if (!min_lt)
2462 val = truthvalue_false_node;
2464 else if (code == GT_EXPR)
2466 if (min_gt)
2467 val = truthvalue_true_node;
2468 if (!max_gt)
2469 val = truthvalue_false_node;
2471 else if (code == LE_EXPR)
2473 if (!max_gt)
2474 val = truthvalue_true_node;
2475 if (min_gt)
2476 val = truthvalue_false_node;
2478 else if (code == GE_EXPR)
2480 if (!min_lt)
2481 val = truthvalue_true_node;
2482 if (max_lt)
2483 val = truthvalue_false_node;
2486 /* If primop0 was sign-extended and unsigned comparison specd,
2487 we did a signed comparison above using the signed type bounds.
2488 But the comparison we output must be unsigned.
2490 Also, for inequalities, VAL is no good; but if the signed
2491 comparison had *any* fixed result, it follows that the
2492 unsigned comparison just tests the sign in reverse
2493 (positive values are LE, negative ones GE).
2494 So we can generate an unsigned comparison
2495 against an extreme value of the signed type. */
2497 if (unsignedp && !unsignedp0)
2499 if (val != 0)
2500 switch (code)
2502 case LT_EXPR:
2503 case GE_EXPR:
2504 primop1 = TYPE_MIN_VALUE (type);
2505 val = 0;
2506 break;
2508 case LE_EXPR:
2509 case GT_EXPR:
2510 primop1 = TYPE_MAX_VALUE (type);
2511 val = 0;
2512 break;
2514 default:
2515 break;
2517 /* unsigned_type_for doesn't support C bit fields */
2518 type = c_common_signed_or_unsigned_type (1, type);
2521 if (TREE_CODE (primop0) != INTEGER_CST)
2523 if (val == truthvalue_false_node)
2524 warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
2525 if (val == truthvalue_true_node)
2526 warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
2529 if (val != 0)
2531 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2532 if (TREE_SIDE_EFFECTS (primop0))
2533 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2534 return val;
2537 /* Value is not predetermined, but do the comparison
2538 in the type of the operand that is not constant.
2539 TYPE is already properly set. */
2542 /* If either arg is decimal float and the other is float, find the
2543 proper common type to use for comparison. */
2544 else if (real1 && real2
2545 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2546 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2547 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2549 else if (real1 && real2
2550 && (TYPE_PRECISION (TREE_TYPE (primop0))
2551 == TYPE_PRECISION (TREE_TYPE (primop1))))
2552 type = TREE_TYPE (primop0);
2554 /* If args' natural types are both narrower than nominal type
2555 and both extend in the same manner, compare them
2556 in the type of the wider arg.
2557 Otherwise must actually extend both to the nominal
2558 common type lest different ways of extending
2559 alter the result.
2560 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2562 else if (unsignedp0 == unsignedp1 && real1 == real2
2563 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2564 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2566 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2567 type = c_common_signed_or_unsigned_type (unsignedp0
2568 || TYPE_UNSIGNED (*restype_ptr),
2569 type);
2570 /* Make sure shorter operand is extended the right way
2571 to match the longer operand. */
2572 primop0
2573 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2574 TREE_TYPE (primop0)),
2575 primop0);
2576 primop1
2577 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2578 TREE_TYPE (primop1)),
2579 primop1);
2581 else
2583 /* Here we must do the comparison on the nominal type
2584 using the args exactly as we received them. */
2585 type = *restype_ptr;
2586 primop0 = op0;
2587 primop1 = op1;
2589 if (!real1 && !real2 && integer_zerop (primop1)
2590 && TYPE_UNSIGNED (*restype_ptr))
2592 tree value = 0;
2593 switch (code)
2595 case GE_EXPR:
2596 /* All unsigned values are >= 0, so we warn. However,
2597 if OP0 is a constant that is >= 0, the signedness of
2598 the comparison isn't an issue, so suppress the
2599 warning. */
2600 if (warn_type_limits && !in_system_header
2601 && !(TREE_CODE (primop0) == INTEGER_CST
2602 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2603 primop0))))
2604 warning (OPT_Wtype_limits,
2605 "comparison of unsigned expression >= 0 is always true");
2606 value = truthvalue_true_node;
2607 break;
2609 case LT_EXPR:
2610 if (warn_type_limits && !in_system_header
2611 && !(TREE_CODE (primop0) == INTEGER_CST
2612 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2613 primop0))))
2614 warning (OPT_Wtype_limits,
2615 "comparison of unsigned expression < 0 is always false");
2616 value = truthvalue_false_node;
2617 break;
2619 default:
2620 break;
2623 if (value != 0)
2625 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2626 if (TREE_SIDE_EFFECTS (primop0))
2627 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2628 primop0, value);
2629 return value;
2634 *op0_ptr = convert (type, primop0);
2635 *op1_ptr = convert (type, primop1);
2637 *restype_ptr = truthvalue_type_node;
2639 return 0;
2642 /* Return a tree for the sum or difference (RESULTCODE says which)
2643 of pointer PTROP and integer INTOP. */
2645 tree
2646 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2648 tree size_exp, ret;
2650 /* The result is a pointer of the same type that is being added. */
2652 tree result_type = TREE_TYPE (ptrop);
2654 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2656 if (pedantic || warn_pointer_arith)
2657 pedwarn ("pointer of type %<void *%> used in arithmetic");
2658 size_exp = integer_one_node;
2660 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2662 if (pedantic || warn_pointer_arith)
2663 pedwarn ("pointer to a function used in arithmetic");
2664 size_exp = integer_one_node;
2666 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2668 if (pedantic || warn_pointer_arith)
2669 pedwarn ("pointer to member function used in arithmetic");
2670 size_exp = integer_one_node;
2672 else
2673 size_exp = size_in_bytes (TREE_TYPE (result_type));
2675 /* We are manipulating pointer values, so we don't need to warn
2676 about relying on undefined signed overflow. We disable the
2677 warning here because we use integer types so fold won't know that
2678 they are really pointers. */
2679 fold_defer_overflow_warnings ();
2681 /* If what we are about to multiply by the size of the elements
2682 contains a constant term, apply distributive law
2683 and multiply that constant term separately.
2684 This helps produce common subexpressions. */
2686 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2687 && !TREE_CONSTANT (intop)
2688 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2689 && TREE_CONSTANT (size_exp)
2690 /* If the constant comes from pointer subtraction,
2691 skip this optimization--it would cause an error. */
2692 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2693 /* If the constant is unsigned, and smaller than the pointer size,
2694 then we must skip this optimization. This is because it could cause
2695 an overflow error if the constant is negative but INTOP is not. */
2696 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2697 || (TYPE_PRECISION (TREE_TYPE (intop))
2698 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2700 enum tree_code subcode = resultcode;
2701 tree int_type = TREE_TYPE (intop);
2702 if (TREE_CODE (intop) == MINUS_EXPR)
2703 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2704 /* Convert both subexpression types to the type of intop,
2705 because weird cases involving pointer arithmetic
2706 can result in a sum or difference with different type args. */
2707 ptrop = build_binary_op (subcode, ptrop,
2708 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2709 intop = convert (int_type, TREE_OPERAND (intop, 0));
2712 /* Convert the integer argument to a type the same size as sizetype
2713 so the multiply won't overflow spuriously. */
2715 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2716 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2717 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2718 TYPE_UNSIGNED (sizetype)), intop);
2720 /* Replace the integer argument with a suitable product by the object size.
2721 Do this multiplication as signed, then convert to the appropriate
2722 pointer type (actually unsigned integral). */
2724 intop = convert (result_type,
2725 build_binary_op (MULT_EXPR, intop,
2726 convert (TREE_TYPE (intop), size_exp), 1));
2728 /* Create the sum or difference. */
2729 ret = fold_build2 (resultcode, result_type, ptrop, intop);
2731 fold_undefer_and_ignore_overflow_warnings ();
2733 return ret;
2736 /* Return whether EXPR is a declaration whose address can never be
2737 NULL. */
2739 bool
2740 decl_with_nonnull_addr_p (tree expr)
2742 return (DECL_P (expr)
2743 && (TREE_CODE (expr) == PARM_DECL
2744 || TREE_CODE (expr) == LABEL_DECL
2745 || !DECL_WEAK (expr)));
2748 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2749 or for an `if' or `while' statement or ?..: exp. It should already
2750 have been validated to be of suitable type; otherwise, a bad
2751 diagnostic may result.
2753 This preparation consists of taking the ordinary
2754 representation of an expression expr and producing a valid tree
2755 boolean expression describing whether expr is nonzero. We could
2756 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2757 but we optimize comparisons, &&, ||, and !.
2759 The resulting type should always be `truthvalue_type_node'. */
2761 tree
2762 c_common_truthvalue_conversion (tree expr)
2764 switch (TREE_CODE (expr))
2766 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
2767 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2768 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2769 case ORDERED_EXPR: case UNORDERED_EXPR:
2770 if (TREE_TYPE (expr) == truthvalue_type_node)
2771 return expr;
2772 return build2 (TREE_CODE (expr), truthvalue_type_node,
2773 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2775 case TRUTH_ANDIF_EXPR:
2776 case TRUTH_ORIF_EXPR:
2777 case TRUTH_AND_EXPR:
2778 case TRUTH_OR_EXPR:
2779 case TRUTH_XOR_EXPR:
2780 if (TREE_TYPE (expr) == truthvalue_type_node)
2781 return expr;
2782 return build2 (TREE_CODE (expr), truthvalue_type_node,
2783 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2784 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2786 case TRUTH_NOT_EXPR:
2787 if (TREE_TYPE (expr) == truthvalue_type_node)
2788 return expr;
2789 return build1 (TREE_CODE (expr), truthvalue_type_node,
2790 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2792 case ERROR_MARK:
2793 return expr;
2795 case INTEGER_CST:
2796 return integer_zerop (expr) ? truthvalue_false_node
2797 : truthvalue_true_node;
2799 case REAL_CST:
2800 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2801 ? truthvalue_true_node
2802 : truthvalue_false_node;
2804 case FUNCTION_DECL:
2805 expr = build_unary_op (ADDR_EXPR, expr, 0);
2806 /* Fall through. */
2808 case ADDR_EXPR:
2810 tree inner = TREE_OPERAND (expr, 0);
2811 if (decl_with_nonnull_addr_p (inner))
2813 /* Common Ada/Pascal programmer's mistake. */
2814 warning (OPT_Waddress,
2815 "the address of %qD will always evaluate as %<true%>",
2816 inner);
2817 return truthvalue_true_node;
2820 /* If we still have a decl, it is possible for its address to
2821 be NULL, so we cannot optimize. */
2822 if (DECL_P (inner))
2824 gcc_assert (DECL_WEAK (inner));
2825 break;
2828 if (TREE_SIDE_EFFECTS (inner))
2829 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2830 inner, truthvalue_true_node);
2831 else
2832 return truthvalue_true_node;
2835 case COMPLEX_EXPR:
2836 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2837 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2838 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2839 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2842 case NEGATE_EXPR:
2843 case ABS_EXPR:
2844 case FLOAT_EXPR:
2845 /* These don't change whether an object is nonzero or zero. */
2846 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2848 case LROTATE_EXPR:
2849 case RROTATE_EXPR:
2850 /* These don't change whether an object is zero or nonzero, but
2851 we can't ignore them if their second arg has side-effects. */
2852 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2853 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2854 TREE_OPERAND (expr, 1),
2855 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2856 else
2857 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2859 case COND_EXPR:
2860 /* Distribute the conversion into the arms of a COND_EXPR. */
2861 return fold_build3 (COND_EXPR, truthvalue_type_node,
2862 TREE_OPERAND (expr, 0),
2863 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2864 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
2866 case CONVERT_EXPR:
2867 case NOP_EXPR:
2868 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2869 since that affects how `default_conversion' will behave. */
2870 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2871 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2872 break;
2873 /* If this is widening the argument, we can ignore it. */
2874 if (TYPE_PRECISION (TREE_TYPE (expr))
2875 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2876 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2877 break;
2879 case MODIFY_EXPR:
2880 if (!TREE_NO_WARNING (expr)
2881 && warn_parentheses)
2883 warning (OPT_Wparentheses,
2884 "suggest parentheses around assignment used as truth value");
2885 TREE_NO_WARNING (expr) = 1;
2887 break;
2889 default:
2890 break;
2893 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2895 tree t = save_expr (expr);
2896 return (build_binary_op
2897 ((TREE_SIDE_EFFECTS (expr)
2898 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2899 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2900 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2901 0));
2904 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2907 static void def_builtin_1 (enum built_in_function fncode,
2908 const char *name,
2909 enum built_in_class fnclass,
2910 tree fntype, tree libtype,
2911 bool both_p, bool fallback_p, bool nonansi_p,
2912 tree fnattrs, bool implicit_p);
2914 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2915 down to the element type of an array. */
2917 tree
2918 c_build_qualified_type (tree type, int type_quals)
2920 if (type == error_mark_node)
2921 return type;
2923 if (TREE_CODE (type) == ARRAY_TYPE)
2925 tree t;
2926 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2927 type_quals);
2929 /* See if we already have an identically qualified type. */
2930 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2932 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2933 && TYPE_NAME (t) == TYPE_NAME (type)
2934 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2935 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2936 TYPE_ATTRIBUTES (type)))
2937 break;
2939 if (!t)
2941 tree domain = TYPE_DOMAIN (type);
2943 t = build_variant_type_copy (type);
2944 TREE_TYPE (t) = element_type;
2946 if (TYPE_STRUCTURAL_EQUALITY_P (element_type)
2947 || (domain && TYPE_STRUCTURAL_EQUALITY_P (domain)))
2948 SET_TYPE_STRUCTURAL_EQUALITY (t);
2949 else if (TYPE_CANONICAL (element_type) != element_type
2950 || (domain && TYPE_CANONICAL (domain) != domain))
2952 tree unqualified_canon
2953 = build_array_type (TYPE_CANONICAL (element_type),
2954 domain? TYPE_CANONICAL (domain)
2955 : NULL_TREE);
2956 TYPE_CANONICAL (t)
2957 = c_build_qualified_type (unqualified_canon, type_quals);
2959 else
2960 TYPE_CANONICAL (t) = t;
2962 return t;
2965 /* A restrict-qualified pointer type must be a pointer to object or
2966 incomplete type. Note that the use of POINTER_TYPE_P also allows
2967 REFERENCE_TYPEs, which is appropriate for C++. */
2968 if ((type_quals & TYPE_QUAL_RESTRICT)
2969 && (!POINTER_TYPE_P (type)
2970 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2972 error ("invalid use of %<restrict%>");
2973 type_quals &= ~TYPE_QUAL_RESTRICT;
2976 return build_qualified_type (type, type_quals);
2979 /* Apply the TYPE_QUALS to the new DECL. */
2981 void
2982 c_apply_type_quals_to_decl (int type_quals, tree decl)
2984 tree type = TREE_TYPE (decl);
2986 if (type == error_mark_node)
2987 return;
2989 if (((type_quals & TYPE_QUAL_CONST)
2990 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2991 /* An object declared 'const' is only readonly after it is
2992 initialized. We don't have any way of expressing this currently,
2993 so we need to be conservative and unset TREE_READONLY for types
2994 with constructors. Otherwise aliasing code will ignore stores in
2995 an inline constructor. */
2996 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2997 TREE_READONLY (decl) = 1;
2998 if (type_quals & TYPE_QUAL_VOLATILE)
3000 TREE_SIDE_EFFECTS (decl) = 1;
3001 TREE_THIS_VOLATILE (decl) = 1;
3003 if (type_quals & TYPE_QUAL_RESTRICT)
3005 while (type && TREE_CODE (type) == ARRAY_TYPE)
3006 /* Allow 'restrict' on arrays of pointers.
3007 FIXME currently we just ignore it. */
3008 type = TREE_TYPE (type);
3009 if (!type
3010 || !POINTER_TYPE_P (type)
3011 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
3012 error ("invalid use of %<restrict%>");
3013 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
3014 /* Indicate we need to make a unique alias set for this pointer.
3015 We can't do it here because it might be pointing to an
3016 incomplete type. */
3017 DECL_POINTER_ALIAS_SET (decl) = -2;
3021 /* Hash function for the problem of multiple type definitions in
3022 different files. This must hash all types that will compare
3023 equal via comptypes to the same value. In practice it hashes
3024 on some of the simple stuff and leaves the details to comptypes. */
3026 static hashval_t
3027 c_type_hash (const void *p)
3029 int i = 0;
3030 int shift, size;
3031 tree t = (tree) p;
3032 tree t2;
3033 switch (TREE_CODE (t))
3035 /* For pointers, hash on pointee type plus some swizzling. */
3036 case POINTER_TYPE:
3037 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
3038 /* Hash on number of elements and total size. */
3039 case ENUMERAL_TYPE:
3040 shift = 3;
3041 t2 = TYPE_VALUES (t);
3042 break;
3043 case RECORD_TYPE:
3044 shift = 0;
3045 t2 = TYPE_FIELDS (t);
3046 break;
3047 case QUAL_UNION_TYPE:
3048 shift = 1;
3049 t2 = TYPE_FIELDS (t);
3050 break;
3051 case UNION_TYPE:
3052 shift = 2;
3053 t2 = TYPE_FIELDS (t);
3054 break;
3055 default:
3056 gcc_unreachable ();
3058 for (; t2; t2 = TREE_CHAIN (t2))
3059 i++;
3060 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
3061 return ((size << 24) | (i << shift));
3064 static GTY((param_is (union tree_node))) htab_t type_hash_table;
3066 /* Return the typed-based alias set for T, which may be an expression
3067 or a type. Return -1 if we don't do anything special. */
3069 HOST_WIDE_INT
3070 c_common_get_alias_set (tree t)
3072 tree u;
3073 PTR *slot;
3075 /* Permit type-punning when accessing a union, provided the access
3076 is directly through the union. For example, this code does not
3077 permit taking the address of a union member and then storing
3078 through it. Even the type-punning allowed here is a GCC
3079 extension, albeit a common and useful one; the C standard says
3080 that such accesses have implementation-defined behavior. */
3081 for (u = t;
3082 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3083 u = TREE_OPERAND (u, 0))
3084 if (TREE_CODE (u) == COMPONENT_REF
3085 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3086 return 0;
3088 /* That's all the expressions we handle specially. */
3089 if (!TYPE_P (t))
3090 return -1;
3092 /* The C standard guarantees that any object may be accessed via an
3093 lvalue that has character type. */
3094 if (t == char_type_node
3095 || t == signed_char_type_node
3096 || t == unsigned_char_type_node)
3097 return 0;
3099 /* If it has the may_alias attribute, it can alias anything. */
3100 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
3101 return 0;
3103 /* The C standard specifically allows aliasing between signed and
3104 unsigned variants of the same type. We treat the signed
3105 variant as canonical. */
3106 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3108 tree t1 = c_common_signed_type (t);
3110 /* t1 == t can happen for boolean nodes which are always unsigned. */
3111 if (t1 != t)
3112 return get_alias_set (t1);
3114 else if (POINTER_TYPE_P (t))
3116 tree t1;
3118 /* Unfortunately, there is no canonical form of a pointer type.
3119 In particular, if we have `typedef int I', then `int *', and
3120 `I *' are different types. So, we have to pick a canonical
3121 representative. We do this below.
3123 Technically, this approach is actually more conservative that
3124 it needs to be. In particular, `const int *' and `int *'
3125 should be in different alias sets, according to the C and C++
3126 standard, since their types are not the same, and so,
3127 technically, an `int **' and `const int **' cannot point at
3128 the same thing.
3130 But, the standard is wrong. In particular, this code is
3131 legal C++:
3133 int *ip;
3134 int **ipp = &ip;
3135 const int* const* cipp = ipp;
3137 And, it doesn't make sense for that to be legal unless you
3138 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3139 the pointed-to types. This issue has been reported to the
3140 C++ committee. */
3141 t1 = build_type_no_quals (t);
3142 if (t1 != t)
3143 return get_alias_set (t1);
3146 /* Handle the case of multiple type nodes referring to "the same" type,
3147 which occurs with IMA. These share an alias set. FIXME: Currently only
3148 C90 is handled. (In C99 type compatibility is not transitive, which
3149 complicates things mightily. The alias set splay trees can theoretically
3150 represent this, but insertion is tricky when you consider all the
3151 different orders things might arrive in.) */
3153 if (c_language != clk_c || flag_isoc99)
3154 return -1;
3156 /* Save time if there's only one input file. */
3157 if (num_in_fnames == 1)
3158 return -1;
3160 /* Pointers need special handling if they point to any type that
3161 needs special handling (below). */
3162 if (TREE_CODE (t) == POINTER_TYPE)
3164 tree t2;
3165 /* Find bottom type under any nested POINTERs. */
3166 for (t2 = TREE_TYPE (t);
3167 TREE_CODE (t2) == POINTER_TYPE;
3168 t2 = TREE_TYPE (t2))
3170 if (TREE_CODE (t2) != RECORD_TYPE
3171 && TREE_CODE (t2) != ENUMERAL_TYPE
3172 && TREE_CODE (t2) != QUAL_UNION_TYPE
3173 && TREE_CODE (t2) != UNION_TYPE)
3174 return -1;
3175 if (TYPE_SIZE (t2) == 0)
3176 return -1;
3178 /* These are the only cases that need special handling. */
3179 if (TREE_CODE (t) != RECORD_TYPE
3180 && TREE_CODE (t) != ENUMERAL_TYPE
3181 && TREE_CODE (t) != QUAL_UNION_TYPE
3182 && TREE_CODE (t) != UNION_TYPE
3183 && TREE_CODE (t) != POINTER_TYPE)
3184 return -1;
3185 /* Undefined? */
3186 if (TYPE_SIZE (t) == 0)
3187 return -1;
3189 /* Look up t in hash table. Only one of the compatible types within each
3190 alias set is recorded in the table. */
3191 if (!type_hash_table)
3192 type_hash_table = htab_create_ggc (1021, c_type_hash,
3193 (htab_eq) lang_hooks.types_compatible_p,
3194 NULL);
3195 slot = htab_find_slot (type_hash_table, t, INSERT);
3196 if (*slot != NULL)
3198 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3199 return TYPE_ALIAS_SET ((tree)*slot);
3201 else
3202 /* Our caller will assign and record (in t) a new alias set; all we need
3203 to do is remember t in the hash table. */
3204 *slot = t;
3206 return -1;
3209 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3210 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3211 flag controls whether we should diagnose possibly ill-formed
3212 constructs or not. */
3214 tree
3215 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3217 const char *op_name;
3218 tree value = NULL;
3219 enum tree_code type_code = TREE_CODE (type);
3221 op_name = is_sizeof ? "sizeof" : "__alignof__";
3223 if (type_code == FUNCTION_TYPE)
3225 if (is_sizeof)
3227 if (complain && (pedantic || warn_pointer_arith))
3228 pedwarn ("invalid application of %<sizeof%> to a function type");
3229 value = size_one_node;
3231 else
3232 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3234 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3236 if (type_code == VOID_TYPE
3237 && complain && (pedantic || warn_pointer_arith))
3238 pedwarn ("invalid application of %qs to a void type", op_name);
3239 value = size_one_node;
3241 else if (!COMPLETE_TYPE_P (type))
3243 if (complain)
3244 error ("invalid application of %qs to incomplete type %qT ",
3245 op_name, type);
3246 value = size_zero_node;
3248 else
3250 if (is_sizeof)
3251 /* Convert in case a char is more than one unit. */
3252 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3253 size_int (TYPE_PRECISION (char_type_node)
3254 / BITS_PER_UNIT));
3255 else
3256 value = size_int (TYPE_ALIGN_UNIT (type));
3259 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3260 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3261 never happen. However, this node should really have type
3262 `size_t', which is just a typedef for an ordinary integer type. */
3263 value = fold_convert (size_type_node, value);
3264 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3266 return value;
3269 /* Implement the __alignof keyword: Return the minimum required
3270 alignment of EXPR, measured in bytes. For VAR_DECL's and
3271 FIELD_DECL's return DECL_ALIGN (which can be set from an
3272 "aligned" __attribute__ specification). */
3274 tree
3275 c_alignof_expr (tree expr)
3277 tree t;
3279 if (TREE_CODE (expr) == VAR_DECL)
3280 t = size_int (DECL_ALIGN_UNIT (expr));
3282 else if (TREE_CODE (expr) == COMPONENT_REF
3283 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3285 error ("%<__alignof%> applied to a bit-field");
3286 t = size_one_node;
3288 else if (TREE_CODE (expr) == COMPONENT_REF
3289 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3290 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3292 else if (TREE_CODE (expr) == INDIRECT_REF)
3294 tree t = TREE_OPERAND (expr, 0);
3295 tree best = t;
3296 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3298 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3299 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3301 int thisalign;
3303 t = TREE_OPERAND (t, 0);
3304 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3305 if (thisalign > bestalign)
3306 best = t, bestalign = thisalign;
3308 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3310 else
3311 return c_alignof (TREE_TYPE (expr));
3313 return fold_convert (size_type_node, t);
3316 /* Handle C and C++ default attributes. */
3318 enum built_in_attribute
3320 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3321 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3322 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3323 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3324 #include "builtin-attrs.def"
3325 #undef DEF_ATTR_NULL_TREE
3326 #undef DEF_ATTR_INT
3327 #undef DEF_ATTR_IDENT
3328 #undef DEF_ATTR_TREE_LIST
3329 ATTR_LAST
3332 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3334 static void c_init_attributes (void);
3336 enum c_builtin_type
3338 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3339 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3340 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3341 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3342 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3343 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3344 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3345 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3346 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3347 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3348 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3349 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3350 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3351 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3352 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3353 NAME,
3354 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3355 #include "builtin-types.def"
3356 #undef DEF_PRIMITIVE_TYPE
3357 #undef DEF_FUNCTION_TYPE_0
3358 #undef DEF_FUNCTION_TYPE_1
3359 #undef DEF_FUNCTION_TYPE_2
3360 #undef DEF_FUNCTION_TYPE_3
3361 #undef DEF_FUNCTION_TYPE_4
3362 #undef DEF_FUNCTION_TYPE_5
3363 #undef DEF_FUNCTION_TYPE_6
3364 #undef DEF_FUNCTION_TYPE_7
3365 #undef DEF_FUNCTION_TYPE_VAR_0
3366 #undef DEF_FUNCTION_TYPE_VAR_1
3367 #undef DEF_FUNCTION_TYPE_VAR_2
3368 #undef DEF_FUNCTION_TYPE_VAR_3
3369 #undef DEF_FUNCTION_TYPE_VAR_4
3370 #undef DEF_FUNCTION_TYPE_VAR_5
3371 #undef DEF_POINTER_TYPE
3372 BT_LAST
3375 typedef enum c_builtin_type builtin_type;
3377 /* A temporary array for c_common_nodes_and_builtins. Used in
3378 communication with def_fn_type. */
3379 static tree builtin_types[(int) BT_LAST + 1];
3381 /* A helper function for c_common_nodes_and_builtins. Build function type
3382 for DEF with return type RET and N arguments. If VAR is true, then the
3383 function should be variadic after those N arguments.
3385 Takes special care not to ICE if any of the types involved are
3386 error_mark_node, which indicates that said type is not in fact available
3387 (see builtin_type_for_size). In which case the function type as a whole
3388 should be error_mark_node. */
3390 static void
3391 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3393 tree args = NULL, t;
3394 va_list list;
3395 int i;
3397 va_start (list, n);
3398 for (i = 0; i < n; ++i)
3400 builtin_type a = va_arg (list, builtin_type);
3401 t = builtin_types[a];
3402 if (t == error_mark_node)
3403 goto egress;
3404 args = tree_cons (NULL_TREE, t, args);
3406 va_end (list);
3408 args = nreverse (args);
3409 if (!var)
3410 args = chainon (args, void_list_node);
3412 t = builtin_types[ret];
3413 if (t == error_mark_node)
3414 goto egress;
3415 t = build_function_type (t, args);
3417 egress:
3418 builtin_types[def] = t;
3421 /* Build builtin functions common to both C and C++ language
3422 frontends. */
3424 static void
3425 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3427 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3428 builtin_types[ENUM] = VALUE;
3429 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3430 def_fn_type (ENUM, RETURN, 0, 0);
3431 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3432 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3433 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3434 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3435 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3436 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3437 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3438 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3439 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3440 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3441 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3442 ARG6) \
3443 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3444 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3445 ARG6, ARG7) \
3446 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3447 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3448 def_fn_type (ENUM, RETURN, 1, 0);
3449 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3450 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3451 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3452 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3453 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3454 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3455 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3456 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3457 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3458 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3459 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3460 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3462 #include "builtin-types.def"
3464 #undef DEF_PRIMITIVE_TYPE
3465 #undef DEF_FUNCTION_TYPE_1
3466 #undef DEF_FUNCTION_TYPE_2
3467 #undef DEF_FUNCTION_TYPE_3
3468 #undef DEF_FUNCTION_TYPE_4
3469 #undef DEF_FUNCTION_TYPE_5
3470 #undef DEF_FUNCTION_TYPE_6
3471 #undef DEF_FUNCTION_TYPE_VAR_0
3472 #undef DEF_FUNCTION_TYPE_VAR_1
3473 #undef DEF_FUNCTION_TYPE_VAR_2
3474 #undef DEF_FUNCTION_TYPE_VAR_3
3475 #undef DEF_FUNCTION_TYPE_VAR_4
3476 #undef DEF_FUNCTION_TYPE_VAR_5
3477 #undef DEF_POINTER_TYPE
3478 builtin_types[(int) BT_LAST] = NULL_TREE;
3480 c_init_attributes ();
3482 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3483 NONANSI_P, ATTRS, IMPLICIT, COND) \
3484 if (NAME && COND) \
3485 def_builtin_1 (ENUM, NAME, CLASS, \
3486 builtin_types[(int) TYPE], \
3487 builtin_types[(int) LIBTYPE], \
3488 BOTH_P, FALLBACK_P, NONANSI_P, \
3489 built_in_attributes[(int) ATTRS], IMPLICIT);
3490 #include "builtins.def"
3491 #undef DEF_BUILTIN
3493 build_common_builtin_nodes ();
3495 targetm.init_builtins ();
3496 if (flag_mudflap)
3497 mudflap_init ();
3500 /* Build tree nodes and builtin functions common to both C and C++ language
3501 frontends. */
3503 void
3504 c_common_nodes_and_builtins (void)
3506 int wchar_type_size;
3507 tree array_domain_type;
3508 tree va_list_ref_type_node;
3509 tree va_list_arg_type_node;
3511 /* Define `int' and `char' first so that dbx will output them first. */
3512 record_builtin_type (RID_INT, NULL, integer_type_node);
3513 record_builtin_type (RID_CHAR, "char", char_type_node);
3515 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3516 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3517 but not C. Are the conditionals here needed? */
3518 if (c_dialect_cxx ())
3519 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3520 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3521 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3522 record_builtin_type (RID_MAX, "long unsigned int",
3523 long_unsigned_type_node);
3524 if (c_dialect_cxx ())
3525 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3526 record_builtin_type (RID_MAX, "long long int",
3527 long_long_integer_type_node);
3528 record_builtin_type (RID_MAX, "long long unsigned int",
3529 long_long_unsigned_type_node);
3530 if (c_dialect_cxx ())
3531 record_builtin_type (RID_MAX, "long long unsigned",
3532 long_long_unsigned_type_node);
3533 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3534 record_builtin_type (RID_MAX, "short unsigned int",
3535 short_unsigned_type_node);
3536 if (c_dialect_cxx ())
3537 record_builtin_type (RID_MAX, "unsigned short",
3538 short_unsigned_type_node);
3540 /* Define both `signed char' and `unsigned char'. */
3541 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3542 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3544 /* These are types that c_common_type_for_size and
3545 c_common_type_for_mode use. */
3546 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3547 intQI_type_node));
3548 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3549 intHI_type_node));
3550 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3551 intSI_type_node));
3552 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3553 intDI_type_node));
3554 #if HOST_BITS_PER_WIDE_INT >= 64
3555 if (targetm.scalar_mode_supported_p (TImode))
3556 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3557 get_identifier ("__int128_t"),
3558 intTI_type_node));
3559 #endif
3560 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3561 unsigned_intQI_type_node));
3562 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3563 unsigned_intHI_type_node));
3564 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3565 unsigned_intSI_type_node));
3566 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3567 unsigned_intDI_type_node));
3568 #if HOST_BITS_PER_WIDE_INT >= 64
3569 if (targetm.scalar_mode_supported_p (TImode))
3570 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3571 get_identifier ("__uint128_t"),
3572 unsigned_intTI_type_node));
3573 #endif
3575 /* Create the widest literal types. */
3576 widest_integer_literal_type_node
3577 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3578 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3579 widest_integer_literal_type_node));
3581 widest_unsigned_literal_type_node
3582 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3583 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3584 widest_unsigned_literal_type_node));
3586 /* `unsigned long' is the standard type for sizeof.
3587 Note that stddef.h uses `unsigned long',
3588 and this must agree, even if long and int are the same size. */
3589 size_type_node =
3590 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3591 signed_size_type_node = c_common_signed_type (size_type_node);
3592 set_sizetype (size_type_node);
3594 pid_type_node =
3595 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3597 build_common_tree_nodes_2 (flag_short_double);
3599 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3600 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3601 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3603 /* Only supported decimal floating point extension if the target
3604 actually supports underlying modes. */
3605 if (targetm.scalar_mode_supported_p (SDmode)
3606 && targetm.scalar_mode_supported_p (DDmode)
3607 && targetm.scalar_mode_supported_p (TDmode))
3609 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3610 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3611 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3614 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3615 get_identifier ("complex int"),
3616 complex_integer_type_node));
3617 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3618 get_identifier ("complex float"),
3619 complex_float_type_node));
3620 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3621 get_identifier ("complex double"),
3622 complex_double_type_node));
3623 lang_hooks.decls.pushdecl
3624 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3625 complex_long_double_type_node));
3627 if (c_dialect_cxx ())
3628 /* For C++, make fileptr_type_node a distinct void * type until
3629 FILE type is defined. */
3630 fileptr_type_node = build_variant_type_copy (ptr_type_node);
3632 record_builtin_type (RID_VOID, NULL, void_type_node);
3634 /* Set the TYPE_NAME for any variants that were built before
3635 record_builtin_type gave names to the built-in types. */
3637 tree void_name = TYPE_NAME (void_type_node);
3638 TYPE_NAME (void_type_node) = NULL_TREE;
3639 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3640 = void_name;
3641 TYPE_NAME (void_type_node) = void_name;
3644 /* This node must not be shared. */
3645 void_zero_node = make_node (INTEGER_CST);
3646 TREE_TYPE (void_zero_node) = void_type_node;
3648 void_list_node = build_void_list_node ();
3650 /* Make a type to be the domain of a few array types
3651 whose domains don't really matter.
3652 200 is small enough that it always fits in size_t
3653 and large enough that it can hold most function names for the
3654 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3655 array_domain_type = build_index_type (size_int (200));
3657 /* Make a type for arrays of characters.
3658 With luck nothing will ever really depend on the length of this
3659 array type. */
3660 char_array_type_node
3661 = build_array_type (char_type_node, array_domain_type);
3663 /* Likewise for arrays of ints. */
3664 int_array_type_node
3665 = build_array_type (integer_type_node, array_domain_type);
3667 string_type_node = build_pointer_type (char_type_node);
3668 const_string_type_node
3669 = build_pointer_type (build_qualified_type
3670 (char_type_node, TYPE_QUAL_CONST));
3672 /* This is special for C++ so functions can be overloaded. */
3673 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3674 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3675 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3676 if (c_dialect_cxx ())
3678 if (TYPE_UNSIGNED (wchar_type_node))
3679 wchar_type_node = make_unsigned_type (wchar_type_size);
3680 else
3681 wchar_type_node = make_signed_type (wchar_type_size);
3682 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3684 else
3686 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3687 unsigned_wchar_type_node = unsigned_type_for (wchar_type_node);
3690 /* This is for wide string constants. */
3691 wchar_array_type_node
3692 = build_array_type (wchar_type_node, array_domain_type);
3694 wint_type_node =
3695 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3697 intmax_type_node =
3698 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3699 uintmax_type_node =
3700 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3702 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3703 ptrdiff_type_node
3704 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3705 unsigned_ptrdiff_type_node = unsigned_type_for (ptrdiff_type_node);
3707 lang_hooks.decls.pushdecl
3708 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3709 va_list_type_node));
3711 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3713 va_list_arg_type_node = va_list_ref_type_node =
3714 build_pointer_type (TREE_TYPE (va_list_type_node));
3716 else
3718 va_list_arg_type_node = va_list_type_node;
3719 va_list_ref_type_node = build_reference_type (va_list_type_node);
3722 if (!flag_preprocess_only)
3723 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
3725 main_identifier_node = get_identifier ("main");
3727 /* Create the built-in __null node. It is important that this is
3728 not shared. */
3729 null_node = make_node (INTEGER_CST);
3730 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3732 /* Since builtin_types isn't gc'ed, don't export these nodes. */
3733 memset (builtin_types, 0, sizeof (builtin_types));
3736 /* Look up the function in built_in_decls that corresponds to DECL
3737 and set ASMSPEC as its user assembler name. DECL must be a
3738 function decl that declares a builtin. */
3740 void
3741 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3743 tree builtin;
3744 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3745 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3746 && asmspec != 0);
3748 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3749 set_user_assembler_name (builtin, asmspec);
3750 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3751 init_block_move_fn (asmspec);
3752 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3753 init_block_clear_fn (asmspec);
3756 /* The number of named compound-literals generated thus far. */
3757 static GTY(()) int compound_literal_number;
3759 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
3761 void
3762 set_compound_literal_name (tree decl)
3764 char *name;
3765 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3766 compound_literal_number);
3767 compound_literal_number++;
3768 DECL_NAME (decl) = get_identifier (name);
3771 tree
3772 build_va_arg (tree expr, tree type)
3774 return build1 (VA_ARG_EXPR, type, expr);
3778 /* Linked list of disabled built-in functions. */
3780 typedef struct disabled_builtin
3782 const char *name;
3783 struct disabled_builtin *next;
3784 } disabled_builtin;
3785 static disabled_builtin *disabled_builtins = NULL;
3787 static bool builtin_function_disabled_p (const char *);
3789 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3790 begins with "__builtin_", give an error. */
3792 void
3793 disable_builtin_function (const char *name)
3795 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3796 error ("cannot disable built-in function %qs", name);
3797 else
3799 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3800 new_disabled_builtin->name = name;
3801 new_disabled_builtin->next = disabled_builtins;
3802 disabled_builtins = new_disabled_builtin;
3807 /* Return true if the built-in function NAME has been disabled, false
3808 otherwise. */
3810 static bool
3811 builtin_function_disabled_p (const char *name)
3813 disabled_builtin *p;
3814 for (p = disabled_builtins; p != NULL; p = p->next)
3816 if (strcmp (name, p->name) == 0)
3817 return true;
3819 return false;
3823 /* Worker for DEF_BUILTIN.
3824 Possibly define a builtin function with one or two names.
3825 Does not declare a non-__builtin_ function if flag_no_builtin, or if
3826 nonansi_p and flag_no_nonansi_builtin. */
3828 static void
3829 def_builtin_1 (enum built_in_function fncode,
3830 const char *name,
3831 enum built_in_class fnclass,
3832 tree fntype, tree libtype,
3833 bool both_p, bool fallback_p, bool nonansi_p,
3834 tree fnattrs, bool implicit_p)
3836 tree decl;
3837 const char *libname;
3839 if (fntype == error_mark_node)
3840 return;
3842 gcc_assert ((!both_p && !fallback_p)
3843 || !strncmp (name, "__builtin_",
3844 strlen ("__builtin_")));
3846 libname = name + strlen ("__builtin_");
3847 decl = add_builtin_function (name, fntype, fncode, fnclass,
3848 (fallback_p ? libname : NULL),
3849 fnattrs);
3850 if (both_p
3851 && !flag_no_builtin && !builtin_function_disabled_p (libname)
3852 && !(nonansi_p && flag_no_nonansi_builtin))
3853 add_builtin_function (libname, libtype, fncode, fnclass,
3854 NULL, fnattrs);
3856 built_in_decls[(int) fncode] = decl;
3857 if (implicit_p)
3858 implicit_built_in_decls[(int) fncode] = decl;
3861 /* Nonzero if the type T promotes to int. This is (nearly) the
3862 integral promotions defined in ISO C99 6.3.1.1/2. */
3864 bool
3865 c_promoting_integer_type_p (tree t)
3867 switch (TREE_CODE (t))
3869 case INTEGER_TYPE:
3870 return (TYPE_MAIN_VARIANT (t) == char_type_node
3871 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3872 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3873 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3874 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3875 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3877 case ENUMERAL_TYPE:
3878 /* ??? Technically all enumerations not larger than an int
3879 promote to an int. But this is used along code paths
3880 that only want to notice a size change. */
3881 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3883 case BOOLEAN_TYPE:
3884 return 1;
3886 default:
3887 return 0;
3891 /* Return 1 if PARMS specifies a fixed number of parameters
3892 and none of their types is affected by default promotions. */
3895 self_promoting_args_p (tree parms)
3897 tree t;
3898 for (t = parms; t; t = TREE_CHAIN (t))
3900 tree type = TREE_VALUE (t);
3902 if (type == error_mark_node)
3903 continue;
3905 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3906 return 0;
3908 if (type == 0)
3909 return 0;
3911 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3912 return 0;
3914 if (c_promoting_integer_type_p (type))
3915 return 0;
3917 return 1;
3920 /* Recursively examines the array elements of TYPE, until a non-array
3921 element type is found. */
3923 tree
3924 strip_array_types (tree type)
3926 while (TREE_CODE (type) == ARRAY_TYPE)
3927 type = TREE_TYPE (type);
3929 return type;
3932 /* Recursively remove any '*' or '&' operator from TYPE. */
3933 tree
3934 strip_pointer_operator (tree t)
3936 while (POINTER_TYPE_P (t))
3937 t = TREE_TYPE (t);
3938 return t;
3941 /* Recursively remove pointer or array type from TYPE. */
3942 tree
3943 strip_pointer_or_array_types (tree t)
3945 while (TREE_CODE (t) == ARRAY_TYPE || POINTER_TYPE_P (t))
3946 t = TREE_TYPE (t);
3947 return t;
3950 /* Used to compare case labels. K1 and K2 are actually tree nodes
3951 representing case labels, or NULL_TREE for a `default' label.
3952 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3953 K2, and 0 if K1 and K2 are equal. */
3956 case_compare (splay_tree_key k1, splay_tree_key k2)
3958 /* Consider a NULL key (such as arises with a `default' label) to be
3959 smaller than anything else. */
3960 if (!k1)
3961 return k2 ? -1 : 0;
3962 else if (!k2)
3963 return k1 ? 1 : 0;
3965 return tree_int_cst_compare ((tree) k1, (tree) k2);
3968 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3969 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3970 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3971 case label was declared using the usual C/C++ syntax, rather than
3972 the GNU case range extension. CASES is a tree containing all the
3973 case ranges processed so far; COND is the condition for the
3974 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3975 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
3977 tree
3978 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3979 tree low_value, tree high_value)
3981 tree type;
3982 tree label;
3983 tree case_label;
3984 splay_tree_node node;
3986 /* Create the LABEL_DECL itself. */
3987 label = create_artificial_label ();
3989 /* If there was an error processing the switch condition, bail now
3990 before we get more confused. */
3991 if (!cond || cond == error_mark_node)
3992 goto error_out;
3994 if ((low_value && TREE_TYPE (low_value)
3995 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3996 || (high_value && TREE_TYPE (high_value)
3997 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3999 error ("pointers are not permitted as case values");
4000 goto error_out;
4003 /* Case ranges are a GNU extension. */
4004 if (high_value && pedantic)
4005 pedwarn ("range expressions in switch statements are non-standard");
4007 type = TREE_TYPE (cond);
4008 if (low_value)
4010 low_value = check_case_value (low_value);
4011 low_value = convert_and_check (type, low_value);
4012 if (low_value == error_mark_node)
4013 goto error_out;
4015 if (high_value)
4017 high_value = check_case_value (high_value);
4018 high_value = convert_and_check (type, high_value);
4019 if (high_value == error_mark_node)
4020 goto error_out;
4023 if (low_value && high_value)
4025 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
4026 really a case range, even though it was written that way.
4027 Remove the HIGH_VALUE to simplify later processing. */
4028 if (tree_int_cst_equal (low_value, high_value))
4029 high_value = NULL_TREE;
4030 else if (!tree_int_cst_lt (low_value, high_value))
4031 warning (0, "empty range specified");
4034 /* See if the case is in range of the type of the original testing
4035 expression. If both low_value and high_value are out of range,
4036 don't insert the case label and return NULL_TREE. */
4037 if (low_value
4038 && !check_case_bounds (type, orig_type,
4039 &low_value, high_value ? &high_value : NULL))
4040 return NULL_TREE;
4042 /* Look up the LOW_VALUE in the table of case labels we already
4043 have. */
4044 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
4045 /* If there was not an exact match, check for overlapping ranges.
4046 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
4047 that's a `default' label and the only overlap is an exact match. */
4048 if (!node && (low_value || high_value))
4050 splay_tree_node low_bound;
4051 splay_tree_node high_bound;
4053 /* Even though there wasn't an exact match, there might be an
4054 overlap between this case range and another case range.
4055 Since we've (inductively) not allowed any overlapping case
4056 ranges, we simply need to find the greatest low case label
4057 that is smaller that LOW_VALUE, and the smallest low case
4058 label that is greater than LOW_VALUE. If there is an overlap
4059 it will occur in one of these two ranges. */
4060 low_bound = splay_tree_predecessor (cases,
4061 (splay_tree_key) low_value);
4062 high_bound = splay_tree_successor (cases,
4063 (splay_tree_key) low_value);
4065 /* Check to see if the LOW_BOUND overlaps. It is smaller than
4066 the LOW_VALUE, so there is no need to check unless the
4067 LOW_BOUND is in fact itself a case range. */
4068 if (low_bound
4069 && CASE_HIGH ((tree) low_bound->value)
4070 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
4071 low_value) >= 0)
4072 node = low_bound;
4073 /* Check to see if the HIGH_BOUND overlaps. The low end of that
4074 range is bigger than the low end of the current range, so we
4075 are only interested if the current range is a real range, and
4076 not an ordinary case label. */
4077 else if (high_bound
4078 && high_value
4079 && (tree_int_cst_compare ((tree) high_bound->key,
4080 high_value)
4081 <= 0))
4082 node = high_bound;
4084 /* If there was an overlap, issue an error. */
4085 if (node)
4087 tree duplicate = CASE_LABEL ((tree) node->value);
4089 if (high_value)
4091 error ("duplicate (or overlapping) case value");
4092 error ("%Jthis is the first entry overlapping that value", duplicate);
4094 else if (low_value)
4096 error ("duplicate case value") ;
4097 error ("%Jpreviously used here", duplicate);
4099 else
4101 error ("multiple default labels in one switch");
4102 error ("%Jthis is the first default label", duplicate);
4104 goto error_out;
4107 /* Add a CASE_LABEL to the statement-tree. */
4108 case_label = add_stmt (build_case_label (low_value, high_value, label));
4109 /* Register this case label in the splay tree. */
4110 splay_tree_insert (cases,
4111 (splay_tree_key) low_value,
4112 (splay_tree_value) case_label);
4114 return case_label;
4116 error_out:
4117 /* Add a label so that the back-end doesn't think that the beginning of
4118 the switch is unreachable. Note that we do not add a case label, as
4119 that just leads to duplicates and thence to failure later on. */
4120 if (!cases->root)
4122 tree t = create_artificial_label ();
4123 add_stmt (build_stmt (LABEL_EXPR, t));
4125 return error_mark_node;
4128 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
4129 Used to verify that case values match up with enumerator values. */
4131 static void
4132 match_case_to_enum_1 (tree key, tree type, tree label)
4134 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
4136 /* ??? Not working too hard to print the double-word value.
4137 Should perhaps be done with %lwd in the diagnostic routines? */
4138 if (TREE_INT_CST_HIGH (key) == 0)
4139 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
4140 TREE_INT_CST_LOW (key));
4141 else if (!TYPE_UNSIGNED (type)
4142 && TREE_INT_CST_HIGH (key) == -1
4143 && TREE_INT_CST_LOW (key) != 0)
4144 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
4145 -TREE_INT_CST_LOW (key));
4146 else
4147 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
4148 TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
4150 if (TYPE_NAME (type) == 0)
4151 warning (0, "%Jcase value %qs not in enumerated type",
4152 CASE_LABEL (label), buf);
4153 else
4154 warning (0, "%Jcase value %qs not in enumerated type %qT",
4155 CASE_LABEL (label), buf, type);
4158 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
4159 Used to verify that case values match up with enumerator values. */
4161 static int
4162 match_case_to_enum (splay_tree_node node, void *data)
4164 tree label = (tree) node->value;
4165 tree type = (tree) data;
4167 /* Skip default case. */
4168 if (!CASE_LOW (label))
4169 return 0;
4171 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
4172 when we did our enum->case scan. Reset our scratch bit after. */
4173 if (!CASE_LOW_SEEN (label))
4174 match_case_to_enum_1 (CASE_LOW (label), type, label);
4175 else
4176 CASE_LOW_SEEN (label) = 0;
4178 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
4179 not set, that means that CASE_HIGH did not appear when we did our
4180 enum->case scan. Reset our scratch bit after. */
4181 if (CASE_HIGH (label))
4183 if (!CASE_HIGH_SEEN (label))
4184 match_case_to_enum_1 (CASE_HIGH (label), type, label);
4185 else
4186 CASE_HIGH_SEEN (label) = 0;
4189 return 0;
4192 /* Handle -Wswitch*. Called from the front end after parsing the
4193 switch construct. */
4194 /* ??? Should probably be somewhere generic, since other languages
4195 besides C and C++ would want this. At the moment, however, C/C++
4196 are the only tree-ssa languages that support enumerations at all,
4197 so the point is moot. */
4199 void
4200 c_do_switch_warnings (splay_tree cases, location_t switch_location,
4201 tree type, tree cond)
4203 splay_tree_node default_node;
4204 splay_tree_node node;
4205 tree chain;
4207 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
4208 return;
4210 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
4211 if (!default_node)
4212 warning (OPT_Wswitch_default, "%Hswitch missing default case",
4213 &switch_location);
4215 /* From here on, we only care about about enumerated types. */
4216 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
4217 return;
4219 /* If the switch expression was an enumerated type, check that
4220 exactly all enumeration literals are covered by the cases.
4221 The check is made when -Wswitch was specified and there is no
4222 default case, or when -Wswitch-enum was specified. */
4224 if (!warn_switch_enum
4225 && !(warn_switch && !default_node))
4226 return;
4228 /* Clearing COND if it is not an integer constant simplifies
4229 the tests inside the loop below. */
4230 if (TREE_CODE (cond) != INTEGER_CST)
4231 cond = NULL_TREE;
4233 /* The time complexity here is O(N*lg(N)) worst case, but for the
4234 common case of monotonically increasing enumerators, it is
4235 O(N), since the nature of the splay tree will keep the next
4236 element adjacent to the root at all times. */
4238 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
4240 tree value = TREE_VALUE (chain);
4241 node = splay_tree_lookup (cases, (splay_tree_key) value);
4242 if (node)
4244 /* Mark the CASE_LOW part of the case entry as seen. */
4245 tree label = (tree) node->value;
4246 CASE_LOW_SEEN (label) = 1;
4247 continue;
4250 /* Even though there wasn't an exact match, there might be a
4251 case range which includes the enumator's value. */
4252 node = splay_tree_predecessor (cases, (splay_tree_key) value);
4253 if (node && CASE_HIGH ((tree) node->value))
4255 tree label = (tree) node->value;
4256 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
4257 if (cmp >= 0)
4259 /* If we match the upper bound exactly, mark the CASE_HIGH
4260 part of the case entry as seen. */
4261 if (cmp == 0)
4262 CASE_HIGH_SEEN (label) = 1;
4263 continue;
4267 /* We've now determined that this enumerated literal isn't
4268 handled by the case labels of the switch statement. */
4270 /* If the switch expression is a constant, we only really care
4271 about whether that constant is handled by the switch. */
4272 if (cond && tree_int_cst_compare (cond, value))
4273 continue;
4275 warning (0, "%Henumeration value %qE not handled in switch",
4276 &switch_location, TREE_PURPOSE (chain));
4279 /* Warn if there are case expressions that don't correspond to
4280 enumerators. This can occur since C and C++ don't enforce
4281 type-checking of assignments to enumeration variables.
4283 The time complexity here is now always O(N) worst case, since
4284 we should have marked both the lower bound and upper bound of
4285 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
4286 above. This scan also resets those fields. */
4287 splay_tree_foreach (cases, match_case_to_enum, type);
4290 /* Finish an expression taking the address of LABEL (an
4291 IDENTIFIER_NODE). Returns an expression for the address. */
4293 tree
4294 finish_label_address_expr (tree label)
4296 tree result;
4298 if (pedantic)
4299 pedwarn ("taking the address of a label is non-standard");
4301 if (label == error_mark_node)
4302 return error_mark_node;
4304 label = lookup_label (label);
4305 if (label == NULL_TREE)
4306 result = null_pointer_node;
4307 else
4309 TREE_USED (label) = 1;
4310 result = build1 (ADDR_EXPR, ptr_type_node, label);
4311 /* The current function in not necessarily uninlinable.
4312 Computed gotos are incompatible with inlining, but the value
4313 here could be used only in a diagnostic, for example. */
4316 return result;
4319 /* Hook used by expand_expr to expand language-specific tree codes. */
4320 /* The only things that should go here are bits needed to expand
4321 constant initializers. Everything else should be handled by the
4322 gimplification routines. */
4325 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
4326 int modifier /* Actually enum_modifier. */,
4327 rtx *alt_rtl)
4329 switch (TREE_CODE (exp))
4331 case COMPOUND_LITERAL_EXPR:
4333 /* Initialize the anonymous variable declared in the compound
4334 literal, then return the variable. */
4335 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4336 emit_local_var (decl);
4337 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
4340 default:
4341 gcc_unreachable ();
4346 /* Generate the RTL for the body of FNDECL. */
4348 void
4349 c_expand_body (tree fndecl)
4351 tree_rest_of_compilation (fndecl);
4354 /* Hook used by staticp to handle language-specific tree codes. */
4356 tree
4357 c_staticp (tree exp)
4359 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4360 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4361 ? exp : NULL);
4365 /* Given a boolean expression ARG, return a tree representing an increment
4366 or decrement (as indicated by CODE) of ARG. The front end must check for
4367 invalid cases (e.g., decrement in C++). */
4368 tree
4369 boolean_increment (enum tree_code code, tree arg)
4371 tree val;
4372 tree true_res = boolean_true_node;
4374 arg = stabilize_reference (arg);
4375 switch (code)
4377 case PREINCREMENT_EXPR:
4378 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4379 break;
4380 case POSTINCREMENT_EXPR:
4381 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4382 arg = save_expr (arg);
4383 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4384 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4385 break;
4386 case PREDECREMENT_EXPR:
4387 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4388 invert_truthvalue (arg));
4389 break;
4390 case POSTDECREMENT_EXPR:
4391 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4392 invert_truthvalue (arg));
4393 arg = save_expr (arg);
4394 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4395 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4396 break;
4397 default:
4398 gcc_unreachable ();
4400 TREE_SIDE_EFFECTS (val) = 1;
4401 return val;
4404 /* Built-in macros for stddef.h, that require macros defined in this
4405 file. */
4406 void
4407 c_stddef_cpp_builtins(void)
4409 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4410 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4411 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4412 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4413 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4414 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4417 static void
4418 c_init_attributes (void)
4420 /* Fill in the built_in_attributes array. */
4421 #define DEF_ATTR_NULL_TREE(ENUM) \
4422 built_in_attributes[(int) ENUM] = NULL_TREE;
4423 #define DEF_ATTR_INT(ENUM, VALUE) \
4424 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4425 #define DEF_ATTR_IDENT(ENUM, STRING) \
4426 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4427 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4428 built_in_attributes[(int) ENUM] \
4429 = tree_cons (built_in_attributes[(int) PURPOSE], \
4430 built_in_attributes[(int) VALUE], \
4431 built_in_attributes[(int) CHAIN]);
4432 #include "builtin-attrs.def"
4433 #undef DEF_ATTR_NULL_TREE
4434 #undef DEF_ATTR_INT
4435 #undef DEF_ATTR_IDENT
4436 #undef DEF_ATTR_TREE_LIST
4439 /* Attribute handlers common to C front ends. */
4441 /* Handle a "packed" attribute; arguments as in
4442 struct attribute_spec.handler. */
4444 static tree
4445 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4446 int flags, bool *no_add_attrs)
4448 if (TYPE_P (*node))
4450 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4451 *node = build_variant_type_copy (*node);
4452 TYPE_PACKED (*node) = 1;
4454 else if (TREE_CODE (*node) == FIELD_DECL)
4456 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4457 warning (OPT_Wattributes,
4458 "%qE attribute ignored for field of type %qT",
4459 name, TREE_TYPE (*node));
4460 else
4461 DECL_PACKED (*node) = 1;
4463 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4464 used for DECL_REGISTER. It wouldn't mean anything anyway.
4465 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4466 that changes what the typedef is typing. */
4467 else
4469 warning (OPT_Wattributes, "%qE attribute ignored", name);
4470 *no_add_attrs = true;
4473 return NULL_TREE;
4476 /* Handle a "nocommon" attribute; arguments as in
4477 struct attribute_spec.handler. */
4479 static tree
4480 handle_nocommon_attribute (tree *node, tree name,
4481 tree ARG_UNUSED (args),
4482 int ARG_UNUSED (flags), bool *no_add_attrs)
4484 if (TREE_CODE (*node) == VAR_DECL)
4485 DECL_COMMON (*node) = 0;
4486 else
4488 warning (OPT_Wattributes, "%qE attribute ignored", name);
4489 *no_add_attrs = true;
4492 return NULL_TREE;
4495 /* Handle a "common" attribute; arguments as in
4496 struct attribute_spec.handler. */
4498 static tree
4499 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4500 int ARG_UNUSED (flags), bool *no_add_attrs)
4502 if (TREE_CODE (*node) == VAR_DECL)
4503 DECL_COMMON (*node) = 1;
4504 else
4506 warning (OPT_Wattributes, "%qE attribute ignored", name);
4507 *no_add_attrs = true;
4510 return NULL_TREE;
4513 /* Handle a "noreturn" attribute; arguments as in
4514 struct attribute_spec.handler. */
4516 static tree
4517 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4518 int ARG_UNUSED (flags), bool *no_add_attrs)
4520 tree type = TREE_TYPE (*node);
4522 /* See FIXME comment in c_common_attribute_table. */
4523 if (TREE_CODE (*node) == FUNCTION_DECL)
4524 TREE_THIS_VOLATILE (*node) = 1;
4525 else if (TREE_CODE (type) == POINTER_TYPE
4526 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4527 TREE_TYPE (*node)
4528 = build_pointer_type
4529 (build_type_variant (TREE_TYPE (type),
4530 TYPE_READONLY (TREE_TYPE (type)), 1));
4531 else
4533 warning (OPT_Wattributes, "%qE attribute ignored", name);
4534 *no_add_attrs = true;
4537 return NULL_TREE;
4540 /* Handle a "hot" and attribute; arguments as in
4541 struct attribute_spec.handler. */
4543 static tree
4544 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4545 int ARG_UNUSED (flags), bool *no_add_attrs)
4547 if (TREE_CODE (*node) == FUNCTION_DECL)
4549 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
4551 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4552 name, "cold");
4553 *no_add_attrs = true;
4555 /* Do nothing else, just set the attribute. We'll get at
4556 it later with lookup_attribute. */
4558 else
4560 warning (OPT_Wattributes, "%qE attribute ignored", name);
4561 *no_add_attrs = true;
4564 return NULL_TREE;
4566 /* Handle a "cold" and attribute; arguments as in
4567 struct attribute_spec.handler. */
4569 static tree
4570 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4571 int ARG_UNUSED (flags), bool *no_add_attrs)
4573 if (TREE_CODE (*node) == FUNCTION_DECL)
4575 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
4577 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4578 name, "hot");
4579 *no_add_attrs = true;
4581 /* Do nothing else, just set the attribute. We'll get at
4582 it later with lookup_attribute. */
4584 else
4586 warning (OPT_Wattributes, "%qE attribute ignored", name);
4587 *no_add_attrs = true;
4590 return NULL_TREE;
4593 /* Handle a "noinline" attribute; arguments as in
4594 struct attribute_spec.handler. */
4596 static tree
4597 handle_noinline_attribute (tree *node, tree name,
4598 tree ARG_UNUSED (args),
4599 int ARG_UNUSED (flags), bool *no_add_attrs)
4601 if (TREE_CODE (*node) == FUNCTION_DECL)
4602 DECL_UNINLINABLE (*node) = 1;
4603 else
4605 warning (OPT_Wattributes, "%qE attribute ignored", name);
4606 *no_add_attrs = true;
4609 return NULL_TREE;
4612 /* Handle a "always_inline" attribute; arguments as in
4613 struct attribute_spec.handler. */
4615 static tree
4616 handle_always_inline_attribute (tree *node, tree name,
4617 tree ARG_UNUSED (args),
4618 int ARG_UNUSED (flags),
4619 bool *no_add_attrs)
4621 if (TREE_CODE (*node) == FUNCTION_DECL)
4623 /* Do nothing else, just set the attribute. We'll get at
4624 it later with lookup_attribute. */
4626 else
4628 warning (OPT_Wattributes, "%qE attribute ignored", name);
4629 *no_add_attrs = true;
4632 return NULL_TREE;
4635 /* Handle a "gnu_inline" attribute; arguments as in
4636 struct attribute_spec.handler. */
4638 static tree
4639 handle_gnu_inline_attribute (tree *node, tree name,
4640 tree ARG_UNUSED (args),
4641 int ARG_UNUSED (flags),
4642 bool *no_add_attrs)
4644 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4646 /* Do nothing else, just set the attribute. We'll get at
4647 it later with lookup_attribute. */
4649 else
4651 warning (OPT_Wattributes, "%qE attribute ignored", name);
4652 *no_add_attrs = true;
4655 return NULL_TREE;
4658 /* Handle a "flatten" attribute; arguments as in
4659 struct attribute_spec.handler. */
4661 static tree
4662 handle_flatten_attribute (tree *node, tree name,
4663 tree args ATTRIBUTE_UNUSED,
4664 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4666 if (TREE_CODE (*node) == FUNCTION_DECL)
4667 /* Do nothing else, just set the attribute. We'll get at
4668 it later with lookup_attribute. */
4670 else
4672 warning (OPT_Wattributes, "%qE attribute ignored", name);
4673 *no_add_attrs = true;
4676 return NULL_TREE;
4680 /* Handle a "used" attribute; arguments as in
4681 struct attribute_spec.handler. */
4683 static tree
4684 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4685 int ARG_UNUSED (flags), bool *no_add_attrs)
4687 tree node = *pnode;
4689 if (TREE_CODE (node) == FUNCTION_DECL
4690 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4692 TREE_USED (node) = 1;
4693 DECL_PRESERVE_P (node) = 1;
4695 else
4697 warning (OPT_Wattributes, "%qE attribute ignored", name);
4698 *no_add_attrs = true;
4701 return NULL_TREE;
4704 /* Handle a "unused" attribute; arguments as in
4705 struct attribute_spec.handler. */
4707 static tree
4708 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4709 int flags, bool *no_add_attrs)
4711 if (DECL_P (*node))
4713 tree decl = *node;
4715 if (TREE_CODE (decl) == PARM_DECL
4716 || TREE_CODE (decl) == VAR_DECL
4717 || TREE_CODE (decl) == FUNCTION_DECL
4718 || TREE_CODE (decl) == LABEL_DECL
4719 || TREE_CODE (decl) == TYPE_DECL)
4720 TREE_USED (decl) = 1;
4721 else
4723 warning (OPT_Wattributes, "%qE attribute ignored", name);
4724 *no_add_attrs = true;
4727 else
4729 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4730 *node = build_variant_type_copy (*node);
4731 TREE_USED (*node) = 1;
4734 return NULL_TREE;
4737 /* Handle a "externally_visible" attribute; arguments as in
4738 struct attribute_spec.handler. */
4740 static tree
4741 handle_externally_visible_attribute (tree *pnode, tree name,
4742 tree ARG_UNUSED (args),
4743 int ARG_UNUSED (flags),
4744 bool *no_add_attrs)
4746 tree node = *pnode;
4748 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
4750 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
4751 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
4753 warning (OPT_Wattributes,
4754 "%qE attribute have effect only on public objects", name);
4755 *no_add_attrs = true;
4758 else
4760 warning (OPT_Wattributes, "%qE attribute ignored", name);
4761 *no_add_attrs = true;
4764 return NULL_TREE;
4767 /* Handle a "const" attribute; arguments as in
4768 struct attribute_spec.handler. */
4770 static tree
4771 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4772 int ARG_UNUSED (flags), bool *no_add_attrs)
4774 tree type = TREE_TYPE (*node);
4776 /* See FIXME comment on noreturn in c_common_attribute_table. */
4777 if (TREE_CODE (*node) == FUNCTION_DECL)
4778 TREE_READONLY (*node) = 1;
4779 else if (TREE_CODE (type) == POINTER_TYPE
4780 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4781 TREE_TYPE (*node)
4782 = build_pointer_type
4783 (build_type_variant (TREE_TYPE (type), 1,
4784 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4785 else
4787 warning (OPT_Wattributes, "%qE attribute ignored", name);
4788 *no_add_attrs = true;
4791 return NULL_TREE;
4794 /* Handle a "transparent_union" attribute; arguments as in
4795 struct attribute_spec.handler. */
4797 static tree
4798 handle_transparent_union_attribute (tree *node, tree name,
4799 tree ARG_UNUSED (args), int flags,
4800 bool *no_add_attrs)
4802 tree type = NULL;
4804 *no_add_attrs = true;
4806 if (DECL_P (*node))
4808 if (TREE_CODE (*node) != TYPE_DECL)
4809 goto ignored;
4810 node = &TREE_TYPE (*node);
4811 type = *node;
4813 else if (TYPE_P (*node))
4814 type = *node;
4815 else
4816 goto ignored;
4818 if (TREE_CODE (type) == UNION_TYPE)
4820 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4821 the code in finish_struct. */
4822 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4824 if (TYPE_FIELDS (type) == NULL_TREE
4825 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4826 goto ignored;
4828 /* A type variant isn't good enough, since we don't a cast
4829 to such a type removed as a no-op. */
4830 *node = type = build_duplicate_type (type);
4833 TYPE_TRANSPARENT_UNION (type) = 1;
4834 return NULL_TREE;
4837 ignored:
4838 warning (OPT_Wattributes, "%qE attribute ignored", name);
4839 return NULL_TREE;
4842 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
4843 get the requested priority for a constructor or destructor,
4844 possibly issuing diagnostics for invalid or reserved
4845 priorities. */
4847 static priority_type
4848 get_priority (tree args, bool is_destructor)
4850 HOST_WIDE_INT pri;
4851 tree arg;
4853 if (!args)
4854 return DEFAULT_INIT_PRIORITY;
4856 if (!SUPPORTS_INIT_PRIORITY)
4858 if (is_destructor)
4859 error ("destructor priorities are not supported");
4860 else
4861 error ("constructor priorities are not supported");
4862 return DEFAULT_INIT_PRIORITY;
4865 arg = TREE_VALUE (args);
4866 if (!host_integerp (arg, /*pos=*/0)
4867 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4868 goto invalid;
4870 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
4871 if (pri < 0 || pri > MAX_INIT_PRIORITY)
4872 goto invalid;
4874 if (pri <= MAX_RESERVED_INIT_PRIORITY)
4876 if (is_destructor)
4877 warning (0,
4878 "destructor priorities from 0 to %d are reserved "
4879 "for the implementation",
4880 MAX_RESERVED_INIT_PRIORITY);
4881 else
4882 warning (0,
4883 "constructor priorities from 0 to %d are reserved "
4884 "for the implementation",
4885 MAX_RESERVED_INIT_PRIORITY);
4887 return pri;
4889 invalid:
4890 if (is_destructor)
4891 error ("destructor priorities must be integers from 0 to %d inclusive",
4892 MAX_INIT_PRIORITY);
4893 else
4894 error ("constructor priorities must be integers from 0 to %d inclusive",
4895 MAX_INIT_PRIORITY);
4896 return DEFAULT_INIT_PRIORITY;
4899 /* Handle a "constructor" attribute; arguments as in
4900 struct attribute_spec.handler. */
4902 static tree
4903 handle_constructor_attribute (tree *node, tree name, tree args,
4904 int ARG_UNUSED (flags),
4905 bool *no_add_attrs)
4907 tree decl = *node;
4908 tree type = TREE_TYPE (decl);
4910 if (TREE_CODE (decl) == FUNCTION_DECL
4911 && TREE_CODE (type) == FUNCTION_TYPE
4912 && decl_function_context (decl) == 0)
4914 priority_type priority;
4915 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4916 priority = get_priority (args, /*is_destructor=*/false);
4917 SET_DECL_INIT_PRIORITY (decl, priority);
4918 TREE_USED (decl) = 1;
4920 else
4922 warning (OPT_Wattributes, "%qE attribute ignored", name);
4923 *no_add_attrs = true;
4926 return NULL_TREE;
4929 /* Handle a "destructor" attribute; arguments as in
4930 struct attribute_spec.handler. */
4932 static tree
4933 handle_destructor_attribute (tree *node, tree name, tree args,
4934 int ARG_UNUSED (flags),
4935 bool *no_add_attrs)
4937 tree decl = *node;
4938 tree type = TREE_TYPE (decl);
4940 if (TREE_CODE (decl) == FUNCTION_DECL
4941 && TREE_CODE (type) == FUNCTION_TYPE
4942 && decl_function_context (decl) == 0)
4944 priority_type priority;
4945 DECL_STATIC_DESTRUCTOR (decl) = 1;
4946 priority = get_priority (args, /*is_destructor=*/true);
4947 SET_DECL_FINI_PRIORITY (decl, priority);
4948 TREE_USED (decl) = 1;
4950 else
4952 warning (OPT_Wattributes, "%qE attribute ignored", name);
4953 *no_add_attrs = true;
4956 return NULL_TREE;
4959 /* Handle a "mode" attribute; arguments as in
4960 struct attribute_spec.handler. */
4962 static tree
4963 handle_mode_attribute (tree *node, tree name, tree args,
4964 int ARG_UNUSED (flags), bool *no_add_attrs)
4966 tree type = *node;
4968 *no_add_attrs = true;
4970 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4971 warning (OPT_Wattributes, "%qE attribute ignored", name);
4972 else
4974 int j;
4975 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4976 int len = strlen (p);
4977 enum machine_mode mode = VOIDmode;
4978 tree typefm;
4979 bool valid_mode;
4981 if (len > 4 && p[0] == '_' && p[1] == '_'
4982 && p[len - 1] == '_' && p[len - 2] == '_')
4984 char *newp = (char *) alloca (len - 1);
4986 strcpy (newp, &p[2]);
4987 newp[len - 4] = '\0';
4988 p = newp;
4991 /* Change this type to have a type with the specified mode.
4992 First check for the special modes. */
4993 if (!strcmp (p, "byte"))
4994 mode = byte_mode;
4995 else if (!strcmp (p, "word"))
4996 mode = word_mode;
4997 else if (!strcmp (p, "pointer"))
4998 mode = ptr_mode;
4999 else
5000 for (j = 0; j < NUM_MACHINE_MODES; j++)
5001 if (!strcmp (p, GET_MODE_NAME (j)))
5003 mode = (enum machine_mode) j;
5004 break;
5007 if (mode == VOIDmode)
5009 error ("unknown machine mode %qs", p);
5010 return NULL_TREE;
5013 valid_mode = false;
5014 switch (GET_MODE_CLASS (mode))
5016 case MODE_INT:
5017 case MODE_PARTIAL_INT:
5018 case MODE_FLOAT:
5019 case MODE_DECIMAL_FLOAT:
5020 valid_mode = targetm.scalar_mode_supported_p (mode);
5021 break;
5023 case MODE_COMPLEX_INT:
5024 case MODE_COMPLEX_FLOAT:
5025 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
5026 break;
5028 case MODE_VECTOR_INT:
5029 case MODE_VECTOR_FLOAT:
5030 warning (OPT_Wattributes, "specifying vector types with "
5031 "__attribute__ ((mode)) is deprecated");
5032 warning (OPT_Wattributes,
5033 "use __attribute__ ((vector_size)) instead");
5034 valid_mode = vector_mode_valid_p (mode);
5035 break;
5037 default:
5038 break;
5040 if (!valid_mode)
5042 error ("unable to emulate %qs", p);
5043 return NULL_TREE;
5046 if (POINTER_TYPE_P (type))
5048 tree (*fn)(tree, enum machine_mode, bool);
5050 if (!targetm.valid_pointer_mode (mode))
5052 error ("invalid pointer mode %qs", p);
5053 return NULL_TREE;
5056 if (TREE_CODE (type) == POINTER_TYPE)
5057 fn = build_pointer_type_for_mode;
5058 else
5059 fn = build_reference_type_for_mode;
5060 typefm = fn (TREE_TYPE (type), mode, false);
5062 else
5063 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
5065 if (typefm == NULL_TREE)
5067 error ("no data type for mode %qs", p);
5068 return NULL_TREE;
5070 else if (TREE_CODE (type) == ENUMERAL_TYPE)
5072 /* For enumeral types, copy the precision from the integer
5073 type returned above. If not an INTEGER_TYPE, we can't use
5074 this mode for this type. */
5075 if (TREE_CODE (typefm) != INTEGER_TYPE)
5077 error ("cannot use mode %qs for enumeral types", p);
5078 return NULL_TREE;
5081 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
5083 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
5084 typefm = type;
5086 else
5088 /* We cannot build a type variant, as there's code that assumes
5089 that TYPE_MAIN_VARIANT has the same mode. This includes the
5090 debug generators. Instead, create a subrange type. This
5091 results in all of the enumeral values being emitted only once
5092 in the original, and the subtype gets them by reference. */
5093 if (TYPE_UNSIGNED (type))
5094 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
5095 else
5096 typefm = make_signed_type (TYPE_PRECISION (typefm));
5097 TREE_TYPE (typefm) = type;
5100 else if (VECTOR_MODE_P (mode)
5101 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
5102 : TREE_CODE (type) != TREE_CODE (typefm))
5104 error ("mode %qs applied to inappropriate type", p);
5105 return NULL_TREE;
5108 *node = typefm;
5111 return NULL_TREE;
5114 /* Handle a "section" attribute; arguments as in
5115 struct attribute_spec.handler. */
5117 static tree
5118 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5119 int ARG_UNUSED (flags), bool *no_add_attrs)
5121 tree decl = *node;
5123 if (targetm.have_named_sections)
5125 user_defined_section_attribute = true;
5127 if ((TREE_CODE (decl) == FUNCTION_DECL
5128 || TREE_CODE (decl) == VAR_DECL)
5129 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5131 if (TREE_CODE (decl) == VAR_DECL
5132 && current_function_decl != NULL_TREE
5133 && !TREE_STATIC (decl))
5135 error ("%Jsection attribute cannot be specified for "
5136 "local variables", decl);
5137 *no_add_attrs = true;
5140 /* The decl may have already been given a section attribute
5141 from a previous declaration. Ensure they match. */
5142 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5143 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5144 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5146 error ("section of %q+D conflicts with previous declaration",
5147 *node);
5148 *no_add_attrs = true;
5150 else
5151 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5153 else
5155 error ("section attribute not allowed for %q+D", *node);
5156 *no_add_attrs = true;
5159 else
5161 error ("%Jsection attributes are not supported for this target", *node);
5162 *no_add_attrs = true;
5165 return NULL_TREE;
5168 /* Handle a "aligned" attribute; arguments as in
5169 struct attribute_spec.handler. */
5171 static tree
5172 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5173 int flags, bool *no_add_attrs)
5175 tree decl = NULL_TREE;
5176 tree *type = NULL;
5177 int is_type = 0;
5178 tree align_expr = (args ? TREE_VALUE (args)
5179 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5180 int i;
5182 if (DECL_P (*node))
5184 decl = *node;
5185 type = &TREE_TYPE (decl);
5186 is_type = TREE_CODE (*node) == TYPE_DECL;
5188 else if (TYPE_P (*node))
5189 type = node, is_type = 1;
5191 if (TREE_CODE (align_expr) != INTEGER_CST)
5193 error ("requested alignment is not a constant");
5194 *no_add_attrs = true;
5196 else if ((i = tree_log2 (align_expr)) == -1)
5198 error ("requested alignment is not a power of 2");
5199 *no_add_attrs = true;
5201 else if (i > HOST_BITS_PER_INT - 2)
5203 error ("requested alignment is too large");
5204 *no_add_attrs = true;
5206 else if (is_type)
5208 /* If we have a TYPE_DECL, then copy the type, so that we
5209 don't accidentally modify a builtin type. See pushdecl. */
5210 if (decl && TREE_TYPE (decl) != error_mark_node
5211 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5213 tree tt = TREE_TYPE (decl);
5214 *type = build_variant_type_copy (*type);
5215 DECL_ORIGINAL_TYPE (decl) = tt;
5216 TYPE_NAME (*type) = decl;
5217 TREE_USED (*type) = TREE_USED (decl);
5218 TREE_TYPE (decl) = *type;
5220 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5221 *type = build_variant_type_copy (*type);
5223 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5224 TYPE_USER_ALIGN (*type) = 1;
5226 else if (TREE_CODE (decl) != VAR_DECL
5227 && TREE_CODE (decl) != FIELD_DECL)
5229 error ("alignment may not be specified for %q+D", decl);
5230 *no_add_attrs = true;
5232 else
5234 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5235 DECL_USER_ALIGN (decl) = 1;
5238 return NULL_TREE;
5241 /* Handle a "weak" attribute; arguments as in
5242 struct attribute_spec.handler. */
5244 static tree
5245 handle_weak_attribute (tree *node, tree name,
5246 tree ARG_UNUSED (args),
5247 int ARG_UNUSED (flags),
5248 bool * ARG_UNUSED (no_add_attrs))
5250 if (TREE_CODE (*node) == FUNCTION_DECL
5251 || TREE_CODE (*node) == VAR_DECL)
5252 declare_weak (*node);
5253 else
5254 warning (OPT_Wattributes, "%qE attribute ignored", name);
5257 return NULL_TREE;
5260 /* Handle an "alias" attribute; arguments as in
5261 struct attribute_spec.handler. */
5263 static tree
5264 handle_alias_attribute (tree *node, tree name, tree args,
5265 int ARG_UNUSED (flags), bool *no_add_attrs)
5267 tree decl = *node;
5269 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5270 || (TREE_CODE (decl) != FUNCTION_DECL
5271 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
5272 /* A static variable declaration is always a tentative definition,
5273 but the alias is a non-tentative definition which overrides. */
5274 || (TREE_CODE (decl) != FUNCTION_DECL
5275 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
5277 error ("%q+D defined both normally and as an alias", decl);
5278 *no_add_attrs = true;
5281 /* Note that the very first time we process a nested declaration,
5282 decl_function_context will not be set. Indeed, *would* never
5283 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
5284 we do below. After such frobbery, pushdecl would set the context.
5285 In any case, this is never what we want. */
5286 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
5288 tree id;
5290 id = TREE_VALUE (args);
5291 if (TREE_CODE (id) != STRING_CST)
5293 error ("alias argument not a string");
5294 *no_add_attrs = true;
5295 return NULL_TREE;
5297 id = get_identifier (TREE_STRING_POINTER (id));
5298 /* This counts as a use of the object pointed to. */
5299 TREE_USED (id) = 1;
5301 if (TREE_CODE (decl) == FUNCTION_DECL)
5302 DECL_INITIAL (decl) = error_mark_node;
5303 else
5305 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5306 DECL_EXTERNAL (decl) = 1;
5307 else
5308 DECL_EXTERNAL (decl) = 0;
5309 TREE_STATIC (decl) = 1;
5312 else
5314 warning (OPT_Wattributes, "%qE attribute ignored", name);
5315 *no_add_attrs = true;
5318 return NULL_TREE;
5321 /* Handle a "weakref" attribute; arguments as in struct
5322 attribute_spec.handler. */
5324 static tree
5325 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5326 int flags, bool *no_add_attrs)
5328 tree attr = NULL_TREE;
5330 /* We must ignore the attribute when it is associated with
5331 local-scoped decls, since attribute alias is ignored and many
5332 such symbols do not even have a DECL_WEAK field. */
5333 if (decl_function_context (*node) || current_function_decl)
5335 warning (OPT_Wattributes, "%qE attribute ignored", name);
5336 *no_add_attrs = true;
5337 return NULL_TREE;
5340 /* The idea here is that `weakref("name")' mutates into `weakref,
5341 alias("name")', and weakref without arguments, in turn,
5342 implicitly adds weak. */
5344 if (args)
5346 attr = tree_cons (get_identifier ("alias"), args, attr);
5347 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
5349 *no_add_attrs = true;
5351 decl_attributes (node, attr, flags);
5353 else
5355 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
5356 error ("%Jweakref attribute must appear before alias attribute",
5357 *node);
5359 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
5360 and that isn't supported; and because it wants to add it to
5361 the list of weak decls, which isn't helpful. */
5362 DECL_WEAK (*node) = 1;
5365 return NULL_TREE;
5368 /* Handle an "visibility" attribute; arguments as in
5369 struct attribute_spec.handler. */
5371 static tree
5372 handle_visibility_attribute (tree *node, tree name, tree args,
5373 int ARG_UNUSED (flags),
5374 bool *ARG_UNUSED (no_add_attrs))
5376 tree decl = *node;
5377 tree id = TREE_VALUE (args);
5378 enum symbol_visibility vis;
5380 if (TYPE_P (*node))
5382 if (TREE_CODE (*node) == ENUMERAL_TYPE)
5383 /* OK */;
5384 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
5386 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
5387 name);
5388 return NULL_TREE;
5390 else if (TYPE_FIELDS (*node))
5392 error ("%qE attribute ignored because %qT is already defined",
5393 name, *node);
5394 return NULL_TREE;
5397 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
5399 warning (OPT_Wattributes, "%qE attribute ignored", name);
5400 return NULL_TREE;
5403 if (TREE_CODE (id) != STRING_CST)
5405 error ("visibility argument not a string");
5406 return NULL_TREE;
5409 /* If this is a type, set the visibility on the type decl. */
5410 if (TYPE_P (decl))
5412 decl = TYPE_NAME (decl);
5413 if (!decl)
5414 return NULL_TREE;
5415 if (TREE_CODE (decl) == IDENTIFIER_NODE)
5417 warning (OPT_Wattributes, "%qE attribute ignored on types",
5418 name);
5419 return NULL_TREE;
5423 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
5424 vis = VISIBILITY_DEFAULT;
5425 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
5426 vis = VISIBILITY_INTERNAL;
5427 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
5428 vis = VISIBILITY_HIDDEN;
5429 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
5430 vis = VISIBILITY_PROTECTED;
5431 else
5433 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
5434 vis = VISIBILITY_DEFAULT;
5437 if (DECL_VISIBILITY_SPECIFIED (decl)
5438 && vis != DECL_VISIBILITY (decl)
5439 && lookup_attribute ("visibility", (TYPE_P (*node)
5440 ? TYPE_ATTRIBUTES (*node)
5441 : DECL_ATTRIBUTES (decl))))
5442 error ("%qD redeclared with different visibility", decl);
5444 DECL_VISIBILITY (decl) = vis;
5445 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5447 /* Go ahead and attach the attribute to the node as well. This is needed
5448 so we can determine whether we have VISIBILITY_DEFAULT because the
5449 visibility was not specified, or because it was explicitly overridden
5450 from the containing scope. */
5452 return NULL_TREE;
5455 /* Determine the ELF symbol visibility for DECL, which is either a
5456 variable or a function. It is an error to use this function if a
5457 definition of DECL is not available in this translation unit.
5458 Returns true if the final visibility has been determined by this
5459 function; false if the caller is free to make additional
5460 modifications. */
5462 bool
5463 c_determine_visibility (tree decl)
5465 gcc_assert (TREE_CODE (decl) == VAR_DECL
5466 || TREE_CODE (decl) == FUNCTION_DECL);
5468 /* If the user explicitly specified the visibility with an
5469 attribute, honor that. DECL_VISIBILITY will have been set during
5470 the processing of the attribute. We check for an explicit
5471 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
5472 to distinguish the use of an attribute from the use of a "#pragma
5473 GCC visibility push(...)"; in the latter case we still want other
5474 considerations to be able to overrule the #pragma. */
5475 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
5476 return true;
5478 /* Anything that is exported must have default visibility. */
5479 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5480 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
5482 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5483 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5484 return true;
5487 /* Set default visibility to whatever the user supplied with
5488 visibility_specified depending on #pragma GCC visibility. */
5489 if (!DECL_VISIBILITY_SPECIFIED (decl))
5491 DECL_VISIBILITY (decl) = default_visibility;
5492 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
5494 return false;
5497 /* Handle an "tls_model" attribute; arguments as in
5498 struct attribute_spec.handler. */
5500 static tree
5501 handle_tls_model_attribute (tree *node, tree name, tree args,
5502 int ARG_UNUSED (flags), bool *no_add_attrs)
5504 tree id;
5505 tree decl = *node;
5506 enum tls_model kind;
5508 *no_add_attrs = true;
5510 if (!DECL_THREAD_LOCAL_P (decl))
5512 warning (OPT_Wattributes, "%qE attribute ignored", name);
5513 return NULL_TREE;
5516 kind = DECL_TLS_MODEL (decl);
5517 id = TREE_VALUE (args);
5518 if (TREE_CODE (id) != STRING_CST)
5520 error ("tls_model argument not a string");
5521 return NULL_TREE;
5524 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
5525 kind = TLS_MODEL_LOCAL_EXEC;
5526 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
5527 kind = TLS_MODEL_INITIAL_EXEC;
5528 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
5529 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
5530 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5531 kind = TLS_MODEL_GLOBAL_DYNAMIC;
5532 else
5533 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5535 DECL_TLS_MODEL (decl) = kind;
5536 return NULL_TREE;
5539 /* Handle a "no_instrument_function" attribute; arguments as in
5540 struct attribute_spec.handler. */
5542 static tree
5543 handle_no_instrument_function_attribute (tree *node, tree name,
5544 tree ARG_UNUSED (args),
5545 int ARG_UNUSED (flags),
5546 bool *no_add_attrs)
5548 tree decl = *node;
5550 if (TREE_CODE (decl) != FUNCTION_DECL)
5552 error ("%J%qE attribute applies only to functions", decl, name);
5553 *no_add_attrs = true;
5555 else if (DECL_INITIAL (decl))
5557 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5558 *no_add_attrs = true;
5560 else
5561 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5563 return NULL_TREE;
5566 /* Handle a "malloc" attribute; arguments as in
5567 struct attribute_spec.handler. */
5569 static tree
5570 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5571 int ARG_UNUSED (flags), bool *no_add_attrs)
5573 if (TREE_CODE (*node) == FUNCTION_DECL
5574 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
5575 DECL_IS_MALLOC (*node) = 1;
5576 else
5578 warning (OPT_Wattributes, "%qE attribute ignored", name);
5579 *no_add_attrs = true;
5582 return NULL_TREE;
5585 /* Handle a "alloc_size" attribute; arguments as in
5586 struct attribute_spec.handler. */
5588 static tree
5589 handle_alloc_size_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5590 int ARG_UNUSED (flags), bool *no_add_attrs)
5592 tree params = TYPE_ARG_TYPES (*node);
5593 unsigned arg_count = 0;
5595 for (; TREE_CHAIN (params); params = TREE_CHAIN (params))
5596 arg_count ++;
5598 for (; args; args = TREE_CHAIN (args))
5600 tree position = TREE_VALUE (args);
5602 if (TREE_CODE (position) != INTEGER_CST
5603 || TREE_INT_CST_HIGH (position)
5604 || TREE_INT_CST_LOW (position) < 1
5605 || TREE_INT_CST_LOW (position) > arg_count )
5607 warning (OPT_Wattributes,
5608 "alloc_size parameter outside range");
5609 *no_add_attrs = true;
5610 return NULL_TREE;
5613 return NULL_TREE;
5616 /* Handle a "returns_twice" attribute; arguments as in
5617 struct attribute_spec.handler. */
5619 static tree
5620 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5621 int ARG_UNUSED (flags), bool *no_add_attrs)
5623 if (TREE_CODE (*node) == FUNCTION_DECL)
5624 DECL_IS_RETURNS_TWICE (*node) = 1;
5625 else
5627 warning (OPT_Wattributes, "%qE attribute ignored", name);
5628 *no_add_attrs = true;
5631 return NULL_TREE;
5634 /* Handle a "no_limit_stack" attribute; arguments as in
5635 struct attribute_spec.handler. */
5637 static tree
5638 handle_no_limit_stack_attribute (tree *node, tree name,
5639 tree ARG_UNUSED (args),
5640 int ARG_UNUSED (flags),
5641 bool *no_add_attrs)
5643 tree decl = *node;
5645 if (TREE_CODE (decl) != FUNCTION_DECL)
5647 error ("%J%qE attribute applies only to functions", decl, name);
5648 *no_add_attrs = true;
5650 else if (DECL_INITIAL (decl))
5652 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5653 *no_add_attrs = true;
5655 else
5656 DECL_NO_LIMIT_STACK (decl) = 1;
5658 return NULL_TREE;
5661 /* Handle a "pure" attribute; arguments as in
5662 struct attribute_spec.handler. */
5664 static tree
5665 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5666 int ARG_UNUSED (flags), bool *no_add_attrs)
5668 if (TREE_CODE (*node) == FUNCTION_DECL)
5669 DECL_IS_PURE (*node) = 1;
5670 /* ??? TODO: Support types. */
5671 else
5673 warning (OPT_Wattributes, "%qE attribute ignored", name);
5674 *no_add_attrs = true;
5677 return NULL_TREE;
5680 /* Handle a "no vops" attribute; arguments as in
5681 struct attribute_spec.handler. */
5683 static tree
5684 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5685 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5686 bool *ARG_UNUSED (no_add_attrs))
5688 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5689 DECL_IS_NOVOPS (*node) = 1;
5690 return NULL_TREE;
5693 /* Handle a "deprecated" attribute; arguments as in
5694 struct attribute_spec.handler. */
5696 static tree
5697 handle_deprecated_attribute (tree *node, tree name,
5698 tree ARG_UNUSED (args), int flags,
5699 bool *no_add_attrs)
5701 tree type = NULL_TREE;
5702 int warn = 0;
5703 tree what = NULL_TREE;
5705 if (DECL_P (*node))
5707 tree decl = *node;
5708 type = TREE_TYPE (decl);
5710 if (TREE_CODE (decl) == TYPE_DECL
5711 || TREE_CODE (decl) == PARM_DECL
5712 || TREE_CODE (decl) == VAR_DECL
5713 || TREE_CODE (decl) == FUNCTION_DECL
5714 || TREE_CODE (decl) == FIELD_DECL)
5715 TREE_DEPRECATED (decl) = 1;
5716 else
5717 warn = 1;
5719 else if (TYPE_P (*node))
5721 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5722 *node = build_variant_type_copy (*node);
5723 TREE_DEPRECATED (*node) = 1;
5724 type = *node;
5726 else
5727 warn = 1;
5729 if (warn)
5731 *no_add_attrs = true;
5732 if (type && TYPE_NAME (type))
5734 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5735 what = TYPE_NAME (*node);
5736 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5737 && DECL_NAME (TYPE_NAME (type)))
5738 what = DECL_NAME (TYPE_NAME (type));
5740 if (what)
5741 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
5742 else
5743 warning (OPT_Wattributes, "%qE attribute ignored", name);
5746 return NULL_TREE;
5749 /* Handle a "vector_size" attribute; arguments as in
5750 struct attribute_spec.handler. */
5752 static tree
5753 handle_vector_size_attribute (tree *node, tree name, tree args,
5754 int ARG_UNUSED (flags),
5755 bool *no_add_attrs)
5757 unsigned HOST_WIDE_INT vecsize, nunits;
5758 enum machine_mode orig_mode;
5759 tree type = *node, new_type, size;
5761 *no_add_attrs = true;
5763 size = TREE_VALUE (args);
5765 if (!host_integerp (size, 1))
5767 warning (OPT_Wattributes, "%qE attribute ignored", name);
5768 return NULL_TREE;
5771 /* Get the vector size (in bytes). */
5772 vecsize = tree_low_cst (size, 1);
5774 /* We need to provide for vector pointers, vector arrays, and
5775 functions returning vectors. For example:
5777 __attribute__((vector_size(16))) short *foo;
5779 In this case, the mode is SI, but the type being modified is
5780 HI, so we need to look further. */
5782 while (POINTER_TYPE_P (type)
5783 || TREE_CODE (type) == FUNCTION_TYPE
5784 || TREE_CODE (type) == METHOD_TYPE
5785 || TREE_CODE (type) == ARRAY_TYPE)
5786 type = TREE_TYPE (type);
5788 /* Get the mode of the type being modified. */
5789 orig_mode = TYPE_MODE (type);
5791 if (TREE_CODE (type) == RECORD_TYPE
5792 || TREE_CODE (type) == UNION_TYPE
5793 || TREE_CODE (type) == VECTOR_TYPE
5794 || (!SCALAR_FLOAT_MODE_P (orig_mode)
5795 && GET_MODE_CLASS (orig_mode) != MODE_INT)
5796 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
5798 error ("invalid vector type for attribute %qE", name);
5799 return NULL_TREE;
5802 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
5804 error ("vector size not an integral multiple of component size");
5805 return NULL;
5808 if (vecsize == 0)
5810 error ("zero vector size");
5811 return NULL;
5814 /* Calculate how many units fit in the vector. */
5815 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5816 if (nunits & (nunits - 1))
5818 error ("number of components of the vector not a power of two");
5819 return NULL_TREE;
5822 new_type = build_vector_type (type, nunits);
5824 /* Build back pointers if needed. */
5825 *node = reconstruct_complex_type (*node, new_type);
5827 return NULL_TREE;
5830 /* Handle the "nonnull" attribute. */
5831 static tree
5832 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5833 tree args, int ARG_UNUSED (flags),
5834 bool *no_add_attrs)
5836 tree type = *node;
5837 unsigned HOST_WIDE_INT attr_arg_num;
5839 /* If no arguments are specified, all pointer arguments should be
5840 non-null. Verify a full prototype is given so that the arguments
5841 will have the correct types when we actually check them later. */
5842 if (!args)
5844 if (!TYPE_ARG_TYPES (type))
5846 error ("nonnull attribute without arguments on a non-prototype");
5847 *no_add_attrs = true;
5849 return NULL_TREE;
5852 /* Argument list specified. Verify that each argument number references
5853 a pointer argument. */
5854 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5856 tree argument;
5857 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
5859 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
5861 error ("nonnull argument has invalid operand number (argument %lu)",
5862 (unsigned long) attr_arg_num);
5863 *no_add_attrs = true;
5864 return NULL_TREE;
5867 argument = TYPE_ARG_TYPES (type);
5868 if (argument)
5870 for (ck_num = 1; ; ck_num++)
5872 if (!argument || ck_num == arg_num)
5873 break;
5874 argument = TREE_CHAIN (argument);
5877 if (!argument
5878 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5880 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5881 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5882 *no_add_attrs = true;
5883 return NULL_TREE;
5886 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5888 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5889 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5890 *no_add_attrs = true;
5891 return NULL_TREE;
5896 return NULL_TREE;
5899 /* Check the argument list of a function call for null in argument slots
5900 that are marked as requiring a non-null pointer argument. The NARGS
5901 arguments are passed in the array ARGARRAY.
5904 static void
5905 check_function_nonnull (tree attrs, int nargs, tree *argarray)
5907 tree a, args;
5908 int i;
5910 for (a = attrs; a; a = TREE_CHAIN (a))
5912 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5914 args = TREE_VALUE (a);
5916 /* Walk the argument list. If we encounter an argument number we
5917 should check for non-null, do it. If the attribute has no args,
5918 then every pointer argument is checked (in which case the check
5919 for pointer type is done in check_nonnull_arg). */
5920 for (i = 0; i < nargs; i++)
5922 if (!args || nonnull_check_p (args, i + 1))
5923 check_function_arguments_recurse (check_nonnull_arg, NULL,
5924 argarray[i],
5925 i + 1);
5931 /* Check that the Nth argument of a function call (counting backwards
5932 from the end) is a (pointer)0. The NARGS arguments are passed in the
5933 array ARGARRAY. */
5935 static void
5936 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
5938 tree attr = lookup_attribute ("sentinel", attrs);
5940 if (attr)
5942 int len = 0;
5943 int pos = 0;
5944 tree sentinel;
5946 /* Skip over the named arguments. */
5947 while (typelist && len < nargs)
5949 typelist = TREE_CHAIN (typelist);
5950 len++;
5953 if (TREE_VALUE (attr))
5955 tree p = TREE_VALUE (TREE_VALUE (attr));
5956 pos = TREE_INT_CST_LOW (p);
5959 /* The sentinel must be one of the varargs, i.e.
5960 in position >= the number of fixed arguments. */
5961 if ((nargs - 1 - pos) < len)
5963 warning (OPT_Wformat,
5964 "not enough variable arguments to fit a sentinel");
5965 return;
5968 /* Validate the sentinel. */
5969 sentinel = argarray[nargs - 1 - pos];
5970 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
5971 || !integer_zerop (sentinel))
5972 /* Although __null (in C++) is only an integer we allow it
5973 nevertheless, as we are guaranteed that it's exactly
5974 as wide as a pointer, and we don't want to force
5975 users to cast the NULL they have written there.
5976 We warn with -Wstrict-null-sentinel, though. */
5977 && (warn_strict_null_sentinel || null_node != sentinel))
5978 warning (OPT_Wformat, "missing sentinel in function call");
5982 /* Helper for check_function_nonnull; given a list of operands which
5983 must be non-null in ARGS, determine if operand PARAM_NUM should be
5984 checked. */
5986 static bool
5987 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5989 unsigned HOST_WIDE_INT arg_num = 0;
5991 for (; args; args = TREE_CHAIN (args))
5993 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5995 gcc_assert (found);
5997 if (arg_num == param_num)
5998 return true;
6000 return false;
6003 /* Check that the function argument PARAM (which is operand number
6004 PARAM_NUM) is non-null. This is called by check_function_nonnull
6005 via check_function_arguments_recurse. */
6007 static void
6008 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
6009 unsigned HOST_WIDE_INT param_num)
6011 /* Just skip checking the argument if it's not a pointer. This can
6012 happen if the "nonnull" attribute was given without an operand
6013 list (which means to check every pointer argument). */
6015 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
6016 return;
6018 if (integer_zerop (param))
6019 warning (OPT_Wnonnull, "null argument where non-null required "
6020 "(argument %lu)", (unsigned long) param_num);
6023 /* Helper for nonnull attribute handling; fetch the operand number
6024 from the attribute argument list. */
6026 static bool
6027 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
6029 /* Verify the arg number is a constant. */
6030 if (TREE_CODE (arg_num_expr) != INTEGER_CST
6031 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
6032 return false;
6034 *valp = TREE_INT_CST_LOW (arg_num_expr);
6035 return true;
6038 /* Handle a "nothrow" attribute; arguments as in
6039 struct attribute_spec.handler. */
6041 static tree
6042 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
6043 int ARG_UNUSED (flags), bool *no_add_attrs)
6045 if (TREE_CODE (*node) == FUNCTION_DECL)
6046 TREE_NOTHROW (*node) = 1;
6047 /* ??? TODO: Support types. */
6048 else
6050 warning (OPT_Wattributes, "%qE attribute ignored", name);
6051 *no_add_attrs = true;
6054 return NULL_TREE;
6057 /* Handle a "cleanup" attribute; arguments as in
6058 struct attribute_spec.handler. */
6060 static tree
6061 handle_cleanup_attribute (tree *node, tree name, tree args,
6062 int ARG_UNUSED (flags), bool *no_add_attrs)
6064 tree decl = *node;
6065 tree cleanup_id, cleanup_decl;
6067 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
6068 for global destructors in C++. This requires infrastructure that
6069 we don't have generically at the moment. It's also not a feature
6070 we'd be missing too much, since we do have attribute constructor. */
6071 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
6073 warning (OPT_Wattributes, "%qE attribute ignored", name);
6074 *no_add_attrs = true;
6075 return NULL_TREE;
6078 /* Verify that the argument is a function in scope. */
6079 /* ??? We could support pointers to functions here as well, if
6080 that was considered desirable. */
6081 cleanup_id = TREE_VALUE (args);
6082 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
6084 error ("cleanup argument not an identifier");
6085 *no_add_attrs = true;
6086 return NULL_TREE;
6088 cleanup_decl = lookup_name (cleanup_id);
6089 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
6091 error ("cleanup argument not a function");
6092 *no_add_attrs = true;
6093 return NULL_TREE;
6096 /* That the function has proper type is checked with the
6097 eventual call to build_function_call. */
6099 return NULL_TREE;
6102 /* Handle a "warn_unused_result" attribute. No special handling. */
6104 static tree
6105 handle_warn_unused_result_attribute (tree *node, tree name,
6106 tree ARG_UNUSED (args),
6107 int ARG_UNUSED (flags), bool *no_add_attrs)
6109 /* Ignore the attribute for functions not returning any value. */
6110 if (VOID_TYPE_P (TREE_TYPE (*node)))
6112 warning (OPT_Wattributes, "%qE attribute ignored", name);
6113 *no_add_attrs = true;
6116 return NULL_TREE;
6119 /* Handle a "sentinel" attribute. */
6121 static tree
6122 handle_sentinel_attribute (tree *node, tree name, tree args,
6123 int ARG_UNUSED (flags), bool *no_add_attrs)
6125 tree params = TYPE_ARG_TYPES (*node);
6127 if (!params)
6129 warning (OPT_Wattributes,
6130 "%qE attribute requires prototypes with named arguments", name);
6131 *no_add_attrs = true;
6133 else
6135 while (TREE_CHAIN (params))
6136 params = TREE_CHAIN (params);
6138 if (VOID_TYPE_P (TREE_VALUE (params)))
6140 warning (OPT_Wattributes,
6141 "%qE attribute only applies to variadic functions", name);
6142 *no_add_attrs = true;
6146 if (args)
6148 tree position = TREE_VALUE (args);
6150 if (TREE_CODE (position) != INTEGER_CST)
6152 warning (OPT_Wattributes,
6153 "requested position is not an integer constant");
6154 *no_add_attrs = true;
6156 else
6158 if (tree_int_cst_lt (position, integer_zero_node))
6160 warning (OPT_Wattributes,
6161 "requested position is less than zero");
6162 *no_add_attrs = true;
6167 return NULL_TREE;
6170 /* Check for valid arguments being passed to a function.
6171 ATTRS is a list of attributes. There are NARGS arguments in the array
6172 ARGARRAY. TYPELIST is the list of argument types for the function.
6174 void
6175 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
6177 /* Check for null being passed in a pointer argument that must be
6178 non-null. We also need to do this if format checking is enabled. */
6180 if (warn_nonnull)
6181 check_function_nonnull (attrs, nargs, argarray);
6183 /* Check for errors in format strings. */
6185 if (warn_format || warn_missing_format_attribute)
6186 check_function_format (attrs, nargs, argarray);
6188 if (warn_format)
6189 check_function_sentinel (attrs, nargs, argarray, typelist);
6192 /* Generic argument checking recursion routine. PARAM is the argument to
6193 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
6194 once the argument is resolved. CTX is context for the callback. */
6195 void
6196 check_function_arguments_recurse (void (*callback)
6197 (void *, tree, unsigned HOST_WIDE_INT),
6198 void *ctx, tree param,
6199 unsigned HOST_WIDE_INT param_num)
6201 if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
6202 && (TYPE_PRECISION (TREE_TYPE (param))
6203 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
6205 /* Strip coercion. */
6206 check_function_arguments_recurse (callback, ctx,
6207 TREE_OPERAND (param, 0), param_num);
6208 return;
6211 if (TREE_CODE (param) == CALL_EXPR)
6213 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
6214 tree attrs;
6215 bool found_format_arg = false;
6217 /* See if this is a call to a known internationalization function
6218 that modifies a format arg. Such a function may have multiple
6219 format_arg attributes (for example, ngettext). */
6221 for (attrs = TYPE_ATTRIBUTES (type);
6222 attrs;
6223 attrs = TREE_CHAIN (attrs))
6224 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
6226 tree inner_arg;
6227 tree format_num_expr;
6228 int format_num;
6229 int i;
6230 call_expr_arg_iterator iter;
6232 /* Extract the argument number, which was previously checked
6233 to be valid. */
6234 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
6236 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
6237 && !TREE_INT_CST_HIGH (format_num_expr));
6239 format_num = TREE_INT_CST_LOW (format_num_expr);
6241 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
6242 inner_arg != 0;
6243 inner_arg = next_call_expr_arg (&iter), i++)
6244 if (i == format_num)
6246 check_function_arguments_recurse (callback, ctx,
6247 inner_arg, param_num);
6248 found_format_arg = true;
6249 break;
6253 /* If we found a format_arg attribute and did a recursive check,
6254 we are done with checking this argument. Otherwise, we continue
6255 and this will be considered a non-literal. */
6256 if (found_format_arg)
6257 return;
6260 if (TREE_CODE (param) == COND_EXPR)
6262 /* Check both halves of the conditional expression. */
6263 check_function_arguments_recurse (callback, ctx,
6264 TREE_OPERAND (param, 1), param_num);
6265 check_function_arguments_recurse (callback, ctx,
6266 TREE_OPERAND (param, 2), param_num);
6267 return;
6270 (*callback) (ctx, param, param_num);
6273 /* Function to help qsort sort FIELD_DECLs by name order. */
6276 field_decl_cmp (const void *x_p, const void *y_p)
6278 const tree *const x = (const tree *const) x_p;
6279 const tree *const y = (const tree *const) y_p;
6281 if (DECL_NAME (*x) == DECL_NAME (*y))
6282 /* A nontype is "greater" than a type. */
6283 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6284 if (DECL_NAME (*x) == NULL_TREE)
6285 return -1;
6286 if (DECL_NAME (*y) == NULL_TREE)
6287 return 1;
6288 if (DECL_NAME (*x) < DECL_NAME (*y))
6289 return -1;
6290 return 1;
6293 static struct {
6294 gt_pointer_operator new_value;
6295 void *cookie;
6296 } resort_data;
6298 /* This routine compares two fields like field_decl_cmp but using the
6299 pointer operator in resort_data. */
6301 static int
6302 resort_field_decl_cmp (const void *x_p, const void *y_p)
6304 const tree *const x = (const tree *const) x_p;
6305 const tree *const y = (const tree *const) y_p;
6307 if (DECL_NAME (*x) == DECL_NAME (*y))
6308 /* A nontype is "greater" than a type. */
6309 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6310 if (DECL_NAME (*x) == NULL_TREE)
6311 return -1;
6312 if (DECL_NAME (*y) == NULL_TREE)
6313 return 1;
6315 tree d1 = DECL_NAME (*x);
6316 tree d2 = DECL_NAME (*y);
6317 resort_data.new_value (&d1, resort_data.cookie);
6318 resort_data.new_value (&d2, resort_data.cookie);
6319 if (d1 < d2)
6320 return -1;
6322 return 1;
6325 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
6327 void
6328 resort_sorted_fields (void *obj,
6329 void * ARG_UNUSED (orig_obj),
6330 gt_pointer_operator new_value,
6331 void *cookie)
6333 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
6334 resort_data.new_value = new_value;
6335 resort_data.cookie = cookie;
6336 qsort (&sf->elts[0], sf->len, sizeof (tree),
6337 resort_field_decl_cmp);
6340 /* Subroutine of c_parse_error.
6341 Return the result of concatenating LHS and RHS. RHS is really
6342 a string literal, its first character is indicated by RHS_START and
6343 RHS_SIZE is its length (including the terminating NUL character).
6345 The caller is responsible for deleting the returned pointer. */
6347 static char *
6348 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
6350 const int lhs_size = strlen (lhs);
6351 char *result = XNEWVEC (char, lhs_size + rhs_size);
6352 strncpy (result, lhs, lhs_size);
6353 strncpy (result + lhs_size, rhs_start, rhs_size);
6354 return result;
6357 /* Issue the error given by GMSGID, indicating that it occurred before
6358 TOKEN, which had the associated VALUE. */
6360 void
6361 c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
6363 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
6365 char *message = NULL;
6367 if (token == CPP_EOF)
6368 message = catenate_messages (gmsgid, " at end of input");
6369 else if (token == CPP_CHAR || token == CPP_WCHAR)
6371 unsigned int val = TREE_INT_CST_LOW (value);
6372 const char *const ell = (token == CPP_CHAR) ? "" : "L";
6373 if (val <= UCHAR_MAX && ISGRAPH (val))
6374 message = catenate_messages (gmsgid, " before %s'%c'");
6375 else
6376 message = catenate_messages (gmsgid, " before %s'\\x%x'");
6378 error (message, ell, val);
6379 free (message);
6380 message = NULL;
6382 else if (token == CPP_STRING || token == CPP_WSTRING)
6383 message = catenate_messages (gmsgid, " before string constant");
6384 else if (token == CPP_NUMBER)
6385 message = catenate_messages (gmsgid, " before numeric constant");
6386 else if (token == CPP_NAME)
6388 message = catenate_messages (gmsgid, " before %qE");
6389 error (message, value);
6390 free (message);
6391 message = NULL;
6393 else if (token == CPP_PRAGMA)
6394 message = catenate_messages (gmsgid, " before %<#pragma%>");
6395 else if (token == CPP_PRAGMA_EOL)
6396 message = catenate_messages (gmsgid, " before end of line");
6397 else if (token < N_TTYPES)
6399 message = catenate_messages (gmsgid, " before %qs token");
6400 error (message, cpp_type2name (token));
6401 free (message);
6402 message = NULL;
6404 else
6405 error (gmsgid);
6407 if (message)
6409 error (message);
6410 free (message);
6412 #undef catenate_messages
6415 /* Walk a gimplified function and warn for functions whose return value is
6416 ignored and attribute((warn_unused_result)) is set. This is done before
6417 inlining, so we don't have to worry about that. */
6419 void
6420 c_warn_unused_result (tree *top_p)
6422 tree t = *top_p;
6423 tree_stmt_iterator i;
6424 tree fdecl, ftype;
6426 switch (TREE_CODE (t))
6428 case STATEMENT_LIST:
6429 for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
6430 c_warn_unused_result (tsi_stmt_ptr (i));
6431 break;
6433 case COND_EXPR:
6434 c_warn_unused_result (&COND_EXPR_THEN (t));
6435 c_warn_unused_result (&COND_EXPR_ELSE (t));
6436 break;
6437 case BIND_EXPR:
6438 c_warn_unused_result (&BIND_EXPR_BODY (t));
6439 break;
6440 case TRY_FINALLY_EXPR:
6441 case TRY_CATCH_EXPR:
6442 c_warn_unused_result (&TREE_OPERAND (t, 0));
6443 c_warn_unused_result (&TREE_OPERAND (t, 1));
6444 break;
6445 case CATCH_EXPR:
6446 c_warn_unused_result (&CATCH_BODY (t));
6447 break;
6448 case EH_FILTER_EXPR:
6449 c_warn_unused_result (&EH_FILTER_FAILURE (t));
6450 break;
6452 case CALL_EXPR:
6453 if (TREE_USED (t))
6454 break;
6456 /* This is a naked call, as opposed to a CALL_EXPR nested inside
6457 a MODIFY_EXPR. All calls whose value is ignored should be
6458 represented like this. Look for the attribute. */
6459 fdecl = get_callee_fndecl (t);
6460 if (fdecl)
6461 ftype = TREE_TYPE (fdecl);
6462 else
6464 ftype = TREE_TYPE (CALL_EXPR_FN (t));
6465 /* Look past pointer-to-function to the function type itself. */
6466 ftype = TREE_TYPE (ftype);
6469 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
6471 if (fdecl)
6472 warning (0, "%Hignoring return value of %qD, "
6473 "declared with attribute warn_unused_result",
6474 EXPR_LOCUS (t), fdecl);
6475 else
6476 warning (0, "%Hignoring return value of function "
6477 "declared with attribute warn_unused_result",
6478 EXPR_LOCUS (t));
6480 break;
6482 default:
6483 /* Not a container, not a call, or a call whose value is used. */
6484 break;
6488 /* Convert a character from the host to the target execution character
6489 set. cpplib handles this, mostly. */
6491 HOST_WIDE_INT
6492 c_common_to_target_charset (HOST_WIDE_INT c)
6494 /* Character constants in GCC proper are sign-extended under -fsigned-char,
6495 zero-extended under -fno-signed-char. cpplib insists that characters
6496 and character constants are always unsigned. Hence we must convert
6497 back and forth. */
6498 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
6500 uc = cpp_host_to_exec_charset (parse_in, uc);
6502 if (flag_signed_char)
6503 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
6504 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
6505 else
6506 return uc;
6509 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
6510 component references, with STOP_REF, or alternatively an INDIRECT_REF of
6511 NULL, at the bottom; much like the traditional rendering of offsetof as a
6512 macro. Returns the folded and properly cast result. */
6514 static tree
6515 fold_offsetof_1 (tree expr, tree stop_ref)
6517 enum tree_code code = PLUS_EXPR;
6518 tree base, off, t;
6520 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
6521 return size_zero_node;
6523 switch (TREE_CODE (expr))
6525 case ERROR_MARK:
6526 return expr;
6528 case VAR_DECL:
6529 error ("cannot apply %<offsetof%> to static data member %qD", expr);
6530 return error_mark_node;
6532 case CALL_EXPR:
6533 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
6534 return error_mark_node;
6536 case INTEGER_CST:
6537 gcc_assert (integer_zerop (expr));
6538 return size_zero_node;
6540 case NOP_EXPR:
6541 case INDIRECT_REF:
6542 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6543 gcc_assert (base == error_mark_node || base == size_zero_node);
6544 return base;
6546 case COMPONENT_REF:
6547 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6548 if (base == error_mark_node)
6549 return base;
6551 t = TREE_OPERAND (expr, 1);
6552 if (DECL_C_BIT_FIELD (t))
6554 error ("attempt to take address of bit-field structure "
6555 "member %qD", t);
6556 return error_mark_node;
6558 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
6559 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
6560 / BITS_PER_UNIT));
6561 break;
6563 case ARRAY_REF:
6564 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6565 if (base == error_mark_node)
6566 return base;
6568 t = TREE_OPERAND (expr, 1);
6569 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
6571 code = MINUS_EXPR;
6572 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
6574 t = convert (sizetype, t);
6575 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
6576 break;
6578 case COMPOUND_EXPR:
6579 /* Handle static members of volatile structs. */
6580 t = TREE_OPERAND (expr, 1);
6581 gcc_assert (TREE_CODE (t) == VAR_DECL);
6582 return fold_offsetof_1 (t, stop_ref);
6584 default:
6585 gcc_unreachable ();
6588 return size_binop (code, base, off);
6591 tree
6592 fold_offsetof (tree expr, tree stop_ref)
6594 /* Convert back from the internal sizetype to size_t. */
6595 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
6598 /* Print an error message for an invalid lvalue. USE says
6599 how the lvalue is being used and so selects the error message. */
6601 void
6602 lvalue_error (enum lvalue_use use)
6604 switch (use)
6606 case lv_assign:
6607 error ("lvalue required as left operand of assignment");
6608 break;
6609 case lv_increment:
6610 error ("lvalue required as increment operand");
6611 break;
6612 case lv_decrement:
6613 error ("lvalue required as decrement operand");
6614 break;
6615 case lv_addressof:
6616 error ("lvalue required as unary %<&%> operand");
6617 break;
6618 case lv_asm:
6619 error ("lvalue required in asm statement");
6620 break;
6621 default:
6622 gcc_unreachable ();
6626 /* *PTYPE is an incomplete array. Complete it with a domain based on
6627 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6628 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6629 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
6632 complete_array_type (tree *ptype, tree initial_value, bool do_default)
6634 tree maxindex, type, main_type, elt, unqual_elt;
6635 int failure = 0, quals;
6636 hashval_t hashcode = 0;
6638 maxindex = size_zero_node;
6639 if (initial_value)
6641 if (TREE_CODE (initial_value) == STRING_CST)
6643 int eltsize
6644 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6645 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6647 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6649 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6651 if (VEC_empty (constructor_elt, v))
6653 if (pedantic)
6654 failure = 3;
6655 maxindex = integer_minus_one_node;
6657 else
6659 tree curindex;
6660 unsigned HOST_WIDE_INT cnt;
6661 constructor_elt *ce;
6663 if (VEC_index (constructor_elt, v, 0)->index)
6664 maxindex = fold_convert (sizetype,
6665 VEC_index (constructor_elt,
6666 v, 0)->index);
6667 curindex = maxindex;
6669 for (cnt = 1;
6670 VEC_iterate (constructor_elt, v, cnt, ce);
6671 cnt++)
6673 if (ce->index)
6674 curindex = fold_convert (sizetype, ce->index);
6675 else
6676 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6678 if (tree_int_cst_lt (maxindex, curindex))
6679 maxindex = curindex;
6683 else
6685 /* Make an error message unless that happened already. */
6686 if (initial_value != error_mark_node)
6687 failure = 1;
6690 else
6692 failure = 2;
6693 if (!do_default)
6694 return failure;
6697 type = *ptype;
6698 elt = TREE_TYPE (type);
6699 quals = TYPE_QUALS (strip_array_types (elt));
6700 if (quals == 0)
6701 unqual_elt = elt;
6702 else
6703 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6705 /* Using build_distinct_type_copy and modifying things afterward instead
6706 of using build_array_type to create a new type preserves all of the
6707 TYPE_LANG_FLAG_? bits that the front end may have set. */
6708 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6709 TREE_TYPE (main_type) = unqual_elt;
6710 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6711 layout_type (main_type);
6713 /* Make sure we have the canonical MAIN_TYPE. */
6714 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
6715 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
6716 hashcode);
6717 main_type = type_hash_canon (hashcode, main_type);
6719 if (quals == 0)
6720 type = main_type;
6721 else
6722 type = c_build_qualified_type (main_type, quals);
6724 *ptype = type;
6725 return failure;
6729 /* Used to help initialize the builtin-types.def table. When a type of
6730 the correct size doesn't exist, use error_mark_node instead of NULL.
6731 The later results in segfaults even when a decl using the type doesn't
6732 get invoked. */
6734 tree
6735 builtin_type_for_size (int size, bool unsignedp)
6737 tree type = lang_hooks.types.type_for_size (size, unsignedp);
6738 return type ? type : error_mark_node;
6741 /* A helper function for resolve_overloaded_builtin in resolving the
6742 overloaded __sync_ builtins. Returns a positive power of 2 if the
6743 first operand of PARAMS is a pointer to a supported data type.
6744 Returns 0 if an error is encountered. */
6746 static int
6747 sync_resolve_size (tree function, tree params)
6749 tree type;
6750 int size;
6752 if (params == NULL)
6754 error ("too few arguments to function %qE", function);
6755 return 0;
6758 type = TREE_TYPE (TREE_VALUE (params));
6759 if (TREE_CODE (type) != POINTER_TYPE)
6760 goto incompatible;
6762 type = TREE_TYPE (type);
6763 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6764 goto incompatible;
6766 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6767 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
6768 return size;
6770 incompatible:
6771 error ("incompatible type for argument %d of %qE", 1, function);
6772 return 0;
6775 /* A helper function for resolve_overloaded_builtin. Adds casts to
6776 PARAMS to make arguments match up with those of FUNCTION. Drops
6777 the variadic arguments at the end. Returns false if some error
6778 was encountered; true on success. */
6780 static bool
6781 sync_resolve_params (tree orig_function, tree function, tree params)
6783 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6784 tree ptype;
6785 int number;
6787 /* We've declared the implementation functions to use "volatile void *"
6788 as the pointer parameter, so we shouldn't get any complaints from the
6789 call to check_function_arguments what ever type the user used. */
6790 arg_types = TREE_CHAIN (arg_types);
6791 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6792 number = 2;
6794 /* For the rest of the values, we need to cast these to FTYPE, so that we
6795 don't get warnings for passing pointer types, etc. */
6796 while (arg_types != void_list_node)
6798 tree val;
6800 params = TREE_CHAIN (params);
6801 if (params == NULL)
6803 error ("too few arguments to function %qE", orig_function);
6804 return false;
6807 /* ??? Ideally for the first conversion we'd use convert_for_assignment
6808 so that we get warnings for anything that doesn't match the pointer
6809 type. This isn't portable across the C and C++ front ends atm. */
6810 val = TREE_VALUE (params);
6811 val = convert (ptype, val);
6812 val = convert (TREE_VALUE (arg_types), val);
6813 TREE_VALUE (params) = val;
6815 arg_types = TREE_CHAIN (arg_types);
6816 number++;
6819 /* The definition of these primitives is variadic, with the remaining
6820 being "an optional list of variables protected by the memory barrier".
6821 No clue what that's supposed to mean, precisely, but we consider all
6822 call-clobbered variables to be protected so we're safe. */
6823 TREE_CHAIN (params) = NULL;
6825 return true;
6828 /* A helper function for resolve_overloaded_builtin. Adds a cast to
6829 RESULT to make it match the type of the first pointer argument in
6830 PARAMS. */
6832 static tree
6833 sync_resolve_return (tree params, tree result)
6835 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6836 ptype = TYPE_MAIN_VARIANT (ptype);
6837 return convert (ptype, result);
6840 /* Some builtin functions are placeholders for other expressions. This
6841 function should be called immediately after parsing the call expression
6842 before surrounding code has committed to the type of the expression.
6844 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6845 PARAMS is the argument list for the call. The return value is non-null
6846 when expansion is complete, and null if normal processing should
6847 continue. */
6849 tree
6850 resolve_overloaded_builtin (tree function, tree params)
6852 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
6853 switch (DECL_BUILT_IN_CLASS (function))
6855 case BUILT_IN_NORMAL:
6856 break;
6857 case BUILT_IN_MD:
6858 if (targetm.resolve_overloaded_builtin)
6859 return targetm.resolve_overloaded_builtin (function, params);
6860 else
6861 return NULL_TREE;
6862 default:
6863 return NULL_TREE;
6866 /* Handle BUILT_IN_NORMAL here. */
6867 switch (orig_code)
6869 case BUILT_IN_FETCH_AND_ADD_N:
6870 case BUILT_IN_FETCH_AND_SUB_N:
6871 case BUILT_IN_FETCH_AND_OR_N:
6872 case BUILT_IN_FETCH_AND_AND_N:
6873 case BUILT_IN_FETCH_AND_XOR_N:
6874 case BUILT_IN_FETCH_AND_NAND_N:
6875 case BUILT_IN_ADD_AND_FETCH_N:
6876 case BUILT_IN_SUB_AND_FETCH_N:
6877 case BUILT_IN_OR_AND_FETCH_N:
6878 case BUILT_IN_AND_AND_FETCH_N:
6879 case BUILT_IN_XOR_AND_FETCH_N:
6880 case BUILT_IN_NAND_AND_FETCH_N:
6881 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6882 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6883 case BUILT_IN_LOCK_TEST_AND_SET_N:
6884 case BUILT_IN_LOCK_RELEASE_N:
6886 int n = sync_resolve_size (function, params);
6887 tree new_function, result;
6889 if (n == 0)
6890 return error_mark_node;
6892 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6893 if (!sync_resolve_params (function, new_function, params))
6894 return error_mark_node;
6896 result = build_function_call (new_function, params);
6897 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6898 && orig_code != BUILT_IN_LOCK_RELEASE_N)
6899 result = sync_resolve_return (params, result);
6901 return result;
6904 default:
6905 return NULL_TREE;
6909 /* Ignoring their sign, return true if two scalar types are the same. */
6910 bool
6911 same_scalar_type_ignoring_signedness (tree t1, tree t2)
6913 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6915 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6916 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6918 /* Equality works here because c_common_signed_type uses
6919 TYPE_MAIN_VARIANT. */
6920 return lang_hooks.types.signed_type (t1)
6921 == lang_hooks.types.signed_type (t2);
6924 /* Check for missing format attributes on function pointers. LTYPE is
6925 the new type or left-hand side type. RTYPE is the old type or
6926 right-hand side type. Returns TRUE if LTYPE is missing the desired
6927 attribute. */
6929 bool
6930 check_missing_format_attribute (tree ltype, tree rtype)
6932 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6933 tree ra;
6935 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6936 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6937 break;
6938 if (ra)
6940 tree la;
6941 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6942 if (is_attribute_p ("format", TREE_PURPOSE (la)))
6943 break;
6944 return !la;
6946 else
6947 return false;
6950 /* Subscripting with type char is likely to lose on a machine where
6951 chars are signed. So warn on any machine, but optionally. Don't
6952 warn for unsigned char since that type is safe. Don't warn for
6953 signed char because anyone who uses that must have done so
6954 deliberately. Furthermore, we reduce the false positive load by
6955 warning only for non-constant value of type char. */
6957 void
6958 warn_array_subscript_with_type_char (tree index)
6960 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
6961 && TREE_CODE (index) != INTEGER_CST)
6962 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
6965 /* Implement -Wparentheses for the unexpected C precedence rules, to
6966 cover cases like x + y << z which readers are likely to
6967 misinterpret. We have seen an expression in which CODE is a binary
6968 operator used to combine expressions headed by CODE_LEFT and
6969 CODE_RIGHT. CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
6970 means that that side of the expression was not formed using a
6971 binary operator, or it was enclosed in parentheses. */
6973 void
6974 warn_about_parentheses (enum tree_code code, enum tree_code code_left,
6975 enum tree_code code_right)
6977 if (!warn_parentheses)
6978 return;
6980 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
6982 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6983 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6984 warning (OPT_Wparentheses,
6985 "suggest parentheses around + or - inside shift");
6988 if (code == TRUTH_ORIF_EXPR)
6990 if (code_left == TRUTH_ANDIF_EXPR
6991 || code_right == TRUTH_ANDIF_EXPR)
6992 warning (OPT_Wparentheses,
6993 "suggest parentheses around && within ||");
6996 if (code == BIT_IOR_EXPR)
6998 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
6999 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
7000 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
7001 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7002 warning (OPT_Wparentheses,
7003 "suggest parentheses around arithmetic in operand of |");
7004 /* Check cases like x|y==z */
7005 if (TREE_CODE_CLASS (code_left) == tcc_comparison
7006 || TREE_CODE_CLASS (code_right) == tcc_comparison)
7007 warning (OPT_Wparentheses,
7008 "suggest parentheses around comparison in operand of |");
7011 if (code == BIT_XOR_EXPR)
7013 if (code_left == BIT_AND_EXPR
7014 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
7015 || code_right == BIT_AND_EXPR
7016 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7017 warning (OPT_Wparentheses,
7018 "suggest parentheses around arithmetic in operand of ^");
7019 /* Check cases like x^y==z */
7020 if (TREE_CODE_CLASS (code_left) == tcc_comparison
7021 || TREE_CODE_CLASS (code_right) == tcc_comparison)
7022 warning (OPT_Wparentheses,
7023 "suggest parentheses around comparison in operand of ^");
7026 if (code == BIT_AND_EXPR)
7028 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
7029 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
7030 warning (OPT_Wparentheses,
7031 "suggest parentheses around + or - in operand of &");
7032 /* Check cases like x&y==z */
7033 if (TREE_CODE_CLASS (code_left) == tcc_comparison
7034 || TREE_CODE_CLASS (code_right) == tcc_comparison)
7035 warning (OPT_Wparentheses,
7036 "suggest parentheses around comparison in operand of &");
7039 if (code == EQ_EXPR || code == NE_EXPR)
7041 if (TREE_CODE_CLASS (code_left) == tcc_comparison
7042 || TREE_CODE_CLASS (code_right) == tcc_comparison)
7043 warning (OPT_Wparentheses,
7044 "suggest parentheses around comparison in operand of %s",
7045 code == EQ_EXPR ? "==" : "!=");
7047 else if (TREE_CODE_CLASS (code) == tcc_comparison)
7049 if ((TREE_CODE_CLASS (code_left) == tcc_comparison
7050 && code_left != NE_EXPR && code_left != EQ_EXPR)
7051 || (TREE_CODE_CLASS (code_right) == tcc_comparison
7052 && code_right != NE_EXPR && code_right != EQ_EXPR))
7053 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
7054 "have their mathematical meaning");
7058 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
7060 void
7061 warn_for_unused_label (tree label)
7063 if (!TREE_USED (label))
7065 if (DECL_INITIAL (label))
7066 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
7067 else
7068 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
7072 #ifndef TARGET_HAS_TARGETCM
7073 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
7074 #endif
7076 /* Warn for division by zero according to the value of DIVISOR. */
7078 void
7079 warn_for_div_by_zero (tree divisor)
7081 /* If DIVISOR is zero, and has integral type, issue a warning about
7082 division by zero. Do not issue a warning if DIVISOR has a
7083 floating-point type, since we consider 0.0/0.0 a valid way of
7084 generating a NaN. */
7085 if (skip_evaluation == 0 && integer_zerop (divisor))
7086 warning (OPT_Wdiv_by_zero, "division by zero");
7089 #include "gt-c-common.h"