expr.c (emit_move_insn): Use SCALAR_FLOAT_MODE_P
[official-gcc.git] / gcc / c-common.c
blob286f3b07840e43e94e71f5553bed6da9de57a3c2
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 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 "tree.h"
25 #include "real.h"
26 #include "flags.h"
27 #include "toplev.h"
28 #include "output.h"
29 #include "c-pragma.h"
30 #include "rtl.h"
31 #include "ggc.h"
32 #include "expr.h"
33 #include "c-common.h"
34 #include "diagnostic.h"
35 #include "tm_p.h"
36 #include "obstack.h"
37 #include "cpplib.h"
38 #include "target.h"
39 #include "langhooks.h"
40 #include "except.h" /* For USING_SJLJ_EXCEPTIONS. */
41 #include "tree-inline.h"
43 cpp_reader *parse_in; /* Declared in c-pragma.h. */
45 /* We let tm.h override the types used here, to handle trivial differences
46 such as the choice of unsigned int or long unsigned int for size_t.
47 When machines start needing nontrivial differences in the size type,
48 it would be best to do something here to figure out automatically
49 from other information what type to use. */
51 #ifndef SIZE_TYPE
52 #define SIZE_TYPE "long unsigned int"
53 #endif
55 #ifndef WCHAR_TYPE
56 #define WCHAR_TYPE "int"
57 #endif
59 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
60 #define MODIFIED_WCHAR_TYPE \
61 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
63 #ifndef PTRDIFF_TYPE
64 #define PTRDIFF_TYPE "long int"
65 #endif
67 #ifndef WINT_TYPE
68 #define WINT_TYPE "unsigned int"
69 #endif
71 #ifndef INTMAX_TYPE
72 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
73 ? "int" \
74 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
75 ? "long int" \
76 : "long long int"))
77 #endif
79 #ifndef UINTMAX_TYPE
80 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
81 ? "unsigned int" \
82 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
83 ? "long unsigned int" \
84 : "long long unsigned int"))
85 #endif
87 #ifndef REGISTER_PREFIX
88 #define REGISTER_PREFIX ""
89 #endif
91 /* The variant of the C language being processed. */
93 enum c_language_kind c_language;
95 /* The following symbols are subsumed in the c_global_trees array, and
96 listed here individually for documentation purposes.
98 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
100 tree short_integer_type_node;
101 tree long_integer_type_node;
102 tree long_long_integer_type_node;
104 tree short_unsigned_type_node;
105 tree long_unsigned_type_node;
106 tree long_long_unsigned_type_node;
108 tree boolean_type_node;
109 tree boolean_false_node;
110 tree boolean_true_node;
112 tree ptrdiff_type_node;
114 tree unsigned_char_type_node;
115 tree signed_char_type_node;
116 tree wchar_type_node;
117 tree signed_wchar_type_node;
118 tree unsigned_wchar_type_node;
120 tree float_type_node;
121 tree double_type_node;
122 tree long_double_type_node;
124 tree complex_integer_type_node;
125 tree complex_float_type_node;
126 tree complex_double_type_node;
127 tree complex_long_double_type_node;
129 tree intQI_type_node;
130 tree intHI_type_node;
131 tree intSI_type_node;
132 tree intDI_type_node;
133 tree intTI_type_node;
135 tree unsigned_intQI_type_node;
136 tree unsigned_intHI_type_node;
137 tree unsigned_intSI_type_node;
138 tree unsigned_intDI_type_node;
139 tree unsigned_intTI_type_node;
141 tree widest_integer_literal_type_node;
142 tree widest_unsigned_literal_type_node;
144 Nodes for types `void *' and `const void *'.
146 tree ptr_type_node, const_ptr_type_node;
148 Nodes for types `char *' and `const char *'.
150 tree string_type_node, const_string_type_node;
152 Type `char[SOMENUMBER]'.
153 Used when an array of char is needed and the size is irrelevant.
155 tree char_array_type_node;
157 Type `int[SOMENUMBER]' or something like it.
158 Used when an array of int needed and the size is irrelevant.
160 tree int_array_type_node;
162 Type `wchar_t[SOMENUMBER]' or something like it.
163 Used when a wide string literal is created.
165 tree wchar_array_type_node;
167 Type `int ()' -- used for implicit declaration of functions.
169 tree default_function_type;
171 A VOID_TYPE node, packaged in a TREE_LIST.
173 tree void_list_node;
175 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
176 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
177 VAR_DECLS, but C++ does.)
179 tree function_name_decl_node;
180 tree pretty_function_name_decl_node;
181 tree c99_function_name_decl_node;
183 Stack of nested function name VAR_DECLs.
185 tree saved_function_name_decls;
189 tree c_global_trees[CTI_MAX];
191 /* Switches common to the C front ends. */
193 /* Nonzero if prepreprocessing only. */
194 int flag_preprocess_only;
196 /* Nonzero if an ISO standard was selected. It rejects macros in the
197 user's namespace. */
198 int flag_iso;
200 /* Nonzero whenever Objective-C functionality is being used. */
201 int flag_objc;
203 /* Nonzero if -undef was given. It suppresses target built-in macros
204 and assertions. */
205 int flag_undef;
207 /* Nonzero means don't recognize the non-ANSI builtin functions. */
209 int flag_no_builtin;
211 /* Nonzero means don't recognize the non-ANSI builtin functions.
212 -ansi sets this. */
214 int flag_no_nonansi_builtin;
216 /* Nonzero means give `double' the same size as `float'. */
218 int flag_short_double;
220 /* Nonzero means give `wchar_t' the same size as `short'. */
222 int flag_short_wchar;
224 /* Nonzero means allow Microsoft extensions without warnings or errors. */
225 int flag_ms_extensions;
227 /* Nonzero means don't recognize the keyword `asm'. */
229 int flag_no_asm;
231 /* Nonzero means give string constants the type `const char *', as mandated
232 by the standard. */
234 int flag_const_strings;
236 /* Nonzero means `$' can be in an identifier. */
238 #ifndef DOLLARS_IN_IDENTIFIERS
239 #define DOLLARS_IN_IDENTIFIERS 1
240 #endif
241 int dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
243 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
245 int flag_signed_bitfields = 1;
246 int explicit_flag_signed_bitfields;
248 /* Nonzero means warn about pointer casts that can drop a type qualifier
249 from the pointer target type. */
251 int warn_cast_qual;
253 /* Warn about functions which might be candidates for format attributes. */
255 int warn_missing_format_attribute;
257 /* Nonzero means warn about sizeof(function) or addition/subtraction
258 of function pointers. */
260 int warn_pointer_arith;
262 /* Nonzero means warn for any global function def
263 without separate previous prototype decl. */
265 int warn_missing_prototypes;
267 /* Warn if adding () is suggested. */
269 int warn_parentheses;
271 /* Warn if initializer is not completely bracketed. */
273 int warn_missing_braces;
275 /* Warn about comparison of signed and unsigned values.
276 If -1, neither -Wsign-compare nor -Wno-sign-compare has been specified. */
278 int warn_sign_compare;
280 /* Nonzero means warn about usage of long long when `-pedantic'. */
282 int warn_long_long = 1;
284 /* Nonzero means warn about deprecated conversion from string constant to
285 `char *'. */
287 int warn_write_strings;
289 /* Nonzero means warn about multiple (redundant) decls for the same single
290 variable or function. */
292 int warn_redundant_decls;
294 /* Warn about testing equality of floating point numbers. */
296 int warn_float_equal;
298 /* Warn about a subscript that has type char. */
300 int warn_char_subscripts;
302 /* Warn if a type conversion is done that might have confusing results. */
304 int warn_conversion;
306 /* Warn about #pragma directives that are not recognized. */
308 int warn_unknown_pragmas; /* Tri state variable. */
310 /* Warn about format/argument anomalies in calls to formatted I/O functions
311 (*printf, *scanf, strftime, strfmon, etc.). */
313 int warn_format;
315 /* Warn about Y2K problems with strftime formats. */
317 int warn_format_y2k;
319 /* Warn about excess arguments to formats. */
321 int warn_format_extra_args;
323 /* Warn about zero-length formats. */
325 int warn_format_zero_length;
327 /* Warn about non-literal format arguments. */
329 int warn_format_nonliteral;
331 /* Warn about possible security problems with calls to format functions. */
333 int warn_format_security;
336 /* C/ObjC language option variables. */
339 /* Nonzero means message about use of implicit function declarations;
340 1 means warning; 2 means error. */
342 int mesg_implicit_function_declaration = -1;
344 /* Nonzero means allow type mismatches in conditional expressions;
345 just make their values `void'. */
347 int flag_cond_mismatch;
349 /* Nonzero means enable C89 Amendment 1 features. */
351 int flag_isoc94;
353 /* Nonzero means use the ISO C99 dialect of C. */
355 int flag_isoc99;
357 /* Nonzero means that we have builtin functions, and main is an int */
359 int flag_hosted = 1;
361 /* Nonzero means add default format_arg attributes for functions not
362 in ISO C. */
364 int flag_noniso_default_format_attributes = 1;
366 /* Nonzero means warn when casting a function call to a type that does
367 not match the return type (e.g. (float)sqrt() or (anything*)malloc()
368 when there is no previous declaration of sqrt or malloc. */
370 int warn_bad_function_cast;
372 /* Warn about traditional constructs whose meanings changed in ANSI C. */
374 int warn_traditional;
376 /* Nonzero means warn for non-prototype function decls
377 or non-prototyped defs without previous prototype. */
379 int warn_strict_prototypes;
381 /* Nonzero means warn for any global function def
382 without separate previous decl. */
384 int warn_missing_declarations;
386 /* Nonzero means warn about declarations of objects not at
387 file-scope level and about *all* declarations of functions (whether
388 or static) not at file-scope level. Note that we exclude
389 implicit function declarations. To get warnings about those, use
390 -Wimplicit. */
392 int warn_nested_externs;
394 /* Warn if main is suspicious. */
396 int warn_main;
398 /* Nonzero means warn about possible violations of sequence point rules. */
400 int warn_sequence_point;
402 /* Nonzero means to warn about compile-time division by zero. */
403 int warn_div_by_zero = 1;
405 /* Nonzero means warn about use of implicit int. */
407 int warn_implicit_int;
409 /* Warn about NULL being passed to argument slots marked as requiring
410 non-NULL. */
412 int warn_nonnull;
415 /* ObjC language option variables. */
418 /* Open and close the file for outputting class declarations, if
419 requested (ObjC). */
421 int flag_gen_declaration;
423 /* Generate code for GNU or NeXT runtime environment. */
425 #ifdef NEXT_OBJC_RUNTIME
426 int flag_next_runtime = 1;
427 #else
428 int flag_next_runtime = 0;
429 #endif
431 /* Tells the compiler that this is a special run. Do not perform any
432 compiling, instead we are to test some platform dependent features
433 and output a C header file with appropriate definitions. */
435 int print_struct_values;
437 /* ???. Undocumented. */
439 const char *constant_string_class_name;
441 /* Warn if multiple methods are seen for the same selector, but with
442 different argument types. Performs the check on the whole selector
443 table at the end of compilation. */
445 int warn_selector;
447 /* Warn if a @selector() is found, and no method with that selector
448 has been previously declared. The check is done on each
449 @selector() as soon as it is found - so it warns about forward
450 declarations. */
452 int warn_undeclared_selector;
454 /* Warn if methods required by a protocol are not implemented in the
455 class adopting it. When turned off, methods inherited to that
456 class are also considered implemented. */
458 int warn_protocol = 1;
461 /* C++ language option variables. */
464 /* Nonzero means don't recognize any extension keywords. */
466 int flag_no_gnu_keywords;
468 /* Nonzero means do emit exported implementations of functions even if
469 they can be inlined. */
471 int flag_implement_inlines = 1;
473 /* Nonzero means do emit exported implementations of templates, instead of
474 multiple static copies in each file that needs a definition. */
476 int flag_external_templates;
478 /* Nonzero means that the decision to emit or not emit the implementation of a
479 template depends on where the template is instantiated, rather than where
480 it is defined. */
482 int flag_alt_external_templates;
484 /* Nonzero means that implicit instantiations will be emitted if needed. */
486 int flag_implicit_templates = 1;
488 /* Nonzero means that implicit instantiations of inline templates will be
489 emitted if needed, even if instantiations of non-inline templates
490 aren't. */
492 int flag_implicit_inline_templates = 1;
494 /* Nonzero means generate separate instantiation control files and
495 juggle them at link time. */
497 int flag_use_repository;
499 /* Nonzero if we want to issue diagnostics that the standard says are not
500 required. */
502 int flag_optional_diags = 1;
504 /* Nonzero means we should attempt to elide constructors when possible. */
506 int flag_elide_constructors = 1;
508 /* Nonzero means that member functions defined in class scope are
509 inline by default. */
511 int flag_default_inline = 1;
513 /* Controls whether compiler generates 'type descriptor' that give
514 run-time type information. */
516 int flag_rtti = 1;
518 /* Nonzero if we want to conserve space in the .o files. We do this
519 by putting uninitialized data and runtime initialized data into
520 .common instead of .data at the expense of not flagging multiple
521 definitions. */
523 int flag_conserve_space;
525 /* Nonzero if we want to obey access control semantics. */
527 int flag_access_control = 1;
529 /* Nonzero if we want to check the return value of new and avoid calling
530 constructors if it is a null pointer. */
532 int flag_check_new;
534 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
535 initialization variables.
536 0: Old rules, set by -fno-for-scope.
537 2: New ISO rules, set by -ffor-scope.
538 1: Try to implement new ISO rules, but with backup compatibility
539 (and warnings). This is the default, for now. */
541 int flag_new_for_scope = 1;
543 /* Nonzero if we want to emit defined symbols with common-like linkage as
544 weak symbols where possible, in order to conform to C++ semantics.
545 Otherwise, emit them as local symbols. */
547 int flag_weak = 1;
549 /* Nonzero to use __cxa_atexit, rather than atexit, to register
550 destructors for local statics and global objects. */
552 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
554 /* Nonzero means output .vtable_{entry,inherit} for use in doing vtable gc. */
556 int flag_vtable_gc;
558 /* Nonzero means make the default pedwarns warnings instead of errors.
559 The value of this flag is ignored if -pedantic is specified. */
561 int flag_permissive;
563 /* Nonzero means to implement standard semantics for exception
564 specifications, calling unexpected if an exception is thrown that
565 doesn't match the specification. Zero means to treat them as
566 assertions and optimize accordingly, but not check them. */
568 int flag_enforce_eh_specs = 1;
570 /* The version of the C++ ABI in use. The following values are
571 allowed:
573 0: The version of the ABI believed most conformant with the
574 C++ ABI specification. This ABI may change as bugs are
575 discovered and fixed. Therefore, 0 will not necessarily
576 indicate the same ABI in different versions of G++.
578 1: The version of the ABI first used in G++ 3.2.
580 Additional positive integers will be assigned as new versions of
581 the ABI become the default version of the ABI. */
583 int flag_abi_version = 1;
585 /* Nonzero means warn about things that will change when compiling
586 with an ABI-compliant compiler. */
588 int warn_abi = 0;
590 /* Nonzero means warn about implicit declarations. */
592 int warn_implicit = 1;
594 /* Nonzero means warn when all ctors or dtors are private, and the class
595 has no friends. */
597 int warn_ctor_dtor_privacy = 1;
599 /* Nonzero means warn in function declared in derived class has the
600 same name as a virtual in the base class, but fails to match the
601 type signature of any virtual function in the base class. */
603 int warn_overloaded_virtual;
605 /* Nonzero means warn when declaring a class that has a non virtual
606 destructor, when it really ought to have a virtual one. */
608 int warn_nonvdtor;
610 /* Nonzero means warn when the compiler will reorder code. */
612 int warn_reorder;
614 /* Nonzero means warn when synthesis behavior differs from Cfront's. */
616 int warn_synth;
618 /* Nonzero means warn when we convert a pointer to member function
619 into a pointer to (void or function). */
621 int warn_pmf2ptr = 1;
623 /* Nonzero means warn about violation of some Effective C++ style rules. */
625 int warn_ecpp;
627 /* Nonzero means warn where overload resolution chooses a promotion from
628 unsigned to signed over a conversion to an unsigned of the same size. */
630 int warn_sign_promo;
632 /* Nonzero means warn when an old-style cast is used. */
634 int warn_old_style_cast;
636 /* Nonzero means warn when non-templatized friend functions are
637 declared within a template */
639 int warn_nontemplate_friend = 1;
641 /* Nonzero means complain about deprecated features. */
643 int warn_deprecated = 1;
645 /* Maximum template instantiation depth. This limit is rather
646 arbitrary, but it exists to limit the time it takes to notice
647 infinite template instantiations. */
649 int max_tinst_depth = 500;
653 /* The elements of `ridpointers' are identifier nodes for the reserved
654 type names and storage classes. It is indexed by a RID_... value. */
655 tree *ridpointers;
657 tree (*make_fname_decl) PARAMS ((tree, int));
659 /* If non-NULL, the address of a language-specific function that
660 returns 1 for language-specific statement codes. */
661 int (*lang_statement_code_p) PARAMS ((enum tree_code));
663 /* If non-NULL, the address of a language-specific function that takes
664 any action required right before expand_function_end is called. */
665 void (*lang_expand_function_end) PARAMS ((void));
667 /* Nonzero means the expression being parsed will never be evaluated.
668 This is a count, since unevaluated expressions can nest. */
669 int skip_evaluation;
671 /* Information about how a function name is generated. */
672 struct fname_var_t
674 tree *const decl; /* pointer to the VAR_DECL. */
675 const unsigned rid; /* RID number for the identifier. */
676 const int pretty; /* How pretty is it? */
679 /* The three ways of getting then name of the current function. */
681 const struct fname_var_t fname_vars[] =
683 /* C99 compliant __func__, must be first. */
684 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
685 /* GCC __FUNCTION__ compliant. */
686 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
687 /* GCC __PRETTY_FUNCTION__ compliant. */
688 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
689 {NULL, 0, 0},
692 static int constant_fits_type_p PARAMS ((tree, tree));
694 /* Keep a stack of if statements. We record the number of compound
695 statements seen up to the if keyword, as well as the line number
696 and file of the if. If a potentially ambiguous else is seen, that
697 fact is recorded; the warning is issued when we can be sure that
698 the enclosing if statement does not have an else branch. */
699 typedef struct
701 int compstmt_count;
702 int line;
703 const char *file;
704 int needs_warning;
705 tree if_stmt;
706 } if_elt;
708 static if_elt *if_stack;
710 /* Amount of space in the if statement stack. */
711 static int if_stack_space = 0;
713 /* Stack pointer. */
714 static int if_stack_pointer = 0;
716 static tree handle_packed_attribute PARAMS ((tree *, tree, tree, int,
717 bool *));
718 static tree handle_nocommon_attribute PARAMS ((tree *, tree, tree, int,
719 bool *));
720 static tree handle_common_attribute PARAMS ((tree *, tree, tree, int,
721 bool *));
722 static tree handle_noreturn_attribute PARAMS ((tree *, tree, tree, int,
723 bool *));
724 static tree handle_noinline_attribute PARAMS ((tree *, tree, tree, int,
725 bool *));
726 static tree handle_always_inline_attribute PARAMS ((tree *, tree, tree, int,
727 bool *));
728 static tree handle_used_attribute PARAMS ((tree *, tree, tree, int,
729 bool *));
730 static tree handle_unused_attribute PARAMS ((tree *, tree, tree, int,
731 bool *));
732 static tree handle_const_attribute PARAMS ((tree *, tree, tree, int,
733 bool *));
734 static tree handle_transparent_union_attribute PARAMS ((tree *, tree, tree,
735 int, bool *));
736 static tree handle_constructor_attribute PARAMS ((tree *, tree, tree, int,
737 bool *));
738 static tree handle_destructor_attribute PARAMS ((tree *, tree, tree, int,
739 bool *));
740 static tree handle_mode_attribute PARAMS ((tree *, tree, tree, int,
741 bool *));
742 static tree handle_section_attribute PARAMS ((tree *, tree, tree, int,
743 bool *));
744 static tree handle_aligned_attribute PARAMS ((tree *, tree, tree, int,
745 bool *));
746 static tree handle_weak_attribute PARAMS ((tree *, tree, tree, int,
747 bool *));
748 static tree handle_alias_attribute PARAMS ((tree *, tree, tree, int,
749 bool *));
750 static tree handle_visibility_attribute PARAMS ((tree *, tree, tree, int,
751 bool *));
752 static tree handle_tls_model_attribute PARAMS ((tree *, tree, tree, int,
753 bool *));
754 static tree handle_no_instrument_function_attribute PARAMS ((tree *, tree,
755 tree, int,
756 bool *));
757 static tree handle_malloc_attribute PARAMS ((tree *, tree, tree, int,
758 bool *));
759 static tree handle_no_limit_stack_attribute PARAMS ((tree *, tree, tree, int,
760 bool *));
761 static tree handle_pure_attribute PARAMS ((tree *, tree, tree, int,
762 bool *));
763 static tree handle_deprecated_attribute PARAMS ((tree *, tree, tree, int,
764 bool *));
765 static tree handle_vector_size_attribute PARAMS ((tree *, tree, tree, int,
766 bool *));
767 static tree handle_nonnull_attribute PARAMS ((tree *, tree, tree, int,
768 bool *));
769 static tree handle_nothrow_attribute PARAMS ((tree *, tree, tree, int,
770 bool *));
771 static tree vector_size_helper PARAMS ((tree, tree));
773 static void check_function_nonnull PARAMS ((tree, tree));
774 static void check_nonnull_arg PARAMS ((void *, tree,
775 unsigned HOST_WIDE_INT));
776 static bool nonnull_check_p PARAMS ((tree, unsigned HOST_WIDE_INT));
777 static bool get_nonnull_operand PARAMS ((tree,
778 unsigned HOST_WIDE_INT *));
779 void builtin_define_std PARAMS ((const char *));
780 static void builtin_define_with_value PARAMS ((const char *, const char *,
781 int));
782 static void builtin_define_with_int_value PARAMS ((const char *,
783 HOST_WIDE_INT));
784 static void builtin_define_with_hex_fp_value PARAMS ((const char *, tree,
785 int, const char *,
786 const char *));
787 static void builtin_define_type_max PARAMS ((const char *, tree, int));
788 static void builtin_define_type_precision PARAMS ((const char *, tree));
789 static void builtin_define_float_constants PARAMS ((const char *,
790 const char *, tree));
792 /* Table of machine-independent attributes common to all C-like languages. */
793 const struct attribute_spec c_common_attribute_table[] =
795 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
796 { "packed", 0, 0, false, false, false,
797 handle_packed_attribute },
798 { "nocommon", 0, 0, true, false, false,
799 handle_nocommon_attribute },
800 { "common", 0, 0, true, false, false,
801 handle_common_attribute },
802 /* FIXME: logically, noreturn attributes should be listed as
803 "false, true, true" and apply to function types. But implementing this
804 would require all the places in the compiler that use TREE_THIS_VOLATILE
805 on a decl to identify non-returning functions to be located and fixed
806 to check the function type instead. */
807 { "noreturn", 0, 0, true, false, false,
808 handle_noreturn_attribute },
809 { "volatile", 0, 0, true, false, false,
810 handle_noreturn_attribute },
811 { "noinline", 0, 0, true, false, false,
812 handle_noinline_attribute },
813 { "always_inline", 0, 0, true, false, false,
814 handle_always_inline_attribute },
815 { "used", 0, 0, true, false, false,
816 handle_used_attribute },
817 { "unused", 0, 0, false, false, false,
818 handle_unused_attribute },
819 /* The same comments as for noreturn attributes apply to const ones. */
820 { "const", 0, 0, true, false, false,
821 handle_const_attribute },
822 { "transparent_union", 0, 0, false, false, false,
823 handle_transparent_union_attribute },
824 { "constructor", 0, 0, true, false, false,
825 handle_constructor_attribute },
826 { "destructor", 0, 0, true, false, false,
827 handle_destructor_attribute },
828 { "mode", 1, 1, false, true, false,
829 handle_mode_attribute },
830 { "section", 1, 1, true, false, false,
831 handle_section_attribute },
832 { "aligned", 0, 1, false, false, false,
833 handle_aligned_attribute },
834 { "weak", 0, 0, true, false, false,
835 handle_weak_attribute },
836 { "alias", 1, 1, true, false, false,
837 handle_alias_attribute },
838 { "no_instrument_function", 0, 0, true, false, false,
839 handle_no_instrument_function_attribute },
840 { "malloc", 0, 0, true, false, false,
841 handle_malloc_attribute },
842 { "no_stack_limit", 0, 0, true, false, false,
843 handle_no_limit_stack_attribute },
844 { "pure", 0, 0, true, false, false,
845 handle_pure_attribute },
846 { "deprecated", 0, 0, false, false, false,
847 handle_deprecated_attribute },
848 { "vector_size", 1, 1, false, true, false,
849 handle_vector_size_attribute },
850 { "visibility", 1, 1, true, false, false,
851 handle_visibility_attribute },
852 { "tls_model", 1, 1, true, false, false,
853 handle_tls_model_attribute },
854 { "nonnull", 0, -1, false, true, true,
855 handle_nonnull_attribute },
856 { "nothrow", 0, 0, true, false, false,
857 handle_nothrow_attribute },
858 { "may_alias", 0, 0, false, true, false, NULL },
859 { NULL, 0, 0, false, false, false, NULL }
862 /* Give the specifications for the format attributes, used by C and all
863 descendents. */
865 const struct attribute_spec c_common_format_attribute_table[] =
867 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
868 { "format", 3, 3, false, true, true,
869 handle_format_attribute },
870 { "format_arg", 1, 1, false, true, true,
871 handle_format_arg_attribute },
872 { NULL, 0, 0, false, false, false, NULL }
875 /* Record the start of an if-then, and record the start of it
876 for ambiguous else detection.
878 COND is the condition for the if-then statement.
880 IF_STMT is the statement node that has already been created for
881 this if-then statement. It is created before parsing the
882 condition to keep line number information accurate. */
884 void
885 c_expand_start_cond (cond, compstmt_count, if_stmt)
886 tree cond;
887 int compstmt_count;
888 tree if_stmt;
890 /* Make sure there is enough space on the stack. */
891 if (if_stack_space == 0)
893 if_stack_space = 10;
894 if_stack = (if_elt *) xmalloc (10 * sizeof (if_elt));
896 else if (if_stack_space == if_stack_pointer)
898 if_stack_space += 10;
899 if_stack = (if_elt *) xrealloc (if_stack, if_stack_space * sizeof (if_elt));
902 IF_COND (if_stmt) = cond;
903 add_stmt (if_stmt);
905 /* Record this if statement. */
906 if_stack[if_stack_pointer].compstmt_count = compstmt_count;
907 if_stack[if_stack_pointer].file = input_filename;
908 if_stack[if_stack_pointer].line = lineno;
909 if_stack[if_stack_pointer].needs_warning = 0;
910 if_stack[if_stack_pointer].if_stmt = if_stmt;
911 if_stack_pointer++;
914 /* Called after the then-clause for an if-statement is processed. */
916 void
917 c_finish_then ()
919 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
920 RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
923 /* Record the end of an if-then. Optionally warn if a nested
924 if statement had an ambiguous else clause. */
926 void
927 c_expand_end_cond ()
929 if_stack_pointer--;
930 if (if_stack[if_stack_pointer].needs_warning)
931 warning_with_file_and_line (if_stack[if_stack_pointer].file,
932 if_stack[if_stack_pointer].line,
933 "suggest explicit braces to avoid ambiguous `else'");
934 last_expr_type = NULL_TREE;
937 /* Called between the then-clause and the else-clause
938 of an if-then-else. */
940 void
941 c_expand_start_else ()
943 /* An ambiguous else warning must be generated for the enclosing if
944 statement, unless we see an else branch for that one, too. */
945 if (warn_parentheses
946 && if_stack_pointer > 1
947 && (if_stack[if_stack_pointer - 1].compstmt_count
948 == if_stack[if_stack_pointer - 2].compstmt_count))
949 if_stack[if_stack_pointer - 2].needs_warning = 1;
951 /* Even if a nested if statement had an else branch, it can't be
952 ambiguous if this one also has an else. So don't warn in that
953 case. Also don't warn for any if statements nested in this else. */
954 if_stack[if_stack_pointer - 1].needs_warning = 0;
955 if_stack[if_stack_pointer - 1].compstmt_count--;
958 /* Called after the else-clause for an if-statement is processed. */
960 void
961 c_finish_else ()
963 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
964 RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
967 /* Begin an if-statement. Returns a newly created IF_STMT if
968 appropriate.
970 Unlike the C++ front-end, we do not call add_stmt here; it is
971 probably safe to do so, but I am not very familiar with this
972 code so I am being extra careful not to change its behavior
973 beyond what is strictly necessary for correctness. */
975 tree
976 c_begin_if_stmt ()
978 tree r;
979 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
980 return r;
983 /* Begin a while statement. Returns a newly created WHILE_STMT if
984 appropriate.
986 Unlike the C++ front-end, we do not call add_stmt here; it is
987 probably safe to do so, but I am not very familiar with this
988 code so I am being extra careful not to change its behavior
989 beyond what is strictly necessary for correctness. */
991 tree
992 c_begin_while_stmt ()
994 tree r;
995 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
996 return r;
999 void
1000 c_finish_while_stmt_cond (cond, while_stmt)
1001 tree while_stmt;
1002 tree cond;
1004 WHILE_COND (while_stmt) = cond;
1007 /* Push current bindings for the function name VAR_DECLS. */
1009 void
1010 start_fname_decls ()
1012 unsigned ix;
1013 tree saved = NULL_TREE;
1015 for (ix = 0; fname_vars[ix].decl; ix++)
1017 tree decl = *fname_vars[ix].decl;
1019 if (decl)
1021 saved = tree_cons (decl, build_int_2 (ix, 0), saved);
1022 *fname_vars[ix].decl = NULL_TREE;
1025 if (saved || saved_function_name_decls)
1026 /* Normally they'll have been NULL, so only push if we've got a
1027 stack, or they are non-NULL. */
1028 saved_function_name_decls = tree_cons (saved, NULL_TREE,
1029 saved_function_name_decls);
1032 /* Finish up the current bindings, adding them into the
1033 current function's statement tree. This is done by wrapping the
1034 function's body in a COMPOUND_STMT containing these decls too. This
1035 must be done _before_ finish_stmt_tree is called. If there is no
1036 current function, we must be at file scope and no statements are
1037 involved. Pop the previous bindings. */
1039 void
1040 finish_fname_decls ()
1042 unsigned ix;
1043 tree body = NULL_TREE;
1044 tree stack = saved_function_name_decls;
1046 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
1047 body = chainon (TREE_VALUE (stack), body);
1049 if (body)
1051 /* They were called into existence, so add to statement tree. */
1052 body = chainon (body,
1053 TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)));
1054 body = build_stmt (COMPOUND_STMT, body);
1056 COMPOUND_STMT_NO_SCOPE (body) = 1;
1057 TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)) = body;
1060 for (ix = 0; fname_vars[ix].decl; ix++)
1061 *fname_vars[ix].decl = NULL_TREE;
1063 if (stack)
1065 /* We had saved values, restore them. */
1066 tree saved;
1068 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
1070 tree decl = TREE_PURPOSE (saved);
1071 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
1073 *fname_vars[ix].decl = decl;
1075 stack = TREE_CHAIN (stack);
1077 saved_function_name_decls = stack;
1080 /* Return the text name of the current function, suitable prettified
1081 by PRETTY_P. */
1083 const char *
1084 fname_as_string (pretty_p)
1085 int pretty_p;
1087 const char *name = NULL;
1089 if (pretty_p)
1090 name = (current_function_decl
1091 ? (*lang_hooks.decl_printable_name) (current_function_decl, 2)
1092 : "top level");
1093 else if (current_function_decl && DECL_NAME (current_function_decl))
1094 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
1095 else
1096 name = "";
1097 return name;
1100 /* Return the text name of the current function, formatted as
1101 required by the supplied RID value. */
1103 const char *
1104 fname_string (rid)
1105 unsigned rid;
1107 unsigned ix;
1109 for (ix = 0; fname_vars[ix].decl; ix++)
1110 if (fname_vars[ix].rid == rid)
1111 break;
1112 return fname_as_string (fname_vars[ix].pretty);
1115 /* Return the VAR_DECL for a const char array naming the current
1116 function. If the VAR_DECL has not yet been created, create it
1117 now. RID indicates how it should be formatted and IDENTIFIER_NODE
1118 ID is its name (unfortunately C and C++ hold the RID values of
1119 keywords in different places, so we can't derive RID from ID in
1120 this language independent code. */
1122 tree
1123 fname_decl (rid, id)
1124 unsigned rid;
1125 tree id;
1127 unsigned ix;
1128 tree decl = NULL_TREE;
1130 for (ix = 0; fname_vars[ix].decl; ix++)
1131 if (fname_vars[ix].rid == rid)
1132 break;
1134 decl = *fname_vars[ix].decl;
1135 if (!decl)
1137 tree saved_last_tree = last_tree;
1138 /* If a tree is built here, it would normally have the lineno of
1139 the current statement. Later this tree will be moved to the
1140 beginning of the function and this line number will be wrong.
1141 To avoid this problem set the lineno to 0 here; that prevents
1142 it from appearing in the RTL. */
1143 int saved_lineno = lineno;
1144 lineno = 0;
1146 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
1147 if (last_tree != saved_last_tree)
1149 /* We created some statement tree for the decl. This belongs
1150 at the start of the function, so remove it now and reinsert
1151 it after the function is complete. */
1152 tree stmts = TREE_CHAIN (saved_last_tree);
1154 TREE_CHAIN (saved_last_tree) = NULL_TREE;
1155 last_tree = saved_last_tree;
1156 saved_function_name_decls = tree_cons (decl, stmts,
1157 saved_function_name_decls);
1159 *fname_vars[ix].decl = decl;
1160 lineno = saved_lineno;
1162 if (!ix && !current_function_decl)
1163 pedwarn_with_decl (decl, "`%s' is not defined outside of function scope");
1165 return decl;
1168 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
1170 tree
1171 fix_string_type (value)
1172 tree value;
1174 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
1175 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
1176 const int nchars_max = flag_isoc99 ? 4095 : 509;
1177 int length = TREE_STRING_LENGTH (value);
1178 int nchars;
1180 /* Compute the number of elements, for the array type. */
1181 nchars = wide_flag ? length / wchar_bytes : length;
1183 if (pedantic && nchars - 1 > nchars_max && c_language == clk_c)
1184 pedwarn ("string length `%d' is greater than the length `%d' ISO C%d compilers are required to support",
1185 nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
1187 /* Create the array type for the string constant.
1188 -Wwrite-strings says make the string constant an array of const char
1189 so that copying it to a non-const pointer will get a warning.
1190 For C++, this is the standard behavior. */
1191 if (flag_const_strings && ! flag_writable_strings)
1193 tree elements
1194 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
1195 1, 0);
1196 TREE_TYPE (value)
1197 = build_array_type (elements,
1198 build_index_type (build_int_2 (nchars - 1, 0)));
1200 else
1201 TREE_TYPE (value)
1202 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
1203 build_index_type (build_int_2 (nchars - 1, 0)));
1205 TREE_CONSTANT (value) = 1;
1206 TREE_READONLY (value) = ! flag_writable_strings;
1207 TREE_STATIC (value) = 1;
1208 return value;
1211 /* Given a VARRAY of STRING_CST nodes, concatenate them into one
1212 STRING_CST. */
1214 tree
1215 combine_strings (strings)
1216 varray_type strings;
1218 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
1219 const int nstrings = VARRAY_ACTIVE_SIZE (strings);
1220 tree value, t;
1221 int length = 1;
1222 int wide_length = 0;
1223 int wide_flag = 0;
1224 int i;
1225 char *p, *q;
1227 /* Don't include the \0 at the end of each substring. Count wide
1228 strings and ordinary strings separately. */
1229 for (i = 0; i < nstrings; ++i)
1231 t = VARRAY_TREE (strings, i);
1233 if (TREE_TYPE (t) == wchar_array_type_node)
1235 wide_length += TREE_STRING_LENGTH (t) - wchar_bytes;
1236 wide_flag = 1;
1238 else
1240 length += (TREE_STRING_LENGTH (t) - 1);
1241 if (C_ARTIFICIAL_STRING_P (t) && !in_system_header)
1242 warning ("concatenation of string literals with __FUNCTION__ is deprecated");
1246 /* If anything is wide, the non-wides will be converted,
1247 which makes them take more space. */
1248 if (wide_flag)
1249 length = length * wchar_bytes + wide_length;
1251 p = xmalloc (length);
1253 /* Copy the individual strings into the new combined string.
1254 If the combined string is wide, convert the chars to ints
1255 for any individual strings that are not wide. */
1257 q = p;
1258 for (i = 0; i < nstrings; ++i)
1260 int len, this_wide;
1262 t = VARRAY_TREE (strings, i);
1263 this_wide = TREE_TYPE (t) == wchar_array_type_node;
1264 len = TREE_STRING_LENGTH (t) - (this_wide ? wchar_bytes : 1);
1265 if (this_wide == wide_flag)
1267 memcpy (q, TREE_STRING_POINTER (t), len);
1268 q += len;
1270 else
1272 const int nzeros = (TYPE_PRECISION (wchar_type_node)
1273 / BITS_PER_UNIT) - 1;
1274 int j, k;
1276 if (BYTES_BIG_ENDIAN)
1278 for (k = 0; k < len; k++)
1280 for (j = 0; j < nzeros; j++)
1281 *q++ = 0;
1282 *q++ = TREE_STRING_POINTER (t)[k];
1285 else
1287 for (k = 0; k < len; k++)
1289 *q++ = TREE_STRING_POINTER (t)[k];
1290 for (j = 0; j < nzeros; j++)
1291 *q++ = 0;
1297 /* Nul terminate the string. */
1298 if (wide_flag)
1300 for (i = 0; i < wchar_bytes; i++)
1301 *q++ = 0;
1303 else
1304 *q = 0;
1306 value = build_string (length, p);
1307 free (p);
1309 if (wide_flag)
1310 TREE_TYPE (value) = wchar_array_type_node;
1311 else
1312 TREE_TYPE (value) = char_array_type_node;
1314 return value;
1317 static int is_valid_printf_arglist PARAMS ((tree));
1318 static rtx c_expand_builtin PARAMS ((tree, rtx, enum machine_mode, enum expand_modifier));
1319 static rtx c_expand_builtin_printf PARAMS ((tree, rtx, enum machine_mode,
1320 enum expand_modifier, int, int));
1321 static rtx c_expand_builtin_fprintf PARAMS ((tree, rtx, enum machine_mode,
1322 enum expand_modifier, int, int));
1324 /* Print a warning if a constant expression had overflow in folding.
1325 Invoke this function on every expression that the language
1326 requires to be a constant expression.
1327 Note the ANSI C standard says it is erroneous for a
1328 constant expression to overflow. */
1330 void
1331 constant_expression_warning (value)
1332 tree value;
1334 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
1335 || TREE_CODE (value) == VECTOR_CST
1336 || TREE_CODE (value) == COMPLEX_CST)
1337 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
1338 pedwarn ("overflow in constant expression");
1341 /* Print a warning if an expression had overflow in folding.
1342 Invoke this function on every expression that
1343 (1) appears in the source code, and
1344 (2) might be a constant expression that overflowed, and
1345 (3) is not already checked by convert_and_check;
1346 however, do not invoke this function on operands of explicit casts. */
1348 void
1349 overflow_warning (value)
1350 tree value;
1352 if ((TREE_CODE (value) == INTEGER_CST
1353 || (TREE_CODE (value) == COMPLEX_CST
1354 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
1355 && TREE_OVERFLOW (value))
1357 TREE_OVERFLOW (value) = 0;
1358 if (skip_evaluation == 0)
1359 warning ("integer overflow in expression");
1361 else if ((TREE_CODE (value) == REAL_CST
1362 || (TREE_CODE (value) == COMPLEX_CST
1363 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
1364 && TREE_OVERFLOW (value))
1366 TREE_OVERFLOW (value) = 0;
1367 if (skip_evaluation == 0)
1368 warning ("floating point overflow in expression");
1370 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
1372 TREE_OVERFLOW (value) = 0;
1373 if (skip_evaluation == 0)
1374 warning ("vector overflow in expression");
1378 /* Print a warning if a large constant is truncated to unsigned,
1379 or if -Wconversion is used and a constant < 0 is converted to unsigned.
1380 Invoke this function on every expression that might be implicitly
1381 converted to an unsigned type. */
1383 void
1384 unsigned_conversion_warning (result, operand)
1385 tree result, operand;
1387 tree type = TREE_TYPE (result);
1389 if (TREE_CODE (operand) == INTEGER_CST
1390 && TREE_CODE (type) == INTEGER_TYPE
1391 && TREE_UNSIGNED (type)
1392 && skip_evaluation == 0
1393 && !int_fits_type_p (operand, type))
1395 if (!int_fits_type_p (operand, c_common_signed_type (type)))
1396 /* This detects cases like converting -129 or 256 to unsigned char. */
1397 warning ("large integer implicitly truncated to unsigned type");
1398 else if (warn_conversion)
1399 warning ("negative integer implicitly converted to unsigned type");
1403 /* Nonzero if constant C has a value that is permissible
1404 for type TYPE (an INTEGER_TYPE). */
1406 static int
1407 constant_fits_type_p (c, type)
1408 tree c, type;
1410 if (TREE_CODE (c) == INTEGER_CST)
1411 return int_fits_type_p (c, type);
1413 c = convert (type, c);
1414 return !TREE_OVERFLOW (c);
1417 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1418 Invoke this function on every expression that is converted implicitly,
1419 i.e. because of language rules and not because of an explicit cast. */
1421 tree
1422 convert_and_check (type, expr)
1423 tree type, expr;
1425 tree t = convert (type, expr);
1426 if (TREE_CODE (t) == INTEGER_CST)
1428 if (TREE_OVERFLOW (t))
1430 TREE_OVERFLOW (t) = 0;
1432 /* Do not diagnose overflow in a constant expression merely
1433 because a conversion overflowed. */
1434 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
1436 /* No warning for converting 0x80000000 to int. */
1437 if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
1438 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1439 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1440 /* If EXPR fits in the unsigned version of TYPE,
1441 don't warn unless pedantic. */
1442 if ((pedantic
1443 || TREE_UNSIGNED (type)
1444 || ! constant_fits_type_p (expr,
1445 c_common_unsigned_type (type)))
1446 && skip_evaluation == 0)
1447 warning ("overflow in implicit constant conversion");
1449 else
1450 unsigned_conversion_warning (t, expr);
1452 return t;
1455 /* A node in a list that describes references to variables (EXPR), which are
1456 either read accesses if WRITER is zero, or write accesses, in which case
1457 WRITER is the parent of EXPR. */
1458 struct tlist
1460 struct tlist *next;
1461 tree expr, writer;
1464 /* Used to implement a cache the results of a call to verify_tree. We only
1465 use this for SAVE_EXPRs. */
1466 struct tlist_cache
1468 struct tlist_cache *next;
1469 struct tlist *cache_before_sp;
1470 struct tlist *cache_after_sp;
1471 tree expr;
1474 /* Obstack to use when allocating tlist structures, and corresponding
1475 firstobj. */
1476 static struct obstack tlist_obstack;
1477 static char *tlist_firstobj = 0;
1479 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1480 warnings. */
1481 static struct tlist *warned_ids;
1482 /* SAVE_EXPRs need special treatment. We process them only once and then
1483 cache the results. */
1484 static struct tlist_cache *save_expr_cache;
1486 static void add_tlist PARAMS ((struct tlist **, struct tlist *, tree, int));
1487 static void merge_tlist PARAMS ((struct tlist **, struct tlist *, int));
1488 static void verify_tree PARAMS ((tree, struct tlist **, struct tlist **, tree));
1489 static int warning_candidate_p PARAMS ((tree));
1490 static void warn_for_collisions PARAMS ((struct tlist *));
1491 static void warn_for_collisions_1 PARAMS ((tree, tree, struct tlist *, int));
1492 static struct tlist *new_tlist PARAMS ((struct tlist *, tree, tree));
1493 static void verify_sequence_points PARAMS ((tree));
1495 /* Create a new struct tlist and fill in its fields. */
1496 static struct tlist *
1497 new_tlist (next, t, writer)
1498 struct tlist *next;
1499 tree t;
1500 tree writer;
1502 struct tlist *l;
1503 l = (struct tlist *) obstack_alloc (&tlist_obstack, sizeof *l);
1504 l->next = next;
1505 l->expr = t;
1506 l->writer = writer;
1507 return l;
1510 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1511 is nonnull, we ignore any node we find which has a writer equal to it. */
1513 static void
1514 add_tlist (to, add, exclude_writer, copy)
1515 struct tlist **to;
1516 struct tlist *add;
1517 tree exclude_writer;
1518 int copy;
1520 while (add)
1522 struct tlist *next = add->next;
1523 if (! copy)
1524 add->next = *to;
1525 if (! exclude_writer || add->writer != exclude_writer)
1526 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1527 add = next;
1531 /* Merge the nodes of ADD into TO. This merging process is done so that for
1532 each variable that already exists in TO, no new node is added; however if
1533 there is a write access recorded in ADD, and an occurrence on TO is only
1534 a read access, then the occurrence in TO will be modified to record the
1535 write. */
1537 static void
1538 merge_tlist (to, add, copy)
1539 struct tlist **to;
1540 struct tlist *add;
1541 int copy;
1543 struct tlist **end = to;
1545 while (*end)
1546 end = &(*end)->next;
1548 while (add)
1550 int found = 0;
1551 struct tlist *tmp2;
1552 struct tlist *next = add->next;
1554 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1555 if (tmp2->expr == add->expr)
1557 found = 1;
1558 if (! tmp2->writer)
1559 tmp2->writer = add->writer;
1561 if (! found)
1563 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1564 end = &(*end)->next;
1565 *end = 0;
1567 add = next;
1571 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1572 references in list LIST conflict with it, excluding reads if ONLY writers
1573 is nonzero. */
1575 static void
1576 warn_for_collisions_1 (written, writer, list, only_writes)
1577 tree written, writer;
1578 struct tlist *list;
1579 int only_writes;
1581 struct tlist *tmp;
1583 /* Avoid duplicate warnings. */
1584 for (tmp = warned_ids; tmp; tmp = tmp->next)
1585 if (tmp->expr == written)
1586 return;
1588 while (list)
1590 if (list->expr == written
1591 && list->writer != writer
1592 && (! only_writes || list->writer))
1594 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1595 warning ("operation on `%s' may be undefined",
1596 IDENTIFIER_POINTER (DECL_NAME (list->expr)));
1598 list = list->next;
1602 /* Given a list LIST of references to variables, find whether any of these
1603 can cause conflicts due to missing sequence points. */
1605 static void
1606 warn_for_collisions (list)
1607 struct tlist *list;
1609 struct tlist *tmp;
1611 for (tmp = list; tmp; tmp = tmp->next)
1613 if (tmp->writer)
1614 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1618 /* Return nonzero if X is a tree that can be verified by the sequence point
1619 warnings. */
1620 static int
1621 warning_candidate_p (x)
1622 tree x;
1624 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1627 /* Walk the tree X, and record accesses to variables. If X is written by the
1628 parent tree, WRITER is the parent.
1629 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1630 expression or its only operand forces a sequence point, then everything up
1631 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1632 in PNO_SP.
1633 Once we return, we will have emitted warnings if any subexpression before
1634 such a sequence point could be undefined. On a higher level, however, the
1635 sequence point may not be relevant, and we'll merge the two lists.
1637 Example: (b++, a) + b;
1638 The call that processes the COMPOUND_EXPR will store the increment of B
1639 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1640 processes the PLUS_EXPR will need to merge the two lists so that
1641 eventually, all accesses end up on the same list (and we'll warn about the
1642 unordered subexpressions b++ and b.
1644 A note on merging. If we modify the former example so that our expression
1645 becomes
1646 (b++, b) + a
1647 care must be taken not simply to add all three expressions into the final
1648 PNO_SP list. The function merge_tlist takes care of that by merging the
1649 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1650 way, so that no more than one access to B is recorded. */
1652 static void
1653 verify_tree (x, pbefore_sp, pno_sp, writer)
1654 tree x;
1655 struct tlist **pbefore_sp, **pno_sp;
1656 tree writer;
1658 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1659 enum tree_code code;
1660 char class;
1662 /* X may be NULL if it is the operand of an empty statement expression
1663 ({ }). */
1664 if (x == NULL)
1665 return;
1667 restart:
1668 code = TREE_CODE (x);
1669 class = TREE_CODE_CLASS (code);
1671 if (warning_candidate_p (x))
1673 *pno_sp = new_tlist (*pno_sp, x, writer);
1674 return;
1677 switch (code)
1679 case CONSTRUCTOR:
1680 return;
1682 case COMPOUND_EXPR:
1683 case TRUTH_ANDIF_EXPR:
1684 case TRUTH_ORIF_EXPR:
1685 tmp_before = tmp_nosp = tmp_list3 = 0;
1686 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1687 warn_for_collisions (tmp_nosp);
1688 merge_tlist (pbefore_sp, tmp_before, 0);
1689 merge_tlist (pbefore_sp, tmp_nosp, 0);
1690 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1691 merge_tlist (pbefore_sp, tmp_list3, 0);
1692 return;
1694 case COND_EXPR:
1695 tmp_before = tmp_list2 = 0;
1696 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1697 warn_for_collisions (tmp_list2);
1698 merge_tlist (pbefore_sp, tmp_before, 0);
1699 merge_tlist (pbefore_sp, tmp_list2, 1);
1701 tmp_list3 = tmp_nosp = 0;
1702 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1703 warn_for_collisions (tmp_nosp);
1704 merge_tlist (pbefore_sp, tmp_list3, 0);
1706 tmp_list3 = tmp_list2 = 0;
1707 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1708 warn_for_collisions (tmp_list2);
1709 merge_tlist (pbefore_sp, tmp_list3, 0);
1710 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1711 two first, to avoid warning for (a ? b++ : b++). */
1712 merge_tlist (&tmp_nosp, tmp_list2, 0);
1713 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1714 return;
1716 case PREDECREMENT_EXPR:
1717 case PREINCREMENT_EXPR:
1718 case POSTDECREMENT_EXPR:
1719 case POSTINCREMENT_EXPR:
1720 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1721 return;
1723 case MODIFY_EXPR:
1724 tmp_before = tmp_nosp = tmp_list3 = 0;
1725 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1726 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1727 /* Expressions inside the LHS are not ordered wrt. the sequence points
1728 in the RHS. Example:
1729 *a = (a++, 2)
1730 Despite the fact that the modification of "a" is in the before_sp
1731 list (tmp_before), it conflicts with the use of "a" in the LHS.
1732 We can handle this by adding the contents of tmp_list3
1733 to those of tmp_before, and redoing the collision warnings for that
1734 list. */
1735 add_tlist (&tmp_before, tmp_list3, x, 1);
1736 warn_for_collisions (tmp_before);
1737 /* Exclude the LHS itself here; we first have to merge it into the
1738 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1739 didn't exclude the LHS, we'd get it twice, once as a read and once
1740 as a write. */
1741 add_tlist (pno_sp, tmp_list3, x, 0);
1742 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1744 merge_tlist (pbefore_sp, tmp_before, 0);
1745 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1746 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1747 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1748 return;
1750 case CALL_EXPR:
1751 /* We need to warn about conflicts among arguments and conflicts between
1752 args and the function address. Side effects of the function address,
1753 however, are not ordered by the sequence point of the call. */
1754 tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1755 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1756 if (TREE_OPERAND (x, 1))
1757 verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1758 merge_tlist (&tmp_list3, tmp_list2, 0);
1759 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1760 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1761 warn_for_collisions (tmp_before);
1762 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1763 return;
1765 case TREE_LIST:
1766 /* Scan all the list, e.g. indices of multi dimensional array. */
1767 while (x)
1769 tmp_before = tmp_nosp = 0;
1770 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1771 merge_tlist (&tmp_nosp, tmp_before, 0);
1772 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1773 x = TREE_CHAIN (x);
1775 return;
1777 case SAVE_EXPR:
1779 struct tlist_cache *t;
1780 for (t = save_expr_cache; t; t = t->next)
1781 if (t->expr == x)
1782 break;
1784 if (! t)
1786 t = (struct tlist_cache *) obstack_alloc (&tlist_obstack,
1787 sizeof *t);
1788 t->next = save_expr_cache;
1789 t->expr = x;
1790 save_expr_cache = t;
1792 tmp_before = tmp_nosp = 0;
1793 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1794 warn_for_collisions (tmp_nosp);
1796 tmp_list3 = 0;
1797 while (tmp_nosp)
1799 struct tlist *t = tmp_nosp;
1800 tmp_nosp = t->next;
1801 merge_tlist (&tmp_list3, t, 0);
1803 t->cache_before_sp = tmp_before;
1804 t->cache_after_sp = tmp_list3;
1806 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1807 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1808 return;
1810 default:
1811 break;
1814 if (class == '1')
1816 if (first_rtl_op (code) == 0)
1817 return;
1818 x = TREE_OPERAND (x, 0);
1819 writer = 0;
1820 goto restart;
1823 switch (class)
1825 case 'r':
1826 case '<':
1827 case '2':
1828 case 'b':
1829 case 'e':
1830 case 's':
1831 case 'x':
1833 int lp;
1834 int max = first_rtl_op (TREE_CODE (x));
1835 for (lp = 0; lp < max; lp++)
1837 tmp_before = tmp_nosp = 0;
1838 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, NULL_TREE);
1839 merge_tlist (&tmp_nosp, tmp_before, 0);
1840 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1842 break;
1847 /* Try to warn for undefined behavior in EXPR due to missing sequence
1848 points. */
1850 static void
1851 verify_sequence_points (expr)
1852 tree expr;
1854 struct tlist *before_sp = 0, *after_sp = 0;
1856 warned_ids = 0;
1857 save_expr_cache = 0;
1858 if (tlist_firstobj == 0)
1860 gcc_obstack_init (&tlist_obstack);
1861 tlist_firstobj = obstack_alloc (&tlist_obstack, 0);
1864 verify_tree (expr, &before_sp, &after_sp, 0);
1865 warn_for_collisions (after_sp);
1866 obstack_free (&tlist_obstack, tlist_firstobj);
1869 tree
1870 c_expand_expr_stmt (expr)
1871 tree expr;
1873 /* Do default conversion if safe and possibly important,
1874 in case within ({...}). */
1875 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
1876 && (flag_isoc99 || lvalue_p (expr)))
1877 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
1878 expr = default_conversion (expr);
1880 if (warn_sequence_point)
1881 verify_sequence_points (expr);
1883 if (TREE_TYPE (expr) != error_mark_node
1884 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
1885 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
1886 error ("expression statement has incomplete type");
1888 last_expr_type = TREE_TYPE (expr);
1889 return add_stmt (build_stmt (EXPR_STMT, expr));
1892 /* Validate the expression after `case' and apply default promotions. */
1894 tree
1895 check_case_value (value)
1896 tree value;
1898 if (value == NULL_TREE)
1899 return value;
1901 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1902 STRIP_TYPE_NOPS (value);
1903 /* In C++, the following is allowed:
1905 const int i = 3;
1906 switch (...) { case i: ... }
1908 So, we try to reduce the VALUE to a constant that way. */
1909 if (c_language == clk_cplusplus)
1911 value = decl_constant_value (value);
1912 STRIP_TYPE_NOPS (value);
1913 value = fold (value);
1916 if (TREE_CODE (value) != INTEGER_CST
1917 && value != error_mark_node)
1919 error ("case label does not reduce to an integer constant");
1920 value = error_mark_node;
1922 else
1923 /* Promote char or short to int. */
1924 value = default_conversion (value);
1926 constant_expression_warning (value);
1928 return value;
1931 /* Return an integer type with BITS bits of precision,
1932 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1934 tree
1935 c_common_type_for_size (bits, unsignedp)
1936 unsigned bits;
1937 int unsignedp;
1939 if (bits == TYPE_PRECISION (integer_type_node))
1940 return unsignedp ? unsigned_type_node : integer_type_node;
1942 if (bits == TYPE_PRECISION (signed_char_type_node))
1943 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1945 if (bits == TYPE_PRECISION (short_integer_type_node))
1946 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1948 if (bits == TYPE_PRECISION (long_integer_type_node))
1949 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1951 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1952 return (unsignedp ? long_long_unsigned_type_node
1953 : long_long_integer_type_node);
1955 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1956 return (unsignedp ? widest_unsigned_literal_type_node
1957 : widest_integer_literal_type_node);
1959 if (bits <= TYPE_PRECISION (intQI_type_node))
1960 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1962 if (bits <= TYPE_PRECISION (intHI_type_node))
1963 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1965 if (bits <= TYPE_PRECISION (intSI_type_node))
1966 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1968 if (bits <= TYPE_PRECISION (intDI_type_node))
1969 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1971 return 0;
1974 /* Return a data type that has machine mode MODE.
1975 If the mode is an integer,
1976 then UNSIGNEDP selects between signed and unsigned types. */
1978 tree
1979 c_common_type_for_mode (mode, unsignedp)
1980 enum machine_mode mode;
1981 int unsignedp;
1983 if (mode == TYPE_MODE (integer_type_node))
1984 return unsignedp ? unsigned_type_node : integer_type_node;
1986 if (mode == TYPE_MODE (signed_char_type_node))
1987 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1989 if (mode == TYPE_MODE (short_integer_type_node))
1990 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1992 if (mode == TYPE_MODE (long_integer_type_node))
1993 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1995 if (mode == TYPE_MODE (long_long_integer_type_node))
1996 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1998 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1999 return unsignedp ? widest_unsigned_literal_type_node
2000 : widest_integer_literal_type_node;
2002 if (mode == QImode)
2003 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2005 if (mode == HImode)
2006 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2008 if (mode == SImode)
2009 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2011 if (mode == DImode)
2012 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2014 #if HOST_BITS_PER_WIDE_INT >= 64
2015 if (mode == TYPE_MODE (intTI_type_node))
2016 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2017 #endif
2019 if (mode == TYPE_MODE (float_type_node))
2020 return float_type_node;
2022 if (mode == TYPE_MODE (double_type_node))
2023 return double_type_node;
2025 if (mode == TYPE_MODE (long_double_type_node))
2026 return long_double_type_node;
2028 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2029 return build_pointer_type (char_type_node);
2031 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2032 return build_pointer_type (integer_type_node);
2034 switch (mode)
2036 case V16QImode:
2037 return unsignedp ? unsigned_V16QI_type_node : V16QI_type_node;
2038 case V8HImode:
2039 return unsignedp ? unsigned_V8HI_type_node : V8HI_type_node;
2040 case V4SImode:
2041 return unsignedp ? unsigned_V4SI_type_node : V4SI_type_node;
2042 case V2DImode:
2043 return unsignedp ? unsigned_V2DI_type_node : V2DI_type_node;
2044 case V2SImode:
2045 return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node;
2046 case V2HImode:
2047 return unsignedp ? unsigned_V2HI_type_node : V2HI_type_node;
2048 case V4HImode:
2049 return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node;
2050 case V8QImode:
2051 return unsignedp ? unsigned_V8QI_type_node : V8QI_type_node;
2052 case V1DImode:
2053 return unsignedp ? unsigned_V1DI_type_node : V1DI_type_node;
2054 case V16SFmode:
2055 return V16SF_type_node;
2056 case V4SFmode:
2057 return V4SF_type_node;
2058 case V2SFmode:
2059 return V2SF_type_node;
2060 case V2DFmode:
2061 return V2DF_type_node;
2062 default:
2063 break;
2066 return 0;
2069 /* Return an unsigned type the same as TYPE in other respects. */
2070 tree
2071 c_common_unsigned_type (type)
2072 tree type;
2074 tree type1 = TYPE_MAIN_VARIANT (type);
2075 if (type1 == signed_char_type_node || type1 == char_type_node)
2076 return unsigned_char_type_node;
2077 if (type1 == integer_type_node)
2078 return unsigned_type_node;
2079 if (type1 == short_integer_type_node)
2080 return short_unsigned_type_node;
2081 if (type1 == long_integer_type_node)
2082 return long_unsigned_type_node;
2083 if (type1 == long_long_integer_type_node)
2084 return long_long_unsigned_type_node;
2085 if (type1 == widest_integer_literal_type_node)
2086 return widest_unsigned_literal_type_node;
2087 #if HOST_BITS_PER_WIDE_INT >= 64
2088 if (type1 == intTI_type_node)
2089 return unsigned_intTI_type_node;
2090 #endif
2091 if (type1 == intDI_type_node)
2092 return unsigned_intDI_type_node;
2093 if (type1 == intSI_type_node)
2094 return unsigned_intSI_type_node;
2095 if (type1 == intHI_type_node)
2096 return unsigned_intHI_type_node;
2097 if (type1 == intQI_type_node)
2098 return unsigned_intQI_type_node;
2100 return c_common_signed_or_unsigned_type (1, type);
2103 /* Return a signed type the same as TYPE in other respects. */
2105 tree
2106 c_common_signed_type (type)
2107 tree type;
2109 tree type1 = TYPE_MAIN_VARIANT (type);
2110 if (type1 == unsigned_char_type_node || type1 == char_type_node)
2111 return signed_char_type_node;
2112 if (type1 == unsigned_type_node)
2113 return integer_type_node;
2114 if (type1 == short_unsigned_type_node)
2115 return short_integer_type_node;
2116 if (type1 == long_unsigned_type_node)
2117 return long_integer_type_node;
2118 if (type1 == long_long_unsigned_type_node)
2119 return long_long_integer_type_node;
2120 if (type1 == widest_unsigned_literal_type_node)
2121 return widest_integer_literal_type_node;
2122 #if HOST_BITS_PER_WIDE_INT >= 64
2123 if (type1 == unsigned_intTI_type_node)
2124 return intTI_type_node;
2125 #endif
2126 if (type1 == unsigned_intDI_type_node)
2127 return intDI_type_node;
2128 if (type1 == unsigned_intSI_type_node)
2129 return intSI_type_node;
2130 if (type1 == unsigned_intHI_type_node)
2131 return intHI_type_node;
2132 if (type1 == unsigned_intQI_type_node)
2133 return intQI_type_node;
2135 return c_common_signed_or_unsigned_type (0, type);
2138 /* Return a type the same as TYPE except unsigned or
2139 signed according to UNSIGNEDP. */
2141 tree
2142 c_common_signed_or_unsigned_type (unsignedp, type)
2143 int unsignedp;
2144 tree type;
2146 if (! INTEGRAL_TYPE_P (type)
2147 || TREE_UNSIGNED (type) == unsignedp)
2148 return type;
2150 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
2151 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2152 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
2153 return unsignedp ? unsigned_type_node : integer_type_node;
2154 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
2155 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2156 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
2157 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2158 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
2159 return (unsignedp ? long_long_unsigned_type_node
2160 : long_long_integer_type_node);
2161 if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node))
2162 return (unsignedp ? widest_unsigned_literal_type_node
2163 : widest_integer_literal_type_node);
2165 #if HOST_BITS_PER_WIDE_INT >= 64
2166 if (TYPE_PRECISION (type) == TYPE_PRECISION (intTI_type_node))
2167 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2168 #endif
2169 if (TYPE_PRECISION (type) == TYPE_PRECISION (intDI_type_node))
2170 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2171 if (TYPE_PRECISION (type) == TYPE_PRECISION (intSI_type_node))
2172 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2173 if (TYPE_PRECISION (type) == TYPE_PRECISION (intHI_type_node))
2174 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2175 if (TYPE_PRECISION (type) == TYPE_PRECISION (intQI_type_node))
2176 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2178 return type;
2181 /* Return the minimum number of bits needed to represent VALUE in a
2182 signed or unsigned type, UNSIGNEDP says which. */
2184 unsigned int
2185 min_precision (value, unsignedp)
2186 tree value;
2187 int unsignedp;
2189 int log;
2191 /* If the value is negative, compute its negative minus 1. The latter
2192 adjustment is because the absolute value of the largest negative value
2193 is one larger than the largest positive value. This is equivalent to
2194 a bit-wise negation, so use that operation instead. */
2196 if (tree_int_cst_sgn (value) < 0)
2197 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
2199 /* Return the number of bits needed, taking into account the fact
2200 that we need one more bit for a signed than unsigned type. */
2202 if (integer_zerop (value))
2203 log = 0;
2204 else
2205 log = tree_floor_log2 (value);
2207 return log + 1 + ! unsignedp;
2210 /* Print an error message for invalid operands to arith operation
2211 CODE. NOP_EXPR is used as a special case (see
2212 c_common_truthvalue_conversion). */
2214 void
2215 binary_op_error (code)
2216 enum tree_code code;
2218 const char *opname;
2220 switch (code)
2222 case NOP_EXPR:
2223 error ("invalid truth-value expression");
2224 return;
2226 case PLUS_EXPR:
2227 opname = "+"; break;
2228 case MINUS_EXPR:
2229 opname = "-"; break;
2230 case MULT_EXPR:
2231 opname = "*"; break;
2232 case MAX_EXPR:
2233 opname = "max"; break;
2234 case MIN_EXPR:
2235 opname = "min"; break;
2236 case EQ_EXPR:
2237 opname = "=="; break;
2238 case NE_EXPR:
2239 opname = "!="; break;
2240 case LE_EXPR:
2241 opname = "<="; break;
2242 case GE_EXPR:
2243 opname = ">="; break;
2244 case LT_EXPR:
2245 opname = "<"; break;
2246 case GT_EXPR:
2247 opname = ">"; break;
2248 case LSHIFT_EXPR:
2249 opname = "<<"; break;
2250 case RSHIFT_EXPR:
2251 opname = ">>"; break;
2252 case TRUNC_MOD_EXPR:
2253 case FLOOR_MOD_EXPR:
2254 opname = "%"; break;
2255 case TRUNC_DIV_EXPR:
2256 case FLOOR_DIV_EXPR:
2257 opname = "/"; break;
2258 case BIT_AND_EXPR:
2259 opname = "&"; break;
2260 case BIT_IOR_EXPR:
2261 opname = "|"; break;
2262 case TRUTH_ANDIF_EXPR:
2263 opname = "&&"; break;
2264 case TRUTH_ORIF_EXPR:
2265 opname = "||"; break;
2266 case BIT_XOR_EXPR:
2267 opname = "^"; break;
2268 case LROTATE_EXPR:
2269 case RROTATE_EXPR:
2270 opname = "rotate"; break;
2271 default:
2272 opname = "unknown"; break;
2274 error ("invalid operands to binary %s", opname);
2277 /* Subroutine of build_binary_op, used for comparison operations.
2278 See if the operands have both been converted from subword integer types
2279 and, if so, perhaps change them both back to their original type.
2280 This function is also responsible for converting the two operands
2281 to the proper common type for comparison.
2283 The arguments of this function are all pointers to local variables
2284 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2285 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2287 If this function returns nonzero, it means that the comparison has
2288 a constant value. What this function returns is an expression for
2289 that value. */
2291 tree
2292 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
2293 tree *op0_ptr, *op1_ptr;
2294 tree *restype_ptr;
2295 enum tree_code *rescode_ptr;
2297 tree type;
2298 tree op0 = *op0_ptr;
2299 tree op1 = *op1_ptr;
2300 int unsignedp0, unsignedp1;
2301 int real1, real2;
2302 tree primop0, primop1;
2303 enum tree_code code = *rescode_ptr;
2305 /* Throw away any conversions to wider types
2306 already present in the operands. */
2308 primop0 = get_narrower (op0, &unsignedp0);
2309 primop1 = get_narrower (op1, &unsignedp1);
2311 /* Handle the case that OP0 does not *contain* a conversion
2312 but it *requires* conversion to FINAL_TYPE. */
2314 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2315 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
2316 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2317 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
2319 /* If one of the operands must be floated, we cannot optimize. */
2320 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2321 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2323 /* If first arg is constant, swap the args (changing operation
2324 so value is preserved), for canonicalization. Don't do this if
2325 the second arg is 0. */
2327 if (TREE_CONSTANT (primop0)
2328 && ! integer_zerop (primop1) && ! real_zerop (primop1))
2330 tree tem = primop0;
2331 int temi = unsignedp0;
2332 primop0 = primop1;
2333 primop1 = tem;
2334 tem = op0;
2335 op0 = op1;
2336 op1 = tem;
2337 *op0_ptr = op0;
2338 *op1_ptr = op1;
2339 unsignedp0 = unsignedp1;
2340 unsignedp1 = temi;
2341 temi = real1;
2342 real1 = real2;
2343 real2 = temi;
2345 switch (code)
2347 case LT_EXPR:
2348 code = GT_EXPR;
2349 break;
2350 case GT_EXPR:
2351 code = LT_EXPR;
2352 break;
2353 case LE_EXPR:
2354 code = GE_EXPR;
2355 break;
2356 case GE_EXPR:
2357 code = LE_EXPR;
2358 break;
2359 default:
2360 break;
2362 *rescode_ptr = code;
2365 /* If comparing an integer against a constant more bits wide,
2366 maybe we can deduce a value of 1 or 0 independent of the data.
2367 Or else truncate the constant now
2368 rather than extend the variable at run time.
2370 This is only interesting if the constant is the wider arg.
2371 Also, it is not safe if the constant is unsigned and the
2372 variable arg is signed, since in this case the variable
2373 would be sign-extended and then regarded as unsigned.
2374 Our technique fails in this case because the lowest/highest
2375 possible unsigned results don't follow naturally from the
2376 lowest/highest possible values of the variable operand.
2377 For just EQ_EXPR and NE_EXPR there is another technique that
2378 could be used: see if the constant can be faithfully represented
2379 in the other operand's type, by truncating it and reextending it
2380 and see if that preserves the constant's value. */
2382 if (!real1 && !real2
2383 && TREE_CODE (primop1) == INTEGER_CST
2384 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2386 int min_gt, max_gt, min_lt, max_lt;
2387 tree maxval, minval;
2388 /* 1 if comparison is nominally unsigned. */
2389 int unsignedp = TREE_UNSIGNED (*restype_ptr);
2390 tree val;
2392 type = c_common_signed_or_unsigned_type (unsignedp0,
2393 TREE_TYPE (primop0));
2395 /* If TYPE is an enumeration, then we need to get its min/max
2396 values from it's underlying integral type, not the enumerated
2397 type itself. */
2398 if (TREE_CODE (type) == ENUMERAL_TYPE)
2399 type = c_common_type_for_size (TYPE_PRECISION (type), unsignedp0);
2401 maxval = TYPE_MAX_VALUE (type);
2402 minval = TYPE_MIN_VALUE (type);
2404 if (unsignedp && !unsignedp0)
2405 *restype_ptr = c_common_signed_type (*restype_ptr);
2407 if (TREE_TYPE (primop1) != *restype_ptr)
2408 primop1 = convert (*restype_ptr, primop1);
2409 if (type != *restype_ptr)
2411 minval = convert (*restype_ptr, minval);
2412 maxval = convert (*restype_ptr, maxval);
2415 if (unsignedp && unsignedp0)
2417 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2418 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2419 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2420 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2422 else
2424 min_gt = INT_CST_LT (primop1, minval);
2425 max_gt = INT_CST_LT (primop1, maxval);
2426 min_lt = INT_CST_LT (minval, primop1);
2427 max_lt = INT_CST_LT (maxval, primop1);
2430 val = 0;
2431 /* This used to be a switch, but Genix compiler can't handle that. */
2432 if (code == NE_EXPR)
2434 if (max_lt || min_gt)
2435 val = boolean_true_node;
2437 else if (code == EQ_EXPR)
2439 if (max_lt || min_gt)
2440 val = boolean_false_node;
2442 else if (code == LT_EXPR)
2444 if (max_lt)
2445 val = boolean_true_node;
2446 if (!min_lt)
2447 val = boolean_false_node;
2449 else if (code == GT_EXPR)
2451 if (min_gt)
2452 val = boolean_true_node;
2453 if (!max_gt)
2454 val = boolean_false_node;
2456 else if (code == LE_EXPR)
2458 if (!max_gt)
2459 val = boolean_true_node;
2460 if (min_gt)
2461 val = boolean_false_node;
2463 else if (code == GE_EXPR)
2465 if (!min_lt)
2466 val = boolean_true_node;
2467 if (max_lt)
2468 val = boolean_false_node;
2471 /* If primop0 was sign-extended and unsigned comparison specd,
2472 we did a signed comparison above using the signed type bounds.
2473 But the comparison we output must be unsigned.
2475 Also, for inequalities, VAL is no good; but if the signed
2476 comparison had *any* fixed result, it follows that the
2477 unsigned comparison just tests the sign in reverse
2478 (positive values are LE, negative ones GE).
2479 So we can generate an unsigned comparison
2480 against an extreme value of the signed type. */
2482 if (unsignedp && !unsignedp0)
2484 if (val != 0)
2485 switch (code)
2487 case LT_EXPR:
2488 case GE_EXPR:
2489 primop1 = TYPE_MIN_VALUE (type);
2490 val = 0;
2491 break;
2493 case LE_EXPR:
2494 case GT_EXPR:
2495 primop1 = TYPE_MAX_VALUE (type);
2496 val = 0;
2497 break;
2499 default:
2500 break;
2502 type = c_common_unsigned_type (type);
2505 if (TREE_CODE (primop0) != INTEGER_CST)
2507 if (val == boolean_false_node)
2508 warning ("comparison is always false due to limited range of data type");
2509 if (val == boolean_true_node)
2510 warning ("comparison is always true due to limited range of data type");
2513 if (val != 0)
2515 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2516 if (TREE_SIDE_EFFECTS (primop0))
2517 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2518 return val;
2521 /* Value is not predetermined, but do the comparison
2522 in the type of the operand that is not constant.
2523 TYPE is already properly set. */
2525 else if (real1 && real2
2526 && (TYPE_PRECISION (TREE_TYPE (primop0))
2527 == TYPE_PRECISION (TREE_TYPE (primop1))))
2528 type = TREE_TYPE (primop0);
2530 /* If args' natural types are both narrower than nominal type
2531 and both extend in the same manner, compare them
2532 in the type of the wider arg.
2533 Otherwise must actually extend both to the nominal
2534 common type lest different ways of extending
2535 alter the result.
2536 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2538 else if (unsignedp0 == unsignedp1 && real1 == real2
2539 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2540 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2542 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2543 type = c_common_signed_or_unsigned_type (unsignedp0
2544 || TREE_UNSIGNED (*restype_ptr),
2545 type);
2546 /* Make sure shorter operand is extended the right way
2547 to match the longer operand. */
2548 primop0
2549 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2550 TREE_TYPE (primop0)),
2551 primop0);
2552 primop1
2553 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2554 TREE_TYPE (primop1)),
2555 primop1);
2557 else
2559 /* Here we must do the comparison on the nominal type
2560 using the args exactly as we received them. */
2561 type = *restype_ptr;
2562 primop0 = op0;
2563 primop1 = op1;
2565 if (!real1 && !real2 && integer_zerop (primop1)
2566 && TREE_UNSIGNED (*restype_ptr))
2568 tree value = 0;
2569 switch (code)
2571 case GE_EXPR:
2572 /* All unsigned values are >= 0, so we warn if extra warnings
2573 are requested. However, if OP0 is a constant that is
2574 >= 0, the signedness of the comparison isn't an issue,
2575 so suppress the warning. */
2576 if (extra_warnings && !in_system_header
2577 && ! (TREE_CODE (primop0) == INTEGER_CST
2578 && ! TREE_OVERFLOW (convert (c_common_signed_type (type),
2579 primop0))))
2580 warning ("comparison of unsigned expression >= 0 is always true");
2581 value = boolean_true_node;
2582 break;
2584 case LT_EXPR:
2585 if (extra_warnings && !in_system_header
2586 && ! (TREE_CODE (primop0) == INTEGER_CST
2587 && ! TREE_OVERFLOW (convert (c_common_signed_type (type),
2588 primop0))))
2589 warning ("comparison of unsigned expression < 0 is always false");
2590 value = boolean_false_node;
2591 break;
2593 default:
2594 break;
2597 if (value != 0)
2599 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2600 if (TREE_SIDE_EFFECTS (primop0))
2601 return build (COMPOUND_EXPR, TREE_TYPE (value),
2602 primop0, value);
2603 return value;
2608 *op0_ptr = convert (type, primop0);
2609 *op1_ptr = convert (type, primop1);
2611 *restype_ptr = boolean_type_node;
2613 return 0;
2616 /* Return a tree for the sum or difference (RESULTCODE says which)
2617 of pointer PTROP and integer INTOP. */
2619 tree
2620 pointer_int_sum (resultcode, ptrop, intop)
2621 enum tree_code resultcode;
2622 tree ptrop, intop;
2624 tree size_exp;
2626 tree result;
2627 tree folded;
2629 /* The result is a pointer of the same type that is being added. */
2631 tree result_type = TREE_TYPE (ptrop);
2633 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2635 if (pedantic || warn_pointer_arith)
2636 pedwarn ("pointer of type `void *' used in arithmetic");
2637 size_exp = integer_one_node;
2639 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2641 if (pedantic || warn_pointer_arith)
2642 pedwarn ("pointer to a function used in arithmetic");
2643 size_exp = integer_one_node;
2645 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2647 if (pedantic || warn_pointer_arith)
2648 pedwarn ("pointer to member function used in arithmetic");
2649 size_exp = integer_one_node;
2651 else if (TREE_CODE (TREE_TYPE (result_type)) == OFFSET_TYPE)
2653 if (pedantic || warn_pointer_arith)
2654 pedwarn ("pointer to a member used in arithmetic");
2655 size_exp = integer_one_node;
2657 else
2658 size_exp = size_in_bytes (TREE_TYPE (result_type));
2660 /* If what we are about to multiply by the size of the elements
2661 contains a constant term, apply distributive law
2662 and multiply that constant term separately.
2663 This helps produce common subexpressions. */
2665 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2666 && ! TREE_CONSTANT (intop)
2667 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2668 && TREE_CONSTANT (size_exp)
2669 /* If the constant comes from pointer subtraction,
2670 skip this optimization--it would cause an error. */
2671 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2672 /* If the constant is unsigned, and smaller than the pointer size,
2673 then we must skip this optimization. This is because it could cause
2674 an overflow error if the constant is negative but INTOP is not. */
2675 && (! TREE_UNSIGNED (TREE_TYPE (intop))
2676 || (TYPE_PRECISION (TREE_TYPE (intop))
2677 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2679 enum tree_code subcode = resultcode;
2680 tree int_type = TREE_TYPE (intop);
2681 if (TREE_CODE (intop) == MINUS_EXPR)
2682 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2683 /* Convert both subexpression types to the type of intop,
2684 because weird cases involving pointer arithmetic
2685 can result in a sum or difference with different type args. */
2686 ptrop = build_binary_op (subcode, ptrop,
2687 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2688 intop = convert (int_type, TREE_OPERAND (intop, 0));
2691 /* Convert the integer argument to a type the same size as sizetype
2692 so the multiply won't overflow spuriously. */
2694 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2695 || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
2696 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2697 TREE_UNSIGNED (sizetype)), intop);
2699 /* Replace the integer argument with a suitable product by the object size.
2700 Do this multiplication as signed, then convert to the appropriate
2701 pointer type (actually unsigned integral). */
2703 intop = convert (result_type,
2704 build_binary_op (MULT_EXPR, intop,
2705 convert (TREE_TYPE (intop), size_exp), 1));
2707 /* Create the sum or difference. */
2709 result = build (resultcode, result_type, ptrop, intop);
2711 folded = fold (result);
2712 if (folded == result)
2713 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2714 return folded;
2717 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2718 or validate its data type for an `if' or `while' statement or ?..: exp.
2720 This preparation consists of taking the ordinary
2721 representation of an expression expr and producing a valid tree
2722 boolean expression describing whether expr is nonzero. We could
2723 simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
2724 but we optimize comparisons, &&, ||, and !.
2726 The resulting type should always be `boolean_type_node'. */
2728 tree
2729 c_common_truthvalue_conversion (expr)
2730 tree expr;
2732 if (TREE_CODE (expr) == ERROR_MARK)
2733 return expr;
2735 #if 0 /* This appears to be wrong for C++. */
2736 /* These really should return error_mark_node after 2.4 is stable.
2737 But not all callers handle ERROR_MARK properly. */
2738 switch (TREE_CODE (TREE_TYPE (expr)))
2740 case RECORD_TYPE:
2741 error ("struct type value used where scalar is required");
2742 return boolean_false_node;
2744 case UNION_TYPE:
2745 error ("union type value used where scalar is required");
2746 return boolean_false_node;
2748 case ARRAY_TYPE:
2749 error ("array type value used where scalar is required");
2750 return boolean_false_node;
2752 default:
2753 break;
2755 #endif /* 0 */
2757 switch (TREE_CODE (expr))
2759 case EQ_EXPR:
2760 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2761 case TRUTH_ANDIF_EXPR:
2762 case TRUTH_ORIF_EXPR:
2763 case TRUTH_AND_EXPR:
2764 case TRUTH_OR_EXPR:
2765 case TRUTH_XOR_EXPR:
2766 case TRUTH_NOT_EXPR:
2767 TREE_TYPE (expr) = boolean_type_node;
2768 return expr;
2770 case ERROR_MARK:
2771 return expr;
2773 case INTEGER_CST:
2774 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
2776 case REAL_CST:
2777 return real_zerop (expr) ? boolean_false_node : boolean_true_node;
2779 case ADDR_EXPR:
2780 /* If we are taking the address of an external decl, it might be zero
2781 if it is weak, so we cannot optimize. */
2782 if (DECL_P (TREE_OPERAND (expr, 0))
2783 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2784 break;
2786 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2787 return build (COMPOUND_EXPR, boolean_type_node,
2788 TREE_OPERAND (expr, 0), boolean_true_node);
2789 else
2790 return boolean_true_node;
2792 case COMPLEX_EXPR:
2793 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2794 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2795 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2796 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2799 case NEGATE_EXPR:
2800 case ABS_EXPR:
2801 case FLOAT_EXPR:
2802 case FFS_EXPR:
2803 /* These don't change whether an object is nonzero or zero. */
2804 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2806 case LROTATE_EXPR:
2807 case RROTATE_EXPR:
2808 /* These don't change whether an object is zero or nonzero, but
2809 we can't ignore them if their second arg has side-effects. */
2810 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2811 return build (COMPOUND_EXPR, boolean_type_node, TREE_OPERAND (expr, 1),
2812 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2813 else
2814 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2816 case COND_EXPR:
2817 /* Distribute the conversion into the arms of a COND_EXPR. */
2818 return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
2819 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2820 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2))));
2822 case CONVERT_EXPR:
2823 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2824 since that affects how `default_conversion' will behave. */
2825 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2826 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2827 break;
2828 /* fall through... */
2829 case NOP_EXPR:
2830 /* If this is widening the argument, we can ignore it. */
2831 if (TYPE_PRECISION (TREE_TYPE (expr))
2832 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2833 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2834 break;
2836 case MINUS_EXPR:
2837 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2838 aren't guaranteed to the be same for modes that can represent
2839 infinity, since if x and y are both +infinity, or both
2840 -infinity, then x - y is not a number.
2842 Note that this transformation is safe when x or y is NaN.
2843 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2844 be false. */
2845 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
2846 break;
2847 /* fall through... */
2848 case BIT_XOR_EXPR:
2849 /* This and MINUS_EXPR can be changed into a comparison of the
2850 two objects. */
2851 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2852 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2853 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2854 TREE_OPERAND (expr, 1), 1);
2855 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2856 fold (build1 (NOP_EXPR,
2857 TREE_TYPE (TREE_OPERAND (expr, 0)),
2858 TREE_OPERAND (expr, 1))), 1);
2860 case BIT_AND_EXPR:
2861 if (integer_onep (TREE_OPERAND (expr, 1))
2862 && TREE_TYPE (expr) != boolean_type_node)
2863 /* Using convert here would cause infinite recursion. */
2864 return build1 (NOP_EXPR, boolean_type_node, expr);
2865 break;
2867 case MODIFY_EXPR:
2868 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2869 warning ("suggest parentheses around assignment used as truth value");
2870 break;
2872 default:
2873 break;
2876 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2878 tree t = save_expr (expr);
2879 return (build_binary_op
2880 ((TREE_SIDE_EFFECTS (expr)
2881 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2882 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2883 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2884 0));
2887 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2890 static tree builtin_function_2 PARAMS ((const char *, const char *, tree, tree,
2891 int, enum built_in_class, int, int,
2892 tree));
2894 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2895 down to the element type of an array. */
2897 tree
2898 c_build_qualified_type (type, type_quals)
2899 tree type;
2900 int type_quals;
2902 /* A restrict-qualified pointer type must be a pointer to object or
2903 incomplete type. Note that the use of POINTER_TYPE_P also allows
2904 REFERENCE_TYPEs, which is appropriate for C++. Unfortunately,
2905 the C++ front-end also use POINTER_TYPE for pointer-to-member
2906 values, so even though it should be illegal to use `restrict'
2907 with such an entity we don't flag that here. Thus, special case
2908 code for that case is required in the C++ front-end. */
2909 if ((type_quals & TYPE_QUAL_RESTRICT)
2910 && (!POINTER_TYPE_P (type)
2911 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2913 error ("invalid use of `restrict'");
2914 type_quals &= ~TYPE_QUAL_RESTRICT;
2917 if (TREE_CODE (type) == ARRAY_TYPE)
2918 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
2919 type_quals),
2920 TYPE_DOMAIN (type));
2921 return build_qualified_type (type, type_quals);
2924 /* Apply the TYPE_QUALS to the new DECL. */
2926 void
2927 c_apply_type_quals_to_decl (type_quals, decl)
2928 int type_quals;
2929 tree decl;
2931 if ((type_quals & TYPE_QUAL_CONST)
2932 || (TREE_TYPE (decl)
2933 && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
2934 TREE_READONLY (decl) = 1;
2935 if (type_quals & TYPE_QUAL_VOLATILE)
2937 TREE_SIDE_EFFECTS (decl) = 1;
2938 TREE_THIS_VOLATILE (decl) = 1;
2940 if (type_quals & TYPE_QUAL_RESTRICT)
2942 if (!TREE_TYPE (decl)
2943 || !POINTER_TYPE_P (TREE_TYPE (decl))
2944 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
2945 error ("invalid use of `restrict'");
2946 else if (flag_strict_aliasing)
2947 /* Indicate we need to make a unique alias set for this pointer.
2948 We can't do it here because it might be pointing to an
2949 incomplete type. */
2950 DECL_POINTER_ALIAS_SET (decl) = -2;
2954 /* Return the typed-based alias set for T, which may be an expression
2955 or a type. Return -1 if we don't do anything special. */
2957 HOST_WIDE_INT
2958 c_common_get_alias_set (t)
2959 tree t;
2961 tree u;
2963 /* Permit type-punning when accessing a union, provided the access
2964 is directly through the union. For example, this code does not
2965 permit taking the address of a union member and then storing
2966 through it. Even the type-punning allowed here is a GCC
2967 extension, albeit a common and useful one; the C standard says
2968 that such accesses have implementation-defined behavior. */
2969 for (u = t;
2970 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2971 u = TREE_OPERAND (u, 0))
2972 if (TREE_CODE (u) == COMPONENT_REF
2973 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2974 return 0;
2976 /* That's all the expressions we handle specially. */
2977 if (! TYPE_P (t))
2978 return -1;
2980 /* The C standard guarantess that any object may be accessed via an
2981 lvalue that has character type. */
2982 if (t == char_type_node
2983 || t == signed_char_type_node
2984 || t == unsigned_char_type_node)
2985 return 0;
2987 /* If it has the may_alias attribute, it can alias anything. */
2988 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
2989 return 0;
2991 /* The C standard specifically allows aliasing between signed and
2992 unsigned variants of the same type. We treat the signed
2993 variant as canonical. */
2994 if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
2996 tree t1 = c_common_signed_type (t);
2998 /* t1 == t can happen for boolean nodes which are always unsigned. */
2999 if (t1 != t)
3000 return get_alias_set (t1);
3002 else if (POINTER_TYPE_P (t))
3004 tree t1;
3006 /* Unfortunately, there is no canonical form of a pointer type.
3007 In particular, if we have `typedef int I', then `int *', and
3008 `I *' are different types. So, we have to pick a canonical
3009 representative. We do this below.
3011 Technically, this approach is actually more conservative that
3012 it needs to be. In particular, `const int *' and `int *'
3013 should be in different alias sets, according to the C and C++
3014 standard, since their types are not the same, and so,
3015 technically, an `int **' and `const int **' cannot point at
3016 the same thing.
3018 But, the standard is wrong. In particular, this code is
3019 legal C++:
3021 int *ip;
3022 int **ipp = &ip;
3023 const int* const* cipp = &ipp;
3025 And, it doesn't make sense for that to be legal unless you
3026 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3027 the pointed-to types. This issue has been reported to the
3028 C++ committee. */
3029 t1 = build_type_no_quals (t);
3030 if (t1 != t)
3031 return get_alias_set (t1);
3034 return -1;
3037 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3038 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3039 flag controls whether we should diagnose possibly ill-formed
3040 constructs or not. */
3041 tree
3042 c_sizeof_or_alignof_type (type, op, complain)
3043 tree type;
3044 enum tree_code op;
3045 int complain;
3047 const char *op_name;
3048 tree value = NULL;
3049 enum tree_code type_code = TREE_CODE (type);
3051 my_friendly_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR, 20020720);
3052 op_name = op == SIZEOF_EXPR ? "sizeof" : "__alignof__";
3054 if (type_code == FUNCTION_TYPE)
3056 if (op == SIZEOF_EXPR)
3058 if (complain && (pedantic || warn_pointer_arith))
3059 pedwarn ("invalid application of `sizeof' to a function type");
3060 value = size_one_node;
3062 else
3063 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3065 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3067 if (type_code == VOID_TYPE
3068 && complain && (pedantic || warn_pointer_arith))
3069 pedwarn ("invalid application of `%s' to a void type", op_name);
3070 value = size_one_node;
3072 else if (!COMPLETE_TYPE_P (type))
3074 if (complain)
3075 error ("invalid application of `%s' to an incomplete type", op_name);
3076 value = size_zero_node;
3078 else
3080 if (op == SIZEOF_EXPR)
3081 /* Convert in case a char is more than one unit. */
3082 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3083 size_int (TYPE_PRECISION (char_type_node)
3084 / BITS_PER_UNIT));
3085 else
3086 value = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
3089 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3090 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3091 never happen. However, this node should really have type
3092 `size_t', which is just a typedef for an ordinary integer type. */
3093 value = fold (build1 (NOP_EXPR, c_size_type_node, value));
3094 my_friendly_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)), 20001021);
3096 return value;
3099 /* Implement the __alignof keyword: Return the minimum required
3100 alignment of EXPR, measured in bytes. For VAR_DECL's and
3101 FIELD_DECL's return DECL_ALIGN (which can be set from an
3102 "aligned" __attribute__ specification). */
3104 tree
3105 c_alignof_expr (expr)
3106 tree expr;
3108 tree t;
3110 if (TREE_CODE (expr) == VAR_DECL)
3111 t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
3113 else if (TREE_CODE (expr) == COMPONENT_REF
3114 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3116 error ("`__alignof' applied to a bit-field");
3117 t = size_one_node;
3119 else if (TREE_CODE (expr) == COMPONENT_REF
3120 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3121 t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
3123 else if (TREE_CODE (expr) == INDIRECT_REF)
3125 tree t = TREE_OPERAND (expr, 0);
3126 tree best = t;
3127 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3129 while (TREE_CODE (t) == NOP_EXPR
3130 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3132 int thisalign;
3134 t = TREE_OPERAND (t, 0);
3135 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3136 if (thisalign > bestalign)
3137 best = t, bestalign = thisalign;
3139 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3141 else
3142 return c_alignof (TREE_TYPE (expr));
3144 return fold (build1 (NOP_EXPR, c_size_type_node, t));
3147 /* Handle C and C++ default attributes. */
3149 enum built_in_attribute
3151 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3152 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3153 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3154 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3155 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No entry needed in enum. */
3156 #include "builtin-attrs.def"
3157 #undef DEF_ATTR_NULL_TREE
3158 #undef DEF_ATTR_INT
3159 #undef DEF_ATTR_IDENT
3160 #undef DEF_ATTR_TREE_LIST
3161 #undef DEF_FN_ATTR
3162 ATTR_LAST
3165 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3167 static bool c_attrs_initialized = false;
3169 static void c_init_attributes PARAMS ((void));
3171 /* Build tree nodes and builtin functions common to both C and C++ language
3172 frontends. */
3174 void
3175 c_common_nodes_and_builtins ()
3177 enum builtin_type
3179 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3180 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3181 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3182 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3183 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3184 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3185 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3186 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3187 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3188 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3189 #include "builtin-types.def"
3190 #undef DEF_PRIMITIVE_TYPE
3191 #undef DEF_FUNCTION_TYPE_0
3192 #undef DEF_FUNCTION_TYPE_1
3193 #undef DEF_FUNCTION_TYPE_2
3194 #undef DEF_FUNCTION_TYPE_3
3195 #undef DEF_FUNCTION_TYPE_4
3196 #undef DEF_FUNCTION_TYPE_VAR_0
3197 #undef DEF_FUNCTION_TYPE_VAR_1
3198 #undef DEF_FUNCTION_TYPE_VAR_2
3199 #undef DEF_POINTER_TYPE
3200 BT_LAST
3203 typedef enum builtin_type builtin_type;
3205 tree builtin_types[(int) BT_LAST];
3206 int wchar_type_size;
3207 tree array_domain_type;
3208 tree va_list_ref_type_node;
3209 tree va_list_arg_type_node;
3211 /* Define `int' and `char' first so that dbx will output them first. */
3212 record_builtin_type (RID_INT, NULL, integer_type_node);
3213 record_builtin_type (RID_CHAR, "char", char_type_node);
3215 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3216 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3217 but not C. Are the conditionals here needed? */
3218 if (c_language == clk_cplusplus)
3219 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3220 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3221 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3222 record_builtin_type (RID_MAX, "long unsigned int",
3223 long_unsigned_type_node);
3224 if (c_language == clk_cplusplus)
3225 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3226 record_builtin_type (RID_MAX, "long long int",
3227 long_long_integer_type_node);
3228 record_builtin_type (RID_MAX, "long long unsigned int",
3229 long_long_unsigned_type_node);
3230 if (c_language == clk_cplusplus)
3231 record_builtin_type (RID_MAX, "long long unsigned",
3232 long_long_unsigned_type_node);
3233 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3234 record_builtin_type (RID_MAX, "short unsigned int",
3235 short_unsigned_type_node);
3236 if (c_language == clk_cplusplus)
3237 record_builtin_type (RID_MAX, "unsigned short",
3238 short_unsigned_type_node);
3240 /* Define both `signed char' and `unsigned char'. */
3241 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3242 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3244 /* These are types that c_common_type_for_size and
3245 c_common_type_for_mode use. */
3246 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3247 intQI_type_node));
3248 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3249 intHI_type_node));
3250 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3251 intSI_type_node));
3252 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3253 intDI_type_node));
3254 #if HOST_BITS_PER_WIDE_INT >= 64
3255 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3256 get_identifier ("__int128_t"),
3257 intTI_type_node));
3258 #endif
3259 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3260 unsigned_intQI_type_node));
3261 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3262 unsigned_intHI_type_node));
3263 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3264 unsigned_intSI_type_node));
3265 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3266 unsigned_intDI_type_node));
3267 #if HOST_BITS_PER_WIDE_INT >= 64
3268 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3269 get_identifier ("__uint128_t"),
3270 unsigned_intTI_type_node));
3271 #endif
3273 /* Create the widest literal types. */
3274 widest_integer_literal_type_node
3275 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3276 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3277 widest_integer_literal_type_node));
3279 widest_unsigned_literal_type_node
3280 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3281 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
3282 widest_unsigned_literal_type_node));
3284 /* `unsigned long' is the standard type for sizeof.
3285 Note that stddef.h uses `unsigned long',
3286 and this must agree, even if long and int are the same size. */
3287 c_size_type_node =
3288 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3289 signed_size_type_node = c_common_signed_type (c_size_type_node);
3290 set_sizetype (c_size_type_node);
3292 build_common_tree_nodes_2 (flag_short_double);
3294 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3295 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3296 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3298 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3299 get_identifier ("complex int"),
3300 complex_integer_type_node));
3301 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3302 get_identifier ("complex float"),
3303 complex_float_type_node));
3304 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3305 get_identifier ("complex double"),
3306 complex_double_type_node));
3307 (*lang_hooks.decls.pushdecl)
3308 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3309 complex_long_double_type_node));
3311 /* Types which are common to the fortran compiler and libf2c. When
3312 changing these, you also need to be concerned with f/com.h. */
3314 if (TYPE_PRECISION (float_type_node)
3315 == TYPE_PRECISION (long_integer_type_node))
3317 g77_integer_type_node = long_integer_type_node;
3318 g77_uinteger_type_node = long_unsigned_type_node;
3320 else if (TYPE_PRECISION (float_type_node)
3321 == TYPE_PRECISION (integer_type_node))
3323 g77_integer_type_node = integer_type_node;
3324 g77_uinteger_type_node = unsigned_type_node;
3326 else
3327 g77_integer_type_node = g77_uinteger_type_node = NULL_TREE;
3329 if (g77_integer_type_node != NULL_TREE)
3331 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3332 get_identifier ("__g77_integer"),
3333 g77_integer_type_node));
3334 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3335 get_identifier ("__g77_uinteger"),
3336 g77_uinteger_type_node));
3339 if (TYPE_PRECISION (float_type_node) * 2
3340 == TYPE_PRECISION (long_integer_type_node))
3342 g77_longint_type_node = long_integer_type_node;
3343 g77_ulongint_type_node = long_unsigned_type_node;
3345 else if (TYPE_PRECISION (float_type_node) * 2
3346 == TYPE_PRECISION (long_long_integer_type_node))
3348 g77_longint_type_node = long_long_integer_type_node;
3349 g77_ulongint_type_node = long_long_unsigned_type_node;
3351 else
3352 g77_longint_type_node = g77_ulongint_type_node = NULL_TREE;
3354 if (g77_longint_type_node != NULL_TREE)
3356 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3357 get_identifier ("__g77_longint"),
3358 g77_longint_type_node));
3359 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
3360 get_identifier ("__g77_ulongint"),
3361 g77_ulongint_type_node));
3364 record_builtin_type (RID_VOID, NULL, void_type_node);
3366 void_zero_node = build_int_2 (0, 0);
3367 TREE_TYPE (void_zero_node) = void_type_node;
3369 void_list_node = build_void_list_node ();
3371 /* Make a type to be the domain of a few array types
3372 whose domains don't really matter.
3373 200 is small enough that it always fits in size_t
3374 and large enough that it can hold most function names for the
3375 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3376 array_domain_type = build_index_type (size_int (200));
3378 /* Make a type for arrays of characters.
3379 With luck nothing will ever really depend on the length of this
3380 array type. */
3381 char_array_type_node
3382 = build_array_type (char_type_node, array_domain_type);
3384 /* Likewise for arrays of ints. */
3385 int_array_type_node
3386 = build_array_type (integer_type_node, array_domain_type);
3388 string_type_node = build_pointer_type (char_type_node);
3389 const_string_type_node
3390 = build_pointer_type (build_qualified_type
3391 (char_type_node, TYPE_QUAL_CONST));
3393 (*targetm.init_builtins) ();
3395 /* This is special for C++ so functions can be overloaded. */
3396 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3397 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3398 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3399 if (c_language == clk_cplusplus)
3401 if (TREE_UNSIGNED (wchar_type_node))
3402 wchar_type_node = make_unsigned_type (wchar_type_size);
3403 else
3404 wchar_type_node = make_signed_type (wchar_type_size);
3405 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3407 else
3409 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3410 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3413 /* This is for wide string constants. */
3414 wchar_array_type_node
3415 = build_array_type (wchar_type_node, array_domain_type);
3417 wint_type_node =
3418 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3420 intmax_type_node =
3421 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3422 uintmax_type_node =
3423 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3425 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3426 ptrdiff_type_node
3427 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3428 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3430 (*lang_hooks.decls.pushdecl)
3431 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3432 va_list_type_node));
3434 (*lang_hooks.decls.pushdecl)
3435 (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
3436 ptrdiff_type_node));
3438 (*lang_hooks.decls.pushdecl)
3439 (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
3440 sizetype));
3442 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3444 va_list_arg_type_node = va_list_ref_type_node =
3445 build_pointer_type (TREE_TYPE (va_list_type_node));
3447 else
3449 va_list_arg_type_node = va_list_type_node;
3450 va_list_ref_type_node = build_reference_type (va_list_type_node);
3453 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3454 builtin_types[(int) ENUM] = VALUE;
3455 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3456 builtin_types[(int) ENUM] \
3457 = build_function_type (builtin_types[(int) RETURN], \
3458 void_list_node);
3459 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3460 builtin_types[(int) ENUM] \
3461 = build_function_type (builtin_types[(int) RETURN], \
3462 tree_cons (NULL_TREE, \
3463 builtin_types[(int) ARG1], \
3464 void_list_node));
3465 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3466 builtin_types[(int) ENUM] \
3467 = build_function_type \
3468 (builtin_types[(int) RETURN], \
3469 tree_cons (NULL_TREE, \
3470 builtin_types[(int) ARG1], \
3471 tree_cons (NULL_TREE, \
3472 builtin_types[(int) ARG2], \
3473 void_list_node)));
3474 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3475 builtin_types[(int) ENUM] \
3476 = build_function_type \
3477 (builtin_types[(int) RETURN], \
3478 tree_cons (NULL_TREE, \
3479 builtin_types[(int) ARG1], \
3480 tree_cons (NULL_TREE, \
3481 builtin_types[(int) ARG2], \
3482 tree_cons (NULL_TREE, \
3483 builtin_types[(int) ARG3], \
3484 void_list_node))));
3485 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3486 builtin_types[(int) ENUM] \
3487 = build_function_type \
3488 (builtin_types[(int) RETURN], \
3489 tree_cons (NULL_TREE, \
3490 builtin_types[(int) ARG1], \
3491 tree_cons (NULL_TREE, \
3492 builtin_types[(int) ARG2], \
3493 tree_cons \
3494 (NULL_TREE, \
3495 builtin_types[(int) ARG3], \
3496 tree_cons (NULL_TREE, \
3497 builtin_types[(int) ARG4], \
3498 void_list_node)))));
3499 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3500 builtin_types[(int) ENUM] \
3501 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3502 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3503 builtin_types[(int) ENUM] \
3504 = build_function_type (builtin_types[(int) RETURN], \
3505 tree_cons (NULL_TREE, \
3506 builtin_types[(int) ARG1], \
3507 NULL_TREE));
3509 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3510 builtin_types[(int) ENUM] \
3511 = build_function_type \
3512 (builtin_types[(int) RETURN], \
3513 tree_cons (NULL_TREE, \
3514 builtin_types[(int) ARG1], \
3515 tree_cons (NULL_TREE, \
3516 builtin_types[(int) ARG2], \
3517 NULL_TREE)));
3518 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3519 builtin_types[(int) ENUM] \
3520 = build_pointer_type (builtin_types[(int) TYPE]);
3521 #include "builtin-types.def"
3522 #undef DEF_PRIMITIVE_TYPE
3523 #undef DEF_FUNCTION_TYPE_1
3524 #undef DEF_FUNCTION_TYPE_2
3525 #undef DEF_FUNCTION_TYPE_3
3526 #undef DEF_FUNCTION_TYPE_4
3527 #undef DEF_FUNCTION_TYPE_VAR_0
3528 #undef DEF_FUNCTION_TYPE_VAR_1
3529 #undef DEF_POINTER_TYPE
3531 if (!c_attrs_initialized)
3532 c_init_attributes ();
3534 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, \
3535 BOTH_P, FALLBACK_P, NONANSI_P, ATTRS) \
3536 if (NAME) \
3538 tree decl; \
3540 if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \
3541 abort (); \
3543 if (!BOTH_P) \
3544 decl = builtin_function (NAME, builtin_types[TYPE], ENUM, \
3545 CLASS, \
3546 (FALLBACK_P \
3547 ? (NAME + strlen ("__builtin_")) \
3548 : NULL), \
3549 built_in_attributes[(int) ATTRS]); \
3550 else \
3551 decl = builtin_function_2 (NAME, \
3552 NAME + strlen ("__builtin_"), \
3553 builtin_types[TYPE], \
3554 builtin_types[LIBTYPE], \
3555 ENUM, \
3556 CLASS, \
3557 FALLBACK_P, \
3558 NONANSI_P, \
3559 built_in_attributes[(int) ATTRS]); \
3561 built_in_decls[(int) ENUM] = decl; \
3563 #include "builtins.def"
3564 #undef DEF_BUILTIN
3566 main_identifier_node = get_identifier ("main");
3569 tree
3570 build_va_arg (expr, type)
3571 tree expr, type;
3573 return build1 (VA_ARG_EXPR, type, expr);
3577 /* Linked list of disabled built-in functions. */
3579 typedef struct disabled_builtin
3581 const char *name;
3582 struct disabled_builtin *next;
3583 } disabled_builtin;
3584 static disabled_builtin *disabled_builtins = NULL;
3586 static bool builtin_function_disabled_p PARAMS ((const char *));
3588 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3589 begins with "__builtin_", give an error. */
3591 void
3592 disable_builtin_function (name)
3593 const char *name;
3595 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3596 error ("cannot disable built-in function `%s'", name);
3597 else
3599 disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
3600 new->name = name;
3601 new->next = disabled_builtins;
3602 disabled_builtins = new;
3607 /* Return true if the built-in function NAME has been disabled, false
3608 otherwise. */
3610 static bool
3611 builtin_function_disabled_p (name)
3612 const char *name;
3614 disabled_builtin *p;
3615 for (p = disabled_builtins; p != NULL; p = p->next)
3617 if (strcmp (name, p->name) == 0)
3618 return true;
3620 return false;
3624 /* Possibly define a builtin function with one or two names. BUILTIN_NAME
3625 is an __builtin_-prefixed name; NAME is the ordinary name; one or both
3626 of these may be NULL (though both being NULL is useless).
3627 BUILTIN_TYPE is the type of the __builtin_-prefixed function;
3628 TYPE is the type of the function with the ordinary name. These
3629 may differ if the ordinary name is declared with a looser type to avoid
3630 conflicts with headers. FUNCTION_CODE and CLASS are as for
3631 builtin_function. If LIBRARY_NAME_P is nonzero, NAME is passed as
3632 the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
3633 If NONANSI_P is nonzero, the name NAME is treated as a non-ANSI name;
3634 ATTRS is the tree list representing the builtin's function attributes.
3635 Returns the declaration of BUILTIN_NAME, if any, otherwise
3636 the declaration of NAME. Does not declare NAME if flag_no_builtin,
3637 or if NONANSI_P and flag_no_nonansi_builtin. */
3639 static tree
3640 builtin_function_2 (builtin_name, name, builtin_type, type, function_code,
3641 class, library_name_p, nonansi_p, attrs)
3642 const char *builtin_name;
3643 const char *name;
3644 tree builtin_type;
3645 tree type;
3646 int function_code;
3647 enum built_in_class class;
3648 int library_name_p;
3649 int nonansi_p;
3650 tree attrs;
3652 tree bdecl = NULL_TREE;
3653 tree decl = NULL_TREE;
3654 if (builtin_name != 0)
3656 bdecl = builtin_function (builtin_name, builtin_type, function_code,
3657 class, library_name_p ? name : NULL,
3658 attrs);
3660 if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
3661 && !(nonansi_p && flag_no_nonansi_builtin))
3663 decl = builtin_function (name, type, function_code, class, NULL,
3664 attrs);
3665 if (nonansi_p)
3666 DECL_BUILT_IN_NONANSI (decl) = 1;
3668 return (bdecl != 0 ? bdecl : decl);
3671 /* Nonzero if the type T promotes to int. This is (nearly) the
3672 integral promotions defined in ISO C99 6.3.1.1/2. */
3674 bool
3675 c_promoting_integer_type_p (t)
3676 tree t;
3678 switch (TREE_CODE (t))
3680 case INTEGER_TYPE:
3681 return (TYPE_MAIN_VARIANT (t) == char_type_node
3682 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3683 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3684 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3685 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3686 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3688 case ENUMERAL_TYPE:
3689 /* ??? Technically all enumerations not larger than an int
3690 promote to an int. But this is used along code paths
3691 that only want to notice a size change. */
3692 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3694 case BOOLEAN_TYPE:
3695 return 1;
3697 default:
3698 return 0;
3702 /* Return 1 if PARMS specifies a fixed number of parameters
3703 and none of their types is affected by default promotions. */
3706 self_promoting_args_p (parms)
3707 tree parms;
3709 tree t;
3710 for (t = parms; t; t = TREE_CHAIN (t))
3712 tree type = TREE_VALUE (t);
3714 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3715 return 0;
3717 if (type == 0)
3718 return 0;
3720 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3721 return 0;
3723 if (c_promoting_integer_type_p (type))
3724 return 0;
3726 return 1;
3729 /* Recursively examines the array elements of TYPE, until a non-array
3730 element type is found. */
3732 tree
3733 strip_array_types (type)
3734 tree type;
3736 while (TREE_CODE (type) == ARRAY_TYPE)
3737 type = TREE_TYPE (type);
3739 return type;
3742 static tree expand_unordered_cmp PARAMS ((tree, tree, enum tree_code,
3743 enum tree_code));
3745 /* Expand a call to an unordered comparison function such as
3746 __builtin_isgreater(). FUNCTION is the function's declaration and
3747 PARAMS a list of the values passed. For __builtin_isunordered(),
3748 UNORDERED_CODE is UNORDERED_EXPR and ORDERED_CODE is NOP_EXPR. In
3749 other cases, UNORDERED_CODE and ORDERED_CODE are comparison codes
3750 that give the opposite of the desired result. UNORDERED_CODE is
3751 used for modes that can hold NaNs and ORDERED_CODE is used for the
3752 rest. */
3754 static tree
3755 expand_unordered_cmp (function, params, unordered_code, ordered_code)
3756 tree function, params;
3757 enum tree_code unordered_code, ordered_code;
3759 tree arg0, arg1, type;
3760 enum tree_code code0, code1;
3762 /* Check that we have exactly two arguments. */
3763 if (params == 0 || TREE_CHAIN (params) == 0)
3765 error ("too few arguments to function `%s'",
3766 IDENTIFIER_POINTER (DECL_NAME (function)));
3767 return error_mark_node;
3769 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
3771 error ("too many arguments to function `%s'",
3772 IDENTIFIER_POINTER (DECL_NAME (function)));
3773 return error_mark_node;
3776 arg0 = TREE_VALUE (params);
3777 arg1 = TREE_VALUE (TREE_CHAIN (params));
3779 code0 = TREE_CODE (TREE_TYPE (arg0));
3780 code1 = TREE_CODE (TREE_TYPE (arg1));
3782 /* Make sure that the arguments have a common type of REAL. */
3783 type = 0;
3784 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3785 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3786 type = common_type (TREE_TYPE (arg0), TREE_TYPE (arg1));
3788 if (type == 0 || TREE_CODE (type) != REAL_TYPE)
3790 error ("non-floating-point argument to function `%s'",
3791 IDENTIFIER_POINTER (DECL_NAME (function)));
3792 return error_mark_node;
3795 if (unordered_code == UNORDERED_EXPR)
3797 if (MODE_HAS_NANS (TYPE_MODE (type)))
3798 return build_binary_op (unordered_code,
3799 convert (type, arg0),
3800 convert (type, arg1),
3802 else
3803 return integer_zero_node;
3806 return build_unary_op (TRUTH_NOT_EXPR,
3807 build_binary_op (MODE_HAS_NANS (TYPE_MODE (type))
3808 ? unordered_code
3809 : ordered_code,
3810 convert (type, arg0),
3811 convert (type, arg1),
3817 /* Recognize certain built-in functions so we can make tree-codes
3818 other than CALL_EXPR. We do this when it enables fold-const.c
3819 to do something useful. */
3820 /* ??? By rights this should go in builtins.c, but only C and C++
3821 implement build_{binary,unary}_op. Not exactly sure what bits
3822 of functionality are actually needed from those functions, or
3823 where the similar functionality exists in the other front ends. */
3825 tree
3826 expand_tree_builtin (function, params, coerced_params)
3827 tree function, params, coerced_params;
3829 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
3830 return NULL_TREE;
3832 switch (DECL_FUNCTION_CODE (function))
3834 case BUILT_IN_ABS:
3835 case BUILT_IN_LABS:
3836 case BUILT_IN_LLABS:
3837 case BUILT_IN_IMAXABS:
3838 case BUILT_IN_FABS:
3839 case BUILT_IN_FABSL:
3840 case BUILT_IN_FABSF:
3841 if (coerced_params == 0)
3842 return integer_zero_node;
3843 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
3845 case BUILT_IN_CONJ:
3846 case BUILT_IN_CONJF:
3847 case BUILT_IN_CONJL:
3848 if (coerced_params == 0)
3849 return integer_zero_node;
3850 return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0);
3852 case BUILT_IN_CREAL:
3853 case BUILT_IN_CREALF:
3854 case BUILT_IN_CREALL:
3855 if (coerced_params == 0)
3856 return integer_zero_node;
3857 return build_unary_op (REALPART_EXPR, TREE_VALUE (coerced_params), 0);
3859 case BUILT_IN_CIMAG:
3860 case BUILT_IN_CIMAGF:
3861 case BUILT_IN_CIMAGL:
3862 if (coerced_params == 0)
3863 return integer_zero_node;
3864 return build_unary_op (IMAGPART_EXPR, TREE_VALUE (coerced_params), 0);
3866 case BUILT_IN_ISGREATER:
3867 return expand_unordered_cmp (function, params, UNLE_EXPR, LE_EXPR);
3869 case BUILT_IN_ISGREATEREQUAL:
3870 return expand_unordered_cmp (function, params, UNLT_EXPR, LT_EXPR);
3872 case BUILT_IN_ISLESS:
3873 return expand_unordered_cmp (function, params, UNGE_EXPR, GE_EXPR);
3875 case BUILT_IN_ISLESSEQUAL:
3876 return expand_unordered_cmp (function, params, UNGT_EXPR, GT_EXPR);
3878 case BUILT_IN_ISLESSGREATER:
3879 return expand_unordered_cmp (function, params, UNEQ_EXPR, EQ_EXPR);
3881 case BUILT_IN_ISUNORDERED:
3882 return expand_unordered_cmp (function, params, UNORDERED_EXPR, NOP_EXPR);
3884 default:
3885 break;
3888 return NULL_TREE;
3891 /* Returns nonzero if CODE is the code for a statement. */
3894 statement_code_p (code)
3895 enum tree_code code;
3897 switch (code)
3899 case CLEANUP_STMT:
3900 case EXPR_STMT:
3901 case COMPOUND_STMT:
3902 case DECL_STMT:
3903 case IF_STMT:
3904 case FOR_STMT:
3905 case WHILE_STMT:
3906 case DO_STMT:
3907 case RETURN_STMT:
3908 case BREAK_STMT:
3909 case CONTINUE_STMT:
3910 case SCOPE_STMT:
3911 case SWITCH_STMT:
3912 case GOTO_STMT:
3913 case LABEL_STMT:
3914 case ASM_STMT:
3915 case FILE_STMT:
3916 case CASE_LABEL:
3917 return 1;
3919 default:
3920 if (lang_statement_code_p)
3921 return (*lang_statement_code_p) (code);
3922 return 0;
3926 /* Walk the statement tree, rooted at *tp. Apply FUNC to all the
3927 sub-trees of *TP in a pre-order traversal. FUNC is called with the
3928 DATA and the address of each sub-tree. If FUNC returns a non-NULL
3929 value, the traversal is aborted, and the value returned by FUNC is
3930 returned. If FUNC sets WALK_SUBTREES to zero, then the subtrees of
3931 the node being visited are not walked.
3933 We don't need a without_duplicates variant of this one because the
3934 statement tree is a tree, not a graph. */
3936 tree
3937 walk_stmt_tree (tp, func, data)
3938 tree *tp;
3939 walk_tree_fn func;
3940 void *data;
3942 enum tree_code code;
3943 int walk_subtrees;
3944 tree result;
3945 int i, len;
3947 #define WALK_SUBTREE(NODE) \
3948 do \
3950 result = walk_stmt_tree (&(NODE), func, data); \
3951 if (result) \
3952 return result; \
3954 while (0)
3956 /* Skip empty subtrees. */
3957 if (!*tp)
3958 return NULL_TREE;
3960 /* Skip subtrees below non-statement nodes. */
3961 if (!statement_code_p (TREE_CODE (*tp)))
3962 return NULL_TREE;
3964 /* Call the function. */
3965 walk_subtrees = 1;
3966 result = (*func) (tp, &walk_subtrees, data);
3968 /* If we found something, return it. */
3969 if (result)
3970 return result;
3972 /* FUNC may have modified the tree, recheck that we're looking at a
3973 statement node. */
3974 code = TREE_CODE (*tp);
3975 if (!statement_code_p (code))
3976 return NULL_TREE;
3978 /* Visit the subtrees unless FUNC decided that there was nothing
3979 interesting below this point in the tree. */
3980 if (walk_subtrees)
3982 /* Walk over all the sub-trees of this operand. Statement nodes
3983 never contain RTL, and we needn't worry about TARGET_EXPRs. */
3984 len = TREE_CODE_LENGTH (code);
3986 /* Go through the subtrees. We need to do this in forward order so
3987 that the scope of a FOR_EXPR is handled properly. */
3988 for (i = 0; i < len; ++i)
3989 WALK_SUBTREE (TREE_OPERAND (*tp, i));
3992 /* Finally visit the chain. This can be tail-recursion optimized if
3993 we write it this way. */
3994 return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
3996 #undef WALK_SUBTREE
3999 /* Used to compare case labels. K1 and K2 are actually tree nodes
4000 representing case labels, or NULL_TREE for a `default' label.
4001 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
4002 K2, and 0 if K1 and K2 are equal. */
4005 case_compare (k1, k2)
4006 splay_tree_key k1;
4007 splay_tree_key k2;
4009 /* Consider a NULL key (such as arises with a `default' label) to be
4010 smaller than anything else. */
4011 if (!k1)
4012 return k2 ? -1 : 0;
4013 else if (!k2)
4014 return k1 ? 1 : 0;
4016 return tree_int_cst_compare ((tree) k1, (tree) k2);
4019 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
4020 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
4021 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
4022 case label was declared using the usual C/C++ syntax, rather than
4023 the GNU case range extension. CASES is a tree containing all the
4024 case ranges processed so far; COND is the condition for the
4025 switch-statement itself. Returns the CASE_LABEL created, or
4026 ERROR_MARK_NODE if no CASE_LABEL is created. */
4028 tree
4029 c_add_case_label (cases, cond, low_value, high_value)
4030 splay_tree cases;
4031 tree cond;
4032 tree low_value;
4033 tree high_value;
4035 tree type;
4036 tree label;
4037 tree case_label;
4038 splay_tree_node node;
4040 /* Create the LABEL_DECL itself. */
4041 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
4042 DECL_CONTEXT (label) = current_function_decl;
4044 /* If there was an error processing the switch condition, bail now
4045 before we get more confused. */
4046 if (!cond || cond == error_mark_node)
4048 /* Add a label anyhow so that the back-end doesn't think that
4049 the beginning of the switch is unreachable. */
4050 if (!cases->root)
4051 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
4052 return error_mark_node;
4055 if ((low_value && TREE_TYPE (low_value)
4056 && POINTER_TYPE_P (TREE_TYPE (low_value)))
4057 || (high_value && TREE_TYPE (high_value)
4058 && POINTER_TYPE_P (TREE_TYPE (high_value))))
4059 error ("pointers are not permitted as case values");
4061 /* Case ranges are a GNU extension. */
4062 if (high_value && pedantic)
4064 if (c_language == clk_cplusplus)
4065 pedwarn ("ISO C++ forbids range expressions in switch statements");
4066 else
4067 pedwarn ("ISO C forbids range expressions in switch statements");
4070 type = TREE_TYPE (cond);
4071 if (low_value)
4073 low_value = check_case_value (low_value);
4074 low_value = convert_and_check (type, low_value);
4076 if (high_value)
4078 high_value = check_case_value (high_value);
4079 high_value = convert_and_check (type, high_value);
4082 /* If an error has occurred, bail out now. */
4083 if (low_value == error_mark_node || high_value == error_mark_node)
4085 if (!cases->root)
4086 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
4087 return error_mark_node;
4090 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
4091 really a case range, even though it was written that way. Remove
4092 the HIGH_VALUE to simplify later processing. */
4093 if (tree_int_cst_equal (low_value, high_value))
4094 high_value = NULL_TREE;
4095 if (low_value && high_value
4096 && !tree_int_cst_lt (low_value, high_value))
4097 warning ("empty range specified");
4099 /* Look up the LOW_VALUE in the table of case labels we already
4100 have. */
4101 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
4102 /* If there was not an exact match, check for overlapping ranges.
4103 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
4104 that's a `default' label and the only overlap is an exact match. */
4105 if (!node && (low_value || high_value))
4107 splay_tree_node low_bound;
4108 splay_tree_node high_bound;
4110 /* Even though there wasn't an exact match, there might be an
4111 overlap between this case range and another case range.
4112 Since we've (inductively) not allowed any overlapping case
4113 ranges, we simply need to find the greatest low case label
4114 that is smaller that LOW_VALUE, and the smallest low case
4115 label that is greater than LOW_VALUE. If there is an overlap
4116 it will occur in one of these two ranges. */
4117 low_bound = splay_tree_predecessor (cases,
4118 (splay_tree_key) low_value);
4119 high_bound = splay_tree_successor (cases,
4120 (splay_tree_key) low_value);
4122 /* Check to see if the LOW_BOUND overlaps. It is smaller than
4123 the LOW_VALUE, so there is no need to check unless the
4124 LOW_BOUND is in fact itself a case range. */
4125 if (low_bound
4126 && CASE_HIGH ((tree) low_bound->value)
4127 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
4128 low_value) >= 0)
4129 node = low_bound;
4130 /* Check to see if the HIGH_BOUND overlaps. The low end of that
4131 range is bigger than the low end of the current range, so we
4132 are only interested if the current range is a real range, and
4133 not an ordinary case label. */
4134 else if (high_bound
4135 && high_value
4136 && (tree_int_cst_compare ((tree) high_bound->key,
4137 high_value)
4138 <= 0))
4139 node = high_bound;
4141 /* If there was an overlap, issue an error. */
4142 if (node)
4144 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
4146 if (high_value)
4148 error ("duplicate (or overlapping) case value");
4149 error_with_decl (duplicate,
4150 "this is the first entry overlapping that value");
4152 else if (low_value)
4154 error ("duplicate case value") ;
4155 error_with_decl (duplicate, "previously used here");
4157 else
4159 error ("multiple default labels in one switch");
4160 error_with_decl (duplicate, "this is the first default label");
4162 if (!cases->root)
4163 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
4166 /* Add a CASE_LABEL to the statement-tree. */
4167 case_label = add_stmt (build_case_label (low_value, high_value, label));
4168 /* Register this case label in the splay tree. */
4169 splay_tree_insert (cases,
4170 (splay_tree_key) low_value,
4171 (splay_tree_value) case_label);
4173 return case_label;
4176 /* Finish an expression taking the address of LABEL. Returns an
4177 expression for the address. */
4179 tree
4180 finish_label_address_expr (label)
4181 tree label;
4183 tree result;
4185 if (pedantic)
4187 if (c_language == clk_cplusplus)
4188 pedwarn ("ISO C++ forbids taking the address of a label");
4189 else
4190 pedwarn ("ISO C forbids taking the address of a label");
4193 label = lookup_label (label);
4194 if (label == NULL_TREE)
4195 result = null_pointer_node;
4196 else
4198 TREE_USED (label) = 1;
4199 result = build1 (ADDR_EXPR, ptr_type_node, label);
4200 TREE_CONSTANT (result) = 1;
4201 /* The current function in not necessarily uninlinable.
4202 Computed gotos are incompatible with inlining, but the value
4203 here could be used only in a diagnostic, for example. */
4206 return result;
4209 /* Hook used by expand_expr to expand language-specific tree codes. */
4212 c_expand_expr (exp, target, tmode, modifier)
4213 tree exp;
4214 rtx target;
4215 enum machine_mode tmode;
4216 int modifier; /* Actually enum_modifier. */
4218 switch (TREE_CODE (exp))
4220 case STMT_EXPR:
4222 tree rtl_expr;
4223 rtx result;
4224 bool preserve_result = false;
4225 bool return_target = false;
4227 /* Since expand_expr_stmt calls free_temp_slots after every
4228 expression statement, we must call push_temp_slots here.
4229 Otherwise, any temporaries in use now would be considered
4230 out-of-scope after the first EXPR_STMT from within the
4231 STMT_EXPR. */
4232 push_temp_slots ();
4233 rtl_expr = expand_start_stmt_expr (!STMT_EXPR_NO_SCOPE (exp));
4235 /* If we want the result of this expression, find the last
4236 EXPR_STMT in the COMPOUND_STMT and mark it as addressable. */
4237 if (target != const0_rtx
4238 && TREE_CODE (STMT_EXPR_STMT (exp)) == COMPOUND_STMT
4239 && TREE_CODE (COMPOUND_BODY (STMT_EXPR_STMT (exp))) == SCOPE_STMT)
4241 tree expr = COMPOUND_BODY (STMT_EXPR_STMT (exp));
4242 tree last = TREE_CHAIN (expr);
4244 while (TREE_CHAIN (last))
4246 expr = last;
4247 last = TREE_CHAIN (last);
4250 if (TREE_CODE (last) == SCOPE_STMT
4251 && TREE_CODE (expr) == EXPR_STMT)
4253 if (target && TREE_CODE (EXPR_STMT_EXPR (expr)) == VAR_DECL
4254 && DECL_RTL_IF_SET (EXPR_STMT_EXPR (expr)) == target)
4255 /* If the last expression is a variable whose RTL is the
4256 same as our target, just return the target; if it
4257 isn't valid expanding the decl would produce different
4258 RTL, and store_expr would try to do a copy. */
4259 return_target = true;
4260 else
4262 /* Otherwise, note that we want the value from the last
4263 expression. */
4264 TREE_ADDRESSABLE (expr) = 1;
4265 preserve_result = true;
4270 expand_stmt (STMT_EXPR_STMT (exp));
4271 expand_end_stmt_expr (rtl_expr);
4273 result = expand_expr (rtl_expr, target, tmode, modifier);
4274 if (return_target)
4275 result = target;
4276 else if (preserve_result && GET_CODE (result) == MEM)
4278 if (GET_MODE (result) != BLKmode)
4279 result = copy_to_reg (result);
4280 else
4281 preserve_temp_slots (result);
4284 /* If the statment-expression does not have a scope, then the
4285 new temporaries we created within it must live beyond the
4286 statement-expression. */
4287 if (STMT_EXPR_NO_SCOPE (exp))
4288 preserve_temp_slots (NULL_RTX);
4290 pop_temp_slots ();
4291 return result;
4293 break;
4295 case CALL_EXPR:
4297 if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
4298 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
4299 == FUNCTION_DECL)
4300 && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
4301 && (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
4302 == BUILT_IN_FRONTEND))
4303 return c_expand_builtin (exp, target, tmode, modifier);
4304 else
4305 abort ();
4307 break;
4309 case COMPOUND_LITERAL_EXPR:
4311 /* Initialize the anonymous variable declared in the compound
4312 literal, then return the variable. */
4313 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
4314 emit_local_var (decl);
4315 return expand_expr (decl, target, tmode, modifier);
4318 default:
4319 abort ();
4322 abort ();
4323 return NULL;
4326 /* Hook used by safe_from_p to handle language-specific tree codes. */
4329 c_safe_from_p (target, exp)
4330 rtx target;
4331 tree exp;
4333 /* We can see statements here when processing the body of a
4334 statement-expression. For a declaration statement declaring a
4335 variable, look at the variable's initializer. */
4336 if (TREE_CODE (exp) == DECL_STMT)
4338 tree decl = DECL_STMT_DECL (exp);
4340 if (TREE_CODE (decl) == VAR_DECL
4341 && DECL_INITIAL (decl)
4342 && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
4343 return 0;
4346 /* For any statement, we must follow the statement-chain. */
4347 if (statement_code_p (TREE_CODE (exp)) && TREE_CHAIN (exp))
4348 return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
4350 /* Assume everything else is safe. */
4351 return 1;
4354 /* Hook used by unsafe_for_reeval to handle language-specific tree codes. */
4357 c_common_unsafe_for_reeval (exp)
4358 tree exp;
4360 /* Statement expressions may not be reevaluated, likewise compound
4361 literals. */
4362 if (TREE_CODE (exp) == STMT_EXPR
4363 || TREE_CODE (exp) == COMPOUND_LITERAL_EXPR)
4364 return 2;
4366 /* Walk all other expressions. */
4367 return -1;
4370 /* Hook used by staticp to handle language-specific tree codes. */
4373 c_staticp (exp)
4374 tree exp;
4376 if (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
4377 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)))
4378 return 1;
4379 return 0;
4382 #define CALLED_AS_BUILT_IN(NODE) \
4383 (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
4385 static rtx
4386 c_expand_builtin (exp, target, tmode, modifier)
4387 tree exp;
4388 rtx target;
4389 enum machine_mode tmode;
4390 enum expand_modifier modifier;
4392 tree type = TREE_TYPE (exp);
4393 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
4394 tree arglist = TREE_OPERAND (exp, 1);
4395 enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
4396 enum tree_code code = TREE_CODE (exp);
4397 const int ignore = (target == const0_rtx
4398 || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
4399 || code == CONVERT_EXPR || code == REFERENCE_EXPR
4400 || code == COND_EXPR)
4401 && TREE_CODE (type) == VOID_TYPE));
4403 if (! optimize && ! CALLED_AS_BUILT_IN (fndecl))
4404 return expand_call (exp, target, ignore);
4406 switch (fcode)
4408 case BUILT_IN_PRINTF:
4409 target = c_expand_builtin_printf (arglist, target, tmode,
4410 modifier, ignore, /*unlocked=*/ 0);
4411 if (target)
4412 return target;
4413 break;
4415 case BUILT_IN_PRINTF_UNLOCKED:
4416 target = c_expand_builtin_printf (arglist, target, tmode,
4417 modifier, ignore, /*unlocked=*/ 1);
4418 if (target)
4419 return target;
4420 break;
4422 case BUILT_IN_FPRINTF:
4423 target = c_expand_builtin_fprintf (arglist, target, tmode,
4424 modifier, ignore, /*unlocked=*/ 0);
4425 if (target)
4426 return target;
4427 break;
4429 case BUILT_IN_FPRINTF_UNLOCKED:
4430 target = c_expand_builtin_fprintf (arglist, target, tmode,
4431 modifier, ignore, /*unlocked=*/ 1);
4432 if (target)
4433 return target;
4434 break;
4436 default: /* just do library call, if unknown builtin */
4437 error ("built-in function `%s' not currently supported",
4438 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
4441 /* The switch statement above can drop through to cause the function
4442 to be called normally. */
4443 return expand_call (exp, target, ignore);
4446 /* Check an arglist to *printf for problems. The arglist should start
4447 at the format specifier, with the remaining arguments immediately
4448 following it. */
4449 static int
4450 is_valid_printf_arglist (arglist)
4451 tree arglist;
4453 /* Save this value so we can restore it later. */
4454 const int SAVE_pedantic = pedantic;
4455 int diagnostic_occurred = 0;
4456 tree attrs;
4458 /* Set this to a known value so the user setting won't affect code
4459 generation. */
4460 pedantic = 1;
4461 /* Check to make sure there are no format specifier errors. */
4462 attrs = tree_cons (get_identifier ("format"),
4463 tree_cons (NULL_TREE,
4464 get_identifier ("printf"),
4465 tree_cons (NULL_TREE,
4466 integer_one_node,
4467 tree_cons (NULL_TREE,
4468 build_int_2 (2, 0),
4469 NULL_TREE))),
4470 NULL_TREE);
4471 check_function_format (&diagnostic_occurred, attrs, arglist);
4473 /* Restore the value of `pedantic'. */
4474 pedantic = SAVE_pedantic;
4476 /* If calling `check_function_format_ptr' produces a warning, we
4477 return false, otherwise we return true. */
4478 return ! diagnostic_occurred;
4481 /* If the arguments passed to printf are suitable for optimizations,
4482 we attempt to transform the call. */
4483 static rtx
4484 c_expand_builtin_printf (arglist, target, tmode, modifier, ignore, unlocked)
4485 tree arglist;
4486 rtx target;
4487 enum machine_mode tmode;
4488 enum expand_modifier modifier;
4489 int ignore;
4490 int unlocked;
4492 tree fn_putchar = unlocked ?
4493 built_in_decls[BUILT_IN_PUTCHAR_UNLOCKED] : built_in_decls[BUILT_IN_PUTCHAR];
4494 tree fn_puts = unlocked ?
4495 built_in_decls[BUILT_IN_PUTS_UNLOCKED] : built_in_decls[BUILT_IN_PUTS];
4496 tree fn, format_arg, stripped_string;
4498 /* If the return value is used, or the replacement _DECL isn't
4499 initialized, don't do the transformation. */
4500 if (!ignore || !fn_putchar || !fn_puts)
4501 return 0;
4503 /* Verify the required arguments in the original call. */
4504 if (arglist == 0
4505 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE))
4506 return 0;
4508 /* Check the specifier vs. the parameters. */
4509 if (!is_valid_printf_arglist (arglist))
4510 return 0;
4512 format_arg = TREE_VALUE (arglist);
4513 stripped_string = format_arg;
4514 STRIP_NOPS (stripped_string);
4515 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
4516 stripped_string = TREE_OPERAND (stripped_string, 0);
4518 /* If the format specifier isn't a STRING_CST, punt. */
4519 if (TREE_CODE (stripped_string) != STRING_CST)
4520 return 0;
4522 /* OK! We can attempt optimization. */
4524 /* If the format specifier was "%s\n", call __builtin_puts(arg2). */
4525 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0)
4527 arglist = TREE_CHAIN (arglist);
4528 fn = fn_puts;
4530 /* If the format specifier was "%c", call __builtin_putchar (arg2). */
4531 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
4533 arglist = TREE_CHAIN (arglist);
4534 fn = fn_putchar;
4536 else
4538 /* We can't handle anything else with % args or %% ... yet. */
4539 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
4540 return 0;
4542 /* If the resulting constant string has a length of 1, call
4543 putchar. Note, TREE_STRING_LENGTH includes the terminating
4544 NULL in its count. */
4545 if (TREE_STRING_LENGTH (stripped_string) == 2)
4547 /* Given printf("c"), (where c is any one character,)
4548 convert "c"[0] to an int and pass that to the replacement
4549 function. */
4550 arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0);
4551 arglist = build_tree_list (NULL_TREE, arglist);
4553 fn = fn_putchar;
4555 /* If the resulting constant was "string\n", call
4556 __builtin_puts("string"). Ensure "string" has at least one
4557 character besides the trailing \n. Note, TREE_STRING_LENGTH
4558 includes the terminating NULL in its count. */
4559 else if (TREE_STRING_LENGTH (stripped_string) > 2
4560 && TREE_STRING_POINTER (stripped_string)
4561 [TREE_STRING_LENGTH (stripped_string) - 2] == '\n')
4563 /* Create a NULL-terminated string that's one char shorter
4564 than the original, stripping off the trailing '\n'. */
4565 const int newlen = TREE_STRING_LENGTH (stripped_string) - 1;
4566 char *newstr = (char *) alloca (newlen);
4567 memcpy (newstr, TREE_STRING_POINTER (stripped_string), newlen - 1);
4568 newstr[newlen - 1] = 0;
4570 arglist = fix_string_type (build_string (newlen, newstr));
4571 arglist = build_tree_list (NULL_TREE, arglist);
4572 fn = fn_puts;
4574 else
4575 /* We'd like to arrange to call fputs(string) here, but we
4576 need stdout and don't have a way to get it ... yet. */
4577 return 0;
4580 return expand_expr (build_function_call (fn, arglist),
4581 (ignore ? const0_rtx : target),
4582 tmode, modifier);
4585 /* If the arguments passed to fprintf are suitable for optimizations,
4586 we attempt to transform the call. */
4587 static rtx
4588 c_expand_builtin_fprintf (arglist, target, tmode, modifier, ignore, unlocked)
4589 tree arglist;
4590 rtx target;
4591 enum machine_mode tmode;
4592 enum expand_modifier modifier;
4593 int ignore;
4594 int unlocked;
4596 tree fn_fputc = unlocked ?
4597 built_in_decls[BUILT_IN_FPUTC_UNLOCKED] : built_in_decls[BUILT_IN_FPUTC];
4598 tree fn_fputs = unlocked ?
4599 built_in_decls[BUILT_IN_FPUTS_UNLOCKED] : built_in_decls[BUILT_IN_FPUTS];
4600 tree fn, format_arg, stripped_string;
4602 /* If the return value is used, or the replacement _DECL isn't
4603 initialized, don't do the transformation. */
4604 if (!ignore || !fn_fputc || !fn_fputs)
4605 return 0;
4607 /* Verify the required arguments in the original call. */
4608 if (arglist == 0
4609 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
4610 || (TREE_CHAIN (arglist) == 0)
4611 || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) !=
4612 POINTER_TYPE))
4613 return 0;
4615 /* Check the specifier vs. the parameters. */
4616 if (!is_valid_printf_arglist (TREE_CHAIN (arglist)))
4617 return 0;
4619 format_arg = TREE_VALUE (TREE_CHAIN (arglist));
4620 stripped_string = format_arg;
4621 STRIP_NOPS (stripped_string);
4622 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
4623 stripped_string = TREE_OPERAND (stripped_string, 0);
4625 /* If the format specifier isn't a STRING_CST, punt. */
4626 if (TREE_CODE (stripped_string) != STRING_CST)
4627 return 0;
4629 /* OK! We can attempt optimization. */
4631 /* If the format specifier was "%s", call __builtin_fputs(arg3, arg1). */
4632 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s") == 0)
4634 tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
4635 arglist = tree_cons (NULL_TREE,
4636 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
4637 newarglist);
4638 fn = fn_fputs;
4640 /* If the format specifier was "%c", call __builtin_fputc (arg3, arg1). */
4641 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
4643 tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
4644 arglist = tree_cons (NULL_TREE,
4645 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
4646 newarglist);
4647 fn = fn_fputc;
4649 else
4651 /* We can't handle anything else with % args or %% ... yet. */
4652 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
4653 return 0;
4655 /* When "string" doesn't contain %, replace all cases of
4656 fprintf(stream,string) with fputs(string,stream). The fputs
4657 builtin will take take of special cases like length==1. */
4658 arglist = tree_cons (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)),
4659 build_tree_list (NULL_TREE, TREE_VALUE (arglist)));
4660 fn = fn_fputs;
4663 return expand_expr (build_function_call (fn, arglist),
4664 (ignore ? const0_rtx : target),
4665 tmode, modifier);
4669 /* Given a boolean expression ARG, return a tree representing an increment
4670 or decrement (as indicated by CODE) of ARG. The front end must check for
4671 invalid cases (e.g., decrement in C++). */
4672 tree
4673 boolean_increment (code, arg)
4674 enum tree_code code;
4675 tree arg;
4677 tree val;
4678 tree true_res = (c_language == clk_cplusplus
4679 ? boolean_true_node
4680 : c_bool_true_node);
4681 arg = stabilize_reference (arg);
4682 switch (code)
4684 case PREINCREMENT_EXPR:
4685 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4686 break;
4687 case POSTINCREMENT_EXPR:
4688 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4689 arg = save_expr (arg);
4690 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4691 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4692 break;
4693 case PREDECREMENT_EXPR:
4694 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4695 break;
4696 case POSTDECREMENT_EXPR:
4697 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4698 arg = save_expr (arg);
4699 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4700 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4701 break;
4702 default:
4703 abort ();
4705 TREE_SIDE_EFFECTS (val) = 1;
4706 return val;
4709 /* Define NAME with value TYPE precision. */
4710 static void
4711 builtin_define_type_precision (name, type)
4712 const char *name;
4713 tree type;
4715 builtin_define_with_int_value (name, TYPE_PRECISION (type));
4718 /* Define the float.h constants for TYPE using NAME_PREFIX and FP_SUFFIX. */
4719 static void
4720 builtin_define_float_constants (name_prefix, fp_suffix, type)
4721 const char *name_prefix;
4722 const char *fp_suffix;
4723 tree type;
4725 /* Used to convert radix-based values to base 10 values in several cases.
4727 In the max_exp -> max_10_exp conversion for 128-bit IEEE, we need at
4728 least 6 significant digits for correct results. Using the fraction
4729 formed by (log(2)*1e6)/(log(10)*1e6) overflows a 32-bit integer as an
4730 intermediate; perhaps someone can find a better approximation, in the
4731 mean time, I suspect using doubles won't harm the bootstrap here. */
4733 const double log10_2 = .30102999566398119521;
4734 double log10_b;
4735 const struct real_format *fmt;
4737 char name[64], buf[128];
4738 int dig, min_10_exp, max_10_exp;
4739 int decimal_dig;
4741 fmt = real_format_for_mode[TYPE_MODE (type) - QFmode];
4743 /* The radix of the exponent representation. */
4744 if (type == float_type_node)
4745 builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
4746 log10_b = log10_2 * fmt->log2_b;
4748 /* The number of radix digits, p, in the floating-point significand. */
4749 sprintf (name, "__%s_MANT_DIG__", name_prefix);
4750 builtin_define_with_int_value (name, fmt->p);
4752 /* The number of decimal digits, q, such that any floating-point number
4753 with q decimal digits can be rounded into a floating-point number with
4754 p radix b digits and back again without change to the q decimal digits,
4756 p log10 b if b is a power of 10
4757 floor((p - 1) log10 b) otherwise
4759 dig = (fmt->p - 1) * log10_b;
4760 sprintf (name, "__%s_DIG__", name_prefix);
4761 builtin_define_with_int_value (name, dig);
4763 /* The minimum negative int x such that b**(x-1) is a normalized float. */
4764 sprintf (name, "__%s_MIN_EXP__", name_prefix);
4765 sprintf (buf, "(%d)", fmt->emin);
4766 builtin_define_with_value (name, buf, 0);
4768 /* The minimum negative int x such that 10**x is a normalized float,
4770 ceil (log10 (b ** (emin - 1)))
4771 = ceil (log10 (b) * (emin - 1))
4773 Recall that emin is negative, so the integer truncation calculates
4774 the ceiling, not the floor, in this case. */
4775 min_10_exp = (fmt->emin - 1) * log10_b;
4776 sprintf (name, "__%s_MIN_10_EXP__", name_prefix);
4777 sprintf (buf, "(%d)", min_10_exp);
4778 builtin_define_with_value (name, buf, 0);
4780 /* The maximum int x such that b**(x-1) is a representable float. */
4781 sprintf (name, "__%s_MAX_EXP__", name_prefix);
4782 builtin_define_with_int_value (name, fmt->emax);
4784 /* The maximum int x such that 10**x is in the range of representable
4785 finite floating-point numbers,
4787 floor (log10((1 - b**-p) * b**emax))
4788 = floor (log10(1 - b**-p) + log10(b**emax))
4789 = floor (log10(1 - b**-p) + log10(b)*emax)
4791 The safest thing to do here is to just compute this number. But since
4792 we don't link cc1 with libm, we cannot. We could implement log10 here
4793 a series expansion, but that seems too much effort because:
4795 Note that the first term, for all extant p, is a number exceedingly close
4796 to zero, but slightly negative. Note that the second term is an integer
4797 scaling an irrational number, and that because of the floor we are only
4798 interested in its integral portion.
4800 In order for the first term to have any effect on the integral portion
4801 of the second term, the second term has to be exceedingly close to an
4802 integer itself (e.g. 123.000000000001 or something). Getting a result
4803 that close to an integer requires that the irrational multiplicand have
4804 a long series of zeros in its expansion, which doesn't occur in the
4805 first 20 digits or so of log10(b).
4807 Hand-waving aside, crunching all of the sets of constants above by hand
4808 does not yield a case for which the first term is significant, which
4809 in the end is all that matters. */
4810 max_10_exp = fmt->emax * log10_b;
4811 sprintf (name, "__%s_MAX_10_EXP__", name_prefix);
4812 builtin_define_with_int_value (name, max_10_exp);
4814 /* The number of decimal digits, n, such that any floating-point number
4815 can be rounded to n decimal digits and back again without change to
4816 the value.
4818 p * log10(b) if b is a power of 10
4819 ceil(1 + p * log10(b)) otherwise
4821 The only macro we care about is this number for the widest supported
4822 floating type, but we want this value for rendering constants below. */
4824 double d_decimal_dig = 1 + fmt->p * log10_b;
4825 decimal_dig = d_decimal_dig;
4826 if (decimal_dig < d_decimal_dig)
4827 decimal_dig++;
4829 if (type == long_double_type_node)
4830 builtin_define_with_int_value ("__DECIMAL_DIG__", decimal_dig);
4832 /* Since, for the supported formats, B is always a power of 2, we
4833 construct the following numbers directly as a hexadecimal
4834 constants. */
4836 /* The maximum representable finite floating-point number,
4837 (1 - b**-p) * b**emax */
4839 int i, n;
4840 char *p;
4842 strcpy (buf, "0x0.");
4843 n = fmt->p * fmt->log2_b;
4844 for (i = 0, p = buf + 4; i + 3 < n; i += 4)
4845 *p++ = 'f';
4846 if (i < n)
4847 *p++ = "08ce"[n - i];
4848 sprintf (p, "p%d", fmt->emax * fmt->log2_b);
4850 sprintf (name, "__%s_MAX__", name_prefix);
4851 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
4853 /* The minimum normalized positive floating-point number,
4854 b**(emin-1). */
4855 sprintf (name, "__%s_MIN__", name_prefix);
4856 sprintf (buf, "0x1p%d", (fmt->emin - 1) * fmt->log2_b);
4857 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
4859 /* The difference between 1 and the least value greater than 1 that is
4860 representable in the given floating point type, b**(1-p). */
4861 sprintf (name, "__%s_EPSILON__", name_prefix);
4862 sprintf (buf, "0x1p%d", (1 - fmt->p) * fmt->log2_b);
4863 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
4865 /* For C++ std::numeric_limits<T>::denorm_min. The minimum denormalized
4866 positive floating-point number, b**(emin-p). Zero for formats that
4867 don't support denormals. */
4868 sprintf (name, "__%s_DENORM_MIN__", name_prefix);
4869 if (fmt->has_denorm)
4871 sprintf (buf, "0x1p%d", (fmt->emin - fmt->p) * fmt->log2_b);
4872 builtin_define_with_hex_fp_value (name, type, decimal_dig,
4873 buf, fp_suffix);
4875 else
4877 sprintf (buf, "0.0%s", fp_suffix);
4878 builtin_define_with_value (name, buf, 0);
4882 /* Hook that registers front end and target-specific built-ins. */
4883 void
4884 cb_register_builtins (pfile)
4885 cpp_reader *pfile;
4887 /* -undef turns off target-specific built-ins. */
4888 if (flag_undef)
4889 return;
4891 if (c_language == clk_cplusplus)
4893 if (SUPPORTS_ONE_ONLY)
4894 cpp_define (pfile, "__GXX_WEAK__=1");
4895 else
4896 cpp_define (pfile, "__GXX_WEAK__=0");
4897 if (flag_exceptions)
4898 cpp_define (pfile, "__EXCEPTIONS");
4899 if (warn_deprecated)
4900 cpp_define (pfile, "__DEPRECATED");
4903 /* represents the C++ ABI version, always defined so it can be used while
4904 preprocessing C and assembler. */
4905 cpp_define (pfile, "__GXX_ABI_VERSION=102");
4907 /* libgcc needs to know this. */
4908 if (USING_SJLJ_EXCEPTIONS)
4909 cpp_define (pfile, "__USING_SJLJ_EXCEPTIONS__");
4911 /* stddef.h needs to know these. */
4912 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4913 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4914 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4915 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4917 /* limits.h needs to know these. */
4918 builtin_define_type_max ("__SCHAR_MAX__", signed_char_type_node, 0);
4919 builtin_define_type_max ("__SHRT_MAX__", short_integer_type_node, 0);
4920 builtin_define_type_max ("__INT_MAX__", integer_type_node, 0);
4921 builtin_define_type_max ("__LONG_MAX__", long_integer_type_node, 1);
4922 builtin_define_type_max ("__LONG_LONG_MAX__", long_long_integer_type_node, 2);
4923 builtin_define_type_max ("__WCHAR_MAX__", wchar_type_node, 0);
4925 builtin_define_type_precision ("__CHAR_BIT__", char_type_node);
4927 /* float.h needs to know these. */
4929 builtin_define_with_int_value ("__FLT_EVAL_METHOD__",
4930 TARGET_FLT_EVAL_METHOD);
4932 builtin_define_float_constants ("FLT", "F", float_type_node);
4933 builtin_define_float_constants ("DBL", "", double_type_node);
4934 builtin_define_float_constants ("LDBL", "L", long_double_type_node);
4936 /* For use in assembly language. */
4937 builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
4938 builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
4940 /* Misc. */
4941 builtin_define_with_value ("__VERSION__", version_string, 1);
4943 /* Other target-independent built-ins determined by command-line
4944 options. */
4945 if (optimize_size)
4946 cpp_define (pfile, "__OPTIMIZE_SIZE__");
4947 if (optimize)
4948 cpp_define (pfile, "__OPTIMIZE__");
4950 if (flag_hosted)
4951 cpp_define (pfile, "__STDC_HOSTED__=1");
4952 else
4953 cpp_define (pfile, "__STDC_HOSTED__=0");
4955 if (fast_math_flags_set_p ())
4956 cpp_define (pfile, "__FAST_MATH__");
4957 if (flag_really_no_inline)
4958 cpp_define (pfile, "__NO_INLINE__");
4959 if (flag_signaling_nans)
4960 cpp_define (pfile, "__SUPPORT_SNAN__");
4961 if (flag_finite_math_only)
4962 cpp_define (pfile, "__FINITE_MATH_ONLY__=1");
4963 else
4964 cpp_define (pfile, "__FINITE_MATH_ONLY__=0");
4966 if (flag_iso)
4967 cpp_define (pfile, "__STRICT_ANSI__");
4969 if (!flag_signed_char)
4970 cpp_define (pfile, "__CHAR_UNSIGNED__");
4972 if (c_language == clk_cplusplus && TREE_UNSIGNED (wchar_type_node))
4973 cpp_define (pfile, "__WCHAR_UNSIGNED__");
4975 /* Make the choice of ObjC runtime visible to source code. */
4976 if (flag_objc && flag_next_runtime)
4977 cpp_define (pfile, "__NEXT_RUNTIME__");
4979 /* A straightforward target hook doesn't work, because of problems
4980 linking that hook's body when part of non-C front ends. */
4981 # define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
4982 # define preprocessing_trad_p() (cpp_get_options (pfile)->traditional)
4983 # define builtin_define(TXT) cpp_define (pfile, TXT)
4984 # define builtin_assert(TXT) cpp_assert (pfile, TXT)
4985 TARGET_CPU_CPP_BUILTINS ();
4986 TARGET_OS_CPP_BUILTINS ();
4989 /* Pass an object-like macro. If it doesn't lie in the user's
4990 namespace, defines it unconditionally. Otherwise define a version
4991 with two leading underscores, and another version with two leading
4992 and trailing underscores, and define the original only if an ISO
4993 standard was not nominated.
4995 e.g. passing "unix" defines "__unix", "__unix__" and possibly
4996 "unix". Passing "_mips" defines "__mips", "__mips__" and possibly
4997 "_mips". */
4998 void
4999 builtin_define_std (macro)
5000 const char *macro;
5002 size_t len = strlen (macro);
5003 char *buff = alloca (len + 5);
5004 char *p = buff + 2;
5005 char *q = p + len;
5007 /* prepend __ (or maybe just _) if in user's namespace. */
5008 memcpy (p, macro, len + 1);
5009 if (!( *p == '_' && (p[1] == '_' || ISUPPER (p[1]))))
5011 if (*p != '_')
5012 *--p = '_';
5013 if (p[1] != '_')
5014 *--p = '_';
5016 cpp_define (parse_in, p);
5018 /* If it was in user's namespace... */
5019 if (p != buff + 2)
5021 /* Define the macro with leading and following __. */
5022 if (q[-1] != '_')
5023 *q++ = '_';
5024 if (q[-2] != '_')
5025 *q++ = '_';
5026 *q = '\0';
5027 cpp_define (parse_in, p);
5029 /* Finally, define the original macro if permitted. */
5030 if (!flag_iso)
5031 cpp_define (parse_in, macro);
5035 /* Pass an object-like macro and a value to define it to. The third
5036 parameter says whether or not to turn the value into a string
5037 constant. */
5038 static void
5039 builtin_define_with_value (macro, expansion, is_str)
5040 const char *macro;
5041 const char *expansion;
5042 int is_str;
5044 char *buf;
5045 size_t mlen = strlen (macro);
5046 size_t elen = strlen (expansion);
5047 size_t extra = 2; /* space for an = and a NUL */
5049 if (is_str)
5050 extra += 2; /* space for two quote marks */
5052 buf = alloca (mlen + elen + extra);
5053 if (is_str)
5054 sprintf (buf, "%s=\"%s\"", macro, expansion);
5055 else
5056 sprintf (buf, "%s=%s", macro, expansion);
5058 cpp_define (parse_in, buf);
5061 /* Pass an object-like macro and an integer value to define it to. */
5062 static void
5063 builtin_define_with_int_value (macro, value)
5064 const char *macro;
5065 HOST_WIDE_INT value;
5067 char *buf;
5068 size_t mlen = strlen (macro);
5069 size_t vlen = 18;
5070 size_t extra = 2; /* space for = and NUL. */
5072 buf = alloca (mlen + vlen + extra);
5073 memcpy (buf, macro, mlen);
5074 buf[mlen] = '=';
5075 sprintf (buf + mlen + 1, HOST_WIDE_INT_PRINT_DEC, value);
5077 cpp_define (parse_in, buf);
5080 /* Pass an object-like macro a hexadecimal floating-point value. */
5081 static void
5082 builtin_define_with_hex_fp_value (macro, type, digits, hex_str, fp_suffix)
5083 const char *macro;
5084 tree type ATTRIBUTE_UNUSED;
5085 int digits;
5086 const char *hex_str;
5087 const char *fp_suffix;
5089 REAL_VALUE_TYPE real;
5090 char dec_str[64], buf[256];
5092 /* Hex values are really cool and convenient, except that they're
5093 not supported in strict ISO C90 mode. First, the "p-" sequence
5094 is not valid as part of a preprocessor number. Second, we get a
5095 pedwarn from the preprocessor, which has no context, so we can't
5096 suppress the warning with __extension__.
5098 So instead what we do is construct the number in hex (because
5099 it's easy to get the exact correct value), parse it as a real,
5100 then print it back out as decimal. */
5102 real_from_string (&real, hex_str);
5103 real_to_decimal (dec_str, &real, sizeof (dec_str), digits, 0);
5105 sprintf (buf, "%s=%s%s", macro, dec_str, fp_suffix);
5106 cpp_define (parse_in, buf);
5109 /* Define MAX for TYPE based on the precision of the type, which is assumed
5110 to be signed. IS_LONG is 1 for type "long" and 2 for "long long". */
5112 static void
5113 builtin_define_type_max (macro, type, is_long)
5114 const char *macro;
5115 tree type;
5116 int is_long;
5118 const char *value;
5119 char *buf;
5120 size_t mlen, vlen, extra;
5122 /* Pre-rendering the values mean we don't have to futz with printing a
5123 multi-word decimal value. There are also a very limited number of
5124 precisions that we support, so it's really a waste of time. */
5125 switch (TYPE_PRECISION (type))
5127 case 8:
5128 value = "127";
5129 break;
5130 case 16:
5131 value = "32767";
5132 break;
5133 case 32:
5134 value = "2147483647";
5135 break;
5136 case 64:
5137 value = "9223372036854775807";
5138 break;
5139 case 128:
5140 value = "170141183460469231731687303715884105727";
5141 break;
5142 default:
5143 abort ();
5146 mlen = strlen (macro);
5147 vlen = strlen (value);
5148 extra = 2 + is_long;
5149 buf = alloca (mlen + vlen + extra);
5151 sprintf (buf, "%s=%s%s", macro, value,
5152 (is_long == 1 ? "L" : is_long == 2 ? "LL" : ""));
5154 cpp_define (parse_in, buf);
5157 static void
5158 c_init_attributes ()
5160 /* Fill in the built_in_attributes array. */
5161 #define DEF_ATTR_NULL_TREE(ENUM) \
5162 built_in_attributes[(int) ENUM] = NULL_TREE;
5163 #define DEF_ATTR_INT(ENUM, VALUE) \
5164 built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0);
5165 #define DEF_ATTR_IDENT(ENUM, STRING) \
5166 built_in_attributes[(int) ENUM] = get_identifier (STRING);
5167 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
5168 built_in_attributes[(int) ENUM] \
5169 = tree_cons (built_in_attributes[(int) PURPOSE], \
5170 built_in_attributes[(int) VALUE], \
5171 built_in_attributes[(int) CHAIN]);
5172 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No initialization needed. */
5173 #include "builtin-attrs.def"
5174 #undef DEF_ATTR_NULL_TREE
5175 #undef DEF_ATTR_INT
5176 #undef DEF_ATTR_IDENT
5177 #undef DEF_ATTR_TREE_LIST
5178 #undef DEF_FN_ATTR
5179 c_attrs_initialized = true;
5182 /* Depending on the name of DECL, apply default attributes to it. */
5184 void
5185 c_common_insert_default_attributes (decl)
5186 tree decl;
5188 tree name = DECL_NAME (decl);
5190 if (!c_attrs_initialized)
5191 c_init_attributes ();
5193 #define DEF_ATTR_NULL_TREE(ENUM) /* Nothing needed after initialization. */
5194 #define DEF_ATTR_INT(ENUM, VALUE)
5195 #define DEF_ATTR_IDENT(ENUM, STRING)
5196 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)
5197 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) \
5198 if ((PREDICATE) && name == built_in_attributes[(int) NAME]) \
5199 decl_attributes (&decl, built_in_attributes[(int) ATTRS], \
5200 ATTR_FLAG_BUILT_IN);
5201 #include "builtin-attrs.def"
5202 #undef DEF_ATTR_NULL_TREE
5203 #undef DEF_ATTR_INT
5204 #undef DEF_ATTR_IDENT
5205 #undef DEF_ATTR_TREE_LIST
5206 #undef DEF_FN_ATTR
5209 /* Output a -Wshadow warning MSGID about NAME, an IDENTIFIER_NODE, and
5210 additionally give the location of the previous declaration DECL. */
5211 void
5212 shadow_warning (msgid, name, decl)
5213 const char *msgid;
5214 tree name, decl;
5216 warning ("declaration of `%s' shadows %s", IDENTIFIER_POINTER (name), msgid);
5217 warning_with_file_and_line (DECL_SOURCE_FILE (decl),
5218 DECL_SOURCE_LINE (decl),
5219 "shadowed declaration is here");
5222 /* Attribute handlers common to C front ends. */
5224 /* Handle a "packed" attribute; arguments as in
5225 struct attribute_spec.handler. */
5227 static tree
5228 handle_packed_attribute (node, name, args, flags, no_add_attrs)
5229 tree *node;
5230 tree name;
5231 tree args ATTRIBUTE_UNUSED;
5232 int flags;
5233 bool *no_add_attrs;
5235 tree *type = NULL;
5236 if (DECL_P (*node))
5238 if (TREE_CODE (*node) == TYPE_DECL)
5239 type = &TREE_TYPE (*node);
5241 else
5242 type = node;
5244 if (type)
5246 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5247 *type = build_type_copy (*type);
5248 TYPE_PACKED (*type) = 1;
5250 else if (TREE_CODE (*node) == FIELD_DECL)
5251 DECL_PACKED (*node) = 1;
5252 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
5253 used for DECL_REGISTER. It wouldn't mean anything anyway. */
5254 else
5256 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5257 *no_add_attrs = true;
5260 return NULL_TREE;
5263 /* Handle a "nocommon" attribute; arguments as in
5264 struct attribute_spec.handler. */
5266 static tree
5267 handle_nocommon_attribute (node, name, args, flags, no_add_attrs)
5268 tree *node;
5269 tree name;
5270 tree args ATTRIBUTE_UNUSED;
5271 int flags ATTRIBUTE_UNUSED;
5272 bool *no_add_attrs;
5274 if (TREE_CODE (*node) == VAR_DECL)
5275 DECL_COMMON (*node) = 0;
5276 else
5278 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5279 *no_add_attrs = true;
5282 return NULL_TREE;
5285 /* Handle a "common" attribute; arguments as in
5286 struct attribute_spec.handler. */
5288 static tree
5289 handle_common_attribute (node, name, args, flags, no_add_attrs)
5290 tree *node;
5291 tree name;
5292 tree args ATTRIBUTE_UNUSED;
5293 int flags ATTRIBUTE_UNUSED;
5294 bool *no_add_attrs;
5296 if (TREE_CODE (*node) == VAR_DECL)
5297 DECL_COMMON (*node) = 1;
5298 else
5300 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5301 *no_add_attrs = true;
5304 return NULL_TREE;
5307 /* Handle a "noreturn" attribute; arguments as in
5308 struct attribute_spec.handler. */
5310 static tree
5311 handle_noreturn_attribute (node, name, args, flags, no_add_attrs)
5312 tree *node;
5313 tree name;
5314 tree args ATTRIBUTE_UNUSED;
5315 int flags ATTRIBUTE_UNUSED;
5316 bool *no_add_attrs;
5318 tree type = TREE_TYPE (*node);
5320 /* See FIXME comment in c_common_attribute_table. */
5321 if (TREE_CODE (*node) == FUNCTION_DECL)
5322 TREE_THIS_VOLATILE (*node) = 1;
5323 else if (TREE_CODE (type) == POINTER_TYPE
5324 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5325 TREE_TYPE (*node)
5326 = build_pointer_type
5327 (build_type_variant (TREE_TYPE (type),
5328 TREE_READONLY (TREE_TYPE (type)), 1));
5329 else
5331 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5332 *no_add_attrs = true;
5335 return NULL_TREE;
5338 /* Handle a "noinline" attribute; arguments as in
5339 struct attribute_spec.handler. */
5341 static tree
5342 handle_noinline_attribute (node, name, args, flags, no_add_attrs)
5343 tree *node;
5344 tree name;
5345 tree args ATTRIBUTE_UNUSED;
5346 int flags ATTRIBUTE_UNUSED;
5347 bool *no_add_attrs;
5349 if (TREE_CODE (*node) == FUNCTION_DECL)
5350 DECL_UNINLINABLE (*node) = 1;
5351 else
5353 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5354 *no_add_attrs = true;
5357 return NULL_TREE;
5360 /* Handle a "always_inline" attribute; arguments as in
5361 struct attribute_spec.handler. */
5363 static tree
5364 handle_always_inline_attribute (node, name, args, flags, no_add_attrs)
5365 tree *node;
5366 tree name;
5367 tree args ATTRIBUTE_UNUSED;
5368 int flags ATTRIBUTE_UNUSED;
5369 bool *no_add_attrs;
5371 if (TREE_CODE (*node) == FUNCTION_DECL)
5373 /* Do nothing else, just set the attribute. We'll get at
5374 it later with lookup_attribute. */
5376 else
5378 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5379 *no_add_attrs = true;
5382 return NULL_TREE;
5385 /* Handle a "used" attribute; arguments as in
5386 struct attribute_spec.handler. */
5388 static tree
5389 handle_used_attribute (node, name, args, flags, no_add_attrs)
5390 tree *node;
5391 tree name;
5392 tree args ATTRIBUTE_UNUSED;
5393 int flags ATTRIBUTE_UNUSED;
5394 bool *no_add_attrs;
5396 if (TREE_CODE (*node) == FUNCTION_DECL)
5397 TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (*node))
5398 = TREE_USED (*node) = 1;
5399 else
5401 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5402 *no_add_attrs = true;
5405 return NULL_TREE;
5408 /* Handle a "unused" attribute; arguments as in
5409 struct attribute_spec.handler. */
5411 static tree
5412 handle_unused_attribute (node, name, args, flags, no_add_attrs)
5413 tree *node;
5414 tree name;
5415 tree args ATTRIBUTE_UNUSED;
5416 int flags;
5417 bool *no_add_attrs;
5419 if (DECL_P (*node))
5421 tree decl = *node;
5423 if (TREE_CODE (decl) == PARM_DECL
5424 || TREE_CODE (decl) == VAR_DECL
5425 || TREE_CODE (decl) == FUNCTION_DECL
5426 || TREE_CODE (decl) == LABEL_DECL
5427 || TREE_CODE (decl) == TYPE_DECL)
5428 TREE_USED (decl) = 1;
5429 else
5431 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5432 *no_add_attrs = true;
5435 else
5437 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5438 *node = build_type_copy (*node);
5439 TREE_USED (*node) = 1;
5442 return NULL_TREE;
5445 /* Handle a "const" attribute; arguments as in
5446 struct attribute_spec.handler. */
5448 static tree
5449 handle_const_attribute (node, name, args, flags, no_add_attrs)
5450 tree *node;
5451 tree name;
5452 tree args ATTRIBUTE_UNUSED;
5453 int flags ATTRIBUTE_UNUSED;
5454 bool *no_add_attrs;
5456 tree type = TREE_TYPE (*node);
5458 /* See FIXME comment on noreturn in c_common_attribute_table. */
5459 if (TREE_CODE (*node) == FUNCTION_DECL)
5460 TREE_READONLY (*node) = 1;
5461 else if (TREE_CODE (type) == POINTER_TYPE
5462 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
5463 TREE_TYPE (*node)
5464 = build_pointer_type
5465 (build_type_variant (TREE_TYPE (type), 1,
5466 TREE_THIS_VOLATILE (TREE_TYPE (type))));
5467 else
5469 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5470 *no_add_attrs = true;
5473 return NULL_TREE;
5476 /* Handle a "transparent_union" attribute; arguments as in
5477 struct attribute_spec.handler. */
5479 static tree
5480 handle_transparent_union_attribute (node, name, args, flags, no_add_attrs)
5481 tree *node;
5482 tree name;
5483 tree args ATTRIBUTE_UNUSED;
5484 int flags;
5485 bool *no_add_attrs;
5487 tree decl = NULL_TREE;
5488 tree *type = NULL;
5489 int is_type = 0;
5491 if (DECL_P (*node))
5493 decl = *node;
5494 type = &TREE_TYPE (decl);
5495 is_type = TREE_CODE (*node) == TYPE_DECL;
5497 else if (TYPE_P (*node))
5498 type = node, is_type = 1;
5500 if (is_type
5501 && TREE_CODE (*type) == UNION_TYPE
5502 && (decl == 0
5503 || (TYPE_FIELDS (*type) != 0
5504 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))))
5506 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5507 *type = build_type_copy (*type);
5508 TYPE_TRANSPARENT_UNION (*type) = 1;
5510 else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
5511 && TREE_CODE (*type) == UNION_TYPE
5512 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))
5513 DECL_TRANSPARENT_UNION (decl) = 1;
5514 else
5516 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5517 *no_add_attrs = true;
5520 return NULL_TREE;
5523 /* Handle a "constructor" attribute; arguments as in
5524 struct attribute_spec.handler. */
5526 static tree
5527 handle_constructor_attribute (node, name, args, flags, no_add_attrs)
5528 tree *node;
5529 tree name;
5530 tree args ATTRIBUTE_UNUSED;
5531 int flags ATTRIBUTE_UNUSED;
5532 bool *no_add_attrs;
5534 tree decl = *node;
5535 tree type = TREE_TYPE (decl);
5537 if (TREE_CODE (decl) == FUNCTION_DECL
5538 && TREE_CODE (type) == FUNCTION_TYPE
5539 && decl_function_context (decl) == 0)
5541 DECL_STATIC_CONSTRUCTOR (decl) = 1;
5542 TREE_USED (decl) = 1;
5544 else
5546 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5547 *no_add_attrs = true;
5550 return NULL_TREE;
5553 /* Handle a "destructor" attribute; arguments as in
5554 struct attribute_spec.handler. */
5556 static tree
5557 handle_destructor_attribute (node, name, args, flags, no_add_attrs)
5558 tree *node;
5559 tree name;
5560 tree args ATTRIBUTE_UNUSED;
5561 int flags ATTRIBUTE_UNUSED;
5562 bool *no_add_attrs;
5564 tree decl = *node;
5565 tree type = TREE_TYPE (decl);
5567 if (TREE_CODE (decl) == FUNCTION_DECL
5568 && TREE_CODE (type) == FUNCTION_TYPE
5569 && decl_function_context (decl) == 0)
5571 DECL_STATIC_DESTRUCTOR (decl) = 1;
5572 TREE_USED (decl) = 1;
5574 else
5576 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5577 *no_add_attrs = true;
5580 return NULL_TREE;
5583 /* Handle a "mode" attribute; arguments as in
5584 struct attribute_spec.handler. */
5586 static tree
5587 handle_mode_attribute (node, name, args, flags, no_add_attrs)
5588 tree *node;
5589 tree name;
5590 tree args;
5591 int flags ATTRIBUTE_UNUSED;
5592 bool *no_add_attrs;
5594 tree type = *node;
5596 *no_add_attrs = true;
5598 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
5599 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5600 else
5602 int j;
5603 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
5604 int len = strlen (p);
5605 enum machine_mode mode = VOIDmode;
5606 tree typefm;
5608 if (len > 4 && p[0] == '_' && p[1] == '_'
5609 && p[len - 1] == '_' && p[len - 2] == '_')
5611 char *newp = (char *) alloca (len - 1);
5613 strcpy (newp, &p[2]);
5614 newp[len - 4] = '\0';
5615 p = newp;
5618 /* Change this type to have a type with the specified mode.
5619 First check for the special modes. */
5620 if (! strcmp (p, "byte"))
5621 mode = byte_mode;
5622 else if (!strcmp (p, "word"))
5623 mode = word_mode;
5624 else if (! strcmp (p, "pointer"))
5625 mode = ptr_mode;
5626 else
5627 for (j = 0; j < NUM_MACHINE_MODES; j++)
5628 if (!strcmp (p, GET_MODE_NAME (j)))
5629 mode = (enum machine_mode) j;
5631 if (mode == VOIDmode)
5632 error ("unknown machine mode `%s'", p);
5633 else if (0 == (typefm = (*lang_hooks.types.type_for_mode)
5634 (mode, TREE_UNSIGNED (type))))
5635 error ("no data type for mode `%s'", p);
5636 else
5638 /* If this is a vector, make sure we either have hardware
5639 support, or we can emulate it. */
5640 if ((GET_MODE_CLASS (mode) == MODE_VECTOR_INT
5641 || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
5642 && !vector_mode_valid_p (mode))
5644 error ("unable to emulate '%s'", GET_MODE_NAME (mode));
5645 return NULL_TREE;
5648 *node = typefm;
5649 /* No need to layout the type here. The caller should do this. */
5653 return NULL_TREE;
5656 /* Handle a "section" attribute; arguments as in
5657 struct attribute_spec.handler. */
5659 static tree
5660 handle_section_attribute (node, name, args, flags, no_add_attrs)
5661 tree *node;
5662 tree name ATTRIBUTE_UNUSED;
5663 tree args;
5664 int flags ATTRIBUTE_UNUSED;
5665 bool *no_add_attrs;
5667 tree decl = *node;
5669 if (targetm.have_named_sections)
5671 if ((TREE_CODE (decl) == FUNCTION_DECL
5672 || TREE_CODE (decl) == VAR_DECL)
5673 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5675 if (TREE_CODE (decl) == VAR_DECL
5676 && current_function_decl != NULL_TREE
5677 && ! TREE_STATIC (decl))
5679 error_with_decl (decl,
5680 "section attribute cannot be specified for local variables");
5681 *no_add_attrs = true;
5684 /* The decl may have already been given a section attribute
5685 from a previous declaration. Ensure they match. */
5686 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5687 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5688 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5690 error_with_decl (*node,
5691 "section of `%s' conflicts with previous declaration");
5692 *no_add_attrs = true;
5694 else
5695 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5697 else
5699 error_with_decl (*node,
5700 "section attribute not allowed for `%s'");
5701 *no_add_attrs = true;
5704 else
5706 error_with_decl (*node,
5707 "section attributes are not supported for this target");
5708 *no_add_attrs = true;
5711 return NULL_TREE;
5714 /* Handle a "aligned" attribute; arguments as in
5715 struct attribute_spec.handler. */
5717 static tree
5718 handle_aligned_attribute (node, name, args, flags, no_add_attrs)
5719 tree *node;
5720 tree name ATTRIBUTE_UNUSED;
5721 tree args;
5722 int flags;
5723 bool *no_add_attrs;
5725 tree decl = NULL_TREE;
5726 tree *type = NULL;
5727 int is_type = 0;
5728 tree align_expr = (args ? TREE_VALUE (args)
5729 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5730 int i;
5732 if (DECL_P (*node))
5734 decl = *node;
5735 type = &TREE_TYPE (decl);
5736 is_type = TREE_CODE (*node) == TYPE_DECL;
5738 else if (TYPE_P (*node))
5739 type = node, is_type = 1;
5741 /* Strip any NOPs of any kind. */
5742 while (TREE_CODE (align_expr) == NOP_EXPR
5743 || TREE_CODE (align_expr) == CONVERT_EXPR
5744 || TREE_CODE (align_expr) == NON_LVALUE_EXPR)
5745 align_expr = TREE_OPERAND (align_expr, 0);
5747 if (TREE_CODE (align_expr) != INTEGER_CST)
5749 error ("requested alignment is not a constant");
5750 *no_add_attrs = true;
5752 else if ((i = tree_log2 (align_expr)) == -1)
5754 error ("requested alignment is not a power of 2");
5755 *no_add_attrs = true;
5757 else if (i > HOST_BITS_PER_INT - 2)
5759 error ("requested alignment is too large");
5760 *no_add_attrs = true;
5762 else if (is_type)
5764 /* If we have a TYPE_DECL, then copy the type, so that we
5765 don't accidentally modify a builtin type. See pushdecl. */
5766 if (decl && TREE_TYPE (decl) != error_mark_node
5767 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5769 tree tt = TREE_TYPE (decl);
5770 *type = build_type_copy (*type);
5771 DECL_ORIGINAL_TYPE (decl) = tt;
5772 TYPE_NAME (*type) = decl;
5773 TREE_USED (*type) = TREE_USED (decl);
5774 TREE_TYPE (decl) = *type;
5776 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5777 *type = build_type_copy (*type);
5779 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5780 TYPE_USER_ALIGN (*type) = 1;
5782 else if (TREE_CODE (decl) != VAR_DECL
5783 && TREE_CODE (decl) != FIELD_DECL)
5785 error_with_decl (decl,
5786 "alignment may not be specified for `%s'");
5787 *no_add_attrs = true;
5789 else
5791 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5792 DECL_USER_ALIGN (decl) = 1;
5795 return NULL_TREE;
5798 /* Handle a "weak" attribute; arguments as in
5799 struct attribute_spec.handler. */
5801 static tree
5802 handle_weak_attribute (node, name, args, flags, no_add_attrs)
5803 tree *node;
5804 tree name ATTRIBUTE_UNUSED;
5805 tree args ATTRIBUTE_UNUSED;
5806 int flags ATTRIBUTE_UNUSED;
5807 bool *no_add_attrs ATTRIBUTE_UNUSED;
5809 declare_weak (*node);
5811 return NULL_TREE;
5814 /* Handle an "alias" attribute; arguments as in
5815 struct attribute_spec.handler. */
5817 static tree
5818 handle_alias_attribute (node, name, args, flags, no_add_attrs)
5819 tree *node;
5820 tree name;
5821 tree args;
5822 int flags ATTRIBUTE_UNUSED;
5823 bool *no_add_attrs;
5825 tree decl = *node;
5827 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5828 || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
5830 error_with_decl (decl,
5831 "`%s' defined both normally and as an alias");
5832 *no_add_attrs = true;
5834 else if (decl_function_context (decl) == 0)
5836 tree id;
5838 id = TREE_VALUE (args);
5839 if (TREE_CODE (id) != STRING_CST)
5841 error ("alias arg not a string");
5842 *no_add_attrs = true;
5843 return NULL_TREE;
5845 id = get_identifier (TREE_STRING_POINTER (id));
5846 /* This counts as a use of the object pointed to. */
5847 TREE_USED (id) = 1;
5849 if (TREE_CODE (decl) == FUNCTION_DECL)
5850 DECL_INITIAL (decl) = error_mark_node;
5851 else
5852 DECL_EXTERNAL (decl) = 0;
5854 else
5856 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5857 *no_add_attrs = true;
5860 return NULL_TREE;
5863 /* Handle an "visibility" attribute; arguments as in
5864 struct attribute_spec.handler. */
5866 static tree
5867 handle_visibility_attribute (node, name, args, flags, no_add_attrs)
5868 tree *node;
5869 tree name;
5870 tree args;
5871 int flags ATTRIBUTE_UNUSED;
5872 bool *no_add_attrs;
5874 tree decl = *node;
5876 if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl))
5878 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5879 *no_add_attrs = true;
5881 else
5883 tree id;
5885 id = TREE_VALUE (args);
5886 if (TREE_CODE (id) != STRING_CST)
5888 error ("visibility arg not a string");
5889 *no_add_attrs = true;
5890 return NULL_TREE;
5892 if (strcmp (TREE_STRING_POINTER (id), "hidden")
5893 && strcmp (TREE_STRING_POINTER (id), "protected")
5894 && strcmp (TREE_STRING_POINTER (id), "internal"))
5896 error ("visibility arg must be one of \"hidden\", \"protected\" or \"internal\"");
5897 *no_add_attrs = true;
5898 return NULL_TREE;
5902 return NULL_TREE;
5905 /* Handle an "tls_model" attribute; arguments as in
5906 struct attribute_spec.handler. */
5908 static tree
5909 handle_tls_model_attribute (node, name, args, flags, no_add_attrs)
5910 tree *node;
5911 tree name;
5912 tree args;
5913 int flags ATTRIBUTE_UNUSED;
5914 bool *no_add_attrs;
5916 tree decl = *node;
5918 if (! DECL_THREAD_LOCAL (decl))
5920 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5921 *no_add_attrs = true;
5923 else
5925 tree id;
5927 id = TREE_VALUE (args);
5928 if (TREE_CODE (id) != STRING_CST)
5930 error ("tls_model arg not a string");
5931 *no_add_attrs = true;
5932 return NULL_TREE;
5934 if (strcmp (TREE_STRING_POINTER (id), "local-exec")
5935 && strcmp (TREE_STRING_POINTER (id), "initial-exec")
5936 && strcmp (TREE_STRING_POINTER (id), "local-dynamic")
5937 && strcmp (TREE_STRING_POINTER (id), "global-dynamic"))
5939 error ("tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"");
5940 *no_add_attrs = true;
5941 return NULL_TREE;
5945 return NULL_TREE;
5948 /* Handle a "no_instrument_function" attribute; arguments as in
5949 struct attribute_spec.handler. */
5951 static tree
5952 handle_no_instrument_function_attribute (node, name, args, flags, no_add_attrs)
5953 tree *node;
5954 tree name;
5955 tree args ATTRIBUTE_UNUSED;
5956 int flags ATTRIBUTE_UNUSED;
5957 bool *no_add_attrs;
5959 tree decl = *node;
5961 if (TREE_CODE (decl) != FUNCTION_DECL)
5963 error_with_decl (decl,
5964 "`%s' attribute applies only to functions",
5965 IDENTIFIER_POINTER (name));
5966 *no_add_attrs = true;
5968 else if (DECL_INITIAL (decl))
5970 error_with_decl (decl,
5971 "can't set `%s' attribute after definition",
5972 IDENTIFIER_POINTER (name));
5973 *no_add_attrs = true;
5975 else
5976 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5978 return NULL_TREE;
5981 /* Handle a "malloc" attribute; arguments as in
5982 struct attribute_spec.handler. */
5984 static tree
5985 handle_malloc_attribute (node, name, args, flags, no_add_attrs)
5986 tree *node;
5987 tree name;
5988 tree args ATTRIBUTE_UNUSED;
5989 int flags ATTRIBUTE_UNUSED;
5990 bool *no_add_attrs;
5992 if (TREE_CODE (*node) == FUNCTION_DECL)
5993 DECL_IS_MALLOC (*node) = 1;
5994 /* ??? TODO: Support types. */
5995 else
5997 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5998 *no_add_attrs = true;
6001 return NULL_TREE;
6004 /* Handle a "no_limit_stack" attribute; arguments as in
6005 struct attribute_spec.handler. */
6007 static tree
6008 handle_no_limit_stack_attribute (node, name, args, flags, no_add_attrs)
6009 tree *node;
6010 tree name;
6011 tree args ATTRIBUTE_UNUSED;
6012 int flags ATTRIBUTE_UNUSED;
6013 bool *no_add_attrs;
6015 tree decl = *node;
6017 if (TREE_CODE (decl) != FUNCTION_DECL)
6019 error_with_decl (decl,
6020 "`%s' attribute applies only to functions",
6021 IDENTIFIER_POINTER (name));
6022 *no_add_attrs = true;
6024 else if (DECL_INITIAL (decl))
6026 error_with_decl (decl,
6027 "can't set `%s' attribute after definition",
6028 IDENTIFIER_POINTER (name));
6029 *no_add_attrs = true;
6031 else
6032 DECL_NO_LIMIT_STACK (decl) = 1;
6034 return NULL_TREE;
6037 /* Handle a "pure" attribute; arguments as in
6038 struct attribute_spec.handler. */
6040 static tree
6041 handle_pure_attribute (node, name, args, flags, no_add_attrs)
6042 tree *node;
6043 tree name;
6044 tree args ATTRIBUTE_UNUSED;
6045 int flags ATTRIBUTE_UNUSED;
6046 bool *no_add_attrs;
6048 if (TREE_CODE (*node) == FUNCTION_DECL)
6049 DECL_IS_PURE (*node) = 1;
6050 /* ??? TODO: Support types. */
6051 else
6053 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
6054 *no_add_attrs = true;
6057 return NULL_TREE;
6060 /* Handle a "deprecated" attribute; arguments as in
6061 struct attribute_spec.handler. */
6063 static tree
6064 handle_deprecated_attribute (node, name, args, flags, no_add_attrs)
6065 tree *node;
6066 tree name;
6067 tree args ATTRIBUTE_UNUSED;
6068 int flags;
6069 bool *no_add_attrs;
6071 tree type = NULL_TREE;
6072 int warn = 0;
6073 const char *what = NULL;
6075 if (DECL_P (*node))
6077 tree decl = *node;
6078 type = TREE_TYPE (decl);
6080 if (TREE_CODE (decl) == TYPE_DECL
6081 || TREE_CODE (decl) == PARM_DECL
6082 || TREE_CODE (decl) == VAR_DECL
6083 || TREE_CODE (decl) == FUNCTION_DECL
6084 || TREE_CODE (decl) == FIELD_DECL)
6085 TREE_DEPRECATED (decl) = 1;
6086 else
6087 warn = 1;
6089 else if (TYPE_P (*node))
6091 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
6092 *node = build_type_copy (*node);
6093 TREE_DEPRECATED (*node) = 1;
6094 type = *node;
6096 else
6097 warn = 1;
6099 if (warn)
6101 *no_add_attrs = true;
6102 if (type && TYPE_NAME (type))
6104 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
6105 what = IDENTIFIER_POINTER (TYPE_NAME (*node));
6106 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
6107 && DECL_NAME (TYPE_NAME (type)))
6108 what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
6110 if (what)
6111 warning ("`%s' attribute ignored for `%s'",
6112 IDENTIFIER_POINTER (name), what);
6113 else
6114 warning ("`%s' attribute ignored",
6115 IDENTIFIER_POINTER (name));
6118 return NULL_TREE;
6121 /* Keep a list of vector type nodes we created in handle_vector_size_attribute,
6122 to prevent us from duplicating type nodes unnecessarily.
6123 The normal mechanism to prevent duplicates is to use type_hash_canon, but
6124 since we want to distinguish types that are essentially identical (except
6125 for their debug representation), we use a local list here. */
6126 static GTY(()) tree vector_type_node_list = 0;
6128 /* Handle a "vector_size" attribute; arguments as in
6129 struct attribute_spec.handler. */
6131 static tree
6132 handle_vector_size_attribute (node, name, args, flags, no_add_attrs)
6133 tree *node;
6134 tree name;
6135 tree args;
6136 int flags ATTRIBUTE_UNUSED;
6137 bool *no_add_attrs;
6139 unsigned HOST_WIDE_INT vecsize, nunits;
6140 enum machine_mode mode, orig_mode, new_mode;
6141 tree type = *node, new_type = NULL_TREE;
6142 tree type_list_node;
6144 *no_add_attrs = true;
6146 if (! host_integerp (TREE_VALUE (args), 1))
6148 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
6149 return NULL_TREE;
6152 /* Get the vector size (in bytes). */
6153 vecsize = tree_low_cst (TREE_VALUE (args), 1);
6155 /* We need to provide for vector pointers, vector arrays, and
6156 functions returning vectors. For example:
6158 __attribute__((vector_size(16))) short *foo;
6160 In this case, the mode is SI, but the type being modified is
6161 HI, so we need to look further. */
6163 while (POINTER_TYPE_P (type)
6164 || TREE_CODE (type) == FUNCTION_TYPE
6165 || TREE_CODE (type) == ARRAY_TYPE)
6166 type = TREE_TYPE (type);
6168 /* Get the mode of the type being modified. */
6169 orig_mode = TYPE_MODE (type);
6171 if (TREE_CODE (type) == RECORD_TYPE
6172 || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
6173 && GET_MODE_CLASS (orig_mode) != MODE_INT)
6174 || ! host_integerp (TYPE_SIZE_UNIT (type), 1))
6176 error ("invalid vector type for attribute `%s'",
6177 IDENTIFIER_POINTER (name));
6178 return NULL_TREE;
6181 /* Calculate how many units fit in the vector. */
6182 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
6184 /* Find a suitably sized vector. */
6185 new_mode = VOIDmode;
6186 for (mode = GET_CLASS_NARROWEST_MODE (GET_MODE_CLASS (orig_mode) == MODE_INT
6187 ? MODE_VECTOR_INT
6188 : MODE_VECTOR_FLOAT);
6189 mode != VOIDmode;
6190 mode = GET_MODE_WIDER_MODE (mode))
6191 if (vecsize == GET_MODE_SIZE (mode)
6192 && nunits == (unsigned HOST_WIDE_INT) GET_MODE_NUNITS (mode))
6194 new_mode = mode;
6195 break;
6198 if (new_mode == VOIDmode)
6200 error ("no vector mode with the size and type specified could be found");
6201 return NULL_TREE;
6204 for (type_list_node = vector_type_node_list; type_list_node;
6205 type_list_node = TREE_CHAIN (type_list_node))
6207 tree other_type = TREE_VALUE (type_list_node);
6208 tree record = TYPE_DEBUG_REPRESENTATION_TYPE (other_type);
6209 tree fields = TYPE_FIELDS (record);
6210 tree field_type = TREE_TYPE (fields);
6211 tree array_type = TREE_TYPE (field_type);
6212 if (TREE_CODE (fields) != FIELD_DECL
6213 || TREE_CODE (field_type) != ARRAY_TYPE)
6214 abort ();
6216 if (TYPE_MODE (other_type) == mode && type == array_type)
6218 new_type = other_type;
6219 break;
6223 if (new_type == NULL_TREE)
6225 tree index, array, rt, list_node;
6227 new_type = (*lang_hooks.types.type_for_mode) (new_mode,
6228 TREE_UNSIGNED (type));
6230 if (!new_type)
6232 error ("no vector mode with the size and type specified could be found");
6233 return NULL_TREE;
6236 new_type = build_type_copy (new_type);
6238 /* If this is a vector, make sure we either have hardware
6239 support, or we can emulate it. */
6240 if ((GET_MODE_CLASS (mode) == MODE_VECTOR_INT
6241 || GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
6242 && !vector_mode_valid_p (mode))
6244 error ("unable to emulate '%s'", GET_MODE_NAME (mode));
6245 return NULL_TREE;
6248 /* Set the debug information here, because this is the only
6249 place where we know the underlying type for a vector made
6250 with vector_size. For debugging purposes we pretend a vector
6251 is an array within a structure. */
6252 index = build_int_2 (TYPE_VECTOR_SUBPARTS (new_type) - 1, 0);
6253 array = build_array_type (type, build_index_type (index));
6254 rt = make_node (RECORD_TYPE);
6256 TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
6257 DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
6258 layout_type (rt);
6259 TYPE_DEBUG_REPRESENTATION_TYPE (new_type) = rt;
6261 list_node = build_tree_list (NULL, new_type);
6262 TREE_CHAIN (list_node) = vector_type_node_list;
6263 vector_type_node_list = list_node;
6266 /* Build back pointers if needed. */
6267 *node = vector_size_helper (*node, new_type);
6269 return NULL_TREE;
6272 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
6273 better way.
6275 If we requested a pointer to a vector, build up the pointers that
6276 we stripped off while looking for the inner type. Similarly for
6277 return values from functions.
6279 The argument "type" is the top of the chain, and "bottom" is the
6280 new type which we will point to. */
6282 static tree
6283 vector_size_helper (type, bottom)
6284 tree type, bottom;
6286 tree inner, outer;
6288 if (POINTER_TYPE_P (type))
6290 inner = vector_size_helper (TREE_TYPE (type), bottom);
6291 outer = build_pointer_type (inner);
6293 else if (TREE_CODE (type) == ARRAY_TYPE)
6295 inner = vector_size_helper (TREE_TYPE (type), bottom);
6296 outer = build_array_type (inner, TYPE_VALUES (type));
6298 else if (TREE_CODE (type) == FUNCTION_TYPE)
6300 inner = vector_size_helper (TREE_TYPE (type), bottom);
6301 outer = build_function_type (inner, TYPE_VALUES (type));
6303 else
6304 return bottom;
6306 TREE_READONLY (outer) = TREE_READONLY (type);
6307 TREE_THIS_VOLATILE (outer) = TREE_THIS_VOLATILE (type);
6309 return outer;
6312 /* Handle the "nonnull" attribute. */
6313 static tree
6314 handle_nonnull_attribute (node, name, args, flags, no_add_attrs)
6315 tree *node;
6316 tree name ATTRIBUTE_UNUSED;
6317 tree args;
6318 int flags ATTRIBUTE_UNUSED;
6319 bool *no_add_attrs;
6321 tree type = *node;
6322 unsigned HOST_WIDE_INT attr_arg_num;
6324 /* If no arguments are specified, all pointer arguments should be
6325 non-null. Veryify a full prototype is given so that the arguments
6326 will have the correct types when we actually check them later. */
6327 if (! args)
6329 if (! TYPE_ARG_TYPES (type))
6331 error ("nonnull attribute without arguments on a non-prototype");
6332 *no_add_attrs = true;
6334 return NULL_TREE;
6337 /* Argument list specified. Verify that each argument number references
6338 a pointer argument. */
6339 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
6341 tree argument;
6342 unsigned HOST_WIDE_INT arg_num, ck_num;
6344 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
6346 error ("nonnull argument has invalid operand number (arg %lu)",
6347 (unsigned long) attr_arg_num);
6348 *no_add_attrs = true;
6349 return NULL_TREE;
6352 argument = TYPE_ARG_TYPES (type);
6353 if (argument)
6355 for (ck_num = 1; ; ck_num++)
6357 if (! argument || ck_num == arg_num)
6358 break;
6359 argument = TREE_CHAIN (argument);
6362 if (! argument
6363 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
6365 error ("nonnull argument with out-of-range operand number (arg %lu, operand %lu)",
6366 (unsigned long) attr_arg_num, (unsigned long) arg_num);
6367 *no_add_attrs = true;
6368 return NULL_TREE;
6371 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
6373 error ("nonnull argument references non-pointer operand (arg %lu, operand %lu)",
6374 (unsigned long) attr_arg_num, (unsigned long) arg_num);
6375 *no_add_attrs = true;
6376 return NULL_TREE;
6381 return NULL_TREE;
6384 /* Check the argument list of a function call for null in argument slots
6385 that are marked as requiring a non-null pointer argument. */
6387 static void
6388 check_function_nonnull (attrs, params)
6389 tree attrs;
6390 tree params;
6392 tree a, args, param;
6393 int param_num;
6395 for (a = attrs; a; a = TREE_CHAIN (a))
6397 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
6399 args = TREE_VALUE (a);
6401 /* Walk the argument list. If we encounter an argument number we
6402 should check for non-null, do it. If the attribute has no args,
6403 then every pointer argument is checked (in which case the check
6404 for pointer type is done in check_nonnull_arg). */
6405 for (param = params, param_num = 1; ;
6406 param_num++, param = TREE_CHAIN (param))
6408 if (! param)
6409 break;
6410 if (! args || nonnull_check_p (args, param_num))
6411 check_function_arguments_recurse (check_nonnull_arg, NULL,
6412 TREE_VALUE (param),
6413 param_num);
6419 /* Helper for check_function_nonnull; given a list of operands which
6420 must be non-null in ARGS, determine if operand PARAM_NUM should be
6421 checked. */
6423 static bool
6424 nonnull_check_p (args, param_num)
6425 tree args;
6426 unsigned HOST_WIDE_INT param_num;
6428 unsigned HOST_WIDE_INT arg_num;
6430 for (; args; args = TREE_CHAIN (args))
6432 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
6433 abort ();
6435 if (arg_num == param_num)
6436 return true;
6438 return false;
6441 /* Check that the function argument PARAM (which is operand number
6442 PARAM_NUM) is non-null. This is called by check_function_nonnull
6443 via check_function_arguments_recurse. */
6445 static void
6446 check_nonnull_arg (ctx, param, param_num)
6447 void *ctx ATTRIBUTE_UNUSED;
6448 tree param;
6449 unsigned HOST_WIDE_INT param_num;
6451 /* Just skip checking the argument if it's not a pointer. This can
6452 happen if the "nonnull" attribute was given without an operand
6453 list (which means to check every pointer argument). */
6455 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
6456 return;
6458 if (integer_zerop (param))
6459 warning ("null argument where non-null required (arg %lu)",
6460 (unsigned long) param_num);
6463 /* Helper for nonnull attribute handling; fetch the operand number
6464 from the attribute argument list. */
6466 static bool
6467 get_nonnull_operand (arg_num_expr, valp)
6468 tree arg_num_expr;
6469 unsigned HOST_WIDE_INT *valp;
6471 /* Strip any conversions from the arg number and verify they
6472 are constants. */
6473 while (TREE_CODE (arg_num_expr) == NOP_EXPR
6474 || TREE_CODE (arg_num_expr) == CONVERT_EXPR
6475 || TREE_CODE (arg_num_expr) == NON_LVALUE_EXPR)
6476 arg_num_expr = TREE_OPERAND (arg_num_expr, 0);
6478 if (TREE_CODE (arg_num_expr) != INTEGER_CST
6479 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
6480 return false;
6482 *valp = TREE_INT_CST_LOW (arg_num_expr);
6483 return true;
6486 /* Handle a "nothrow" attribute; arguments as in
6487 struct attribute_spec.handler. */
6489 static tree
6490 handle_nothrow_attribute (node, name, args, flags, no_add_attrs)
6491 tree *node;
6492 tree name;
6493 tree args ATTRIBUTE_UNUSED;
6494 int flags ATTRIBUTE_UNUSED;
6495 bool *no_add_attrs;
6497 if (TREE_CODE (*node) == FUNCTION_DECL)
6498 TREE_NOTHROW (*node) = 1;
6499 /* ??? TODO: Support types. */
6500 else
6502 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
6503 *no_add_attrs = true;
6506 return NULL_TREE;
6509 /* Check for valid arguments being passed to a function. */
6510 void
6511 check_function_arguments (attrs, params)
6512 tree attrs;
6513 tree params;
6515 /* Check for null being passed in a pointer argument that must be
6516 non-null. We also need to do this if format checking is enabled. */
6518 if (warn_nonnull)
6519 check_function_nonnull (attrs, params);
6521 /* Check for errors in format strings. */
6523 if (warn_format)
6524 check_function_format (NULL, attrs, params);
6527 /* Generic argument checking recursion routine. PARAM is the argument to
6528 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
6529 once the argument is resolved. CTX is context for the callback. */
6530 void
6531 check_function_arguments_recurse (callback, ctx, param, param_num)
6532 void (*callback) PARAMS ((void *, tree, unsigned HOST_WIDE_INT));
6533 void *ctx;
6534 tree param;
6535 unsigned HOST_WIDE_INT param_num;
6537 if (TREE_CODE (param) == NOP_EXPR)
6539 /* Strip coercion. */
6540 check_function_arguments_recurse (callback, ctx,
6541 TREE_OPERAND (param, 0), param_num);
6542 return;
6545 if (TREE_CODE (param) == CALL_EXPR)
6547 tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
6548 tree attrs;
6549 bool found_format_arg = false;
6551 /* See if this is a call to a known internationalization function
6552 that modifies a format arg. Such a function may have multiple
6553 format_arg attributes (for example, ngettext). */
6555 for (attrs = TYPE_ATTRIBUTES (type);
6556 attrs;
6557 attrs = TREE_CHAIN (attrs))
6558 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
6560 tree inner_args;
6561 tree format_num_expr;
6562 int format_num;
6563 int i;
6565 /* Extract the argument number, which was previously checked
6566 to be valid. */
6567 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
6568 while (TREE_CODE (format_num_expr) == NOP_EXPR
6569 || TREE_CODE (format_num_expr) == CONVERT_EXPR
6570 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
6571 format_num_expr = TREE_OPERAND (format_num_expr, 0);
6573 if (TREE_CODE (format_num_expr) != INTEGER_CST
6574 || TREE_INT_CST_HIGH (format_num_expr) != 0)
6575 abort ();
6577 format_num = TREE_INT_CST_LOW (format_num_expr);
6579 for (inner_args = TREE_OPERAND (param, 1), i = 1;
6580 inner_args != 0;
6581 inner_args = TREE_CHAIN (inner_args), i++)
6582 if (i == format_num)
6584 check_function_arguments_recurse (callback, ctx,
6585 TREE_VALUE (inner_args),
6586 param_num);
6587 found_format_arg = true;
6588 break;
6592 /* If we found a format_arg attribute and did a recursive check,
6593 we are done with checking this argument. Otherwise, we continue
6594 and this will be considered a non-literal. */
6595 if (found_format_arg)
6596 return;
6599 if (TREE_CODE (param) == COND_EXPR)
6601 /* Check both halves of the conditional expression. */
6602 check_function_arguments_recurse (callback, ctx,
6603 TREE_OPERAND (param, 1), param_num);
6604 check_function_arguments_recurse (callback, ctx,
6605 TREE_OPERAND (param, 2), param_num);
6606 return;
6609 (*callback) (ctx, param, param_num);
6612 #include "gt-c-common.h"