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
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
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
34 #include "diagnostic.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. */
52 #define SIZE_TYPE "long unsigned int"
56 #define WCHAR_TYPE "int"
59 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
60 #define MODIFIED_WCHAR_TYPE \
61 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
64 #define PTRDIFF_TYPE "long int"
68 #define WINT_TYPE "unsigned int"
72 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
74 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
80 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
82 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
83 ? "long unsigned int" \
84 : "long long unsigned int"))
87 #ifndef REGISTER_PREFIX
88 #define REGISTER_PREFIX ""
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.
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
200 /* Nonzero whenever Objective-C functionality is being used. */
203 /* Nonzero if -undef was given. It suppresses target built-in macros
207 /* Nonzero means don't recognize the non-ANSI builtin functions. */
211 /* Nonzero means don't recognize the non-ANSI builtin functions.
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'. */
231 /* Nonzero means give string constants the type `const char *', as mandated
234 int flag_const_strings
;
236 /* Nonzero means `$' can be in an identifier. */
238 #ifndef DOLLARS_IN_IDENTIFIERS
239 #define DOLLARS_IN_IDENTIFIERS 1
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. */
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
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. */
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.). */
315 /* Warn about Y2K problems with strftime formats. */
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. */
353 /* Nonzero means use the ISO C99 dialect of C. */
357 /* Nonzero means that we have builtin functions, and main is an int */
361 /* Nonzero means add default format_arg attributes for functions not
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
392 int warn_nested_externs
;
394 /* Warn if main is suspicious. */
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
415 /* ObjC language option variables. */
418 /* Open and close the file for outputting class declarations, if
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;
428 int flag_next_runtime
= 0;
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. */
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
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
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
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
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. */
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
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. */
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. */
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. */
558 /* Nonzero means make the default pedwarns warnings instead of errors.
559 The value of this flag is ignored if -pedantic is specified. */
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
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. */
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
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. */
610 /* Nonzero means warn when the compiler will reorder code. */
614 /* Nonzero means warn when synthesis behavior differs from Cfront's. */
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. */
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. */
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. */
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. */
671 /* Information about how a function name is generated. */
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},
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. */
708 static if_elt
*if_stack
;
710 /* Amount of space in the if statement stack. */
711 static int if_stack_space
= 0;
714 static int if_stack_pointer
= 0;
716 static tree handle_packed_attribute
PARAMS ((tree
*, tree
, tree
, int,
718 static tree handle_nocommon_attribute
PARAMS ((tree
*, tree
, tree
, int,
720 static tree handle_common_attribute
PARAMS ((tree
*, tree
, tree
, int,
722 static tree handle_noreturn_attribute
PARAMS ((tree
*, tree
, tree
, int,
724 static tree handle_noinline_attribute
PARAMS ((tree
*, tree
, tree
, int,
726 static tree handle_always_inline_attribute
PARAMS ((tree
*, tree
, tree
, int,
728 static tree handle_used_attribute
PARAMS ((tree
*, tree
, tree
, int,
730 static tree handle_unused_attribute
PARAMS ((tree
*, tree
, tree
, int,
732 static tree handle_const_attribute
PARAMS ((tree
*, tree
, tree
, int,
734 static tree handle_transparent_union_attribute
PARAMS ((tree
*, tree
, tree
,
736 static tree handle_constructor_attribute
PARAMS ((tree
*, tree
, tree
, int,
738 static tree handle_destructor_attribute
PARAMS ((tree
*, tree
, tree
, int,
740 static tree handle_mode_attribute
PARAMS ((tree
*, tree
, tree
, int,
742 static tree handle_section_attribute
PARAMS ((tree
*, tree
, tree
, int,
744 static tree handle_aligned_attribute
PARAMS ((tree
*, tree
, tree
, int,
746 static tree handle_weak_attribute
PARAMS ((tree
*, tree
, tree
, int,
748 static tree handle_alias_attribute
PARAMS ((tree
*, tree
, tree
, int,
750 static tree handle_visibility_attribute
PARAMS ((tree
*, tree
, tree
, int,
752 static tree handle_tls_model_attribute
PARAMS ((tree
*, tree
, tree
, int,
754 static tree handle_no_instrument_function_attribute
PARAMS ((tree
*, tree
,
757 static tree handle_malloc_attribute
PARAMS ((tree
*, tree
, tree
, int,
759 static tree handle_no_limit_stack_attribute
PARAMS ((tree
*, tree
, tree
, int,
761 static tree handle_pure_attribute
PARAMS ((tree
*, tree
, tree
, int,
763 static tree handle_deprecated_attribute
PARAMS ((tree
*, tree
, tree
, int,
765 static tree handle_vector_size_attribute
PARAMS ((tree
*, tree
, tree
, int,
767 static tree handle_nonnull_attribute
PARAMS ((tree
*, tree
, tree
, int,
769 static tree handle_nothrow_attribute
PARAMS ((tree
*, tree
, tree
, int,
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 *,
782 static void builtin_define_with_int_value
PARAMS ((const char *,
784 static void builtin_define_with_hex_fp_value
PARAMS ((const char *, tree
,
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
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. */
885 c_expand_start_cond (cond
, compstmt_count
, if_stmt
)
890 /* Make sure there is enough space on the stack. */
891 if (if_stack_space
== 0)
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
;
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
;
914 /* Called after the then-clause for an if-statement is processed. */
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. */
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. */
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. */
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. */
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
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. */
979 r
= build_stmt (IF_STMT
, NULL_TREE
, NULL_TREE
, NULL_TREE
);
983 /* Begin a while statement. Returns a newly created WHILE_STMT if
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. */
992 c_begin_while_stmt ()
995 r
= build_stmt (WHILE_STMT
, NULL_TREE
, NULL_TREE
);
1000 c_finish_while_stmt_cond (cond
, while_stmt
)
1004 WHILE_COND (while_stmt
) = cond
;
1007 /* Push current bindings for the function name VAR_DECLS. */
1010 start_fname_decls ()
1013 tree saved
= NULL_TREE
;
1015 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
1017 tree decl
= *fname_vars
[ix
].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. */
1040 finish_fname_decls ()
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
);
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
;
1065 /* We had saved values, restore them. */
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
1084 fname_as_string (pretty_p
)
1087 const char *name
= NULL
;
1090 name
= (current_function_decl
1091 ? (*lang_hooks
.decl_printable_name
) (current_function_decl
, 2)
1093 else if (current_function_decl
&& DECL_NAME (current_function_decl
))
1094 name
= IDENTIFIER_POINTER (DECL_NAME (current_function_decl
));
1100 /* Return the text name of the current function, formatted as
1101 required by the supplied RID value. */
1109 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
1110 if (fname_vars
[ix
].rid
== rid
)
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. */
1123 fname_decl (rid
, id
)
1128 tree decl
= NULL_TREE
;
1130 for (ix
= 0; fname_vars
[ix
].decl
; ix
++)
1131 if (fname_vars
[ix
].rid
== rid
)
1134 decl
= *fname_vars
[ix
].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
;
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");
1168 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
1171 fix_string_type (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
);
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
)
1194 = build_type_variant (wide_flag
? wchar_type_node
: char_type_node
,
1197 = build_array_type (elements
,
1198 build_index_type (build_int_2 (nchars
- 1, 0)));
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;
1211 /* Given a VARRAY of STRING_CST nodes, concatenate them into one
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
);
1222 int wide_length
= 0;
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
;
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. */
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. */
1258 for (i
= 0; i
< nstrings
; ++i
)
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
);
1272 const int nzeros
= (TYPE_PRECISION (wchar_type_node
)
1273 / BITS_PER_UNIT
) - 1;
1276 if (BYTES_BIG_ENDIAN
)
1278 for (k
= 0; k
< len
; k
++)
1280 for (j
= 0; j
< nzeros
; j
++)
1282 *q
++ = TREE_STRING_POINTER (t
)[k
];
1287 for (k
= 0; k
< len
; k
++)
1289 *q
++ = TREE_STRING_POINTER (t
)[k
];
1290 for (j
= 0; j
< nzeros
; j
++)
1297 /* Nul terminate the string. */
1300 for (i
= 0; i
< wchar_bytes
; i
++)
1306 value
= build_string (length
, p
);
1310 TREE_TYPE (value
) = wchar_array_type_node
;
1312 TREE_TYPE (value
) = char_array_type_node
;
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. */
1331 constant_expression_warning (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. */
1349 overflow_warning (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. */
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). */
1407 constant_fits_type_p (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. */
1422 convert_and_check (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. */
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");
1450 unsigned_conversion_warning (t
, expr
);
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. */
1464 /* Used to implement a cache the results of a call to verify_tree. We only
1465 use this for SAVE_EXPRs. */
1468 struct tlist_cache
*next
;
1469 struct tlist
*cache_before_sp
;
1470 struct tlist
*cache_after_sp
;
1474 /* Obstack to use when allocating tlist structures, and corresponding
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
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
)
1503 l
= (struct tlist
*) obstack_alloc (&tlist_obstack
, sizeof *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. */
1514 add_tlist (to
, add
, exclude_writer
, copy
)
1517 tree exclude_writer
;
1522 struct tlist
*next
= add
->next
;
1525 if (! exclude_writer
|| add
->writer
!= exclude_writer
)
1526 *to
= copy
? new_tlist (*to
, add
->expr
, add
->writer
) : add
;
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
1538 merge_tlist (to
, add
, copy
)
1543 struct tlist
**end
= to
;
1546 end
= &(*end
)->next
;
1552 struct tlist
*next
= add
->next
;
1554 for (tmp2
= *to
; tmp2
; tmp2
= tmp2
->next
)
1555 if (tmp2
->expr
== add
->expr
)
1559 tmp2
->writer
= add
->writer
;
1563 *end
= copy
? add
: new_tlist (NULL
, add
->expr
, add
->writer
);
1564 end
= &(*end
)->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
1576 warn_for_collisions_1 (written
, writer
, list
, only_writes
)
1577 tree written
, writer
;
1583 /* Avoid duplicate warnings. */
1584 for (tmp
= warned_ids
; tmp
; tmp
= tmp
->next
)
1585 if (tmp
->expr
== written
)
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
)));
1602 /* Given a list LIST of references to variables, find whether any of these
1603 can cause conflicts due to missing sequence points. */
1606 warn_for_collisions (list
)
1611 for (tmp
= list
; tmp
; tmp
= tmp
->next
)
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
1621 warning_candidate_p (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
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
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. */
1653 verify_tree (x
, pbefore_sp
, pno_sp
, writer
)
1655 struct tlist
**pbefore_sp
, **pno_sp
;
1658 struct tlist
*tmp_before
, *tmp_nosp
, *tmp_list2
, *tmp_list3
;
1659 enum tree_code code
;
1662 /* X may be NULL if it is the operand of an empty statement expression
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
);
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);
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);
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
);
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:
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
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
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);
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);
1766 /* Scan all the list, e.g. indices of multi dimensional array. */
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);
1779 struct tlist_cache
*t
;
1780 for (t
= save_expr_cache
; t
; t
= t
->next
)
1786 t
= (struct tlist_cache
*) obstack_alloc (&tlist_obstack
,
1788 t
->next
= save_expr_cache
;
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
);
1799 struct tlist
*t
= tmp_nosp
;
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);
1816 if (first_rtl_op (code
) == 0)
1818 x
= TREE_OPERAND (x
, 0);
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);
1847 /* Try to warn for undefined behavior in EXPR due to missing sequence
1851 verify_sequence_points (expr
)
1854 struct tlist
*before_sp
= 0, *after_sp
= 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
);
1870 c_expand_expr_stmt (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. */
1895 check_case_value (value
)
1898 if (value
== NULL_TREE
)
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:
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
;
1923 /* Promote char or short to int. */
1924 value
= default_conversion (value
);
1926 constant_expression_warning (value
);
1931 /* Return an integer type with BITS bits of precision,
1932 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1935 c_common_type_for_size (bits
, 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
;
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. */
1979 c_common_type_for_mode (mode
, unsignedp
)
1980 enum machine_mode mode
;
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
;
2003 return unsignedp
? unsigned_intQI_type_node
: intQI_type_node
;
2006 return unsignedp
? unsigned_intHI_type_node
: intHI_type_node
;
2009 return unsignedp
? unsigned_intSI_type_node
: intSI_type_node
;
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
;
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
);
2037 return unsignedp
? unsigned_V16QI_type_node
: V16QI_type_node
;
2039 return unsignedp
? unsigned_V8HI_type_node
: V8HI_type_node
;
2041 return unsignedp
? unsigned_V4SI_type_node
: V4SI_type_node
;
2043 return unsignedp
? unsigned_V2DI_type_node
: V2DI_type_node
;
2045 return unsignedp
? unsigned_V2SI_type_node
: V2SI_type_node
;
2047 return unsignedp
? unsigned_V2HI_type_node
: V2HI_type_node
;
2049 return unsignedp
? unsigned_V4HI_type_node
: V4HI_type_node
;
2051 return unsignedp
? unsigned_V8QI_type_node
: V8QI_type_node
;
2053 return unsignedp
? unsigned_V1DI_type_node
: V1DI_type_node
;
2055 return V16SF_type_node
;
2057 return V4SF_type_node
;
2059 return V2SF_type_node
;
2061 return V2DF_type_node
;
2069 /* Return an unsigned type the same as TYPE in other respects. */
2071 c_common_unsigned_type (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
;
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. */
2106 c_common_signed_type (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
;
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. */
2142 c_common_signed_or_unsigned_type (unsignedp
, type
)
2146 if (! INTEGRAL_TYPE_P (type
)
2147 || TREE_UNSIGNED (type
) == unsignedp
)
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
;
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
;
2181 /* Return the minimum number of bits needed to represent VALUE in a
2182 signed or unsigned type, UNSIGNEDP says which. */
2185 min_precision (value
, unsignedp
)
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
))
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). */
2215 binary_op_error (code
)
2216 enum tree_code code
;
2223 error ("invalid truth-value expression");
2227 opname
= "+"; break;
2229 opname
= "-"; break;
2231 opname
= "*"; break;
2233 opname
= "max"; break;
2235 opname
= "min"; break;
2237 opname
= "=="; break;
2239 opname
= "!="; break;
2241 opname
= "<="; break;
2243 opname
= ">="; break;
2245 opname
= "<"; break;
2247 opname
= ">"; break;
2249 opname
= "<<"; break;
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;
2259 opname
= "&"; break;
2261 opname
= "|"; break;
2262 case TRUTH_ANDIF_EXPR
:
2263 opname
= "&&"; break;
2264 case TRUTH_ORIF_EXPR
:
2265 opname
= "||"; break;
2267 opname
= "^"; break;
2270 opname
= "rotate"; break;
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
2292 shorten_compare (op0_ptr
, op1_ptr
, restype_ptr
, rescode_ptr
)
2293 tree
*op0_ptr
, *op1_ptr
;
2295 enum tree_code
*rescode_ptr
;
2298 tree op0
= *op0_ptr
;
2299 tree op1
= *op1_ptr
;
2300 int unsignedp0
, unsignedp1
;
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
))
2331 int temi
= unsignedp0
;
2339 unsignedp0
= unsignedp1
;
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
);
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
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
);
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
);
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
)
2445 val
= boolean_true_node
;
2447 val
= boolean_false_node
;
2449 else if (code
== GT_EXPR
)
2452 val
= boolean_true_node
;
2454 val
= boolean_false_node
;
2456 else if (code
== LE_EXPR
)
2459 val
= boolean_true_node
;
2461 val
= boolean_false_node
;
2463 else if (code
== GE_EXPR
)
2466 val
= boolean_true_node
;
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
)
2489 primop1
= TYPE_MIN_VALUE (type
);
2495 primop1
= TYPE_MAX_VALUE (type
);
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");
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
);
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
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
),
2546 /* Make sure shorter operand is extended the right way
2547 to match the longer operand. */
2549 = convert (c_common_signed_or_unsigned_type (unsignedp0
,
2550 TREE_TYPE (primop0
)),
2553 = convert (c_common_signed_or_unsigned_type (unsignedp1
,
2554 TREE_TYPE (primop1
)),
2559 /* Here we must do the comparison on the nominal type
2560 using the args exactly as we received them. */
2561 type
= *restype_ptr
;
2565 if (!real1
&& !real2
&& integer_zerop (primop1
)
2566 && TREE_UNSIGNED (*restype_ptr
))
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
),
2580 warning ("comparison of unsigned expression >= 0 is always true");
2581 value
= boolean_true_node
;
2585 if (extra_warnings
&& !in_system_header
2586 && ! (TREE_CODE (primop0
) == INTEGER_CST
2587 && ! TREE_OVERFLOW (convert (c_common_signed_type (type
),
2589 warning ("comparison of unsigned expression < 0 is always false");
2590 value
= boolean_false_node
;
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
),
2608 *op0_ptr
= convert (type
, primop0
);
2609 *op1_ptr
= convert (type
, primop1
);
2611 *restype_ptr
= boolean_type_node
;
2616 /* Return a tree for the sum or difference (RESULTCODE says which)
2617 of pointer PTROP and integer INTOP. */
2620 pointer_int_sum (resultcode
, ptrop
, intop
)
2621 enum tree_code resultcode
;
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
;
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
);
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'. */
2729 c_common_truthvalue_conversion (expr
)
2732 if (TREE_CODE (expr
) == ERROR_MARK
)
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
)))
2741 error ("struct type value used where scalar is required");
2742 return boolean_false_node
;
2745 error ("union type value used where scalar is required");
2746 return boolean_false_node
;
2749 error ("array type value used where scalar is required");
2750 return boolean_false_node
;
2757 switch (TREE_CODE (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
:
2765 case TRUTH_XOR_EXPR
:
2766 case TRUTH_NOT_EXPR
:
2767 TREE_TYPE (expr
) = boolean_type_node
;
2774 return integer_zerop (expr
) ? boolean_false_node
: boolean_true_node
;
2777 return real_zerop (expr
) ? boolean_false_node
: boolean_true_node
;
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)))
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
);
2790 return boolean_true_node
;
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)),
2803 /* These don't change whether an object is nonzero or zero. */
2804 return c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0));
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)));
2814 return c_common_truthvalue_conversion (TREE_OPERAND (expr
, 0));
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))));
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
)
2828 /* fall through... */
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));
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
2845 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr
, 0)))))
2847 /* fall through... */
2849 /* This and MINUS_EXPR can be changed into a comparison of the
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);
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
);
2868 if (warn_parentheses
&& C_EXP_ORIGINAL_CODE (expr
) == MODIFY_EXPR
)
2869 warning ("suggest parentheses around assignment used as truth value");
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)),
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,
2894 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2895 down to the element type of an array. */
2898 c_build_qualified_type (type
, 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
),
2920 TYPE_DOMAIN (type
));
2921 return build_qualified_type (type
, type_quals
);
2924 /* Apply the TYPE_QUALS to the new DECL. */
2927 c_apply_type_quals_to_decl (type_quals
, 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
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. */
2958 c_common_get_alias_set (t
)
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. */
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
)
2976 /* That's all the expressions we handle specially. */
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
)
2987 /* If it has the may_alias attribute, it can alias anything. */
2988 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t
)))
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. */
3000 return get_alias_set (t1
);
3002 else if (POINTER_TYPE_P (t
))
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
3018 But, the standard is wrong. In particular, this code is
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
3029 t1
= build_type_no_quals (t
);
3031 return get_alias_set (t1
);
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. */
3042 c_sizeof_or_alignof_type (type
, op
, complain
)
3047 const char *op_name
;
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
;
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
))
3075 error ("invalid application of `%s' to an incomplete type", op_name
);
3076 value
= size_zero_node
;
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
)
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);
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). */
3105 c_alignof_expr (expr
)
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");
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);
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
)
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
)));
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
3159 #undef DEF_ATTR_IDENT
3160 #undef DEF_ATTR_TREE_LIST
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
3175 c_common_nodes_and_builtins ()
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
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
,
3248 (*lang_hooks
.decls
.pushdecl
) (build_decl (TYPE_DECL
, NULL_TREE
,
3250 (*lang_hooks
.decls
.pushdecl
) (build_decl (TYPE_DECL
, NULL_TREE
,
3252 (*lang_hooks
.decls
.pushdecl
) (build_decl (TYPE_DECL
, NULL_TREE
,
3254 #if HOST_BITS_PER_WIDE_INT >= 64
3255 (*lang_hooks
.decls
.pushdecl
) (build_decl (TYPE_DECL
,
3256 get_identifier ("__int128_t"),
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
));
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. */
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
;
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
;
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
3381 char_array_type_node
3382 = build_array_type (char_type_node
, array_domain_type
);
3384 /* Likewise for arrays of ints. */
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
);
3404 wchar_type_node
= make_signed_type (wchar_type_size
);
3405 record_builtin_type (RID_WCHAR
, "wchar_t", wchar_type_node
);
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
);
3418 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE
)));
3421 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE
)));
3423 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE
)));
3425 default_function_type
= build_function_type (integer_type_node
, NULL_TREE
);
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"),
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
));
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], \
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], \
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], \
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], \
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], \
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], \
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], \
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) \
3540 if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \
3544 decl = builtin_function (NAME, builtin_types[TYPE], ENUM, \
3547 ? (NAME + strlen ("__builtin_")) \
3549 built_in_attributes[(int) ATTRS]); \
3551 decl = builtin_function_2 (NAME, \
3552 NAME + strlen ("__builtin_"), \
3553 builtin_types[TYPE], \
3554 builtin_types[LIBTYPE], \
3559 built_in_attributes[(int) ATTRS]); \
3561 built_in_decls[(int) ENUM] = decl; \
3563 #include "builtins.def"
3566 main_identifier_node
= get_identifier ("main");
3570 build_va_arg (expr
, type
)
3573 return build1 (VA_ARG_EXPR
, type
, expr
);
3577 /* Linked list of disabled built-in functions. */
3579 typedef struct disabled_builtin
3582 struct disabled_builtin
*next
;
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. */
3592 disable_builtin_function (name
)
3595 if (strncmp (name
, "__builtin_", strlen ("__builtin_")) == 0)
3596 error ("cannot disable built-in function `%s'", name
);
3599 disabled_builtin
*new = xmalloc (sizeof (disabled_builtin
));
3601 new->next
= disabled_builtins
;
3602 disabled_builtins
= new;
3607 /* Return true if the built-in function NAME has been disabled, false
3611 builtin_function_disabled_p (name
)
3614 disabled_builtin
*p
;
3615 for (p
= disabled_builtins
; p
!= NULL
; p
= p
->next
)
3617 if (strcmp (name
, p
->name
) == 0)
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. */
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
;
3647 enum built_in_class
class;
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
,
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
,
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. */
3675 c_promoting_integer_type_p (t
)
3678 switch (TREE_CODE (t
))
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
));
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
);
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
)
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
)
3720 if (TYPE_MAIN_VARIANT (type
) == float_type_node
)
3723 if (c_promoting_integer_type_p (type
))
3729 /* Recursively examines the array elements of TYPE, until a non-array
3730 element type is found. */
3733 strip_array_types (type
)
3736 while (TREE_CODE (type
) == ARRAY_TYPE
)
3737 type
= TREE_TYPE (type
);
3742 static tree expand_unordered_cmp
PARAMS ((tree
, tree
, 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
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. */
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
),
3803 return integer_zero_node
;
3806 return build_unary_op (TRUTH_NOT_EXPR
,
3807 build_binary_op (MODE_HAS_NANS (TYPE_MODE (type
))
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. */
3826 expand_tree_builtin (function
, params
, coerced_params
)
3827 tree function
, params
, coerced_params
;
3829 if (DECL_BUILT_IN_CLASS (function
) != BUILT_IN_NORMAL
)
3832 switch (DECL_FUNCTION_CODE (function
))
3836 case BUILT_IN_LLABS
:
3837 case BUILT_IN_IMAXABS
:
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);
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
);
3891 /* Returns nonzero if CODE is the code for a statement. */
3894 statement_code_p (code
)
3895 enum tree_code code
;
3920 if (lang_statement_code_p
)
3921 return (*lang_statement_code_p
) (code
);
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. */
3937 walk_stmt_tree (tp
, func
, data
)
3942 enum tree_code code
;
3947 #define WALK_SUBTREE(NODE) \
3950 result = walk_stmt_tree (&(NODE), func, data); \
3956 /* Skip empty subtrees. */
3960 /* Skip subtrees below non-statement nodes. */
3961 if (!statement_code_p (TREE_CODE (*tp
)))
3964 /* Call the function. */
3966 result
= (*func
) (tp
, &walk_subtrees
, data
);
3968 /* If we found something, return it. */
3972 /* FUNC may have modified the tree, recheck that we're looking at a
3974 code
= TREE_CODE (*tp
);
3975 if (!statement_code_p (code
))
3978 /* Visit the subtrees unless FUNC decided that there was nothing
3979 interesting below this point in the tree. */
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
);
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
)
4009 /* Consider a NULL key (such as arises with a `default' label) to be
4010 smaller than anything else. */
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. */
4029 c_add_case_label (cases
, cond
, low_value
, high_value
)
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. */
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");
4067 pedwarn ("ISO C forbids range expressions in switch statements");
4070 type
= TREE_TYPE (cond
);
4073 low_value
= check_case_value (low_value
);
4074 low_value
= convert_and_check (type
, low_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
)
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
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. */
4126 && CASE_HIGH ((tree
) low_bound
->value
)
4127 && tree_int_cst_compare (CASE_HIGH ((tree
) low_bound
->value
),
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. */
4136 && (tree_int_cst_compare ((tree
) high_bound
->key
,
4141 /* If there was an overlap, issue an error. */
4144 tree duplicate
= CASE_LABEL_DECL ((tree
) node
->value
);
4148 error ("duplicate (or overlapping) case value");
4149 error_with_decl (duplicate
,
4150 "this is the first entry overlapping that value");
4154 error ("duplicate case value") ;
4155 error_with_decl (duplicate
, "previously used here");
4159 error ("multiple default labels in one switch");
4160 error_with_decl (duplicate
, "this is the first default label");
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
);
4176 /* Finish an expression taking the address of LABEL. Returns an
4177 expression for the address. */
4180 finish_label_address_expr (label
)
4187 if (c_language
== clk_cplusplus
)
4188 pedwarn ("ISO C++ forbids taking the address of a label");
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
;
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. */
4209 /* Hook used by expand_expr to expand language-specific tree codes. */
4212 c_expand_expr (exp
, target
, tmode
, modifier
)
4215 enum machine_mode tmode
;
4216 int modifier
; /* Actually enum_modifier. */
4218 switch (TREE_CODE (exp
))
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
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
))
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;
4262 /* Otherwise, note that we want the value from the last
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
);
4276 else if (preserve_result
&& GET_CODE (result
) == MEM
)
4278 if (GET_MODE (result
) != BLKmode
)
4279 result
= copy_to_reg (result
);
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
);
4297 if (TREE_CODE (TREE_OPERAND (exp
, 0)) == ADDR_EXPR
4298 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp
, 0), 0))
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
);
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
);
4326 /* Hook used by safe_from_p to handle language-specific tree codes. */
4329 c_safe_from_p (target
, 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))
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. */
4354 /* Hook used by unsafe_for_reeval to handle language-specific tree codes. */
4357 c_common_unsafe_for_reeval (exp
)
4360 /* Statement expressions may not be reevaluated, likewise compound
4362 if (TREE_CODE (exp
) == STMT_EXPR
4363 || TREE_CODE (exp
) == COMPOUND_LITERAL_EXPR
)
4366 /* Walk all other expressions. */
4370 /* Hook used by staticp to handle language-specific tree codes. */
4376 if (TREE_CODE (exp
) == COMPOUND_LITERAL_EXPR
4377 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp
)))
4382 #define CALLED_AS_BUILT_IN(NODE) \
4383 (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
4386 c_expand_builtin (exp
, target
, tmode
, modifier
)
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
);
4408 case BUILT_IN_PRINTF
:
4409 target
= c_expand_builtin_printf (arglist
, target
, tmode
,
4410 modifier
, ignore
, /*unlocked=*/ 0);
4415 case BUILT_IN_PRINTF_UNLOCKED
:
4416 target
= c_expand_builtin_printf (arglist
, target
, tmode
,
4417 modifier
, ignore
, /*unlocked=*/ 1);
4422 case BUILT_IN_FPRINTF
:
4423 target
= c_expand_builtin_fprintf (arglist
, target
, tmode
,
4424 modifier
, ignore
, /*unlocked=*/ 0);
4429 case BUILT_IN_FPRINTF_UNLOCKED
:
4430 target
= c_expand_builtin_fprintf (arglist
, target
, tmode
,
4431 modifier
, ignore
, /*unlocked=*/ 1);
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
4450 is_valid_printf_arglist (arglist
)
4453 /* Save this value so we can restore it later. */
4454 const int SAVE_pedantic
= pedantic
;
4455 int diagnostic_occurred
= 0;
4458 /* Set this to a known value so the user setting won't affect code
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
,
4467 tree_cons (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. */
4484 c_expand_builtin_printf (arglist
, target
, tmode
, modifier
, ignore
, unlocked
)
4487 enum machine_mode tmode
;
4488 enum expand_modifier modifier
;
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
)
4503 /* Verify the required arguments in the original call. */
4505 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist
))) != POINTER_TYPE
))
4508 /* Check the specifier vs. the parameters. */
4509 if (!is_valid_printf_arglist (arglist
))
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
)
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
);
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
);
4538 /* We can't handle anything else with % args or %% ... yet. */
4539 if (strchr (TREE_STRING_POINTER (stripped_string
), '%'))
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
4550 arglist
= build_int_2 (TREE_STRING_POINTER (stripped_string
)[0], 0);
4551 arglist
= build_tree_list (NULL_TREE
, arglist
);
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
);
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. */
4580 return expand_expr (build_function_call (fn
, arglist
),
4581 (ignore
? const0_rtx
: target
),
4585 /* If the arguments passed to fprintf are suitable for optimizations,
4586 we attempt to transform the call. */
4588 c_expand_builtin_fprintf (arglist
, target
, tmode
, modifier
, ignore
, unlocked
)
4591 enum machine_mode tmode
;
4592 enum expand_modifier modifier
;
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
)
4607 /* Verify the required arguments in the original call. */
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
)))) !=
4615 /* Check the specifier vs. the parameters. */
4616 if (!is_valid_printf_arglist (TREE_CHAIN (arglist
)))
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
)
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
))),
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
))),
4651 /* We can't handle anything else with % args or %% ... yet. */
4652 if (strchr (TREE_STRING_POINTER (stripped_string
), '%'))
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
)));
4663 return expand_expr (build_function_call (fn
, arglist
),
4664 (ignore
? const0_rtx
: target
),
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++). */
4673 boolean_increment (code
, arg
)
4674 enum tree_code code
;
4678 tree true_res
= (c_language
== clk_cplusplus
4680 : c_bool_true_node
);
4681 arg
= stabilize_reference (arg
);
4684 case PREINCREMENT_EXPR
:
4685 val
= build (MODIFY_EXPR
, TREE_TYPE (arg
), arg
, true_res
);
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
);
4693 case PREDECREMENT_EXPR
:
4694 val
= build (MODIFY_EXPR
, TREE_TYPE (arg
), arg
, invert_truthvalue (arg
));
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
);
4705 TREE_SIDE_EFFECTS (val
) = 1;
4709 /* Define NAME with value TYPE precision. */
4711 builtin_define_type_precision (name
, 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. */
4720 builtin_define_float_constants (name_prefix
, fp_suffix
, type
)
4721 const char *name_prefix
;
4722 const char *fp_suffix
;
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;
4735 const struct real_format
*fmt
;
4737 char name
[64], buf
[128];
4738 int dig
, min_10_exp
, max_10_exp
;
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
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
)
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
4836 /* The maximum representable finite floating-point number,
4837 (1 - b**-p) * b**emax */
4842 strcpy (buf
, "0x0.");
4843 n
= fmt
->p
* fmt
->log2_b
;
4844 for (i
= 0, p
= buf
+ 4; i
+ 3 < n
; i
+= 4)
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,
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
,
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. */
4884 cb_register_builtins (pfile
)
4887 /* -undef turns off target-specific built-ins. */
4891 if (c_language
== clk_cplusplus
)
4893 if (SUPPORTS_ONE_ONLY
)
4894 cpp_define (pfile
, "__GXX_WEAK__=1");
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);
4941 builtin_define_with_value ("__VERSION__", version_string
, 1);
4943 /* Other target-independent built-ins determined by command-line
4946 cpp_define (pfile
, "__OPTIMIZE_SIZE__");
4948 cpp_define (pfile
, "__OPTIMIZE__");
4951 cpp_define (pfile
, "__STDC_HOSTED__=1");
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");
4964 cpp_define (pfile
, "__FINITE_MATH_ONLY__=0");
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
4999 builtin_define_std (macro
)
5002 size_t len
= strlen (macro
);
5003 char *buff
= alloca (len
+ 5);
5007 /* prepend __ (or maybe just _) if in user's namespace. */
5008 memcpy (p
, macro
, len
+ 1);
5009 if (!( *p
== '_' && (p
[1] == '_' || ISUPPER (p
[1]))))
5016 cpp_define (parse_in
, p
);
5018 /* If it was in user's namespace... */
5021 /* Define the macro with leading and following __. */
5027 cpp_define (parse_in
, p
);
5029 /* Finally, define the original macro if permitted. */
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
5039 builtin_define_with_value (macro
, expansion
, is_str
)
5041 const char *expansion
;
5045 size_t mlen
= strlen (macro
);
5046 size_t elen
= strlen (expansion
);
5047 size_t extra
= 2; /* space for an = and a NUL */
5050 extra
+= 2; /* space for two quote marks */
5052 buf
= alloca (mlen
+ elen
+ extra
);
5054 sprintf (buf
, "%s=\"%s\"", macro
, expansion
);
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. */
5063 builtin_define_with_int_value (macro
, value
)
5065 HOST_WIDE_INT value
;
5068 size_t mlen
= strlen (macro
);
5070 size_t extra
= 2; /* space for = and NUL. */
5072 buf
= alloca (mlen
+ vlen
+ extra
);
5073 memcpy (buf
, macro
, 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. */
5082 builtin_define_with_hex_fp_value (macro
, type
, digits
, hex_str
, fp_suffix
)
5084 tree type ATTRIBUTE_UNUSED
;
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". */
5113 builtin_define_type_max (macro
, type
, is_long
)
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
))
5134 value
= "2147483647";
5137 value
= "9223372036854775807";
5140 value
= "170141183460469231731687303715884105727";
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
);
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
5176 #undef DEF_ATTR_IDENT
5177 #undef DEF_ATTR_TREE_LIST
5179 c_attrs_initialized
= true;
5182 /* Depending on the name of DECL, apply default attributes to it. */
5185 c_common_insert_default_attributes (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
5204 #undef DEF_ATTR_IDENT
5205 #undef DEF_ATTR_TREE_LIST
5209 /* Output a -Wshadow warning MSGID about NAME, an IDENTIFIER_NODE, and
5210 additionally give the location of the previous declaration DECL. */
5212 shadow_warning (msgid
, 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. */
5228 handle_packed_attribute (node
, name
, args
, flags
, no_add_attrs
)
5231 tree args ATTRIBUTE_UNUSED
;
5238 if (TREE_CODE (*node
) == TYPE_DECL
)
5239 type
= &TREE_TYPE (*node
);
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. */
5256 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5257 *no_add_attrs
= true;
5263 /* Handle a "nocommon" attribute; arguments as in
5264 struct attribute_spec.handler. */
5267 handle_nocommon_attribute (node
, name
, args
, flags
, no_add_attrs
)
5270 tree args ATTRIBUTE_UNUSED
;
5271 int flags ATTRIBUTE_UNUSED
;
5274 if (TREE_CODE (*node
) == VAR_DECL
)
5275 DECL_COMMON (*node
) = 0;
5278 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5279 *no_add_attrs
= true;
5285 /* Handle a "common" attribute; arguments as in
5286 struct attribute_spec.handler. */
5289 handle_common_attribute (node
, name
, args
, flags
, no_add_attrs
)
5292 tree args ATTRIBUTE_UNUSED
;
5293 int flags ATTRIBUTE_UNUSED
;
5296 if (TREE_CODE (*node
) == VAR_DECL
)
5297 DECL_COMMON (*node
) = 1;
5300 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5301 *no_add_attrs
= true;
5307 /* Handle a "noreturn" attribute; arguments as in
5308 struct attribute_spec.handler. */
5311 handle_noreturn_attribute (node
, name
, args
, flags
, no_add_attrs
)
5314 tree args ATTRIBUTE_UNUSED
;
5315 int flags ATTRIBUTE_UNUSED
;
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
)
5326 = build_pointer_type
5327 (build_type_variant (TREE_TYPE (type
),
5328 TREE_READONLY (TREE_TYPE (type
)), 1));
5331 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5332 *no_add_attrs
= true;
5338 /* Handle a "noinline" attribute; arguments as in
5339 struct attribute_spec.handler. */
5342 handle_noinline_attribute (node
, name
, args
, flags
, no_add_attrs
)
5345 tree args ATTRIBUTE_UNUSED
;
5346 int flags ATTRIBUTE_UNUSED
;
5349 if (TREE_CODE (*node
) == FUNCTION_DECL
)
5350 DECL_UNINLINABLE (*node
) = 1;
5353 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5354 *no_add_attrs
= true;
5360 /* Handle a "always_inline" attribute; arguments as in
5361 struct attribute_spec.handler. */
5364 handle_always_inline_attribute (node
, name
, args
, flags
, no_add_attrs
)
5367 tree args ATTRIBUTE_UNUSED
;
5368 int flags ATTRIBUTE_UNUSED
;
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. */
5378 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5379 *no_add_attrs
= true;
5385 /* Handle a "used" attribute; arguments as in
5386 struct attribute_spec.handler. */
5389 handle_used_attribute (node
, name
, args
, flags
, no_add_attrs
)
5392 tree args ATTRIBUTE_UNUSED
;
5393 int flags ATTRIBUTE_UNUSED
;
5396 if (TREE_CODE (*node
) == FUNCTION_DECL
)
5397 TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (*node
))
5398 = TREE_USED (*node
) = 1;
5401 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5402 *no_add_attrs
= true;
5408 /* Handle a "unused" attribute; arguments as in
5409 struct attribute_spec.handler. */
5412 handle_unused_attribute (node
, name
, args
, flags
, no_add_attrs
)
5415 tree args ATTRIBUTE_UNUSED
;
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;
5431 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5432 *no_add_attrs
= true;
5437 if (!(flags
& (int) ATTR_FLAG_TYPE_IN_PLACE
))
5438 *node
= build_type_copy (*node
);
5439 TREE_USED (*node
) = 1;
5445 /* Handle a "const" attribute; arguments as in
5446 struct attribute_spec.handler. */
5449 handle_const_attribute (node
, name
, args
, flags
, no_add_attrs
)
5452 tree args ATTRIBUTE_UNUSED
;
5453 int flags ATTRIBUTE_UNUSED
;
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
)
5464 = build_pointer_type
5465 (build_type_variant (TREE_TYPE (type
), 1,
5466 TREE_THIS_VOLATILE (TREE_TYPE (type
))));
5469 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5470 *no_add_attrs
= true;
5476 /* Handle a "transparent_union" attribute; arguments as in
5477 struct attribute_spec.handler. */
5480 handle_transparent_union_attribute (node
, name
, args
, flags
, no_add_attrs
)
5483 tree args ATTRIBUTE_UNUSED
;
5487 tree decl
= NULL_TREE
;
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;
5501 && TREE_CODE (*type
) == UNION_TYPE
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;
5516 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5517 *no_add_attrs
= true;
5523 /* Handle a "constructor" attribute; arguments as in
5524 struct attribute_spec.handler. */
5527 handle_constructor_attribute (node
, name
, args
, flags
, no_add_attrs
)
5530 tree args ATTRIBUTE_UNUSED
;
5531 int flags ATTRIBUTE_UNUSED
;
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;
5546 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5547 *no_add_attrs
= true;
5553 /* Handle a "destructor" attribute; arguments as in
5554 struct attribute_spec.handler. */
5557 handle_destructor_attribute (node
, name
, args
, flags
, no_add_attrs
)
5560 tree args ATTRIBUTE_UNUSED
;
5561 int flags ATTRIBUTE_UNUSED
;
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;
5576 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5577 *no_add_attrs
= true;
5583 /* Handle a "mode" attribute; arguments as in
5584 struct attribute_spec.handler. */
5587 handle_mode_attribute (node
, name
, args
, flags
, no_add_attrs
)
5591 int flags ATTRIBUTE_UNUSED
;
5596 *no_add_attrs
= true;
5598 if (TREE_CODE (TREE_VALUE (args
)) != IDENTIFIER_NODE
)
5599 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5603 const char *p
= IDENTIFIER_POINTER (TREE_VALUE (args
));
5604 int len
= strlen (p
);
5605 enum machine_mode mode
= VOIDmode
;
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';
5618 /* Change this type to have a type with the specified mode.
5619 First check for the special modes. */
5620 if (! strcmp (p
, "byte"))
5622 else if (!strcmp (p
, "word"))
5624 else if (! strcmp (p
, "pointer"))
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
);
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
));
5649 /* No need to layout the type here. The caller should do this. */
5656 /* Handle a "section" attribute; arguments as in
5657 struct attribute_spec.handler. */
5660 handle_section_attribute (node
, name
, args
, flags
, no_add_attrs
)
5662 tree name ATTRIBUTE_UNUSED
;
5664 int flags ATTRIBUTE_UNUSED
;
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;
5695 DECL_SECTION_NAME (decl
) = TREE_VALUE (args
);
5699 error_with_decl (*node
,
5700 "section attribute not allowed for `%s'");
5701 *no_add_attrs
= true;
5706 error_with_decl (*node
,
5707 "section attributes are not supported for this target");
5708 *no_add_attrs
= true;
5714 /* Handle a "aligned" attribute; arguments as in
5715 struct attribute_spec.handler. */
5718 handle_aligned_attribute (node
, name
, args
, flags
, no_add_attrs
)
5720 tree name ATTRIBUTE_UNUSED
;
5725 tree decl
= NULL_TREE
;
5728 tree align_expr
= (args
? TREE_VALUE (args
)
5729 : size_int (BIGGEST_ALIGNMENT
/ BITS_PER_UNIT
));
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;
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;
5791 DECL_ALIGN (decl
) = (1 << i
) * BITS_PER_UNIT
;
5792 DECL_USER_ALIGN (decl
) = 1;
5798 /* Handle a "weak" attribute; arguments as in
5799 struct attribute_spec.handler. */
5802 handle_weak_attribute (node
, name
, args
, flags
, no_add_attrs
)
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
);
5814 /* Handle an "alias" attribute; arguments as in
5815 struct attribute_spec.handler. */
5818 handle_alias_attribute (node
, name
, args
, flags
, no_add_attrs
)
5822 int flags ATTRIBUTE_UNUSED
;
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)
5838 id
= TREE_VALUE (args
);
5839 if (TREE_CODE (id
) != STRING_CST
)
5841 error ("alias arg not a string");
5842 *no_add_attrs
= true;
5845 id
= get_identifier (TREE_STRING_POINTER (id
));
5846 /* This counts as a use of the object pointed to. */
5849 if (TREE_CODE (decl
) == FUNCTION_DECL
)
5850 DECL_INITIAL (decl
) = error_mark_node
;
5852 DECL_EXTERNAL (decl
) = 0;
5856 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5857 *no_add_attrs
= true;
5863 /* Handle an "visibility" attribute; arguments as in
5864 struct attribute_spec.handler. */
5867 handle_visibility_attribute (node
, name
, args
, flags
, no_add_attrs
)
5871 int flags ATTRIBUTE_UNUSED
;
5876 if (decl_function_context (decl
) != 0 || ! TREE_PUBLIC (decl
))
5878 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5879 *no_add_attrs
= true;
5885 id
= TREE_VALUE (args
);
5886 if (TREE_CODE (id
) != STRING_CST
)
5888 error ("visibility arg not a string");
5889 *no_add_attrs
= true;
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;
5905 /* Handle an "tls_model" attribute; arguments as in
5906 struct attribute_spec.handler. */
5909 handle_tls_model_attribute (node
, name
, args
, flags
, no_add_attrs
)
5913 int flags ATTRIBUTE_UNUSED
;
5918 if (! DECL_THREAD_LOCAL (decl
))
5920 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5921 *no_add_attrs
= true;
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;
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;
5948 /* Handle a "no_instrument_function" attribute; arguments as in
5949 struct attribute_spec.handler. */
5952 handle_no_instrument_function_attribute (node
, name
, args
, flags
, no_add_attrs
)
5955 tree args ATTRIBUTE_UNUSED
;
5956 int flags ATTRIBUTE_UNUSED
;
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;
5976 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl
) = 1;
5981 /* Handle a "malloc" attribute; arguments as in
5982 struct attribute_spec.handler. */
5985 handle_malloc_attribute (node
, name
, args
, flags
, no_add_attrs
)
5988 tree args ATTRIBUTE_UNUSED
;
5989 int flags ATTRIBUTE_UNUSED
;
5992 if (TREE_CODE (*node
) == FUNCTION_DECL
)
5993 DECL_IS_MALLOC (*node
) = 1;
5994 /* ??? TODO: Support types. */
5997 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
5998 *no_add_attrs
= true;
6004 /* Handle a "no_limit_stack" attribute; arguments as in
6005 struct attribute_spec.handler. */
6008 handle_no_limit_stack_attribute (node
, name
, args
, flags
, no_add_attrs
)
6011 tree args ATTRIBUTE_UNUSED
;
6012 int flags ATTRIBUTE_UNUSED
;
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;
6032 DECL_NO_LIMIT_STACK (decl
) = 1;
6037 /* Handle a "pure" attribute; arguments as in
6038 struct attribute_spec.handler. */
6041 handle_pure_attribute (node
, name
, args
, flags
, no_add_attrs
)
6044 tree args ATTRIBUTE_UNUSED
;
6045 int flags ATTRIBUTE_UNUSED
;
6048 if (TREE_CODE (*node
) == FUNCTION_DECL
)
6049 DECL_IS_PURE (*node
) = 1;
6050 /* ??? TODO: Support types. */
6053 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
6054 *no_add_attrs
= true;
6060 /* Handle a "deprecated" attribute; arguments as in
6061 struct attribute_spec.handler. */
6064 handle_deprecated_attribute (node
, name
, args
, flags
, no_add_attrs
)
6067 tree args ATTRIBUTE_UNUSED
;
6071 tree type
= NULL_TREE
;
6073 const char *what
= NULL
;
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;
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;
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
)));
6111 warning ("`%s' attribute ignored for `%s'",
6112 IDENTIFIER_POINTER (name
), what
);
6114 warning ("`%s' attribute ignored",
6115 IDENTIFIER_POINTER (name
));
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. */
6132 handle_vector_size_attribute (node
, name
, args
, flags
, no_add_attrs
)
6136 int flags ATTRIBUTE_UNUSED
;
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
));
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
));
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
6188 : MODE_VECTOR_FLOAT
);
6190 mode
= GET_MODE_WIDER_MODE (mode
))
6191 if (vecsize
== GET_MODE_SIZE (mode
)
6192 && nunits
== (unsigned HOST_WIDE_INT
) GET_MODE_NUNITS (mode
))
6198 if (new_mode
== VOIDmode
)
6200 error ("no vector mode with the size and type specified could be found");
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
)
6216 if (TYPE_MODE (other_type
) == mode
&& type
== array_type
)
6218 new_type
= other_type
;
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
));
6232 error ("no vector mode with the size and type specified could be found");
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
));
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
;
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
);
6272 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
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. */
6283 vector_size_helper (type
, bottom
)
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
));
6306 TREE_READONLY (outer
) = TREE_READONLY (type
);
6307 TREE_THIS_VOLATILE (outer
) = TREE_THIS_VOLATILE (type
);
6312 /* Handle the "nonnull" attribute. */
6314 handle_nonnull_attribute (node
, name
, args
, flags
, no_add_attrs
)
6316 tree name ATTRIBUTE_UNUSED
;
6318 int flags ATTRIBUTE_UNUSED
;
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. */
6329 if (! TYPE_ARG_TYPES (type
))
6331 error ("nonnull attribute without arguments on a non-prototype");
6332 *no_add_attrs
= true;
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
))
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;
6352 argument
= TYPE_ARG_TYPES (type
);
6355 for (ck_num
= 1; ; ck_num
++)
6357 if (! argument
|| ck_num
== arg_num
)
6359 argument
= TREE_CHAIN (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;
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;
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. */
6388 check_function_nonnull (attrs
, params
)
6392 tree a
, args
, param
;
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
))
6410 if (! args
|| nonnull_check_p (args
, param_num
))
6411 check_function_arguments_recurse (check_nonnull_arg
, NULL
,
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
6424 nonnull_check_p (args
, param_num
)
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
))
6435 if (arg_num
== param_num
)
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. */
6446 check_nonnull_arg (ctx
, param
, param_num
)
6447 void *ctx ATTRIBUTE_UNUSED
;
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
)
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. */
6467 get_nonnull_operand (arg_num_expr
, valp
)
6469 unsigned HOST_WIDE_INT
*valp
;
6471 /* Strip any conversions from the arg number and verify they
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)
6482 *valp
= TREE_INT_CST_LOW (arg_num_expr
);
6486 /* Handle a "nothrow" attribute; arguments as in
6487 struct attribute_spec.handler. */
6490 handle_nothrow_attribute (node
, name
, args
, flags
, no_add_attrs
)
6493 tree args ATTRIBUTE_UNUSED
;
6494 int flags ATTRIBUTE_UNUSED
;
6497 if (TREE_CODE (*node
) == FUNCTION_DECL
)
6498 TREE_NOTHROW (*node
) = 1;
6499 /* ??? TODO: Support types. */
6502 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name
));
6503 *no_add_attrs
= true;
6509 /* Check for valid arguments being passed to a function. */
6511 check_function_arguments (attrs
, 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. */
6519 check_function_nonnull (attrs
, params
);
6521 /* Check for errors in format strings. */
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. */
6531 check_function_arguments_recurse (callback
, ctx
, param
, param_num
)
6532 void (*callback
) PARAMS ((void *, tree
, unsigned HOST_WIDE_INT
));
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
);
6545 if (TREE_CODE (param
) == CALL_EXPR
)
6547 tree type
= TREE_TYPE (TREE_TYPE (TREE_OPERAND (param
, 0)));
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
);
6557 attrs
= TREE_CHAIN (attrs
))
6558 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs
)))
6561 tree format_num_expr
;
6565 /* Extract the argument number, which was previously checked
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)
6577 format_num
= TREE_INT_CST_LOW (format_num_expr
);
6579 for (inner_args
= TREE_OPERAND (param
, 1), i
= 1;
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
),
6587 found_format_arg
= true;
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
)
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
);
6609 (*callback
) (ctx
, param
, param_num
);
6612 #include "gt-c-common.h"