Fix 31018 -- move TARGET_xxx in i386.md to tuning options
[official-gcc.git] / gcc / c-common.c
blob36b87eba20620aae32c881b055c72d4d30910bb8
1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA. */
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "intl.h"
27 #include "tree.h"
28 #include "flags.h"
29 #include "output.h"
30 #include "c-pragma.h"
31 #include "rtl.h"
32 #include "ggc.h"
33 #include "varray.h"
34 #include "expr.h"
35 #include "c-common.h"
36 #include "diagnostic.h"
37 #include "tm_p.h"
38 #include "obstack.h"
39 #include "cpplib.h"
40 #include "target.h"
41 #include "langhooks.h"
42 #include "tree-inline.h"
43 #include "c-tree.h"
44 #include "toplev.h"
45 #include "tree-iterator.h"
46 #include "hashtab.h"
47 #include "tree-mudflap.h"
48 #include "opts.h"
49 #include "real.h"
50 #include "cgraph.h"
51 #include "target-def.h"
53 cpp_reader *parse_in; /* Declared in c-pragma.h. */
55 /* We let tm.h override the types used here, to handle trivial differences
56 such as the choice of unsigned int or long unsigned int for size_t.
57 When machines start needing nontrivial differences in the size type,
58 it would be best to do something here to figure out automatically
59 from other information what type to use. */
61 #ifndef SIZE_TYPE
62 #define SIZE_TYPE "long unsigned int"
63 #endif
65 #ifndef PID_TYPE
66 #define PID_TYPE "int"
67 #endif
69 #ifndef WCHAR_TYPE
70 #define WCHAR_TYPE "int"
71 #endif
73 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
74 #define MODIFIED_WCHAR_TYPE \
75 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
77 #ifndef PTRDIFF_TYPE
78 #define PTRDIFF_TYPE "long int"
79 #endif
81 #ifndef WINT_TYPE
82 #define WINT_TYPE "unsigned int"
83 #endif
85 #ifndef INTMAX_TYPE
86 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
87 ? "int" \
88 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
89 ? "long int" \
90 : "long long int"))
91 #endif
93 #ifndef UINTMAX_TYPE
94 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
95 ? "unsigned int" \
96 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
97 ? "long unsigned int" \
98 : "long long unsigned int"))
99 #endif
101 /* The following symbols are subsumed in the c_global_trees array, and
102 listed here individually for documentation purposes.
104 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
106 tree short_integer_type_node;
107 tree long_integer_type_node;
108 tree long_long_integer_type_node;
110 tree short_unsigned_type_node;
111 tree long_unsigned_type_node;
112 tree long_long_unsigned_type_node;
114 tree truthvalue_type_node;
115 tree truthvalue_false_node;
116 tree truthvalue_true_node;
118 tree ptrdiff_type_node;
120 tree unsigned_char_type_node;
121 tree signed_char_type_node;
122 tree wchar_type_node;
123 tree signed_wchar_type_node;
124 tree unsigned_wchar_type_node;
126 tree float_type_node;
127 tree double_type_node;
128 tree long_double_type_node;
130 tree complex_integer_type_node;
131 tree complex_float_type_node;
132 tree complex_double_type_node;
133 tree complex_long_double_type_node;
135 tree dfloat32_type_node;
136 tree dfloat64_type_node;
137 tree_dfloat128_type_node;
139 tree intQI_type_node;
140 tree intHI_type_node;
141 tree intSI_type_node;
142 tree intDI_type_node;
143 tree intTI_type_node;
145 tree unsigned_intQI_type_node;
146 tree unsigned_intHI_type_node;
147 tree unsigned_intSI_type_node;
148 tree unsigned_intDI_type_node;
149 tree unsigned_intTI_type_node;
151 tree widest_integer_literal_type_node;
152 tree widest_unsigned_literal_type_node;
154 Nodes for types `void *' and `const void *'.
156 tree ptr_type_node, const_ptr_type_node;
158 Nodes for types `char *' and `const char *'.
160 tree string_type_node, const_string_type_node;
162 Type `char[SOMENUMBER]'.
163 Used when an array of char is needed and the size is irrelevant.
165 tree char_array_type_node;
167 Type `int[SOMENUMBER]' or something like it.
168 Used when an array of int needed and the size is irrelevant.
170 tree int_array_type_node;
172 Type `wchar_t[SOMENUMBER]' or something like it.
173 Used when a wide string literal is created.
175 tree wchar_array_type_node;
177 Type `int ()' -- used for implicit declaration of functions.
179 tree default_function_type;
181 A VOID_TYPE node, packaged in a TREE_LIST.
183 tree void_list_node;
185 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
186 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
187 VAR_DECLS, but C++ does.)
189 tree function_name_decl_node;
190 tree pretty_function_name_decl_node;
191 tree c99_function_name_decl_node;
193 Stack of nested function name VAR_DECLs.
195 tree saved_function_name_decls;
199 tree c_global_trees[CTI_MAX];
201 /* Switches common to the C front ends. */
203 /* Nonzero if prepreprocessing only. */
205 int flag_preprocess_only;
207 /* Nonzero means don't output line number information. */
209 char flag_no_line_commands;
211 /* Nonzero causes -E output not to be done, but directives such as
212 #define that have side effects are still obeyed. */
214 char flag_no_output;
216 /* Nonzero means dump macros in some fashion. */
218 char flag_dump_macros;
220 /* Nonzero means pass #include lines through to the output. */
222 char flag_dump_includes;
224 /* Nonzero means process PCH files while preprocessing. */
226 bool flag_pch_preprocess;
228 /* The file name to which we should write a precompiled header, or
229 NULL if no header will be written in this compile. */
231 const char *pch_file;
233 /* Nonzero if an ISO standard was selected. It rejects macros in the
234 user's namespace. */
235 int flag_iso;
237 /* Nonzero if -undef was given. It suppresses target built-in macros
238 and assertions. */
239 int flag_undef;
241 /* Nonzero means don't recognize the non-ANSI builtin functions. */
243 int flag_no_builtin;
245 /* Nonzero means don't recognize the non-ANSI builtin functions.
246 -ansi sets this. */
248 int flag_no_nonansi_builtin;
250 /* Nonzero means give `double' the same size as `float'. */
252 int flag_short_double;
254 /* Nonzero means give `wchar_t' the same size as `short'. */
256 int flag_short_wchar;
258 /* Nonzero means allow implicit conversions between vectors with
259 differing numbers of subparts and/or differing element types. */
260 int flag_lax_vector_conversions;
262 /* Nonzero means allow Microsoft extensions without warnings or errors. */
263 int flag_ms_extensions;
265 /* Nonzero means don't recognize the keyword `asm'. */
267 int flag_no_asm;
269 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
271 int flag_signed_bitfields = 1;
273 /* Warn about #pragma directives that are not recognized. */
275 int warn_unknown_pragmas; /* Tri state variable. */
277 /* Warn about format/argument anomalies in calls to formatted I/O functions
278 (*printf, *scanf, strftime, strfmon, etc.). */
280 int warn_format;
282 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
283 with GCC this doesn't matter as __null is guaranteed to have the right
284 size. */
286 int warn_strict_null_sentinel;
288 /* Zero means that faster, ...NonNil variants of objc_msgSend...
289 calls will be used in ObjC; passing nil receivers to such calls
290 will most likely result in crashes. */
291 int flag_nil_receivers = 1;
293 /* Nonzero means that code generation will be altered to support
294 "zero-link" execution. This currently affects ObjC only, but may
295 affect other languages in the future. */
296 int flag_zero_link = 0;
298 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
299 unit. It will inform the ObjC runtime that class definition(s) herein
300 contained are to replace one(s) previously loaded. */
301 int flag_replace_objc_classes = 0;
303 /* C/ObjC language option variables. */
306 /* Nonzero means allow type mismatches in conditional expressions;
307 just make their values `void'. */
309 int flag_cond_mismatch;
311 /* Nonzero means enable C89 Amendment 1 features. */
313 int flag_isoc94;
315 /* Nonzero means use the ISO C99 dialect of C. */
317 int flag_isoc99;
319 /* Nonzero means that we have builtin functions, and main is an int. */
321 int flag_hosted = 1;
323 /* Warn if main is suspicious. */
325 int warn_main;
328 /* ObjC language option variables. */
331 /* Open and close the file for outputting class declarations, if
332 requested (ObjC). */
334 int flag_gen_declaration;
336 /* Tells the compiler that this is a special run. Do not perform any
337 compiling, instead we are to test some platform dependent features
338 and output a C header file with appropriate definitions. */
340 int print_struct_values;
342 /* Tells the compiler what is the constant string class for Objc. */
344 const char *constant_string_class_name;
347 /* C++ language option variables. */
350 /* Nonzero means don't recognize any extension keywords. */
352 int flag_no_gnu_keywords;
354 /* Nonzero means do emit exported implementations of functions even if
355 they can be inlined. */
357 int flag_implement_inlines = 1;
359 /* Nonzero means that implicit instantiations will be emitted if needed. */
361 int flag_implicit_templates = 1;
363 /* Nonzero means that implicit instantiations of inline templates will be
364 emitted if needed, even if instantiations of non-inline templates
365 aren't. */
367 int flag_implicit_inline_templates = 1;
369 /* Nonzero means generate separate instantiation control files and
370 juggle them at link time. */
372 int flag_use_repository;
374 /* Nonzero if we want to issue diagnostics that the standard says are not
375 required. */
377 int flag_optional_diags = 1;
379 /* Nonzero means we should attempt to elide constructors when possible. */
381 int flag_elide_constructors = 1;
383 /* Nonzero means that member functions defined in class scope are
384 inline by default. */
386 int flag_default_inline = 1;
388 /* Controls whether compiler generates 'type descriptor' that give
389 run-time type information. */
391 int flag_rtti = 1;
393 /* Nonzero if we want to conserve space in the .o files. We do this
394 by putting uninitialized data and runtime initialized data into
395 .common instead of .data at the expense of not flagging multiple
396 definitions. */
398 int flag_conserve_space;
400 /* Nonzero if we want to obey access control semantics. */
402 int flag_access_control = 1;
404 /* Nonzero if we want to check the return value of new and avoid calling
405 constructors if it is a null pointer. */
407 int flag_check_new;
409 /* Nonzero if we want to allow the use of experimental features that
410 are likely to become part of C++0x. */
412 int flag_cpp0x = 0;
414 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
415 initialization variables.
416 0: Old rules, set by -fno-for-scope.
417 2: New ISO rules, set by -ffor-scope.
418 1: Try to implement new ISO rules, but with backup compatibility
419 (and warnings). This is the default, for now. */
421 int flag_new_for_scope = 1;
423 /* Nonzero if we want to emit defined symbols with common-like linkage as
424 weak symbols where possible, in order to conform to C++ semantics.
425 Otherwise, emit them as local symbols. */
427 int flag_weak = 1;
429 /* 0 means we want the preprocessor to not emit line directives for
430 the current working directory. 1 means we want it to do it. -1
431 means we should decide depending on whether debugging information
432 is being emitted or not. */
434 int flag_working_directory = -1;
436 /* Nonzero to use __cxa_atexit, rather than atexit, to register
437 destructors for local statics and global objects. '2' means it has been
438 set nonzero as a default, not by a command-line flag. */
440 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
442 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
443 code. '2' means it has not been set explicitly on the command line. */
445 int flag_use_cxa_get_exception_ptr = 2;
447 /* Nonzero means make the default pedwarns warnings instead of errors.
448 The value of this flag is ignored if -pedantic is specified. */
450 int flag_permissive;
452 /* Nonzero means to implement standard semantics for exception
453 specifications, calling unexpected if an exception is thrown that
454 doesn't match the specification. Zero means to treat them as
455 assertions and optimize accordingly, but not check them. */
457 int flag_enforce_eh_specs = 1;
459 /* Nonzero means to generate thread-safe code for initializing local
460 statics. */
462 int flag_threadsafe_statics = 1;
464 /* Nonzero means warn about implicit declarations. */
466 int warn_implicit = 1;
468 /* Maximum template instantiation depth. This limit is rather
469 arbitrary, but it exists to limit the time it takes to notice
470 infinite template instantiations. */
472 int max_tinst_depth = 500;
476 /* The elements of `ridpointers' are identifier nodes for the reserved
477 type names and storage classes. It is indexed by a RID_... value. */
478 tree *ridpointers;
480 tree (*make_fname_decl) (tree, int);
482 /* Nonzero means the expression being parsed will never be evaluated.
483 This is a count, since unevaluated expressions can nest. */
484 int skip_evaluation;
486 /* Information about how a function name is generated. */
487 struct fname_var_t
489 tree *const decl; /* pointer to the VAR_DECL. */
490 const unsigned rid; /* RID number for the identifier. */
491 const int pretty; /* How pretty is it? */
494 /* The three ways of getting then name of the current function. */
496 const struct fname_var_t fname_vars[] =
498 /* C99 compliant __func__, must be first. */
499 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
500 /* GCC __FUNCTION__ compliant. */
501 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
502 /* GCC __PRETTY_FUNCTION__ compliant. */
503 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
504 {NULL, 0, 0},
507 static tree check_case_value (tree);
508 static bool check_case_bounds (tree, tree, tree *, tree *);
510 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
511 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
512 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
513 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
514 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
515 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
516 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
517 static tree handle_always_inline_attribute (tree *, tree, tree, int,
518 bool *);
519 static tree handle_gnu_inline_attribute (tree *, tree, tree, int,
520 bool *);
521 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
522 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
523 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
524 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
525 bool *);
526 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_transparent_union_attribute (tree *, tree, tree,
528 int, bool *);
529 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
530 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
532 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
533 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
534 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
535 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
536 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
537 static tree handle_visibility_attribute (tree *, tree, tree, int,
538 bool *);
539 static tree handle_tls_model_attribute (tree *, tree, tree, int,
540 bool *);
541 static tree handle_no_instrument_function_attribute (tree *, tree,
542 tree, int, bool *);
543 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
544 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
545 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
546 bool *);
547 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
548 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
549 static tree handle_deprecated_attribute (tree *, tree, tree, int,
550 bool *);
551 static tree handle_vector_size_attribute (tree *, tree, tree, int,
552 bool *);
553 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
554 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
555 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
556 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
557 bool *);
558 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
560 static void check_function_nonnull (tree, int, tree *);
561 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
562 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
563 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
564 static int resort_field_decl_cmp (const void *, const void *);
566 /* Table of machine-independent attributes common to all C-like languages. */
567 const struct attribute_spec c_common_attribute_table[] =
569 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
570 { "packed", 0, 0, false, false, false,
571 handle_packed_attribute },
572 { "nocommon", 0, 0, true, false, false,
573 handle_nocommon_attribute },
574 { "common", 0, 0, true, false, false,
575 handle_common_attribute },
576 /* FIXME: logically, noreturn attributes should be listed as
577 "false, true, true" and apply to function types. But implementing this
578 would require all the places in the compiler that use TREE_THIS_VOLATILE
579 on a decl to identify non-returning functions to be located and fixed
580 to check the function type instead. */
581 { "noreturn", 0, 0, true, false, false,
582 handle_noreturn_attribute },
583 { "volatile", 0, 0, true, false, false,
584 handle_noreturn_attribute },
585 { "noinline", 0, 0, true, false, false,
586 handle_noinline_attribute },
587 { "always_inline", 0, 0, true, false, false,
588 handle_always_inline_attribute },
589 { "gnu_inline", 0, 0, true, false, false,
590 handle_gnu_inline_attribute },
591 { "flatten", 0, 0, true, false, false,
592 handle_flatten_attribute },
593 { "used", 0, 0, true, false, false,
594 handle_used_attribute },
595 { "unused", 0, 0, false, false, false,
596 handle_unused_attribute },
597 { "externally_visible", 0, 0, true, false, false,
598 handle_externally_visible_attribute },
599 /* The same comments as for noreturn attributes apply to const ones. */
600 { "const", 0, 0, true, false, false,
601 handle_const_attribute },
602 { "transparent_union", 0, 0, false, false, false,
603 handle_transparent_union_attribute },
604 { "constructor", 0, 1, true, false, false,
605 handle_constructor_attribute },
606 { "destructor", 0, 1, true, false, false,
607 handle_destructor_attribute },
608 { "mode", 1, 1, false, true, false,
609 handle_mode_attribute },
610 { "section", 1, 1, true, false, false,
611 handle_section_attribute },
612 { "aligned", 0, 1, false, false, false,
613 handle_aligned_attribute },
614 { "weak", 0, 0, true, false, false,
615 handle_weak_attribute },
616 { "alias", 1, 1, true, false, false,
617 handle_alias_attribute },
618 { "weakref", 0, 1, true, false, false,
619 handle_weakref_attribute },
620 { "no_instrument_function", 0, 0, true, false, false,
621 handle_no_instrument_function_attribute },
622 { "malloc", 0, 0, true, false, false,
623 handle_malloc_attribute },
624 { "returns_twice", 0, 0, true, false, false,
625 handle_returns_twice_attribute },
626 { "no_stack_limit", 0, 0, true, false, false,
627 handle_no_limit_stack_attribute },
628 { "pure", 0, 0, true, false, false,
629 handle_pure_attribute },
630 /* For internal use (marking of builtins) only. The name contains space
631 to prevent its usage in source code. */
632 { "no vops", 0, 0, true, false, false,
633 handle_novops_attribute },
634 { "deprecated", 0, 0, false, false, false,
635 handle_deprecated_attribute },
636 { "vector_size", 1, 1, false, true, false,
637 handle_vector_size_attribute },
638 { "visibility", 1, 1, false, false, false,
639 handle_visibility_attribute },
640 { "tls_model", 1, 1, true, false, false,
641 handle_tls_model_attribute },
642 { "nonnull", 0, -1, false, true, true,
643 handle_nonnull_attribute },
644 { "nothrow", 0, 0, true, false, false,
645 handle_nothrow_attribute },
646 { "may_alias", 0, 0, false, true, false, NULL },
647 { "cleanup", 1, 1, true, false, false,
648 handle_cleanup_attribute },
649 { "warn_unused_result", 0, 0, false, true, true,
650 handle_warn_unused_result_attribute },
651 { "sentinel", 0, 1, false, true, true,
652 handle_sentinel_attribute },
653 { "cold", 0, 0, true, false, false,
654 handle_cold_attribute },
655 { "hot", 0, 0, true, false, false,
656 handle_hot_attribute },
657 { NULL, 0, 0, false, false, false, NULL }
660 /* Give the specifications for the format attributes, used by C and all
661 descendants. */
663 const struct attribute_spec c_common_format_attribute_table[] =
665 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
666 { "format", 3, 3, false, true, true,
667 handle_format_attribute },
668 { "format_arg", 1, 1, false, true, true,
669 handle_format_arg_attribute },
670 { NULL, 0, 0, false, false, false, NULL }
673 /* Functions called automatically at the beginning and end of execution. */
675 tree static_ctors;
676 tree static_dtors;
678 /* Push current bindings for the function name VAR_DECLS. */
680 void
681 start_fname_decls (void)
683 unsigned ix;
684 tree saved = NULL_TREE;
686 for (ix = 0; fname_vars[ix].decl; ix++)
688 tree decl = *fname_vars[ix].decl;
690 if (decl)
692 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
693 *fname_vars[ix].decl = NULL_TREE;
696 if (saved || saved_function_name_decls)
697 /* Normally they'll have been NULL, so only push if we've got a
698 stack, or they are non-NULL. */
699 saved_function_name_decls = tree_cons (saved, NULL_TREE,
700 saved_function_name_decls);
703 /* Finish up the current bindings, adding them into the current function's
704 statement tree. This must be done _before_ finish_stmt_tree is called.
705 If there is no current function, we must be at file scope and no statements
706 are involved. Pop the previous bindings. */
708 void
709 finish_fname_decls (void)
711 unsigned ix;
712 tree stmts = NULL_TREE;
713 tree stack = saved_function_name_decls;
715 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
716 append_to_statement_list (TREE_VALUE (stack), &stmts);
718 if (stmts)
720 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
722 if (TREE_CODE (*bodyp) == BIND_EXPR)
723 bodyp = &BIND_EXPR_BODY (*bodyp);
725 append_to_statement_list_force (*bodyp, &stmts);
726 *bodyp = stmts;
729 for (ix = 0; fname_vars[ix].decl; ix++)
730 *fname_vars[ix].decl = NULL_TREE;
732 if (stack)
734 /* We had saved values, restore them. */
735 tree saved;
737 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
739 tree decl = TREE_PURPOSE (saved);
740 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
742 *fname_vars[ix].decl = decl;
744 stack = TREE_CHAIN (stack);
746 saved_function_name_decls = stack;
749 /* Return the text name of the current function, suitably prettified
750 by PRETTY_P. Return string must be freed by caller. */
752 const char *
753 fname_as_string (int pretty_p)
755 const char *name = "top level";
756 char *namep;
757 int vrb = 2;
759 if (!pretty_p)
761 name = "";
762 vrb = 0;
765 if (current_function_decl)
766 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
768 if (c_lex_string_translate)
770 int len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
771 cpp_string cstr = { 0, 0 }, strname;
773 namep = XNEWVEC (char, len);
774 snprintf (namep, len, "\"%s\"", name);
775 strname.text = (unsigned char *) namep;
776 strname.len = len - 1;
778 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
780 XDELETEVEC (namep);
781 return (char *) cstr.text;
784 else
785 namep = xstrdup (name);
787 return namep;
790 /* Expand DECL if it declares an entity not handled by the
791 common code. */
794 c_expand_decl (tree decl)
796 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
798 /* Let the back-end know about this variable. */
799 if (!anon_aggr_type_p (TREE_TYPE (decl)))
800 emit_local_var (decl);
801 else
802 expand_anon_union_decl (decl, NULL_TREE,
803 DECL_ANON_UNION_ELEMS (decl));
805 else
806 return 0;
808 return 1;
812 /* Return the VAR_DECL for a const char array naming the current
813 function. If the VAR_DECL has not yet been created, create it
814 now. RID indicates how it should be formatted and IDENTIFIER_NODE
815 ID is its name (unfortunately C and C++ hold the RID values of
816 keywords in different places, so we can't derive RID from ID in
817 this language independent code. */
819 tree
820 fname_decl (unsigned int rid, tree id)
822 unsigned ix;
823 tree decl = NULL_TREE;
825 for (ix = 0; fname_vars[ix].decl; ix++)
826 if (fname_vars[ix].rid == rid)
827 break;
829 decl = *fname_vars[ix].decl;
830 if (!decl)
832 /* If a tree is built here, it would normally have the lineno of
833 the current statement. Later this tree will be moved to the
834 beginning of the function and this line number will be wrong.
835 To avoid this problem set the lineno to 0 here; that prevents
836 it from appearing in the RTL. */
837 tree stmts;
838 location_t saved_location = input_location;
839 #ifdef USE_MAPPED_LOCATION
840 input_location = UNKNOWN_LOCATION;
841 #else
842 input_line = 0;
843 #endif
845 stmts = push_stmt_list ();
846 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
847 stmts = pop_stmt_list (stmts);
848 if (!IS_EMPTY_STMT (stmts))
849 saved_function_name_decls
850 = tree_cons (decl, stmts, saved_function_name_decls);
851 *fname_vars[ix].decl = decl;
852 input_location = saved_location;
854 if (!ix && !current_function_decl)
855 pedwarn ("%qD is not defined outside of function scope", decl);
857 return decl;
860 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
862 tree
863 fix_string_type (tree value)
865 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
866 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
867 int length = TREE_STRING_LENGTH (value);
868 int nchars;
869 tree e_type, i_type, a_type;
871 /* Compute the number of elements, for the array type. */
872 nchars = wide_flag ? length / wchar_bytes : length;
874 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
875 limit in C++98 Annex B is very large (65536) and is not normative,
876 so we do not diagnose it (warn_overlength_strings is forced off
877 in c_common_post_options). */
878 if (warn_overlength_strings)
880 const int nchars_max = flag_isoc99 ? 4095 : 509;
881 const int relevant_std = flag_isoc99 ? 99 : 90;
882 if (nchars - 1 > nchars_max)
883 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
884 separate the %d from the 'C'. 'ISO' should not be
885 translated, but it may be moved after 'C%d' in languages
886 where modifiers follow nouns. */
887 pedwarn ("string length %qd is greater than the length %qd "
888 "ISO C%d compilers are required to support",
889 nchars - 1, nchars_max, relevant_std);
892 /* Create the array type for the string constant. The ISO C++
893 standard says that a string literal has type `const char[N]' or
894 `const wchar_t[N]'. We use the same logic when invoked as a C
895 front-end with -Wwrite-strings.
896 ??? We should change the type of an expression depending on the
897 state of a warning flag. We should just be warning -- see how
898 this is handled in the C++ front-end for the deprecated implicit
899 conversion from string literals to `char*' or `wchar_t*'.
901 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
902 array type being the unqualified version of that type.
903 Therefore, if we are constructing an array of const char, we must
904 construct the matching unqualified array type first. The C front
905 end does not require this, but it does no harm, so we do it
906 unconditionally. */
907 e_type = wide_flag ? wchar_type_node : char_type_node;
908 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
909 a_type = build_array_type (e_type, i_type);
910 if (c_dialect_cxx() || warn_write_strings)
911 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
913 TREE_TYPE (value) = a_type;
914 TREE_CONSTANT (value) = 1;
915 TREE_INVARIANT (value) = 1;
916 TREE_READONLY (value) = 1;
917 TREE_STATIC (value) = 1;
918 return value;
921 /* Print a warning if a constant expression had overflow in folding.
922 Invoke this function on every expression that the language
923 requires to be a constant expression.
924 Note the ANSI C standard says it is erroneous for a
925 constant expression to overflow. */
927 void
928 constant_expression_warning (tree value)
930 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
931 || TREE_CODE (value) == VECTOR_CST
932 || TREE_CODE (value) == COMPLEX_CST)
933 && TREE_OVERFLOW (value)
934 && warn_overflow
935 && pedantic)
936 pedwarn ("overflow in constant expression");
939 /* Print a warning if an expression had overflow in folding and its
940 operands hadn't.
942 Invoke this function on every expression that
943 (1) appears in the source code, and
944 (2) is a constant expression that overflowed, and
945 (3) is not already checked by convert_and_check;
946 however, do not invoke this function on operands of explicit casts
947 or when the expression is the result of an operator and any operand
948 already overflowed. */
950 void
951 overflow_warning (tree value)
953 if (skip_evaluation) return;
955 switch (TREE_CODE (value))
957 case INTEGER_CST:
958 warning (OPT_Woverflow, "integer overflow in expression");
959 break;
961 case REAL_CST:
962 warning (OPT_Woverflow, "floating point overflow in expression");
963 break;
965 case VECTOR_CST:
966 warning (OPT_Woverflow, "vector overflow in expression");
967 break;
969 case COMPLEX_CST:
970 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
971 warning (OPT_Woverflow, "complex integer overflow in expression");
972 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
973 warning (OPT_Woverflow, "complex floating point overflow in expression");
974 break;
976 default:
977 break;
982 /* Warn about use of a logical || / && operator being used in a
983 context where it is likely that the bitwise equivalent was intended
984 by the programmer. CODE is the TREE_CODE of the operator, ARG1
985 and ARG2 the arguments. */
987 void
988 warn_logical_operator (enum tree_code code, tree arg1, tree
989 arg2)
991 switch (code)
993 case TRUTH_ANDIF_EXPR:
994 case TRUTH_ORIF_EXPR:
995 case TRUTH_OR_EXPR:
996 case TRUTH_AND_EXPR:
997 if (!TREE_NO_WARNING (arg1)
998 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
999 && !CONSTANT_CLASS_P (arg1)
1000 && TREE_CODE (arg2) == INTEGER_CST
1001 && !integer_zerop (arg2))
1003 warning (OPT_Wlogical_op,
1004 "logical %<%s%> with non-zero constant "
1005 "will always evaluate as true",
1006 ((code == TRUTH_ANDIF_EXPR)
1007 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1008 TREE_NO_WARNING (arg1) = true;
1010 break;
1011 default:
1012 break;
1017 /* Print a warning about casts that might indicate violation
1018 of strict aliasing rules if -Wstrict-aliasing is used and
1019 strict aliasing mode is in effect. OTYPE is the original
1020 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1022 void
1023 strict_aliasing_warning (tree otype, tree type, tree expr)
1025 if (flag_strict_aliasing && warn_strict_aliasing
1026 && POINTER_TYPE_P (type) && POINTER_TYPE_P (otype)
1027 && TREE_CODE (expr) == ADDR_EXPR
1028 && (DECL_P (TREE_OPERAND (expr, 0))
1029 || handled_component_p (TREE_OPERAND (expr, 0)))
1030 && !VOID_TYPE_P (TREE_TYPE (type)))
1032 /* Casting the address of an object to non void pointer. Warn
1033 if the cast breaks type based aliasing. */
1034 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
1035 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1036 "might break strict-aliasing rules");
1037 else
1039 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1040 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
1042 if (!alias_sets_conflict_p (set1, set2))
1043 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1044 "pointer will break strict-aliasing rules");
1045 else if (warn_strict_aliasing > 1
1046 && !alias_sets_might_conflict_p (set1, set2))
1047 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1048 "pointer might break strict-aliasing rules");
1053 /* Print a warning about if (); or if () .. else; constructs
1054 via the special empty statement node that we create. INNER_THEN
1055 and INNER_ELSE are the statement lists of the if and the else
1056 block. */
1058 void
1059 empty_if_body_warning (tree inner_then, tree inner_else)
1061 if (TREE_CODE (inner_then) == STATEMENT_LIST
1062 && STATEMENT_LIST_TAIL (inner_then))
1063 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1065 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1066 && STATEMENT_LIST_TAIL (inner_else))
1067 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1069 if (IS_EMPTY_STMT (inner_then) && !inner_else)
1070 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1071 "in an %<if%> statement", EXPR_LOCUS (inner_then));
1073 else if (inner_else && IS_EMPTY_STMT (inner_else))
1074 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1075 "in an %<else%> statement", EXPR_LOCUS (inner_else));
1078 /* Warn for unlikely, improbable, or stupid DECL declarations
1079 of `main'. */
1081 void
1082 check_main_parameter_types (tree decl)
1084 tree args;
1085 int argct = 0;
1087 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1088 args = TREE_CHAIN (args))
1090 tree type = args ? TREE_VALUE (args) : 0;
1092 if (type == void_type_node || type == error_mark_node )
1093 break;
1095 ++argct;
1096 switch (argct)
1098 case 1:
1099 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1100 pedwarn ("first argument of %q+D should be %<int%>", decl);
1101 break;
1103 case 2:
1104 if (TREE_CODE (type) != POINTER_TYPE
1105 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1106 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1107 != char_type_node))
1108 pedwarn ("second argument of %q+D should be %<char **%>",
1109 decl);
1110 break;
1112 case 3:
1113 if (TREE_CODE (type) != POINTER_TYPE
1114 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1115 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1116 != char_type_node))
1117 pedwarn ("third argument of %q+D should probably be "
1118 "%<char **%>", decl);
1119 break;
1123 /* It is intentional that this message does not mention the third
1124 argument because it's only mentioned in an appendix of the
1125 standard. */
1126 if (argct > 0 && (argct < 2 || argct > 3))
1127 pedwarn ("%q+D takes only zero or two arguments", decl);
1130 /* True if vector types T1 and T2 can be converted to each other
1131 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1132 can only be converted with -flax-vector-conversions yet that is not
1133 in effect, emit a note telling the user about that option if such
1134 a note has not previously been emitted. */
1135 bool
1136 vector_types_convertible_p (tree t1, tree t2, bool emit_lax_note)
1138 static bool emitted_lax_note = false;
1139 bool convertible_lax;
1141 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1142 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1143 return true;
1145 convertible_lax =
1146 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1147 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1148 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1149 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1150 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1152 if (!convertible_lax || flag_lax_vector_conversions)
1153 return convertible_lax;
1155 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1156 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2)))
1157 return true;
1159 if (emit_lax_note && !emitted_lax_note)
1161 emitted_lax_note = true;
1162 inform ("use -flax-vector-conversions to permit "
1163 "conversions between vectors with differing "
1164 "element types or numbers of subparts");
1167 return false;
1170 /* Warns if the conversion of EXPR to TYPE may alter a value.
1171 This function is called from convert_and_check. */
1173 static void
1174 conversion_warning (tree type, tree expr)
1176 bool give_warning = false;
1178 unsigned int formal_prec = TYPE_PRECISION (type);
1180 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1182 /* Warn for real constant that is not an exact integer converted
1183 to integer type. */
1184 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1185 && TREE_CODE (type) == INTEGER_TYPE)
1187 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1188 give_warning = true;
1190 /* Warn for an integer constant that does not fit into integer type. */
1191 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1192 && TREE_CODE (type) == INTEGER_TYPE
1193 && !int_fits_type_p (expr, type))
1195 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1196 warning (OPT_Wconversion,
1197 "negative integer implicitly converted to unsigned type");
1198 else
1199 give_warning = true;
1201 else if (TREE_CODE (type) == REAL_TYPE)
1203 /* Warn for an integer constant that does not fit into real type. */
1204 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1206 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1207 if (!exact_real_truncate (TYPE_MODE (type), &a))
1208 give_warning = true;
1210 /* Warn for a real constant that does not fit into a smaller
1211 real type. */
1212 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1213 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1215 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1216 if (!exact_real_truncate (TYPE_MODE (type), &a))
1217 give_warning = true;
1221 if (give_warning)
1222 warning (OPT_Wconversion,
1223 "conversion to %qT alters %qT constant value",
1224 type, TREE_TYPE (expr));
1226 else /* 'expr' is not a constant. */
1228 /* Warn for real types converted to integer types. */
1229 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1230 && TREE_CODE (type) == INTEGER_TYPE)
1231 give_warning = true;
1233 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1234 && TREE_CODE (type) == INTEGER_TYPE)
1236 /* Warn for integer types converted to smaller integer types. */
1237 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr))
1238 /* When they are the same width but different signedness,
1239 then the value may change. */
1240 || (formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1241 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1242 /* Even when converted to a bigger type, if the type is
1243 unsigned but expr is signed, then negative values
1244 will be changed. */
1245 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1246 give_warning = true;
1249 /* Warn for integer types converted to real types if and only if
1250 all the range of values of the integer type cannot be
1251 represented by the real type. */
1252 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1253 && TREE_CODE (type) == REAL_TYPE)
1255 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1256 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1257 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1258 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1260 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1261 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1262 give_warning = true;
1265 /* Warn for real types converted to smaller real types. */
1266 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1267 && TREE_CODE (type) == REAL_TYPE
1268 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1269 give_warning = true;
1272 if (give_warning)
1273 warning (OPT_Wconversion,
1274 "conversion to %qT from %qT may alter its value",
1275 type, TREE_TYPE (expr));
1279 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1280 Invoke this function on every expression that is converted implicitly,
1281 i.e. because of language rules and not because of an explicit cast. */
1283 tree
1284 convert_and_check (tree type, tree expr)
1286 tree result;
1288 if (TREE_TYPE (expr) == type)
1289 return expr;
1291 result = convert (type, expr);
1293 if (skip_evaluation || TREE_OVERFLOW_P (expr))
1294 return result;
1296 if (TREE_CODE (expr) == INTEGER_CST
1297 && (TREE_CODE (type) == INTEGER_TYPE
1298 || TREE_CODE (type) == ENUMERAL_TYPE)
1299 && !int_fits_type_p (expr, type))
1301 /* Do not diagnose overflow in a constant expression merely
1302 because a conversion overflowed. */
1303 if (TREE_OVERFLOW (result))
1304 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1306 if (TYPE_UNSIGNED (type))
1308 /* This detects cases like converting -129 or 256 to
1309 unsigned char. */
1310 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1311 warning (OPT_Woverflow,
1312 "large integer implicitly truncated to unsigned type");
1313 else if (warn_conversion)
1314 conversion_warning (type, expr);
1316 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
1317 warning (OPT_Woverflow,
1318 "overflow in implicit constant conversion");
1319 /* No warning for converting 0x80000000 to int. */
1320 else if (pedantic
1321 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1322 || TYPE_PRECISION (TREE_TYPE (expr))
1323 != TYPE_PRECISION (type)))
1324 warning (OPT_Woverflow,
1325 "overflow in implicit constant conversion");
1327 else if (warn_conversion)
1328 conversion_warning (type, expr);
1330 else if (TREE_CODE (result) == INTEGER_CST && TREE_OVERFLOW (result))
1331 warning (OPT_Woverflow,
1332 "overflow in implicit constant conversion");
1333 else if (warn_conversion)
1334 conversion_warning (type, expr);
1336 return result;
1339 /* A node in a list that describes references to variables (EXPR), which are
1340 either read accesses if WRITER is zero, or write accesses, in which case
1341 WRITER is the parent of EXPR. */
1342 struct tlist
1344 struct tlist *next;
1345 tree expr, writer;
1348 /* Used to implement a cache the results of a call to verify_tree. We only
1349 use this for SAVE_EXPRs. */
1350 struct tlist_cache
1352 struct tlist_cache *next;
1353 struct tlist *cache_before_sp;
1354 struct tlist *cache_after_sp;
1355 tree expr;
1358 /* Obstack to use when allocating tlist structures, and corresponding
1359 firstobj. */
1360 static struct obstack tlist_obstack;
1361 static char *tlist_firstobj = 0;
1363 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1364 warnings. */
1365 static struct tlist *warned_ids;
1366 /* SAVE_EXPRs need special treatment. We process them only once and then
1367 cache the results. */
1368 static struct tlist_cache *save_expr_cache;
1370 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1371 static void merge_tlist (struct tlist **, struct tlist *, int);
1372 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1373 static int warning_candidate_p (tree);
1374 static void warn_for_collisions (struct tlist *);
1375 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1376 static struct tlist *new_tlist (struct tlist *, tree, tree);
1378 /* Create a new struct tlist and fill in its fields. */
1379 static struct tlist *
1380 new_tlist (struct tlist *next, tree t, tree writer)
1382 struct tlist *l;
1383 l = XOBNEW (&tlist_obstack, struct tlist);
1384 l->next = next;
1385 l->expr = t;
1386 l->writer = writer;
1387 return l;
1390 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1391 is nonnull, we ignore any node we find which has a writer equal to it. */
1393 static void
1394 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1396 while (add)
1398 struct tlist *next = add->next;
1399 if (!copy)
1400 add->next = *to;
1401 if (!exclude_writer || add->writer != exclude_writer)
1402 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1403 add = next;
1407 /* Merge the nodes of ADD into TO. This merging process is done so that for
1408 each variable that already exists in TO, no new node is added; however if
1409 there is a write access recorded in ADD, and an occurrence on TO is only
1410 a read access, then the occurrence in TO will be modified to record the
1411 write. */
1413 static void
1414 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1416 struct tlist **end = to;
1418 while (*end)
1419 end = &(*end)->next;
1421 while (add)
1423 int found = 0;
1424 struct tlist *tmp2;
1425 struct tlist *next = add->next;
1427 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1428 if (tmp2->expr == add->expr)
1430 found = 1;
1431 if (!tmp2->writer)
1432 tmp2->writer = add->writer;
1434 if (!found)
1436 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1437 end = &(*end)->next;
1438 *end = 0;
1440 add = next;
1444 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1445 references in list LIST conflict with it, excluding reads if ONLY writers
1446 is nonzero. */
1448 static void
1449 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1450 int only_writes)
1452 struct tlist *tmp;
1454 /* Avoid duplicate warnings. */
1455 for (tmp = warned_ids; tmp; tmp = tmp->next)
1456 if (tmp->expr == written)
1457 return;
1459 while (list)
1461 if (list->expr == written
1462 && list->writer != writer
1463 && (!only_writes || list->writer)
1464 && DECL_NAME (list->expr))
1466 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1467 warning (0, "operation on %qE may be undefined", list->expr);
1469 list = list->next;
1473 /* Given a list LIST of references to variables, find whether any of these
1474 can cause conflicts due to missing sequence points. */
1476 static void
1477 warn_for_collisions (struct tlist *list)
1479 struct tlist *tmp;
1481 for (tmp = list; tmp; tmp = tmp->next)
1483 if (tmp->writer)
1484 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1488 /* Return nonzero if X is a tree that can be verified by the sequence point
1489 warnings. */
1490 static int
1491 warning_candidate_p (tree x)
1493 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1496 /* Walk the tree X, and record accesses to variables. If X is written by the
1497 parent tree, WRITER is the parent.
1498 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1499 expression or its only operand forces a sequence point, then everything up
1500 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1501 in PNO_SP.
1502 Once we return, we will have emitted warnings if any subexpression before
1503 such a sequence point could be undefined. On a higher level, however, the
1504 sequence point may not be relevant, and we'll merge the two lists.
1506 Example: (b++, a) + b;
1507 The call that processes the COMPOUND_EXPR will store the increment of B
1508 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1509 processes the PLUS_EXPR will need to merge the two lists so that
1510 eventually, all accesses end up on the same list (and we'll warn about the
1511 unordered subexpressions b++ and b.
1513 A note on merging. If we modify the former example so that our expression
1514 becomes
1515 (b++, b) + a
1516 care must be taken not simply to add all three expressions into the final
1517 PNO_SP list. The function merge_tlist takes care of that by merging the
1518 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1519 way, so that no more than one access to B is recorded. */
1521 static void
1522 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1523 tree writer)
1525 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1526 enum tree_code code;
1527 enum tree_code_class cl;
1529 /* X may be NULL if it is the operand of an empty statement expression
1530 ({ }). */
1531 if (x == NULL)
1532 return;
1534 restart:
1535 code = TREE_CODE (x);
1536 cl = TREE_CODE_CLASS (code);
1538 if (warning_candidate_p (x))
1540 *pno_sp = new_tlist (*pno_sp, x, writer);
1541 return;
1544 switch (code)
1546 case CONSTRUCTOR:
1547 return;
1549 case COMPOUND_EXPR:
1550 case TRUTH_ANDIF_EXPR:
1551 case TRUTH_ORIF_EXPR:
1552 tmp_before = tmp_nosp = tmp_list3 = 0;
1553 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1554 warn_for_collisions (tmp_nosp);
1555 merge_tlist (pbefore_sp, tmp_before, 0);
1556 merge_tlist (pbefore_sp, tmp_nosp, 0);
1557 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1558 merge_tlist (pbefore_sp, tmp_list3, 0);
1559 return;
1561 case COND_EXPR:
1562 tmp_before = tmp_list2 = 0;
1563 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1564 warn_for_collisions (tmp_list2);
1565 merge_tlist (pbefore_sp, tmp_before, 0);
1566 merge_tlist (pbefore_sp, tmp_list2, 1);
1568 tmp_list3 = tmp_nosp = 0;
1569 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1570 warn_for_collisions (tmp_nosp);
1571 merge_tlist (pbefore_sp, tmp_list3, 0);
1573 tmp_list3 = tmp_list2 = 0;
1574 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1575 warn_for_collisions (tmp_list2);
1576 merge_tlist (pbefore_sp, tmp_list3, 0);
1577 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1578 two first, to avoid warning for (a ? b++ : b++). */
1579 merge_tlist (&tmp_nosp, tmp_list2, 0);
1580 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1581 return;
1583 case PREDECREMENT_EXPR:
1584 case PREINCREMENT_EXPR:
1585 case POSTDECREMENT_EXPR:
1586 case POSTINCREMENT_EXPR:
1587 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1588 return;
1590 case MODIFY_EXPR:
1591 tmp_before = tmp_nosp = tmp_list3 = 0;
1592 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1593 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1594 /* Expressions inside the LHS are not ordered wrt. the sequence points
1595 in the RHS. Example:
1596 *a = (a++, 2)
1597 Despite the fact that the modification of "a" is in the before_sp
1598 list (tmp_before), it conflicts with the use of "a" in the LHS.
1599 We can handle this by adding the contents of tmp_list3
1600 to those of tmp_before, and redoing the collision warnings for that
1601 list. */
1602 add_tlist (&tmp_before, tmp_list3, x, 1);
1603 warn_for_collisions (tmp_before);
1604 /* Exclude the LHS itself here; we first have to merge it into the
1605 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1606 didn't exclude the LHS, we'd get it twice, once as a read and once
1607 as a write. */
1608 add_tlist (pno_sp, tmp_list3, x, 0);
1609 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1611 merge_tlist (pbefore_sp, tmp_before, 0);
1612 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1613 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1614 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1615 return;
1617 case CALL_EXPR:
1618 /* We need to warn about conflicts among arguments and conflicts between
1619 args and the function address. Side effects of the function address,
1620 however, are not ordered by the sequence point of the call. */
1622 call_expr_arg_iterator iter;
1623 tree arg;
1624 tmp_before = tmp_nosp = 0;
1625 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1626 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1628 tmp_list2 = tmp_list3 = 0;
1629 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1630 merge_tlist (&tmp_list3, tmp_list2, 0);
1631 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1633 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1634 warn_for_collisions (tmp_before);
1635 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1636 return;
1639 case TREE_LIST:
1640 /* Scan all the list, e.g. indices of multi dimensional array. */
1641 while (x)
1643 tmp_before = tmp_nosp = 0;
1644 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1645 merge_tlist (&tmp_nosp, tmp_before, 0);
1646 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1647 x = TREE_CHAIN (x);
1649 return;
1651 case SAVE_EXPR:
1653 struct tlist_cache *t;
1654 for (t = save_expr_cache; t; t = t->next)
1655 if (t->expr == x)
1656 break;
1658 if (!t)
1660 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1661 t->next = save_expr_cache;
1662 t->expr = x;
1663 save_expr_cache = t;
1665 tmp_before = tmp_nosp = 0;
1666 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1667 warn_for_collisions (tmp_nosp);
1669 tmp_list3 = 0;
1670 while (tmp_nosp)
1672 struct tlist *t = tmp_nosp;
1673 tmp_nosp = t->next;
1674 merge_tlist (&tmp_list3, t, 0);
1676 t->cache_before_sp = tmp_before;
1677 t->cache_after_sp = tmp_list3;
1679 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1680 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1681 return;
1684 default:
1685 /* For other expressions, simply recurse on their operands.
1686 Manual tail recursion for unary expressions.
1687 Other non-expressions need not be processed. */
1688 if (cl == tcc_unary)
1690 x = TREE_OPERAND (x, 0);
1691 writer = 0;
1692 goto restart;
1694 else if (IS_EXPR_CODE_CLASS (cl))
1696 int lp;
1697 int max = TREE_OPERAND_LENGTH (x);
1698 for (lp = 0; lp < max; lp++)
1700 tmp_before = tmp_nosp = 0;
1701 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1702 merge_tlist (&tmp_nosp, tmp_before, 0);
1703 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1706 return;
1710 /* Try to warn for undefined behavior in EXPR due to missing sequence
1711 points. */
1713 void
1714 verify_sequence_points (tree expr)
1716 struct tlist *before_sp = 0, *after_sp = 0;
1718 warned_ids = 0;
1719 save_expr_cache = 0;
1720 if (tlist_firstobj == 0)
1722 gcc_obstack_init (&tlist_obstack);
1723 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1726 verify_tree (expr, &before_sp, &after_sp, 0);
1727 warn_for_collisions (after_sp);
1728 obstack_free (&tlist_obstack, tlist_firstobj);
1731 /* Validate the expression after `case' and apply default promotions. */
1733 static tree
1734 check_case_value (tree value)
1736 if (value == NULL_TREE)
1737 return value;
1739 /* ??? Can we ever get nops here for a valid case value? We
1740 shouldn't for C. */
1741 STRIP_TYPE_NOPS (value);
1742 /* In C++, the following is allowed:
1744 const int i = 3;
1745 switch (...) { case i: ... }
1747 So, we try to reduce the VALUE to a constant that way. */
1748 if (c_dialect_cxx ())
1750 value = decl_constant_value (value);
1751 STRIP_TYPE_NOPS (value);
1752 value = fold (value);
1755 if (TREE_CODE (value) == INTEGER_CST)
1756 /* Promote char or short to int. */
1757 value = perform_integral_promotions (value);
1758 else if (value != error_mark_node)
1760 error ("case label does not reduce to an integer constant");
1761 value = error_mark_node;
1764 constant_expression_warning (value);
1766 return value;
1769 /* See if the case values LOW and HIGH are in the range of the original
1770 type (i.e. before the default conversion to int) of the switch testing
1771 expression.
1772 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1773 the type before promoting it. CASE_LOW_P is a pointer to the lower
1774 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1775 if the case is not a case range.
1776 The caller has to make sure that we are not called with NULL for
1777 CASE_LOW_P (i.e. the default case).
1778 Returns true if the case label is in range of ORIG_TYPE (saturated or
1779 untouched) or false if the label is out of range. */
1781 static bool
1782 check_case_bounds (tree type, tree orig_type,
1783 tree *case_low_p, tree *case_high_p)
1785 tree min_value, max_value;
1786 tree case_low = *case_low_p;
1787 tree case_high = case_high_p ? *case_high_p : case_low;
1789 /* If there was a problem with the original type, do nothing. */
1790 if (orig_type == error_mark_node)
1791 return true;
1793 min_value = TYPE_MIN_VALUE (orig_type);
1794 max_value = TYPE_MAX_VALUE (orig_type);
1796 /* Case label is less than minimum for type. */
1797 if (tree_int_cst_compare (case_low, min_value) < 0
1798 && tree_int_cst_compare (case_high, min_value) < 0)
1800 warning (0, "case label value is less than minimum value for type");
1801 return false;
1804 /* Case value is greater than maximum for type. */
1805 if (tree_int_cst_compare (case_low, max_value) > 0
1806 && tree_int_cst_compare (case_high, max_value) > 0)
1808 warning (0, "case label value exceeds maximum value for type");
1809 return false;
1812 /* Saturate lower case label value to minimum. */
1813 if (tree_int_cst_compare (case_high, min_value) >= 0
1814 && tree_int_cst_compare (case_low, min_value) < 0)
1816 warning (0, "lower value in case label range"
1817 " less than minimum value for type");
1818 case_low = min_value;
1821 /* Saturate upper case label value to maximum. */
1822 if (tree_int_cst_compare (case_low, max_value) <= 0
1823 && tree_int_cst_compare (case_high, max_value) > 0)
1825 warning (0, "upper value in case label range"
1826 " exceeds maximum value for type");
1827 case_high = max_value;
1830 if (*case_low_p != case_low)
1831 *case_low_p = convert (type, case_low);
1832 if (case_high_p && *case_high_p != case_high)
1833 *case_high_p = convert (type, case_high);
1835 return true;
1838 /* Return an integer type with BITS bits of precision,
1839 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1841 tree
1842 c_common_type_for_size (unsigned int bits, int unsignedp)
1844 if (bits == TYPE_PRECISION (integer_type_node))
1845 return unsignedp ? unsigned_type_node : integer_type_node;
1847 if (bits == TYPE_PRECISION (signed_char_type_node))
1848 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1850 if (bits == TYPE_PRECISION (short_integer_type_node))
1851 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1853 if (bits == TYPE_PRECISION (long_integer_type_node))
1854 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1856 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1857 return (unsignedp ? long_long_unsigned_type_node
1858 : long_long_integer_type_node);
1860 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1861 return (unsignedp ? widest_unsigned_literal_type_node
1862 : widest_integer_literal_type_node);
1864 if (bits <= TYPE_PRECISION (intQI_type_node))
1865 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1867 if (bits <= TYPE_PRECISION (intHI_type_node))
1868 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1870 if (bits <= TYPE_PRECISION (intSI_type_node))
1871 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1873 if (bits <= TYPE_PRECISION (intDI_type_node))
1874 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1876 return 0;
1879 /* Used for communication between c_common_type_for_mode and
1880 c_register_builtin_type. */
1881 static GTY(()) tree registered_builtin_types;
1883 /* Return a data type that has machine mode MODE.
1884 If the mode is an integer,
1885 then UNSIGNEDP selects between signed and unsigned types. */
1887 tree
1888 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1890 tree t;
1892 if (mode == TYPE_MODE (integer_type_node))
1893 return unsignedp ? unsigned_type_node : integer_type_node;
1895 if (mode == TYPE_MODE (signed_char_type_node))
1896 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1898 if (mode == TYPE_MODE (short_integer_type_node))
1899 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1901 if (mode == TYPE_MODE (long_integer_type_node))
1902 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1904 if (mode == TYPE_MODE (long_long_integer_type_node))
1905 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1907 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1908 return unsignedp ? widest_unsigned_literal_type_node
1909 : widest_integer_literal_type_node;
1911 if (mode == QImode)
1912 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1914 if (mode == HImode)
1915 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1917 if (mode == SImode)
1918 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1920 if (mode == DImode)
1921 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1923 #if HOST_BITS_PER_WIDE_INT >= 64
1924 if (mode == TYPE_MODE (intTI_type_node))
1925 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1926 #endif
1928 if (mode == TYPE_MODE (float_type_node))
1929 return float_type_node;
1931 if (mode == TYPE_MODE (double_type_node))
1932 return double_type_node;
1934 if (mode == TYPE_MODE (long_double_type_node))
1935 return long_double_type_node;
1937 if (mode == TYPE_MODE (void_type_node))
1938 return void_type_node;
1940 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1941 return (unsignedp
1942 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1943 : make_signed_type (GET_MODE_PRECISION (mode)));
1945 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1946 return (unsignedp
1947 ? make_unsigned_type (GET_MODE_PRECISION (mode))
1948 : make_signed_type (GET_MODE_PRECISION (mode)));
1950 if (COMPLEX_MODE_P (mode))
1952 enum machine_mode inner_mode;
1953 tree inner_type;
1955 if (mode == TYPE_MODE (complex_float_type_node))
1956 return complex_float_type_node;
1957 if (mode == TYPE_MODE (complex_double_type_node))
1958 return complex_double_type_node;
1959 if (mode == TYPE_MODE (complex_long_double_type_node))
1960 return complex_long_double_type_node;
1962 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
1963 return complex_integer_type_node;
1965 inner_mode = GET_MODE_INNER (mode);
1966 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1967 if (inner_type != NULL_TREE)
1968 return build_complex_type (inner_type);
1970 else if (VECTOR_MODE_P (mode))
1972 enum machine_mode inner_mode = GET_MODE_INNER (mode);
1973 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
1974 if (inner_type != NULL_TREE)
1975 return build_vector_type_for_mode (inner_type, mode);
1978 if (mode == TYPE_MODE (dfloat32_type_node))
1979 return dfloat32_type_node;
1980 if (mode == TYPE_MODE (dfloat64_type_node))
1981 return dfloat64_type_node;
1982 if (mode == TYPE_MODE (dfloat128_type_node))
1983 return dfloat128_type_node;
1985 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
1986 if (TYPE_MODE (TREE_VALUE (t)) == mode)
1987 return TREE_VALUE (t);
1989 return 0;
1992 /* Return an unsigned type the same as TYPE in other respects. */
1993 tree
1994 c_common_unsigned_type (tree type)
1996 tree type1 = TYPE_MAIN_VARIANT (type);
1997 if (type1 == signed_char_type_node || type1 == char_type_node)
1998 return unsigned_char_type_node;
1999 if (type1 == integer_type_node)
2000 return unsigned_type_node;
2001 if (type1 == short_integer_type_node)
2002 return short_unsigned_type_node;
2003 if (type1 == long_integer_type_node)
2004 return long_unsigned_type_node;
2005 if (type1 == long_long_integer_type_node)
2006 return long_long_unsigned_type_node;
2007 if (type1 == widest_integer_literal_type_node)
2008 return widest_unsigned_literal_type_node;
2009 #if HOST_BITS_PER_WIDE_INT >= 64
2010 if (type1 == intTI_type_node)
2011 return unsigned_intTI_type_node;
2012 #endif
2013 if (type1 == intDI_type_node)
2014 return unsigned_intDI_type_node;
2015 if (type1 == intSI_type_node)
2016 return unsigned_intSI_type_node;
2017 if (type1 == intHI_type_node)
2018 return unsigned_intHI_type_node;
2019 if (type1 == intQI_type_node)
2020 return unsigned_intQI_type_node;
2022 return c_common_signed_or_unsigned_type (1, type);
2025 /* Return a signed type the same as TYPE in other respects. */
2027 tree
2028 c_common_signed_type (tree type)
2030 tree type1 = TYPE_MAIN_VARIANT (type);
2031 if (type1 == unsigned_char_type_node || type1 == char_type_node)
2032 return signed_char_type_node;
2033 if (type1 == unsigned_type_node)
2034 return integer_type_node;
2035 if (type1 == short_unsigned_type_node)
2036 return short_integer_type_node;
2037 if (type1 == long_unsigned_type_node)
2038 return long_integer_type_node;
2039 if (type1 == long_long_unsigned_type_node)
2040 return long_long_integer_type_node;
2041 if (type1 == widest_unsigned_literal_type_node)
2042 return widest_integer_literal_type_node;
2043 #if HOST_BITS_PER_WIDE_INT >= 64
2044 if (type1 == unsigned_intTI_type_node)
2045 return intTI_type_node;
2046 #endif
2047 if (type1 == unsigned_intDI_type_node)
2048 return intDI_type_node;
2049 if (type1 == unsigned_intSI_type_node)
2050 return intSI_type_node;
2051 if (type1 == unsigned_intHI_type_node)
2052 return intHI_type_node;
2053 if (type1 == unsigned_intQI_type_node)
2054 return intQI_type_node;
2056 return c_common_signed_or_unsigned_type (0, type);
2059 /* Return a type the same as TYPE except unsigned or
2060 signed according to UNSIGNEDP. */
2062 tree
2063 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2065 if (!INTEGRAL_TYPE_P (type)
2066 || TYPE_UNSIGNED (type) == unsignedp)
2067 return type;
2069 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2070 the precision; they have precision set to match their range, but
2071 may use a wider mode to match an ABI. If we change modes, we may
2072 wind up with bad conversions. For INTEGER_TYPEs in C, must check
2073 the precision as well, so as to yield correct results for
2074 bit-field types. C++ does not have these separate bit-field
2075 types, and producing a signed or unsigned variant of an
2076 ENUMERAL_TYPE may cause other problems as well. */
2078 #define TYPE_OK(node) \
2079 (TYPE_MODE (type) == TYPE_MODE (node) \
2080 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2081 if (TYPE_OK (signed_char_type_node))
2082 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2083 if (TYPE_OK (integer_type_node))
2084 return unsignedp ? unsigned_type_node : integer_type_node;
2085 if (TYPE_OK (short_integer_type_node))
2086 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2087 if (TYPE_OK (long_integer_type_node))
2088 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2089 if (TYPE_OK (long_long_integer_type_node))
2090 return (unsignedp ? long_long_unsigned_type_node
2091 : long_long_integer_type_node);
2092 if (TYPE_OK (widest_integer_literal_type_node))
2093 return (unsignedp ? widest_unsigned_literal_type_node
2094 : widest_integer_literal_type_node);
2096 #if HOST_BITS_PER_WIDE_INT >= 64
2097 if (TYPE_OK (intTI_type_node))
2098 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2099 #endif
2100 if (TYPE_OK (intDI_type_node))
2101 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2102 if (TYPE_OK (intSI_type_node))
2103 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2104 if (TYPE_OK (intHI_type_node))
2105 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2106 if (TYPE_OK (intQI_type_node))
2107 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2108 #undef TYPE_OK
2110 if (c_dialect_cxx ())
2111 return type;
2112 else
2113 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2116 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2118 tree
2119 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2121 /* Extended integer types of the same width as a standard type have
2122 lesser rank, so those of the same width as int promote to int or
2123 unsigned int and are valid for printf formats expecting int or
2124 unsigned int. To avoid such special cases, avoid creating
2125 extended integer types for bit-fields if a standard integer type
2126 is available. */
2127 if (width == TYPE_PRECISION (integer_type_node))
2128 return unsignedp ? unsigned_type_node : integer_type_node;
2129 if (width == TYPE_PRECISION (signed_char_type_node))
2130 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2131 if (width == TYPE_PRECISION (short_integer_type_node))
2132 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2133 if (width == TYPE_PRECISION (long_integer_type_node))
2134 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2135 if (width == TYPE_PRECISION (long_long_integer_type_node))
2136 return (unsignedp ? long_long_unsigned_type_node
2137 : long_long_integer_type_node);
2138 return build_nonstandard_integer_type (width, unsignedp);
2141 /* The C version of the register_builtin_type langhook. */
2143 void
2144 c_register_builtin_type (tree type, const char* name)
2146 tree decl;
2148 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2149 DECL_ARTIFICIAL (decl) = 1;
2150 if (!TYPE_NAME (type))
2151 TYPE_NAME (type) = decl;
2152 pushdecl (decl);
2154 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2158 /* Return the minimum number of bits needed to represent VALUE in a
2159 signed or unsigned type, UNSIGNEDP says which. */
2161 unsigned int
2162 min_precision (tree value, int unsignedp)
2164 int log;
2166 /* If the value is negative, compute its negative minus 1. The latter
2167 adjustment is because the absolute value of the largest negative value
2168 is one larger than the largest positive value. This is equivalent to
2169 a bit-wise negation, so use that operation instead. */
2171 if (tree_int_cst_sgn (value) < 0)
2172 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2174 /* Return the number of bits needed, taking into account the fact
2175 that we need one more bit for a signed than unsigned type. */
2177 if (integer_zerop (value))
2178 log = 0;
2179 else
2180 log = tree_floor_log2 (value);
2182 return log + 1 + !unsignedp;
2185 /* Print an error message for invalid operands to arith operation
2186 CODE. */
2188 void
2189 binary_op_error (enum tree_code code)
2191 const char *opname;
2193 switch (code)
2195 case PLUS_EXPR:
2196 opname = "+"; break;
2197 case MINUS_EXPR:
2198 opname = "-"; break;
2199 case MULT_EXPR:
2200 opname = "*"; break;
2201 case MAX_EXPR:
2202 opname = "max"; break;
2203 case MIN_EXPR:
2204 opname = "min"; break;
2205 case EQ_EXPR:
2206 opname = "=="; break;
2207 case NE_EXPR:
2208 opname = "!="; break;
2209 case LE_EXPR:
2210 opname = "<="; break;
2211 case GE_EXPR:
2212 opname = ">="; break;
2213 case LT_EXPR:
2214 opname = "<"; break;
2215 case GT_EXPR:
2216 opname = ">"; break;
2217 case LSHIFT_EXPR:
2218 opname = "<<"; break;
2219 case RSHIFT_EXPR:
2220 opname = ">>"; break;
2221 case TRUNC_MOD_EXPR:
2222 case FLOOR_MOD_EXPR:
2223 opname = "%"; break;
2224 case TRUNC_DIV_EXPR:
2225 case FLOOR_DIV_EXPR:
2226 opname = "/"; break;
2227 case BIT_AND_EXPR:
2228 opname = "&"; break;
2229 case BIT_IOR_EXPR:
2230 opname = "|"; break;
2231 case TRUTH_ANDIF_EXPR:
2232 opname = "&&"; break;
2233 case TRUTH_ORIF_EXPR:
2234 opname = "||"; break;
2235 case BIT_XOR_EXPR:
2236 opname = "^"; break;
2237 default:
2238 gcc_unreachable ();
2240 error ("invalid operands to binary %s", opname);
2243 /* Subroutine of build_binary_op, used for comparison operations.
2244 See if the operands have both been converted from subword integer types
2245 and, if so, perhaps change them both back to their original type.
2246 This function is also responsible for converting the two operands
2247 to the proper common type for comparison.
2249 The arguments of this function are all pointers to local variables
2250 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2251 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2253 If this function returns nonzero, it means that the comparison has
2254 a constant value. What this function returns is an expression for
2255 that value. */
2257 tree
2258 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2259 enum tree_code *rescode_ptr)
2261 tree type;
2262 tree op0 = *op0_ptr;
2263 tree op1 = *op1_ptr;
2264 int unsignedp0, unsignedp1;
2265 int real1, real2;
2266 tree primop0, primop1;
2267 enum tree_code code = *rescode_ptr;
2269 /* Throw away any conversions to wider types
2270 already present in the operands. */
2272 primop0 = get_narrower (op0, &unsignedp0);
2273 primop1 = get_narrower (op1, &unsignedp1);
2275 /* Handle the case that OP0 does not *contain* a conversion
2276 but it *requires* conversion to FINAL_TYPE. */
2278 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2279 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2280 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2281 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2283 /* If one of the operands must be floated, we cannot optimize. */
2284 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2285 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2287 /* If first arg is constant, swap the args (changing operation
2288 so value is preserved), for canonicalization. Don't do this if
2289 the second arg is 0. */
2291 if (TREE_CONSTANT (primop0)
2292 && !integer_zerop (primop1) && !real_zerop (primop1))
2294 tree tem = primop0;
2295 int temi = unsignedp0;
2296 primop0 = primop1;
2297 primop1 = tem;
2298 tem = op0;
2299 op0 = op1;
2300 op1 = tem;
2301 *op0_ptr = op0;
2302 *op1_ptr = op1;
2303 unsignedp0 = unsignedp1;
2304 unsignedp1 = temi;
2305 temi = real1;
2306 real1 = real2;
2307 real2 = temi;
2309 switch (code)
2311 case LT_EXPR:
2312 code = GT_EXPR;
2313 break;
2314 case GT_EXPR:
2315 code = LT_EXPR;
2316 break;
2317 case LE_EXPR:
2318 code = GE_EXPR;
2319 break;
2320 case GE_EXPR:
2321 code = LE_EXPR;
2322 break;
2323 default:
2324 break;
2326 *rescode_ptr = code;
2329 /* If comparing an integer against a constant more bits wide,
2330 maybe we can deduce a value of 1 or 0 independent of the data.
2331 Or else truncate the constant now
2332 rather than extend the variable at run time.
2334 This is only interesting if the constant is the wider arg.
2335 Also, it is not safe if the constant is unsigned and the
2336 variable arg is signed, since in this case the variable
2337 would be sign-extended and then regarded as unsigned.
2338 Our technique fails in this case because the lowest/highest
2339 possible unsigned results don't follow naturally from the
2340 lowest/highest possible values of the variable operand.
2341 For just EQ_EXPR and NE_EXPR there is another technique that
2342 could be used: see if the constant can be faithfully represented
2343 in the other operand's type, by truncating it and reextending it
2344 and see if that preserves the constant's value. */
2346 if (!real1 && !real2
2347 && TREE_CODE (primop1) == INTEGER_CST
2348 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2350 int min_gt, max_gt, min_lt, max_lt;
2351 tree maxval, minval;
2352 /* 1 if comparison is nominally unsigned. */
2353 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2354 tree val;
2356 type = c_common_signed_or_unsigned_type (unsignedp0,
2357 TREE_TYPE (primop0));
2359 maxval = TYPE_MAX_VALUE (type);
2360 minval = TYPE_MIN_VALUE (type);
2362 if (unsignedp && !unsignedp0)
2363 *restype_ptr = c_common_signed_type (*restype_ptr);
2365 if (TREE_TYPE (primop1) != *restype_ptr)
2367 /* Convert primop1 to target type, but do not introduce
2368 additional overflow. We know primop1 is an int_cst. */
2369 primop1 = force_fit_type_double (*restype_ptr,
2370 TREE_INT_CST_LOW (primop1),
2371 TREE_INT_CST_HIGH (primop1), 0,
2372 TREE_OVERFLOW (primop1));
2374 if (type != *restype_ptr)
2376 minval = convert (*restype_ptr, minval);
2377 maxval = convert (*restype_ptr, maxval);
2380 if (unsignedp && unsignedp0)
2382 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2383 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2384 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2385 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2387 else
2389 min_gt = INT_CST_LT (primop1, minval);
2390 max_gt = INT_CST_LT (primop1, maxval);
2391 min_lt = INT_CST_LT (minval, primop1);
2392 max_lt = INT_CST_LT (maxval, primop1);
2395 val = 0;
2396 /* This used to be a switch, but Genix compiler can't handle that. */
2397 if (code == NE_EXPR)
2399 if (max_lt || min_gt)
2400 val = truthvalue_true_node;
2402 else if (code == EQ_EXPR)
2404 if (max_lt || min_gt)
2405 val = truthvalue_false_node;
2407 else if (code == LT_EXPR)
2409 if (max_lt)
2410 val = truthvalue_true_node;
2411 if (!min_lt)
2412 val = truthvalue_false_node;
2414 else if (code == GT_EXPR)
2416 if (min_gt)
2417 val = truthvalue_true_node;
2418 if (!max_gt)
2419 val = truthvalue_false_node;
2421 else if (code == LE_EXPR)
2423 if (!max_gt)
2424 val = truthvalue_true_node;
2425 if (min_gt)
2426 val = truthvalue_false_node;
2428 else if (code == GE_EXPR)
2430 if (!min_lt)
2431 val = truthvalue_true_node;
2432 if (max_lt)
2433 val = truthvalue_false_node;
2436 /* If primop0 was sign-extended and unsigned comparison specd,
2437 we did a signed comparison above using the signed type bounds.
2438 But the comparison we output must be unsigned.
2440 Also, for inequalities, VAL is no good; but if the signed
2441 comparison had *any* fixed result, it follows that the
2442 unsigned comparison just tests the sign in reverse
2443 (positive values are LE, negative ones GE).
2444 So we can generate an unsigned comparison
2445 against an extreme value of the signed type. */
2447 if (unsignedp && !unsignedp0)
2449 if (val != 0)
2450 switch (code)
2452 case LT_EXPR:
2453 case GE_EXPR:
2454 primop1 = TYPE_MIN_VALUE (type);
2455 val = 0;
2456 break;
2458 case LE_EXPR:
2459 case GT_EXPR:
2460 primop1 = TYPE_MAX_VALUE (type);
2461 val = 0;
2462 break;
2464 default:
2465 break;
2467 type = c_common_unsigned_type (type);
2470 if (TREE_CODE (primop0) != INTEGER_CST)
2472 if (val == truthvalue_false_node)
2473 warning (0, "comparison is always false due to limited range of data type");
2474 if (val == truthvalue_true_node)
2475 warning (0, "comparison is always true due to limited range of data type");
2478 if (val != 0)
2480 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2481 if (TREE_SIDE_EFFECTS (primop0))
2482 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2483 return val;
2486 /* Value is not predetermined, but do the comparison
2487 in the type of the operand that is not constant.
2488 TYPE is already properly set. */
2491 /* If either arg is decimal float and the other is float, find the
2492 proper common type to use for comparison. */
2493 else if (real1 && real2
2494 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2495 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2496 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2498 else if (real1 && real2
2499 && (TYPE_PRECISION (TREE_TYPE (primop0))
2500 == TYPE_PRECISION (TREE_TYPE (primop1))))
2501 type = TREE_TYPE (primop0);
2503 /* If args' natural types are both narrower than nominal type
2504 and both extend in the same manner, compare them
2505 in the type of the wider arg.
2506 Otherwise must actually extend both to the nominal
2507 common type lest different ways of extending
2508 alter the result.
2509 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2511 else if (unsignedp0 == unsignedp1 && real1 == real2
2512 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2513 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2515 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2516 type = c_common_signed_or_unsigned_type (unsignedp0
2517 || TYPE_UNSIGNED (*restype_ptr),
2518 type);
2519 /* Make sure shorter operand is extended the right way
2520 to match the longer operand. */
2521 primop0
2522 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2523 TREE_TYPE (primop0)),
2524 primop0);
2525 primop1
2526 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2527 TREE_TYPE (primop1)),
2528 primop1);
2530 else
2532 /* Here we must do the comparison on the nominal type
2533 using the args exactly as we received them. */
2534 type = *restype_ptr;
2535 primop0 = op0;
2536 primop1 = op1;
2538 if (!real1 && !real2 && integer_zerop (primop1)
2539 && TYPE_UNSIGNED (*restype_ptr))
2541 tree value = 0;
2542 switch (code)
2544 case GE_EXPR:
2545 /* All unsigned values are >= 0, so we warn if extra warnings
2546 are requested. However, if OP0 is a constant that is
2547 >= 0, the signedness of the comparison isn't an issue,
2548 so suppress the warning. */
2549 if (extra_warnings && !in_system_header
2550 && !(TREE_CODE (primop0) == INTEGER_CST
2551 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2552 primop0))))
2553 warning (0, "comparison of unsigned expression >= 0 is always true");
2554 value = truthvalue_true_node;
2555 break;
2557 case LT_EXPR:
2558 if (extra_warnings && !in_system_header
2559 && !(TREE_CODE (primop0) == INTEGER_CST
2560 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2561 primop0))))
2562 warning (0, "comparison of unsigned expression < 0 is always false");
2563 value = truthvalue_false_node;
2564 break;
2566 default:
2567 break;
2570 if (value != 0)
2572 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2573 if (TREE_SIDE_EFFECTS (primop0))
2574 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2575 primop0, value);
2576 return value;
2581 *op0_ptr = convert (type, primop0);
2582 *op1_ptr = convert (type, primop1);
2584 *restype_ptr = truthvalue_type_node;
2586 return 0;
2589 /* Return a tree for the sum or difference (RESULTCODE says which)
2590 of pointer PTROP and integer INTOP. */
2592 tree
2593 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2595 tree size_exp, ret;
2597 /* The result is a pointer of the same type that is being added. */
2599 tree result_type = TREE_TYPE (ptrop);
2601 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2603 if (pedantic || warn_pointer_arith)
2604 pedwarn ("pointer of type %<void *%> used in arithmetic");
2605 size_exp = integer_one_node;
2607 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2609 if (pedantic || warn_pointer_arith)
2610 pedwarn ("pointer to a function used in arithmetic");
2611 size_exp = integer_one_node;
2613 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2615 if (pedantic || warn_pointer_arith)
2616 pedwarn ("pointer to member function used in arithmetic");
2617 size_exp = integer_one_node;
2619 else
2620 size_exp = size_in_bytes (TREE_TYPE (result_type));
2622 /* We are manipulating pointer values, so we don't need to warn
2623 about relying on undefined signed overflow. We disable the
2624 warning here because we use integer types so fold won't know that
2625 they are really pointers. */
2626 fold_defer_overflow_warnings ();
2628 /* If what we are about to multiply by the size of the elements
2629 contains a constant term, apply distributive law
2630 and multiply that constant term separately.
2631 This helps produce common subexpressions. */
2633 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2634 && !TREE_CONSTANT (intop)
2635 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2636 && TREE_CONSTANT (size_exp)
2637 /* If the constant comes from pointer subtraction,
2638 skip this optimization--it would cause an error. */
2639 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2640 /* If the constant is unsigned, and smaller than the pointer size,
2641 then we must skip this optimization. This is because it could cause
2642 an overflow error if the constant is negative but INTOP is not. */
2643 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2644 || (TYPE_PRECISION (TREE_TYPE (intop))
2645 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2647 enum tree_code subcode = resultcode;
2648 tree int_type = TREE_TYPE (intop);
2649 if (TREE_CODE (intop) == MINUS_EXPR)
2650 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2651 /* Convert both subexpression types to the type of intop,
2652 because weird cases involving pointer arithmetic
2653 can result in a sum or difference with different type args. */
2654 ptrop = build_binary_op (subcode, ptrop,
2655 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2656 intop = convert (int_type, TREE_OPERAND (intop, 0));
2659 /* Convert the integer argument to a type the same size as sizetype
2660 so the multiply won't overflow spuriously. */
2662 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2663 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2664 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2665 TYPE_UNSIGNED (sizetype)), intop);
2667 /* Replace the integer argument with a suitable product by the object size.
2668 Do this multiplication as signed, then convert to the appropriate
2669 pointer type (actually unsigned integral). */
2671 intop = convert (result_type,
2672 build_binary_op (MULT_EXPR, intop,
2673 convert (TREE_TYPE (intop), size_exp), 1));
2675 /* Create the sum or difference. */
2676 ret = fold_build2 (resultcode, result_type, ptrop, intop);
2678 fold_undefer_and_ignore_overflow_warnings ();
2680 return ret;
2683 /* Return whether EXPR is a declaration whose address can never be
2684 NULL. */
2686 bool
2687 decl_with_nonnull_addr_p (tree expr)
2689 return (DECL_P (expr)
2690 && (TREE_CODE (expr) == PARM_DECL
2691 || TREE_CODE (expr) == LABEL_DECL
2692 || !DECL_WEAK (expr)));
2695 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2696 or for an `if' or `while' statement or ?..: exp. It should already
2697 have been validated to be of suitable type; otherwise, a bad
2698 diagnostic may result.
2700 This preparation consists of taking the ordinary
2701 representation of an expression expr and producing a valid tree
2702 boolean expression describing whether expr is nonzero. We could
2703 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2704 but we optimize comparisons, &&, ||, and !.
2706 The resulting type should always be `truthvalue_type_node'. */
2708 tree
2709 c_common_truthvalue_conversion (tree expr)
2711 switch (TREE_CODE (expr))
2713 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
2714 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2715 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2716 case ORDERED_EXPR: case UNORDERED_EXPR:
2717 if (TREE_TYPE (expr) == truthvalue_type_node)
2718 return expr;
2719 return build2 (TREE_CODE (expr), truthvalue_type_node,
2720 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2722 case TRUTH_ANDIF_EXPR:
2723 case TRUTH_ORIF_EXPR:
2724 case TRUTH_AND_EXPR:
2725 case TRUTH_OR_EXPR:
2726 case TRUTH_XOR_EXPR:
2727 if (TREE_TYPE (expr) == truthvalue_type_node)
2728 return expr;
2729 return build2 (TREE_CODE (expr), truthvalue_type_node,
2730 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2731 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2733 case TRUTH_NOT_EXPR:
2734 if (TREE_TYPE (expr) == truthvalue_type_node)
2735 return expr;
2736 return build1 (TREE_CODE (expr), truthvalue_type_node,
2737 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2739 case ERROR_MARK:
2740 return expr;
2742 case INTEGER_CST:
2743 return integer_zerop (expr) ? truthvalue_false_node
2744 : truthvalue_true_node;
2746 case REAL_CST:
2747 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2748 ? truthvalue_true_node
2749 : truthvalue_false_node;
2751 case FUNCTION_DECL:
2752 expr = build_unary_op (ADDR_EXPR, expr, 0);
2753 /* Fall through. */
2755 case ADDR_EXPR:
2757 tree inner = TREE_OPERAND (expr, 0);
2758 if (decl_with_nonnull_addr_p (inner))
2760 /* Common Ada/Pascal programmer's mistake. */
2761 warning (OPT_Waddress,
2762 "the address of %qD will always evaluate as %<true%>",
2763 inner);
2764 return truthvalue_true_node;
2767 /* If we still have a decl, it is possible for its address to
2768 be NULL, so we cannot optimize. */
2769 if (DECL_P (inner))
2771 gcc_assert (DECL_WEAK (inner));
2772 break;
2775 if (TREE_SIDE_EFFECTS (inner))
2776 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2777 inner, truthvalue_true_node);
2778 else
2779 return truthvalue_true_node;
2782 case COMPLEX_EXPR:
2783 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2784 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2785 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2786 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2789 case NEGATE_EXPR:
2790 case ABS_EXPR:
2791 case FLOAT_EXPR:
2792 /* These don't change whether an object is nonzero or zero. */
2793 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2795 case LROTATE_EXPR:
2796 case RROTATE_EXPR:
2797 /* These don't change whether an object is zero or nonzero, but
2798 we can't ignore them if their second arg has side-effects. */
2799 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2800 return build2 (COMPOUND_EXPR, truthvalue_type_node,
2801 TREE_OPERAND (expr, 1),
2802 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2803 else
2804 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2806 case COND_EXPR:
2807 /* Distribute the conversion into the arms of a COND_EXPR. */
2808 return fold_build3 (COND_EXPR, truthvalue_type_node,
2809 TREE_OPERAND (expr, 0),
2810 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2811 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
2813 case CONVERT_EXPR:
2814 case NOP_EXPR:
2815 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2816 since that affects how `default_conversion' will behave. */
2817 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2818 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2819 break;
2820 /* If this is widening the argument, we can ignore it. */
2821 if (TYPE_PRECISION (TREE_TYPE (expr))
2822 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2823 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2824 break;
2826 case MODIFY_EXPR:
2827 if (!TREE_NO_WARNING (expr)
2828 && warn_parentheses)
2830 warning (OPT_Wparentheses,
2831 "suggest parentheses around assignment used as truth value");
2832 TREE_NO_WARNING (expr) = 1;
2834 break;
2836 default:
2837 break;
2840 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2842 tree t = save_expr (expr);
2843 return (build_binary_op
2844 ((TREE_SIDE_EFFECTS (expr)
2845 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2846 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2847 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2848 0));
2851 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2854 static void def_builtin_1 (enum built_in_function fncode,
2855 const char *name,
2856 enum built_in_class fnclass,
2857 tree fntype, tree libtype,
2858 bool both_p, bool fallback_p, bool nonansi_p,
2859 tree fnattrs, bool implicit_p);
2861 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2862 down to the element type of an array. */
2864 tree
2865 c_build_qualified_type (tree type, int type_quals)
2867 if (type == error_mark_node)
2868 return type;
2870 if (TREE_CODE (type) == ARRAY_TYPE)
2872 tree t;
2873 tree element_type = c_build_qualified_type (TREE_TYPE (type),
2874 type_quals);
2876 /* See if we already have an identically qualified type. */
2877 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2879 if (TYPE_QUALS (strip_array_types (t)) == type_quals
2880 && TYPE_NAME (t) == TYPE_NAME (type)
2881 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2882 && attribute_list_equal (TYPE_ATTRIBUTES (t),
2883 TYPE_ATTRIBUTES (type)))
2884 break;
2886 if (!t)
2888 t = build_variant_type_copy (type);
2889 TREE_TYPE (t) = element_type;
2891 return t;
2894 /* A restrict-qualified pointer type must be a pointer to object or
2895 incomplete type. Note that the use of POINTER_TYPE_P also allows
2896 REFERENCE_TYPEs, which is appropriate for C++. */
2897 if ((type_quals & TYPE_QUAL_RESTRICT)
2898 && (!POINTER_TYPE_P (type)
2899 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2901 error ("invalid use of %<restrict%>");
2902 type_quals &= ~TYPE_QUAL_RESTRICT;
2905 return build_qualified_type (type, type_quals);
2908 /* Apply the TYPE_QUALS to the new DECL. */
2910 void
2911 c_apply_type_quals_to_decl (int type_quals, tree decl)
2913 tree type = TREE_TYPE (decl);
2915 if (type == error_mark_node)
2916 return;
2918 if (((type_quals & TYPE_QUAL_CONST)
2919 || (type && TREE_CODE (type) == REFERENCE_TYPE))
2920 /* An object declared 'const' is only readonly after it is
2921 initialized. We don't have any way of expressing this currently,
2922 so we need to be conservative and unset TREE_READONLY for types
2923 with constructors. Otherwise aliasing code will ignore stores in
2924 an inline constructor. */
2925 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
2926 TREE_READONLY (decl) = 1;
2927 if (type_quals & TYPE_QUAL_VOLATILE)
2929 TREE_SIDE_EFFECTS (decl) = 1;
2930 TREE_THIS_VOLATILE (decl) = 1;
2932 if (type_quals & TYPE_QUAL_RESTRICT)
2934 while (type && TREE_CODE (type) == ARRAY_TYPE)
2935 /* Allow 'restrict' on arrays of pointers.
2936 FIXME currently we just ignore it. */
2937 type = TREE_TYPE (type);
2938 if (!type
2939 || !POINTER_TYPE_P (type)
2940 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
2941 error ("invalid use of %<restrict%>");
2942 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
2943 /* Indicate we need to make a unique alias set for this pointer.
2944 We can't do it here because it might be pointing to an
2945 incomplete type. */
2946 DECL_POINTER_ALIAS_SET (decl) = -2;
2950 /* Hash function for the problem of multiple type definitions in
2951 different files. This must hash all types that will compare
2952 equal via comptypes to the same value. In practice it hashes
2953 on some of the simple stuff and leaves the details to comptypes. */
2955 static hashval_t
2956 c_type_hash (const void *p)
2958 int i = 0;
2959 int shift, size;
2960 tree t = (tree) p;
2961 tree t2;
2962 switch (TREE_CODE (t))
2964 /* For pointers, hash on pointee type plus some swizzling. */
2965 case POINTER_TYPE:
2966 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
2967 /* Hash on number of elements and total size. */
2968 case ENUMERAL_TYPE:
2969 shift = 3;
2970 t2 = TYPE_VALUES (t);
2971 break;
2972 case RECORD_TYPE:
2973 shift = 0;
2974 t2 = TYPE_FIELDS (t);
2975 break;
2976 case QUAL_UNION_TYPE:
2977 shift = 1;
2978 t2 = TYPE_FIELDS (t);
2979 break;
2980 case UNION_TYPE:
2981 shift = 2;
2982 t2 = TYPE_FIELDS (t);
2983 break;
2984 default:
2985 gcc_unreachable ();
2987 for (; t2; t2 = TREE_CHAIN (t2))
2988 i++;
2989 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
2990 return ((size << 24) | (i << shift));
2993 static GTY((param_is (union tree_node))) htab_t type_hash_table;
2995 /* Return the typed-based alias set for T, which may be an expression
2996 or a type. Return -1 if we don't do anything special. */
2998 HOST_WIDE_INT
2999 c_common_get_alias_set (tree t)
3001 tree u;
3002 PTR *slot;
3004 /* Permit type-punning when accessing a union, provided the access
3005 is directly through the union. For example, this code does not
3006 permit taking the address of a union member and then storing
3007 through it. Even the type-punning allowed here is a GCC
3008 extension, albeit a common and useful one; the C standard says
3009 that such accesses have implementation-defined behavior. */
3010 for (u = t;
3011 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3012 u = TREE_OPERAND (u, 0))
3013 if (TREE_CODE (u) == COMPONENT_REF
3014 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3015 return 0;
3017 /* That's all the expressions we handle specially. */
3018 if (!TYPE_P (t))
3019 return -1;
3021 /* The C standard guarantees that any object may be accessed via an
3022 lvalue that has character type. */
3023 if (t == char_type_node
3024 || t == signed_char_type_node
3025 || t == unsigned_char_type_node)
3026 return 0;
3028 /* If it has the may_alias attribute, it can alias anything. */
3029 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
3030 return 0;
3032 /* The C standard specifically allows aliasing between signed and
3033 unsigned variants of the same type. We treat the signed
3034 variant as canonical. */
3035 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3037 tree t1 = c_common_signed_type (t);
3039 /* t1 == t can happen for boolean nodes which are always unsigned. */
3040 if (t1 != t)
3041 return get_alias_set (t1);
3043 else if (POINTER_TYPE_P (t))
3045 tree t1;
3047 /* Unfortunately, there is no canonical form of a pointer type.
3048 In particular, if we have `typedef int I', then `int *', and
3049 `I *' are different types. So, we have to pick a canonical
3050 representative. We do this below.
3052 Technically, this approach is actually more conservative that
3053 it needs to be. In particular, `const int *' and `int *'
3054 should be in different alias sets, according to the C and C++
3055 standard, since their types are not the same, and so,
3056 technically, an `int **' and `const int **' cannot point at
3057 the same thing.
3059 But, the standard is wrong. In particular, this code is
3060 legal C++:
3062 int *ip;
3063 int **ipp = &ip;
3064 const int* const* cipp = ipp;
3066 And, it doesn't make sense for that to be legal unless you
3067 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3068 the pointed-to types. This issue has been reported to the
3069 C++ committee. */
3070 t1 = build_type_no_quals (t);
3071 if (t1 != t)
3072 return get_alias_set (t1);
3075 /* Handle the case of multiple type nodes referring to "the same" type,
3076 which occurs with IMA. These share an alias set. FIXME: Currently only
3077 C90 is handled. (In C99 type compatibility is not transitive, which
3078 complicates things mightily. The alias set splay trees can theoretically
3079 represent this, but insertion is tricky when you consider all the
3080 different orders things might arrive in.) */
3082 if (c_language != clk_c || flag_isoc99)
3083 return -1;
3085 /* Save time if there's only one input file. */
3086 if (num_in_fnames == 1)
3087 return -1;
3089 /* Pointers need special handling if they point to any type that
3090 needs special handling (below). */
3091 if (TREE_CODE (t) == POINTER_TYPE)
3093 tree t2;
3094 /* Find bottom type under any nested POINTERs. */
3095 for (t2 = TREE_TYPE (t);
3096 TREE_CODE (t2) == POINTER_TYPE;
3097 t2 = TREE_TYPE (t2))
3099 if (TREE_CODE (t2) != RECORD_TYPE
3100 && TREE_CODE (t2) != ENUMERAL_TYPE
3101 && TREE_CODE (t2) != QUAL_UNION_TYPE
3102 && TREE_CODE (t2) != UNION_TYPE)
3103 return -1;
3104 if (TYPE_SIZE (t2) == 0)
3105 return -1;
3107 /* These are the only cases that need special handling. */
3108 if (TREE_CODE (t) != RECORD_TYPE
3109 && TREE_CODE (t) != ENUMERAL_TYPE
3110 && TREE_CODE (t) != QUAL_UNION_TYPE
3111 && TREE_CODE (t) != UNION_TYPE
3112 && TREE_CODE (t) != POINTER_TYPE)
3113 return -1;
3114 /* Undefined? */
3115 if (TYPE_SIZE (t) == 0)
3116 return -1;
3118 /* Look up t in hash table. Only one of the compatible types within each
3119 alias set is recorded in the table. */
3120 if (!type_hash_table)
3121 type_hash_table = htab_create_ggc (1021, c_type_hash,
3122 (htab_eq) lang_hooks.types_compatible_p,
3123 NULL);
3124 slot = htab_find_slot (type_hash_table, t, INSERT);
3125 if (*slot != NULL)
3127 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3128 return TYPE_ALIAS_SET ((tree)*slot);
3130 else
3131 /* Our caller will assign and record (in t) a new alias set; all we need
3132 to do is remember t in the hash table. */
3133 *slot = t;
3135 return -1;
3138 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3139 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3140 flag controls whether we should diagnose possibly ill-formed
3141 constructs or not. */
3143 tree
3144 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3146 const char *op_name;
3147 tree value = NULL;
3148 enum tree_code type_code = TREE_CODE (type);
3150 op_name = is_sizeof ? "sizeof" : "__alignof__";
3152 if (type_code == FUNCTION_TYPE)
3154 if (is_sizeof)
3156 if (complain && (pedantic || warn_pointer_arith))
3157 pedwarn ("invalid application of %<sizeof%> to a function type");
3158 value = size_one_node;
3160 else
3161 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3163 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3165 if (type_code == VOID_TYPE
3166 && complain && (pedantic || warn_pointer_arith))
3167 pedwarn ("invalid application of %qs to a void type", op_name);
3168 value = size_one_node;
3170 else if (!COMPLETE_TYPE_P (type))
3172 if (complain)
3173 error ("invalid application of %qs to incomplete type %qT ",
3174 op_name, type);
3175 value = size_zero_node;
3177 else
3179 if (is_sizeof)
3180 /* Convert in case a char is more than one unit. */
3181 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3182 size_int (TYPE_PRECISION (char_type_node)
3183 / BITS_PER_UNIT));
3184 else
3185 value = size_int (TYPE_ALIGN_UNIT (type));
3188 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3189 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3190 never happen. However, this node should really have type
3191 `size_t', which is just a typedef for an ordinary integer type. */
3192 value = fold_convert (size_type_node, value);
3193 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3195 return value;
3198 /* Implement the __alignof keyword: Return the minimum required
3199 alignment of EXPR, measured in bytes. For VAR_DECL's and
3200 FIELD_DECL's return DECL_ALIGN (which can be set from an
3201 "aligned" __attribute__ specification). */
3203 tree
3204 c_alignof_expr (tree expr)
3206 tree t;
3208 if (TREE_CODE (expr) == VAR_DECL)
3209 t = size_int (DECL_ALIGN_UNIT (expr));
3211 else if (TREE_CODE (expr) == COMPONENT_REF
3212 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3214 error ("%<__alignof%> applied to a bit-field");
3215 t = size_one_node;
3217 else if (TREE_CODE (expr) == COMPONENT_REF
3218 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3219 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3221 else if (TREE_CODE (expr) == INDIRECT_REF)
3223 tree t = TREE_OPERAND (expr, 0);
3224 tree best = t;
3225 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3227 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3228 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3230 int thisalign;
3232 t = TREE_OPERAND (t, 0);
3233 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3234 if (thisalign > bestalign)
3235 best = t, bestalign = thisalign;
3237 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3239 else
3240 return c_alignof (TREE_TYPE (expr));
3242 return fold_convert (size_type_node, t);
3245 /* Handle C and C++ default attributes. */
3247 enum built_in_attribute
3249 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3250 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3251 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3252 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3253 #include "builtin-attrs.def"
3254 #undef DEF_ATTR_NULL_TREE
3255 #undef DEF_ATTR_INT
3256 #undef DEF_ATTR_IDENT
3257 #undef DEF_ATTR_TREE_LIST
3258 ATTR_LAST
3261 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3263 static void c_init_attributes (void);
3265 enum c_builtin_type
3267 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3268 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3269 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3270 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3271 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3272 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3273 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3274 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3275 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3276 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3277 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3278 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3279 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3280 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3281 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3282 NAME,
3283 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3284 #include "builtin-types.def"
3285 #undef DEF_PRIMITIVE_TYPE
3286 #undef DEF_FUNCTION_TYPE_0
3287 #undef DEF_FUNCTION_TYPE_1
3288 #undef DEF_FUNCTION_TYPE_2
3289 #undef DEF_FUNCTION_TYPE_3
3290 #undef DEF_FUNCTION_TYPE_4
3291 #undef DEF_FUNCTION_TYPE_5
3292 #undef DEF_FUNCTION_TYPE_6
3293 #undef DEF_FUNCTION_TYPE_7
3294 #undef DEF_FUNCTION_TYPE_VAR_0
3295 #undef DEF_FUNCTION_TYPE_VAR_1
3296 #undef DEF_FUNCTION_TYPE_VAR_2
3297 #undef DEF_FUNCTION_TYPE_VAR_3
3298 #undef DEF_FUNCTION_TYPE_VAR_4
3299 #undef DEF_FUNCTION_TYPE_VAR_5
3300 #undef DEF_POINTER_TYPE
3301 BT_LAST
3304 typedef enum c_builtin_type builtin_type;
3306 /* A temporary array for c_common_nodes_and_builtins. Used in
3307 communication with def_fn_type. */
3308 static tree builtin_types[(int) BT_LAST + 1];
3310 /* A helper function for c_common_nodes_and_builtins. Build function type
3311 for DEF with return type RET and N arguments. If VAR is true, then the
3312 function should be variadic after those N arguments.
3314 Takes special care not to ICE if any of the types involved are
3315 error_mark_node, which indicates that said type is not in fact available
3316 (see builtin_type_for_size). In which case the function type as a whole
3317 should be error_mark_node. */
3319 static void
3320 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3322 tree args = NULL, t;
3323 va_list list;
3324 int i;
3326 va_start (list, n);
3327 for (i = 0; i < n; ++i)
3329 builtin_type a = va_arg (list, builtin_type);
3330 t = builtin_types[a];
3331 if (t == error_mark_node)
3332 goto egress;
3333 args = tree_cons (NULL_TREE, t, args);
3335 va_end (list);
3337 args = nreverse (args);
3338 if (!var)
3339 args = chainon (args, void_list_node);
3341 t = builtin_types[ret];
3342 if (t == error_mark_node)
3343 goto egress;
3344 t = build_function_type (t, args);
3346 egress:
3347 builtin_types[def] = t;
3350 /* Build builtin functions common to both C and C++ language
3351 frontends. */
3353 static void
3354 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3356 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3357 builtin_types[ENUM] = VALUE;
3358 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3359 def_fn_type (ENUM, RETURN, 0, 0);
3360 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3361 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3362 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3363 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3364 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3365 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3366 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3367 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3368 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3369 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3370 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3371 ARG6) \
3372 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3373 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3374 ARG6, ARG7) \
3375 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3376 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3377 def_fn_type (ENUM, RETURN, 1, 0);
3378 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3379 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3380 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3381 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3382 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3383 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3384 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3385 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3386 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3387 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3388 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3389 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3391 #include "builtin-types.def"
3393 #undef DEF_PRIMITIVE_TYPE
3394 #undef DEF_FUNCTION_TYPE_1
3395 #undef DEF_FUNCTION_TYPE_2
3396 #undef DEF_FUNCTION_TYPE_3
3397 #undef DEF_FUNCTION_TYPE_4
3398 #undef DEF_FUNCTION_TYPE_5
3399 #undef DEF_FUNCTION_TYPE_6
3400 #undef DEF_FUNCTION_TYPE_VAR_0
3401 #undef DEF_FUNCTION_TYPE_VAR_1
3402 #undef DEF_FUNCTION_TYPE_VAR_2
3403 #undef DEF_FUNCTION_TYPE_VAR_3
3404 #undef DEF_FUNCTION_TYPE_VAR_4
3405 #undef DEF_FUNCTION_TYPE_VAR_5
3406 #undef DEF_POINTER_TYPE
3407 builtin_types[(int) BT_LAST] = NULL_TREE;
3409 c_init_attributes ();
3411 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3412 NONANSI_P, ATTRS, IMPLICIT, COND) \
3413 if (NAME && COND) \
3414 def_builtin_1 (ENUM, NAME, CLASS, \
3415 builtin_types[(int) TYPE], \
3416 builtin_types[(int) LIBTYPE], \
3417 BOTH_P, FALLBACK_P, NONANSI_P, \
3418 built_in_attributes[(int) ATTRS], IMPLICIT);
3419 #include "builtins.def"
3420 #undef DEF_BUILTIN
3422 build_common_builtin_nodes ();
3424 targetm.init_builtins ();
3425 if (flag_mudflap)
3426 mudflap_init ();
3429 /* Build tree nodes and builtin functions common to both C and C++ language
3430 frontends. */
3432 void
3433 c_common_nodes_and_builtins (void)
3435 int wchar_type_size;
3436 tree array_domain_type;
3437 tree va_list_ref_type_node;
3438 tree va_list_arg_type_node;
3440 /* Define `int' and `char' first so that dbx will output them first. */
3441 record_builtin_type (RID_INT, NULL, integer_type_node);
3442 record_builtin_type (RID_CHAR, "char", char_type_node);
3444 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3445 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3446 but not C. Are the conditionals here needed? */
3447 if (c_dialect_cxx ())
3448 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3449 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3450 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3451 record_builtin_type (RID_MAX, "long unsigned int",
3452 long_unsigned_type_node);
3453 if (c_dialect_cxx ())
3454 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3455 record_builtin_type (RID_MAX, "long long int",
3456 long_long_integer_type_node);
3457 record_builtin_type (RID_MAX, "long long unsigned int",
3458 long_long_unsigned_type_node);
3459 if (c_dialect_cxx ())
3460 record_builtin_type (RID_MAX, "long long unsigned",
3461 long_long_unsigned_type_node);
3462 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3463 record_builtin_type (RID_MAX, "short unsigned int",
3464 short_unsigned_type_node);
3465 if (c_dialect_cxx ())
3466 record_builtin_type (RID_MAX, "unsigned short",
3467 short_unsigned_type_node);
3469 /* Define both `signed char' and `unsigned char'. */
3470 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3471 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3473 /* These are types that c_common_type_for_size and
3474 c_common_type_for_mode use. */
3475 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3476 intQI_type_node));
3477 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3478 intHI_type_node));
3479 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3480 intSI_type_node));
3481 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3482 intDI_type_node));
3483 #if HOST_BITS_PER_WIDE_INT >= 64
3484 if (targetm.scalar_mode_supported_p (TImode))
3485 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3486 get_identifier ("__int128_t"),
3487 intTI_type_node));
3488 #endif
3489 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3490 unsigned_intQI_type_node));
3491 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3492 unsigned_intHI_type_node));
3493 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3494 unsigned_intSI_type_node));
3495 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3496 unsigned_intDI_type_node));
3497 #if HOST_BITS_PER_WIDE_INT >= 64
3498 if (targetm.scalar_mode_supported_p (TImode))
3499 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3500 get_identifier ("__uint128_t"),
3501 unsigned_intTI_type_node));
3502 #endif
3504 /* Create the widest literal types. */
3505 widest_integer_literal_type_node
3506 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3507 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3508 widest_integer_literal_type_node));
3510 widest_unsigned_literal_type_node
3511 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3512 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3513 widest_unsigned_literal_type_node));
3515 /* `unsigned long' is the standard type for sizeof.
3516 Note that stddef.h uses `unsigned long',
3517 and this must agree, even if long and int are the same size. */
3518 size_type_node =
3519 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3520 signed_size_type_node = c_common_signed_type (size_type_node);
3521 set_sizetype (size_type_node);
3523 pid_type_node =
3524 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3526 build_common_tree_nodes_2 (flag_short_double);
3528 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3529 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3530 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3532 /* Only supported decimal floating point extension if the target
3533 actually supports underlying modes. */
3534 if (targetm.scalar_mode_supported_p (SDmode)
3535 && targetm.scalar_mode_supported_p (DDmode)
3536 && targetm.scalar_mode_supported_p (TDmode))
3538 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3539 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3540 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3543 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3544 get_identifier ("complex int"),
3545 complex_integer_type_node));
3546 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3547 get_identifier ("complex float"),
3548 complex_float_type_node));
3549 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3550 get_identifier ("complex double"),
3551 complex_double_type_node));
3552 lang_hooks.decls.pushdecl
3553 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3554 complex_long_double_type_node));
3556 if (c_dialect_cxx ())
3557 /* For C++, make fileptr_type_node a distinct void * type until
3558 FILE type is defined. */
3559 fileptr_type_node = build_variant_type_copy (ptr_type_node);
3561 record_builtin_type (RID_VOID, NULL, void_type_node);
3563 /* Set the TYPE_NAME for any variants that were built before
3564 record_builtin_type gave names to the built-in types. */
3566 tree void_name = TYPE_NAME (void_type_node);
3567 TYPE_NAME (void_type_node) = NULL_TREE;
3568 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3569 = void_name;
3570 TYPE_NAME (void_type_node) = void_name;
3573 /* This node must not be shared. */
3574 void_zero_node = make_node (INTEGER_CST);
3575 TREE_TYPE (void_zero_node) = void_type_node;
3577 void_list_node = build_void_list_node ();
3579 /* Make a type to be the domain of a few array types
3580 whose domains don't really matter.
3581 200 is small enough that it always fits in size_t
3582 and large enough that it can hold most function names for the
3583 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3584 array_domain_type = build_index_type (size_int (200));
3586 /* Make a type for arrays of characters.
3587 With luck nothing will ever really depend on the length of this
3588 array type. */
3589 char_array_type_node
3590 = build_array_type (char_type_node, array_domain_type);
3592 /* Likewise for arrays of ints. */
3593 int_array_type_node
3594 = build_array_type (integer_type_node, array_domain_type);
3596 string_type_node = build_pointer_type (char_type_node);
3597 const_string_type_node
3598 = build_pointer_type (build_qualified_type
3599 (char_type_node, TYPE_QUAL_CONST));
3601 /* This is special for C++ so functions can be overloaded. */
3602 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3603 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3604 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3605 if (c_dialect_cxx ())
3607 if (TYPE_UNSIGNED (wchar_type_node))
3608 wchar_type_node = make_unsigned_type (wchar_type_size);
3609 else
3610 wchar_type_node = make_signed_type (wchar_type_size);
3611 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3613 else
3615 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3616 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3619 /* This is for wide string constants. */
3620 wchar_array_type_node
3621 = build_array_type (wchar_type_node, array_domain_type);
3623 wint_type_node =
3624 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3626 intmax_type_node =
3627 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3628 uintmax_type_node =
3629 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3631 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3632 ptrdiff_type_node
3633 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3634 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3636 lang_hooks.decls.pushdecl
3637 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3638 va_list_type_node));
3640 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3642 va_list_arg_type_node = va_list_ref_type_node =
3643 build_pointer_type (TREE_TYPE (va_list_type_node));
3645 else
3647 va_list_arg_type_node = va_list_type_node;
3648 va_list_ref_type_node = build_reference_type (va_list_type_node);
3651 if (!flag_preprocess_only)
3652 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
3654 main_identifier_node = get_identifier ("main");
3656 /* Create the built-in __null node. It is important that this is
3657 not shared. */
3658 null_node = make_node (INTEGER_CST);
3659 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3661 /* Since builtin_types isn't gc'ed, don't export these nodes. */
3662 memset (builtin_types, 0, sizeof (builtin_types));
3665 /* Look up the function in built_in_decls that corresponds to DECL
3666 and set ASMSPEC as its user assembler name. DECL must be a
3667 function decl that declares a builtin. */
3669 void
3670 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3672 tree builtin;
3673 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3674 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3675 && asmspec != 0);
3677 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3678 set_user_assembler_name (builtin, asmspec);
3679 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3680 init_block_move_fn (asmspec);
3681 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3682 init_block_clear_fn (asmspec);
3685 /* The number of named compound-literals generated thus far. */
3686 static GTY(()) int compound_literal_number;
3688 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
3690 void
3691 set_compound_literal_name (tree decl)
3693 char *name;
3694 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3695 compound_literal_number);
3696 compound_literal_number++;
3697 DECL_NAME (decl) = get_identifier (name);
3700 tree
3701 build_va_arg (tree expr, tree type)
3703 return build1 (VA_ARG_EXPR, type, expr);
3707 /* Linked list of disabled built-in functions. */
3709 typedef struct disabled_builtin
3711 const char *name;
3712 struct disabled_builtin *next;
3713 } disabled_builtin;
3714 static disabled_builtin *disabled_builtins = NULL;
3716 static bool builtin_function_disabled_p (const char *);
3718 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3719 begins with "__builtin_", give an error. */
3721 void
3722 disable_builtin_function (const char *name)
3724 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3725 error ("cannot disable built-in function %qs", name);
3726 else
3728 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3729 new_disabled_builtin->name = name;
3730 new_disabled_builtin->next = disabled_builtins;
3731 disabled_builtins = new_disabled_builtin;
3736 /* Return true if the built-in function NAME has been disabled, false
3737 otherwise. */
3739 static bool
3740 builtin_function_disabled_p (const char *name)
3742 disabled_builtin *p;
3743 for (p = disabled_builtins; p != NULL; p = p->next)
3745 if (strcmp (name, p->name) == 0)
3746 return true;
3748 return false;
3752 /* Worker for DEF_BUILTIN.
3753 Possibly define a builtin function with one or two names.
3754 Does not declare a non-__builtin_ function if flag_no_builtin, or if
3755 nonansi_p and flag_no_nonansi_builtin. */
3757 static void
3758 def_builtin_1 (enum built_in_function fncode,
3759 const char *name,
3760 enum built_in_class fnclass,
3761 tree fntype, tree libtype,
3762 bool both_p, bool fallback_p, bool nonansi_p,
3763 tree fnattrs, bool implicit_p)
3765 tree decl;
3766 const char *libname;
3768 if (fntype == error_mark_node)
3769 return;
3771 gcc_assert ((!both_p && !fallback_p)
3772 || !strncmp (name, "__builtin_",
3773 strlen ("__builtin_")));
3775 libname = name + strlen ("__builtin_");
3776 decl = add_builtin_function (name, fntype, fncode, fnclass,
3777 (fallback_p ? libname : NULL),
3778 fnattrs);
3779 if (both_p
3780 && !flag_no_builtin && !builtin_function_disabled_p (libname)
3781 && !(nonansi_p && flag_no_nonansi_builtin))
3782 add_builtin_function (libname, libtype, fncode, fnclass,
3783 NULL, fnattrs);
3785 built_in_decls[(int) fncode] = decl;
3786 if (implicit_p)
3787 implicit_built_in_decls[(int) fncode] = decl;
3790 /* Nonzero if the type T promotes to int. This is (nearly) the
3791 integral promotions defined in ISO C99 6.3.1.1/2. */
3793 bool
3794 c_promoting_integer_type_p (tree t)
3796 switch (TREE_CODE (t))
3798 case INTEGER_TYPE:
3799 return (TYPE_MAIN_VARIANT (t) == char_type_node
3800 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3801 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3802 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3803 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3804 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3806 case ENUMERAL_TYPE:
3807 /* ??? Technically all enumerations not larger than an int
3808 promote to an int. But this is used along code paths
3809 that only want to notice a size change. */
3810 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3812 case BOOLEAN_TYPE:
3813 return 1;
3815 default:
3816 return 0;
3820 /* Return 1 if PARMS specifies a fixed number of parameters
3821 and none of their types is affected by default promotions. */
3824 self_promoting_args_p (tree parms)
3826 tree t;
3827 for (t = parms; t; t = TREE_CHAIN (t))
3829 tree type = TREE_VALUE (t);
3831 if (type == error_mark_node)
3832 continue;
3834 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3835 return 0;
3837 if (type == 0)
3838 return 0;
3840 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3841 return 0;
3843 if (c_promoting_integer_type_p (type))
3844 return 0;
3846 return 1;
3849 /* Recursively examines the array elements of TYPE, until a non-array
3850 element type is found. */
3852 tree
3853 strip_array_types (tree type)
3855 while (TREE_CODE (type) == ARRAY_TYPE)
3856 type = TREE_TYPE (type);
3858 return type;
3861 /* Recursively remove any '*' or '&' operator from TYPE. */
3862 tree
3863 strip_pointer_operator (tree t)
3865 while (POINTER_TYPE_P (t))
3866 t = TREE_TYPE (t);
3867 return t;
3870 /* Used to compare case labels. K1 and K2 are actually tree nodes
3871 representing case labels, or NULL_TREE for a `default' label.
3872 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3873 K2, and 0 if K1 and K2 are equal. */
3876 case_compare (splay_tree_key k1, splay_tree_key k2)
3878 /* Consider a NULL key (such as arises with a `default' label) to be
3879 smaller than anything else. */
3880 if (!k1)
3881 return k2 ? -1 : 0;
3882 else if (!k2)
3883 return k1 ? 1 : 0;
3885 return tree_int_cst_compare ((tree) k1, (tree) k2);
3888 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3889 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3890 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3891 case label was declared using the usual C/C++ syntax, rather than
3892 the GNU case range extension. CASES is a tree containing all the
3893 case ranges processed so far; COND is the condition for the
3894 switch-statement itself. Returns the CASE_LABEL_EXPR created, or
3895 ERROR_MARK_NODE if no CASE_LABEL_EXPR is created. */
3897 tree
3898 c_add_case_label (splay_tree cases, tree cond, tree orig_type,
3899 tree low_value, tree high_value)
3901 tree type;
3902 tree label;
3903 tree case_label;
3904 splay_tree_node node;
3906 /* Create the LABEL_DECL itself. */
3907 label = create_artificial_label ();
3909 /* If there was an error processing the switch condition, bail now
3910 before we get more confused. */
3911 if (!cond || cond == error_mark_node)
3912 goto error_out;
3914 if ((low_value && TREE_TYPE (low_value)
3915 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3916 || (high_value && TREE_TYPE (high_value)
3917 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3919 error ("pointers are not permitted as case values");
3920 goto error_out;
3923 /* Case ranges are a GNU extension. */
3924 if (high_value && pedantic)
3925 pedwarn ("range expressions in switch statements are non-standard");
3927 type = TREE_TYPE (cond);
3928 if (low_value)
3930 low_value = check_case_value (low_value);
3931 low_value = convert_and_check (type, low_value);
3932 if (low_value == error_mark_node)
3933 goto error_out;
3935 if (high_value)
3937 high_value = check_case_value (high_value);
3938 high_value = convert_and_check (type, high_value);
3939 if (high_value == error_mark_node)
3940 goto error_out;
3943 if (low_value && high_value)
3945 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3946 really a case range, even though it was written that way.
3947 Remove the HIGH_VALUE to simplify later processing. */
3948 if (tree_int_cst_equal (low_value, high_value))
3949 high_value = NULL_TREE;
3950 else if (!tree_int_cst_lt (low_value, high_value))
3951 warning (0, "empty range specified");
3954 /* See if the case is in range of the type of the original testing
3955 expression. If both low_value and high_value are out of range,
3956 don't insert the case label and return NULL_TREE. */
3957 if (low_value
3958 && !check_case_bounds (type, orig_type,
3959 &low_value, high_value ? &high_value : NULL))
3960 return NULL_TREE;
3962 /* Look up the LOW_VALUE in the table of case labels we already
3963 have. */
3964 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3965 /* If there was not an exact match, check for overlapping ranges.
3966 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3967 that's a `default' label and the only overlap is an exact match. */
3968 if (!node && (low_value || high_value))
3970 splay_tree_node low_bound;
3971 splay_tree_node high_bound;
3973 /* Even though there wasn't an exact match, there might be an
3974 overlap between this case range and another case range.
3975 Since we've (inductively) not allowed any overlapping case
3976 ranges, we simply need to find the greatest low case label
3977 that is smaller that LOW_VALUE, and the smallest low case
3978 label that is greater than LOW_VALUE. If there is an overlap
3979 it will occur in one of these two ranges. */
3980 low_bound = splay_tree_predecessor (cases,
3981 (splay_tree_key) low_value);
3982 high_bound = splay_tree_successor (cases,
3983 (splay_tree_key) low_value);
3985 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3986 the LOW_VALUE, so there is no need to check unless the
3987 LOW_BOUND is in fact itself a case range. */
3988 if (low_bound
3989 && CASE_HIGH ((tree) low_bound->value)
3990 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3991 low_value) >= 0)
3992 node = low_bound;
3993 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3994 range is bigger than the low end of the current range, so we
3995 are only interested if the current range is a real range, and
3996 not an ordinary case label. */
3997 else if (high_bound
3998 && high_value
3999 && (tree_int_cst_compare ((tree) high_bound->key,
4000 high_value)
4001 <= 0))
4002 node = high_bound;
4004 /* If there was an overlap, issue an error. */
4005 if (node)
4007 tree duplicate = CASE_LABEL ((tree) node->value);
4009 if (high_value)
4011 error ("duplicate (or overlapping) case value");
4012 error ("%Jthis is the first entry overlapping that value", duplicate);
4014 else if (low_value)
4016 error ("duplicate case value") ;
4017 error ("%Jpreviously used here", duplicate);
4019 else
4021 error ("multiple default labels in one switch");
4022 error ("%Jthis is the first default label", duplicate);
4024 goto error_out;
4027 /* Add a CASE_LABEL to the statement-tree. */
4028 case_label = add_stmt (build_case_label (low_value, high_value, label));
4029 /* Register this case label in the splay tree. */
4030 splay_tree_insert (cases,
4031 (splay_tree_key) low_value,
4032 (splay_tree_value) case_label);
4034 return case_label;
4036 error_out:
4037 /* Add a label so that the back-end doesn't think that the beginning of
4038 the switch is unreachable. Note that we do not add a case label, as
4039 that just leads to duplicates and thence to failure later on. */
4040 if (!cases->root)
4042 tree t = create_artificial_label ();
4043 add_stmt (build_stmt (LABEL_EXPR, t));
4045 return error_mark_node;
4048 /* Subroutines of c_do_switch_warnings, called via splay_tree_foreach.
4049 Used to verify that case values match up with enumerator values. */
4051 static void
4052 match_case_to_enum_1 (tree key, tree type, tree label)
4054 char buf[2 + 2*HOST_BITS_PER_WIDE_INT/4 + 1];
4056 /* ??? Not working too hard to print the double-word value.
4057 Should perhaps be done with %lwd in the diagnostic routines? */
4058 if (TREE_INT_CST_HIGH (key) == 0)
4059 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_UNSIGNED,
4060 TREE_INT_CST_LOW (key));
4061 else if (!TYPE_UNSIGNED (type)
4062 && TREE_INT_CST_HIGH (key) == -1
4063 && TREE_INT_CST_LOW (key) != 0)
4064 snprintf (buf, sizeof (buf), "-" HOST_WIDE_INT_PRINT_UNSIGNED,
4065 -TREE_INT_CST_LOW (key));
4066 else
4067 snprintf (buf, sizeof (buf), HOST_WIDE_INT_PRINT_DOUBLE_HEX,
4068 TREE_INT_CST_HIGH (key), TREE_INT_CST_LOW (key));
4070 if (TYPE_NAME (type) == 0)
4071 warning (0, "%Jcase value %qs not in enumerated type",
4072 CASE_LABEL (label), buf);
4073 else
4074 warning (0, "%Jcase value %qs not in enumerated type %qT",
4075 CASE_LABEL (label), buf, type);
4078 /* Subroutine of c_do_switch_warnings, called via splay_tree_foreach.
4079 Used to verify that case values match up with enumerator values. */
4081 static int
4082 match_case_to_enum (splay_tree_node node, void *data)
4084 tree label = (tree) node->value;
4085 tree type = (tree) data;
4087 /* Skip default case. */
4088 if (!CASE_LOW (label))
4089 return 0;
4091 /* If CASE_LOW_SEEN is not set, that means CASE_LOW did not appear
4092 when we did our enum->case scan. Reset our scratch bit after. */
4093 if (!CASE_LOW_SEEN (label))
4094 match_case_to_enum_1 (CASE_LOW (label), type, label);
4095 else
4096 CASE_LOW_SEEN (label) = 0;
4098 /* If CASE_HIGH is non-null, we have a range. If CASE_HIGH_SEEN is
4099 not set, that means that CASE_HIGH did not appear when we did our
4100 enum->case scan. Reset our scratch bit after. */
4101 if (CASE_HIGH (label))
4103 if (!CASE_HIGH_SEEN (label))
4104 match_case_to_enum_1 (CASE_HIGH (label), type, label);
4105 else
4106 CASE_HIGH_SEEN (label) = 0;
4109 return 0;
4112 /* Handle -Wswitch*. Called from the front end after parsing the
4113 switch construct. */
4114 /* ??? Should probably be somewhere generic, since other languages
4115 besides C and C++ would want this. At the moment, however, C/C++
4116 are the only tree-ssa languages that support enumerations at all,
4117 so the point is moot. */
4119 void
4120 c_do_switch_warnings (splay_tree cases, location_t switch_location,
4121 tree type, tree cond)
4123 splay_tree_node default_node;
4124 splay_tree_node node;
4125 tree chain;
4127 if (!warn_switch && !warn_switch_enum && !warn_switch_default)
4128 return;
4130 default_node = splay_tree_lookup (cases, (splay_tree_key) NULL);
4131 if (!default_node)
4132 warning (OPT_Wswitch_default, "%Hswitch missing default case",
4133 &switch_location);
4135 /* From here on, we only care about about enumerated types. */
4136 if (!type || TREE_CODE (type) != ENUMERAL_TYPE)
4137 return;
4139 /* If the switch expression was an enumerated type, check that
4140 exactly all enumeration literals are covered by the cases.
4141 The check is made when -Wswitch was specified and there is no
4142 default case, or when -Wswitch-enum was specified. */
4144 if (!warn_switch_enum
4145 && !(warn_switch && !default_node))
4146 return;
4148 /* Clearing COND if it is not an integer constant simplifies
4149 the tests inside the loop below. */
4150 if (TREE_CODE (cond) != INTEGER_CST)
4151 cond = NULL_TREE;
4153 /* The time complexity here is O(N*lg(N)) worst case, but for the
4154 common case of monotonically increasing enumerators, it is
4155 O(N), since the nature of the splay tree will keep the next
4156 element adjacent to the root at all times. */
4158 for (chain = TYPE_VALUES (type); chain; chain = TREE_CHAIN (chain))
4160 tree value = TREE_VALUE (chain);
4161 node = splay_tree_lookup (cases, (splay_tree_key) value);
4162 if (node)
4164 /* Mark the CASE_LOW part of the case entry as seen. */
4165 tree label = (tree) node->value;
4166 CASE_LOW_SEEN (label) = 1;
4167 continue;
4170 /* Even though there wasn't an exact match, there might be a
4171 case range which includes the enumator's value. */
4172 node = splay_tree_predecessor (cases, (splay_tree_key) value);
4173 if (node && CASE_HIGH ((tree) node->value))
4175 tree label = (tree) node->value;
4176 int cmp = tree_int_cst_compare (CASE_HIGH (label), value);
4177 if (cmp >= 0)
4179 /* If we match the upper bound exactly, mark the CASE_HIGH
4180 part of the case entry as seen. */
4181 if (cmp == 0)
4182 CASE_HIGH_SEEN (label) = 1;
4183 continue;
4187 /* We've now determined that this enumerated literal isn't
4188 handled by the case labels of the switch statement. */
4190 /* If the switch expression is a constant, we only really care
4191 about whether that constant is handled by the switch. */
4192 if (cond && tree_int_cst_compare (cond, value))
4193 continue;
4195 warning (0, "%Henumeration value %qE not handled in switch",
4196 &switch_location, TREE_PURPOSE (chain));
4199 /* Warn if there are case expressions that don't correspond to
4200 enumerators. This can occur since C and C++ don't enforce
4201 type-checking of assignments to enumeration variables.
4203 The time complexity here is now always O(N) worst case, since
4204 we should have marked both the lower bound and upper bound of
4205 every disjoint case label, with CASE_LOW_SEEN and CASE_HIGH_SEEN
4206 above. This scan also resets those fields. */
4207 splay_tree_foreach (cases, match_case_to_enum, type);
4210 /* Finish an expression taking the address of LABEL (an
4211 IDENTIFIER_NODE). Returns an expression for the address. */
4213 tree
4214 finish_label_address_expr (tree label)
4216 tree result;
4218 if (pedantic)
4219 pedwarn ("taking the address of a label is non-standard");
4221 if (label == error_mark_node)
4222 return error_mark_node;
4224 label = lookup_label (label);
4225 if (label == NULL_TREE)
4226 result = null_pointer_node;
4227 else
4229 TREE_USED (label) = 1;
4230 result = build1 (ADDR_EXPR, ptr_type_node, label);
4231 /* The current function in not necessarily uninlinable.
4232 Computed gotos are incompatible with inlining, but the value
4233 here could be used only in a diagnostic, for example. */
4236 return result;
4239 /* Hook used by expand_expr to expand language-specific tree codes. */
4240 /* The only things that should go here are bits needed to expand
4241 constant initializers. Everything else should be handled by the
4242 gimplification routines. */
4245 c_expand_expr (tree exp, rtx target, enum machine_mode tmode,
4246 int modifier /* Actually enum_modifier. */,
4247 rtx *alt_rtl)
4249 switch (TREE_CODE (exp))
4251 case COMPOUND_LITERAL_EXPR:
4253 /* Initialize the anonymous variable declared in the compound
4254 literal, then return the variable. */
4255 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4256 emit_local_var (decl);
4257 return expand_expr_real (decl, target, tmode, modifier, alt_rtl);
4260 default:
4261 gcc_unreachable ();
4266 /* Generate the RTL for the body of FNDECL. */
4268 void
4269 c_expand_body (tree fndecl)
4272 if (!DECL_INITIAL (fndecl)
4273 || DECL_INITIAL (fndecl) == error_mark_node)
4274 return;
4276 tree_rest_of_compilation (fndecl);
4278 if (DECL_STATIC_CONSTRUCTOR (fndecl)
4279 && targetm.have_ctors_dtors)
4280 targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
4281 decl_init_priority_lookup (fndecl));
4282 if (DECL_STATIC_DESTRUCTOR (fndecl)
4283 && targetm.have_ctors_dtors)
4284 targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
4285 decl_fini_priority_lookup (fndecl));
4288 /* Hook used by staticp to handle language-specific tree codes. */
4290 tree
4291 c_staticp (tree exp)
4293 return (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4294 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp))
4295 ? exp : NULL);
4299 /* Given a boolean expression ARG, return a tree representing an increment
4300 or decrement (as indicated by CODE) of ARG. The front end must check for
4301 invalid cases (e.g., decrement in C++). */
4302 tree
4303 boolean_increment (enum tree_code code, tree arg)
4305 tree val;
4306 tree true_res = boolean_true_node;
4308 arg = stabilize_reference (arg);
4309 switch (code)
4311 case PREINCREMENT_EXPR:
4312 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4313 break;
4314 case POSTINCREMENT_EXPR:
4315 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4316 arg = save_expr (arg);
4317 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4318 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4319 break;
4320 case PREDECREMENT_EXPR:
4321 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4322 invert_truthvalue (arg));
4323 break;
4324 case POSTDECREMENT_EXPR:
4325 val = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg,
4326 invert_truthvalue (arg));
4327 arg = save_expr (arg);
4328 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4329 val = build2 (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4330 break;
4331 default:
4332 gcc_unreachable ();
4334 TREE_SIDE_EFFECTS (val) = 1;
4335 return val;
4338 /* Built-in macros for stddef.h, that require macros defined in this
4339 file. */
4340 void
4341 c_stddef_cpp_builtins(void)
4343 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4344 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4345 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4346 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4347 builtin_define_with_value ("__INTMAX_TYPE__", INTMAX_TYPE, 0);
4348 builtin_define_with_value ("__UINTMAX_TYPE__", UINTMAX_TYPE, 0);
4351 static void
4352 c_init_attributes (void)
4354 /* Fill in the built_in_attributes array. */
4355 #define DEF_ATTR_NULL_TREE(ENUM) \
4356 built_in_attributes[(int) ENUM] = NULL_TREE;
4357 #define DEF_ATTR_INT(ENUM, VALUE) \
4358 built_in_attributes[(int) ENUM] = build_int_cst (NULL_TREE, VALUE);
4359 #define DEF_ATTR_IDENT(ENUM, STRING) \
4360 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4361 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4362 built_in_attributes[(int) ENUM] \
4363 = tree_cons (built_in_attributes[(int) PURPOSE], \
4364 built_in_attributes[(int) VALUE], \
4365 built_in_attributes[(int) CHAIN]);
4366 #include "builtin-attrs.def"
4367 #undef DEF_ATTR_NULL_TREE
4368 #undef DEF_ATTR_INT
4369 #undef DEF_ATTR_IDENT
4370 #undef DEF_ATTR_TREE_LIST
4373 /* Attribute handlers common to C front ends. */
4375 /* Handle a "packed" attribute; arguments as in
4376 struct attribute_spec.handler. */
4378 static tree
4379 handle_packed_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4380 int flags, bool *no_add_attrs)
4382 if (TYPE_P (*node))
4384 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4385 *node = build_variant_type_copy (*node);
4386 TYPE_PACKED (*node) = 1;
4388 else if (TREE_CODE (*node) == FIELD_DECL)
4390 if (TYPE_ALIGN (TREE_TYPE (*node)) <= BITS_PER_UNIT)
4391 warning (OPT_Wattributes,
4392 "%qE attribute ignored for field of type %qT",
4393 name, TREE_TYPE (*node));
4394 else
4395 DECL_PACKED (*node) = 1;
4397 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4398 used for DECL_REGISTER. It wouldn't mean anything anyway.
4399 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4400 that changes what the typedef is typing. */
4401 else
4403 warning (OPT_Wattributes, "%qE attribute ignored", name);
4404 *no_add_attrs = true;
4407 return NULL_TREE;
4410 /* Handle a "nocommon" attribute; arguments as in
4411 struct attribute_spec.handler. */
4413 static tree
4414 handle_nocommon_attribute (tree *node, tree name,
4415 tree ARG_UNUSED (args),
4416 int ARG_UNUSED (flags), bool *no_add_attrs)
4418 if (TREE_CODE (*node) == VAR_DECL)
4419 DECL_COMMON (*node) = 0;
4420 else
4422 warning (OPT_Wattributes, "%qE attribute ignored", name);
4423 *no_add_attrs = true;
4426 return NULL_TREE;
4429 /* Handle a "common" attribute; arguments as in
4430 struct attribute_spec.handler. */
4432 static tree
4433 handle_common_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4434 int ARG_UNUSED (flags), bool *no_add_attrs)
4436 if (TREE_CODE (*node) == VAR_DECL)
4437 DECL_COMMON (*node) = 1;
4438 else
4440 warning (OPT_Wattributes, "%qE attribute ignored", name);
4441 *no_add_attrs = true;
4444 return NULL_TREE;
4447 /* Handle a "noreturn" attribute; arguments as in
4448 struct attribute_spec.handler. */
4450 static tree
4451 handle_noreturn_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4452 int ARG_UNUSED (flags), bool *no_add_attrs)
4454 tree type = TREE_TYPE (*node);
4456 /* See FIXME comment in c_common_attribute_table. */
4457 if (TREE_CODE (*node) == FUNCTION_DECL)
4458 TREE_THIS_VOLATILE (*node) = 1;
4459 else if (TREE_CODE (type) == POINTER_TYPE
4460 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4461 TREE_TYPE (*node)
4462 = build_pointer_type
4463 (build_type_variant (TREE_TYPE (type),
4464 TYPE_READONLY (TREE_TYPE (type)), 1));
4465 else
4467 warning (OPT_Wattributes, "%qE attribute ignored", name);
4468 *no_add_attrs = true;
4471 return NULL_TREE;
4474 /* Handle a "hot" and attribute; arguments as in
4475 struct attribute_spec.handler. */
4477 static tree
4478 handle_hot_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4479 int ARG_UNUSED (flags), bool *no_add_attrs)
4481 if (TREE_CODE (*node) == FUNCTION_DECL)
4483 if (lookup_attribute ("cold", DECL_ATTRIBUTES (*node)) != NULL)
4485 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4486 name, "cold");
4487 *no_add_attrs = true;
4489 /* Do nothing else, just set the attribute. We'll get at
4490 it later with lookup_attribute. */
4492 else
4494 warning (OPT_Wattributes, "%qE attribute ignored", name);
4495 *no_add_attrs = true;
4498 return NULL_TREE;
4500 /* Handle a "cold" and attribute; arguments as in
4501 struct attribute_spec.handler. */
4503 static tree
4504 handle_cold_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4505 int ARG_UNUSED (flags), bool *no_add_attrs)
4507 if (TREE_CODE (*node) == FUNCTION_DECL)
4509 if (lookup_attribute ("hot", DECL_ATTRIBUTES (*node)) != NULL)
4511 warning (OPT_Wattributes, "%qE attribute conflicts with attribute %s",
4512 name, "hot");
4513 *no_add_attrs = true;
4515 /* Do nothing else, just set the attribute. We'll get at
4516 it later with lookup_attribute. */
4518 else
4520 warning (OPT_Wattributes, "%qE attribute ignored", name);
4521 *no_add_attrs = true;
4524 return NULL_TREE;
4527 /* Handle a "noinline" attribute; arguments as in
4528 struct attribute_spec.handler. */
4530 static tree
4531 handle_noinline_attribute (tree *node, tree name,
4532 tree ARG_UNUSED (args),
4533 int ARG_UNUSED (flags), bool *no_add_attrs)
4535 if (TREE_CODE (*node) == FUNCTION_DECL)
4536 DECL_UNINLINABLE (*node) = 1;
4537 else
4539 warning (OPT_Wattributes, "%qE attribute ignored", name);
4540 *no_add_attrs = true;
4543 return NULL_TREE;
4546 /* Handle a "always_inline" attribute; arguments as in
4547 struct attribute_spec.handler. */
4549 static tree
4550 handle_always_inline_attribute (tree *node, tree name,
4551 tree ARG_UNUSED (args),
4552 int ARG_UNUSED (flags),
4553 bool *no_add_attrs)
4555 if (TREE_CODE (*node) == FUNCTION_DECL)
4557 /* Do nothing else, just set the attribute. We'll get at
4558 it later with lookup_attribute. */
4560 else
4562 warning (OPT_Wattributes, "%qE attribute ignored", name);
4563 *no_add_attrs = true;
4566 return NULL_TREE;
4569 /* Handle a "gnu_inline" attribute; arguments as in
4570 struct attribute_spec.handler. */
4572 static tree
4573 handle_gnu_inline_attribute (tree *node, tree name,
4574 tree ARG_UNUSED (args),
4575 int ARG_UNUSED (flags),
4576 bool *no_add_attrs)
4578 if (TREE_CODE (*node) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (*node))
4580 /* Do nothing else, just set the attribute. We'll get at
4581 it later with lookup_attribute. */
4583 else
4585 warning (OPT_Wattributes, "%qE attribute ignored", name);
4586 *no_add_attrs = true;
4589 return NULL_TREE;
4592 /* Handle a "flatten" attribute; arguments as in
4593 struct attribute_spec.handler. */
4595 static tree
4596 handle_flatten_attribute (tree *node, tree name,
4597 tree args ATTRIBUTE_UNUSED,
4598 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4600 if (TREE_CODE (*node) == FUNCTION_DECL)
4601 /* Do nothing else, just set the attribute. We'll get at
4602 it later with lookup_attribute. */
4604 else
4606 warning (OPT_Wattributes, "%qE attribute ignored", name);
4607 *no_add_attrs = true;
4610 return NULL_TREE;
4614 /* Handle a "used" attribute; arguments as in
4615 struct attribute_spec.handler. */
4617 static tree
4618 handle_used_attribute (tree *pnode, tree name, tree ARG_UNUSED (args),
4619 int ARG_UNUSED (flags), bool *no_add_attrs)
4621 tree node = *pnode;
4623 if (TREE_CODE (node) == FUNCTION_DECL
4624 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4626 TREE_USED (node) = 1;
4627 DECL_PRESERVE_P (node) = 1;
4629 else
4631 warning (OPT_Wattributes, "%qE attribute ignored", name);
4632 *no_add_attrs = true;
4635 return NULL_TREE;
4638 /* Handle a "unused" attribute; arguments as in
4639 struct attribute_spec.handler. */
4641 static tree
4642 handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4643 int flags, bool *no_add_attrs)
4645 if (DECL_P (*node))
4647 tree decl = *node;
4649 if (TREE_CODE (decl) == PARM_DECL
4650 || TREE_CODE (decl) == VAR_DECL
4651 || TREE_CODE (decl) == FUNCTION_DECL
4652 || TREE_CODE (decl) == LABEL_DECL
4653 || TREE_CODE (decl) == TYPE_DECL)
4654 TREE_USED (decl) = 1;
4655 else
4657 warning (OPT_Wattributes, "%qE attribute ignored", name);
4658 *no_add_attrs = true;
4661 else
4663 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4664 *node = build_variant_type_copy (*node);
4665 TREE_USED (*node) = 1;
4668 return NULL_TREE;
4671 /* Handle a "externally_visible" attribute; arguments as in
4672 struct attribute_spec.handler. */
4674 static tree
4675 handle_externally_visible_attribute (tree *pnode, tree name,
4676 tree ARG_UNUSED (args),
4677 int ARG_UNUSED (flags),
4678 bool *no_add_attrs)
4680 tree node = *pnode;
4682 if (TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
4684 if ((!TREE_STATIC (node) && TREE_CODE (node) != FUNCTION_DECL
4685 && !DECL_EXTERNAL (node)) || !TREE_PUBLIC (node))
4687 warning (OPT_Wattributes,
4688 "%qE attribute have effect only on public objects", name);
4689 *no_add_attrs = true;
4692 else
4694 warning (OPT_Wattributes, "%qE attribute ignored", name);
4695 *no_add_attrs = true;
4698 return NULL_TREE;
4701 /* Handle a "const" attribute; arguments as in
4702 struct attribute_spec.handler. */
4704 static tree
4705 handle_const_attribute (tree *node, tree name, tree ARG_UNUSED (args),
4706 int ARG_UNUSED (flags), bool *no_add_attrs)
4708 tree type = TREE_TYPE (*node);
4710 /* See FIXME comment on noreturn in c_common_attribute_table. */
4711 if (TREE_CODE (*node) == FUNCTION_DECL)
4712 TREE_READONLY (*node) = 1;
4713 else if (TREE_CODE (type) == POINTER_TYPE
4714 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4715 TREE_TYPE (*node)
4716 = build_pointer_type
4717 (build_type_variant (TREE_TYPE (type), 1,
4718 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4719 else
4721 warning (OPT_Wattributes, "%qE attribute ignored", name);
4722 *no_add_attrs = true;
4725 return NULL_TREE;
4728 /* Handle a "transparent_union" attribute; arguments as in
4729 struct attribute_spec.handler. */
4731 static tree
4732 handle_transparent_union_attribute (tree *node, tree name,
4733 tree ARG_UNUSED (args), int flags,
4734 bool *no_add_attrs)
4736 tree type = NULL;
4738 *no_add_attrs = true;
4740 if (DECL_P (*node))
4742 if (TREE_CODE (*node) != TYPE_DECL)
4743 goto ignored;
4744 node = &TREE_TYPE (*node);
4745 type = *node;
4747 else if (TYPE_P (*node))
4748 type = *node;
4749 else
4750 goto ignored;
4752 if (TREE_CODE (type) == UNION_TYPE)
4754 /* When IN_PLACE is set, leave the check for FIELDS and MODE to
4755 the code in finish_struct. */
4756 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4758 if (TYPE_FIELDS (type) == NULL_TREE
4759 || TYPE_MODE (type) != DECL_MODE (TYPE_FIELDS (type)))
4760 goto ignored;
4762 /* A type variant isn't good enough, since we don't a cast
4763 to such a type removed as a no-op. */
4764 *node = type = build_duplicate_type (type);
4767 TYPE_TRANSPARENT_UNION (type) = 1;
4768 return NULL_TREE;
4771 ignored:
4772 warning (OPT_Wattributes, "%qE attribute ignored", name);
4773 return NULL_TREE;
4776 /* Subroutine of handle_{con,de}structor_attribute. Evaluate ARGS to
4777 get the requested priority for a constructor or destructor,
4778 possibly issuing diagnostics for invalid or reserved
4779 priorities. */
4781 static priority_type
4782 get_priority (tree args, bool is_destructor)
4784 HOST_WIDE_INT pri;
4785 tree arg;
4787 if (!args)
4788 return DEFAULT_INIT_PRIORITY;
4790 if (!SUPPORTS_INIT_PRIORITY)
4792 if (is_destructor)
4793 error ("destructor priorities are not supported");
4794 else
4795 error ("constructor priorities are not supported");
4796 return DEFAULT_INIT_PRIORITY;
4799 arg = TREE_VALUE (args);
4800 if (!host_integerp (arg, /*pos=*/0)
4801 || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
4802 goto invalid;
4804 pri = tree_low_cst (TREE_VALUE (args), /*pos=*/0);
4805 if (pri < 0 || pri > MAX_INIT_PRIORITY)
4806 goto invalid;
4808 if (pri <= MAX_RESERVED_INIT_PRIORITY)
4810 if (is_destructor)
4811 warning (0,
4812 "destructor priorities from 0 to %d are reserved "
4813 "for the implementation",
4814 MAX_RESERVED_INIT_PRIORITY);
4815 else
4816 warning (0,
4817 "constructor priorities from 0 to %d are reserved "
4818 "for the implementation",
4819 MAX_RESERVED_INIT_PRIORITY);
4821 return pri;
4823 invalid:
4824 if (is_destructor)
4825 error ("destructor priorities must be integers from 0 to %d inclusive",
4826 MAX_INIT_PRIORITY);
4827 else
4828 error ("constructor priorities must be integers from 0 to %d inclusive",
4829 MAX_INIT_PRIORITY);
4830 return DEFAULT_INIT_PRIORITY;
4833 /* Handle a "constructor" attribute; arguments as in
4834 struct attribute_spec.handler. */
4836 static tree
4837 handle_constructor_attribute (tree *node, tree name, tree args,
4838 int ARG_UNUSED (flags),
4839 bool *no_add_attrs)
4841 tree decl = *node;
4842 tree type = TREE_TYPE (decl);
4844 if (TREE_CODE (decl) == FUNCTION_DECL
4845 && TREE_CODE (type) == FUNCTION_TYPE
4846 && decl_function_context (decl) == 0)
4848 priority_type priority;
4849 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4850 priority = get_priority (args, /*is_destructor=*/false);
4851 SET_DECL_INIT_PRIORITY (decl, priority);
4852 TREE_USED (decl) = 1;
4854 else
4856 warning (OPT_Wattributes, "%qE attribute ignored", name);
4857 *no_add_attrs = true;
4860 return NULL_TREE;
4863 /* Handle a "destructor" attribute; arguments as in
4864 struct attribute_spec.handler. */
4866 static tree
4867 handle_destructor_attribute (tree *node, tree name, tree args,
4868 int ARG_UNUSED (flags),
4869 bool *no_add_attrs)
4871 tree decl = *node;
4872 tree type = TREE_TYPE (decl);
4874 if (TREE_CODE (decl) == FUNCTION_DECL
4875 && TREE_CODE (type) == FUNCTION_TYPE
4876 && decl_function_context (decl) == 0)
4878 priority_type priority;
4879 DECL_STATIC_DESTRUCTOR (decl) = 1;
4880 priority = get_priority (args, /*is_destructor=*/true);
4881 SET_DECL_FINI_PRIORITY (decl, priority);
4882 TREE_USED (decl) = 1;
4884 else
4886 warning (OPT_Wattributes, "%qE attribute ignored", name);
4887 *no_add_attrs = true;
4890 return NULL_TREE;
4893 /* Handle a "mode" attribute; arguments as in
4894 struct attribute_spec.handler. */
4896 static tree
4897 handle_mode_attribute (tree *node, tree name, tree args,
4898 int ARG_UNUSED (flags), bool *no_add_attrs)
4900 tree type = *node;
4902 *no_add_attrs = true;
4904 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4905 warning (OPT_Wattributes, "%qE attribute ignored", name);
4906 else
4908 int j;
4909 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4910 int len = strlen (p);
4911 enum machine_mode mode = VOIDmode;
4912 tree typefm;
4913 bool valid_mode;
4915 if (len > 4 && p[0] == '_' && p[1] == '_'
4916 && p[len - 1] == '_' && p[len - 2] == '_')
4918 char *newp = (char *) alloca (len - 1);
4920 strcpy (newp, &p[2]);
4921 newp[len - 4] = '\0';
4922 p = newp;
4925 /* Change this type to have a type with the specified mode.
4926 First check for the special modes. */
4927 if (!strcmp (p, "byte"))
4928 mode = byte_mode;
4929 else if (!strcmp (p, "word"))
4930 mode = word_mode;
4931 else if (!strcmp (p, "pointer"))
4932 mode = ptr_mode;
4933 else
4934 for (j = 0; j < NUM_MACHINE_MODES; j++)
4935 if (!strcmp (p, GET_MODE_NAME (j)))
4937 mode = (enum machine_mode) j;
4938 break;
4941 if (mode == VOIDmode)
4943 error ("unknown machine mode %qs", p);
4944 return NULL_TREE;
4947 valid_mode = false;
4948 switch (GET_MODE_CLASS (mode))
4950 case MODE_INT:
4951 case MODE_PARTIAL_INT:
4952 case MODE_FLOAT:
4953 case MODE_DECIMAL_FLOAT:
4954 valid_mode = targetm.scalar_mode_supported_p (mode);
4955 break;
4957 case MODE_COMPLEX_INT:
4958 case MODE_COMPLEX_FLOAT:
4959 valid_mode = targetm.scalar_mode_supported_p (GET_MODE_INNER (mode));
4960 break;
4962 case MODE_VECTOR_INT:
4963 case MODE_VECTOR_FLOAT:
4964 warning (OPT_Wattributes, "specifying vector types with "
4965 "__attribute__ ((mode)) is deprecated");
4966 warning (OPT_Wattributes,
4967 "use __attribute__ ((vector_size)) instead");
4968 valid_mode = vector_mode_valid_p (mode);
4969 break;
4971 default:
4972 break;
4974 if (!valid_mode)
4976 error ("unable to emulate %qs", p);
4977 return NULL_TREE;
4980 if (POINTER_TYPE_P (type))
4982 tree (*fn)(tree, enum machine_mode, bool);
4984 if (!targetm.valid_pointer_mode (mode))
4986 error ("invalid pointer mode %qs", p);
4987 return NULL_TREE;
4990 if (TREE_CODE (type) == POINTER_TYPE)
4991 fn = build_pointer_type_for_mode;
4992 else
4993 fn = build_reference_type_for_mode;
4994 typefm = fn (TREE_TYPE (type), mode, false);
4996 else
4997 typefm = lang_hooks.types.type_for_mode (mode, TYPE_UNSIGNED (type));
4999 if (typefm == NULL_TREE)
5001 error ("no data type for mode %qs", p);
5002 return NULL_TREE;
5004 else if (TREE_CODE (type) == ENUMERAL_TYPE)
5006 /* For enumeral types, copy the precision from the integer
5007 type returned above. If not an INTEGER_TYPE, we can't use
5008 this mode for this type. */
5009 if (TREE_CODE (typefm) != INTEGER_TYPE)
5011 error ("cannot use mode %qs for enumeral types", p);
5012 return NULL_TREE;
5015 if (flags & ATTR_FLAG_TYPE_IN_PLACE)
5017 TYPE_PRECISION (type) = TYPE_PRECISION (typefm);
5018 typefm = type;
5020 else
5022 /* We cannot build a type variant, as there's code that assumes
5023 that TYPE_MAIN_VARIANT has the same mode. This includes the
5024 debug generators. Instead, create a subrange type. This
5025 results in all of the enumeral values being emitted only once
5026 in the original, and the subtype gets them by reference. */
5027 if (TYPE_UNSIGNED (type))
5028 typefm = make_unsigned_type (TYPE_PRECISION (typefm));
5029 else
5030 typefm = make_signed_type (TYPE_PRECISION (typefm));
5031 TREE_TYPE (typefm) = type;
5034 else if (VECTOR_MODE_P (mode)
5035 ? TREE_CODE (type) != TREE_CODE (TREE_TYPE (typefm))
5036 : TREE_CODE (type) != TREE_CODE (typefm))
5038 error ("mode %qs applied to inappropriate type", p);
5039 return NULL_TREE;
5042 *node = typefm;
5045 return NULL_TREE;
5048 /* Handle a "section" attribute; arguments as in
5049 struct attribute_spec.handler. */
5051 static tree
5052 handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5053 int ARG_UNUSED (flags), bool *no_add_attrs)
5055 tree decl = *node;
5057 if (targetm.have_named_sections)
5059 user_defined_section_attribute = true;
5061 if ((TREE_CODE (decl) == FUNCTION_DECL
5062 || TREE_CODE (decl) == VAR_DECL)
5063 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5065 if (TREE_CODE (decl) == VAR_DECL
5066 && current_function_decl != NULL_TREE
5067 && !TREE_STATIC (decl))
5069 error ("%Jsection attribute cannot be specified for "
5070 "local variables", decl);
5071 *no_add_attrs = true;
5074 /* The decl may have already been given a section attribute
5075 from a previous declaration. Ensure they match. */
5076 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5077 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5078 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5080 error ("section of %q+D conflicts with previous declaration",
5081 *node);
5082 *no_add_attrs = true;
5084 else
5085 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5087 else
5089 error ("section attribute not allowed for %q+D", *node);
5090 *no_add_attrs = true;
5093 else
5095 error ("%Jsection attributes are not supported for this target", *node);
5096 *no_add_attrs = true;
5099 return NULL_TREE;
5102 /* Handle a "aligned" attribute; arguments as in
5103 struct attribute_spec.handler. */
5105 static tree
5106 handle_aligned_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5107 int flags, bool *no_add_attrs)
5109 tree decl = NULL_TREE;
5110 tree *type = NULL;
5111 int is_type = 0;
5112 tree align_expr = (args ? TREE_VALUE (args)
5113 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5114 int i;
5116 if (DECL_P (*node))
5118 decl = *node;
5119 type = &TREE_TYPE (decl);
5120 is_type = TREE_CODE (*node) == TYPE_DECL;
5122 else if (TYPE_P (*node))
5123 type = node, is_type = 1;
5125 if (TREE_CODE (align_expr) != INTEGER_CST)
5127 error ("requested alignment is not a constant");
5128 *no_add_attrs = true;
5130 else if ((i = tree_log2 (align_expr)) == -1)
5132 error ("requested alignment is not a power of 2");
5133 *no_add_attrs = true;
5135 else if (i > HOST_BITS_PER_INT - 2)
5137 error ("requested alignment is too large");
5138 *no_add_attrs = true;
5140 else if (is_type)
5142 /* If we have a TYPE_DECL, then copy the type, so that we
5143 don't accidentally modify a builtin type. See pushdecl. */
5144 if (decl && TREE_TYPE (decl) != error_mark_node
5145 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5147 tree tt = TREE_TYPE (decl);
5148 *type = build_variant_type_copy (*type);
5149 DECL_ORIGINAL_TYPE (decl) = tt;
5150 TYPE_NAME (*type) = decl;
5151 TREE_USED (*type) = TREE_USED (decl);
5152 TREE_TYPE (decl) = *type;
5154 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5155 *type = build_variant_type_copy (*type);
5157 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5158 TYPE_USER_ALIGN (*type) = 1;
5160 else if (TREE_CODE (decl) != VAR_DECL
5161 && TREE_CODE (decl) != FIELD_DECL)
5163 error ("alignment may not be specified for %q+D", decl);
5164 *no_add_attrs = true;
5166 else
5168 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5169 DECL_USER_ALIGN (decl) = 1;
5172 return NULL_TREE;
5175 /* Handle a "weak" attribute; arguments as in
5176 struct attribute_spec.handler. */
5178 static tree
5179 handle_weak_attribute (tree *node, tree name,
5180 tree ARG_UNUSED (args),
5181 int ARG_UNUSED (flags),
5182 bool * ARG_UNUSED (no_add_attrs))
5184 if (TREE_CODE (*node) == FUNCTION_DECL
5185 || TREE_CODE (*node) == VAR_DECL)
5186 declare_weak (*node);
5187 else
5188 warning (OPT_Wattributes, "%qE attribute ignored", name);
5191 return NULL_TREE;
5194 /* Handle an "alias" attribute; arguments as in
5195 struct attribute_spec.handler. */
5197 static tree
5198 handle_alias_attribute (tree *node, tree name, tree args,
5199 int ARG_UNUSED (flags), bool *no_add_attrs)
5201 tree decl = *node;
5203 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5204 || (TREE_CODE (decl) != FUNCTION_DECL
5205 && TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
5206 /* A static variable declaration is always a tentative definition,
5207 but the alias is a non-tentative definition which overrides. */
5208 || (TREE_CODE (decl) != FUNCTION_DECL
5209 && ! TREE_PUBLIC (decl) && DECL_INITIAL (decl)))
5211 error ("%q+D defined both normally and as an alias", decl);
5212 *no_add_attrs = true;
5215 /* Note that the very first time we process a nested declaration,
5216 decl_function_context will not be set. Indeed, *would* never
5217 be set except for the DECL_INITIAL/DECL_EXTERNAL frobbery that
5218 we do below. After such frobbery, pushdecl would set the context.
5219 In any case, this is never what we want. */
5220 else if (decl_function_context (decl) == 0 && current_function_decl == NULL)
5222 tree id;
5224 id = TREE_VALUE (args);
5225 if (TREE_CODE (id) != STRING_CST)
5227 error ("alias argument not a string");
5228 *no_add_attrs = true;
5229 return NULL_TREE;
5231 id = get_identifier (TREE_STRING_POINTER (id));
5232 /* This counts as a use of the object pointed to. */
5233 TREE_USED (id) = 1;
5235 if (TREE_CODE (decl) == FUNCTION_DECL)
5236 DECL_INITIAL (decl) = error_mark_node;
5237 else
5239 if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
5240 DECL_EXTERNAL (decl) = 1;
5241 else
5242 DECL_EXTERNAL (decl) = 0;
5243 TREE_STATIC (decl) = 1;
5246 else
5248 warning (OPT_Wattributes, "%qE attribute ignored", name);
5249 *no_add_attrs = true;
5252 return NULL_TREE;
5255 /* Handle a "weakref" attribute; arguments as in struct
5256 attribute_spec.handler. */
5258 static tree
5259 handle_weakref_attribute (tree *node, tree ARG_UNUSED (name), tree args,
5260 int flags, bool *no_add_attrs)
5262 tree attr = NULL_TREE;
5264 /* We must ignore the attribute when it is associated with
5265 local-scoped decls, since attribute alias is ignored and many
5266 such symbols do not even have a DECL_WEAK field. */
5267 if (decl_function_context (*node) || current_function_decl)
5269 warning (OPT_Wattributes, "%qE attribute ignored", name);
5270 *no_add_attrs = true;
5271 return NULL_TREE;
5274 /* The idea here is that `weakref("name")' mutates into `weakref,
5275 alias("name")', and weakref without arguments, in turn,
5276 implicitly adds weak. */
5278 if (args)
5280 attr = tree_cons (get_identifier ("alias"), args, attr);
5281 attr = tree_cons (get_identifier ("weakref"), NULL_TREE, attr);
5283 *no_add_attrs = true;
5285 decl_attributes (node, attr, flags);
5287 else
5289 if (lookup_attribute ("alias", DECL_ATTRIBUTES (*node)))
5290 error ("%Jweakref attribute must appear before alias attribute",
5291 *node);
5293 /* Can't call declare_weak because it wants this to be TREE_PUBLIC,
5294 and that isn't supported; and because it wants to add it to
5295 the list of weak decls, which isn't helpful. */
5296 DECL_WEAK (*node) = 1;
5299 return NULL_TREE;
5302 /* Handle an "visibility" attribute; arguments as in
5303 struct attribute_spec.handler. */
5305 static tree
5306 handle_visibility_attribute (tree *node, tree name, tree args,
5307 int ARG_UNUSED (flags),
5308 bool *ARG_UNUSED (no_add_attrs))
5310 tree decl = *node;
5311 tree id = TREE_VALUE (args);
5312 enum symbol_visibility vis;
5314 if (TYPE_P (*node))
5316 if (TREE_CODE (*node) == ENUMERAL_TYPE)
5317 /* OK */;
5318 else if (TREE_CODE (*node) != RECORD_TYPE && TREE_CODE (*node) != UNION_TYPE)
5320 warning (OPT_Wattributes, "%qE attribute ignored on non-class types",
5321 name);
5322 return NULL_TREE;
5324 else if (TYPE_FIELDS (*node))
5326 error ("%qE attribute ignored because %qT is already defined",
5327 name, *node);
5328 return NULL_TREE;
5331 else if (decl_function_context (decl) != 0 || !TREE_PUBLIC (decl))
5333 warning (OPT_Wattributes, "%qE attribute ignored", name);
5334 return NULL_TREE;
5337 if (TREE_CODE (id) != STRING_CST)
5339 error ("visibility argument not a string");
5340 return NULL_TREE;
5343 /* If this is a type, set the visibility on the type decl. */
5344 if (TYPE_P (decl))
5346 decl = TYPE_NAME (decl);
5347 if (!decl)
5348 return NULL_TREE;
5349 if (TREE_CODE (decl) == IDENTIFIER_NODE)
5351 warning (OPT_Wattributes, "%qE attribute ignored on types",
5352 name);
5353 return NULL_TREE;
5357 if (strcmp (TREE_STRING_POINTER (id), "default") == 0)
5358 vis = VISIBILITY_DEFAULT;
5359 else if (strcmp (TREE_STRING_POINTER (id), "internal") == 0)
5360 vis = VISIBILITY_INTERNAL;
5361 else if (strcmp (TREE_STRING_POINTER (id), "hidden") == 0)
5362 vis = VISIBILITY_HIDDEN;
5363 else if (strcmp (TREE_STRING_POINTER (id), "protected") == 0)
5364 vis = VISIBILITY_PROTECTED;
5365 else
5367 error ("visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
5368 vis = VISIBILITY_DEFAULT;
5371 if (DECL_VISIBILITY_SPECIFIED (decl)
5372 && vis != DECL_VISIBILITY (decl)
5373 && lookup_attribute ("visibility", (TYPE_P (*node)
5374 ? TYPE_ATTRIBUTES (*node)
5375 : DECL_ATTRIBUTES (decl))))
5376 error ("%qD redeclared with different visibility", decl);
5378 DECL_VISIBILITY (decl) = vis;
5379 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5381 /* Go ahead and attach the attribute to the node as well. This is needed
5382 so we can determine whether we have VISIBILITY_DEFAULT because the
5383 visibility was not specified, or because it was explicitly overridden
5384 from the containing scope. */
5386 return NULL_TREE;
5389 /* Determine the ELF symbol visibility for DECL, which is either a
5390 variable or a function. It is an error to use this function if a
5391 definition of DECL is not available in this translation unit.
5392 Returns true if the final visibility has been determined by this
5393 function; false if the caller is free to make additional
5394 modifications. */
5396 bool
5397 c_determine_visibility (tree decl)
5399 gcc_assert (TREE_CODE (decl) == VAR_DECL
5400 || TREE_CODE (decl) == FUNCTION_DECL);
5402 /* If the user explicitly specified the visibility with an
5403 attribute, honor that. DECL_VISIBILITY will have been set during
5404 the processing of the attribute. We check for an explicit
5405 attribute, rather than just checking DECL_VISIBILITY_SPECIFIED,
5406 to distinguish the use of an attribute from the use of a "#pragma
5407 GCC visibility push(...)"; in the latter case we still want other
5408 considerations to be able to overrule the #pragma. */
5409 if (lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
5410 return true;
5412 /* Anything that is exported must have default visibility. */
5413 if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
5414 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
5416 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5417 DECL_VISIBILITY_SPECIFIED (decl) = 1;
5418 return true;
5421 /* Set default visibility to whatever the user supplied with
5422 visibility_specified depending on #pragma GCC visibility. */
5423 if (!DECL_VISIBILITY_SPECIFIED (decl))
5425 DECL_VISIBILITY (decl) = default_visibility;
5426 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
5428 return false;
5431 /* Handle an "tls_model" attribute; arguments as in
5432 struct attribute_spec.handler. */
5434 static tree
5435 handle_tls_model_attribute (tree *node, tree name, tree args,
5436 int ARG_UNUSED (flags), bool *no_add_attrs)
5438 tree id;
5439 tree decl = *node;
5440 enum tls_model kind;
5442 *no_add_attrs = true;
5444 if (!DECL_THREAD_LOCAL_P (decl))
5446 warning (OPT_Wattributes, "%qE attribute ignored", name);
5447 return NULL_TREE;
5450 kind = DECL_TLS_MODEL (decl);
5451 id = TREE_VALUE (args);
5452 if (TREE_CODE (id) != STRING_CST)
5454 error ("tls_model argument not a string");
5455 return NULL_TREE;
5458 if (!strcmp (TREE_STRING_POINTER (id), "local-exec"))
5459 kind = TLS_MODEL_LOCAL_EXEC;
5460 else if (!strcmp (TREE_STRING_POINTER (id), "initial-exec"))
5461 kind = TLS_MODEL_INITIAL_EXEC;
5462 else if (!strcmp (TREE_STRING_POINTER (id), "local-dynamic"))
5463 kind = optimize ? TLS_MODEL_LOCAL_DYNAMIC : TLS_MODEL_GLOBAL_DYNAMIC;
5464 else if (!strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5465 kind = TLS_MODEL_GLOBAL_DYNAMIC;
5466 else
5467 error ("tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5469 DECL_TLS_MODEL (decl) = kind;
5470 return NULL_TREE;
5473 /* Handle a "no_instrument_function" attribute; arguments as in
5474 struct attribute_spec.handler. */
5476 static tree
5477 handle_no_instrument_function_attribute (tree *node, tree name,
5478 tree ARG_UNUSED (args),
5479 int ARG_UNUSED (flags),
5480 bool *no_add_attrs)
5482 tree decl = *node;
5484 if (TREE_CODE (decl) != FUNCTION_DECL)
5486 error ("%J%qE attribute applies only to functions", decl, name);
5487 *no_add_attrs = true;
5489 else if (DECL_INITIAL (decl))
5491 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5492 *no_add_attrs = true;
5494 else
5495 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5497 return NULL_TREE;
5500 /* Handle a "malloc" attribute; arguments as in
5501 struct attribute_spec.handler. */
5503 static tree
5504 handle_malloc_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5505 int ARG_UNUSED (flags), bool *no_add_attrs)
5507 if (TREE_CODE (*node) == FUNCTION_DECL
5508 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
5509 DECL_IS_MALLOC (*node) = 1;
5510 else
5512 warning (OPT_Wattributes, "%qE attribute ignored", name);
5513 *no_add_attrs = true;
5516 return NULL_TREE;
5519 /* Handle a "returns_twice" attribute; arguments as in
5520 struct attribute_spec.handler. */
5522 static tree
5523 handle_returns_twice_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5524 int ARG_UNUSED (flags), bool *no_add_attrs)
5526 if (TREE_CODE (*node) == FUNCTION_DECL)
5527 DECL_IS_RETURNS_TWICE (*node) = 1;
5528 else
5530 warning (OPT_Wattributes, "%qE attribute ignored", name);
5531 *no_add_attrs = true;
5534 return NULL_TREE;
5537 /* Handle a "no_limit_stack" attribute; arguments as in
5538 struct attribute_spec.handler. */
5540 static tree
5541 handle_no_limit_stack_attribute (tree *node, tree name,
5542 tree ARG_UNUSED (args),
5543 int ARG_UNUSED (flags),
5544 bool *no_add_attrs)
5546 tree decl = *node;
5548 if (TREE_CODE (decl) != FUNCTION_DECL)
5550 error ("%J%qE attribute applies only to functions", decl, name);
5551 *no_add_attrs = true;
5553 else if (DECL_INITIAL (decl))
5555 error ("%Jcan%'t set %qE attribute after definition", decl, name);
5556 *no_add_attrs = true;
5558 else
5559 DECL_NO_LIMIT_STACK (decl) = 1;
5561 return NULL_TREE;
5564 /* Handle a "pure" attribute; arguments as in
5565 struct attribute_spec.handler. */
5567 static tree
5568 handle_pure_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5569 int ARG_UNUSED (flags), bool *no_add_attrs)
5571 if (TREE_CODE (*node) == FUNCTION_DECL)
5572 DECL_IS_PURE (*node) = 1;
5573 /* ??? TODO: Support types. */
5574 else
5576 warning (OPT_Wattributes, "%qE attribute ignored", name);
5577 *no_add_attrs = true;
5580 return NULL_TREE;
5583 /* Handle a "no vops" attribute; arguments as in
5584 struct attribute_spec.handler. */
5586 static tree
5587 handle_novops_attribute (tree *node, tree ARG_UNUSED (name),
5588 tree ARG_UNUSED (args), int ARG_UNUSED (flags),
5589 bool *ARG_UNUSED (no_add_attrs))
5591 gcc_assert (TREE_CODE (*node) == FUNCTION_DECL);
5592 DECL_IS_NOVOPS (*node) = 1;
5593 return NULL_TREE;
5596 /* Handle a "deprecated" attribute; arguments as in
5597 struct attribute_spec.handler. */
5599 static tree
5600 handle_deprecated_attribute (tree *node, tree name,
5601 tree ARG_UNUSED (args), int flags,
5602 bool *no_add_attrs)
5604 tree type = NULL_TREE;
5605 int warn = 0;
5606 tree what = NULL_TREE;
5608 if (DECL_P (*node))
5610 tree decl = *node;
5611 type = TREE_TYPE (decl);
5613 if (TREE_CODE (decl) == TYPE_DECL
5614 || TREE_CODE (decl) == PARM_DECL
5615 || TREE_CODE (decl) == VAR_DECL
5616 || TREE_CODE (decl) == FUNCTION_DECL
5617 || TREE_CODE (decl) == FIELD_DECL)
5618 TREE_DEPRECATED (decl) = 1;
5619 else
5620 warn = 1;
5622 else if (TYPE_P (*node))
5624 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5625 *node = build_variant_type_copy (*node);
5626 TREE_DEPRECATED (*node) = 1;
5627 type = *node;
5629 else
5630 warn = 1;
5632 if (warn)
5634 *no_add_attrs = true;
5635 if (type && TYPE_NAME (type))
5637 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5638 what = TYPE_NAME (*node);
5639 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5640 && DECL_NAME (TYPE_NAME (type)))
5641 what = DECL_NAME (TYPE_NAME (type));
5643 if (what)
5644 warning (OPT_Wattributes, "%qE attribute ignored for %qE", name, what);
5645 else
5646 warning (OPT_Wattributes, "%qE attribute ignored", name);
5649 return NULL_TREE;
5652 /* Handle a "vector_size" attribute; arguments as in
5653 struct attribute_spec.handler. */
5655 static tree
5656 handle_vector_size_attribute (tree *node, tree name, tree args,
5657 int ARG_UNUSED (flags),
5658 bool *no_add_attrs)
5660 unsigned HOST_WIDE_INT vecsize, nunits;
5661 enum machine_mode orig_mode;
5662 tree type = *node, new_type, size;
5664 *no_add_attrs = true;
5666 size = TREE_VALUE (args);
5668 if (!host_integerp (size, 1))
5670 warning (OPT_Wattributes, "%qE attribute ignored", name);
5671 return NULL_TREE;
5674 /* Get the vector size (in bytes). */
5675 vecsize = tree_low_cst (size, 1);
5677 /* We need to provide for vector pointers, vector arrays, and
5678 functions returning vectors. For example:
5680 __attribute__((vector_size(16))) short *foo;
5682 In this case, the mode is SI, but the type being modified is
5683 HI, so we need to look further. */
5685 while (POINTER_TYPE_P (type)
5686 || TREE_CODE (type) == FUNCTION_TYPE
5687 || TREE_CODE (type) == METHOD_TYPE
5688 || TREE_CODE (type) == ARRAY_TYPE)
5689 type = TREE_TYPE (type);
5691 /* Get the mode of the type being modified. */
5692 orig_mode = TYPE_MODE (type);
5694 if (TREE_CODE (type) == RECORD_TYPE
5695 || TREE_CODE (type) == UNION_TYPE
5696 || TREE_CODE (type) == VECTOR_TYPE
5697 || (!SCALAR_FLOAT_MODE_P (orig_mode)
5698 && GET_MODE_CLASS (orig_mode) != MODE_INT)
5699 || !host_integerp (TYPE_SIZE_UNIT (type), 1))
5701 error ("invalid vector type for attribute %qE", name);
5702 return NULL_TREE;
5705 if (vecsize % tree_low_cst (TYPE_SIZE_UNIT (type), 1))
5707 error ("vector size not an integral multiple of component size");
5708 return NULL;
5711 if (vecsize == 0)
5713 error ("zero vector size");
5714 return NULL;
5717 /* Calculate how many units fit in the vector. */
5718 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5719 if (nunits & (nunits - 1))
5721 error ("number of components of the vector not a power of two");
5722 return NULL_TREE;
5725 new_type = build_vector_type (type, nunits);
5727 /* Build back pointers if needed. */
5728 *node = reconstruct_complex_type (*node, new_type);
5730 return NULL_TREE;
5733 /* Handle the "nonnull" attribute. */
5734 static tree
5735 handle_nonnull_attribute (tree *node, tree ARG_UNUSED (name),
5736 tree args, int ARG_UNUSED (flags),
5737 bool *no_add_attrs)
5739 tree type = *node;
5740 unsigned HOST_WIDE_INT attr_arg_num;
5742 /* If no arguments are specified, all pointer arguments should be
5743 non-null. Verify a full prototype is given so that the arguments
5744 will have the correct types when we actually check them later. */
5745 if (!args)
5747 if (!TYPE_ARG_TYPES (type))
5749 error ("nonnull attribute without arguments on a non-prototype");
5750 *no_add_attrs = true;
5752 return NULL_TREE;
5755 /* Argument list specified. Verify that each argument number references
5756 a pointer argument. */
5757 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5759 tree argument;
5760 unsigned HOST_WIDE_INT arg_num = 0, ck_num;
5762 if (!get_nonnull_operand (TREE_VALUE (args), &arg_num))
5764 error ("nonnull argument has invalid operand number (argument %lu)",
5765 (unsigned long) attr_arg_num);
5766 *no_add_attrs = true;
5767 return NULL_TREE;
5770 argument = TYPE_ARG_TYPES (type);
5771 if (argument)
5773 for (ck_num = 1; ; ck_num++)
5775 if (!argument || ck_num == arg_num)
5776 break;
5777 argument = TREE_CHAIN (argument);
5780 if (!argument
5781 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5783 error ("nonnull argument with out-of-range operand number (argument %lu, operand %lu)",
5784 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5785 *no_add_attrs = true;
5786 return NULL_TREE;
5789 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5791 error ("nonnull argument references non-pointer operand (argument %lu, operand %lu)",
5792 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5793 *no_add_attrs = true;
5794 return NULL_TREE;
5799 return NULL_TREE;
5802 /* Check the argument list of a function call for null in argument slots
5803 that are marked as requiring a non-null pointer argument. The NARGS
5804 arguments are passed in the array ARGARRAY.
5807 static void
5808 check_function_nonnull (tree attrs, int nargs, tree *argarray)
5810 tree a, args;
5811 int i;
5813 for (a = attrs; a; a = TREE_CHAIN (a))
5815 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5817 args = TREE_VALUE (a);
5819 /* Walk the argument list. If we encounter an argument number we
5820 should check for non-null, do it. If the attribute has no args,
5821 then every pointer argument is checked (in which case the check
5822 for pointer type is done in check_nonnull_arg). */
5823 for (i = 0; i < nargs; i++)
5825 if (!args || nonnull_check_p (args, i + 1))
5826 check_function_arguments_recurse (check_nonnull_arg, NULL,
5827 argarray[i],
5828 i + 1);
5834 /* Check that the Nth argument of a function call (counting backwards
5835 from the end) is a (pointer)0. The NARGS arguments are passed in the
5836 array ARGARRAY. */
5838 static void
5839 check_function_sentinel (tree attrs, int nargs, tree *argarray, tree typelist)
5841 tree attr = lookup_attribute ("sentinel", attrs);
5843 if (attr)
5845 int len = 0;
5846 int pos = 0;
5847 tree sentinel;
5849 /* Skip over the named arguments. */
5850 while (typelist && len < nargs)
5852 typelist = TREE_CHAIN (typelist);
5853 len++;
5856 if (TREE_VALUE (attr))
5858 tree p = TREE_VALUE (TREE_VALUE (attr));
5859 pos = TREE_INT_CST_LOW (p);
5862 /* The sentinel must be one of the varargs, i.e.
5863 in position >= the number of fixed arguments. */
5864 if ((nargs - 1 - pos) < len)
5866 warning (OPT_Wformat,
5867 "not enough variable arguments to fit a sentinel");
5868 return;
5871 /* Validate the sentinel. */
5872 sentinel = argarray[nargs - 1 - pos];
5873 if ((!POINTER_TYPE_P (TREE_TYPE (sentinel))
5874 || !integer_zerop (sentinel))
5875 /* Although __null (in C++) is only an integer we allow it
5876 nevertheless, as we are guaranteed that it's exactly
5877 as wide as a pointer, and we don't want to force
5878 users to cast the NULL they have written there.
5879 We warn with -Wstrict-null-sentinel, though. */
5880 && (warn_strict_null_sentinel || null_node != sentinel))
5881 warning (OPT_Wformat, "missing sentinel in function call");
5885 /* Helper for check_function_nonnull; given a list of operands which
5886 must be non-null in ARGS, determine if operand PARAM_NUM should be
5887 checked. */
5889 static bool
5890 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5892 unsigned HOST_WIDE_INT arg_num = 0;
5894 for (; args; args = TREE_CHAIN (args))
5896 bool found = get_nonnull_operand (TREE_VALUE (args), &arg_num);
5898 gcc_assert (found);
5900 if (arg_num == param_num)
5901 return true;
5903 return false;
5906 /* Check that the function argument PARAM (which is operand number
5907 PARAM_NUM) is non-null. This is called by check_function_nonnull
5908 via check_function_arguments_recurse. */
5910 static void
5911 check_nonnull_arg (void * ARG_UNUSED (ctx), tree param,
5912 unsigned HOST_WIDE_INT param_num)
5914 /* Just skip checking the argument if it's not a pointer. This can
5915 happen if the "nonnull" attribute was given without an operand
5916 list (which means to check every pointer argument). */
5918 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5919 return;
5921 if (integer_zerop (param))
5922 warning (OPT_Wnonnull, "null argument where non-null required "
5923 "(argument %lu)", (unsigned long) param_num);
5926 /* Helper for nonnull attribute handling; fetch the operand number
5927 from the attribute argument list. */
5929 static bool
5930 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5932 /* Verify the arg number is a constant. */
5933 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5934 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5935 return false;
5937 *valp = TREE_INT_CST_LOW (arg_num_expr);
5938 return true;
5941 /* Handle a "nothrow" attribute; arguments as in
5942 struct attribute_spec.handler. */
5944 static tree
5945 handle_nothrow_attribute (tree *node, tree name, tree ARG_UNUSED (args),
5946 int ARG_UNUSED (flags), bool *no_add_attrs)
5948 if (TREE_CODE (*node) == FUNCTION_DECL)
5949 TREE_NOTHROW (*node) = 1;
5950 /* ??? TODO: Support types. */
5951 else
5953 warning (OPT_Wattributes, "%qE attribute ignored", name);
5954 *no_add_attrs = true;
5957 return NULL_TREE;
5960 /* Handle a "cleanup" attribute; arguments as in
5961 struct attribute_spec.handler. */
5963 static tree
5964 handle_cleanup_attribute (tree *node, tree name, tree args,
5965 int ARG_UNUSED (flags), bool *no_add_attrs)
5967 tree decl = *node;
5968 tree cleanup_id, cleanup_decl;
5970 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5971 for global destructors in C++. This requires infrastructure that
5972 we don't have generically at the moment. It's also not a feature
5973 we'd be missing too much, since we do have attribute constructor. */
5974 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5976 warning (OPT_Wattributes, "%qE attribute ignored", name);
5977 *no_add_attrs = true;
5978 return NULL_TREE;
5981 /* Verify that the argument is a function in scope. */
5982 /* ??? We could support pointers to functions here as well, if
5983 that was considered desirable. */
5984 cleanup_id = TREE_VALUE (args);
5985 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5987 error ("cleanup argument not an identifier");
5988 *no_add_attrs = true;
5989 return NULL_TREE;
5991 cleanup_decl = lookup_name (cleanup_id);
5992 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5994 error ("cleanup argument not a function");
5995 *no_add_attrs = true;
5996 return NULL_TREE;
5999 /* That the function has proper type is checked with the
6000 eventual call to build_function_call. */
6002 return NULL_TREE;
6005 /* Handle a "warn_unused_result" attribute. No special handling. */
6007 static tree
6008 handle_warn_unused_result_attribute (tree *node, tree name,
6009 tree ARG_UNUSED (args),
6010 int ARG_UNUSED (flags), bool *no_add_attrs)
6012 /* Ignore the attribute for functions not returning any value. */
6013 if (VOID_TYPE_P (TREE_TYPE (*node)))
6015 warning (OPT_Wattributes, "%qE attribute ignored", name);
6016 *no_add_attrs = true;
6019 return NULL_TREE;
6022 /* Handle a "sentinel" attribute. */
6024 static tree
6025 handle_sentinel_attribute (tree *node, tree name, tree args,
6026 int ARG_UNUSED (flags), bool *no_add_attrs)
6028 tree params = TYPE_ARG_TYPES (*node);
6030 if (!params)
6032 warning (OPT_Wattributes,
6033 "%qE attribute requires prototypes with named arguments", name);
6034 *no_add_attrs = true;
6036 else
6038 while (TREE_CHAIN (params))
6039 params = TREE_CHAIN (params);
6041 if (VOID_TYPE_P (TREE_VALUE (params)))
6043 warning (OPT_Wattributes,
6044 "%qE attribute only applies to variadic functions", name);
6045 *no_add_attrs = true;
6049 if (args)
6051 tree position = TREE_VALUE (args);
6053 if (TREE_CODE (position) != INTEGER_CST)
6055 warning (0, "requested position is not an integer constant");
6056 *no_add_attrs = true;
6058 else
6060 if (tree_int_cst_lt (position, integer_zero_node))
6062 warning (0, "requested position is less than zero");
6063 *no_add_attrs = true;
6068 return NULL_TREE;
6071 /* Check for valid arguments being passed to a function.
6072 ATTRS is a list of attributes. There are NARGS arguments in the array
6073 ARGARRAY. TYPELIST is the list of argument types for the function.
6075 void
6076 check_function_arguments (tree attrs, int nargs, tree *argarray, tree typelist)
6078 /* Check for null being passed in a pointer argument that must be
6079 non-null. We also need to do this if format checking is enabled. */
6081 if (warn_nonnull)
6082 check_function_nonnull (attrs, nargs, argarray);
6084 /* Check for errors in format strings. */
6086 if (warn_format || warn_missing_format_attribute)
6087 check_function_format (attrs, nargs, argarray);
6089 if (warn_format)
6090 check_function_sentinel (attrs, nargs, argarray, typelist);
6093 /* Generic argument checking recursion routine. PARAM is the argument to
6094 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
6095 once the argument is resolved. CTX is context for the callback. */
6096 void
6097 check_function_arguments_recurse (void (*callback)
6098 (void *, tree, unsigned HOST_WIDE_INT),
6099 void *ctx, tree param,
6100 unsigned HOST_WIDE_INT param_num)
6102 if ((TREE_CODE (param) == NOP_EXPR || TREE_CODE (param) == CONVERT_EXPR)
6103 && (TYPE_PRECISION (TREE_TYPE (param))
6104 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (param, 0)))))
6106 /* Strip coercion. */
6107 check_function_arguments_recurse (callback, ctx,
6108 TREE_OPERAND (param, 0), param_num);
6109 return;
6112 if (TREE_CODE (param) == CALL_EXPR)
6114 tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
6115 tree attrs;
6116 bool found_format_arg = false;
6118 /* See if this is a call to a known internationalization function
6119 that modifies a format arg. Such a function may have multiple
6120 format_arg attributes (for example, ngettext). */
6122 for (attrs = TYPE_ATTRIBUTES (type);
6123 attrs;
6124 attrs = TREE_CHAIN (attrs))
6125 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
6127 tree inner_arg;
6128 tree format_num_expr;
6129 int format_num;
6130 int i;
6131 call_expr_arg_iterator iter;
6133 /* Extract the argument number, which was previously checked
6134 to be valid. */
6135 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
6137 gcc_assert (TREE_CODE (format_num_expr) == INTEGER_CST
6138 && !TREE_INT_CST_HIGH (format_num_expr));
6140 format_num = TREE_INT_CST_LOW (format_num_expr);
6142 for (inner_arg = first_call_expr_arg (param, &iter), i = 1;
6143 inner_arg != 0;
6144 inner_arg = next_call_expr_arg (&iter), i++)
6145 if (i == format_num)
6147 check_function_arguments_recurse (callback, ctx,
6148 inner_arg, param_num);
6149 found_format_arg = true;
6150 break;
6154 /* If we found a format_arg attribute and did a recursive check,
6155 we are done with checking this argument. Otherwise, we continue
6156 and this will be considered a non-literal. */
6157 if (found_format_arg)
6158 return;
6161 if (TREE_CODE (param) == COND_EXPR)
6163 /* Check both halves of the conditional expression. */
6164 check_function_arguments_recurse (callback, ctx,
6165 TREE_OPERAND (param, 1), param_num);
6166 check_function_arguments_recurse (callback, ctx,
6167 TREE_OPERAND (param, 2), param_num);
6168 return;
6171 (*callback) (ctx, param, param_num);
6174 /* Function to help qsort sort FIELD_DECLs by name order. */
6177 field_decl_cmp (const void *x_p, const void *y_p)
6179 const tree *const x = (const tree *const) x_p;
6180 const tree *const y = (const tree *const) y_p;
6182 if (DECL_NAME (*x) == DECL_NAME (*y))
6183 /* A nontype is "greater" than a type. */
6184 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6185 if (DECL_NAME (*x) == NULL_TREE)
6186 return -1;
6187 if (DECL_NAME (*y) == NULL_TREE)
6188 return 1;
6189 if (DECL_NAME (*x) < DECL_NAME (*y))
6190 return -1;
6191 return 1;
6194 static struct {
6195 gt_pointer_operator new_value;
6196 void *cookie;
6197 } resort_data;
6199 /* This routine compares two fields like field_decl_cmp but using the
6200 pointer operator in resort_data. */
6202 static int
6203 resort_field_decl_cmp (const void *x_p, const void *y_p)
6205 const tree *const x = (const tree *const) x_p;
6206 const tree *const y = (const tree *const) y_p;
6208 if (DECL_NAME (*x) == DECL_NAME (*y))
6209 /* A nontype is "greater" than a type. */
6210 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
6211 if (DECL_NAME (*x) == NULL_TREE)
6212 return -1;
6213 if (DECL_NAME (*y) == NULL_TREE)
6214 return 1;
6216 tree d1 = DECL_NAME (*x);
6217 tree d2 = DECL_NAME (*y);
6218 resort_data.new_value (&d1, resort_data.cookie);
6219 resort_data.new_value (&d2, resort_data.cookie);
6220 if (d1 < d2)
6221 return -1;
6223 return 1;
6226 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
6228 void
6229 resort_sorted_fields (void *obj,
6230 void * ARG_UNUSED (orig_obj),
6231 gt_pointer_operator new_value,
6232 void *cookie)
6234 struct sorted_fields_type *sf = (struct sorted_fields_type *) obj;
6235 resort_data.new_value = new_value;
6236 resort_data.cookie = cookie;
6237 qsort (&sf->elts[0], sf->len, sizeof (tree),
6238 resort_field_decl_cmp);
6241 /* Subroutine of c_parse_error.
6242 Return the result of concatenating LHS and RHS. RHS is really
6243 a string literal, its first character is indicated by RHS_START and
6244 RHS_SIZE is its length (including the terminating NUL character).
6246 The caller is responsible for deleting the returned pointer. */
6248 static char *
6249 catenate_strings (const char *lhs, const char *rhs_start, int rhs_size)
6251 const int lhs_size = strlen (lhs);
6252 char *result = XNEWVEC (char, lhs_size + rhs_size);
6253 strncpy (result, lhs, lhs_size);
6254 strncpy (result + lhs_size, rhs_start, rhs_size);
6255 return result;
6258 /* Issue the error given by GMSGID, indicating that it occurred before
6259 TOKEN, which had the associated VALUE. */
6261 void
6262 c_parse_error (const char *gmsgid, enum cpp_ttype token, tree value)
6264 #define catenate_messages(M1, M2) catenate_strings ((M1), (M2), sizeof (M2))
6266 char *message = NULL;
6268 if (token == CPP_EOF)
6269 message = catenate_messages (gmsgid, " at end of input");
6270 else if (token == CPP_CHAR || token == CPP_WCHAR)
6272 unsigned int val = TREE_INT_CST_LOW (value);
6273 const char *const ell = (token == CPP_CHAR) ? "" : "L";
6274 if (val <= UCHAR_MAX && ISGRAPH (val))
6275 message = catenate_messages (gmsgid, " before %s'%c'");
6276 else
6277 message = catenate_messages (gmsgid, " before %s'\\x%x'");
6279 error (message, ell, val);
6280 free (message);
6281 message = NULL;
6283 else if (token == CPP_STRING || token == CPP_WSTRING)
6284 message = catenate_messages (gmsgid, " before string constant");
6285 else if (token == CPP_NUMBER)
6286 message = catenate_messages (gmsgid, " before numeric constant");
6287 else if (token == CPP_NAME)
6289 message = catenate_messages (gmsgid, " before %qE");
6290 error (message, value);
6291 free (message);
6292 message = NULL;
6294 else if (token == CPP_PRAGMA)
6295 message = catenate_messages (gmsgid, " before %<#pragma%>");
6296 else if (token == CPP_PRAGMA_EOL)
6297 message = catenate_messages (gmsgid, " before end of line");
6298 else if (token < N_TTYPES)
6300 message = catenate_messages (gmsgid, " before %qs token");
6301 error (message, cpp_type2name (token));
6302 free (message);
6303 message = NULL;
6305 else
6306 error (gmsgid);
6308 if (message)
6310 error (message);
6311 free (message);
6313 #undef catenate_messages
6316 /* Walk a gimplified function and warn for functions whose return value is
6317 ignored and attribute((warn_unused_result)) is set. This is done before
6318 inlining, so we don't have to worry about that. */
6320 void
6321 c_warn_unused_result (tree *top_p)
6323 tree t = *top_p;
6324 tree_stmt_iterator i;
6325 tree fdecl, ftype;
6327 switch (TREE_CODE (t))
6329 case STATEMENT_LIST:
6330 for (i = tsi_start (*top_p); !tsi_end_p (i); tsi_next (&i))
6331 c_warn_unused_result (tsi_stmt_ptr (i));
6332 break;
6334 case COND_EXPR:
6335 c_warn_unused_result (&COND_EXPR_THEN (t));
6336 c_warn_unused_result (&COND_EXPR_ELSE (t));
6337 break;
6338 case BIND_EXPR:
6339 c_warn_unused_result (&BIND_EXPR_BODY (t));
6340 break;
6341 case TRY_FINALLY_EXPR:
6342 case TRY_CATCH_EXPR:
6343 c_warn_unused_result (&TREE_OPERAND (t, 0));
6344 c_warn_unused_result (&TREE_OPERAND (t, 1));
6345 break;
6346 case CATCH_EXPR:
6347 c_warn_unused_result (&CATCH_BODY (t));
6348 break;
6349 case EH_FILTER_EXPR:
6350 c_warn_unused_result (&EH_FILTER_FAILURE (t));
6351 break;
6353 case CALL_EXPR:
6354 if (TREE_USED (t))
6355 break;
6357 /* This is a naked call, as opposed to a CALL_EXPR nested inside
6358 a MODIFY_EXPR. All calls whose value is ignored should be
6359 represented like this. Look for the attribute. */
6360 fdecl = get_callee_fndecl (t);
6361 if (fdecl)
6362 ftype = TREE_TYPE (fdecl);
6363 else
6365 ftype = TREE_TYPE (CALL_EXPR_FN (t));
6366 /* Look past pointer-to-function to the function type itself. */
6367 ftype = TREE_TYPE (ftype);
6370 if (lookup_attribute ("warn_unused_result", TYPE_ATTRIBUTES (ftype)))
6372 if (fdecl)
6373 warning (0, "%Hignoring return value of %qD, "
6374 "declared with attribute warn_unused_result",
6375 EXPR_LOCUS (t), fdecl);
6376 else
6377 warning (0, "%Hignoring return value of function "
6378 "declared with attribute warn_unused_result",
6379 EXPR_LOCUS (t));
6381 break;
6383 default:
6384 /* Not a container, not a call, or a call whose value is used. */
6385 break;
6389 /* Convert a character from the host to the target execution character
6390 set. cpplib handles this, mostly. */
6392 HOST_WIDE_INT
6393 c_common_to_target_charset (HOST_WIDE_INT c)
6395 /* Character constants in GCC proper are sign-extended under -fsigned-char,
6396 zero-extended under -fno-signed-char. cpplib insists that characters
6397 and character constants are always unsigned. Hence we must convert
6398 back and forth. */
6399 cppchar_t uc = ((cppchar_t)c) & ((((cppchar_t)1) << CHAR_BIT)-1);
6401 uc = cpp_host_to_exec_charset (parse_in, uc);
6403 if (flag_signed_char)
6404 return ((HOST_WIDE_INT)uc) << (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE)
6405 >> (HOST_BITS_PER_WIDE_INT - CHAR_TYPE_SIZE);
6406 else
6407 return uc;
6410 /* Build the result of __builtin_offsetof. EXPR is a nested sequence of
6411 component references, with STOP_REF, or alternatively an INDIRECT_REF of
6412 NULL, at the bottom; much like the traditional rendering of offsetof as a
6413 macro. Returns the folded and properly cast result. */
6415 static tree
6416 fold_offsetof_1 (tree expr, tree stop_ref)
6418 enum tree_code code = PLUS_EXPR;
6419 tree base, off, t;
6421 if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
6422 return size_zero_node;
6424 switch (TREE_CODE (expr))
6426 case ERROR_MARK:
6427 return expr;
6429 case VAR_DECL:
6430 error ("cannot apply %<offsetof%> to static data member %qD", expr);
6431 return error_mark_node;
6433 case CALL_EXPR:
6434 error ("cannot apply %<offsetof%> when %<operator[]%> is overloaded");
6435 return error_mark_node;
6437 case INTEGER_CST:
6438 gcc_assert (integer_zerop (expr));
6439 return size_zero_node;
6441 case NOP_EXPR:
6442 case INDIRECT_REF:
6443 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6444 gcc_assert (base == error_mark_node || base == size_zero_node);
6445 return base;
6447 case COMPONENT_REF:
6448 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6449 if (base == error_mark_node)
6450 return base;
6452 t = TREE_OPERAND (expr, 1);
6453 if (DECL_C_BIT_FIELD (t))
6455 error ("attempt to take address of bit-field structure "
6456 "member %qD", t);
6457 return error_mark_node;
6459 off = size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (t),
6460 size_int (tree_low_cst (DECL_FIELD_BIT_OFFSET (t), 1)
6461 / BITS_PER_UNIT));
6462 break;
6464 case ARRAY_REF:
6465 base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
6466 if (base == error_mark_node)
6467 return base;
6469 t = TREE_OPERAND (expr, 1);
6470 if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
6472 code = MINUS_EXPR;
6473 t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
6475 t = convert (sizetype, t);
6476 off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
6477 break;
6479 case COMPOUND_EXPR:
6480 /* Handle static members of volatile structs. */
6481 t = TREE_OPERAND (expr, 1);
6482 gcc_assert (TREE_CODE (t) == VAR_DECL);
6483 return fold_offsetof_1 (t, stop_ref);
6485 default:
6486 gcc_unreachable ();
6489 return size_binop (code, base, off);
6492 tree
6493 fold_offsetof (tree expr, tree stop_ref)
6495 /* Convert back from the internal sizetype to size_t. */
6496 return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
6499 /* Print an error message for an invalid lvalue. USE says
6500 how the lvalue is being used and so selects the error message. */
6502 void
6503 lvalue_error (enum lvalue_use use)
6505 switch (use)
6507 case lv_assign:
6508 error ("lvalue required as left operand of assignment");
6509 break;
6510 case lv_increment:
6511 error ("lvalue required as increment operand");
6512 break;
6513 case lv_decrement:
6514 error ("lvalue required as decrement operand");
6515 break;
6516 case lv_addressof:
6517 error ("lvalue required as unary %<&%> operand");
6518 break;
6519 case lv_asm:
6520 error ("lvalue required in asm statement");
6521 break;
6522 default:
6523 gcc_unreachable ();
6527 /* *PTYPE is an incomplete array. Complete it with a domain based on
6528 INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT
6529 is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6530 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */
6533 complete_array_type (tree *ptype, tree initial_value, bool do_default)
6535 tree maxindex, type, main_type, elt, unqual_elt;
6536 int failure = 0, quals;
6537 hashval_t hashcode = 0;
6539 maxindex = size_zero_node;
6540 if (initial_value)
6542 if (TREE_CODE (initial_value) == STRING_CST)
6544 int eltsize
6545 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
6546 maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1);
6548 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
6550 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6552 if (VEC_empty (constructor_elt, v))
6554 if (pedantic)
6555 failure = 3;
6556 maxindex = integer_minus_one_node;
6558 else
6560 tree curindex;
6561 unsigned HOST_WIDE_INT cnt;
6562 constructor_elt *ce;
6564 if (VEC_index (constructor_elt, v, 0)->index)
6565 maxindex = fold_convert (sizetype,
6566 VEC_index (constructor_elt,
6567 v, 0)->index);
6568 curindex = maxindex;
6570 for (cnt = 1;
6571 VEC_iterate (constructor_elt, v, cnt, ce);
6572 cnt++)
6574 if (ce->index)
6575 curindex = fold_convert (sizetype, ce->index);
6576 else
6577 curindex = size_binop (PLUS_EXPR, curindex, size_one_node);
6579 if (tree_int_cst_lt (maxindex, curindex))
6580 maxindex = curindex;
6584 else
6586 /* Make an error message unless that happened already. */
6587 if (initial_value != error_mark_node)
6588 failure = 1;
6591 else
6593 failure = 2;
6594 if (!do_default)
6595 return failure;
6598 type = *ptype;
6599 elt = TREE_TYPE (type);
6600 quals = TYPE_QUALS (strip_array_types (elt));
6601 if (quals == 0)
6602 unqual_elt = elt;
6603 else
6604 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
6606 /* Using build_distinct_type_copy and modifying things afterward instead
6607 of using build_array_type to create a new type preserves all of the
6608 TYPE_LANG_FLAG_? bits that the front end may have set. */
6609 main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
6610 TREE_TYPE (main_type) = unqual_elt;
6611 TYPE_DOMAIN (main_type) = build_index_type (maxindex);
6612 layout_type (main_type);
6614 /* Make sure we have the canonical MAIN_TYPE. */
6615 hashcode = iterative_hash_object (TYPE_HASH (unqual_elt), hashcode);
6616 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (main_type)),
6617 hashcode);
6618 main_type = type_hash_canon (hashcode, main_type);
6620 if (quals == 0)
6621 type = main_type;
6622 else
6623 type = c_build_qualified_type (main_type, quals);
6625 *ptype = type;
6626 return failure;
6630 /* Used to help initialize the builtin-types.def table. When a type of
6631 the correct size doesn't exist, use error_mark_node instead of NULL.
6632 The later results in segfaults even when a decl using the type doesn't
6633 get invoked. */
6635 tree
6636 builtin_type_for_size (int size, bool unsignedp)
6638 tree type = lang_hooks.types.type_for_size (size, unsignedp);
6639 return type ? type : error_mark_node;
6642 /* A helper function for resolve_overloaded_builtin in resolving the
6643 overloaded __sync_ builtins. Returns a positive power of 2 if the
6644 first operand of PARAMS is a pointer to a supported data type.
6645 Returns 0 if an error is encountered. */
6647 static int
6648 sync_resolve_size (tree function, tree params)
6650 tree type;
6651 int size;
6653 if (params == NULL)
6655 error ("too few arguments to function %qE", function);
6656 return 0;
6659 type = TREE_TYPE (TREE_VALUE (params));
6660 if (TREE_CODE (type) != POINTER_TYPE)
6661 goto incompatible;
6663 type = TREE_TYPE (type);
6664 if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
6665 goto incompatible;
6667 size = tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6668 if (size == 1 || size == 2 || size == 4 || size == 8 || size == 16)
6669 return size;
6671 incompatible:
6672 error ("incompatible type for argument %d of %qE", 1, function);
6673 return 0;
6676 /* A helper function for resolve_overloaded_builtin. Adds casts to
6677 PARAMS to make arguments match up with those of FUNCTION. Drops
6678 the variadic arguments at the end. Returns false if some error
6679 was encountered; true on success. */
6681 static bool
6682 sync_resolve_params (tree orig_function, tree function, tree params)
6684 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (function));
6685 tree ptype;
6686 int number;
6688 /* We've declared the implementation functions to use "volatile void *"
6689 as the pointer parameter, so we shouldn't get any complaints from the
6690 call to check_function_arguments what ever type the user used. */
6691 arg_types = TREE_CHAIN (arg_types);
6692 ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6693 number = 2;
6695 /* For the rest of the values, we need to cast these to FTYPE, so that we
6696 don't get warnings for passing pointer types, etc. */
6697 while (arg_types != void_list_node)
6699 tree val;
6701 params = TREE_CHAIN (params);
6702 if (params == NULL)
6704 error ("too few arguments to function %qE", orig_function);
6705 return false;
6708 /* ??? Ideally for the first conversion we'd use convert_for_assignment
6709 so that we get warnings for anything that doesn't match the pointer
6710 type. This isn't portable across the C and C++ front ends atm. */
6711 val = TREE_VALUE (params);
6712 val = convert (ptype, val);
6713 val = convert (TREE_VALUE (arg_types), val);
6714 TREE_VALUE (params) = val;
6716 arg_types = TREE_CHAIN (arg_types);
6717 number++;
6720 /* The definition of these primitives is variadic, with the remaining
6721 being "an optional list of variables protected by the memory barrier".
6722 No clue what that's supposed to mean, precisely, but we consider all
6723 call-clobbered variables to be protected so we're safe. */
6724 TREE_CHAIN (params) = NULL;
6726 return true;
6729 /* A helper function for resolve_overloaded_builtin. Adds a cast to
6730 RESULT to make it match the type of the first pointer argument in
6731 PARAMS. */
6733 static tree
6734 sync_resolve_return (tree params, tree result)
6736 tree ptype = TREE_TYPE (TREE_TYPE (TREE_VALUE (params)));
6737 ptype = TYPE_MAIN_VARIANT (ptype);
6738 return convert (ptype, result);
6741 /* Some builtin functions are placeholders for other expressions. This
6742 function should be called immediately after parsing the call expression
6743 before surrounding code has committed to the type of the expression.
6745 FUNCTION is the DECL that has been invoked; it is known to be a builtin.
6746 PARAMS is the argument list for the call. The return value is non-null
6747 when expansion is complete, and null if normal processing should
6748 continue. */
6750 tree
6751 resolve_overloaded_builtin (tree function, tree params)
6753 enum built_in_function orig_code = DECL_FUNCTION_CODE (function);
6754 switch (DECL_BUILT_IN_CLASS (function))
6756 case BUILT_IN_NORMAL:
6757 break;
6758 case BUILT_IN_MD:
6759 if (targetm.resolve_overloaded_builtin)
6760 return targetm.resolve_overloaded_builtin (function, params);
6761 else
6762 return NULL_TREE;
6763 default:
6764 return NULL_TREE;
6767 /* Handle BUILT_IN_NORMAL here. */
6768 switch (orig_code)
6770 case BUILT_IN_FETCH_AND_ADD_N:
6771 case BUILT_IN_FETCH_AND_SUB_N:
6772 case BUILT_IN_FETCH_AND_OR_N:
6773 case BUILT_IN_FETCH_AND_AND_N:
6774 case BUILT_IN_FETCH_AND_XOR_N:
6775 case BUILT_IN_FETCH_AND_NAND_N:
6776 case BUILT_IN_ADD_AND_FETCH_N:
6777 case BUILT_IN_SUB_AND_FETCH_N:
6778 case BUILT_IN_OR_AND_FETCH_N:
6779 case BUILT_IN_AND_AND_FETCH_N:
6780 case BUILT_IN_XOR_AND_FETCH_N:
6781 case BUILT_IN_NAND_AND_FETCH_N:
6782 case BUILT_IN_BOOL_COMPARE_AND_SWAP_N:
6783 case BUILT_IN_VAL_COMPARE_AND_SWAP_N:
6784 case BUILT_IN_LOCK_TEST_AND_SET_N:
6785 case BUILT_IN_LOCK_RELEASE_N:
6787 int n = sync_resolve_size (function, params);
6788 tree new_function, result;
6790 if (n == 0)
6791 return error_mark_node;
6793 new_function = built_in_decls[orig_code + exact_log2 (n) + 1];
6794 if (!sync_resolve_params (function, new_function, params))
6795 return error_mark_node;
6797 result = build_function_call (new_function, params);
6798 if (orig_code != BUILT_IN_BOOL_COMPARE_AND_SWAP_N
6799 && orig_code != BUILT_IN_LOCK_RELEASE_N)
6800 result = sync_resolve_return (params, result);
6802 return result;
6805 default:
6806 return NULL_TREE;
6810 /* Ignoring their sign, return true if two scalar types are the same. */
6811 bool
6812 same_scalar_type_ignoring_signedness (tree t1, tree t2)
6814 enum tree_code c1 = TREE_CODE (t1), c2 = TREE_CODE (t2);
6816 gcc_assert ((c1 == INTEGER_TYPE || c1 == REAL_TYPE)
6817 && (c2 == INTEGER_TYPE || c2 == REAL_TYPE));
6819 /* Equality works here because c_common_signed_type uses
6820 TYPE_MAIN_VARIANT. */
6821 return lang_hooks.types.signed_type (t1)
6822 == lang_hooks.types.signed_type (t2);
6825 /* Check for missing format attributes on function pointers. LTYPE is
6826 the new type or left-hand side type. RTYPE is the old type or
6827 right-hand side type. Returns TRUE if LTYPE is missing the desired
6828 attribute. */
6830 bool
6831 check_missing_format_attribute (tree ltype, tree rtype)
6833 tree const ttr = TREE_TYPE (rtype), ttl = TREE_TYPE (ltype);
6834 tree ra;
6836 for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
6837 if (is_attribute_p ("format", TREE_PURPOSE (ra)))
6838 break;
6839 if (ra)
6841 tree la;
6842 for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
6843 if (is_attribute_p ("format", TREE_PURPOSE (la)))
6844 break;
6845 return !la;
6847 else
6848 return false;
6851 /* Subscripting with type char is likely to lose on a machine where
6852 chars are signed. So warn on any machine, but optionally. Don't
6853 warn for unsigned char since that type is safe. Don't warn for
6854 signed char because anyone who uses that must have done so
6855 deliberately. Furthermore, we reduce the false positive load by
6856 warning only for non-constant value of type char. */
6858 void
6859 warn_array_subscript_with_type_char (tree index)
6861 if (TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node
6862 && TREE_CODE (index) != INTEGER_CST)
6863 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
6866 /* Implement -Wparentheses for the unexpected C precedence rules, to
6867 cover cases like x + y << z which readers are likely to
6868 misinterpret. We have seen an expression in which CODE is a binary
6869 operator used to combine expressions headed by CODE_LEFT and
6870 CODE_RIGHT. CODE_LEFT and CODE_RIGHT may be ERROR_MARK, which
6871 means that that side of the expression was not formed using a
6872 binary operator, or it was enclosed in parentheses. */
6874 void
6875 warn_about_parentheses (enum tree_code code, enum tree_code code_left,
6876 enum tree_code code_right)
6878 if (!warn_parentheses)
6879 return;
6881 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
6883 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6884 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6885 warning (OPT_Wparentheses,
6886 "suggest parentheses around + or - inside shift");
6889 if (code == TRUTH_ORIF_EXPR)
6891 if (code_left == TRUTH_ANDIF_EXPR
6892 || code_right == TRUTH_ANDIF_EXPR)
6893 warning (OPT_Wparentheses,
6894 "suggest parentheses around && within ||");
6897 if (code == BIT_IOR_EXPR)
6899 if (code_left == BIT_AND_EXPR || code_left == BIT_XOR_EXPR
6900 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6901 || code_right == BIT_AND_EXPR || code_right == BIT_XOR_EXPR
6902 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6903 warning (OPT_Wparentheses,
6904 "suggest parentheses around arithmetic in operand of |");
6905 /* Check cases like x|y==z */
6906 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6907 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6908 warning (OPT_Wparentheses,
6909 "suggest parentheses around comparison in operand of |");
6912 if (code == BIT_XOR_EXPR)
6914 if (code_left == BIT_AND_EXPR
6915 || code_left == PLUS_EXPR || code_left == MINUS_EXPR
6916 || code_right == BIT_AND_EXPR
6917 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6918 warning (OPT_Wparentheses,
6919 "suggest parentheses around arithmetic in operand of ^");
6920 /* Check cases like x^y==z */
6921 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6922 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6923 warning (OPT_Wparentheses,
6924 "suggest parentheses around comparison in operand of ^");
6927 if (code == BIT_AND_EXPR)
6929 if (code_left == PLUS_EXPR || code_left == MINUS_EXPR
6930 || code_right == PLUS_EXPR || code_right == MINUS_EXPR)
6931 warning (OPT_Wparentheses,
6932 "suggest parentheses around + or - in operand of &");
6933 /* Check cases like x&y==z */
6934 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6935 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6936 warning (OPT_Wparentheses,
6937 "suggest parentheses around comparison in operand of &");
6940 if (code == EQ_EXPR || code == NE_EXPR)
6942 if (TREE_CODE_CLASS (code_left) == tcc_comparison
6943 || TREE_CODE_CLASS (code_right) == tcc_comparison)
6944 warning (OPT_Wparentheses,
6945 "suggest parentheses around comparison in operand of %s",
6946 code == EQ_EXPR ? "==" : "!=");
6948 else if (TREE_CODE_CLASS (code) == tcc_comparison)
6950 if ((TREE_CODE_CLASS (code_left) == tcc_comparison
6951 && code_left != NE_EXPR && code_left != EQ_EXPR)
6952 || (TREE_CODE_CLASS (code_right) == tcc_comparison
6953 && code_right != NE_EXPR && code_right != EQ_EXPR))
6954 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
6955 "have their mathematical meaning");
6959 /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */
6961 void
6962 warn_for_unused_label (tree label)
6964 if (!TREE_USED (label))
6966 if (DECL_INITIAL (label))
6967 warning (OPT_Wunused_label, "label %q+D defined but not used", label);
6968 else
6969 warning (OPT_Wunused_label, "label %q+D declared but not defined", label);
6973 /* If FNDECL is a static constructor or destructor, add it to the list
6974 of functions to be called by the file scope initialization
6975 function. */
6977 void
6978 c_record_cdtor_fn (tree fndecl)
6980 if (targetm.have_ctors_dtors)
6981 return;
6983 if (DECL_STATIC_CONSTRUCTOR (fndecl))
6984 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6985 if (DECL_STATIC_DESTRUCTOR (fndecl))
6986 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6989 /* Synthesize a function which calls all the global ctors or global
6990 dtors in this file. This is only used for targets which do not
6991 support .ctors/.dtors sections. FIXME: Migrate into cgraph. */
6992 static void
6993 build_cdtor (int method_type, tree cdtors)
6995 tree body = 0;
6997 if (!cdtors)
6998 return;
7000 for (; cdtors; cdtors = TREE_CHAIN (cdtors))
7001 append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
7002 &body);
7004 cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
7007 /* Generate functions to call static constructors and destructors
7008 for targets that do not support .ctors/.dtors sections. These
7009 functions have magic names which are detected by collect2. */
7011 void
7012 c_build_cdtor_fns (void)
7014 if (!targetm.have_ctors_dtors)
7016 build_cdtor ('I', static_ctors);
7017 static_ctors = NULL_TREE;
7018 build_cdtor ('D', static_dtors);
7019 static_dtors = NULL_TREE;
7021 else
7023 gcc_assert (!static_ctors);
7024 gcc_assert (!static_dtors);
7028 #ifndef TARGET_HAS_TARGETCM
7029 struct gcc_targetcm targetcm = TARGETCM_INITIALIZER;
7030 #endif
7032 /* Warn for division by zero according to the value of DIVISOR. */
7034 void
7035 warn_for_div_by_zero (tree divisor)
7037 /* If DIVISOR is zero, and has integral type, issue a warning about
7038 division by zero. Do not issue a warning if DIVISOR has a
7039 floating-point type, since we consider 0.0/0.0 a valid way of
7040 generating a NaN. */
7041 if (skip_evaluation == 0 && integer_zerop (divisor))
7042 warning (OPT_Wdiv_by_zero, "division by zero");
7045 #include "gt-c-common.h"