Makefile.in (stmp-docobjdir): New target; ensure $docobjdir exists.
[official-gcc.git] / gcc / c-common.c
blob8dea43bb028a0cc3bf81381c31bc95b04fbba270
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 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, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, 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"
46 cpp_reader *parse_in; /* Declared in c-pragma.h. */
48 /* We let tm.h override the types used here, to handle trivial differences
49 such as the choice of unsigned int or long unsigned int for size_t.
50 When machines start needing nontrivial differences in the size type,
51 it would be best to do something here to figure out automatically
52 from other information what type to use. */
54 #ifndef SIZE_TYPE
55 #define SIZE_TYPE "long unsigned int"
56 #endif
58 #ifndef WCHAR_TYPE
59 #define WCHAR_TYPE "int"
60 #endif
62 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
63 #define MODIFIED_WCHAR_TYPE \
64 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
66 #ifndef PTRDIFF_TYPE
67 #define PTRDIFF_TYPE "long int"
68 #endif
70 #ifndef WINT_TYPE
71 #define WINT_TYPE "unsigned int"
72 #endif
74 #ifndef INTMAX_TYPE
75 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
76 ? "int" \
77 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
78 ? "long int" \
79 : "long long int"))
80 #endif
82 #ifndef UINTMAX_TYPE
83 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
84 ? "unsigned int" \
85 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
86 ? "long unsigned int" \
87 : "long long unsigned int"))
88 #endif
90 /* The following symbols are subsumed in the c_global_trees array, and
91 listed here individually for documentation purposes.
93 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
95 tree short_integer_type_node;
96 tree long_integer_type_node;
97 tree long_long_integer_type_node;
99 tree short_unsigned_type_node;
100 tree long_unsigned_type_node;
101 tree long_long_unsigned_type_node;
103 tree truthvalue_type_node;
104 tree truthvalue_false_node;
105 tree truthvalue_true_node;
107 tree ptrdiff_type_node;
109 tree unsigned_char_type_node;
110 tree signed_char_type_node;
111 tree wchar_type_node;
112 tree signed_wchar_type_node;
113 tree unsigned_wchar_type_node;
115 tree float_type_node;
116 tree double_type_node;
117 tree long_double_type_node;
119 tree complex_integer_type_node;
120 tree complex_float_type_node;
121 tree complex_double_type_node;
122 tree complex_long_double_type_node;
124 tree intQI_type_node;
125 tree intHI_type_node;
126 tree intSI_type_node;
127 tree intDI_type_node;
128 tree intTI_type_node;
130 tree unsigned_intQI_type_node;
131 tree unsigned_intHI_type_node;
132 tree unsigned_intSI_type_node;
133 tree unsigned_intDI_type_node;
134 tree unsigned_intTI_type_node;
136 tree widest_integer_literal_type_node;
137 tree widest_unsigned_literal_type_node;
139 Nodes for types `void *' and `const void *'.
141 tree ptr_type_node, const_ptr_type_node;
143 Nodes for types `char *' and `const char *'.
145 tree string_type_node, const_string_type_node;
147 Type `char[SOMENUMBER]'.
148 Used when an array of char is needed and the size is irrelevant.
150 tree char_array_type_node;
152 Type `int[SOMENUMBER]' or something like it.
153 Used when an array of int needed and the size is irrelevant.
155 tree int_array_type_node;
157 Type `wchar_t[SOMENUMBER]' or something like it.
158 Used when a wide string literal is created.
160 tree wchar_array_type_node;
162 Type `int ()' -- used for implicit declaration of functions.
164 tree default_function_type;
166 A VOID_TYPE node, packaged in a TREE_LIST.
168 tree void_list_node;
170 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
171 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
172 VAR_DECLS, but C++ does.)
174 tree function_name_decl_node;
175 tree pretty_function_name_decl_node;
176 tree c99_function_name_decl_node;
178 Stack of nested function name VAR_DECLs.
180 tree saved_function_name_decls;
184 tree c_global_trees[CTI_MAX];
186 /* TRUE if a code represents a statement. The front end init
187 langhook should take care of initialization of this array. */
189 bool statement_code_p[MAX_TREE_CODES];
191 /* Nonzero if we can read a PCH file now. */
193 int allow_pch = 1;
195 /* Switches common to the C front ends. */
197 /* Nonzero if prepreprocessing only. */
199 int flag_preprocess_only;
201 /* Nonzero means don't output line number information. */
203 char flag_no_line_commands;
205 /* Nonzero causes -E output not to be done, but directives such as
206 #define that have side effects are still obeyed. */
208 char flag_no_output;
210 /* Nonzero means dump macros in some fashion. */
212 char flag_dump_macros;
214 /* Nonzero means pass #include lines through to the output. */
216 char flag_dump_includes;
218 /* The file name to which we should write a precompiled header, or
219 NULL if no header will be written in this compile. */
221 const char *pch_file;
223 /* Nonzero if an ISO standard was selected. It rejects macros in the
224 user's namespace. */
225 int flag_iso;
227 /* Nonzero if -undef was given. It suppresses target built-in macros
228 and assertions. */
229 int flag_undef;
231 /* Nonzero means don't recognize the non-ANSI builtin functions. */
233 int flag_no_builtin;
235 /* Nonzero means don't recognize the non-ANSI builtin functions.
236 -ansi sets this. */
238 int flag_no_nonansi_builtin;
240 /* Nonzero means give `double' the same size as `float'. */
242 int flag_short_double;
244 /* Nonzero means give `wchar_t' the same size as `short'. */
246 int flag_short_wchar;
248 /* Nonzero means allow Microsoft extensions without warnings or errors. */
249 int flag_ms_extensions;
251 /* Nonzero means don't recognize the keyword `asm'. */
253 int flag_no_asm;
255 /* Nonzero means give string constants the type `const char *', as mandated
256 by the standard. */
258 int flag_const_strings;
260 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
262 int flag_signed_bitfields = 1;
263 int explicit_flag_signed_bitfields;
265 /* Nonzero means warn about pointer casts that can drop a type qualifier
266 from the pointer target type. */
268 int warn_cast_qual;
270 /* Warn about functions which might be candidates for format attributes. */
272 int warn_missing_format_attribute;
274 /* Nonzero means warn about sizeof(function) or addition/subtraction
275 of function pointers. */
277 int warn_pointer_arith;
279 /* Nonzero means warn for any global function def
280 without separate previous prototype decl. */
282 int warn_missing_prototypes;
284 /* Warn if adding () is suggested. */
286 int warn_parentheses;
288 /* Warn if initializer is not completely bracketed. */
290 int warn_missing_braces;
292 /* Warn about comparison of signed and unsigned values.
293 If -1, neither -Wsign-compare nor -Wno-sign-compare has been specified
294 (in which case -Wextra gets to decide). */
296 int warn_sign_compare = -1;
298 /* Nonzero means warn about usage of long long when `-pedantic'. */
300 int warn_long_long = 1;
302 /* Nonzero means warn about deprecated conversion from string constant to
303 `char *'. */
305 int warn_write_strings;
307 /* Nonzero means warn about multiple (redundant) decls for the same single
308 variable or function. */
310 int warn_redundant_decls;
312 /* Warn about testing equality of floating point numbers. */
314 int warn_float_equal;
316 /* Warn about a subscript that has type char. */
318 int warn_char_subscripts;
320 /* Warn if a type conversion is done that might have confusing results. */
322 int warn_conversion;
324 /* Warn about #pragma directives that are not recognized. */
326 int warn_unknown_pragmas; /* Tri state variable. */
328 /* Warn about format/argument anomalies in calls to formatted I/O functions
329 (*printf, *scanf, strftime, strfmon, etc.). */
331 int warn_format;
333 /* Warn about Y2K problems with strftime formats. */
335 int warn_format_y2k;
337 /* Warn about excess arguments to formats. */
339 int warn_format_extra_args;
341 /* Warn about zero-length formats. */
343 int warn_format_zero_length;
345 /* Warn about non-literal format arguments. */
347 int warn_format_nonliteral;
349 /* Warn about possible security problems with calls to format functions. */
351 int warn_format_security;
354 /* C/ObjC language option variables. */
357 /* Nonzero means message about use of implicit function declarations;
358 1 means warning; 2 means error. */
360 int mesg_implicit_function_declaration = -1;
362 /* Nonzero means allow type mismatches in conditional expressions;
363 just make their values `void'. */
365 int flag_cond_mismatch;
367 /* Nonzero means enable C89 Amendment 1 features. */
369 int flag_isoc94;
371 /* Nonzero means use the ISO C99 dialect of C. */
373 int flag_isoc99;
375 /* Nonzero means that we have builtin functions, and main is an int */
377 int flag_hosted = 1;
379 /* Nonzero means add default format_arg attributes for functions not
380 in ISO C. */
382 int flag_noniso_default_format_attributes = 1;
384 /* Nonzero means warn when casting a function call to a type that does
385 not match the return type (e.g. (float)sqrt() or (anything*)malloc()
386 when there is no previous declaration of sqrt or malloc. */
388 int warn_bad_function_cast;
390 /* Warn about traditional constructs whose meanings changed in ANSI C. */
392 int warn_traditional;
394 /* Nonzero means warn for a declaration found after a statement. */
396 int warn_declaration_after_statement;
398 /* Nonzero means warn for non-prototype function decls
399 or non-prototyped defs without previous prototype. */
401 int warn_strict_prototypes;
403 /* Nonzero means warn for any global function def
404 without separate previous decl. */
406 int warn_missing_declarations;
408 /* Nonzero means warn about declarations of objects not at
409 file-scope level and about *all* declarations of functions (whether
410 or static) not at file-scope level. Note that we exclude
411 implicit function declarations. To get warnings about those, use
412 -Wimplicit. */
414 int warn_nested_externs;
416 /* Warn if main is suspicious. */
418 int warn_main;
420 /* Nonzero means warn about possible violations of sequence point rules. */
422 int warn_sequence_point;
424 /* Nonzero means to warn about compile-time division by zero. */
425 int warn_div_by_zero = 1;
427 /* Nonzero means warn about use of implicit int. */
429 int warn_implicit_int;
431 /* Warn about NULL being passed to argument slots marked as requiring
432 non-NULL. */
434 int warn_nonnull;
437 /* ObjC language option variables. */
440 /* Open and close the file for outputting class declarations, if
441 requested (ObjC). */
443 int flag_gen_declaration;
445 /* Generate code for GNU or NeXT runtime environment. */
447 #ifdef NEXT_OBJC_RUNTIME
448 int flag_next_runtime = 1;
449 #else
450 int flag_next_runtime = 0;
451 #endif
453 /* Tells the compiler that this is a special run. Do not perform any
454 compiling, instead we are to test some platform dependent features
455 and output a C header file with appropriate definitions. */
457 int print_struct_values;
459 /* ???. Undocumented. */
461 const char *constant_string_class_name;
463 /* Warn if multiple methods are seen for the same selector, but with
464 different argument types. Performs the check on the whole selector
465 table at the end of compilation. */
467 int warn_selector;
469 /* Warn if a @selector() is found, and no method with that selector
470 has been previously declared. The check is done on each
471 @selector() as soon as it is found - so it warns about forward
472 declarations. */
474 int warn_undeclared_selector;
476 /* Warn if methods required by a protocol are not implemented in the
477 class adopting it. When turned off, methods inherited to that
478 class are also considered implemented. */
480 int warn_protocol = 1;
483 /* C++ language option variables. */
486 /* Nonzero means don't recognize any extension keywords. */
488 int flag_no_gnu_keywords;
490 /* Nonzero means do emit exported implementations of functions even if
491 they can be inlined. */
493 int flag_implement_inlines = 1;
495 /* Nonzero means do emit exported implementations of templates, instead of
496 multiple static copies in each file that needs a definition. */
498 int flag_external_templates;
500 /* Nonzero means that the decision to emit or not emit the implementation of a
501 template depends on where the template is instantiated, rather than where
502 it is defined. */
504 int flag_alt_external_templates;
506 /* Nonzero means that implicit instantiations will be emitted if needed. */
508 int flag_implicit_templates = 1;
510 /* Nonzero means that implicit instantiations of inline templates will be
511 emitted if needed, even if instantiations of non-inline templates
512 aren't. */
514 int flag_implicit_inline_templates = 1;
516 /* Nonzero means generate separate instantiation control files and
517 juggle them at link time. */
519 int flag_use_repository;
521 /* Nonzero if we want to issue diagnostics that the standard says are not
522 required. */
524 int flag_optional_diags = 1;
526 /* Nonzero means we should attempt to elide constructors when possible. */
528 int flag_elide_constructors = 1;
530 /* Nonzero means that member functions defined in class scope are
531 inline by default. */
533 int flag_default_inline = 1;
535 /* Controls whether compiler generates 'type descriptor' that give
536 run-time type information. */
538 int flag_rtti = 1;
540 /* Nonzero if we want to conserve space in the .o files. We do this
541 by putting uninitialized data and runtime initialized data into
542 .common instead of .data at the expense of not flagging multiple
543 definitions. */
545 int flag_conserve_space;
547 /* Nonzero if we want to obey access control semantics. */
549 int flag_access_control = 1;
551 /* Nonzero if we want to check the return value of new and avoid calling
552 constructors if it is a null pointer. */
554 int flag_check_new;
556 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
557 initialization variables.
558 0: Old rules, set by -fno-for-scope.
559 2: New ISO rules, set by -ffor-scope.
560 1: Try to implement new ISO rules, but with backup compatibility
561 (and warnings). This is the default, for now. */
563 int flag_new_for_scope = 1;
565 /* Nonzero if we want to emit defined symbols with common-like linkage as
566 weak symbols where possible, in order to conform to C++ semantics.
567 Otherwise, emit them as local symbols. */
569 int flag_weak = 1;
571 /* Nonzero to use __cxa_atexit, rather than atexit, to register
572 destructors for local statics and global objects. */
574 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
576 /* Nonzero means output .vtable_{entry,inherit} for use in doing vtable gc. */
578 int flag_vtable_gc;
580 /* Nonzero means make the default pedwarns warnings instead of errors.
581 The value of this flag is ignored if -pedantic is specified. */
583 int flag_permissive;
585 /* Nonzero means to implement standard semantics for exception
586 specifications, calling unexpected if an exception is thrown that
587 doesn't match the specification. Zero means to treat them as
588 assertions and optimize accordingly, but not check them. */
590 int flag_enforce_eh_specs = 1;
592 /* The version of the C++ ABI in use. The following values are
593 allowed:
595 0: The version of the ABI believed most conformant with the
596 C++ ABI specification. This ABI may change as bugs are
597 discovered and fixed. Therefore, 0 will not necessarily
598 indicate the same ABI in different versions of G++.
600 1: The version of the ABI first used in G++ 3.2.
602 Additional positive integers will be assigned as new versions of
603 the ABI become the default version of the ABI. */
605 int flag_abi_version = 1;
607 /* Nonzero means warn about things that will change when compiling
608 with an ABI-compliant compiler. */
610 int warn_abi = 0;
612 /* Nonzero means warn about invalid uses of offsetof. */
614 int warn_invalid_offsetof = 1;
616 /* Nonzero means warn about implicit declarations. */
618 int warn_implicit = 1;
620 /* Nonzero means warn when all ctors or dtors are private, and the class
621 has no friends. */
623 int warn_ctor_dtor_privacy = 0;
625 /* Nonzero means warn in function declared in derived class has the
626 same name as a virtual in the base class, but fails to match the
627 type signature of any virtual function in the base class. */
629 int warn_overloaded_virtual;
631 /* Nonzero means warn when declaring a class that has a non virtual
632 destructor, when it really ought to have a virtual one. */
634 int warn_nonvdtor;
636 /* Nonzero means warn when the compiler will reorder code. */
638 int warn_reorder;
640 /* Nonzero means warn when synthesis behavior differs from Cfront's. */
642 int warn_synth;
644 /* Nonzero means warn when we convert a pointer to member function
645 into a pointer to (void or function). */
647 int warn_pmf2ptr = 1;
649 /* Nonzero means warn about violation of some Effective C++ style rules. */
651 int warn_ecpp;
653 /* Nonzero means warn where overload resolution chooses a promotion from
654 unsigned to signed over a conversion to an unsigned of the same size. */
656 int warn_sign_promo;
658 /* Nonzero means warn when an old-style cast is used. */
660 int warn_old_style_cast;
662 /* Nonzero means warn when non-templatized friend functions are
663 declared within a template */
665 int warn_nontemplate_friend = 1;
667 /* Nonzero means complain about deprecated features. */
669 int warn_deprecated = 1;
671 /* Maximum template instantiation depth. This limit is rather
672 arbitrary, but it exists to limit the time it takes to notice
673 infinite template instantiations. */
675 int max_tinst_depth = 500;
679 /* The elements of `ridpointers' are identifier nodes for the reserved
680 type names and storage classes. It is indexed by a RID_... value. */
681 tree *ridpointers;
683 tree (*make_fname_decl) (tree, int);
685 /* If non-NULL, the address of a language-specific function that takes
686 any action required right before expand_function_end is called. */
687 void (*lang_expand_function_end) (void);
689 /* Nonzero means the expression being parsed will never be evaluated.
690 This is a count, since unevaluated expressions can nest. */
691 int skip_evaluation;
693 /* Information about how a function name is generated. */
694 struct fname_var_t
696 tree *const decl; /* pointer to the VAR_DECL. */
697 const unsigned rid; /* RID number for the identifier. */
698 const int pretty; /* How pretty is it? */
701 /* The three ways of getting then name of the current function. */
703 const struct fname_var_t fname_vars[] =
705 /* C99 compliant __func__, must be first. */
706 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
707 /* GCC __FUNCTION__ compliant. */
708 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
709 /* GCC __PRETTY_FUNCTION__ compliant. */
710 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
711 {NULL, 0, 0},
714 static int constant_fits_type_p (tree, tree);
716 /* Keep a stack of if statements. We record the number of compound
717 statements seen up to the if keyword, as well as the line number
718 and file of the if. If a potentially ambiguous else is seen, that
719 fact is recorded; the warning is issued when we can be sure that
720 the enclosing if statement does not have an else branch. */
721 typedef struct
723 int compstmt_count;
724 location_t locus;
725 int needs_warning;
726 tree if_stmt;
727 } if_elt;
729 static if_elt *if_stack;
731 /* Amount of space in the if statement stack. */
732 static int if_stack_space = 0;
734 /* Stack pointer. */
735 static int if_stack_pointer = 0;
737 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
738 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
739 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
740 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
741 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
742 static tree handle_always_inline_attribute (tree *, tree, tree, int,
743 bool *);
744 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
745 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
746 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
747 static tree handle_transparent_union_attribute (tree *, tree, tree,
748 int, bool *);
749 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
750 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
751 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
752 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
753 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
754 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
755 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
756 static tree handle_visibility_attribute (tree *, tree, tree, int,
757 bool *);
758 static tree handle_tls_model_attribute (tree *, tree, tree, int,
759 bool *);
760 static tree handle_no_instrument_function_attribute (tree *, tree,
761 tree, int, bool *);
762 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
763 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
764 bool *);
765 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
766 static tree handle_deprecated_attribute (tree *, tree, tree, int,
767 bool *);
768 static tree handle_vector_size_attribute (tree *, tree, tree, int,
769 bool *);
770 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
771 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
772 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
773 static tree vector_size_helper (tree, tree);
775 static void check_function_nonnull (tree, tree);
776 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
777 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
778 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
779 static int resort_field_decl_cmp (const void *, const void *);
781 /* Table of machine-independent attributes common to all C-like languages. */
782 const struct attribute_spec c_common_attribute_table[] =
784 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
785 { "packed", 0, 0, false, false, false,
786 handle_packed_attribute },
787 { "nocommon", 0, 0, true, false, false,
788 handle_nocommon_attribute },
789 { "common", 0, 0, true, false, false,
790 handle_common_attribute },
791 /* FIXME: logically, noreturn attributes should be listed as
792 "false, true, true" and apply to function types. But implementing this
793 would require all the places in the compiler that use TREE_THIS_VOLATILE
794 on a decl to identify non-returning functions to be located and fixed
795 to check the function type instead. */
796 { "noreturn", 0, 0, true, false, false,
797 handle_noreturn_attribute },
798 { "volatile", 0, 0, true, false, false,
799 handle_noreturn_attribute },
800 { "noinline", 0, 0, true, false, false,
801 handle_noinline_attribute },
802 { "always_inline", 0, 0, true, false, false,
803 handle_always_inline_attribute },
804 { "used", 0, 0, true, false, false,
805 handle_used_attribute },
806 { "unused", 0, 0, false, false, false,
807 handle_unused_attribute },
808 /* The same comments as for noreturn attributes apply to const ones. */
809 { "const", 0, 0, true, false, false,
810 handle_const_attribute },
811 { "transparent_union", 0, 0, false, false, false,
812 handle_transparent_union_attribute },
813 { "constructor", 0, 0, true, false, false,
814 handle_constructor_attribute },
815 { "destructor", 0, 0, true, false, false,
816 handle_destructor_attribute },
817 { "mode", 1, 1, false, true, false,
818 handle_mode_attribute },
819 { "section", 1, 1, true, false, false,
820 handle_section_attribute },
821 { "aligned", 0, 1, false, false, false,
822 handle_aligned_attribute },
823 { "weak", 0, 0, true, false, false,
824 handle_weak_attribute },
825 { "alias", 1, 1, true, false, false,
826 handle_alias_attribute },
827 { "no_instrument_function", 0, 0, true, false, false,
828 handle_no_instrument_function_attribute },
829 { "malloc", 0, 0, true, false, false,
830 handle_malloc_attribute },
831 { "no_stack_limit", 0, 0, true, false, false,
832 handle_no_limit_stack_attribute },
833 { "pure", 0, 0, true, false, false,
834 handle_pure_attribute },
835 { "deprecated", 0, 0, false, false, false,
836 handle_deprecated_attribute },
837 { "vector_size", 1, 1, false, true, false,
838 handle_vector_size_attribute },
839 { "visibility", 1, 1, true, false, false,
840 handle_visibility_attribute },
841 { "tls_model", 1, 1, true, false, false,
842 handle_tls_model_attribute },
843 { "nonnull", 0, -1, false, true, true,
844 handle_nonnull_attribute },
845 { "nothrow", 0, 0, true, false, false,
846 handle_nothrow_attribute },
847 { "may_alias", 0, 0, false, true, false, NULL },
848 { "cleanup", 1, 1, true, false, false,
849 handle_cleanup_attribute },
850 { NULL, 0, 0, false, false, false, NULL }
853 /* Give the specifications for the format attributes, used by C and all
854 descendants. */
856 const struct attribute_spec c_common_format_attribute_table[] =
858 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
859 { "format", 3, 3, false, true, true,
860 handle_format_attribute },
861 { "format_arg", 1, 1, false, true, true,
862 handle_format_arg_attribute },
863 { NULL, 0, 0, false, false, false, NULL }
866 /* Record the start of an if-then, and record the start of it
867 for ambiguous else detection.
869 COND is the condition for the if-then statement.
871 IF_STMT is the statement node that has already been created for
872 this if-then statement. It is created before parsing the
873 condition to keep line number information accurate. */
875 void
876 c_expand_start_cond (tree cond, int compstmt_count, tree if_stmt)
878 /* Make sure there is enough space on the stack. */
879 if (if_stack_space == 0)
881 if_stack_space = 10;
882 if_stack = xmalloc (10 * sizeof (if_elt));
884 else if (if_stack_space == if_stack_pointer)
886 if_stack_space += 10;
887 if_stack = xrealloc (if_stack, if_stack_space * sizeof (if_elt));
890 IF_COND (if_stmt) = cond;
891 add_stmt (if_stmt);
893 /* Record this if statement. */
894 if_stack[if_stack_pointer].compstmt_count = compstmt_count;
895 if_stack[if_stack_pointer].locus = input_location;
896 if_stack[if_stack_pointer].needs_warning = 0;
897 if_stack[if_stack_pointer].if_stmt = if_stmt;
898 if_stack_pointer++;
901 /* Called after the then-clause for an if-statement is processed. */
903 void
904 c_finish_then (void)
906 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
907 RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
910 /* Record the end of an if-then. Optionally warn if a nested
911 if statement had an ambiguous else clause. */
913 void
914 c_expand_end_cond (void)
916 if_stack_pointer--;
917 if (if_stack[if_stack_pointer].needs_warning)
918 warning ("%Hsuggest explicit braces to avoid ambiguous `else'",
919 &if_stack[if_stack_pointer].locus);
920 last_expr_type = NULL_TREE;
923 /* Called between the then-clause and the else-clause
924 of an if-then-else. */
926 void
927 c_expand_start_else (void)
929 /* An ambiguous else warning must be generated for the enclosing if
930 statement, unless we see an else branch for that one, too. */
931 if (warn_parentheses
932 && if_stack_pointer > 1
933 && (if_stack[if_stack_pointer - 1].compstmt_count
934 == if_stack[if_stack_pointer - 2].compstmt_count))
935 if_stack[if_stack_pointer - 2].needs_warning = 1;
937 /* Even if a nested if statement had an else branch, it can't be
938 ambiguous if this one also has an else. So don't warn in that
939 case. Also don't warn for any if statements nested in this else. */
940 if_stack[if_stack_pointer - 1].needs_warning = 0;
941 if_stack[if_stack_pointer - 1].compstmt_count--;
944 /* Called after the else-clause for an if-statement is processed. */
946 void
947 c_finish_else (void)
949 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
950 RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
953 /* Begin an if-statement. Returns a newly created IF_STMT if
954 appropriate.
956 Unlike the C++ front-end, we do not call add_stmt here; it is
957 probably safe to do so, but I am not very familiar with this
958 code so I am being extra careful not to change its behavior
959 beyond what is strictly necessary for correctness. */
961 tree
962 c_begin_if_stmt (void)
964 tree r;
965 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
966 return r;
969 /* Begin a while statement. Returns a newly created WHILE_STMT if
970 appropriate.
972 Unlike the C++ front-end, we do not call add_stmt here; it is
973 probably safe to do so, but I am not very familiar with this
974 code so I am being extra careful not to change its behavior
975 beyond what is strictly necessary for correctness. */
977 tree
978 c_begin_while_stmt (void)
980 tree r;
981 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
982 return r;
985 void
986 c_finish_while_stmt_cond (tree cond, tree while_stmt)
988 WHILE_COND (while_stmt) = cond;
991 /* Push current bindings for the function name VAR_DECLS. */
993 void
994 start_fname_decls (void)
996 unsigned ix;
997 tree saved = NULL_TREE;
999 for (ix = 0; fname_vars[ix].decl; ix++)
1001 tree decl = *fname_vars[ix].decl;
1003 if (decl)
1005 saved = tree_cons (decl, build_int_2 (ix, 0), saved);
1006 *fname_vars[ix].decl = NULL_TREE;
1009 if (saved || saved_function_name_decls)
1010 /* Normally they'll have been NULL, so only push if we've got a
1011 stack, or they are non-NULL. */
1012 saved_function_name_decls = tree_cons (saved, NULL_TREE,
1013 saved_function_name_decls);
1016 /* Finish up the current bindings, adding them into the
1017 current function's statement tree. This is done by wrapping the
1018 function's body in a COMPOUND_STMT containing these decls too. This
1019 must be done _before_ finish_stmt_tree is called. If there is no
1020 current function, we must be at file scope and no statements are
1021 involved. Pop the previous bindings. */
1023 void
1024 finish_fname_decls (void)
1026 unsigned ix;
1027 tree body = NULL_TREE;
1028 tree stack = saved_function_name_decls;
1030 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
1031 body = chainon (TREE_VALUE (stack), body);
1033 if (body)
1035 /* They were called into existence, so add to statement tree. Add
1036 the DECL_STMTs inside the outermost scope. */
1037 tree *p = &DECL_SAVED_TREE (current_function_decl);
1038 /* Skip the dummy EXPR_STMT and any EH_SPEC_BLOCK. */
1039 while (TREE_CODE (*p) != COMPOUND_STMT)
1040 p = &TREE_CHAIN (*p);
1041 p = &COMPOUND_BODY (*p);
1042 if (TREE_CODE (*p) == SCOPE_STMT)
1043 p = &TREE_CHAIN (*p);
1045 body = chainon (body, *p);
1046 *p = body;
1049 for (ix = 0; fname_vars[ix].decl; ix++)
1050 *fname_vars[ix].decl = NULL_TREE;
1052 if (stack)
1054 /* We had saved values, restore them. */
1055 tree saved;
1057 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
1059 tree decl = TREE_PURPOSE (saved);
1060 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
1062 *fname_vars[ix].decl = decl;
1064 stack = TREE_CHAIN (stack);
1066 saved_function_name_decls = stack;
1069 /* Return the text name of the current function, suitably prettified
1070 by PRETTY_P. */
1072 const char *
1073 fname_as_string (int pretty_p)
1075 const char *name = NULL;
1077 if (pretty_p)
1078 name = (current_function_decl
1079 ? (*lang_hooks.decl_printable_name) (current_function_decl, 2)
1080 : "top level");
1081 else if (current_function_decl && DECL_NAME (current_function_decl))
1082 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
1083 else
1084 name = "";
1085 return name;
1088 /* Return the VAR_DECL for a const char array naming the current
1089 function. If the VAR_DECL has not yet been created, create it
1090 now. RID indicates how it should be formatted and IDENTIFIER_NODE
1091 ID is its name (unfortunately C and C++ hold the RID values of
1092 keywords in different places, so we can't derive RID from ID in
1093 this language independent code. */
1095 tree
1096 fname_decl (unsigned int rid, tree id)
1098 unsigned ix;
1099 tree decl = NULL_TREE;
1101 for (ix = 0; fname_vars[ix].decl; ix++)
1102 if (fname_vars[ix].rid == rid)
1103 break;
1105 decl = *fname_vars[ix].decl;
1106 if (!decl)
1108 tree saved_last_tree = last_tree;
1109 /* If a tree is built here, it would normally have the lineno of
1110 the current statement. Later this tree will be moved to the
1111 beginning of the function and this line number will be wrong.
1112 To avoid this problem set the lineno to 0 here; that prevents
1113 it from appearing in the RTL. */
1114 int saved_lineno = input_line;
1115 input_line = 0;
1117 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
1118 if (last_tree != saved_last_tree)
1120 /* We created some statement tree for the decl. This belongs
1121 at the start of the function, so remove it now and reinsert
1122 it after the function is complete. */
1123 tree stmts = TREE_CHAIN (saved_last_tree);
1125 TREE_CHAIN (saved_last_tree) = NULL_TREE;
1126 last_tree = saved_last_tree;
1127 saved_function_name_decls = tree_cons (decl, stmts,
1128 saved_function_name_decls);
1130 *fname_vars[ix].decl = decl;
1131 input_line = saved_lineno;
1133 if (!ix && !current_function_decl)
1134 pedwarn ("%H'%D' is not defined outside of function scope",
1135 &DECL_SOURCE_LOCATION (decl), decl);
1137 return decl;
1140 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
1142 tree
1143 fix_string_type (tree value)
1145 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
1146 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
1147 const int nchars_max = flag_isoc99 ? 4095 : 509;
1148 int length = TREE_STRING_LENGTH (value);
1149 int nchars;
1151 /* Compute the number of elements, for the array type. */
1152 nchars = wide_flag ? length / wchar_bytes : length;
1154 if (pedantic && nchars - 1 > nchars_max && !c_dialect_cxx ())
1155 pedwarn ("string length `%d' is greater than the length `%d' ISO C%d compilers are required to support",
1156 nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
1158 /* Create the array type for the string constant.
1159 -Wwrite-strings says make the string constant an array of const char
1160 so that copying it to a non-const pointer will get a warning.
1161 For C++, this is the standard behavior. */
1162 if (flag_const_strings && ! flag_writable_strings)
1164 tree elements
1165 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
1166 1, 0);
1167 TREE_TYPE (value)
1168 = build_array_type (elements,
1169 build_index_type (build_int_2 (nchars - 1, 0)));
1171 else
1172 TREE_TYPE (value)
1173 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
1174 build_index_type (build_int_2 (nchars - 1, 0)));
1176 TREE_CONSTANT (value) = 1;
1177 TREE_READONLY (value) = ! flag_writable_strings;
1178 TREE_STATIC (value) = 1;
1179 return value;
1182 /* Print a warning if a constant expression had overflow in folding.
1183 Invoke this function on every expression that the language
1184 requires to be a constant expression.
1185 Note the ANSI C standard says it is erroneous for a
1186 constant expression to overflow. */
1188 void
1189 constant_expression_warning (tree value)
1191 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1192 || TREE_CODE (value) == VECTOR_CST
1193 || TREE_CODE (value) == COMPLEX_CST)
1194 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
1195 pedwarn ("overflow in constant expression");
1198 /* Print a warning if an expression had overflow in folding.
1199 Invoke this function on every expression that
1200 (1) appears in the source code, and
1201 (2) might be a constant expression that overflowed, and
1202 (3) is not already checked by convert_and_check;
1203 however, do not invoke this function on operands of explicit casts. */
1205 void
1206 overflow_warning (tree value)
1208 if ((TREE_CODE (value) == INTEGER_CST
1209 || (TREE_CODE (value) == COMPLEX_CST
1210 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
1211 && TREE_OVERFLOW (value))
1213 TREE_OVERFLOW (value) = 0;
1214 if (skip_evaluation == 0)
1215 warning ("integer overflow in expression");
1217 else if ((TREE_CODE (value) == REAL_CST
1218 || (TREE_CODE (value) == COMPLEX_CST
1219 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
1220 && TREE_OVERFLOW (value))
1222 TREE_OVERFLOW (value) = 0;
1223 if (skip_evaluation == 0)
1224 warning ("floating point overflow in expression");
1226 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
1228 TREE_OVERFLOW (value) = 0;
1229 if (skip_evaluation == 0)
1230 warning ("vector overflow in expression");
1234 /* Print a warning if a large constant is truncated to unsigned,
1235 or if -Wconversion is used and a constant < 0 is converted to unsigned.
1236 Invoke this function on every expression that might be implicitly
1237 converted to an unsigned type. */
1239 void
1240 unsigned_conversion_warning (tree result, tree operand)
1242 tree type = TREE_TYPE (result);
1244 if (TREE_CODE (operand) == INTEGER_CST
1245 && TREE_CODE (type) == INTEGER_TYPE
1246 && TREE_UNSIGNED (type)
1247 && skip_evaluation == 0
1248 && !int_fits_type_p (operand, type))
1250 if (!int_fits_type_p (operand, c_common_signed_type (type)))
1251 /* This detects cases like converting -129 or 256 to unsigned char. */
1252 warning ("large integer implicitly truncated to unsigned type");
1253 else if (warn_conversion)
1254 warning ("negative integer implicitly converted to unsigned type");
1258 /* Nonzero if constant C has a value that is permissible
1259 for type TYPE (an INTEGER_TYPE). */
1261 static int
1262 constant_fits_type_p (tree c, tree type)
1264 if (TREE_CODE (c) == INTEGER_CST)
1265 return int_fits_type_p (c, type);
1267 c = convert (type, c);
1268 return !TREE_OVERFLOW (c);
1271 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1272 Invoke this function on every expression that is converted implicitly,
1273 i.e. because of language rules and not because of an explicit cast. */
1275 tree
1276 convert_and_check (tree type, tree expr)
1278 tree t = convert (type, expr);
1279 if (TREE_CODE (t) == INTEGER_CST)
1281 if (TREE_OVERFLOW (t))
1283 TREE_OVERFLOW (t) = 0;
1285 /* Do not diagnose overflow in a constant expression merely
1286 because a conversion overflowed. */
1287 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
1289 /* No warning for converting 0x80000000 to int. */
1290 if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
1291 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1292 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1293 /* If EXPR fits in the unsigned version of TYPE,
1294 don't warn unless pedantic. */
1295 if ((pedantic
1296 || TREE_UNSIGNED (type)
1297 || ! constant_fits_type_p (expr,
1298 c_common_unsigned_type (type)))
1299 && skip_evaluation == 0)
1300 warning ("overflow in implicit constant conversion");
1302 else
1303 unsigned_conversion_warning (t, expr);
1305 return t;
1308 /* A node in a list that describes references to variables (EXPR), which are
1309 either read accesses if WRITER is zero, or write accesses, in which case
1310 WRITER is the parent of EXPR. */
1311 struct tlist
1313 struct tlist *next;
1314 tree expr, writer;
1317 /* Used to implement a cache the results of a call to verify_tree. We only
1318 use this for SAVE_EXPRs. */
1319 struct tlist_cache
1321 struct tlist_cache *next;
1322 struct tlist *cache_before_sp;
1323 struct tlist *cache_after_sp;
1324 tree expr;
1327 /* Obstack to use when allocating tlist structures, and corresponding
1328 firstobj. */
1329 static struct obstack tlist_obstack;
1330 static char *tlist_firstobj = 0;
1332 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1333 warnings. */
1334 static struct tlist *warned_ids;
1335 /* SAVE_EXPRs need special treatment. We process them only once and then
1336 cache the results. */
1337 static struct tlist_cache *save_expr_cache;
1339 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1340 static void merge_tlist (struct tlist **, struct tlist *, int);
1341 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1342 static int warning_candidate_p (tree);
1343 static void warn_for_collisions (struct tlist *);
1344 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1345 static struct tlist *new_tlist (struct tlist *, tree, tree);
1346 static void verify_sequence_points (tree);
1348 /* Create a new struct tlist and fill in its fields. */
1349 static struct tlist *
1350 new_tlist (struct tlist *next, tree t, tree writer)
1352 struct tlist *l;
1353 l = obstack_alloc (&tlist_obstack, sizeof *l);
1354 l->next = next;
1355 l->expr = t;
1356 l->writer = writer;
1357 return l;
1360 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1361 is nonnull, we ignore any node we find which has a writer equal to it. */
1363 static void
1364 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1366 while (add)
1368 struct tlist *next = add->next;
1369 if (! copy)
1370 add->next = *to;
1371 if (! exclude_writer || add->writer != exclude_writer)
1372 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1373 add = next;
1377 /* Merge the nodes of ADD into TO. This merging process is done so that for
1378 each variable that already exists in TO, no new node is added; however if
1379 there is a write access recorded in ADD, and an occurrence on TO is only
1380 a read access, then the occurrence in TO will be modified to record the
1381 write. */
1383 static void
1384 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1386 struct tlist **end = to;
1388 while (*end)
1389 end = &(*end)->next;
1391 while (add)
1393 int found = 0;
1394 struct tlist *tmp2;
1395 struct tlist *next = add->next;
1397 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1398 if (tmp2->expr == add->expr)
1400 found = 1;
1401 if (! tmp2->writer)
1402 tmp2->writer = add->writer;
1404 if (! found)
1406 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1407 end = &(*end)->next;
1408 *end = 0;
1410 add = next;
1414 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1415 references in list LIST conflict with it, excluding reads if ONLY writers
1416 is nonzero. */
1418 static void
1419 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1420 int only_writes)
1422 struct tlist *tmp;
1424 /* Avoid duplicate warnings. */
1425 for (tmp = warned_ids; tmp; tmp = tmp->next)
1426 if (tmp->expr == written)
1427 return;
1429 while (list)
1431 if (list->expr == written
1432 && list->writer != writer
1433 && (! only_writes || list->writer))
1435 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1436 warning ("operation on `%s' may be undefined",
1437 IDENTIFIER_POINTER (DECL_NAME (list->expr)));
1439 list = list->next;
1443 /* Given a list LIST of references to variables, find whether any of these
1444 can cause conflicts due to missing sequence points. */
1446 static void
1447 warn_for_collisions (struct tlist *list)
1449 struct tlist *tmp;
1451 for (tmp = list; tmp; tmp = tmp->next)
1453 if (tmp->writer)
1454 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1458 /* Return nonzero if X is a tree that can be verified by the sequence point
1459 warnings. */
1460 static int
1461 warning_candidate_p (tree x)
1463 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1466 /* Walk the tree X, and record accesses to variables. If X is written by the
1467 parent tree, WRITER is the parent.
1468 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1469 expression or its only operand forces a sequence point, then everything up
1470 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1471 in PNO_SP.
1472 Once we return, we will have emitted warnings if any subexpression before
1473 such a sequence point could be undefined. On a higher level, however, the
1474 sequence point may not be relevant, and we'll merge the two lists.
1476 Example: (b++, a) + b;
1477 The call that processes the COMPOUND_EXPR will store the increment of B
1478 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1479 processes the PLUS_EXPR will need to merge the two lists so that
1480 eventually, all accesses end up on the same list (and we'll warn about the
1481 unordered subexpressions b++ and b.
1483 A note on merging. If we modify the former example so that our expression
1484 becomes
1485 (b++, b) + a
1486 care must be taken not simply to add all three expressions into the final
1487 PNO_SP list. The function merge_tlist takes care of that by merging the
1488 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1489 way, so that no more than one access to B is recorded. */
1491 static void
1492 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1493 tree writer)
1495 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1496 enum tree_code code;
1497 char class;
1499 /* X may be NULL if it is the operand of an empty statement expression
1500 ({ }). */
1501 if (x == NULL)
1502 return;
1504 restart:
1505 code = TREE_CODE (x);
1506 class = TREE_CODE_CLASS (code);
1508 if (warning_candidate_p (x))
1510 *pno_sp = new_tlist (*pno_sp, x, writer);
1511 return;
1514 switch (code)
1516 case CONSTRUCTOR:
1517 return;
1519 case COMPOUND_EXPR:
1520 case TRUTH_ANDIF_EXPR:
1521 case TRUTH_ORIF_EXPR:
1522 tmp_before = tmp_nosp = tmp_list3 = 0;
1523 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1524 warn_for_collisions (tmp_nosp);
1525 merge_tlist (pbefore_sp, tmp_before, 0);
1526 merge_tlist (pbefore_sp, tmp_nosp, 0);
1527 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1528 merge_tlist (pbefore_sp, tmp_list3, 0);
1529 return;
1531 case COND_EXPR:
1532 tmp_before = tmp_list2 = 0;
1533 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1534 warn_for_collisions (tmp_list2);
1535 merge_tlist (pbefore_sp, tmp_before, 0);
1536 merge_tlist (pbefore_sp, tmp_list2, 1);
1538 tmp_list3 = tmp_nosp = 0;
1539 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1540 warn_for_collisions (tmp_nosp);
1541 merge_tlist (pbefore_sp, tmp_list3, 0);
1543 tmp_list3 = tmp_list2 = 0;
1544 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1545 warn_for_collisions (tmp_list2);
1546 merge_tlist (pbefore_sp, tmp_list3, 0);
1547 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1548 two first, to avoid warning for (a ? b++ : b++). */
1549 merge_tlist (&tmp_nosp, tmp_list2, 0);
1550 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1551 return;
1553 case PREDECREMENT_EXPR:
1554 case PREINCREMENT_EXPR:
1555 case POSTDECREMENT_EXPR:
1556 case POSTINCREMENT_EXPR:
1557 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1558 return;
1560 case MODIFY_EXPR:
1561 tmp_before = tmp_nosp = tmp_list3 = 0;
1562 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1563 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1564 /* Expressions inside the LHS are not ordered wrt. the sequence points
1565 in the RHS. Example:
1566 *a = (a++, 2)
1567 Despite the fact that the modification of "a" is in the before_sp
1568 list (tmp_before), it conflicts with the use of "a" in the LHS.
1569 We can handle this by adding the contents of tmp_list3
1570 to those of tmp_before, and redoing the collision warnings for that
1571 list. */
1572 add_tlist (&tmp_before, tmp_list3, x, 1);
1573 warn_for_collisions (tmp_before);
1574 /* Exclude the LHS itself here; we first have to merge it into the
1575 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1576 didn't exclude the LHS, we'd get it twice, once as a read and once
1577 as a write. */
1578 add_tlist (pno_sp, tmp_list3, x, 0);
1579 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1581 merge_tlist (pbefore_sp, tmp_before, 0);
1582 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1583 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1584 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1585 return;
1587 case CALL_EXPR:
1588 /* We need to warn about conflicts among arguments and conflicts between
1589 args and the function address. Side effects of the function address,
1590 however, are not ordered by the sequence point of the call. */
1591 tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1592 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1593 if (TREE_OPERAND (x, 1))
1594 verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1595 merge_tlist (&tmp_list3, tmp_list2, 0);
1596 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1597 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1598 warn_for_collisions (tmp_before);
1599 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1600 return;
1602 case TREE_LIST:
1603 /* Scan all the list, e.g. indices of multi dimensional array. */
1604 while (x)
1606 tmp_before = tmp_nosp = 0;
1607 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1608 merge_tlist (&tmp_nosp, tmp_before, 0);
1609 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1610 x = TREE_CHAIN (x);
1612 return;
1614 case SAVE_EXPR:
1616 struct tlist_cache *t;
1617 for (t = save_expr_cache; t; t = t->next)
1618 if (t->expr == x)
1619 break;
1621 if (! t)
1623 t = obstack_alloc (&tlist_obstack, sizeof *t);
1624 t->next = save_expr_cache;
1625 t->expr = x;
1626 save_expr_cache = t;
1628 tmp_before = tmp_nosp = 0;
1629 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1630 warn_for_collisions (tmp_nosp);
1632 tmp_list3 = 0;
1633 while (tmp_nosp)
1635 struct tlist *t = tmp_nosp;
1636 tmp_nosp = t->next;
1637 merge_tlist (&tmp_list3, t, 0);
1639 t->cache_before_sp = tmp_before;
1640 t->cache_after_sp = tmp_list3;
1642 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1643 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1644 return;
1646 default:
1647 break;
1650 if (class == '1')
1652 if (first_rtl_op (code) == 0)
1653 return;
1654 x = TREE_OPERAND (x, 0);
1655 writer = 0;
1656 goto restart;
1659 switch (class)
1661 case 'r':
1662 case '<':
1663 case '2':
1664 case 'b':
1665 case 'e':
1666 case 's':
1667 case 'x':
1669 int lp;
1670 int max = first_rtl_op (TREE_CODE (x));
1671 for (lp = 0; lp < max; lp++)
1673 tmp_before = tmp_nosp = 0;
1674 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, NULL_TREE);
1675 merge_tlist (&tmp_nosp, tmp_before, 0);
1676 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1678 break;
1683 /* Try to warn for undefined behavior in EXPR due to missing sequence
1684 points. */
1686 static void
1687 verify_sequence_points (tree expr)
1689 struct tlist *before_sp = 0, *after_sp = 0;
1691 warned_ids = 0;
1692 save_expr_cache = 0;
1693 if (tlist_firstobj == 0)
1695 gcc_obstack_init (&tlist_obstack);
1696 tlist_firstobj = obstack_alloc (&tlist_obstack, 0);
1699 verify_tree (expr, &before_sp, &after_sp, 0);
1700 warn_for_collisions (after_sp);
1701 obstack_free (&tlist_obstack, tlist_firstobj);
1704 tree
1705 c_expand_expr_stmt (tree expr)
1707 /* Do default conversion if safe and possibly important,
1708 in case within ({...}). */
1709 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
1710 && (flag_isoc99 || lvalue_p (expr)))
1711 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
1712 expr = default_conversion (expr);
1714 if (warn_sequence_point)
1715 verify_sequence_points (expr);
1717 if (TREE_TYPE (expr) != error_mark_node
1718 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
1719 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
1720 error ("expression statement has incomplete type");
1722 last_expr_type = TREE_TYPE (expr);
1723 return add_stmt (build_stmt (EXPR_STMT, expr));
1726 /* Validate the expression after `case' and apply default promotions. */
1728 tree
1729 check_case_value (tree value)
1731 if (value == NULL_TREE)
1732 return value;
1734 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1735 STRIP_TYPE_NOPS (value);
1736 /* In C++, the following is allowed:
1738 const int i = 3;
1739 switch (...) { case i: ... }
1741 So, we try to reduce the VALUE to a constant that way. */
1742 if (c_dialect_cxx ())
1744 value = decl_constant_value (value);
1745 STRIP_TYPE_NOPS (value);
1746 value = fold (value);
1749 if (TREE_CODE (value) != INTEGER_CST
1750 && value != error_mark_node)
1752 error ("case label does not reduce to an integer constant");
1753 value = error_mark_node;
1755 else
1756 /* Promote char or short to int. */
1757 value = default_conversion (value);
1759 constant_expression_warning (value);
1761 return value;
1764 /* Return an integer type with BITS bits of precision,
1765 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1767 tree
1768 c_common_type_for_size (unsigned int bits, int unsignedp)
1770 if (bits == TYPE_PRECISION (integer_type_node))
1771 return unsignedp ? unsigned_type_node : integer_type_node;
1773 if (bits == TYPE_PRECISION (signed_char_type_node))
1774 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1776 if (bits == TYPE_PRECISION (short_integer_type_node))
1777 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1779 if (bits == TYPE_PRECISION (long_integer_type_node))
1780 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1782 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1783 return (unsignedp ? long_long_unsigned_type_node
1784 : long_long_integer_type_node);
1786 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1787 return (unsignedp ? widest_unsigned_literal_type_node
1788 : widest_integer_literal_type_node);
1790 if (bits <= TYPE_PRECISION (intQI_type_node))
1791 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1793 if (bits <= TYPE_PRECISION (intHI_type_node))
1794 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1796 if (bits <= TYPE_PRECISION (intSI_type_node))
1797 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1799 if (bits <= TYPE_PRECISION (intDI_type_node))
1800 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1802 return 0;
1805 /* Return a data type that has machine mode MODE.
1806 If the mode is an integer,
1807 then UNSIGNEDP selects between signed and unsigned types. */
1809 tree
1810 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1812 if (mode == TYPE_MODE (integer_type_node))
1813 return unsignedp ? unsigned_type_node : integer_type_node;
1815 if (mode == TYPE_MODE (signed_char_type_node))
1816 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1818 if (mode == TYPE_MODE (short_integer_type_node))
1819 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1821 if (mode == TYPE_MODE (long_integer_type_node))
1822 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1824 if (mode == TYPE_MODE (long_long_integer_type_node))
1825 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1827 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1828 return unsignedp ? widest_unsigned_literal_type_node
1829 : widest_integer_literal_type_node;
1831 if (mode == QImode)
1832 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1834 if (mode == HImode)
1835 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1837 if (mode == SImode)
1838 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1840 if (mode == DImode)
1841 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1843 #if HOST_BITS_PER_WIDE_INT >= 64
1844 if (mode == TYPE_MODE (intTI_type_node))
1845 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1846 #endif
1848 if (mode == TYPE_MODE (float_type_node))
1849 return float_type_node;
1851 if (mode == TYPE_MODE (double_type_node))
1852 return double_type_node;
1854 if (mode == TYPE_MODE (long_double_type_node))
1855 return long_double_type_node;
1857 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1858 return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
1860 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1861 return unsignedp ? make_unsigned_type (mode) : make_signed_type (mode);
1863 switch (mode)
1865 case V16QImode:
1866 return unsignedp ? unsigned_V16QI_type_node : V16QI_type_node;
1867 case V8HImode:
1868 return unsignedp ? unsigned_V8HI_type_node : V8HI_type_node;
1869 case V4SImode:
1870 return unsignedp ? unsigned_V4SI_type_node : V4SI_type_node;
1871 case V2DImode:
1872 return unsignedp ? unsigned_V2DI_type_node : V2DI_type_node;
1873 case V2SImode:
1874 return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node;
1875 case V2HImode:
1876 return unsignedp ? unsigned_V2HI_type_node : V2HI_type_node;
1877 case V4HImode:
1878 return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node;
1879 case V8QImode:
1880 return unsignedp ? unsigned_V8QI_type_node : V8QI_type_node;
1881 case V1DImode:
1882 return unsignedp ? unsigned_V1DI_type_node : V1DI_type_node;
1883 case V16SFmode:
1884 return V16SF_type_node;
1885 case V4SFmode:
1886 return V4SF_type_node;
1887 case V2SFmode:
1888 return V2SF_type_node;
1889 case V2DFmode:
1890 return V2DF_type_node;
1891 case V4DFmode:
1892 return V4DF_type_node;
1893 default:
1894 break;
1897 return 0;
1900 /* Return an unsigned type the same as TYPE in other respects. */
1901 tree
1902 c_common_unsigned_type (tree type)
1904 tree type1 = TYPE_MAIN_VARIANT (type);
1905 if (type1 == signed_char_type_node || type1 == char_type_node)
1906 return unsigned_char_type_node;
1907 if (type1 == integer_type_node)
1908 return unsigned_type_node;
1909 if (type1 == short_integer_type_node)
1910 return short_unsigned_type_node;
1911 if (type1 == long_integer_type_node)
1912 return long_unsigned_type_node;
1913 if (type1 == long_long_integer_type_node)
1914 return long_long_unsigned_type_node;
1915 if (type1 == widest_integer_literal_type_node)
1916 return widest_unsigned_literal_type_node;
1917 #if HOST_BITS_PER_WIDE_INT >= 64
1918 if (type1 == intTI_type_node)
1919 return unsigned_intTI_type_node;
1920 #endif
1921 if (type1 == intDI_type_node)
1922 return unsigned_intDI_type_node;
1923 if (type1 == intSI_type_node)
1924 return unsigned_intSI_type_node;
1925 if (type1 == intHI_type_node)
1926 return unsigned_intHI_type_node;
1927 if (type1 == intQI_type_node)
1928 return unsigned_intQI_type_node;
1930 return c_common_signed_or_unsigned_type (1, type);
1933 /* Return a signed type the same as TYPE in other respects. */
1935 tree
1936 c_common_signed_type (tree type)
1938 tree type1 = TYPE_MAIN_VARIANT (type);
1939 if (type1 == unsigned_char_type_node || type1 == char_type_node)
1940 return signed_char_type_node;
1941 if (type1 == unsigned_type_node)
1942 return integer_type_node;
1943 if (type1 == short_unsigned_type_node)
1944 return short_integer_type_node;
1945 if (type1 == long_unsigned_type_node)
1946 return long_integer_type_node;
1947 if (type1 == long_long_unsigned_type_node)
1948 return long_long_integer_type_node;
1949 if (type1 == widest_unsigned_literal_type_node)
1950 return widest_integer_literal_type_node;
1951 #if HOST_BITS_PER_WIDE_INT >= 64
1952 if (type1 == unsigned_intTI_type_node)
1953 return intTI_type_node;
1954 #endif
1955 if (type1 == unsigned_intDI_type_node)
1956 return intDI_type_node;
1957 if (type1 == unsigned_intSI_type_node)
1958 return intSI_type_node;
1959 if (type1 == unsigned_intHI_type_node)
1960 return intHI_type_node;
1961 if (type1 == unsigned_intQI_type_node)
1962 return intQI_type_node;
1964 return c_common_signed_or_unsigned_type (0, type);
1967 /* Return a type the same as TYPE except unsigned or
1968 signed according to UNSIGNEDP. */
1970 tree
1971 c_common_signed_or_unsigned_type (int unsignedp, tree type)
1973 if (! INTEGRAL_TYPE_P (type)
1974 || TREE_UNSIGNED (type) == unsignedp)
1975 return type;
1977 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
1978 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1979 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1980 return unsignedp ? unsigned_type_node : integer_type_node;
1981 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
1982 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1983 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
1984 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1985 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
1986 return (unsignedp ? long_long_unsigned_type_node
1987 : long_long_integer_type_node);
1988 if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node))
1989 return (unsignedp ? widest_unsigned_literal_type_node
1990 : widest_integer_literal_type_node);
1992 #if HOST_BITS_PER_WIDE_INT >= 64
1993 if (TYPE_PRECISION (type) == TYPE_PRECISION (intTI_type_node))
1994 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1995 #endif
1996 if (TYPE_PRECISION (type) == TYPE_PRECISION (intDI_type_node))
1997 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1998 if (TYPE_PRECISION (type) == TYPE_PRECISION (intSI_type_node))
1999 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2000 if (TYPE_PRECISION (type) == TYPE_PRECISION (intHI_type_node))
2001 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2002 if (TYPE_PRECISION (type) == TYPE_PRECISION (intQI_type_node))
2003 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2005 return type;
2008 /* Return the minimum number of bits needed to represent VALUE in a
2009 signed or unsigned type, UNSIGNEDP says which. */
2011 unsigned int
2012 min_precision (tree value, int unsignedp)
2014 int log;
2016 /* If the value is negative, compute its negative minus 1. The latter
2017 adjustment is because the absolute value of the largest negative value
2018 is one larger than the largest positive value. This is equivalent to
2019 a bit-wise negation, so use that operation instead. */
2021 if (tree_int_cst_sgn (value) < 0)
2022 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
2024 /* Return the number of bits needed, taking into account the fact
2025 that we need one more bit for a signed than unsigned type. */
2027 if (integer_zerop (value))
2028 log = 0;
2029 else
2030 log = tree_floor_log2 (value);
2032 return log + 1 + ! unsignedp;
2035 /* Print an error message for invalid operands to arith operation
2036 CODE. NOP_EXPR is used as a special case (see
2037 c_common_truthvalue_conversion). */
2039 void
2040 binary_op_error (enum tree_code code)
2042 const char *opname;
2044 switch (code)
2046 case NOP_EXPR:
2047 error ("invalid truth-value expression");
2048 return;
2050 case PLUS_EXPR:
2051 opname = "+"; break;
2052 case MINUS_EXPR:
2053 opname = "-"; break;
2054 case MULT_EXPR:
2055 opname = "*"; break;
2056 case MAX_EXPR:
2057 opname = "max"; break;
2058 case MIN_EXPR:
2059 opname = "min"; break;
2060 case EQ_EXPR:
2061 opname = "=="; break;
2062 case NE_EXPR:
2063 opname = "!="; break;
2064 case LE_EXPR:
2065 opname = "<="; break;
2066 case GE_EXPR:
2067 opname = ">="; break;
2068 case LT_EXPR:
2069 opname = "<"; break;
2070 case GT_EXPR:
2071 opname = ">"; break;
2072 case LSHIFT_EXPR:
2073 opname = "<<"; break;
2074 case RSHIFT_EXPR:
2075 opname = ">>"; break;
2076 case TRUNC_MOD_EXPR:
2077 case FLOOR_MOD_EXPR:
2078 opname = "%"; break;
2079 case TRUNC_DIV_EXPR:
2080 case FLOOR_DIV_EXPR:
2081 opname = "/"; break;
2082 case BIT_AND_EXPR:
2083 opname = "&"; break;
2084 case BIT_IOR_EXPR:
2085 opname = "|"; break;
2086 case TRUTH_ANDIF_EXPR:
2087 opname = "&&"; break;
2088 case TRUTH_ORIF_EXPR:
2089 opname = "||"; break;
2090 case BIT_XOR_EXPR:
2091 opname = "^"; break;
2092 case LROTATE_EXPR:
2093 case RROTATE_EXPR:
2094 opname = "rotate"; break;
2095 default:
2096 opname = "unknown"; break;
2098 error ("invalid operands to binary %s", opname);
2101 /* Subroutine of build_binary_op, used for comparison operations.
2102 See if the operands have both been converted from subword integer types
2103 and, if so, perhaps change them both back to their original type.
2104 This function is also responsible for converting the two operands
2105 to the proper common type for comparison.
2107 The arguments of this function are all pointers to local variables
2108 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2109 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2111 If this function returns nonzero, it means that the comparison has
2112 a constant value. What this function returns is an expression for
2113 that value. */
2115 tree
2116 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2117 enum tree_code *rescode_ptr)
2119 tree type;
2120 tree op0 = *op0_ptr;
2121 tree op1 = *op1_ptr;
2122 int unsignedp0, unsignedp1;
2123 int real1, real2;
2124 tree primop0, primop1;
2125 enum tree_code code = *rescode_ptr;
2127 /* Throw away any conversions to wider types
2128 already present in the operands. */
2130 primop0 = get_narrower (op0, &unsignedp0);
2131 primop1 = get_narrower (op1, &unsignedp1);
2133 /* Handle the case that OP0 does not *contain* a conversion
2134 but it *requires* conversion to FINAL_TYPE. */
2136 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2137 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
2138 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2139 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
2141 /* If one of the operands must be floated, we cannot optimize. */
2142 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2143 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2145 /* If first arg is constant, swap the args (changing operation
2146 so value is preserved), for canonicalization. Don't do this if
2147 the second arg is 0. */
2149 if (TREE_CONSTANT (primop0)
2150 && ! integer_zerop (primop1) && ! real_zerop (primop1))
2152 tree tem = primop0;
2153 int temi = unsignedp0;
2154 primop0 = primop1;
2155 primop1 = tem;
2156 tem = op0;
2157 op0 = op1;
2158 op1 = tem;
2159 *op0_ptr = op0;
2160 *op1_ptr = op1;
2161 unsignedp0 = unsignedp1;
2162 unsignedp1 = temi;
2163 temi = real1;
2164 real1 = real2;
2165 real2 = temi;
2167 switch (code)
2169 case LT_EXPR:
2170 code = GT_EXPR;
2171 break;
2172 case GT_EXPR:
2173 code = LT_EXPR;
2174 break;
2175 case LE_EXPR:
2176 code = GE_EXPR;
2177 break;
2178 case GE_EXPR:
2179 code = LE_EXPR;
2180 break;
2181 default:
2182 break;
2184 *rescode_ptr = code;
2187 /* If comparing an integer against a constant more bits wide,
2188 maybe we can deduce a value of 1 or 0 independent of the data.
2189 Or else truncate the constant now
2190 rather than extend the variable at run time.
2192 This is only interesting if the constant is the wider arg.
2193 Also, it is not safe if the constant is unsigned and the
2194 variable arg is signed, since in this case the variable
2195 would be sign-extended and then regarded as unsigned.
2196 Our technique fails in this case because the lowest/highest
2197 possible unsigned results don't follow naturally from the
2198 lowest/highest possible values of the variable operand.
2199 For just EQ_EXPR and NE_EXPR there is another technique that
2200 could be used: see if the constant can be faithfully represented
2201 in the other operand's type, by truncating it and reextending it
2202 and see if that preserves the constant's value. */
2204 if (!real1 && !real2
2205 && TREE_CODE (primop1) == INTEGER_CST
2206 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2208 int min_gt, max_gt, min_lt, max_lt;
2209 tree maxval, minval;
2210 /* 1 if comparison is nominally unsigned. */
2211 int unsignedp = TREE_UNSIGNED (*restype_ptr);
2212 tree val;
2214 type = c_common_signed_or_unsigned_type (unsignedp0,
2215 TREE_TYPE (primop0));
2217 /* In C, if TYPE is an enumeration, then we need to get its
2218 min/max values from it's underlying integral type, not the
2219 enumerated type itself. In C++, TYPE_MAX_VALUE and
2220 TYPE_MIN_VALUE have already been set correctly on the
2221 enumeration type. */
2222 if (!c_dialect_cxx() && TREE_CODE (type) == ENUMERAL_TYPE)
2223 type = c_common_type_for_size (TYPE_PRECISION (type), unsignedp0);
2225 maxval = TYPE_MAX_VALUE (type);
2226 minval = TYPE_MIN_VALUE (type);
2228 if (unsignedp && !unsignedp0)
2229 *restype_ptr = c_common_signed_type (*restype_ptr);
2231 if (TREE_TYPE (primop1) != *restype_ptr)
2232 primop1 = convert (*restype_ptr, primop1);
2233 if (type != *restype_ptr)
2235 minval = convert (*restype_ptr, minval);
2236 maxval = convert (*restype_ptr, maxval);
2239 if (unsignedp && unsignedp0)
2241 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2242 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2243 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2244 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2246 else
2248 min_gt = INT_CST_LT (primop1, minval);
2249 max_gt = INT_CST_LT (primop1, maxval);
2250 min_lt = INT_CST_LT (minval, primop1);
2251 max_lt = INT_CST_LT (maxval, primop1);
2254 val = 0;
2255 /* This used to be a switch, but Genix compiler can't handle that. */
2256 if (code == NE_EXPR)
2258 if (max_lt || min_gt)
2259 val = truthvalue_true_node;
2261 else if (code == EQ_EXPR)
2263 if (max_lt || min_gt)
2264 val = truthvalue_false_node;
2266 else if (code == LT_EXPR)
2268 if (max_lt)
2269 val = truthvalue_true_node;
2270 if (!min_lt)
2271 val = truthvalue_false_node;
2273 else if (code == GT_EXPR)
2275 if (min_gt)
2276 val = truthvalue_true_node;
2277 if (!max_gt)
2278 val = truthvalue_false_node;
2280 else if (code == LE_EXPR)
2282 if (!max_gt)
2283 val = truthvalue_true_node;
2284 if (min_gt)
2285 val = truthvalue_false_node;
2287 else if (code == GE_EXPR)
2289 if (!min_lt)
2290 val = truthvalue_true_node;
2291 if (max_lt)
2292 val = truthvalue_false_node;
2295 /* If primop0 was sign-extended and unsigned comparison specd,
2296 we did a signed comparison above using the signed type bounds.
2297 But the comparison we output must be unsigned.
2299 Also, for inequalities, VAL is no good; but if the signed
2300 comparison had *any* fixed result, it follows that the
2301 unsigned comparison just tests the sign in reverse
2302 (positive values are LE, negative ones GE).
2303 So we can generate an unsigned comparison
2304 against an extreme value of the signed type. */
2306 if (unsignedp && !unsignedp0)
2308 if (val != 0)
2309 switch (code)
2311 case LT_EXPR:
2312 case GE_EXPR:
2313 primop1 = TYPE_MIN_VALUE (type);
2314 val = 0;
2315 break;
2317 case LE_EXPR:
2318 case GT_EXPR:
2319 primop1 = TYPE_MAX_VALUE (type);
2320 val = 0;
2321 break;
2323 default:
2324 break;
2326 type = c_common_unsigned_type (type);
2329 if (TREE_CODE (primop0) != INTEGER_CST)
2331 if (val == truthvalue_false_node)
2332 warning ("comparison is always false due to limited range of data type");
2333 if (val == truthvalue_true_node)
2334 warning ("comparison is always true due to limited range of data type");
2337 if (val != 0)
2339 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2340 if (TREE_SIDE_EFFECTS (primop0))
2341 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2342 return val;
2345 /* Value is not predetermined, but do the comparison
2346 in the type of the operand that is not constant.
2347 TYPE is already properly set. */
2349 else if (real1 && real2
2350 && (TYPE_PRECISION (TREE_TYPE (primop0))
2351 == TYPE_PRECISION (TREE_TYPE (primop1))))
2352 type = TREE_TYPE (primop0);
2354 /* If args' natural types are both narrower than nominal type
2355 and both extend in the same manner, compare them
2356 in the type of the wider arg.
2357 Otherwise must actually extend both to the nominal
2358 common type lest different ways of extending
2359 alter the result.
2360 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2362 else if (unsignedp0 == unsignedp1 && real1 == real2
2363 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2364 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2366 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2367 type = c_common_signed_or_unsigned_type (unsignedp0
2368 || TREE_UNSIGNED (*restype_ptr),
2369 type);
2370 /* Make sure shorter operand is extended the right way
2371 to match the longer operand. */
2372 primop0
2373 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2374 TREE_TYPE (primop0)),
2375 primop0);
2376 primop1
2377 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2378 TREE_TYPE (primop1)),
2379 primop1);
2381 else
2383 /* Here we must do the comparison on the nominal type
2384 using the args exactly as we received them. */
2385 type = *restype_ptr;
2386 primop0 = op0;
2387 primop1 = op1;
2389 if (!real1 && !real2 && integer_zerop (primop1)
2390 && TREE_UNSIGNED (*restype_ptr))
2392 tree value = 0;
2393 switch (code)
2395 case GE_EXPR:
2396 /* All unsigned values are >= 0, so we warn if extra warnings
2397 are requested. However, if OP0 is a constant that is
2398 >= 0, the signedness of the comparison isn't an issue,
2399 so suppress the warning. */
2400 if (extra_warnings && !in_system_header
2401 && ! (TREE_CODE (primop0) == INTEGER_CST
2402 && ! TREE_OVERFLOW (convert (c_common_signed_type (type),
2403 primop0))))
2404 warning ("comparison of unsigned expression >= 0 is always true");
2405 value = truthvalue_true_node;
2406 break;
2408 case LT_EXPR:
2409 if (extra_warnings && !in_system_header
2410 && ! (TREE_CODE (primop0) == INTEGER_CST
2411 && ! TREE_OVERFLOW (convert (c_common_signed_type (type),
2412 primop0))))
2413 warning ("comparison of unsigned expression < 0 is always false");
2414 value = truthvalue_false_node;
2415 break;
2417 default:
2418 break;
2421 if (value != 0)
2423 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2424 if (TREE_SIDE_EFFECTS (primop0))
2425 return build (COMPOUND_EXPR, TREE_TYPE (value),
2426 primop0, value);
2427 return value;
2432 *op0_ptr = convert (type, primop0);
2433 *op1_ptr = convert (type, primop1);
2435 *restype_ptr = truthvalue_type_node;
2437 return 0;
2440 /* Return a tree for the sum or difference (RESULTCODE says which)
2441 of pointer PTROP and integer INTOP. */
2443 tree
2444 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2446 tree size_exp;
2448 tree result;
2449 tree folded;
2451 /* The result is a pointer of the same type that is being added. */
2453 tree result_type = TREE_TYPE (ptrop);
2455 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2457 if (pedantic || warn_pointer_arith)
2458 pedwarn ("pointer of type `void *' used in arithmetic");
2459 size_exp = integer_one_node;
2461 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2463 if (pedantic || warn_pointer_arith)
2464 pedwarn ("pointer to a function used in arithmetic");
2465 size_exp = integer_one_node;
2467 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2469 if (pedantic || warn_pointer_arith)
2470 pedwarn ("pointer to member function used in arithmetic");
2471 size_exp = integer_one_node;
2473 else if (TREE_CODE (TREE_TYPE (result_type)) == OFFSET_TYPE)
2475 if (pedantic || warn_pointer_arith)
2476 pedwarn ("pointer to a member used in arithmetic");
2477 size_exp = integer_one_node;
2479 else
2480 size_exp = size_in_bytes (TREE_TYPE (result_type));
2482 /* If what we are about to multiply by the size of the elements
2483 contains a constant term, apply distributive law
2484 and multiply that constant term separately.
2485 This helps produce common subexpressions. */
2487 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2488 && ! TREE_CONSTANT (intop)
2489 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2490 && TREE_CONSTANT (size_exp)
2491 /* If the constant comes from pointer subtraction,
2492 skip this optimization--it would cause an error. */
2493 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2494 /* If the constant is unsigned, and smaller than the pointer size,
2495 then we must skip this optimization. This is because it could cause
2496 an overflow error if the constant is negative but INTOP is not. */
2497 && (! TREE_UNSIGNED (TREE_TYPE (intop))
2498 || (TYPE_PRECISION (TREE_TYPE (intop))
2499 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2501 enum tree_code subcode = resultcode;
2502 tree int_type = TREE_TYPE (intop);
2503 if (TREE_CODE (intop) == MINUS_EXPR)
2504 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2505 /* Convert both subexpression types to the type of intop,
2506 because weird cases involving pointer arithmetic
2507 can result in a sum or difference with different type args. */
2508 ptrop = build_binary_op (subcode, ptrop,
2509 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2510 intop = convert (int_type, TREE_OPERAND (intop, 0));
2513 /* Convert the integer argument to a type the same size as sizetype
2514 so the multiply won't overflow spuriously. */
2516 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2517 || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
2518 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2519 TREE_UNSIGNED (sizetype)), intop);
2521 /* Replace the integer argument with a suitable product by the object size.
2522 Do this multiplication as signed, then convert to the appropriate
2523 pointer type (actually unsigned integral). */
2525 intop = convert (result_type,
2526 build_binary_op (MULT_EXPR, intop,
2527 convert (TREE_TYPE (intop), size_exp), 1));
2529 /* Create the sum or difference. */
2531 result = build (resultcode, result_type, ptrop, intop);
2533 folded = fold (result);
2534 if (folded == result)
2535 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2536 return folded;
2539 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2540 or validate its data type for an `if' or `while' statement or ?..: exp.
2542 This preparation consists of taking the ordinary
2543 representation of an expression expr and producing a valid tree
2544 boolean expression describing whether expr is nonzero. We could
2545 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2546 but we optimize comparisons, &&, ||, and !.
2548 The resulting type should always be `truthvalue_type_node'. */
2550 tree
2551 c_common_truthvalue_conversion (tree expr)
2553 if (TREE_CODE (expr) == ERROR_MARK)
2554 return expr;
2556 #if 0 /* This appears to be wrong for C++. */
2557 /* These really should return error_mark_node after 2.4 is stable.
2558 But not all callers handle ERROR_MARK properly. */
2559 switch (TREE_CODE (TREE_TYPE (expr)))
2561 case RECORD_TYPE:
2562 error ("struct type value used where scalar is required");
2563 return truthvalue_false_node;
2565 case UNION_TYPE:
2566 error ("union type value used where scalar is required");
2567 return truthvalue_false_node;
2569 case ARRAY_TYPE:
2570 error ("array type value used where scalar is required");
2571 return truthvalue_false_node;
2573 default:
2574 break;
2576 #endif /* 0 */
2578 switch (TREE_CODE (expr))
2580 case EQ_EXPR:
2581 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2582 case TRUTH_ANDIF_EXPR:
2583 case TRUTH_ORIF_EXPR:
2584 case TRUTH_AND_EXPR:
2585 case TRUTH_OR_EXPR:
2586 case TRUTH_XOR_EXPR:
2587 case TRUTH_NOT_EXPR:
2588 TREE_TYPE (expr) = truthvalue_type_node;
2589 return expr;
2591 case ERROR_MARK:
2592 return expr;
2594 case INTEGER_CST:
2595 return integer_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
2597 case REAL_CST:
2598 return real_zerop (expr) ? truthvalue_false_node : truthvalue_true_node;
2600 case ADDR_EXPR:
2601 /* If we are taking the address of an external decl, it might be zero
2602 if it is weak, so we cannot optimize. */
2603 if (DECL_P (TREE_OPERAND (expr, 0))
2604 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2605 break;
2607 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2608 return build (COMPOUND_EXPR, truthvalue_type_node,
2609 TREE_OPERAND (expr, 0), truthvalue_true_node);
2610 else
2611 return truthvalue_true_node;
2613 case COMPLEX_EXPR:
2614 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2615 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2616 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2617 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2620 case NEGATE_EXPR:
2621 case ABS_EXPR:
2622 case FLOAT_EXPR:
2623 case FFS_EXPR:
2624 case POPCOUNT_EXPR:
2625 /* These don't change whether an object is nonzero or zero. */
2626 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2628 case LROTATE_EXPR:
2629 case RROTATE_EXPR:
2630 /* These don't change whether an object is zero or nonzero, but
2631 we can't ignore them if their second arg has side-effects. */
2632 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2633 return build (COMPOUND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 1),
2634 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2635 else
2636 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2638 case COND_EXPR:
2639 /* Distribute the conversion into the arms of a COND_EXPR. */
2640 return fold (build (COND_EXPR, truthvalue_type_node, TREE_OPERAND (expr, 0),
2641 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2642 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2))));
2644 case CONVERT_EXPR:
2645 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2646 since that affects how `default_conversion' will behave. */
2647 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2648 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2649 break;
2650 /* Fall through.... */
2651 case NOP_EXPR:
2652 /* If this is widening the argument, we can ignore it. */
2653 if (TYPE_PRECISION (TREE_TYPE (expr))
2654 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2655 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2656 break;
2658 case MINUS_EXPR:
2659 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2660 aren't guaranteed to the be same for modes that can represent
2661 infinity, since if x and y are both +infinity, or both
2662 -infinity, then x - y is not a number.
2664 Note that this transformation is safe when x or y is NaN.
2665 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2666 be false. */
2667 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
2668 break;
2669 /* Fall through.... */
2670 case BIT_XOR_EXPR:
2671 /* This and MINUS_EXPR can be changed into a comparison of the
2672 two objects. */
2673 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2674 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2675 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2676 TREE_OPERAND (expr, 1), 1);
2677 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2678 fold (build1 (NOP_EXPR,
2679 TREE_TYPE (TREE_OPERAND (expr, 0)),
2680 TREE_OPERAND (expr, 1))), 1);
2682 case BIT_AND_EXPR:
2683 if (integer_onep (TREE_OPERAND (expr, 1))
2684 && TREE_TYPE (expr) != truthvalue_type_node)
2685 /* Using convert here would cause infinite recursion. */
2686 return build1 (NOP_EXPR, truthvalue_type_node, expr);
2687 break;
2689 case MODIFY_EXPR:
2690 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2691 warning ("suggest parentheses around assignment used as truth value");
2692 break;
2694 default:
2695 break;
2698 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2700 tree t = save_expr (expr);
2701 return (build_binary_op
2702 ((TREE_SIDE_EFFECTS (expr)
2703 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2704 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2705 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2706 0));
2709 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2712 static tree builtin_function_2 (const char *, const char *, tree, tree,
2713 int, enum built_in_class, int, int,
2714 tree);
2716 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2717 down to the element type of an array. */
2719 tree
2720 c_build_qualified_type (tree type, int type_quals)
2722 /* A restrict-qualified pointer type must be a pointer to object or
2723 incomplete type. Note that the use of POINTER_TYPE_P also allows
2724 REFERENCE_TYPEs, which is appropriate for C++. Unfortunately,
2725 the C++ front-end also use POINTER_TYPE for pointer-to-member
2726 values, so even though it should be illegal to use `restrict'
2727 with such an entity we don't flag that here. Thus, special case
2728 code for that case is required in the C++ front-end. */
2729 if ((type_quals & TYPE_QUAL_RESTRICT)
2730 && (!POINTER_TYPE_P (type)
2731 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2733 error ("invalid use of `restrict'");
2734 type_quals &= ~TYPE_QUAL_RESTRICT;
2737 if (TREE_CODE (type) == ARRAY_TYPE)
2738 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
2739 type_quals),
2740 TYPE_DOMAIN (type));
2741 return build_qualified_type (type, type_quals);
2744 /* Apply the TYPE_QUALS to the new DECL. */
2746 void
2747 c_apply_type_quals_to_decl (int type_quals, tree decl)
2749 if ((type_quals & TYPE_QUAL_CONST)
2750 || (TREE_TYPE (decl)
2751 && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
2752 TREE_READONLY (decl) = 1;
2753 if (type_quals & TYPE_QUAL_VOLATILE)
2755 TREE_SIDE_EFFECTS (decl) = 1;
2756 TREE_THIS_VOLATILE (decl) = 1;
2758 if (type_quals & TYPE_QUAL_RESTRICT)
2760 if (!TREE_TYPE (decl)
2761 || !POINTER_TYPE_P (TREE_TYPE (decl))
2762 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
2763 error ("invalid use of `restrict'");
2764 else if (flag_strict_aliasing)
2765 /* Indicate we need to make a unique alias set for this pointer.
2766 We can't do it here because it might be pointing to an
2767 incomplete type. */
2768 DECL_POINTER_ALIAS_SET (decl) = -2;
2772 /* Return the typed-based alias set for T, which may be an expression
2773 or a type. Return -1 if we don't do anything special. */
2775 HOST_WIDE_INT
2776 c_common_get_alias_set (tree t)
2778 tree u;
2780 /* Permit type-punning when accessing a union, provided the access
2781 is directly through the union. For example, this code does not
2782 permit taking the address of a union member and then storing
2783 through it. Even the type-punning allowed here is a GCC
2784 extension, albeit a common and useful one; the C standard says
2785 that such accesses have implementation-defined behavior. */
2786 for (u = t;
2787 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2788 u = TREE_OPERAND (u, 0))
2789 if (TREE_CODE (u) == COMPONENT_REF
2790 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2791 return 0;
2793 /* That's all the expressions we handle specially. */
2794 if (! TYPE_P (t))
2795 return -1;
2797 /* The C standard guarantees that any object may be accessed via an
2798 lvalue that has character type. */
2799 if (t == char_type_node
2800 || t == signed_char_type_node
2801 || t == unsigned_char_type_node)
2802 return 0;
2804 /* If it has the may_alias attribute, it can alias anything. */
2805 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2806 return 0;
2808 /* The C standard specifically allows aliasing between signed and
2809 unsigned variants of the same type. We treat the signed
2810 variant as canonical. */
2811 if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
2813 tree t1 = c_common_signed_type (t);
2815 /* t1 == t can happen for boolean nodes which are always unsigned. */
2816 if (t1 != t)
2817 return get_alias_set (t1);
2819 else if (POINTER_TYPE_P (t))
2821 tree t1;
2823 /* Unfortunately, there is no canonical form of a pointer type.
2824 In particular, if we have `typedef int I', then `int *', and
2825 `I *' are different types. So, we have to pick a canonical
2826 representative. We do this below.
2828 Technically, this approach is actually more conservative that
2829 it needs to be. In particular, `const int *' and `int *'
2830 should be in different alias sets, according to the C and C++
2831 standard, since their types are not the same, and so,
2832 technically, an `int **' and `const int **' cannot point at
2833 the same thing.
2835 But, the standard is wrong. In particular, this code is
2836 legal C++:
2838 int *ip;
2839 int **ipp = &ip;
2840 const int* const* cipp = &ipp;
2842 And, it doesn't make sense for that to be legal unless you
2843 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2844 the pointed-to types. This issue has been reported to the
2845 C++ committee. */
2846 t1 = build_type_no_quals (t);
2847 if (t1 != t)
2848 return get_alias_set (t1);
2851 return -1;
2854 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
2855 second parameter indicates which OPERATOR is being applied. The COMPLAIN
2856 flag controls whether we should diagnose possibly ill-formed
2857 constructs or not. */
2858 tree
2859 c_sizeof_or_alignof_type (tree type, enum tree_code op, int complain)
2861 const char *op_name;
2862 tree value = NULL;
2863 enum tree_code type_code = TREE_CODE (type);
2865 my_friendly_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR, 20020720);
2866 op_name = op == SIZEOF_EXPR ? "sizeof" : "__alignof__";
2868 if (type_code == FUNCTION_TYPE)
2870 if (op == SIZEOF_EXPR)
2872 if (complain && (pedantic || warn_pointer_arith))
2873 pedwarn ("invalid application of `sizeof' to a function type");
2874 value = size_one_node;
2876 else
2877 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2879 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
2881 if (type_code == VOID_TYPE
2882 && complain && (pedantic || warn_pointer_arith))
2883 pedwarn ("invalid application of `%s' to a void type", op_name);
2884 value = size_one_node;
2886 else if (!COMPLETE_TYPE_P (type))
2888 if (complain)
2889 error ("invalid application of `%s' to an incomplete type", op_name);
2890 value = size_zero_node;
2892 else
2894 if (op == SIZEOF_EXPR)
2895 /* Convert in case a char is more than one unit. */
2896 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
2897 size_int (TYPE_PRECISION (char_type_node)
2898 / BITS_PER_UNIT));
2899 else
2900 value = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
2903 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
2904 TYPE_IS_SIZETYPE means that certain things (like overflow) will
2905 never happen. However, this node should really have type
2906 `size_t', which is just a typedef for an ordinary integer type. */
2907 value = fold (build1 (NOP_EXPR, size_type_node, value));
2908 my_friendly_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)), 20001021);
2910 return value;
2913 /* Implement the __alignof keyword: Return the minimum required
2914 alignment of EXPR, measured in bytes. For VAR_DECL's and
2915 FIELD_DECL's return DECL_ALIGN (which can be set from an
2916 "aligned" __attribute__ specification). */
2918 tree
2919 c_alignof_expr (tree expr)
2921 tree t;
2923 if (TREE_CODE (expr) == VAR_DECL)
2924 t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
2926 else if (TREE_CODE (expr) == COMPONENT_REF
2927 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2929 error ("`__alignof' applied to a bit-field");
2930 t = size_one_node;
2932 else if (TREE_CODE (expr) == COMPONENT_REF
2933 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2934 t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
2936 else if (TREE_CODE (expr) == INDIRECT_REF)
2938 tree t = TREE_OPERAND (expr, 0);
2939 tree best = t;
2940 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2942 while (TREE_CODE (t) == NOP_EXPR
2943 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2945 int thisalign;
2947 t = TREE_OPERAND (t, 0);
2948 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2949 if (thisalign > bestalign)
2950 best = t, bestalign = thisalign;
2952 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2954 else
2955 return c_alignof (TREE_TYPE (expr));
2957 return fold (build1 (NOP_EXPR, size_type_node, t));
2960 /* Handle C and C++ default attributes. */
2962 enum built_in_attribute
2964 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
2965 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
2966 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
2967 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
2968 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No entry needed in enum. */
2969 #include "builtin-attrs.def"
2970 #undef DEF_ATTR_NULL_TREE
2971 #undef DEF_ATTR_INT
2972 #undef DEF_ATTR_IDENT
2973 #undef DEF_ATTR_TREE_LIST
2974 #undef DEF_FN_ATTR
2975 ATTR_LAST
2978 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
2980 static bool c_attrs_initialized = false;
2982 static void c_init_attributes (void);
2984 /* Build tree nodes and builtin functions common to both C and C++ language
2985 frontends. */
2987 void
2988 c_common_nodes_and_builtins (void)
2990 enum builtin_type
2992 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2993 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2994 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2995 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2996 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2997 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2998 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2999 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3000 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3001 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3002 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3003 #include "builtin-types.def"
3004 #undef DEF_PRIMITIVE_TYPE
3005 #undef DEF_FUNCTION_TYPE_0
3006 #undef DEF_FUNCTION_TYPE_1
3007 #undef DEF_FUNCTION_TYPE_2
3008 #undef DEF_FUNCTION_TYPE_3
3009 #undef DEF_FUNCTION_TYPE_4
3010 #undef DEF_FUNCTION_TYPE_VAR_0
3011 #undef DEF_FUNCTION_TYPE_VAR_1
3012 #undef DEF_FUNCTION_TYPE_VAR_2
3013 #undef DEF_FUNCTION_TYPE_VAR_3
3014 #undef DEF_POINTER_TYPE
3015 BT_LAST
3018 typedef enum builtin_type builtin_type;
3020 tree builtin_types[(int) BT_LAST];
3021 int wchar_type_size;
3022 tree array_domain_type;
3023 tree va_list_ref_type_node;
3024 tree va_list_arg_type_node;
3026 /* Define `int' and `char' first so that dbx will output them first. */
3027 record_builtin_type (RID_INT, NULL, integer_type_node);
3028 record_builtin_type (RID_CHAR, "char", char_type_node);
3030 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3031 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3032 but not C. Are the conditionals here needed? */
3033 if (c_dialect_cxx ())
3034 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3035 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3036 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3037 record_builtin_type (RID_MAX, "long unsigned int",
3038 long_unsigned_type_node);
3039 if (c_dialect_cxx ())
3040 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3041 record_builtin_type (RID_MAX, "long long int",
3042 long_long_integer_type_node);
3043 record_builtin_type (RID_MAX, "long long unsigned int",
3044 long_long_unsigned_type_node);
3045 if (c_dialect_cxx ())
3046 record_builtin_type (RID_MAX, "long long unsigned",
3047 long_long_unsigned_type_node);
3048 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3049 record_builtin_type (RID_MAX, "short unsigned int",
3050 short_unsigned_type_node);
3051 if (c_dialect_cxx ())
3052 record_builtin_type (RID_MAX, "unsigned short",
3053 short_unsigned_type_node);
3055 /* Define both `signed char' and `unsigned char'. */
3056 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3057 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3059 /* These are types that c_common_type_for_size and
3060 c_common_type_for_mode use. */
3061 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3062 intQI_type_node));
3063 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3064 intHI_type_node));
3065 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3066 intSI_type_node));
3067 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3068 intDI_type_node));
3069 #if HOST_BITS_PER_WIDE_INT >= 64
3070 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3071 get_identifier ("__int128_t"),
3072 intTI_type_node));
3073 #endif
3074 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3075 unsigned_intQI_type_node));
3076 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3077 unsigned_intHI_type_node));
3078 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3079 unsigned_intSI_type_node));
3080 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3081 unsigned_intDI_type_node));
3082 #if HOST_BITS_PER_WIDE_INT >= 64
3083 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3084 get_identifier ("__uint128_t"),
3085 unsigned_intTI_type_node));
3086 #endif
3088 /* Create the widest literal types. */
3089 widest_integer_literal_type_node
3090 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3091 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3092 widest_integer_literal_type_node));
3094 widest_unsigned_literal_type_node
3095 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3096 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3097 widest_unsigned_literal_type_node));
3099 /* `unsigned long' is the standard type for sizeof.
3100 Note that stddef.h uses `unsigned long',
3101 and this must agree, even if long and int are the same size. */
3102 size_type_node =
3103 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3104 signed_size_type_node = c_common_signed_type (size_type_node);
3105 set_sizetype (size_type_node);
3107 build_common_tree_nodes_2 (flag_short_double);
3109 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3110 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3111 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3113 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3114 get_identifier ("complex int"),
3115 complex_integer_type_node));
3116 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3117 get_identifier ("complex float"),
3118 complex_float_type_node));
3119 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3120 get_identifier ("complex double"),
3121 complex_double_type_node));
3122 (*lang_hooks.decls.pushdecl)
3123 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3124 complex_long_double_type_node));
3126 /* Types which are common to the fortran compiler and libf2c. When
3127 changing these, you also need to be concerned with f/com.h. */
3129 if (TYPE_PRECISION (float_type_node)
3130 == TYPE_PRECISION (long_integer_type_node))
3132 g77_integer_type_node = long_integer_type_node;
3133 g77_uinteger_type_node = long_unsigned_type_node;
3135 else if (TYPE_PRECISION (float_type_node)
3136 == TYPE_PRECISION (integer_type_node))
3138 g77_integer_type_node = integer_type_node;
3139 g77_uinteger_type_node = unsigned_type_node;
3141 else
3142 g77_integer_type_node = g77_uinteger_type_node = NULL_TREE;
3144 if (g77_integer_type_node != NULL_TREE)
3146 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3147 get_identifier ("__g77_integer"),
3148 g77_integer_type_node));
3149 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3150 get_identifier ("__g77_uinteger"),
3151 g77_uinteger_type_node));
3154 if (TYPE_PRECISION (float_type_node) * 2
3155 == TYPE_PRECISION (long_integer_type_node))
3157 g77_longint_type_node = long_integer_type_node;
3158 g77_ulongint_type_node = long_unsigned_type_node;
3160 else if (TYPE_PRECISION (float_type_node) * 2
3161 == TYPE_PRECISION (long_long_integer_type_node))
3163 g77_longint_type_node = long_long_integer_type_node;
3164 g77_ulongint_type_node = long_long_unsigned_type_node;
3166 else
3167 g77_longint_type_node = g77_ulongint_type_node = NULL_TREE;
3169 if (g77_longint_type_node != NULL_TREE)
3171 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3172 get_identifier ("__g77_longint"),
3173 g77_longint_type_node));
3174 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3175 get_identifier ("__g77_ulongint"),
3176 g77_ulongint_type_node));
3179 record_builtin_type (RID_VOID, NULL, void_type_node);
3181 void_zero_node = build_int_2 (0, 0);
3182 TREE_TYPE (void_zero_node) = void_type_node;
3184 void_list_node = build_void_list_node ();
3186 /* Make a type to be the domain of a few array types
3187 whose domains don't really matter.
3188 200 is small enough that it always fits in size_t
3189 and large enough that it can hold most function names for the
3190 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3191 array_domain_type = build_index_type (size_int (200));
3193 /* Make a type for arrays of characters.
3194 With luck nothing will ever really depend on the length of this
3195 array type. */
3196 char_array_type_node
3197 = build_array_type (char_type_node, array_domain_type);
3199 /* Likewise for arrays of ints. */
3200 int_array_type_node
3201 = build_array_type (integer_type_node, array_domain_type);
3203 string_type_node = build_pointer_type (char_type_node);
3204 const_string_type_node
3205 = build_pointer_type (build_qualified_type
3206 (char_type_node, TYPE_QUAL_CONST));
3208 /* This is special for C++ so functions can be overloaded. */
3209 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3210 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3211 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3212 if (c_dialect_cxx ())
3214 if (TREE_UNSIGNED (wchar_type_node))
3215 wchar_type_node = make_unsigned_type (wchar_type_size);
3216 else
3217 wchar_type_node = make_signed_type (wchar_type_size);
3218 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3220 else
3222 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3223 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3226 /* This is for wide string constants. */
3227 wchar_array_type_node
3228 = build_array_type (wchar_type_node, array_domain_type);
3230 wint_type_node =
3231 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3233 intmax_type_node =
3234 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3235 uintmax_type_node =
3236 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3238 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3239 ptrdiff_type_node
3240 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3241 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3243 (*lang_hooks.decls.pushdecl)
3244 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3245 va_list_type_node));
3247 (*lang_hooks.decls.pushdecl)
3248 (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
3249 ptrdiff_type_node));
3251 (*lang_hooks.decls.pushdecl)
3252 (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
3253 sizetype));
3255 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3257 va_list_arg_type_node = va_list_ref_type_node =
3258 build_pointer_type (TREE_TYPE (va_list_type_node));
3260 else
3262 va_list_arg_type_node = va_list_type_node;
3263 va_list_ref_type_node = build_reference_type (va_list_type_node);
3266 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3267 builtin_types[(int) ENUM] = VALUE;
3268 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3269 builtin_types[(int) ENUM] \
3270 = build_function_type (builtin_types[(int) RETURN], \
3271 void_list_node);
3272 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3273 builtin_types[(int) ENUM] \
3274 = build_function_type (builtin_types[(int) RETURN], \
3275 tree_cons (NULL_TREE, \
3276 builtin_types[(int) ARG1], \
3277 void_list_node));
3278 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3279 builtin_types[(int) ENUM] \
3280 = build_function_type \
3281 (builtin_types[(int) RETURN], \
3282 tree_cons (NULL_TREE, \
3283 builtin_types[(int) ARG1], \
3284 tree_cons (NULL_TREE, \
3285 builtin_types[(int) ARG2], \
3286 void_list_node)));
3287 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3288 builtin_types[(int) ENUM] \
3289 = build_function_type \
3290 (builtin_types[(int) RETURN], \
3291 tree_cons (NULL_TREE, \
3292 builtin_types[(int) ARG1], \
3293 tree_cons (NULL_TREE, \
3294 builtin_types[(int) ARG2], \
3295 tree_cons (NULL_TREE, \
3296 builtin_types[(int) ARG3], \
3297 void_list_node))));
3298 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3299 builtin_types[(int) ENUM] \
3300 = build_function_type \
3301 (builtin_types[(int) RETURN], \
3302 tree_cons (NULL_TREE, \
3303 builtin_types[(int) ARG1], \
3304 tree_cons (NULL_TREE, \
3305 builtin_types[(int) ARG2], \
3306 tree_cons \
3307 (NULL_TREE, \
3308 builtin_types[(int) ARG3], \
3309 tree_cons (NULL_TREE, \
3310 builtin_types[(int) ARG4], \
3311 void_list_node)))));
3312 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3313 builtin_types[(int) ENUM] \
3314 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3315 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3316 builtin_types[(int) ENUM] \
3317 = build_function_type (builtin_types[(int) RETURN], \
3318 tree_cons (NULL_TREE, \
3319 builtin_types[(int) ARG1], \
3320 NULL_TREE));
3322 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3323 builtin_types[(int) ENUM] \
3324 = build_function_type \
3325 (builtin_types[(int) RETURN], \
3326 tree_cons (NULL_TREE, \
3327 builtin_types[(int) ARG1], \
3328 tree_cons (NULL_TREE, \
3329 builtin_types[(int) ARG2], \
3330 NULL_TREE)));
3332 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3333 builtin_types[(int) ENUM] \
3334 = build_function_type \
3335 (builtin_types[(int) RETURN], \
3336 tree_cons (NULL_TREE, \
3337 builtin_types[(int) ARG1], \
3338 tree_cons (NULL_TREE, \
3339 builtin_types[(int) ARG2], \
3340 tree_cons (NULL_TREE, \
3341 builtin_types[(int) ARG3], \
3342 NULL_TREE))));
3344 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3345 builtin_types[(int) ENUM] \
3346 = build_pointer_type (builtin_types[(int) TYPE]);
3347 #include "builtin-types.def"
3348 #undef DEF_PRIMITIVE_TYPE
3349 #undef DEF_FUNCTION_TYPE_1
3350 #undef DEF_FUNCTION_TYPE_2
3351 #undef DEF_FUNCTION_TYPE_3
3352 #undef DEF_FUNCTION_TYPE_4
3353 #undef DEF_FUNCTION_TYPE_VAR_0
3354 #undef DEF_FUNCTION_TYPE_VAR_1
3355 #undef DEF_FUNCTION_TYPE_VAR_2
3356 #undef DEF_FUNCTION_TYPE_VAR_3
3357 #undef DEF_POINTER_TYPE
3359 if (!c_attrs_initialized)
3360 c_init_attributes ();
3362 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, \
3363 BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT) \
3364 if (NAME) \
3366 tree decl; \
3368 if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \
3369 abort (); \
3371 if (!BOTH_P) \
3372 decl = builtin_function (NAME, builtin_types[TYPE], ENUM, \
3373 CLASS, \
3374 (FALLBACK_P \
3375 ? (NAME + strlen ("__builtin_")) \
3376 : NULL), \
3377 built_in_attributes[(int) ATTRS]); \
3378 else \
3379 decl = builtin_function_2 (NAME, \
3380 NAME + strlen ("__builtin_"), \
3381 builtin_types[TYPE], \
3382 builtin_types[LIBTYPE], \
3383 ENUM, \
3384 CLASS, \
3385 FALLBACK_P, \
3386 NONANSI_P, \
3387 built_in_attributes[(int) ATTRS]); \
3389 built_in_decls[(int) ENUM] = decl; \
3390 if (IMPLICIT) \
3391 implicit_built_in_decls[(int) ENUM] = decl; \
3393 #include "builtins.def"
3394 #undef DEF_BUILTIN
3396 (*targetm.init_builtins) ();
3398 main_identifier_node = get_identifier ("main");
3401 tree
3402 build_va_arg (tree expr, tree type)
3404 return build1 (VA_ARG_EXPR, type, expr);
3408 /* Linked list of disabled built-in functions. */
3410 typedef struct disabled_builtin
3412 const char *name;
3413 struct disabled_builtin *next;
3414 } disabled_builtin;
3415 static disabled_builtin *disabled_builtins = NULL;
3417 static bool builtin_function_disabled_p (const char *);
3419 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3420 begins with "__builtin_", give an error. */
3422 void
3423 disable_builtin_function (const char *name)
3425 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3426 error ("cannot disable built-in function `%s'", name);
3427 else
3429 disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
3430 new->name = name;
3431 new->next = disabled_builtins;
3432 disabled_builtins = new;
3437 /* Return true if the built-in function NAME has been disabled, false
3438 otherwise. */
3440 static bool
3441 builtin_function_disabled_p (const char *name)
3443 disabled_builtin *p;
3444 for (p = disabled_builtins; p != NULL; p = p->next)
3446 if (strcmp (name, p->name) == 0)
3447 return true;
3449 return false;
3453 /* Possibly define a builtin function with one or two names. BUILTIN_NAME
3454 is an __builtin_-prefixed name; NAME is the ordinary name; one or both
3455 of these may be NULL (though both being NULL is useless).
3456 BUILTIN_TYPE is the type of the __builtin_-prefixed function;
3457 TYPE is the type of the function with the ordinary name. These
3458 may differ if the ordinary name is declared with a looser type to avoid
3459 conflicts with headers. FUNCTION_CODE and CLASS are as for
3460 builtin_function. If LIBRARY_NAME_P is nonzero, NAME is passed as
3461 the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
3462 If NONANSI_P is nonzero, the name NAME is treated as a non-ANSI name;
3463 ATTRS is the tree list representing the builtin's function attributes.
3464 Returns the declaration of BUILTIN_NAME, if any, otherwise
3465 the declaration of NAME. Does not declare NAME if flag_no_builtin,
3466 or if NONANSI_P and flag_no_nonansi_builtin. */
3468 static tree
3469 builtin_function_2 (const char *builtin_name, const char *name,
3470 tree builtin_type, tree type, int function_code,
3471 enum built_in_class class, int library_name_p,
3472 int nonansi_p, tree attrs)
3474 tree bdecl = NULL_TREE;
3475 tree decl = NULL_TREE;
3477 if (builtin_name != 0)
3478 bdecl = builtin_function (builtin_name, builtin_type, function_code,
3479 class, library_name_p ? name : NULL, attrs);
3481 if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
3482 && !(nonansi_p && flag_no_nonansi_builtin))
3483 decl = builtin_function (name, type, function_code, class, NULL, attrs);
3485 return (bdecl != 0 ? bdecl : decl);
3488 /* Nonzero if the type T promotes to int. This is (nearly) the
3489 integral promotions defined in ISO C99 6.3.1.1/2. */
3491 bool
3492 c_promoting_integer_type_p (tree t)
3494 switch (TREE_CODE (t))
3496 case INTEGER_TYPE:
3497 return (TYPE_MAIN_VARIANT (t) == char_type_node
3498 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3499 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3500 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3501 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3502 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3504 case ENUMERAL_TYPE:
3505 /* ??? Technically all enumerations not larger than an int
3506 promote to an int. But this is used along code paths
3507 that only want to notice a size change. */
3508 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3510 case BOOLEAN_TYPE:
3511 return 1;
3513 default:
3514 return 0;
3518 /* Return 1 if PARMS specifies a fixed number of parameters
3519 and none of their types is affected by default promotions. */
3522 self_promoting_args_p (tree parms)
3524 tree t;
3525 for (t = parms; t; t = TREE_CHAIN (t))
3527 tree type = TREE_VALUE (t);
3529 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3530 return 0;
3532 if (type == 0)
3533 return 0;
3535 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3536 return 0;
3538 if (c_promoting_integer_type_p (type))
3539 return 0;
3541 return 1;
3544 /* Recursively examines the array elements of TYPE, until a non-array
3545 element type is found. */
3547 tree
3548 strip_array_types (tree type)
3550 while (TREE_CODE (type) == ARRAY_TYPE)
3551 type = TREE_TYPE (type);
3553 return type;
3556 static tree expand_unordered_cmp (tree, tree, enum tree_code, enum tree_code);
3558 /* Expand a call to an unordered comparison function such as
3559 __builtin_isgreater(). FUNCTION is the function's declaration and
3560 PARAMS a list of the values passed. For __builtin_isunordered(),
3561 UNORDERED_CODE is UNORDERED_EXPR and ORDERED_CODE is NOP_EXPR. In
3562 other cases, UNORDERED_CODE and ORDERED_CODE are comparison codes
3563 that give the opposite of the desired result. UNORDERED_CODE is
3564 used for modes that can hold NaNs and ORDERED_CODE is used for the
3565 rest. */
3567 static tree
3568 expand_unordered_cmp (tree function, tree params,
3569 enum tree_code unordered_code,
3570 enum tree_code ordered_code)
3572 tree arg0, arg1, type;
3573 enum tree_code code0, code1;
3575 /* Check that we have exactly two arguments. */
3576 if (params == 0 || TREE_CHAIN (params) == 0)
3578 error ("too few arguments to function `%s'",
3579 IDENTIFIER_POINTER (DECL_NAME (function)));
3580 return error_mark_node;
3582 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
3584 error ("too many arguments to function `%s'",
3585 IDENTIFIER_POINTER (DECL_NAME (function)));
3586 return error_mark_node;
3589 arg0 = TREE_VALUE (params);
3590 arg1 = TREE_VALUE (TREE_CHAIN (params));
3592 code0 = TREE_CODE (TREE_TYPE (arg0));
3593 code1 = TREE_CODE (TREE_TYPE (arg1));
3595 /* Make sure that the arguments have a common type of REAL. */
3596 type = 0;
3597 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3598 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3599 type = common_type (TREE_TYPE (arg0), TREE_TYPE (arg1));
3601 if (type == 0 || TREE_CODE (type) != REAL_TYPE)
3603 error ("non-floating-point argument to function `%s'",
3604 IDENTIFIER_POINTER (DECL_NAME (function)));
3605 return error_mark_node;
3608 if (unordered_code == UNORDERED_EXPR)
3610 if (MODE_HAS_NANS (TYPE_MODE (type)))
3611 return build_binary_op (unordered_code,
3612 convert (type, arg0),
3613 convert (type, arg1),
3615 else
3616 return integer_zero_node;
3619 return build_unary_op (TRUTH_NOT_EXPR,
3620 build_binary_op (MODE_HAS_NANS (TYPE_MODE (type))
3621 ? unordered_code
3622 : ordered_code,
3623 convert (type, arg0),
3624 convert (type, arg1),
3630 /* Recognize certain built-in functions so we can make tree-codes
3631 other than CALL_EXPR. We do this when it enables fold-const.c
3632 to do something useful. */
3633 /* ??? By rights this should go in builtins.c, but only C and C++
3634 implement build_{binary,unary}_op. Not exactly sure what bits
3635 of functionality are actually needed from those functions, or
3636 where the similar functionality exists in the other front ends. */
3638 tree
3639 expand_tree_builtin (tree function, tree params, tree coerced_params)
3641 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
3642 return NULL_TREE;
3644 switch (DECL_FUNCTION_CODE (function))
3646 case BUILT_IN_ABS:
3647 case BUILT_IN_LABS:
3648 case BUILT_IN_LLABS:
3649 case BUILT_IN_IMAXABS:
3650 case BUILT_IN_FABS:
3651 case BUILT_IN_FABSL:
3652 case BUILT_IN_FABSF:
3653 if (coerced_params == 0)
3654 return integer_zero_node;
3655 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
3657 case BUILT_IN_CONJ:
3658 case BUILT_IN_CONJF:
3659 case BUILT_IN_CONJL:
3660 if (coerced_params == 0)
3661 return integer_zero_node;
3662 return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0);
3664 case BUILT_IN_CREAL:
3665 case BUILT_IN_CREALF:
3666 case BUILT_IN_CREALL:
3667 if (coerced_params == 0)
3668 return integer_zero_node;
3669 return build_unary_op (REALPART_EXPR, TREE_VALUE (coerced_params), 0);
3671 case BUILT_IN_CIMAG:
3672 case BUILT_IN_CIMAGF:
3673 case BUILT_IN_CIMAGL:
3674 if (coerced_params == 0)
3675 return integer_zero_node;
3676 return build_unary_op (IMAGPART_EXPR, TREE_VALUE (coerced_params), 0);
3678 case BUILT_IN_ISGREATER:
3679 return expand_unordered_cmp (function, params, UNLE_EXPR, LE_EXPR);
3681 case BUILT_IN_ISGREATEREQUAL:
3682 return expand_unordered_cmp (function, params, UNLT_EXPR, LT_EXPR);
3684 case BUILT_IN_ISLESS:
3685 return expand_unordered_cmp (function, params, UNGE_EXPR, GE_EXPR);
3687 case BUILT_IN_ISLESSEQUAL:
3688 return expand_unordered_cmp (function, params, UNGT_EXPR, GT_EXPR);
3690 case BUILT_IN_ISLESSGREATER:
3691 return expand_unordered_cmp (function, params, UNEQ_EXPR, EQ_EXPR);
3693 case BUILT_IN_ISUNORDERED:
3694 return expand_unordered_cmp (function, params, UNORDERED_EXPR, NOP_EXPR);
3696 default:
3697 break;
3700 return NULL_TREE;
3703 /* Walk the statement tree, rooted at *tp. Apply FUNC to all the
3704 sub-trees of *TP in a pre-order traversal. FUNC is called with the
3705 DATA and the address of each sub-tree. If FUNC returns a non-NULL
3706 value, the traversal is aborted, and the value returned by FUNC is
3707 returned. If FUNC sets WALK_SUBTREES to zero, then the subtrees of
3708 the node being visited are not walked.
3710 We don't need a without_duplicates variant of this one because the
3711 statement tree is a tree, not a graph. */
3713 tree
3714 walk_stmt_tree (tree *tp, walk_tree_fn func, void *data)
3716 enum tree_code code;
3717 int walk_subtrees;
3718 tree result;
3719 int i, len;
3721 #define WALK_SUBTREE(NODE) \
3722 do \
3724 result = walk_stmt_tree (&(NODE), func, data); \
3725 if (result) \
3726 return result; \
3728 while (0)
3730 /* Skip empty subtrees. */
3731 if (!*tp)
3732 return NULL_TREE;
3734 /* Skip subtrees below non-statement nodes. */
3735 if (!STATEMENT_CODE_P (TREE_CODE (*tp)))
3736 return NULL_TREE;
3738 /* Call the function. */
3739 walk_subtrees = 1;
3740 result = (*func) (tp, &walk_subtrees, data);
3742 /* If we found something, return it. */
3743 if (result)
3744 return result;
3746 /* FUNC may have modified the tree, recheck that we're looking at a
3747 statement node. */
3748 code = TREE_CODE (*tp);
3749 if (!STATEMENT_CODE_P (code))
3750 return NULL_TREE;
3752 /* Visit the subtrees unless FUNC decided that there was nothing
3753 interesting below this point in the tree. */
3754 if (walk_subtrees)
3756 /* Walk over all the sub-trees of this operand. Statement nodes
3757 never contain RTL, and we needn't worry about TARGET_EXPRs. */
3758 len = TREE_CODE_LENGTH (code);
3760 /* Go through the subtrees. We need to do this in forward order so
3761 that the scope of a FOR_EXPR is handled properly. */
3762 for (i = 0; i < len; ++i)
3763 WALK_SUBTREE (TREE_OPERAND (*tp, i));
3766 /* Finally visit the chain. This can be tail-recursion optimized if
3767 we write it this way. */
3768 return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
3770 #undef WALK_SUBTREE
3773 /* Used to compare case labels. K1 and K2 are actually tree nodes
3774 representing case labels, or NULL_TREE for a `default' label.
3775 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3776 K2, and 0 if K1 and K2 are equal. */
3779 case_compare (splay_tree_key k1, splay_tree_key k2)
3781 /* Consider a NULL key (such as arises with a `default' label) to be
3782 smaller than anything else. */
3783 if (!k1)
3784 return k2 ? -1 : 0;
3785 else if (!k2)
3786 return k1 ? 1 : 0;
3788 return tree_int_cst_compare ((tree) k1, (tree) k2);
3791 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3792 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3793 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3794 case label was declared using the usual C/C++ syntax, rather than
3795 the GNU case range extension. CASES is a tree containing all the
3796 case ranges processed so far; COND is the condition for the
3797 switch-statement itself. Returns the CASE_LABEL created, or
3798 ERROR_MARK_NODE if no CASE_LABEL is created. */
3800 tree
3801 c_add_case_label (splay_tree cases, tree cond, tree low_value,
3802 tree high_value)
3804 tree type;
3805 tree label;
3806 tree case_label;
3807 splay_tree_node node;
3809 /* Create the LABEL_DECL itself. */
3810 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3811 DECL_CONTEXT (label) = current_function_decl;
3813 /* If there was an error processing the switch condition, bail now
3814 before we get more confused. */
3815 if (!cond || cond == error_mark_node)
3817 /* Add a label anyhow so that the back-end doesn't think that
3818 the beginning of the switch is unreachable. */
3819 if (!cases->root)
3820 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3821 return error_mark_node;
3824 if ((low_value && TREE_TYPE (low_value)
3825 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3826 || (high_value && TREE_TYPE (high_value)
3827 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3828 error ("pointers are not permitted as case values");
3830 /* Case ranges are a GNU extension. */
3831 if (high_value && pedantic)
3832 pedwarn ("range expressions in switch statements are non-standard");
3834 type = TREE_TYPE (cond);
3835 if (low_value)
3837 low_value = check_case_value (low_value);
3838 low_value = convert_and_check (type, low_value);
3840 if (high_value)
3842 high_value = check_case_value (high_value);
3843 high_value = convert_and_check (type, high_value);
3846 /* If an error has occurred, bail out now. */
3847 if (low_value == error_mark_node || high_value == error_mark_node)
3849 if (!cases->root)
3850 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3851 return error_mark_node;
3854 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3855 really a case range, even though it was written that way. Remove
3856 the HIGH_VALUE to simplify later processing. */
3857 if (tree_int_cst_equal (low_value, high_value))
3858 high_value = NULL_TREE;
3859 if (low_value && high_value
3860 && !tree_int_cst_lt (low_value, high_value))
3861 warning ("empty range specified");
3863 /* Look up the LOW_VALUE in the table of case labels we already
3864 have. */
3865 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3866 /* If there was not an exact match, check for overlapping ranges.
3867 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3868 that's a `default' label and the only overlap is an exact match. */
3869 if (!node && (low_value || high_value))
3871 splay_tree_node low_bound;
3872 splay_tree_node high_bound;
3874 /* Even though there wasn't an exact match, there might be an
3875 overlap between this case range and another case range.
3876 Since we've (inductively) not allowed any overlapping case
3877 ranges, we simply need to find the greatest low case label
3878 that is smaller that LOW_VALUE, and the smallest low case
3879 label that is greater than LOW_VALUE. If there is an overlap
3880 it will occur in one of these two ranges. */
3881 low_bound = splay_tree_predecessor (cases,
3882 (splay_tree_key) low_value);
3883 high_bound = splay_tree_successor (cases,
3884 (splay_tree_key) low_value);
3886 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3887 the LOW_VALUE, so there is no need to check unless the
3888 LOW_BOUND is in fact itself a case range. */
3889 if (low_bound
3890 && CASE_HIGH ((tree) low_bound->value)
3891 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3892 low_value) >= 0)
3893 node = low_bound;
3894 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3895 range is bigger than the low end of the current range, so we
3896 are only interested if the current range is a real range, and
3897 not an ordinary case label. */
3898 else if (high_bound
3899 && high_value
3900 && (tree_int_cst_compare ((tree) high_bound->key,
3901 high_value)
3902 <= 0))
3903 node = high_bound;
3905 /* If there was an overlap, issue an error. */
3906 if (node)
3908 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
3910 if (high_value)
3912 error ("duplicate (or overlapping) case value");
3913 error ("%Hthis is the first entry overlapping that value",
3914 &DECL_SOURCE_LOCATION (duplicate));
3916 else if (low_value)
3918 error ("duplicate case value") ;
3919 error ("%Hpreviously used here", &DECL_SOURCE_LOCATION (duplicate));
3921 else
3923 error ("multiple default labels in one switch");
3924 error ("%Hthis is the first default label",
3925 &DECL_SOURCE_LOCATION (duplicate));
3927 if (!cases->root)
3928 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3931 /* Add a CASE_LABEL to the statement-tree. */
3932 case_label = add_stmt (build_case_label (low_value, high_value, label));
3933 /* Register this case label in the splay tree. */
3934 splay_tree_insert (cases,
3935 (splay_tree_key) low_value,
3936 (splay_tree_value) case_label);
3938 return case_label;
3941 /* Finish an expression taking the address of LABEL (an
3942 IDENTIFIER_NODE). Returns an expression for the address. */
3944 tree
3945 finish_label_address_expr (tree label)
3947 tree result;
3949 if (pedantic)
3950 pedwarn ("taking the address of a label is non-standard");
3952 if (label == error_mark_node)
3953 return error_mark_node;
3955 label = lookup_label (label);
3956 if (label == NULL_TREE)
3957 result = null_pointer_node;
3958 else
3960 TREE_USED (label) = 1;
3961 result = build1 (ADDR_EXPR, ptr_type_node, label);
3962 TREE_CONSTANT (result) = 1;
3963 /* The current function in not necessarily uninlinable.
3964 Computed gotos are incompatible with inlining, but the value
3965 here could be used only in a diagnostic, for example. */
3968 return result;
3971 /* Hook used by expand_expr to expand language-specific tree codes. */
3974 c_expand_expr (tree exp, rtx target, enum machine_mode tmode, int modifier)
3975 /* Actually enum_modifier. */
3977 switch (TREE_CODE (exp))
3979 case STMT_EXPR:
3981 tree rtl_expr;
3982 rtx result;
3983 bool preserve_result = false;
3984 bool return_target = false;
3986 /* Since expand_expr_stmt calls free_temp_slots after every
3987 expression statement, we must call push_temp_slots here.
3988 Otherwise, any temporaries in use now would be considered
3989 out-of-scope after the first EXPR_STMT from within the
3990 STMT_EXPR. */
3991 push_temp_slots ();
3992 rtl_expr = expand_start_stmt_expr (!STMT_EXPR_NO_SCOPE (exp));
3994 /* If we want the result of this expression, find the last
3995 EXPR_STMT in the COMPOUND_STMT and mark it as addressable. */
3996 if (target != const0_rtx
3997 && TREE_CODE (STMT_EXPR_STMT (exp)) == COMPOUND_STMT
3998 && TREE_CODE (COMPOUND_BODY (STMT_EXPR_STMT (exp))) == SCOPE_STMT)
4000 tree expr = COMPOUND_BODY (STMT_EXPR_STMT (exp));
4001 tree last = TREE_CHAIN (expr);
4003 while (TREE_CHAIN (last))
4005 expr = last;
4006 last = TREE_CHAIN (last);
4009 if (TREE_CODE (last) == SCOPE_STMT
4010 && TREE_CODE (expr) == EXPR_STMT)
4012 if (target && TREE_CODE (EXPR_STMT_EXPR (expr)) == VAR_DECL
4013 && DECL_RTL_IF_SET (EXPR_STMT_EXPR (expr)) == target)
4014 /* If the last expression is a variable whose RTL is the
4015 same as our target, just return the target; if it
4016 isn't valid expanding the decl would produce different
4017 RTL, and store_expr would try to do a copy. */
4018 return_target = true;
4019 else
4021 /* Otherwise, note that we want the value from the last
4022 expression. */
4023 TREE_ADDRESSABLE (expr) = 1;
4024 preserve_result = true;
4029 expand_stmt (STMT_EXPR_STMT (exp));
4030 expand_end_stmt_expr (rtl_expr);
4032 result = expand_expr (rtl_expr, target, tmode, modifier);
4033 if (return_target)
4034 result = target;
4035 else if (preserve_result && GET_CODE (result) == MEM)
4037 if (GET_MODE (result) != BLKmode)
4038 result = copy_to_reg (result);
4039 else
4040 preserve_temp_slots (result);
4043 /* If the statment-expression does not have a scope, then the
4044 new temporaries we created within it must live beyond the
4045 statement-expression. */
4046 if (STMT_EXPR_NO_SCOPE (exp))
4047 preserve_temp_slots (NULL_RTX);
4049 pop_temp_slots ();
4050 return result;
4052 break;
4054 case COMPOUND_LITERAL_EXPR:
4056 /* Initialize the anonymous variable declared in the compound
4057 literal, then return the variable. */
4058 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4059 emit_local_var (decl);
4060 return expand_expr (decl, target, tmode, modifier);
4063 default:
4064 abort ();
4067 abort ();
4068 return NULL;
4071 /* Hook used by safe_from_p to handle language-specific tree codes. */
4074 c_safe_from_p (rtx target, tree exp)
4076 /* We can see statements here when processing the body of a
4077 statement-expression. For a declaration statement declaring a
4078 variable, look at the variable's initializer. */
4079 if (TREE_CODE (exp) == DECL_STMT)
4081 tree decl = DECL_STMT_DECL (exp);
4083 if (TREE_CODE (decl) == VAR_DECL
4084 && DECL_INITIAL (decl)
4085 && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
4086 return 0;
4089 /* For any statement, we must follow the statement-chain. */
4090 if (STATEMENT_CODE_P (TREE_CODE (exp)) && TREE_CHAIN (exp))
4091 return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
4093 /* Assume everything else is safe. */
4094 return 1;
4097 /* Hook used by unsafe_for_reeval to handle language-specific tree codes. */
4100 c_common_unsafe_for_reeval (tree exp)
4102 /* Statement expressions may not be reevaluated, likewise compound
4103 literals. */
4104 if (TREE_CODE (exp) == STMT_EXPR
4105 || TREE_CODE (exp) == COMPOUND_LITERAL_EXPR)
4106 return 2;
4108 /* Walk all other expressions. */
4109 return -1;
4112 /* Hook used by staticp to handle language-specific tree codes. */
4115 c_staticp (tree exp)
4117 if (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4118 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)))
4119 return 1;
4120 return 0;
4124 /* Given a boolean expression ARG, return a tree representing an increment
4125 or decrement (as indicated by CODE) of ARG. The front end must check for
4126 invalid cases (e.g., decrement in C++). */
4127 tree
4128 boolean_increment (enum tree_code code, tree arg)
4130 tree val;
4131 tree true_res = boolean_true_node;
4133 arg = stabilize_reference (arg);
4134 switch (code)
4136 case PREINCREMENT_EXPR:
4137 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4138 break;
4139 case POSTINCREMENT_EXPR:
4140 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4141 arg = save_expr (arg);
4142 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4143 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4144 break;
4145 case PREDECREMENT_EXPR:
4146 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4147 break;
4148 case POSTDECREMENT_EXPR:
4149 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4150 arg = save_expr (arg);
4151 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4152 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4153 break;
4154 default:
4155 abort ();
4157 TREE_SIDE_EFFECTS (val) = 1;
4158 return val;
4161 /* Built-in macros for stddef.h, that require macros defined in this
4162 file. */
4163 void
4164 c_stddef_cpp_builtins(void)
4166 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4167 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4168 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4169 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4172 static void
4173 c_init_attributes (void)
4175 /* Fill in the built_in_attributes array. */
4176 #define DEF_ATTR_NULL_TREE(ENUM) \
4177 built_in_attributes[(int) ENUM] = NULL_TREE;
4178 #define DEF_ATTR_INT(ENUM, VALUE) \
4179 built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0);
4180 #define DEF_ATTR_IDENT(ENUM, STRING) \
4181 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4182 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4183 built_in_attributes[(int) ENUM] \
4184 = tree_cons (built_in_attributes[(int) PURPOSE], \
4185 built_in_attributes[(int) VALUE], \
4186 built_in_attributes[(int) CHAIN]);
4187 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No initialization needed. */
4188 #include "builtin-attrs.def"
4189 #undef DEF_ATTR_NULL_TREE
4190 #undef DEF_ATTR_INT
4191 #undef DEF_ATTR_IDENT
4192 #undef DEF_ATTR_TREE_LIST
4193 #undef DEF_FN_ATTR
4194 c_attrs_initialized = true;
4197 /* Depending on the name of DECL, apply default attributes to it. */
4199 void
4200 c_common_insert_default_attributes (tree decl)
4202 tree name = DECL_NAME (decl);
4204 if (!c_attrs_initialized)
4205 c_init_attributes ();
4207 #define DEF_ATTR_NULL_TREE(ENUM) /* Nothing needed after initialization. */
4208 #define DEF_ATTR_INT(ENUM, VALUE)
4209 #define DEF_ATTR_IDENT(ENUM, STRING)
4210 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)
4211 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) \
4212 if ((PREDICATE) && name == built_in_attributes[(int) NAME]) \
4213 decl_attributes (&decl, built_in_attributes[(int) ATTRS], \
4214 ATTR_FLAG_BUILT_IN);
4215 #include "builtin-attrs.def"
4216 #undef DEF_ATTR_NULL_TREE
4217 #undef DEF_ATTR_INT
4218 #undef DEF_ATTR_IDENT
4219 #undef DEF_ATTR_TREE_LIST
4220 #undef DEF_FN_ATTR
4223 /* Output a -Wshadow warning MSGCODE about NAME, and give the location
4224 of the previous declaration DECL. */
4225 void
4226 shadow_warning (enum sw_kind msgcode, const char *name, tree decl)
4228 static const char *const msgs[] = {
4229 /* SW_PARAM */ N_("declaration of \"%s\" shadows a parameter"),
4230 /* SW_LOCAL */ N_("declaration of \"%s\" shadows a previous local"),
4231 /* SW_GLOBAL */ N_("declaration of \"%s\" shadows a global declaration")
4234 warning (msgs[msgcode], name);
4235 warning ("%Hshadowed declaration is here", &DECL_SOURCE_LOCATION (decl));
4238 /* Attribute handlers common to C front ends. */
4240 /* Handle a "packed" attribute; arguments as in
4241 struct attribute_spec.handler. */
4243 static tree
4244 handle_packed_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4245 int flags, bool *no_add_attrs)
4247 if (TYPE_P (*node))
4249 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4250 *node = build_type_copy (*node);
4251 TYPE_PACKED (*node) = 1;
4252 if (TYPE_MAIN_VARIANT (*node) == *node)
4254 /* If it is the main variant, then pack the other variants
4255 too. This happens in,
4257 struct Foo {
4258 struct Foo const *ptr; // creates a variant w/o packed flag
4259 } __ attribute__((packed)); // packs it now.
4261 tree probe;
4263 for (probe = *node; probe; probe = TYPE_NEXT_VARIANT (probe))
4264 TYPE_PACKED (probe) = 1;
4268 else if (TREE_CODE (*node) == FIELD_DECL)
4269 DECL_PACKED (*node) = 1;
4270 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4271 used for DECL_REGISTER. It wouldn't mean anything anyway.
4272 We can't set DECL_PACKED on the type of a TYPE_DECL, because
4273 that changes what the typedef is typing. */
4274 else
4276 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4277 *no_add_attrs = true;
4280 return NULL_TREE;
4283 /* Handle a "nocommon" attribute; arguments as in
4284 struct attribute_spec.handler. */
4286 static tree
4287 handle_nocommon_attribute (tree *node, tree name,
4288 tree args ATTRIBUTE_UNUSED,
4289 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4291 if (TREE_CODE (*node) == VAR_DECL)
4292 DECL_COMMON (*node) = 0;
4293 else
4295 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4296 *no_add_attrs = true;
4299 return NULL_TREE;
4302 /* Handle a "common" attribute; arguments as in
4303 struct attribute_spec.handler. */
4305 static tree
4306 handle_common_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4307 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4309 if (TREE_CODE (*node) == VAR_DECL)
4310 DECL_COMMON (*node) = 1;
4311 else
4313 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4314 *no_add_attrs = true;
4317 return NULL_TREE;
4320 /* Handle a "noreturn" attribute; arguments as in
4321 struct attribute_spec.handler. */
4323 static tree
4324 handle_noreturn_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4325 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4327 tree type = TREE_TYPE (*node);
4329 /* See FIXME comment in c_common_attribute_table. */
4330 if (TREE_CODE (*node) == FUNCTION_DECL)
4331 TREE_THIS_VOLATILE (*node) = 1;
4332 else if (TREE_CODE (type) == POINTER_TYPE
4333 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4334 TREE_TYPE (*node)
4335 = build_pointer_type
4336 (build_type_variant (TREE_TYPE (type),
4337 TREE_READONLY (TREE_TYPE (type)), 1));
4338 else
4340 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4341 *no_add_attrs = true;
4344 return NULL_TREE;
4347 /* Handle a "noinline" attribute; arguments as in
4348 struct attribute_spec.handler. */
4350 static tree
4351 handle_noinline_attribute (tree *node, tree name,
4352 tree args ATTRIBUTE_UNUSED,
4353 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4355 if (TREE_CODE (*node) == FUNCTION_DECL)
4356 DECL_UNINLINABLE (*node) = 1;
4357 else
4359 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4360 *no_add_attrs = true;
4363 return NULL_TREE;
4366 /* Handle a "always_inline" attribute; arguments as in
4367 struct attribute_spec.handler. */
4369 static tree
4370 handle_always_inline_attribute (tree *node, tree name,
4371 tree args ATTRIBUTE_UNUSED,
4372 int flags ATTRIBUTE_UNUSED,
4373 bool *no_add_attrs)
4375 if (TREE_CODE (*node) == FUNCTION_DECL)
4377 /* Do nothing else, just set the attribute. We'll get at
4378 it later with lookup_attribute. */
4380 else
4382 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4383 *no_add_attrs = true;
4386 return NULL_TREE;
4389 /* Handle a "used" attribute; arguments as in
4390 struct attribute_spec.handler. */
4392 static tree
4393 handle_used_attribute (tree *pnode, tree name, tree args ATTRIBUTE_UNUSED,
4394 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4396 tree node = *pnode;
4398 if (TREE_CODE (node) == FUNCTION_DECL
4399 || (TREE_CODE (node) == VAR_DECL && TREE_STATIC (node)))
4401 TREE_USED (node) = 1;
4403 else
4405 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4406 *no_add_attrs = true;
4409 return NULL_TREE;
4412 /* Handle a "unused" attribute; arguments as in
4413 struct attribute_spec.handler. */
4415 static tree
4416 handle_unused_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4417 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4419 if (DECL_P (*node))
4421 tree decl = *node;
4423 if (TREE_CODE (decl) == PARM_DECL
4424 || TREE_CODE (decl) == VAR_DECL
4425 || TREE_CODE (decl) == FUNCTION_DECL
4426 || TREE_CODE (decl) == LABEL_DECL
4427 || TREE_CODE (decl) == TYPE_DECL)
4428 TREE_USED (decl) = 1;
4429 else
4431 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4432 *no_add_attrs = true;
4435 else
4437 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4438 *node = build_type_copy (*node);
4439 TREE_USED (*node) = 1;
4442 return NULL_TREE;
4445 /* Handle a "const" attribute; arguments as in
4446 struct attribute_spec.handler. */
4448 static tree
4449 handle_const_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4450 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4452 tree type = TREE_TYPE (*node);
4454 /* See FIXME comment on noreturn in c_common_attribute_table. */
4455 if (TREE_CODE (*node) == FUNCTION_DECL)
4456 TREE_READONLY (*node) = 1;
4457 else if (TREE_CODE (type) == POINTER_TYPE
4458 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4459 TREE_TYPE (*node)
4460 = build_pointer_type
4461 (build_type_variant (TREE_TYPE (type), 1,
4462 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4463 else
4465 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4466 *no_add_attrs = true;
4469 return NULL_TREE;
4472 /* Handle a "transparent_union" attribute; arguments as in
4473 struct attribute_spec.handler. */
4475 static tree
4476 handle_transparent_union_attribute (tree *node, tree name,
4477 tree args ATTRIBUTE_UNUSED, int flags,
4478 bool *no_add_attrs)
4480 tree decl = NULL_TREE;
4481 tree *type = NULL;
4482 int is_type = 0;
4484 if (DECL_P (*node))
4486 decl = *node;
4487 type = &TREE_TYPE (decl);
4488 is_type = TREE_CODE (*node) == TYPE_DECL;
4490 else if (TYPE_P (*node))
4491 type = node, is_type = 1;
4493 if (is_type
4494 && TREE_CODE (*type) == UNION_TYPE
4495 && (decl == 0
4496 || (TYPE_FIELDS (*type) != 0
4497 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))))
4499 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4500 *type = build_type_copy (*type);
4501 TYPE_TRANSPARENT_UNION (*type) = 1;
4503 else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
4504 && TREE_CODE (*type) == UNION_TYPE
4505 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))
4506 DECL_TRANSPARENT_UNION (decl) = 1;
4507 else
4509 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4510 *no_add_attrs = true;
4513 return NULL_TREE;
4516 /* Handle a "constructor" attribute; arguments as in
4517 struct attribute_spec.handler. */
4519 static tree
4520 handle_constructor_attribute (tree *node, tree name,
4521 tree args ATTRIBUTE_UNUSED,
4522 int flags ATTRIBUTE_UNUSED,
4523 bool *no_add_attrs)
4525 tree decl = *node;
4526 tree type = TREE_TYPE (decl);
4528 if (TREE_CODE (decl) == FUNCTION_DECL
4529 && TREE_CODE (type) == FUNCTION_TYPE
4530 && decl_function_context (decl) == 0)
4532 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4533 TREE_USED (decl) = 1;
4535 else
4537 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4538 *no_add_attrs = true;
4541 return NULL_TREE;
4544 /* Handle a "destructor" attribute; arguments as in
4545 struct attribute_spec.handler. */
4547 static tree
4548 handle_destructor_attribute (tree *node, tree name,
4549 tree args ATTRIBUTE_UNUSED,
4550 int flags ATTRIBUTE_UNUSED,
4551 bool *no_add_attrs)
4553 tree decl = *node;
4554 tree type = TREE_TYPE (decl);
4556 if (TREE_CODE (decl) == FUNCTION_DECL
4557 && TREE_CODE (type) == FUNCTION_TYPE
4558 && decl_function_context (decl) == 0)
4560 DECL_STATIC_DESTRUCTOR (decl) = 1;
4561 TREE_USED (decl) = 1;
4563 else
4565 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4566 *no_add_attrs = true;
4569 return NULL_TREE;
4572 /* Handle a "mode" attribute; arguments as in
4573 struct attribute_spec.handler. */
4575 static tree
4576 handle_mode_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4577 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4579 tree type = *node;
4581 *no_add_attrs = true;
4583 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4584 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4585 else
4587 int j;
4588 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4589 int len = strlen (p);
4590 enum machine_mode mode = VOIDmode;
4591 tree typefm;
4592 tree ptr_type;
4594 if (len > 4 && p[0] == '_' && p[1] == '_'
4595 && p[len - 1] == '_' && p[len - 2] == '_')
4597 char *newp = alloca (len - 1);
4599 strcpy (newp, &p[2]);
4600 newp[len - 4] = '\0';
4601 p = newp;
4604 /* Change this type to have a type with the specified mode.
4605 First check for the special modes. */
4606 if (! strcmp (p, "byte"))
4607 mode = byte_mode;
4608 else if (!strcmp (p, "word"))
4609 mode = word_mode;
4610 else if (! strcmp (p, "pointer"))
4611 mode = ptr_mode;
4612 else
4613 for (j = 0; j < NUM_MACHINE_MODES; j++)
4614 if (!strcmp (p, GET_MODE_NAME (j)))
4615 mode = (enum machine_mode) j;
4617 if (mode == VOIDmode)
4618 error ("unknown machine mode `%s'", p);
4619 else if (0 == (typefm = (*lang_hooks.types.type_for_mode)
4620 (mode, TREE_UNSIGNED (type))))
4621 error ("no data type for mode `%s'", p);
4622 else if ((TREE_CODE (type) == POINTER_TYPE
4623 || TREE_CODE (type) == REFERENCE_TYPE)
4624 && !(*targetm.valid_pointer_mode) (mode))
4625 error ("invalid pointer mode `%s'", p);
4626 else
4628 /* If this is a vector, make sure we either have hardware
4629 support, or we can emulate it. */
4630 if (VECTOR_MODE_P (mode) && !vector_mode_valid_p (mode))
4632 error ("unable to emulate '%s'", GET_MODE_NAME (mode));
4633 return NULL_TREE;
4636 if (TREE_CODE (type) == POINTER_TYPE)
4638 ptr_type = build_pointer_type_for_mode (TREE_TYPE (type),
4639 mode);
4640 *node = ptr_type;
4642 else if (TREE_CODE (type) == REFERENCE_TYPE)
4644 ptr_type = build_reference_type_for_mode (TREE_TYPE (type),
4645 mode);
4646 *node = ptr_type;
4648 else
4649 *node = typefm;
4650 /* No need to layout the type here. The caller should do this. */
4654 return NULL_TREE;
4657 /* Handle a "section" attribute; arguments as in
4658 struct attribute_spec.handler. */
4660 static tree
4661 handle_section_attribute (tree *node, tree name ATTRIBUTE_UNUSED, tree args,
4662 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4664 tree decl = *node;
4666 if (targetm.have_named_sections)
4668 if ((TREE_CODE (decl) == FUNCTION_DECL
4669 || TREE_CODE (decl) == VAR_DECL)
4670 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
4672 if (TREE_CODE (decl) == VAR_DECL
4673 && current_function_decl != NULL_TREE
4674 && ! TREE_STATIC (decl))
4676 error ("%Hsection attribute cannot be specified for "
4677 "local variables", &DECL_SOURCE_LOCATION (decl));
4678 *no_add_attrs = true;
4681 /* The decl may have already been given a section attribute
4682 from a previous declaration. Ensure they match. */
4683 else if (DECL_SECTION_NAME (decl) != NULL_TREE
4684 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
4685 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
4687 error ("%Hsection of '%D' conflicts with previous declaration",
4688 &DECL_SOURCE_LOCATION (*node), *node);
4689 *no_add_attrs = true;
4691 else
4692 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
4694 else
4696 error ("%Hsection attribute not allowed for '%D'",
4697 &DECL_SOURCE_LOCATION (*node), *node);
4698 *no_add_attrs = true;
4701 else
4703 error ("%Hsection attributes are not supported for this target",
4704 &DECL_SOURCE_LOCATION (*node));
4705 *no_add_attrs = true;
4708 return NULL_TREE;
4711 /* Handle a "aligned" attribute; arguments as in
4712 struct attribute_spec.handler. */
4714 static tree
4715 handle_aligned_attribute (tree *node, tree name ATTRIBUTE_UNUSED, tree args,
4716 int flags, bool *no_add_attrs)
4718 tree decl = NULL_TREE;
4719 tree *type = NULL;
4720 int is_type = 0;
4721 tree align_expr = (args ? TREE_VALUE (args)
4722 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
4723 int i;
4725 if (DECL_P (*node))
4727 decl = *node;
4728 type = &TREE_TYPE (decl);
4729 is_type = TREE_CODE (*node) == TYPE_DECL;
4731 else if (TYPE_P (*node))
4732 type = node, is_type = 1;
4734 /* Strip any NOPs of any kind. */
4735 while (TREE_CODE (align_expr) == NOP_EXPR
4736 || TREE_CODE (align_expr) == CONVERT_EXPR
4737 || TREE_CODE (align_expr) == NON_LVALUE_EXPR)
4738 align_expr = TREE_OPERAND (align_expr, 0);
4740 if (TREE_CODE (align_expr) != INTEGER_CST)
4742 error ("requested alignment is not a constant");
4743 *no_add_attrs = true;
4745 else if ((i = tree_log2 (align_expr)) == -1)
4747 error ("requested alignment is not a power of 2");
4748 *no_add_attrs = true;
4750 else if (i > HOST_BITS_PER_INT - 2)
4752 error ("requested alignment is too large");
4753 *no_add_attrs = true;
4755 else if (is_type)
4757 /* If we have a TYPE_DECL, then copy the type, so that we
4758 don't accidentally modify a builtin type. See pushdecl. */
4759 if (decl && TREE_TYPE (decl) != error_mark_node
4760 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
4762 tree tt = TREE_TYPE (decl);
4763 *type = build_type_copy (*type);
4764 DECL_ORIGINAL_TYPE (decl) = tt;
4765 TYPE_NAME (*type) = decl;
4766 TREE_USED (*type) = TREE_USED (decl);
4767 TREE_TYPE (decl) = *type;
4769 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4770 *type = build_type_copy (*type);
4772 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
4773 TYPE_USER_ALIGN (*type) = 1;
4775 else if (TREE_CODE (decl) != VAR_DECL
4776 && TREE_CODE (decl) != FIELD_DECL)
4778 error ("%Halignment may not be specified for '%D'",
4779 &DECL_SOURCE_LOCATION (decl), decl);
4780 *no_add_attrs = true;
4782 else
4784 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
4785 DECL_USER_ALIGN (decl) = 1;
4788 return NULL_TREE;
4791 /* Handle a "weak" attribute; arguments as in
4792 struct attribute_spec.handler. */
4794 static tree
4795 handle_weak_attribute (tree *node, tree name ATTRIBUTE_UNUSED,
4796 tree args ATTRIBUTE_UNUSED,
4797 int flags ATTRIBUTE_UNUSED,
4798 bool *no_add_attrs ATTRIBUTE_UNUSED)
4800 declare_weak (*node);
4802 return NULL_TREE;
4805 /* Handle an "alias" attribute; arguments as in
4806 struct attribute_spec.handler. */
4808 static tree
4809 handle_alias_attribute (tree *node, tree name, tree args,
4810 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4812 tree decl = *node;
4814 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4815 || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
4817 error ("%H'%D' defined both normally and as an alias",
4818 &DECL_SOURCE_LOCATION (decl), decl);
4819 *no_add_attrs = true;
4821 else if (decl_function_context (decl) == 0)
4823 tree id;
4825 id = TREE_VALUE (args);
4826 if (TREE_CODE (id) != STRING_CST)
4828 error ("alias arg not a string");
4829 *no_add_attrs = true;
4830 return NULL_TREE;
4832 id = get_identifier (TREE_STRING_POINTER (id));
4833 /* This counts as a use of the object pointed to. */
4834 TREE_USED (id) = 1;
4836 if (TREE_CODE (decl) == FUNCTION_DECL)
4837 DECL_INITIAL (decl) = error_mark_node;
4838 else
4839 DECL_EXTERNAL (decl) = 0;
4841 else
4843 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4844 *no_add_attrs = true;
4847 return NULL_TREE;
4850 /* Handle an "visibility" attribute; arguments as in
4851 struct attribute_spec.handler. */
4853 static tree
4854 handle_visibility_attribute (tree *node, tree name, tree args,
4855 int flags ATTRIBUTE_UNUSED,
4856 bool *no_add_attrs)
4858 tree decl = *node;
4860 if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl))
4862 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4863 *no_add_attrs = true;
4865 else
4867 tree id;
4869 id = TREE_VALUE (args);
4870 if (TREE_CODE (id) != STRING_CST)
4872 error ("visibility arg not a string");
4873 *no_add_attrs = true;
4874 return NULL_TREE;
4876 if (strcmp (TREE_STRING_POINTER (id), "hidden")
4877 && strcmp (TREE_STRING_POINTER (id), "protected")
4878 && strcmp (TREE_STRING_POINTER (id), "internal")
4879 && strcmp (TREE_STRING_POINTER (id), "default"))
4881 error ("visibility arg must be one of \"default\", \"hidden\", \"protected\" or \"internal\"");
4882 *no_add_attrs = true;
4883 return NULL_TREE;
4887 return NULL_TREE;
4890 /* Handle an "tls_model" attribute; arguments as in
4891 struct attribute_spec.handler. */
4893 static tree
4894 handle_tls_model_attribute (tree *node, tree name, tree args,
4895 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4897 tree decl = *node;
4899 if (! DECL_THREAD_LOCAL (decl))
4901 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4902 *no_add_attrs = true;
4904 else
4906 tree id;
4908 id = TREE_VALUE (args);
4909 if (TREE_CODE (id) != STRING_CST)
4911 error ("tls_model arg not a string");
4912 *no_add_attrs = true;
4913 return NULL_TREE;
4915 if (strcmp (TREE_STRING_POINTER (id), "local-exec")
4916 && strcmp (TREE_STRING_POINTER (id), "initial-exec")
4917 && strcmp (TREE_STRING_POINTER (id), "local-dynamic")
4918 && strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
4920 error ("tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
4921 *no_add_attrs = true;
4922 return NULL_TREE;
4926 return NULL_TREE;
4929 /* Handle a "no_instrument_function" attribute; arguments as in
4930 struct attribute_spec.handler. */
4932 static tree
4933 handle_no_instrument_function_attribute (tree *node, tree name,
4934 tree args ATTRIBUTE_UNUSED,
4935 int flags ATTRIBUTE_UNUSED,
4936 bool *no_add_attrs)
4938 tree decl = *node;
4940 if (TREE_CODE (decl) != FUNCTION_DECL)
4942 error ("%H'%E' attribute applies only to functions",
4943 &DECL_SOURCE_LOCATION (decl), name);
4944 *no_add_attrs = true;
4946 else if (DECL_INITIAL (decl))
4948 error ("%Hcan't set '%E' attribute after definition",
4949 &DECL_SOURCE_LOCATION (decl), name);
4950 *no_add_attrs = true;
4952 else
4953 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
4955 return NULL_TREE;
4958 /* Handle a "malloc" attribute; arguments as in
4959 struct attribute_spec.handler. */
4961 static tree
4962 handle_malloc_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
4963 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
4965 if (TREE_CODE (*node) == FUNCTION_DECL)
4966 DECL_IS_MALLOC (*node) = 1;
4967 /* ??? TODO: Support types. */
4968 else
4970 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4971 *no_add_attrs = true;
4974 return NULL_TREE;
4977 /* Handle a "no_limit_stack" attribute; arguments as in
4978 struct attribute_spec.handler. */
4980 static tree
4981 handle_no_limit_stack_attribute (tree *node, tree name,
4982 tree args ATTRIBUTE_UNUSED,
4983 int flags ATTRIBUTE_UNUSED,
4984 bool *no_add_attrs)
4986 tree decl = *node;
4988 if (TREE_CODE (decl) != FUNCTION_DECL)
4990 error ("%H'%E' attribute applies only to functions",
4991 &DECL_SOURCE_LOCATION (decl), name);
4992 *no_add_attrs = true;
4994 else if (DECL_INITIAL (decl))
4996 error ("%Hcan't set '%E' attribute after definition",
4997 &DECL_SOURCE_LOCATION (decl), name);
4998 *no_add_attrs = true;
5000 else
5001 DECL_NO_LIMIT_STACK (decl) = 1;
5003 return NULL_TREE;
5006 /* Handle a "pure" attribute; arguments as in
5007 struct attribute_spec.handler. */
5009 static tree
5010 handle_pure_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
5011 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5013 if (TREE_CODE (*node) == FUNCTION_DECL)
5014 DECL_IS_PURE (*node) = 1;
5015 /* ??? TODO: Support types. */
5016 else
5018 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5019 *no_add_attrs = true;
5022 return NULL_TREE;
5025 /* Handle a "deprecated" attribute; arguments as in
5026 struct attribute_spec.handler. */
5028 static tree
5029 handle_deprecated_attribute (tree *node, tree name,
5030 tree args ATTRIBUTE_UNUSED, int flags,
5031 bool *no_add_attrs)
5033 tree type = NULL_TREE;
5034 int warn = 0;
5035 const char *what = NULL;
5037 if (DECL_P (*node))
5039 tree decl = *node;
5040 type = TREE_TYPE (decl);
5042 if (TREE_CODE (decl) == TYPE_DECL
5043 || TREE_CODE (decl) == PARM_DECL
5044 || TREE_CODE (decl) == VAR_DECL
5045 || TREE_CODE (decl) == FUNCTION_DECL
5046 || TREE_CODE (decl) == FIELD_DECL)
5047 TREE_DEPRECATED (decl) = 1;
5048 else
5049 warn = 1;
5051 else if (TYPE_P (*node))
5053 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5054 *node = build_type_copy (*node);
5055 TREE_DEPRECATED (*node) = 1;
5056 type = *node;
5058 else
5059 warn = 1;
5061 if (warn)
5063 *no_add_attrs = true;
5064 if (type && TYPE_NAME (type))
5066 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5067 what = IDENTIFIER_POINTER (TYPE_NAME (*node));
5068 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5069 && DECL_NAME (TYPE_NAME (type)))
5070 what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
5072 if (what)
5073 warning ("`%s' attribute ignored for `%s'",
5074 IDENTIFIER_POINTER (name), what);
5075 else
5076 warning ("`%s' attribute ignored",
5077 IDENTIFIER_POINTER (name));
5080 return NULL_TREE;
5083 /* Keep a list of vector type nodes we created in handle_vector_size_attribute,
5084 to prevent us from duplicating type nodes unnecessarily.
5085 The normal mechanism to prevent duplicates is to use type_hash_canon, but
5086 since we want to distinguish types that are essentially identical (except
5087 for their debug representation), we use a local list here. */
5088 static GTY(()) tree vector_type_node_list = 0;
5090 /* Handle a "vector_size" attribute; arguments as in
5091 struct attribute_spec.handler. */
5093 static tree
5094 handle_vector_size_attribute (tree *node, tree name, tree args,
5095 int flags ATTRIBUTE_UNUSED,
5096 bool *no_add_attrs)
5098 unsigned HOST_WIDE_INT vecsize, nunits;
5099 enum machine_mode mode, orig_mode, new_mode;
5100 tree type = *node, new_type = NULL_TREE;
5101 tree type_list_node;
5103 *no_add_attrs = true;
5105 if (! host_integerp (TREE_VALUE (args), 1))
5107 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5108 return NULL_TREE;
5111 /* Get the vector size (in bytes). */
5112 vecsize = tree_low_cst (TREE_VALUE (args), 1);
5114 /* We need to provide for vector pointers, vector arrays, and
5115 functions returning vectors. For example:
5117 __attribute__((vector_size(16))) short *foo;
5119 In this case, the mode is SI, but the type being modified is
5120 HI, so we need to look further. */
5122 while (POINTER_TYPE_P (type)
5123 || TREE_CODE (type) == FUNCTION_TYPE
5124 || TREE_CODE (type) == ARRAY_TYPE)
5125 type = TREE_TYPE (type);
5127 /* Get the mode of the type being modified. */
5128 orig_mode = TYPE_MODE (type);
5130 if (TREE_CODE (type) == RECORD_TYPE
5131 || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
5132 && GET_MODE_CLASS (orig_mode) != MODE_INT)
5133 || ! host_integerp (TYPE_SIZE_UNIT (type), 1))
5135 error ("invalid vector type for attribute `%s'",
5136 IDENTIFIER_POINTER (name));
5137 return NULL_TREE;
5140 /* Calculate how many units fit in the vector. */
5141 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5143 /* Find a suitably sized vector. */
5144 new_mode = VOIDmode;
5145 for (mode = GET_CLASS_NARROWEST_MODE (GET_MODE_CLASS (orig_mode) == MODE_INT
5146 ? MODE_VECTOR_INT
5147 : MODE_VECTOR_FLOAT);
5148 mode != VOIDmode;
5149 mode = GET_MODE_WIDER_MODE (mode))
5150 if (vecsize == GET_MODE_SIZE (mode)
5151 && nunits == (unsigned HOST_WIDE_INT) GET_MODE_NUNITS (mode))
5153 new_mode = mode;
5154 break;
5157 if (new_mode == VOIDmode)
5159 error ("no vector mode with the size and type specified could be found");
5160 return NULL_TREE;
5163 for (type_list_node = vector_type_node_list; type_list_node;
5164 type_list_node = TREE_CHAIN (type_list_node))
5166 tree other_type = TREE_VALUE (type_list_node);
5167 tree record = TYPE_DEBUG_REPRESENTATION_TYPE (other_type);
5168 tree fields = TYPE_FIELDS (record);
5169 tree field_type = TREE_TYPE (fields);
5170 tree array_type = TREE_TYPE (field_type);
5171 if (TREE_CODE (fields) != FIELD_DECL
5172 || TREE_CODE (field_type) != ARRAY_TYPE)
5173 abort ();
5175 if (TYPE_MODE (other_type) == mode && type == array_type)
5177 new_type = other_type;
5178 break;
5182 if (new_type == NULL_TREE)
5184 tree index, array, rt, list_node;
5186 new_type = (*lang_hooks.types.type_for_mode) (new_mode,
5187 TREE_UNSIGNED (type));
5189 if (!new_type)
5191 error ("no vector mode with the size and type specified could be found");
5192 return NULL_TREE;
5195 new_type = build_type_copy (new_type);
5197 /* If this is a vector, make sure we either have hardware
5198 support, or we can emulate it. */
5199 if ((GET_MODE_CLASS (mode) == MODE_VECTOR_INT
5200 || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
5201 && !vector_mode_valid_p (mode))
5203 error ("unable to emulate '%s'", GET_MODE_NAME (mode));
5204 return NULL_TREE;
5207 /* Set the debug information here, because this is the only
5208 place where we know the underlying type for a vector made
5209 with vector_size. For debugging purposes we pretend a vector
5210 is an array within a structure. */
5211 index = build_int_2 (TYPE_VECTOR_SUBPARTS (new_type) - 1, 0);
5212 array = build_array_type (type, build_index_type (index));
5213 rt = make_node (RECORD_TYPE);
5215 TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
5216 DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
5217 layout_type (rt);
5218 TYPE_DEBUG_REPRESENTATION_TYPE (new_type) = rt;
5220 list_node = build_tree_list (NULL, new_type);
5221 TREE_CHAIN (list_node) = vector_type_node_list;
5222 vector_type_node_list = list_node;
5225 /* Build back pointers if needed. */
5226 *node = vector_size_helper (*node, new_type);
5228 return NULL_TREE;
5231 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
5232 better way.
5234 If we requested a pointer to a vector, build up the pointers that
5235 we stripped off while looking for the inner type. Similarly for
5236 return values from functions.
5238 The argument "type" is the top of the chain, and "bottom" is the
5239 new type which we will point to. */
5241 static tree
5242 vector_size_helper (tree type, tree bottom)
5244 tree inner, outer;
5246 if (POINTER_TYPE_P (type))
5248 inner = vector_size_helper (TREE_TYPE (type), bottom);
5249 outer = build_pointer_type (inner);
5251 else if (TREE_CODE (type) == ARRAY_TYPE)
5253 inner = vector_size_helper (TREE_TYPE (type), bottom);
5254 outer = build_array_type (inner, TYPE_VALUES (type));
5256 else if (TREE_CODE (type) == FUNCTION_TYPE)
5258 inner = vector_size_helper (TREE_TYPE (type), bottom);
5259 outer = build_function_type (inner, TYPE_VALUES (type));
5261 else
5262 return bottom;
5264 TREE_READONLY (outer) = TREE_READONLY (type);
5265 TREE_THIS_VOLATILE (outer) = TREE_THIS_VOLATILE (type);
5267 return outer;
5270 /* Handle the "nonnull" attribute. */
5271 static tree
5272 handle_nonnull_attribute (tree *node, tree name ATTRIBUTE_UNUSED,
5273 tree args, int flags ATTRIBUTE_UNUSED,
5274 bool *no_add_attrs)
5276 tree type = *node;
5277 unsigned HOST_WIDE_INT attr_arg_num;
5279 /* If no arguments are specified, all pointer arguments should be
5280 non-null. Verify a full prototype is given so that the arguments
5281 will have the correct types when we actually check them later. */
5282 if (! args)
5284 if (! TYPE_ARG_TYPES (type))
5286 error ("nonnull attribute without arguments on a non-prototype");
5287 *no_add_attrs = true;
5289 return NULL_TREE;
5292 /* Argument list specified. Verify that each argument number references
5293 a pointer argument. */
5294 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5296 tree argument;
5297 unsigned HOST_WIDE_INT arg_num, ck_num;
5299 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
5301 error ("nonnull argument has invalid operand number (arg %lu)",
5302 (unsigned long) attr_arg_num);
5303 *no_add_attrs = true;
5304 return NULL_TREE;
5307 argument = TYPE_ARG_TYPES (type);
5308 if (argument)
5310 for (ck_num = 1; ; ck_num++)
5312 if (! argument || ck_num == arg_num)
5313 break;
5314 argument = TREE_CHAIN (argument);
5317 if (! argument
5318 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5320 error ("nonnull argument with out-of-range operand number (arg %lu, operand %lu)",
5321 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5322 *no_add_attrs = true;
5323 return NULL_TREE;
5326 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5328 error ("nonnull argument references non-pointer operand (arg %lu, operand %lu)",
5329 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5330 *no_add_attrs = true;
5331 return NULL_TREE;
5336 return NULL_TREE;
5339 /* Check the argument list of a function call for null in argument slots
5340 that are marked as requiring a non-null pointer argument. */
5342 static void
5343 check_function_nonnull (tree attrs, tree params)
5345 tree a, args, param;
5346 int param_num;
5348 for (a = attrs; a; a = TREE_CHAIN (a))
5350 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5352 args = TREE_VALUE (a);
5354 /* Walk the argument list. If we encounter an argument number we
5355 should check for non-null, do it. If the attribute has no args,
5356 then every pointer argument is checked (in which case the check
5357 for pointer type is done in check_nonnull_arg). */
5358 for (param = params, param_num = 1; ;
5359 param_num++, param = TREE_CHAIN (param))
5361 if (! param)
5362 break;
5363 if (! args || nonnull_check_p (args, param_num))
5364 check_function_arguments_recurse (check_nonnull_arg, NULL,
5365 TREE_VALUE (param),
5366 param_num);
5372 /* Helper for check_function_nonnull; given a list of operands which
5373 must be non-null in ARGS, determine if operand PARAM_NUM should be
5374 checked. */
5376 static bool
5377 nonnull_check_p (tree args, unsigned HOST_WIDE_INT param_num)
5379 unsigned HOST_WIDE_INT arg_num;
5381 for (; args; args = TREE_CHAIN (args))
5383 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
5384 abort ();
5386 if (arg_num == param_num)
5387 return true;
5389 return false;
5392 /* Check that the function argument PARAM (which is operand number
5393 PARAM_NUM) is non-null. This is called by check_function_nonnull
5394 via check_function_arguments_recurse. */
5396 static void
5397 check_nonnull_arg (void *ctx ATTRIBUTE_UNUSED, tree param,
5398 unsigned HOST_WIDE_INT param_num)
5400 /* Just skip checking the argument if it's not a pointer. This can
5401 happen if the "nonnull" attribute was given without an operand
5402 list (which means to check every pointer argument). */
5404 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5405 return;
5407 if (integer_zerop (param))
5408 warning ("null argument where non-null required (arg %lu)",
5409 (unsigned long) param_num);
5412 /* Helper for nonnull attribute handling; fetch the operand number
5413 from the attribute argument list. */
5415 static bool
5416 get_nonnull_operand (tree arg_num_expr, unsigned HOST_WIDE_INT *valp)
5418 /* Strip any conversions from the arg number and verify they
5419 are constants. */
5420 while (TREE_CODE (arg_num_expr) == NOP_EXPR
5421 || TREE_CODE (arg_num_expr) == CONVERT_EXPR
5422 || TREE_CODE (arg_num_expr) == NON_LVALUE_EXPR)
5423 arg_num_expr = TREE_OPERAND (arg_num_expr, 0);
5425 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5426 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5427 return false;
5429 *valp = TREE_INT_CST_LOW (arg_num_expr);
5430 return true;
5433 /* Handle a "nothrow" attribute; arguments as in
5434 struct attribute_spec.handler. */
5436 static tree
5437 handle_nothrow_attribute (tree *node, tree name, tree args ATTRIBUTE_UNUSED,
5438 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5440 if (TREE_CODE (*node) == FUNCTION_DECL)
5441 TREE_NOTHROW (*node) = 1;
5442 /* ??? TODO: Support types. */
5443 else
5445 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5446 *no_add_attrs = true;
5449 return NULL_TREE;
5452 /* Handle a "cleanup" attribute; arguments as in
5453 struct attribute_spec.handler. */
5455 static tree
5456 handle_cleanup_attribute (tree *node, tree name, tree args,
5457 int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
5459 tree decl = *node;
5460 tree cleanup_id, cleanup_decl;
5462 /* ??? Could perhaps support cleanups on TREE_STATIC, much like we do
5463 for global destructors in C++. This requires infrastructure that
5464 we don't have generically at the moment. It's also not a feature
5465 we'd be missing too much, since we do have attribute constructor. */
5466 if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl))
5468 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5469 *no_add_attrs = true;
5470 return NULL_TREE;
5473 /* Verify that the argument is a function in scope. */
5474 /* ??? We could support pointers to functions here as well, if
5475 that was considered desirable. */
5476 cleanup_id = TREE_VALUE (args);
5477 if (TREE_CODE (cleanup_id) != IDENTIFIER_NODE)
5479 error ("cleanup arg not an identifier");
5480 *no_add_attrs = true;
5481 return NULL_TREE;
5483 cleanup_decl = lookup_name (cleanup_id);
5484 if (!cleanup_decl || TREE_CODE (cleanup_decl) != FUNCTION_DECL)
5486 error ("cleanup arg not a function");
5487 *no_add_attrs = true;
5488 return NULL_TREE;
5491 /* That the function has proper type is checked with the
5492 eventual call to build_function_call. */
5494 return NULL_TREE;
5497 /* Check for valid arguments being passed to a function. */
5498 void
5499 check_function_arguments (tree attrs, tree params)
5501 /* Check for null being passed in a pointer argument that must be
5502 non-null. We also need to do this if format checking is enabled. */
5504 if (warn_nonnull)
5505 check_function_nonnull (attrs, params);
5507 /* Check for errors in format strings. */
5509 if (warn_format)
5510 check_function_format (NULL, attrs, params);
5513 /* Generic argument checking recursion routine. PARAM is the argument to
5514 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
5515 once the argument is resolved. CTX is context for the callback. */
5516 void
5517 check_function_arguments_recurse (void (*callback)
5518 (void *, tree, unsigned HOST_WIDE_INT),
5519 void *ctx, tree param,
5520 unsigned HOST_WIDE_INT param_num)
5522 if (TREE_CODE (param) == NOP_EXPR)
5524 /* Strip coercion. */
5525 check_function_arguments_recurse (callback, ctx,
5526 TREE_OPERAND (param, 0), param_num);
5527 return;
5530 if (TREE_CODE (param) == CALL_EXPR)
5532 tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5533 tree attrs;
5534 bool found_format_arg = false;
5536 /* See if this is a call to a known internationalization function
5537 that modifies a format arg. Such a function may have multiple
5538 format_arg attributes (for example, ngettext). */
5540 for (attrs = TYPE_ATTRIBUTES (type);
5541 attrs;
5542 attrs = TREE_CHAIN (attrs))
5543 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5545 tree inner_args;
5546 tree format_num_expr;
5547 int format_num;
5548 int i;
5550 /* Extract the argument number, which was previously checked
5551 to be valid. */
5552 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
5553 while (TREE_CODE (format_num_expr) == NOP_EXPR
5554 || TREE_CODE (format_num_expr) == CONVERT_EXPR
5555 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
5556 format_num_expr = TREE_OPERAND (format_num_expr, 0);
5558 if (TREE_CODE (format_num_expr) != INTEGER_CST
5559 || TREE_INT_CST_HIGH (format_num_expr) != 0)
5560 abort ();
5562 format_num = TREE_INT_CST_LOW (format_num_expr);
5564 for (inner_args = TREE_OPERAND (param, 1), i = 1;
5565 inner_args != 0;
5566 inner_args = TREE_CHAIN (inner_args), i++)
5567 if (i == format_num)
5569 check_function_arguments_recurse (callback, ctx,
5570 TREE_VALUE (inner_args),
5571 param_num);
5572 found_format_arg = true;
5573 break;
5577 /* If we found a format_arg attribute and did a recursive check,
5578 we are done with checking this argument. Otherwise, we continue
5579 and this will be considered a non-literal. */
5580 if (found_format_arg)
5581 return;
5584 if (TREE_CODE (param) == COND_EXPR)
5586 /* Check both halves of the conditional expression. */
5587 check_function_arguments_recurse (callback, ctx,
5588 TREE_OPERAND (param, 1), param_num);
5589 check_function_arguments_recurse (callback, ctx,
5590 TREE_OPERAND (param, 2), param_num);
5591 return;
5594 (*callback) (ctx, param, param_num);
5597 /* Function to help qsort sort FIELD_DECLs by name order. */
5600 field_decl_cmp (const void *x_p, const void *y_p)
5602 const tree *const x = x_p;
5603 const tree *const y = y_p;
5604 if (DECL_NAME (*x) == DECL_NAME (*y))
5605 /* A nontype is "greater" than a type. */
5606 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5607 if (DECL_NAME (*x) == NULL_TREE)
5608 return -1;
5609 if (DECL_NAME (*y) == NULL_TREE)
5610 return 1;
5611 if (DECL_NAME (*x) < DECL_NAME (*y))
5612 return -1;
5613 return 1;
5616 static struct {
5617 gt_pointer_operator new_value;
5618 void *cookie;
5619 } resort_data;
5621 /* This routine compares two fields like field_decl_cmp but using the
5622 pointer operator in resort_data. */
5624 static int
5625 resort_field_decl_cmp (const void *x_p, const void *y_p)
5627 const tree *const x = x_p;
5628 const tree *const y = y_p;
5630 if (DECL_NAME (*x) == DECL_NAME (*y))
5631 /* A nontype is "greater" than a type. */
5632 return (TREE_CODE (*y) == TYPE_DECL) - (TREE_CODE (*x) == TYPE_DECL);
5633 if (DECL_NAME (*x) == NULL_TREE)
5634 return -1;
5635 if (DECL_NAME (*y) == NULL_TREE)
5636 return 1;
5638 tree d1 = DECL_NAME (*x);
5639 tree d2 = DECL_NAME (*y);
5640 resort_data.new_value (&d1, resort_data.cookie);
5641 resort_data.new_value (&d2, resort_data.cookie);
5642 if (d1 < d2)
5643 return -1;
5645 return 1;
5648 /* Resort DECL_SORTED_FIELDS because pointers have been reordered. */
5650 void
5651 resort_sorted_fields (void *obj,
5652 void *orig_obj ATTRIBUTE_UNUSED ,
5653 gt_pointer_operator new_value,
5654 void *cookie)
5656 struct sorted_fields_type *sf = obj;
5657 resort_data.new_value = new_value;
5658 resort_data.cookie = cookie;
5659 qsort (&sf->elts[0], sf->len, sizeof (tree),
5660 resort_field_decl_cmp);
5663 /* Used by estimate_num_insns. Estimate number of instructions seen
5664 by given statement. */
5665 static tree
5666 c_estimate_num_insns_1 (tree *tp, int *walk_subtrees, void *data)
5668 int *count = data;
5669 tree x = *tp;
5671 if (TYPE_P (x) || DECL_P (x))
5673 *walk_subtrees = 0;
5674 return NULL;
5676 /* Assume that constants and references counts nothing. These should
5677 be majorized by amount of operations amoung them we count later
5678 and are common target of CSE and similar optimizations. */
5679 if (TREE_CODE_CLASS (TREE_CODE (x)) == 'c'
5680 || TREE_CODE_CLASS (TREE_CODE (x)) == 'r')
5681 return NULL;
5682 switch (TREE_CODE (x))
5684 /* Reconginze assignments of large structures and constructors of
5685 big arrays. */
5686 case MODIFY_EXPR:
5687 case CONSTRUCTOR:
5689 int size = int_size_in_bytes (TREE_TYPE (x));
5691 if (!size || size > MOVE_MAX_PIECES)
5692 *count += 10;
5693 else
5694 *count += 2 * (size + MOVE_MAX - 1) / MOVE_MAX;
5695 return NULL;
5697 break;
5698 /* Few special cases of expensive operations. This is usefull
5699 to avoid inlining on functions having too many of these. */
5700 case TRUNC_DIV_EXPR:
5701 case CEIL_DIV_EXPR:
5702 case FLOOR_DIV_EXPR:
5703 case ROUND_DIV_EXPR:
5704 case TRUNC_MOD_EXPR:
5705 case CEIL_MOD_EXPR:
5706 case FLOOR_MOD_EXPR:
5707 case ROUND_MOD_EXPR:
5708 case RDIV_EXPR:
5709 case CALL_EXPR:
5710 *count += 10;
5711 break;
5712 /* Various containers that will produce no code themselves. */
5713 case INIT_EXPR:
5714 case TARGET_EXPR:
5715 case BIND_EXPR:
5716 case BLOCK:
5717 case TREE_LIST:
5718 case TREE_VEC:
5719 case IDENTIFIER_NODE:
5720 case PLACEHOLDER_EXPR:
5721 case WITH_CLEANUP_EXPR:
5722 case CLEANUP_POINT_EXPR:
5723 case NOP_EXPR:
5724 case VIEW_CONVERT_EXPR:
5725 case SAVE_EXPR:
5726 case UNSAVE_EXPR:
5727 case COMPLEX_EXPR:
5728 case REALPART_EXPR:
5729 case IMAGPART_EXPR:
5730 case TRY_CATCH_EXPR:
5731 case TRY_FINALLY_EXPR:
5732 case LABEL_EXPR:
5733 case EXIT_EXPR:
5734 case LABELED_BLOCK_EXPR:
5735 case EXIT_BLOCK_EXPR:
5736 case EXPR_WITH_FILE_LOCATION:
5738 case EXPR_STMT:
5739 case COMPOUND_STMT:
5740 case RETURN_STMT:
5741 case LABEL_STMT:
5742 case SCOPE_STMT:
5743 case FILE_STMT:
5744 case CASE_LABEL:
5745 case STMT_EXPR:
5746 case CLEANUP_STMT:
5748 case SIZEOF_EXPR:
5749 case ARROW_EXPR:
5750 case ALIGNOF_EXPR:
5751 break;
5752 case DECL_STMT:
5753 /* Do not account static initializers. */
5754 if (TREE_STATIC (TREE_OPERAND (x, 0)))
5755 *walk_subtrees = 0;
5756 break;
5757 default:
5758 (*count)++;
5760 return NULL;
5763 /* Estimate number of instructions that will be created by expanding the body. */
5765 c_estimate_num_insns (tree decl)
5767 int num = 0;
5768 walk_tree_without_duplicates (&DECL_SAVED_TREE (decl), c_estimate_num_insns_1, &num);
5769 return num;
5772 #include "gt-c-common.h"