1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 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 3, 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 COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
23 #include "coretypes.h"
35 #include "diagnostic.h"
40 #include "langhooks.h"
41 #include "tree-inline.h"
44 #include "tree-iterator.h"
46 #include "tree-mudflap.h"
50 #include "target-def.h"
51 #include "fixed-value.h"
53 cpp_reader *parse_in; /* Declared in c-pragma.h. */
55 /* We let tm.h override the types used here, to handle trivial differences
56 such as the choice of unsigned int or long unsigned int for size_t.
57 When machines start needing nontrivial differences in the size type,
58 it would be best to do something here to figure out automatically
59 from other information what type to use. */
62 #define SIZE_TYPE "long unsigned int"
66 #define PID_TYPE "int"
70 #define WCHAR_TYPE "int"
73 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
74 #define MODIFIED_WCHAR_TYPE \
75 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
78 #define PTRDIFF_TYPE "long int"
82 #define WINT_TYPE "unsigned int"
86 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
88 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
94 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
96 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
97 ? "long unsigned int" \
98 : "long long unsigned int"))
101 /* The following symbols are subsumed in the c_global_trees array, and
102 listed here individually for documentation purposes.
104 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
106 tree short_integer_type_node;
107 tree long_integer_type_node;
108 tree long_long_integer_type_node;
110 tree short_unsigned_type_node;
111 tree long_unsigned_type_node;
112 tree long_long_unsigned_type_node;
114 tree truthvalue_type_node;
115 tree truthvalue_false_node;
116 tree truthvalue_true_node;
118 tree ptrdiff_type_node;
120 tree unsigned_char_type_node;
121 tree signed_char_type_node;
122 tree wchar_type_node;
123 tree signed_wchar_type_node;
124 tree unsigned_wchar_type_node;
126 tree float_type_node;
127 tree double_type_node;
128 tree long_double_type_node;
130 tree complex_integer_type_node;
131 tree complex_float_type_node;
132 tree complex_double_type_node;
133 tree complex_long_double_type_node;
135 tree dfloat32_type_node;
136 tree dfloat64_type_node;
137 tree_dfloat128_type_node;
139 tree intQI_type_node;
140 tree intHI_type_node;
141 tree intSI_type_node;
142 tree intDI_type_node;
143 tree intTI_type_node;
145 tree unsigned_intQI_type_node;
146 tree unsigned_intHI_type_node;
147 tree unsigned_intSI_type_node;
148 tree unsigned_intDI_type_node;
149 tree unsigned_intTI_type_node;
151 tree widest_integer_literal_type_node;
152 tree widest_unsigned_literal_type_node;
154 Nodes for types `void *' and `const void *'.
156 tree ptr_type_node, const_ptr_type_node;
158 Nodes for types `char *' and `const char *'.
160 tree string_type_node, const_string_type_node;
162 Type `char[SOMENUMBER]'.
163 Used when an array of char is needed and the size is irrelevant.
165 tree char_array_type_node;
167 Type `int[SOMENUMBER]' or something like it.
168 Used when an array of int needed and the size is irrelevant.
170 tree int_array_type_node;
172 Type `wchar_t[SOMENUMBER]' or something like it.
173 Used when a wide string literal is created.
175 tree wchar_array_type_node;
177 Type `int ()' -- used for implicit declaration of functions.
179 tree default_function_type;
181 A VOID_TYPE node, packaged in a TREE_LIST.
185 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
186 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
187 VAR_DECLS, but C++ does.)
189 tree function_name_decl_node;
190 tree pretty_function_name_decl_node;
191 tree c99_function_name_decl_node;
193 Stack of nested function name VAR_DECLs.
195 tree saved_function_name_decls;
199 tree c_global_trees[CTI_MAX];
201 /* Switches common to the C front ends. */
203 /* Nonzero if prepreprocessing only. */
205 int flag_preprocess_only;
207 /* Nonzero means don't output line number information. */
209 char flag_no_line_commands;
211 /* Nonzero causes -E output not to be done, but directives such as
212 #define that have side effects are still obeyed. */
216 /* Nonzero means dump macros in some fashion. */
218 char flag_dump_macros;
220 /* Nonzero means pass #include lines through to the output. */
222 char flag_dump_includes;
224 /* Nonzero means process PCH files while preprocessing. */
226 bool flag_pch_preprocess;
228 /* The file name to which we should write a precompiled header, or
229 NULL if no header will be written in this compile. */
231 const char *pch_file;
233 /* Nonzero if an ISO standard was selected. It rejects macros in the
237 /* Nonzero if -undef was given. It suppresses target built-in macros
241 /* Nonzero means don't recognize the non-ANSI builtin functions. */
245 /* Nonzero means don't recognize the non-ANSI builtin functions.
248 int flag_no_nonansi_builtin;
250 /* Nonzero means give `double' the same size as `float'. */
252 int flag_short_double;
254 /* Nonzero means give `wchar_t' the same size as `short'. */
256 int flag_short_wchar;
258 /* Nonzero means allow implicit conversions between vectors with
259 differing numbers of subparts and/or differing element types. */
260 int flag_lax_vector_conversions;
262 /* Nonzero means allow Microsoft extensions without warnings or errors. */
263 int flag_ms_extensions;
265 /* Nonzero means don't recognize the keyword `asm'. */
269 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
271 int flag_signed_bitfields = 1;
273 /* Warn about #pragma directives that are not recognized. */
275 int warn_unknown_pragmas; /* Tri state variable. */
277 /* Warn about format/argument anomalies in calls to formatted I/O functions
278 (*printf, *scanf, strftime, strfmon, etc.). */
282 /* Warn about using __null (as NULL in C++) as sentinel. For code compiled
283 with GCC this doesn't matter as __null is guaranteed to have the right
286 int warn_strict_null_sentinel;
288 /* Zero means that faster, ...NonNil variants of objc_msgSend...
289 calls will be used in ObjC; passing nil receivers to such calls
290 will most likely result in crashes. */
291 int flag_nil_receivers = 1;
293 /* Nonzero means that code generation will be altered to support
294 "zero-link" execution. This currently affects ObjC only, but may
295 affect other languages in the future. */
296 int flag_zero_link = 0;
298 /* Nonzero means emit an '__OBJC, __image_info' for the current translation
299 unit. It will inform the ObjC runtime that class definition(s) herein
300 contained are to replace one(s) previously loaded. */
301 int flag_replace_objc_classes = 0;
303 /* C/ObjC language option variables. */
306 /* Nonzero means allow type mismatches in conditional expressions;
307 just make their values `void'. */
309 int flag_cond_mismatch;
311 /* Nonzero means enable C89 Amendment 1 features. */
315 /* Nonzero means use the ISO C99 dialect of C. */
319 /* Nonzero means that we have builtin functions, and main is an int. */
323 /* Warn if main is suspicious. */
328 /* ObjC language option variables. */
331 /* Open and close the file for outputting class declarations, if
334 int flag_gen_declaration;
336 /* Tells the compiler that this is a special run. Do not perform any
337 compiling, instead we are to test some platform dependent features
338 and output a C header file with appropriate definitions. */
340 int print_struct_values;
342 /* Tells the compiler what is the constant string class for Objc. */
344 const char *constant_string_class_name;
347 /* C++ language option variables. */
350 /* Nonzero means don't recognize any extension keywords. */
352 int flag_no_gnu_keywords;
354 /* Nonzero means do emit exported implementations of functions even if
355 they can be inlined. */
357 int flag_implement_inlines = 1;
359 /* Nonzero means that implicit instantiations will be emitted if needed. */
361 int flag_implicit_templates = 1;
363 /* Nonzero means that implicit instantiations of inline templates will be
364 emitted if needed, even if instantiations of non-inline templates
367 int flag_implicit_inline_templates = 1;
369 /* Nonzero means generate separate instantiation control files and
370 juggle them at link time. */
372 int flag_use_repository;
374 /* Nonzero if we want to issue diagnostics that the standard says are not
377 int flag_optional_diags = 1;
379 /* Nonzero means we should attempt to elide constructors when possible. */
381 int flag_elide_constructors = 1;
383 /* Nonzero means that member functions defined in class scope are
384 inline by default. */
386 int flag_default_inline = 1;
388 /* Controls whether compiler generates 'type descriptor' that give
389 run-time type information. */
393 /* Nonzero if we want to conserve space in the .o files. We do this
394 by putting uninitialized data and runtime initialized data into
395 .common instead of .data at the expense of not flagging multiple
398 int flag_conserve_space;
400 /* Nonzero if we want to obey access control semantics. */
402 int flag_access_control = 1;
404 /* Nonzero if we want to check the return value of new and avoid calling
405 constructors if it is a null pointer. */
409 /* The C++ dialect being used. C++98 is the default. */
411 enum cxx_dialect cxx_dialect = cxx98;
413 /* Nonzero if we want the new ISO rules for pushing a new scope for `for'
414 initialization variables.
415 0: Old rules, set by -fno-for-scope.
416 2: New ISO rules, set by -ffor-scope.
417 1: Try to implement new ISO rules, but with backup compatibility
418 (and warnings). This is the default, for now. */
420 int flag_new_for_scope = 1;
422 /* Nonzero if we want to emit defined symbols with common-like linkage as
423 weak symbols where possible, in order to conform to C++ semantics.
424 Otherwise, emit them as local symbols. */
428 /* 0 means we want the preprocessor to not emit line directives for
429 the current working directory. 1 means we want it to do it. -1
430 means we should decide depending on whether debugging information
431 is being emitted or not. */
433 int flag_working_directory = -1;
435 /* Nonzero to use __cxa_atexit, rather than atexit, to register
436 destructors for local statics and global objects. '2' means it has been
437 set nonzero as a default, not by a command-line flag. */
439 int flag_use_cxa_atexit = DEFAULT_USE_CXA_ATEXIT;
441 /* Nonzero to use __cxa_get_exception_ptr in C++ exception-handling
442 code. '2' means it has not been set explicitly on the command line. */
444 int flag_use_cxa_get_exception_ptr = 2;
446 /* Nonzero means to implement standard semantics for exception
447 specifications, calling unexpected if an exception is thrown that
448 doesn't match the specification. Zero means to treat them as
449 assertions and optimize accordingly, but not check them. */
451 int flag_enforce_eh_specs = 1;
453 /* Nonzero means to generate thread-safe code for initializing local
456 int flag_threadsafe_statics = 1;
458 /* Nonzero means warn about implicit declarations. */
460 int warn_implicit = 1;
462 /* Maximum template instantiation depth. This limit is rather
463 arbitrary, but it exists to limit the time it takes to notice
464 infinite template instantiations. */
466 int max_tinst_depth = 500;
470 /* The elements of `ridpointers' are identifier nodes for the reserved
471 type names and storage classes. It is indexed by a RID_... value. */
474 tree (*make_fname_decl) (tree, int);
476 /* Nonzero means the expression being parsed will never be evaluated.
477 This is a count, since unevaluated expressions can nest. */
480 /* Information about how a function name is generated. */
483 tree *const decl; /* pointer to the VAR_DECL. */
484 const unsigned rid; /* RID number for the identifier. */
485 const int pretty; /* How pretty is it? */
488 /* The three ways of getting then name of the current function. */
490 const struct fname_var_t fname_vars[] =
492 /* C99 compliant __func__, must be first. */
493 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
494 /* GCC __FUNCTION__ compliant. */
495 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
496 /* GCC __PRETTY_FUNCTION__ compliant. */
497 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
501 static tree check_case_value (tree);
502 static bool check_case_bounds (tree, tree, tree *, tree *);
504 static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
505 static tree handle_nocommon_attribute (tree *, tree, tree, int, bool *);
506 static tree handle_common_attribute (tree *, tree, tree, int, bool *);
507 static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
508 static tree handle_hot_attribute (tree *, tree, tree, int, bool *);
509 static tree handle_cold_attribute (tree *, tree, tree, int, bool *);
510 static tree handle_noinline_attribute (tree *, tree, tree, int, bool *);
511 static tree handle_always_inline_attribute (tree *, tree, tree, int,
513 static tree handle_gnu_inline_attribute (tree *, tree, tree, int, bool *);
514 static tree handle_artificial_attribute (tree *, tree, tree, int, bool *);
515 static tree handle_flatten_attribute (tree *, tree, tree, int, bool *);
516 static tree handle_error_attribute (tree *, tree, tree, int, bool *);
517 static tree handle_used_attribute (tree *, tree, tree, int, bool *);
518 static tree handle_unused_attribute (tree *, tree, tree, int, bool *);
519 static tree handle_externally_visible_attribute (tree *, tree, tree, int,
521 static tree handle_const_attribute (tree *, tree, tree, int, bool *);
522 static tree handle_transparent_union_attribute (tree *, tree, tree,
524 static tree handle_constructor_attribute (tree *, tree, tree, int, bool *);
525 static tree handle_destructor_attribute (tree *, tree, tree, int, bool *);
526 static tree handle_mode_attribute (tree *, tree, tree, int, bool *);
527 static tree handle_section_attribute (tree *, tree, tree, int, bool *);
528 static tree handle_aligned_attribute (tree *, tree, tree, int, bool *);
529 static tree handle_weak_attribute (tree *, tree, tree, int, bool *) ;
530 static tree handle_alias_attribute (tree *, tree, tree, int, bool *);
531 static tree handle_weakref_attribute (tree *, tree, tree, int, bool *) ;
532 static tree handle_visibility_attribute (tree *, tree, tree, int,
534 static tree handle_tls_model_attribute (tree *, tree, tree, int,
536 static tree handle_no_instrument_function_attribute (tree *, tree,
538 static tree handle_malloc_attribute (tree *, tree, tree, int, bool *);
539 static tree handle_returns_twice_attribute (tree *, tree, tree, int, bool *);
540 static tree handle_no_limit_stack_attribute (tree *, tree, tree, int,
542 static tree handle_pure_attribute (tree *, tree, tree, int, bool *);
543 static tree handle_novops_attribute (tree *, tree, tree, int, bool *);
544 static tree handle_deprecated_attribute (tree *, tree, tree, int,
546 static tree handle_vector_size_attribute (tree *, tree, tree, int,
548 static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *);
549 static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *);
550 static tree handle_cleanup_attribute (tree *, tree, tree, int, bool *);
551 static tree handle_warn_unused_result_attribute (tree *, tree, tree, int,
553 static tree handle_sentinel_attribute (tree *, tree, tree, int, bool *);
554 static tree handle_type_generic_attribute (tree *, tree, tree, int, bool *);
555 static tree handle_alloc_size_attribute (tree *, tree, tree, int, bool *);
557 static void check_function_nonnull (tree, int, tree *);
558 static void check_nonnull_arg (void *, tree, unsigned HOST_WIDE_INT);
559 static bool nonnull_check_p (tree, unsigned HOST_WIDE_INT);
560 static bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
561 static int resort_field_decl_cmp (const void *, const void *);
563 /* Table of machine-independent attributes common to all C-like languages. */
564 const struct attribute_spec c_common_attribute_table[] =
566 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
567 { "packed", 0, 0, false, false, false,
568 handle_packed_attribute },
569 { "nocommon", 0, 0, true, false, false,
570 handle_nocommon_attribute },
571 { "common", 0, 0, true, false, false,
572 handle_common_attribute },
573 /* FIXME: logically, noreturn attributes should be listed as
574 "false, true, true" and apply to function types. But implementing this
575 would require all the places in the compiler that use TREE_THIS_VOLATILE
576 on a decl to identify non-returning functions to be located and fixed
577 to check the function type instead. */
578 { "noreturn", 0, 0, true, false, false,
579 handle_noreturn_attribute },
580 { "volatile", 0, 0, true, false, false,
581 handle_noreturn_attribute },
582 { "noinline", 0, 0, true, false, false,
583 handle_noinline_attribute },
584 { "always_inline", 0, 0, true, false, false,
585 handle_always_inline_attribute },
586 { "gnu_inline", 0, 0, true, false, false,
587 handle_gnu_inline_attribute },
588 { "artificial", 0, 0, true, false, false,
589 handle_artificial_attribute },
590 { "flatten", 0, 0, true, false, false,
591 handle_flatten_attribute },
592 { "used", 0, 0, true, false, false,
593 handle_used_attribute },
594 { "unused", 0, 0, false, false, false,
595 handle_unused_attribute },
596 { "externally_visible", 0, 0, true, false, false,
597 handle_externally_visible_attribute },
598 /* The same comments as for noreturn attributes apply to const ones. */
599 { "const", 0, 0, true, false, false,
600 handle_const_attribute },
601 { "transparent_union", 0, 0, false, false, false,
602 handle_transparent_union_attribute },
603 { "constructor", 0, 1, true, false, false,
604 handle_constructor_attribute },
605 { "destructor", 0, 1, true, false, false,
606 handle_destructor_attribute },
607 { "mode", 1, 1, false, true, false,
608 handle_mode_attribute },
609 { "section", 1, 1, true, false, false,
610 handle_section_attribute },
611 { "aligned", 0, 1, false, false, false,
612 handle_aligned_attribute },
613 { "weak", 0, 0, true, false, false,
614 handle_weak_attribute },
615 { "alias", 1, 1, true, false, false,
616 handle_alias_attribute },
617 { "weakref", 0, 1, true, false, false,
618 handle_weakref_attribute },
619 { "no_instrument_function", 0, 0, true, false, false,
620 handle_no_instrument_function_attribute },
621 { "malloc", 0, 0, true, false, false,
622 handle_malloc_attribute },
623 { "returns_twice", 0, 0, true, false, false,
624 handle_returns_twice_attribute },
625 { "no_stack_limit", 0, 0, true, false, false,
626 handle_no_limit_stack_attribute },
627 { "pure", 0, 0, true, false, false,
628 handle_pure_attribute },
629 /* For internal use (marking of builtins) only. The name contains space
630 to prevent its usage in source code. */
631 { "no vops", 0, 0, true, false, false,
632 handle_novops_attribute },
633 { "deprecated", 0, 0, false, false, false,
634 handle_deprecated_attribute },
635 { "vector_size", 1, 1, false, true, false,
636 handle_vector_size_attribute },
637 { "visibility", 1, 1, false, false, false,
638 handle_visibility_attribute },
639 { "tls_model", 1, 1, true, false, false,
640 handle_tls_model_attribute },
641 { "nonnull", 0, -1, false, true, true,
642 handle_nonnull_attribute },
643 { "nothrow", 0, 0, true, false, false,
644 handle_nothrow_attribute },
645 { "may_alias", 0, 0, false, true, false, NULL },
646 { "cleanup", 1, 1, true, false, false,
647 handle_cleanup_attribute },
648 { "warn_unused_result", 0, 0, false, true, true,
649 handle_warn_unused_result_attribute },
650 { "sentinel", 0, 1, false, true, true,
651 handle_sentinel_attribute },
652 /* For internal use (marking of builtins) only. The name contains space
653 to prevent its usage in source code. */
654 { "type generic", 0, 0, false, true, true,
655 handle_type_generic_attribute },
656 { "alloc_size", 1, 2, false, true, true,
657 handle_alloc_size_attribute },
658 { "cold", 0, 0, true, false, false,
659 handle_cold_attribute },
660 { "hot", 0, 0, true, false, false,
661 handle_hot_attribute },
662 { "warning", 1, 1, true, false, false,
663 handle_error_attribute },
664 { "error", 1, 1, true, false, false,
665 handle_error_attribute },
666 { NULL, 0, 0, false, false, false, NULL }
669 /* Give the specifications for the format attributes, used by C and all
672 const struct attribute_spec c_common_format_attribute_table[] =
674 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
675 { "format", 3, 3, false, true, true,
676 handle_format_attribute },
677 { "format_arg", 1, 1, false, true, true,
678 handle_format_arg_attribute },
679 { NULL, 0, 0, false, false, false, NULL }
682 /* Push current bindings for the function name VAR_DECLS. */
685 start_fname_decls (void)
688 tree saved = NULL_TREE;
690 for (ix = 0; fname_vars[ix].decl; ix++)
692 tree decl = *fname_vars[ix].decl;
696 saved = tree_cons (decl, build_int_cst (NULL_TREE, ix), saved);
697 *fname_vars[ix].decl = NULL_TREE;
700 if (saved || saved_function_name_decls)
701 /* Normally they'll have been NULL, so only push if we've got a
702 stack, or they are non-NULL. */
703 saved_function_name_decls = tree_cons (saved, NULL_TREE,
704 saved_function_name_decls);
707 /* Finish up the current bindings, adding them into the current function's
708 statement tree. This must be done _before_ finish_stmt_tree is called.
709 If there is no current function, we must be at file scope and no statements
710 are involved. Pop the previous bindings. */
713 finish_fname_decls (void)
716 tree stmts = NULL_TREE;
717 tree stack = saved_function_name_decls;
719 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
720 append_to_statement_list (TREE_VALUE (stack), &stmts);
724 tree *bodyp = &DECL_SAVED_TREE (current_function_decl);
726 if (TREE_CODE (*bodyp) == BIND_EXPR)
727 bodyp = &BIND_EXPR_BODY (*bodyp);
729 append_to_statement_list_force (*bodyp, &stmts);
733 for (ix = 0; fname_vars[ix].decl; ix++)
734 *fname_vars[ix].decl = NULL_TREE;
738 /* We had saved values, restore them. */
741 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
743 tree decl = TREE_PURPOSE (saved);
744 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
746 *fname_vars[ix].decl = decl;
748 stack = TREE_CHAIN (stack);
750 saved_function_name_decls = stack;
753 /* Return the text name of the current function, suitably prettified
754 by PRETTY_P. Return string must be freed by caller. */
757 fname_as_string (int pretty_p)
759 const char *name = "top level";
762 cpp_string cstr = { 0, 0 }, strname;
770 if (current_function_decl)
771 name = lang_hooks.decl_printable_name (current_function_decl, vrb);
773 len = strlen (name) + 3; /* Two for '"'s. One for NULL. */
775 namep = XNEWVEC (char, len);
776 snprintf (namep, len, "\"%s\"", name);
777 strname.text = (unsigned char *) namep;
778 strname.len = len - 1;
780 if (cpp_interpret_string (parse_in, &strname, 1, &cstr, false))
783 return (const char *) cstr.text;
789 /* Expand DECL if it declares an entity not handled by the
793 c_expand_decl (tree decl)
795 if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
797 /* Let the back-end know about this variable. */
798 if (!anon_aggr_type_p (TREE_TYPE (decl)))
799 emit_local_var (decl);
801 expand_anon_union_decl (decl, NULL_TREE,
802 DECL_ANON_UNION_ELEMS (decl));
811 /* Return the VAR_DECL for a const char array naming the current
812 function. If the VAR_DECL has not yet been created, create it
813 now. RID indicates how it should be formatted and IDENTIFIER_NODE
814 ID is its name (unfortunately C and C++ hold the RID values of
815 keywords in different places, so we can't derive RID from ID in
816 this language independent code. */
819 fname_decl (unsigned int rid, tree id)
822 tree decl = NULL_TREE;
824 for (ix = 0; fname_vars[ix].decl; ix++)
825 if (fname_vars[ix].rid == rid)
828 decl = *fname_vars[ix].decl;
831 /* If a tree is built here, it would normally have the lineno of
832 the current statement. Later this tree will be moved to the
833 beginning of the function and this line number will be wrong.
834 To avoid this problem set the lineno to 0 here; that prevents
835 it from appearing in the RTL. */
837 location_t saved_location = input_location;
838 input_location = UNKNOWN_LOCATION;
840 stmts = push_stmt_list ();
841 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
842 stmts = pop_stmt_list (stmts);
843 if (!IS_EMPTY_STMT (stmts))
844 saved_function_name_decls
845 = tree_cons (decl, stmts, saved_function_name_decls);
846 *fname_vars[ix].decl = decl;
847 input_location = saved_location;
849 if (!ix && !current_function_decl)
850 pedwarn ("%qD is not defined outside of function scope", decl);
855 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
858 fix_string_type (tree value)
860 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
861 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
862 int length = TREE_STRING_LENGTH (value);
864 tree e_type, i_type, a_type;
866 /* Compute the number of elements, for the array type. */
867 nchars = wide_flag ? length / wchar_bytes : length;
869 /* C89 2.2.4.1, C99 5.2.4.1 (Translation limits). The analogous
870 limit in C++98 Annex B is very large (65536) and is not normative,
871 so we do not diagnose it (warn_overlength_strings is forced off
872 in c_common_post_options). */
873 if (warn_overlength_strings)
875 const int nchars_max = flag_isoc99 ? 4095 : 509;
876 const int relevant_std = flag_isoc99 ? 99 : 90;
877 if (nchars - 1 > nchars_max)
878 /* Translators: The %d after 'ISO C' will be 90 or 99. Do not
879 separate the %d from the 'C'. 'ISO' should not be
880 translated, but it may be moved after 'C%d' in languages
881 where modifiers follow nouns. */
882 pedwarn ("string length %qd is greater than the length %qd "
883 "ISO C%d compilers are required to support",
884 nchars - 1, nchars_max, relevant_std);
887 /* Create the array type for the string constant. The ISO C++
888 standard says that a string literal has type `const char[N]' or
889 `const wchar_t[N]'. We use the same logic when invoked as a C
890 front-end with -Wwrite-strings.
891 ??? We should change the type of an expression depending on the
892 state of a warning flag. We should just be warning -- see how
893 this is handled in the C++ front-end for the deprecated implicit
894 conversion from string literals to `char*' or `wchar_t*'.
896 The C++ front end relies on TYPE_MAIN_VARIANT of a cv-qualified
897 array type being the unqualified version of that type.
898 Therefore, if we are constructing an array of const char, we must
899 construct the matching unqualified array type first. The C front
900 end does not require this, but it does no harm, so we do it
902 e_type = wide_flag ? wchar_type_node : char_type_node;
903 i_type = build_index_type (build_int_cst (NULL_TREE, nchars - 1));
904 a_type = build_array_type (e_type, i_type);
905 if (c_dialect_cxx() || warn_write_strings)
906 a_type = c_build_qualified_type (a_type, TYPE_QUAL_CONST);
908 TREE_TYPE (value) = a_type;
909 TREE_CONSTANT (value) = 1;
910 TREE_INVARIANT (value) = 1;
911 TREE_READONLY (value) = 1;
912 TREE_STATIC (value) = 1;
916 /* Print a warning if a constant expression had overflow in folding.
917 Invoke this function on every expression that the language
918 requires to be a constant expression.
919 Note the ANSI C standard says it is erroneous for a
920 constant expression to overflow. */
923 constant_expression_warning (tree value)
925 if (warn_overflow && pedantic
926 && (TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
927 || TREE_CODE (value) == FIXED_CST
928 || TREE_CODE (value) == VECTOR_CST
929 || TREE_CODE (value) == COMPLEX_CST)
930 && TREE_OVERFLOW (value))
931 pedwarn ("overflow in constant expression");
934 /* The same as above but print an unconditional error. */
936 constant_expression_error (tree value)
938 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
939 || TREE_CODE (value) == FIXED_CST
940 || TREE_CODE (value) == VECTOR_CST
941 || TREE_CODE (value) == COMPLEX_CST)
942 && TREE_OVERFLOW (value))
943 error ("overflow in constant expression");
946 /* Print a warning if an expression had overflow in folding and its
949 Invoke this function on every expression that
950 (1) appears in the source code, and
951 (2) is a constant expression that overflowed, and
952 (3) is not already checked by convert_and_check;
953 however, do not invoke this function on operands of explicit casts
954 or when the expression is the result of an operator and any operand
955 already overflowed. */
958 overflow_warning (tree value)
960 if (skip_evaluation) return;
962 switch (TREE_CODE (value))
965 warning (OPT_Woverflow, "integer overflow in expression");
969 warning (OPT_Woverflow, "floating point overflow in expression");
973 warning (OPT_Woverflow, "fixed-point overflow in expression");
977 warning (OPT_Woverflow, "vector overflow in expression");
981 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST)
982 warning (OPT_Woverflow, "complex integer overflow in expression");
983 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST)
984 warning (OPT_Woverflow, "complex floating point overflow in expression");
993 /* Warn about use of a logical || / && operator being used in a
994 context where it is likely that the bitwise equivalent was intended
995 by the programmer. CODE is the TREE_CODE of the operator, ARG1
996 and ARG2 the arguments. */
999 warn_logical_operator (enum tree_code code, tree arg1, tree
1004 case TRUTH_ANDIF_EXPR:
1005 case TRUTH_ORIF_EXPR:
1007 case TRUTH_AND_EXPR:
1008 if (!TREE_NO_WARNING (arg1)
1009 && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
1010 && !CONSTANT_CLASS_P (arg1)
1011 && TREE_CODE (arg2) == INTEGER_CST
1012 && !integer_zerop (arg2))
1014 warning (OPT_Wlogical_op,
1015 "logical %<%s%> with non-zero constant "
1016 "will always evaluate as true",
1017 ((code == TRUTH_ANDIF_EXPR)
1018 || (code == TRUTH_AND_EXPR)) ? "&&" : "||");
1019 TREE_NO_WARNING (arg1) = true;
1028 /* Print a warning about casts that might indicate violation
1029 of strict aliasing rules if -Wstrict-aliasing is used and
1030 strict aliasing mode is in effect. OTYPE is the original
1031 TREE_TYPE of EXPR, and TYPE the type we're casting to. */
1034 strict_aliasing_warning (tree otype, tree type, tree expr)
1036 if (!(flag_strict_aliasing && POINTER_TYPE_P (type)
1037 && POINTER_TYPE_P (otype) && !VOID_TYPE_P (TREE_TYPE (type))))
1040 if ((warn_strict_aliasing > 1) && TREE_CODE (expr) == ADDR_EXPR
1041 && (DECL_P (TREE_OPERAND (expr, 0))
1042 || handled_component_p (TREE_OPERAND (expr, 0))))
1044 /* Casting the address of an object to non void pointer. Warn
1045 if the cast breaks type based aliasing. */
1046 if (!COMPLETE_TYPE_P (TREE_TYPE (type)) && warn_strict_aliasing == 2)
1048 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
1049 "might break strict-aliasing rules");
1054 /* warn_strict_aliasing >= 3. This includes the default (3).
1055 Only warn if the cast is dereferenced immediately. */
1056 alias_set_type set1 =
1057 get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
1058 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1060 if (!alias_sets_conflict_p (set1, set2))
1062 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1063 "pointer will break strict-aliasing rules");
1066 else if (warn_strict_aliasing == 2
1067 && !alias_sets_must_conflict_p (set1, set2))
1069 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1070 "pointer might break strict-aliasing rules");
1076 if ((warn_strict_aliasing == 1) && !VOID_TYPE_P (TREE_TYPE (otype)))
1078 /* At this level, warn for any conversions, even if an address is
1079 not taken in the same statement. This will likely produce many
1080 false positives, but could be useful to pinpoint problems that
1081 are not revealed at higher levels. */
1082 alias_set_type set1 = get_alias_set (TREE_TYPE (otype));
1083 alias_set_type set2 = get_alias_set (TREE_TYPE (type));
1084 if (!COMPLETE_TYPE_P (type)
1085 || !alias_sets_must_conflict_p (set1, set2))
1087 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
1088 "pointer might break strict-aliasing rules");
1096 /* Print a warning about if (); or if () .. else; constructs
1097 via the special empty statement node that we create. INNER_THEN
1098 and INNER_ELSE are the statement lists of the if and the else
1102 empty_if_body_warning (tree inner_then, tree inner_else)
1104 if (TREE_CODE (inner_then) == STATEMENT_LIST
1105 && STATEMENT_LIST_TAIL (inner_then))
1106 inner_then = STATEMENT_LIST_TAIL (inner_then)->stmt;
1108 if (inner_else && TREE_CODE (inner_else) == STATEMENT_LIST
1109 && STATEMENT_LIST_TAIL (inner_else))
1110 inner_else = STATEMENT_LIST_TAIL (inner_else)->stmt;
1112 if (IS_EMPTY_STMT (inner_then) && !inner_else)
1113 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1114 "in an %<if%> statement", EXPR_LOCUS (inner_then));
1116 else if (inner_else && IS_EMPTY_STMT (inner_else))
1117 warning (OPT_Wempty_body, "%Hsuggest braces around empty body "
1118 "in an %<else%> statement", EXPR_LOCUS (inner_else));
1121 /* Warn for unlikely, improbable, or stupid DECL declarations
1125 check_main_parameter_types (tree decl)
1130 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl)); args;
1131 args = TREE_CHAIN (args))
1133 tree type = args ? TREE_VALUE (args) : 0;
1135 if (type == void_type_node || type == error_mark_node )
1142 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
1143 pedwarn ("first argument of %q+D should be %<int%>", decl);
1147 if (TREE_CODE (type) != POINTER_TYPE
1148 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1149 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1151 pedwarn ("second argument of %q+D should be %<char **%>",
1156 if (TREE_CODE (type) != POINTER_TYPE
1157 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
1158 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
1160 pedwarn ("third argument of %q+D should probably be "
1161 "%<char **%>", decl);
1166 /* It is intentional that this message does not mention the third
1167 argument because it's only mentioned in an appendix of the
1169 if (argct > 0 && (argct < 2 || argct > 3))
1170 pedwarn ("%q+D takes only zero or two arguments", decl);
1173 /* True if vector types T1 and T2 can be converted to each other
1174 without an explicit cast. If EMIT_LAX_NOTE is true, and T1 and T2
1175 can only be converted with -flax-vector-conversions yet that is not
1176 in effect, emit a note telling the user about that option if such
1177 a note has not previously been emitted. */
1179 vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note)
1181 static bool emitted_lax_note = false;
1182 bool convertible_lax;
1184 if ((targetm.vector_opaque_p (t1) || targetm.vector_opaque_p (t2))
1185 && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
1189 (tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))
1190 && (TREE_CODE (TREE_TYPE (t1)) != REAL_TYPE ||
1191 TYPE_PRECISION (t1) == TYPE_PRECISION (t2))
1192 && (INTEGRAL_TYPE_P (TREE_TYPE (t1))
1193 == INTEGRAL_TYPE_P (TREE_TYPE (t2))));
1195 if (!convertible_lax || flag_lax_vector_conversions)
1196 return convertible_lax;
1198 if (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1199 && lang_hooks.types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1202 if (emit_lax_note && !emitted_lax_note)
1204 emitted_lax_note = true;
1205 inform ("use -flax-vector-conversions to permit "
1206 "conversions between vectors with differing "
1207 "element types or numbers of subparts");
1213 /* Warns if the conversion of EXPR to TYPE may alter a value.
1214 This is a helper function for warnings_for_convert_and_check. */
1217 conversion_warning (tree type, tree expr)
1219 bool give_warning = false;
1221 unsigned int formal_prec = TYPE_PRECISION (type);
1223 if (!warn_conversion && !warn_sign_conversion)
1226 if (TREE_CODE (expr) == REAL_CST || TREE_CODE (expr) == INTEGER_CST)
1228 /* Warn for real constant that is not an exact integer converted
1230 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1231 && TREE_CODE (type) == INTEGER_TYPE)
1233 if (!real_isinteger (TREE_REAL_CST_PTR (expr), TYPE_MODE (TREE_TYPE (expr))))
1234 give_warning = true;
1236 /* Warn for an integer constant that does not fit into integer type. */
1237 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1238 && TREE_CODE (type) == INTEGER_TYPE
1239 && !int_fits_type_p (expr, type))
1241 if (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr)))
1242 warning (OPT_Wsign_conversion,
1243 "negative integer implicitly converted to unsigned type");
1244 else if (!TYPE_UNSIGNED (type) && TYPE_UNSIGNED (TREE_TYPE (expr)))
1245 warning (OPT_Wsign_conversion,
1246 "conversion of unsigned constant value to negative integer");
1248 give_warning = true;
1250 else if (TREE_CODE (type) == REAL_TYPE)
1252 /* Warn for an integer constant that does not fit into real type. */
1253 if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE)
1255 REAL_VALUE_TYPE a = real_value_from_int_cst (0, expr);
1256 if (!exact_real_truncate (TYPE_MODE (type), &a))
1257 give_warning = true;
1259 /* Warn for a real constant that does not fit into a smaller
1261 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1262 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1264 REAL_VALUE_TYPE a = TREE_REAL_CST (expr);
1265 if (!exact_real_truncate (TYPE_MODE (type), &a))
1266 give_warning = true;
1271 warning (OPT_Wconversion,
1272 "conversion to %qT alters %qT constant value",
1273 type, TREE_TYPE (expr));
1275 else /* 'expr' is not a constant. */
1277 /* Warn for real types converted to integer types. */
1278 if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1279 && TREE_CODE (type) == INTEGER_TYPE)
1280 give_warning = true;
1282 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1283 && TREE_CODE (type) == INTEGER_TYPE)
1285 /* Don't warn about unsigned char y = 0xff, x = (int) y; */
1286 expr = get_unwidened (expr, 0);
1288 /* Warn for integer types converted to smaller integer types. */
1289 if (formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1290 give_warning = true;
1292 /* When they are the same width but different signedness,
1293 then the value may change. */
1294 else if ((formal_prec == TYPE_PRECISION (TREE_TYPE (expr))
1295 && TYPE_UNSIGNED (TREE_TYPE (expr)) != TYPE_UNSIGNED (type))
1296 /* Even when converted to a bigger type, if the type is
1297 unsigned but expr is signed, then negative values
1299 || (TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (expr))))
1300 warning (OPT_Wsign_conversion,
1301 "conversion to %qT from %qT may change the sign of the result",
1302 type, TREE_TYPE (expr));
1305 /* Warn for integer types converted to real types if and only if
1306 all the range of values of the integer type cannot be
1307 represented by the real type. */
1308 else if (TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1309 && TREE_CODE (type) == REAL_TYPE)
1311 tree type_low_bound = TYPE_MIN_VALUE (TREE_TYPE (expr));
1312 tree type_high_bound = TYPE_MAX_VALUE (TREE_TYPE (expr));
1313 REAL_VALUE_TYPE real_low_bound = real_value_from_int_cst (0, type_low_bound);
1314 REAL_VALUE_TYPE real_high_bound = real_value_from_int_cst (0, type_high_bound);
1316 if (!exact_real_truncate (TYPE_MODE (type), &real_low_bound)
1317 || !exact_real_truncate (TYPE_MODE (type), &real_high_bound))
1318 give_warning = true;
1321 /* Warn for real types converted to smaller real types. */
1322 else if (TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE
1323 && TREE_CODE (type) == REAL_TYPE
1324 && formal_prec < TYPE_PRECISION (TREE_TYPE (expr)))
1325 give_warning = true;
1329 warning (OPT_Wconversion,
1330 "conversion to %qT from %qT may alter its value",
1331 type, TREE_TYPE (expr));
1335 /* Produce warnings after a conversion. RESULT is the result of
1336 converting EXPR to TYPE. This is a helper function for
1337 convert_and_check and cp_convert_and_check. */
1340 warnings_for_convert_and_check (tree type, tree expr, tree result)
1342 if (TREE_CODE (expr) == INTEGER_CST
1343 && (TREE_CODE (type) == INTEGER_TYPE
1344 || TREE_CODE (type) == ENUMERAL_TYPE)
1345 && !int_fits_type_p (expr, type))
1347 /* Do not diagnose overflow in a constant expression merely
1348 because a conversion overflowed. */
1349 if (TREE_OVERFLOW (result))
1350 TREE_OVERFLOW (result) = TREE_OVERFLOW (expr);
1352 if (TYPE_UNSIGNED (type))
1354 /* This detects cases like converting -129 or 256 to
1356 if (!int_fits_type_p (expr, c_common_signed_type (type)))
1357 warning (OPT_Woverflow,
1358 "large integer implicitly truncated to unsigned type");
1360 conversion_warning (type, expr);
1362 else if (!int_fits_type_p (expr, c_common_unsigned_type (type)))
1363 warning (OPT_Woverflow,
1364 "overflow in implicit constant conversion");
1365 /* No warning for converting 0x80000000 to int. */
1367 && (TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE
1368 || TYPE_PRECISION (TREE_TYPE (expr))
1369 != TYPE_PRECISION (type)))
1370 warning (OPT_Woverflow,
1371 "overflow in implicit constant conversion");
1374 conversion_warning (type, expr);
1376 else if ((TREE_CODE (result) == INTEGER_CST
1377 || TREE_CODE (result) == FIXED_CST) && TREE_OVERFLOW (result))
1378 warning (OPT_Woverflow,
1379 "overflow in implicit constant conversion");
1381 conversion_warning (type, expr);
1385 /* Convert EXPR to TYPE, warning about conversion problems with constants.
1386 Invoke this function on every expression that is converted implicitly,
1387 i.e. because of language rules and not because of an explicit cast. */
1390 convert_and_check (tree type, tree expr)
1394 if (TREE_TYPE (expr) == type)
1397 result = convert (type, expr);
1399 if (!skip_evaluation && !TREE_OVERFLOW_P (expr) && result != error_mark_node)
1400 warnings_for_convert_and_check (type, expr, result);
1405 /* A node in a list that describes references to variables (EXPR), which are
1406 either read accesses if WRITER is zero, or write accesses, in which case
1407 WRITER is the parent of EXPR. */
1414 /* Used to implement a cache the results of a call to verify_tree. We only
1415 use this for SAVE_EXPRs. */
1418 struct tlist_cache *next;
1419 struct tlist *cache_before_sp;
1420 struct tlist *cache_after_sp;
1424 /* Obstack to use when allocating tlist structures, and corresponding
1426 static struct obstack tlist_obstack;
1427 static char *tlist_firstobj = 0;
1429 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1431 static struct tlist *warned_ids;
1432 /* SAVE_EXPRs need special treatment. We process them only once and then
1433 cache the results. */
1434 static struct tlist_cache *save_expr_cache;
1436 static void add_tlist (struct tlist **, struct tlist *, tree, int);
1437 static void merge_tlist (struct tlist **, struct tlist *, int);
1438 static void verify_tree (tree, struct tlist **, struct tlist **, tree);
1439 static int warning_candidate_p (tree);
1440 static void warn_for_collisions (struct tlist *);
1441 static void warn_for_collisions_1 (tree, tree, struct tlist *, int);
1442 static struct tlist *new_tlist (struct tlist *, tree, tree);
1444 /* Create a new struct tlist and fill in its fields. */
1445 static struct tlist *
1446 new_tlist (struct tlist *next, tree t, tree writer)
1449 l = XOBNEW (&tlist_obstack, struct tlist);
1456 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1457 is nonnull, we ignore any node we find which has a writer equal to it. */
1460 add_tlist (struct tlist **to, struct tlist *add, tree exclude_writer, int copy)
1464 struct tlist *next = add->next;
1467 if (!exclude_writer || add->writer != exclude_writer)
1468 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1473 /* Merge the nodes of ADD into TO. This merging process is done so that for
1474 each variable that already exists in TO, no new node is added; however if
1475 there is a write access recorded in ADD, and an occurrence on TO is only
1476 a read access, then the occurrence in TO will be modified to record the
1480 merge_tlist (struct tlist **to, struct tlist *add, int copy)
1482 struct tlist **end = to;
1485 end = &(*end)->next;
1491 struct tlist *next = add->next;
1493 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1494 if (tmp2->expr == add->expr)
1498 tmp2->writer = add->writer;
1502 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1503 end = &(*end)->next;
1510 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1511 references in list LIST conflict with it, excluding reads if ONLY writers
1515 warn_for_collisions_1 (tree written, tree writer, struct tlist *list,
1520 /* Avoid duplicate warnings. */
1521 for (tmp = warned_ids; tmp; tmp = tmp->next)
1522 if (tmp->expr == written)
1527 if (list->expr == written
1528 && list->writer != writer
1529 && (!only_writes || list->writer)
1530 && DECL_NAME (list->expr))
1532 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1533 warning (OPT_Wsequence_point, "operation on %qE may be undefined",
1540 /* Given a list LIST of references to variables, find whether any of these
1541 can cause conflicts due to missing sequence points. */
1544 warn_for_collisions (struct tlist *list)
1548 for (tmp = list; tmp; tmp = tmp->next)
1551 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1555 /* Return nonzero if X is a tree that can be verified by the sequence point
1558 warning_candidate_p (tree x)
1560 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1563 /* Walk the tree X, and record accesses to variables. If X is written by the
1564 parent tree, WRITER is the parent.
1565 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1566 expression or its only operand forces a sequence point, then everything up
1567 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1569 Once we return, we will have emitted warnings if any subexpression before
1570 such a sequence point could be undefined. On a higher level, however, the
1571 sequence point may not be relevant, and we'll merge the two lists.
1573 Example: (b++, a) + b;
1574 The call that processes the COMPOUND_EXPR will store the increment of B
1575 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1576 processes the PLUS_EXPR will need to merge the two lists so that
1577 eventually, all accesses end up on the same list (and we'll warn about the
1578 unordered subexpressions b++ and b.
1580 A note on merging. If we modify the former example so that our expression
1583 care must be taken not simply to add all three expressions into the final
1584 PNO_SP list. The function merge_tlist takes care of that by merging the
1585 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1586 way, so that no more than one access to B is recorded. */
1589 verify_tree (tree x, struct tlist **pbefore_sp, struct tlist **pno_sp,
1592 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1593 enum tree_code code;
1594 enum tree_code_class cl;
1596 /* X may be NULL if it is the operand of an empty statement expression
1602 code = TREE_CODE (x);
1603 cl = TREE_CODE_CLASS (code);
1605 if (warning_candidate_p (x))
1607 *pno_sp = new_tlist (*pno_sp, x, writer);
1617 case TRUTH_ANDIF_EXPR:
1618 case TRUTH_ORIF_EXPR:
1619 tmp_before = tmp_nosp = tmp_list3 = 0;
1620 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1621 warn_for_collisions (tmp_nosp);
1622 merge_tlist (pbefore_sp, tmp_before, 0);
1623 merge_tlist (pbefore_sp, tmp_nosp, 0);
1624 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1625 merge_tlist (pbefore_sp, tmp_list3, 0);
1629 tmp_before = tmp_list2 = 0;
1630 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1631 warn_for_collisions (tmp_list2);
1632 merge_tlist (pbefore_sp, tmp_before, 0);
1633 merge_tlist (pbefore_sp, tmp_list2, 1);
1635 tmp_list3 = tmp_nosp = 0;
1636 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1637 warn_for_collisions (tmp_nosp);
1638 merge_tlist (pbefore_sp, tmp_list3, 0);
1640 tmp_list3 = tmp_list2 = 0;
1641 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1642 warn_for_collisions (tmp_list2);
1643 merge_tlist (pbefore_sp, tmp_list3, 0);
1644 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1645 two first, to avoid warning for (a ? b++ : b++). */
1646 merge_tlist (&tmp_nosp, tmp_list2, 0);
1647 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1650 case PREDECREMENT_EXPR:
1651 case PREINCREMENT_EXPR:
1652 case POSTDECREMENT_EXPR:
1653 case POSTINCREMENT_EXPR:
1654 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1658 tmp_before = tmp_nosp = tmp_list3 = 0;
1659 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1660 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1661 /* Expressions inside the LHS are not ordered wrt. the sequence points
1662 in the RHS. Example:
1664 Despite the fact that the modification of "a" is in the before_sp
1665 list (tmp_before), it conflicts with the use of "a" in the LHS.
1666 We can handle this by adding the contents of tmp_list3
1667 to those of tmp_before, and redoing the collision warnings for that
1669 add_tlist (&tmp_before, tmp_list3, x, 1);
1670 warn_for_collisions (tmp_before);
1671 /* Exclude the LHS itself here; we first have to merge it into the
1672 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1673 didn't exclude the LHS, we'd get it twice, once as a read and once
1675 add_tlist (pno_sp, tmp_list3, x, 0);
1676 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1678 merge_tlist (pbefore_sp, tmp_before, 0);
1679 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1680 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1681 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1685 /* We need to warn about conflicts among arguments and conflicts between
1686 args and the function address. Side effects of the function address,
1687 however, are not ordered by the sequence point of the call. */
1689 call_expr_arg_iterator iter;
1691 tmp_before = tmp_nosp = 0;
1692 verify_tree (CALL_EXPR_FN (x), &tmp_before, &tmp_nosp, NULL_TREE);
1693 FOR_EACH_CALL_EXPR_ARG (arg, iter, x)
1695 tmp_list2 = tmp_list3 = 0;
1696 verify_tree (arg, &tmp_list2, &tmp_list3, NULL_TREE);
1697 merge_tlist (&tmp_list3, tmp_list2, 0);
1698 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1700 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1701 warn_for_collisions (tmp_before);
1702 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1707 /* Scan all the list, e.g. indices of multi dimensional array. */
1710 tmp_before = tmp_nosp = 0;
1711 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1712 merge_tlist (&tmp_nosp, tmp_before, 0);
1713 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1720 struct tlist_cache *t;
1721 for (t = save_expr_cache; t; t = t->next)
1727 t = XOBNEW (&tlist_obstack, struct tlist_cache);
1728 t->next = save_expr_cache;
1730 save_expr_cache = t;
1732 tmp_before = tmp_nosp = 0;
1733 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1734 warn_for_collisions (tmp_nosp);
1739 struct tlist *t = tmp_nosp;
1741 merge_tlist (&tmp_list3, t, 0);
1743 t->cache_before_sp = tmp_before;
1744 t->cache_after_sp = tmp_list3;
1746 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1747 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1752 /* For other expressions, simply recurse on their operands.
1753 Manual tail recursion for unary expressions.
1754 Other non-expressions need not be processed. */
1755 if (cl == tcc_unary)
1757 x = TREE_OPERAND (x, 0);
1761 else if (IS_EXPR_CODE_CLASS (cl))
1764 int max = TREE_OPERAND_LENGTH (x);
1765 for (lp = 0; lp < max; lp++)
1767 tmp_before = tmp_nosp = 0;
1768 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, 0);
1769 merge_tlist (&tmp_nosp, tmp_before, 0);
1770 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1777 /* Try to warn for undefined behavior in EXPR due to missing sequence
1781 verify_sequence_points (tree expr)
1783 struct tlist *before_sp = 0, *after_sp = 0;
1786 save_expr_cache = 0;
1787 if (tlist_firstobj == 0)
1789 gcc_obstack_init (&tlist_obstack);
1790 tlist_firstobj = (char *) obstack_alloc (&tlist_obstack, 0);
1793 verify_tree (expr, &before_sp, &after_sp, 0);
1794 warn_for_collisions (after_sp);
1795 obstack_free (&tlist_obstack, tlist_firstobj);
1798 /* Validate the expression after `case' and apply default promotions. */
1801 check_case_value (tree value)
1803 if (value == NULL_TREE)
1806 /* ??? Can we ever get nops here for a valid case value? We
1808 STRIP_TYPE_NOPS (value);
1809 /* In C++, the following is allowed:
1812 switch (...) { case i: ... }
1814 So, we try to reduce the VALUE to a constant that way. */
1815 if (c_dialect_cxx ())
1817 value = decl_constant_value (value);
1818 STRIP_TYPE_NOPS (value);
1819 value = fold (value);
1822 if (TREE_CODE (value) == INTEGER_CST)
1823 /* Promote char or short to int. */
1824 value = perform_integral_promotions (value);
1825 else if (value != error_mark_node)
1827 error ("case label does not reduce to an integer constant");
1828 value = error_mark_node;
1831 constant_expression_warning (value);
1836 /* See if the case values LOW and HIGH are in the range of the original
1837 type (i.e. before the default conversion to int) of the switch testing
1839 TYPE is the promoted type of the testing expression, and ORIG_TYPE is
1840 the type before promoting it. CASE_LOW_P is a pointer to the lower
1841 bound of the case label, and CASE_HIGH_P is the upper bound or NULL
1842 if the case is not a case range.
1843 The caller has to make sure that we are not called with NULL for
1844 CASE_LOW_P (i.e. the default case).
1845 Returns true if the case label is in range of ORIG_TYPE (saturated or
1846 untouched) or false if the label is out of range. */
1849 check_case_bounds (tree type, tree orig_type,
1850 tree *case_low_p, tree *case_high_p)
1852 tree min_value, max_value;
1853 tree case_low = *case_low_p;
1854 tree case_high = case_high_p ? *case_high_p : case_low;
1856 /* If there was a problem with the original type, do nothing. */
1857 if (orig_type == error_mark_node)
1860 min_value = TYPE_MIN_VALUE (orig_type);
1861 max_value = TYPE_MAX_VALUE (orig_type);
1863 /* Case label is less than minimum for type. */
1864 if (tree_int_cst_compare (case_low, min_value) < 0
1865 && tree_int_cst_compare (case_high, min_value) < 0)
1867 warning (0, "case label value is less than minimum value for type");
1871 /* Case value is greater than maximum for type. */
1872 if (tree_int_cst_compare (case_low, max_value) > 0
1873 && tree_int_cst_compare (case_high, max_value) > 0)
1875 warning (0, "case label value exceeds maximum value for type");
1879 /* Saturate lower case label value to minimum. */
1880 if (tree_int_cst_compare (case_high, min_value) >= 0
1881 && tree_int_cst_compare (case_low, min_value) < 0)
1883 warning (0, "lower value in case label range"
1884 " less than minimum value for type");
1885 case_low = min_value;
1888 /* Saturate upper case label value to maximum. */
1889 if (tree_int_cst_compare (case_low, max_value) <= 0
1890 && tree_int_cst_compare (case_high, max_value) > 0)
1892 warning (0, "upper value in case label range"
1893 " exceeds maximum value for type");
1894 case_high = max_value;
1897 if (*case_low_p != case_low)
1898 *case_low_p = convert (type, case_low);
1899 if (case_high_p && *case_high_p != case_high)
1900 *case_high_p = convert (type, case_high);
1905 /* Return an integer type with BITS bits of precision,
1906 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1909 c_common_type_for_size (unsigned int bits, int unsignedp)
1911 if (bits == TYPE_PRECISION (integer_type_node))
1912 return unsignedp ? unsigned_type_node : integer_type_node;
1914 if (bits == TYPE_PRECISION (signed_char_type_node))
1915 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1917 if (bits == TYPE_PRECISION (short_integer_type_node))
1918 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1920 if (bits == TYPE_PRECISION (long_integer_type_node))
1921 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1923 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1924 return (unsignedp ? long_long_unsigned_type_node
1925 : long_long_integer_type_node);
1927 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1928 return (unsignedp ? widest_unsigned_literal_type_node
1929 : widest_integer_literal_type_node);
1931 if (bits <= TYPE_PRECISION (intQI_type_node))
1932 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1934 if (bits <= TYPE_PRECISION (intHI_type_node))
1935 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1937 if (bits <= TYPE_PRECISION (intSI_type_node))
1938 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1940 if (bits <= TYPE_PRECISION (intDI_type_node))
1941 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1946 /* Return a fixed-point type that has at least IBIT ibits and FBIT fbits
1947 that is unsigned if UNSIGNEDP is nonzero, otherwise signed;
1948 and saturating if SATP is nonzero, otherwise not saturating. */
1951 c_common_fixed_point_type_for_size (unsigned int ibit, unsigned int fbit,
1952 int unsignedp, int satp)
1954 enum machine_mode mode;
1956 mode = unsignedp ? UQQmode : QQmode;
1958 mode = unsignedp ? UHAmode : HAmode;
1960 for (; mode != VOIDmode; mode = GET_MODE_WIDER_MODE (mode))
1961 if (GET_MODE_IBIT (mode) >= ibit && GET_MODE_FBIT (mode) >= fbit)
1964 if (mode == VOIDmode || !targetm.scalar_mode_supported_p (mode))
1966 sorry ("GCC cannot support operators with integer types and "
1967 "fixed-point types that have too many integral and "
1968 "fractional bits together");
1972 return c_common_type_for_mode (mode, satp);
1975 /* Used for communication between c_common_type_for_mode and
1976 c_register_builtin_type. */
1977 static GTY(()) tree registered_builtin_types;
1979 /* Return a data type that has machine mode MODE.
1980 If the mode is an integer,
1981 then UNSIGNEDP selects between signed and unsigned types.
1982 If the mode is a fixed-point mode,
1983 then UNSIGNEDP selects between saturating and nonsaturating types. */
1986 c_common_type_for_mode (enum machine_mode mode, int unsignedp)
1990 if (mode == TYPE_MODE (integer_type_node))
1991 return unsignedp ? unsigned_type_node : integer_type_node;
1993 if (mode == TYPE_MODE (signed_char_type_node))
1994 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1996 if (mode == TYPE_MODE (short_integer_type_node))
1997 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1999 if (mode == TYPE_MODE (long_integer_type_node))
2000 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2002 if (mode == TYPE_MODE (long_long_integer_type_node))
2003 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2005 if (mode == TYPE_MODE (widest_integer_literal_type_node))
2006 return unsignedp ? widest_unsigned_literal_type_node
2007 : widest_integer_literal_type_node;
2010 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2013 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2016 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2019 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2021 #if HOST_BITS_PER_WIDE_INT >= 64
2022 if (mode == TYPE_MODE (intTI_type_node))
2023 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2026 if (mode == TYPE_MODE (float_type_node))
2027 return float_type_node;
2029 if (mode == TYPE_MODE (double_type_node))
2030 return double_type_node;
2032 if (mode == TYPE_MODE (long_double_type_node))
2033 return long_double_type_node;
2035 if (mode == TYPE_MODE (void_type_node))
2036 return void_type_node;
2038 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
2040 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2041 : make_signed_type (GET_MODE_PRECISION (mode)));
2043 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
2045 ? make_unsigned_type (GET_MODE_PRECISION (mode))
2046 : make_signed_type (GET_MODE_PRECISION (mode)));
2048 if (COMPLEX_MODE_P (mode))
2050 enum machine_mode inner_mode;
2053 if (mode == TYPE_MODE (complex_float_type_node))
2054 return complex_float_type_node;
2055 if (mode == TYPE_MODE (complex_double_type_node))
2056 return complex_double_type_node;
2057 if (mode == TYPE_MODE (complex_long_double_type_node))
2058 return complex_long_double_type_node;
2060 if (mode == TYPE_MODE (complex_integer_type_node) && !unsignedp)
2061 return complex_integer_type_node;
2063 inner_mode = GET_MODE_INNER (mode);
2064 inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2065 if (inner_type != NULL_TREE)
2066 return build_complex_type (inner_type);
2068 else if (VECTOR_MODE_P (mode))
2070 enum machine_mode inner_mode = GET_MODE_INNER (mode);
2071 tree inner_type = c_common_type_for_mode (inner_mode, unsignedp);
2072 if (inner_type != NULL_TREE)
2073 return build_vector_type_for_mode (inner_type, mode);
2076 if (mode == TYPE_MODE (dfloat32_type_node))
2077 return dfloat32_type_node;
2078 if (mode == TYPE_MODE (dfloat64_type_node))
2079 return dfloat64_type_node;
2080 if (mode == TYPE_MODE (dfloat128_type_node))
2081 return dfloat128_type_node;
2083 if (ALL_SCALAR_FIXED_POINT_MODE_P (mode))
2085 if (mode == TYPE_MODE (short_fract_type_node))
2086 return unsignedp ? sat_short_fract_type_node : short_fract_type_node;
2087 if (mode == TYPE_MODE (fract_type_node))
2088 return unsignedp ? sat_fract_type_node : fract_type_node;
2089 if (mode == TYPE_MODE (long_fract_type_node))
2090 return unsignedp ? sat_long_fract_type_node : long_fract_type_node;
2091 if (mode == TYPE_MODE (long_long_fract_type_node))
2092 return unsignedp ? sat_long_long_fract_type_node
2093 : long_long_fract_type_node;
2095 if (mode == TYPE_MODE (unsigned_short_fract_type_node))
2096 return unsignedp ? sat_unsigned_short_fract_type_node
2097 : unsigned_short_fract_type_node;
2098 if (mode == TYPE_MODE (unsigned_fract_type_node))
2099 return unsignedp ? sat_unsigned_fract_type_node
2100 : unsigned_fract_type_node;
2101 if (mode == TYPE_MODE (unsigned_long_fract_type_node))
2102 return unsignedp ? sat_unsigned_long_fract_type_node
2103 : unsigned_long_fract_type_node;
2104 if (mode == TYPE_MODE (unsigned_long_long_fract_type_node))
2105 return unsignedp ? sat_unsigned_long_long_fract_type_node
2106 : unsigned_long_long_fract_type_node;
2108 if (mode == TYPE_MODE (short_accum_type_node))
2109 return unsignedp ? sat_short_accum_type_node : short_accum_type_node;
2110 if (mode == TYPE_MODE (accum_type_node))
2111 return unsignedp ? sat_accum_type_node : accum_type_node;
2112 if (mode == TYPE_MODE (long_accum_type_node))
2113 return unsignedp ? sat_long_accum_type_node : long_accum_type_node;
2114 if (mode == TYPE_MODE (long_long_accum_type_node))
2115 return unsignedp ? sat_long_long_accum_type_node
2116 : long_long_accum_type_node;
2118 if (mode == TYPE_MODE (unsigned_short_accum_type_node))
2119 return unsignedp ? sat_unsigned_short_accum_type_node
2120 : unsigned_short_accum_type_node;
2121 if (mode == TYPE_MODE (unsigned_accum_type_node))
2122 return unsignedp ? sat_unsigned_accum_type_node
2123 : unsigned_accum_type_node;
2124 if (mode == TYPE_MODE (unsigned_long_accum_type_node))
2125 return unsignedp ? sat_unsigned_long_accum_type_node
2126 : unsigned_long_accum_type_node;
2127 if (mode == TYPE_MODE (unsigned_long_long_accum_type_node))
2128 return unsignedp ? sat_unsigned_long_long_accum_type_node
2129 : unsigned_long_long_accum_type_node;
2132 return unsignedp ? sat_qq_type_node : qq_type_node;
2134 return unsignedp ? sat_hq_type_node : hq_type_node;
2136 return unsignedp ? sat_sq_type_node : sq_type_node;
2138 return unsignedp ? sat_dq_type_node : dq_type_node;
2140 return unsignedp ? sat_tq_type_node : tq_type_node;
2142 if (mode == UQQmode)
2143 return unsignedp ? sat_uqq_type_node : uqq_type_node;
2144 if (mode == UHQmode)
2145 return unsignedp ? sat_uhq_type_node : uhq_type_node;
2146 if (mode == USQmode)
2147 return unsignedp ? sat_usq_type_node : usq_type_node;
2148 if (mode == UDQmode)
2149 return unsignedp ? sat_udq_type_node : udq_type_node;
2150 if (mode == UTQmode)
2151 return unsignedp ? sat_utq_type_node : utq_type_node;
2154 return unsignedp ? sat_ha_type_node : ha_type_node;
2156 return unsignedp ? sat_sa_type_node : sa_type_node;
2158 return unsignedp ? sat_da_type_node : da_type_node;
2160 return unsignedp ? sat_ta_type_node : ta_type_node;
2162 if (mode == UHAmode)
2163 return unsignedp ? sat_uha_type_node : uha_type_node;
2164 if (mode == USAmode)
2165 return unsignedp ? sat_usa_type_node : usa_type_node;
2166 if (mode == UDAmode)
2167 return unsignedp ? sat_uda_type_node : uda_type_node;
2168 if (mode == UTAmode)
2169 return unsignedp ? sat_uta_type_node : uta_type_node;
2172 for (t = registered_builtin_types; t; t = TREE_CHAIN (t))
2173 if (TYPE_MODE (TREE_VALUE (t)) == mode)
2174 return TREE_VALUE (t);
2180 c_common_unsigned_type (tree type)
2182 return c_common_signed_or_unsigned_type (1, type);
2185 /* Return a signed type the same as TYPE in other respects. */
2188 c_common_signed_type (tree type)
2190 return c_common_signed_or_unsigned_type (0, type);
2193 /* Return a type the same as TYPE except unsigned or
2194 signed according to UNSIGNEDP. */
2197 c_common_signed_or_unsigned_type (int unsignedp, tree type)
2201 /* This block of code emulates the behavior of the old
2202 c_common_unsigned_type. In particular, it returns
2203 long_unsigned_type_node if passed a long, even when a int would
2204 have the same size. This is necessary for warnings to work
2205 correctly in archs where sizeof(int) == sizeof(long) */
2207 type1 = TYPE_MAIN_VARIANT (type);
2208 if (type1 == signed_char_type_node || type1 == char_type_node || type1 == unsigned_char_type_node)
2209 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2210 if (type1 == integer_type_node || type1 == unsigned_type_node)
2211 return unsignedp ? unsigned_type_node : integer_type_node;
2212 if (type1 == short_integer_type_node || type1 == short_unsigned_type_node)
2213 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2214 if (type1 == long_integer_type_node || type1 == long_unsigned_type_node)
2215 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2216 if (type1 == long_long_integer_type_node || type1 == long_long_unsigned_type_node)
2217 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
2218 if (type1 == widest_integer_literal_type_node || type1 == widest_unsigned_literal_type_node)
2219 return unsignedp ? widest_unsigned_literal_type_node : widest_integer_literal_type_node;
2220 #if HOST_BITS_PER_WIDE_INT >= 64
2221 if (type1 == intTI_type_node || type1 == unsigned_intTI_type_node)
2222 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2224 if (type1 == intDI_type_node || type1 == unsigned_intDI_type_node)
2225 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2226 if (type1 == intSI_type_node || type1 == unsigned_intSI_type_node)
2227 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2228 if (type1 == intHI_type_node || type1 == unsigned_intHI_type_node)
2229 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2230 if (type1 == intQI_type_node || type1 == unsigned_intQI_type_node)
2231 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2233 #define C_COMMON_FIXED_TYPES(SAT,NAME) \
2234 if (type1 == SAT ## short_ ## NAME ## _type_node \
2235 || type1 == SAT ## unsigned_short_ ## NAME ## _type_node) \
2236 return unsignedp ? SAT ## unsigned_short_ ## NAME ## _type_node \
2237 : SAT ## short_ ## NAME ## _type_node; \
2238 if (type1 == SAT ## NAME ## _type_node \
2239 || type1 == SAT ## unsigned_ ## NAME ## _type_node) \
2240 return unsignedp ? SAT ## unsigned_ ## NAME ## _type_node \
2241 : SAT ## NAME ## _type_node; \
2242 if (type1 == SAT ## long_ ## NAME ## _type_node \
2243 || type1 == SAT ## unsigned_long_ ## NAME ## _type_node) \
2244 return unsignedp ? SAT ## unsigned_long_ ## NAME ## _type_node \
2245 : SAT ## long_ ## NAME ## _type_node; \
2246 if (type1 == SAT ## long_long_ ## NAME ## _type_node \
2247 || type1 == SAT ## unsigned_long_long_ ## NAME ## _type_node) \
2248 return unsignedp ? SAT ## unsigned_long_long_ ## NAME ## _type_node \
2249 : SAT ## long_long_ ## NAME ## _type_node;
2251 #define C_COMMON_FIXED_MODE_TYPES(SAT,NAME) \
2252 if (type1 == SAT ## NAME ## _type_node \
2253 || type1 == SAT ## u ## NAME ## _type_node) \
2254 return unsignedp ? SAT ## u ## NAME ## _type_node \
2255 : SAT ## NAME ## _type_node;
2257 C_COMMON_FIXED_TYPES (, fract);
2258 C_COMMON_FIXED_TYPES (sat_, fract);
2259 C_COMMON_FIXED_TYPES (, accum);
2260 C_COMMON_FIXED_TYPES (sat_, accum);
2262 C_COMMON_FIXED_MODE_TYPES (, qq);
2263 C_COMMON_FIXED_MODE_TYPES (, hq);
2264 C_COMMON_FIXED_MODE_TYPES (, sq);
2265 C_COMMON_FIXED_MODE_TYPES (, dq);
2266 C_COMMON_FIXED_MODE_TYPES (, tq);
2267 C_COMMON_FIXED_MODE_TYPES (sat_, qq);
2268 C_COMMON_FIXED_MODE_TYPES (sat_, hq);
2269 C_COMMON_FIXED_MODE_TYPES (sat_, sq);
2270 C_COMMON_FIXED_MODE_TYPES (sat_, dq);
2271 C_COMMON_FIXED_MODE_TYPES (sat_, tq);
2272 C_COMMON_FIXED_MODE_TYPES (, ha);
2273 C_COMMON_FIXED_MODE_TYPES (, sa);
2274 C_COMMON_FIXED_MODE_TYPES (, da);
2275 C_COMMON_FIXED_MODE_TYPES (, ta);
2276 C_COMMON_FIXED_MODE_TYPES (sat_, ha);
2277 C_COMMON_FIXED_MODE_TYPES (sat_, sa);
2278 C_COMMON_FIXED_MODE_TYPES (sat_, da);
2279 C_COMMON_FIXED_MODE_TYPES (sat_, ta);
2281 /* For ENUMERAL_TYPEs in C++, must check the mode of the types, not
2282 the precision; they have precision set to match their range, but
2283 may use a wider mode to match an ABI. If we change modes, we may
2284 wind up with bad conversions. For INTEGER_TYPEs in C, must check
2285 the precision as well, so as to yield correct results for
2286 bit-field types. C++ does not have these separate bit-field
2287 types, and producing a signed or unsigned variant of an
2288 ENUMERAL_TYPE may cause other problems as well. */
2290 if (!INTEGRAL_TYPE_P (type)
2291 || TYPE_UNSIGNED (type) == unsignedp)
2294 #define TYPE_OK(node) \
2295 (TYPE_MODE (type) == TYPE_MODE (node) \
2296 && (c_dialect_cxx () || TYPE_PRECISION (type) == TYPE_PRECISION (node)))
2297 if (TYPE_OK (signed_char_type_node))
2298 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2299 if (TYPE_OK (integer_type_node))
2300 return unsignedp ? unsigned_type_node : integer_type_node;
2301 if (TYPE_OK (short_integer_type_node))
2302 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2303 if (TYPE_OK (long_integer_type_node))
2304 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2305 if (TYPE_OK (long_long_integer_type_node))
2306 return (unsignedp ? long_long_unsigned_type_node
2307 : long_long_integer_type_node);
2308 if (TYPE_OK (widest_integer_literal_type_node))
2309 return (unsignedp ? widest_unsigned_literal_type_node
2310 : widest_integer_literal_type_node);
2312 #if HOST_BITS_PER_WIDE_INT >= 64
2313 if (TYPE_OK (intTI_type_node))
2314 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
2316 if (TYPE_OK (intDI_type_node))
2317 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
2318 if (TYPE_OK (intSI_type_node))
2319 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
2320 if (TYPE_OK (intHI_type_node))
2321 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
2322 if (TYPE_OK (intQI_type_node))
2323 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
2326 if (c_dialect_cxx ())
2329 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
2332 /* Build a bit-field integer type for the given WIDTH and UNSIGNEDP. */
2335 c_build_bitfield_integer_type (unsigned HOST_WIDE_INT width, int unsignedp)
2337 /* Extended integer types of the same width as a standard type have
2338 lesser rank, so those of the same width as int promote to int or
2339 unsigned int and are valid for printf formats expecting int or
2340 unsigned int. To avoid such special cases, avoid creating
2341 extended integer types for bit-fields if a standard integer type
2343 if (width == TYPE_PRECISION (integer_type_node))
2344 return unsignedp ? unsigned_type_node : integer_type_node;
2345 if (width == TYPE_PRECISION (signed_char_type_node))
2346 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
2347 if (width == TYPE_PRECISION (short_integer_type_node))
2348 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
2349 if (width == TYPE_PRECISION (long_integer_type_node))
2350 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
2351 if (width == TYPE_PRECISION (long_long_integer_type_node))
2352 return (unsignedp ? long_long_unsigned_type_node
2353 : long_long_integer_type_node);
2354 return build_nonstandard_integer_type (width, unsignedp);
2357 /* The C version of the register_builtin_type langhook. */
2360 c_register_builtin_type (tree type, const char* name)
2364 decl = build_decl (TYPE_DECL, get_identifier (name), type);
2365 DECL_ARTIFICIAL (decl) = 1;
2366 if (!TYPE_NAME (type))
2367 TYPE_NAME (type) = decl;
2370 registered_builtin_types = tree_cons (0, type, registered_builtin_types);
2374 /* Return the minimum number of bits needed to represent VALUE in a
2375 signed or unsigned type, UNSIGNEDP says which. */
2378 min_precision (tree value, int unsignedp)
2382 /* If the value is negative, compute its negative minus 1. The latter
2383 adjustment is because the absolute value of the largest negative value
2384 is one larger than the largest positive value. This is equivalent to
2385 a bit-wise negation, so use that operation instead. */
2387 if (tree_int_cst_sgn (value) < 0)
2388 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
2390 /* Return the number of bits needed, taking into account the fact
2391 that we need one more bit for a signed than unsigned type. */
2393 if (integer_zerop (value))
2396 log = tree_floor_log2 (value);
2398 return log + 1 + !unsignedp;
2401 /* Print an error message for invalid operands to arith operation
2402 CODE with TYPE0 for operand 0, and TYPE1 for operand 1. */
2405 binary_op_error (enum tree_code code, tree type0, tree type1)
2412 opname = "+"; break;
2414 opname = "-"; break;
2416 opname = "*"; break;
2418 opname = "max"; break;
2420 opname = "min"; break;
2422 opname = "=="; break;
2424 opname = "!="; break;
2426 opname = "<="; break;
2428 opname = ">="; break;
2430 opname = "<"; break;
2432 opname = ">"; break;
2434 opname = "<<"; break;
2436 opname = ">>"; break;
2437 case TRUNC_MOD_EXPR:
2438 case FLOOR_MOD_EXPR:
2439 opname = "%"; break;
2440 case TRUNC_DIV_EXPR:
2441 case FLOOR_DIV_EXPR:
2442 opname = "/"; break;
2444 opname = "&"; break;
2446 opname = "|"; break;
2447 case TRUTH_ANDIF_EXPR:
2448 opname = "&&"; break;
2449 case TRUTH_ORIF_EXPR:
2450 opname = "||"; break;
2452 opname = "^"; break;
2456 error ("invalid operands to binary %s (have %qT and %qT)", opname,
2460 /* Subroutine of build_binary_op, used for comparison operations.
2461 See if the operands have both been converted from subword integer types
2462 and, if so, perhaps change them both back to their original type.
2463 This function is also responsible for converting the two operands
2464 to the proper common type for comparison.
2466 The arguments of this function are all pointers to local variables
2467 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
2468 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
2470 If this function returns nonzero, it means that the comparison has
2471 a constant value. What this function returns is an expression for
2475 shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
2476 enum tree_code *rescode_ptr)
2479 tree op0 = *op0_ptr;
2480 tree op1 = *op1_ptr;
2481 int unsignedp0, unsignedp1;
2483 tree primop0, primop1;
2484 enum tree_code code = *rescode_ptr;
2486 /* Throw away any conversions to wider types
2487 already present in the operands. */
2489 primop0 = get_narrower (op0, &unsignedp0);
2490 primop1 = get_narrower (op1, &unsignedp1);
2492 /* Handle the case that OP0 does not *contain* a conversion
2493 but it *requires* conversion to FINAL_TYPE. */
2495 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
2496 unsignedp0 = TYPE_UNSIGNED (TREE_TYPE (op0));
2497 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
2498 unsignedp1 = TYPE_UNSIGNED (TREE_TYPE (op1));
2500 /* If one of the operands must be floated, we cannot optimize. */
2501 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
2502 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
2504 /* If first arg is constant, swap the args (changing operation
2505 so value is preserved), for canonicalization. Don't do this if
2506 the second arg is 0. */
2508 if (TREE_CONSTANT (primop0)
2509 && !integer_zerop (primop1) && !real_zerop (primop1)
2510 && !fixed_zerop (primop1))
2513 int temi = unsignedp0;
2521 unsignedp0 = unsignedp1;
2544 *rescode_ptr = code;
2547 /* If comparing an integer against a constant more bits wide,
2548 maybe we can deduce a value of 1 or 0 independent of the data.
2549 Or else truncate the constant now
2550 rather than extend the variable at run time.
2552 This is only interesting if the constant is the wider arg.
2553 Also, it is not safe if the constant is unsigned and the
2554 variable arg is signed, since in this case the variable
2555 would be sign-extended and then regarded as unsigned.
2556 Our technique fails in this case because the lowest/highest
2557 possible unsigned results don't follow naturally from the
2558 lowest/highest possible values of the variable operand.
2559 For just EQ_EXPR and NE_EXPR there is another technique that
2560 could be used: see if the constant can be faithfully represented
2561 in the other operand's type, by truncating it and reextending it
2562 and see if that preserves the constant's value. */
2564 if (!real1 && !real2
2565 && TREE_CODE (TREE_TYPE (primop0)) != FIXED_POINT_TYPE
2566 && TREE_CODE (primop1) == INTEGER_CST
2567 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
2569 int min_gt, max_gt, min_lt, max_lt;
2570 tree maxval, minval;
2571 /* 1 if comparison is nominally unsigned. */
2572 int unsignedp = TYPE_UNSIGNED (*restype_ptr);
2575 type = c_common_signed_or_unsigned_type (unsignedp0,
2576 TREE_TYPE (primop0));
2578 maxval = TYPE_MAX_VALUE (type);
2579 minval = TYPE_MIN_VALUE (type);
2581 if (unsignedp && !unsignedp0)
2582 *restype_ptr = c_common_signed_type (*restype_ptr);
2584 if (TREE_TYPE (primop1) != *restype_ptr)
2586 /* Convert primop1 to target type, but do not introduce
2587 additional overflow. We know primop1 is an int_cst. */
2588 primop1 = force_fit_type_double (*restype_ptr,
2589 TREE_INT_CST_LOW (primop1),
2590 TREE_INT_CST_HIGH (primop1), 0,
2591 TREE_OVERFLOW (primop1));
2593 if (type != *restype_ptr)
2595 minval = convert (*restype_ptr, minval);
2596 maxval = convert (*restype_ptr, maxval);
2599 if (unsignedp && unsignedp0)
2601 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
2602 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
2603 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
2604 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
2608 min_gt = INT_CST_LT (primop1, minval);
2609 max_gt = INT_CST_LT (primop1, maxval);
2610 min_lt = INT_CST_LT (minval, primop1);
2611 max_lt = INT_CST_LT (maxval, primop1);
2615 /* This used to be a switch, but Genix compiler can't handle that. */
2616 if (code == NE_EXPR)
2618 if (max_lt || min_gt)
2619 val = truthvalue_true_node;
2621 else if (code == EQ_EXPR)
2623 if (max_lt || min_gt)
2624 val = truthvalue_false_node;
2626 else if (code == LT_EXPR)
2629 val = truthvalue_true_node;
2631 val = truthvalue_false_node;
2633 else if (code == GT_EXPR)
2636 val = truthvalue_true_node;
2638 val = truthvalue_false_node;
2640 else if (code == LE_EXPR)
2643 val = truthvalue_true_node;
2645 val = truthvalue_false_node;
2647 else if (code == GE_EXPR)
2650 val = truthvalue_true_node;
2652 val = truthvalue_false_node;
2655 /* If primop0 was sign-extended and unsigned comparison specd,
2656 we did a signed comparison above using the signed type bounds.
2657 But the comparison we output must be unsigned.
2659 Also, for inequalities, VAL is no good; but if the signed
2660 comparison had *any* fixed result, it follows that the
2661 unsigned comparison just tests the sign in reverse
2662 (positive values are LE, negative ones GE).
2663 So we can generate an unsigned comparison
2664 against an extreme value of the signed type. */
2666 if (unsignedp && !unsignedp0)
2673 primop1 = TYPE_MIN_VALUE (type);
2679 primop1 = TYPE_MAX_VALUE (type);
2686 type = c_common_unsigned_type (type);
2689 if (TREE_CODE (primop0) != INTEGER_CST)
2691 if (val == truthvalue_false_node)
2692 warning (OPT_Wtype_limits, "comparison is always false due to limited range of data type");
2693 if (val == truthvalue_true_node)
2694 warning (OPT_Wtype_limits, "comparison is always true due to limited range of data type");
2699 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2700 if (TREE_SIDE_EFFECTS (primop0))
2701 return build2 (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2705 /* Value is not predetermined, but do the comparison
2706 in the type of the operand that is not constant.
2707 TYPE is already properly set. */
2710 /* If either arg is decimal float and the other is float, find the
2711 proper common type to use for comparison. */
2712 else if (real1 && real2
2713 && (DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop0)))
2714 || DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (primop1)))))
2715 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2717 else if (real1 && real2
2718 && (TYPE_PRECISION (TREE_TYPE (primop0))
2719 == TYPE_PRECISION (TREE_TYPE (primop1))))
2720 type = TREE_TYPE (primop0);
2722 /* If args' natural types are both narrower than nominal type
2723 and both extend in the same manner, compare them
2724 in the type of the wider arg.
2725 Otherwise must actually extend both to the nominal
2726 common type lest different ways of extending
2728 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2730 else if (unsignedp0 == unsignedp1 && real1 == real2
2731 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2732 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2734 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2735 type = c_common_signed_or_unsigned_type (unsignedp0
2736 || TYPE_UNSIGNED (*restype_ptr),
2738 /* Make sure shorter operand is extended the right way
2739 to match the longer operand. */
2741 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2742 TREE_TYPE (primop0)),
2745 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2746 TREE_TYPE (primop1)),
2751 /* Here we must do the comparison on the nominal type
2752 using the args exactly as we received them. */
2753 type = *restype_ptr;
2757 if (!real1 && !real2 && integer_zerop (primop1)
2758 && TYPE_UNSIGNED (*restype_ptr))
2764 /* All unsigned values are >= 0, so we warn. However,
2765 if OP0 is a constant that is >= 0, the signedness of
2766 the comparison isn't an issue, so suppress the
2768 if (warn_type_limits && !in_system_header
2769 && !(TREE_CODE (primop0) == INTEGER_CST
2770 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2772 warning (OPT_Wtype_limits,
2773 "comparison of unsigned expression >= 0 is always true");
2774 value = truthvalue_true_node;
2778 if (warn_type_limits && !in_system_header
2779 && !(TREE_CODE (primop0) == INTEGER_CST
2780 && !TREE_OVERFLOW (convert (c_common_signed_type (type),
2782 warning (OPT_Wtype_limits,
2783 "comparison of unsigned expression < 0 is always false");
2784 value = truthvalue_false_node;
2793 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2794 if (TREE_SIDE_EFFECTS (primop0))
2795 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
2802 *op0_ptr = convert (type, primop0);
2803 *op1_ptr = convert (type, primop1);
2805 *restype_ptr = truthvalue_type_node;
2810 /* Return a tree for the sum or difference (RESULTCODE says which)
2811 of pointer PTROP and integer INTOP. */
2814 pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop)
2818 /* The result is a pointer of the same type that is being added. */
2819 tree result_type = TREE_TYPE (ptrop);
2821 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2823 if (pedantic || warn_pointer_arith)
2824 pedwarn ("pointer of type %<void *%> used in arithmetic");
2825 size_exp = integer_one_node;
2827 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2829 if (pedantic || warn_pointer_arith)
2830 pedwarn ("pointer to a function used in arithmetic");
2831 size_exp = integer_one_node;
2833 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2835 if (pedantic || warn_pointer_arith)
2836 pedwarn ("pointer to member function used in arithmetic");
2837 size_exp = integer_one_node;
2840 size_exp = size_in_bytes (TREE_TYPE (result_type));
2842 /* We are manipulating pointer values, so we don't need to warn
2843 about relying on undefined signed overflow. We disable the
2844 warning here because we use integer types so fold won't know that
2845 they are really pointers. */
2846 fold_defer_overflow_warnings ();
2848 /* If what we are about to multiply by the size of the elements
2849 contains a constant term, apply distributive law
2850 and multiply that constant term separately.
2851 This helps produce common subexpressions. */
2852 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2853 && !TREE_CONSTANT (intop)
2854 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2855 && TREE_CONSTANT (size_exp)
2856 /* If the constant comes from pointer subtraction,
2857 skip this optimization--it would cause an error. */
2858 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2859 /* If the constant is unsigned, and smaller than the pointer size,
2860 then we must skip this optimization. This is because it could cause
2861 an overflow error if the constant is negative but INTOP is not. */
2862 && (!TYPE_UNSIGNED (TREE_TYPE (intop))
2863 || (TYPE_PRECISION (TREE_TYPE (intop))
2864 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2866 enum tree_code subcode = resultcode;
2867 tree int_type = TREE_TYPE (intop);
2868 if (TREE_CODE (intop) == MINUS_EXPR)
2869 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2870 /* Convert both subexpression types to the type of intop,
2871 because weird cases involving pointer arithmetic
2872 can result in a sum or difference with different type args. */
2873 ptrop = build_binary_op (subcode, ptrop,
2874 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2875 intop = convert (int_type, TREE_OPERAND (intop, 0));
2878 /* Convert the integer argument to a type the same size as sizetype
2879 so the multiply won't overflow spuriously. */
2880 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2881 || TYPE_UNSIGNED (TREE_TYPE (intop)) != TYPE_UNSIGNED (sizetype))
2882 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2883 TYPE_UNSIGNED (sizetype)), intop);
2885 /* Replace the integer argument with a suitable product by the object size.
2886 Do this multiplication as signed, then convert to the appropriate
2887 type for the pointer operation. */
2888 intop = convert (sizetype,
2889 build_binary_op (MULT_EXPR, intop,
2890 convert (TREE_TYPE (intop), size_exp), 1));
2892 /* Create the sum or difference. */
2893 if (resultcode == MINUS_EXPR)
2894 intop = fold_build1 (NEGATE_EXPR, sizetype, intop);
2896 ret = fold_build2 (POINTER_PLUS_EXPR, result_type, ptrop, intop);
2898 fold_undefer_and_ignore_overflow_warnings ();
2903 /* Return whether EXPR is a declaration whose address can never be
2907 decl_with_nonnull_addr_p (const_tree expr)
2909 return (DECL_P (expr)
2910 && (TREE_CODE (expr) == PARM_DECL
2911 || TREE_CODE (expr) == LABEL_DECL
2912 || !DECL_WEAK (expr)));
2915 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2916 or for an `if' or `while' statement or ?..: exp. It should already
2917 have been validated to be of suitable type; otherwise, a bad
2918 diagnostic may result.
2920 This preparation consists of taking the ordinary
2921 representation of an expression expr and producing a valid tree
2922 boolean expression describing whether expr is nonzero. We could
2923 simply always do build_binary_op (NE_EXPR, expr, truthvalue_false_node, 1),
2924 but we optimize comparisons, &&, ||, and !.
2926 The resulting type should always be `truthvalue_type_node'. */
2929 c_common_truthvalue_conversion (tree expr)
2931 switch (TREE_CODE (expr))
2933 case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR:
2934 case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2935 case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR:
2936 case ORDERED_EXPR: case UNORDERED_EXPR:
2937 if (TREE_TYPE (expr) == truthvalue_type_node)
2939 return build2 (TREE_CODE (expr), truthvalue_type_node,
2940 TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1));
2942 case TRUTH_ANDIF_EXPR:
2943 case TRUTH_ORIF_EXPR:
2944 case TRUTH_AND_EXPR:
2946 case TRUTH_XOR_EXPR:
2947 if (TREE_TYPE (expr) == truthvalue_type_node)
2949 return build2 (TREE_CODE (expr), truthvalue_type_node,
2950 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2951 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)));
2953 case TRUTH_NOT_EXPR:
2954 if (TREE_TYPE (expr) == truthvalue_type_node)
2956 return build1 (TREE_CODE (expr), truthvalue_type_node,
2957 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2963 return integer_zerop (expr) ? truthvalue_false_node
2964 : truthvalue_true_node;
2967 return real_compare (NE_EXPR, &TREE_REAL_CST (expr), &dconst0)
2968 ? truthvalue_true_node
2969 : truthvalue_false_node;
2972 return fixed_compare (NE_EXPR, &TREE_FIXED_CST (expr),
2973 &FCONST0 (TYPE_MODE (TREE_TYPE (expr))))
2974 ? truthvalue_true_node
2975 : truthvalue_false_node;
2978 expr = build_unary_op (ADDR_EXPR, expr, 0);
2983 tree inner = TREE_OPERAND (expr, 0);
2984 if (decl_with_nonnull_addr_p (inner))
2986 /* Common Ada/Pascal programmer's mistake. */
2987 warning (OPT_Waddress,
2988 "the address of %qD will always evaluate as %<true%>",
2990 return truthvalue_true_node;
2993 /* If we still have a decl, it is possible for its address to
2994 be NULL, so we cannot optimize. */
2997 gcc_assert (DECL_WEAK (inner));
3001 if (TREE_SIDE_EFFECTS (inner))
3002 return build2 (COMPOUND_EXPR, truthvalue_type_node,
3003 inner, truthvalue_true_node);
3005 return truthvalue_true_node;
3009 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
3010 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3011 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
3012 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
3018 /* These don't change whether an object is nonzero or zero. */
3019 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3023 /* These don't change whether an object is zero or nonzero, but
3024 we can't ignore them if their second arg has side-effects. */
3025 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
3026 return build2 (COMPOUND_EXPR, truthvalue_type_node,
3027 TREE_OPERAND (expr, 1),
3028 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
3030 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3033 /* Distribute the conversion into the arms of a COND_EXPR. */
3034 return fold_build3 (COND_EXPR, truthvalue_type_node,
3035 TREE_OPERAND (expr, 0),
3036 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
3037 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2)));
3041 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
3042 since that affects how `default_conversion' will behave. */
3043 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
3044 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
3046 /* If this is widening the argument, we can ignore it. */
3047 if (TYPE_PRECISION (TREE_TYPE (expr))
3048 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
3049 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
3053 if (!TREE_NO_WARNING (expr)
3054 && warn_parentheses)
3056 warning (OPT_Wparentheses,
3057 "suggest parentheses around assignment used as truth value");
3058 TREE_NO_WARNING (expr) = 1;
3066 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
3068 tree t = save_expr (expr);
3069 return (build_binary_op
3070 ((TREE_SIDE_EFFECTS (expr)
3071 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
3072 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
3073 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
3077 if (TREE_CODE (TREE_TYPE (expr)) == FIXED_POINT_TYPE)
3079 tree fixed_zero_node = build_fixed (TREE_TYPE (expr),
3081 (TREE_TYPE (expr))));
3082 return build_binary_op (NE_EXPR, expr, fixed_zero_node, 1);
3085 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3088 static void def_builtin_1 (enum built_in_function fncode,
3090 enum built_in_class fnclass,
3091 tree fntype, tree libtype,
3092 bool both_p, bool fallback_p, bool nonansi_p,
3093 tree fnattrs, bool implicit_p);
3096 /* Apply the TYPE_QUALS to the new DECL. */
3099 c_apply_type_quals_to_decl (int type_quals, tree decl)
3101 tree type = TREE_TYPE (decl);
3103 if (type == error_mark_node)
3106 if (((type_quals & TYPE_QUAL_CONST)
3107 || (type && TREE_CODE (type) == REFERENCE_TYPE))
3108 /* An object declared 'const' is only readonly after it is
3109 initialized. We don't have any way of expressing this currently,
3110 so we need to be conservative and unset TREE_READONLY for types
3111 with constructors. Otherwise aliasing code will ignore stores in
3112 an inline constructor. */
3113 && !(type && TYPE_NEEDS_CONSTRUCTING (type)))
3114 TREE_READONLY (decl) = 1;
3115 if (type_quals & TYPE_QUAL_VOLATILE)
3117 TREE_SIDE_EFFECTS (decl) = 1;
3118 TREE_THIS_VOLATILE (decl) = 1;
3120 if (type_quals & TYPE_QUAL_RESTRICT)
3122 while (type && TREE_CODE (type) == ARRAY_TYPE)
3123 /* Allow 'restrict' on arrays of pointers.
3124 FIXME currently we just ignore it. */
3125 type = TREE_TYPE (type);
3127 || !POINTER_TYPE_P (type)
3128 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type)))
3129 error ("invalid use of %<restrict%>");
3130 else if (flag_strict_aliasing && type == TREE_TYPE (decl))
3131 /* Indicate we need to make a unique alias set for this pointer.
3132 We can't do it here because it might be pointing to an
3134 DECL_POINTER_ALIAS_SET (decl) = -2;
3138 /* Hash function for the problem of multiple type definitions in
3139 different files. This must hash all types that will compare
3140 equal via comptypes to the same value. In practice it hashes
3141 on some of the simple stuff and leaves the details to comptypes. */
3144 c_type_hash (const void *p)
3148 const_tree const t = (const_tree) p;
3150 switch (TREE_CODE (t))
3152 /* For pointers, hash on pointee type plus some swizzling. */
3154 return c_type_hash (TREE_TYPE (t)) ^ 0x3003003;
3155 /* Hash on number of elements and total size. */
3158 t2 = TYPE_VALUES (t);
3162 t2 = TYPE_FIELDS (t);
3164 case QUAL_UNION_TYPE:
3166 t2 = TYPE_FIELDS (t);
3170 t2 = TYPE_FIELDS (t);
3175 for (; t2; t2 = TREE_CHAIN (t2))
3177 /* We might have a VLA here. */
3178 if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST)
3181 size = TREE_INT_CST_LOW (TYPE_SIZE (t));
3182 return ((size << 24) | (i << shift));
3185 static GTY((param_is (union tree_node))) htab_t type_hash_table;
3187 /* Return the typed-based alias set for T, which may be an expression
3188 or a type. Return -1 if we don't do anything special. */
3191 c_common_get_alias_set (tree t)
3196 /* Permit type-punning when accessing a union, provided the access
3197 is directly through the union. For example, this code does not
3198 permit taking the address of a union member and then storing
3199 through it. Even the type-punning allowed here is a GCC
3200 extension, albeit a common and useful one; the C standard says
3201 that such accesses have implementation-defined behavior. */
3203 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
3204 u = TREE_OPERAND (u, 0))
3205 if (TREE_CODE (u) == COMPONENT_REF
3206 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
3209 /* That's all the expressions we handle specially. */
3213 /* The C standard guarantees that any object may be accessed via an
3214 lvalue that has character type. */
3215 if (t == char_type_node
3216 || t == signed_char_type_node
3217 || t == unsigned_char_type_node)
3220 /* If it has the may_alias attribute, it can alias anything. */
3221 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (t)))
3224 /* The C standard specifically allows aliasing between signed and
3225 unsigned variants of the same type. We treat the signed
3226 variant as canonical. */
3227 if (TREE_CODE (t) == INTEGER_TYPE && TYPE_UNSIGNED (t))
3229 tree t1 = c_common_signed_type (t);
3231 /* t1 == t can happen for boolean nodes which are always unsigned. */
3233 return get_alias_set (t1);
3235 else if (POINTER_TYPE_P (t))
3239 /* Unfortunately, there is no canonical form of a pointer type.
3240 In particular, if we have `typedef int I', then `int *', and
3241 `I *' are different types. So, we have to pick a canonical
3242 representative. We do this below.
3244 Technically, this approach is actually more conservative that
3245 it needs to be. In particular, `const int *' and `int *'
3246 should be in different alias sets, according to the C and C++
3247 standard, since their types are not the same, and so,
3248 technically, an `int **' and `const int **' cannot point at
3251 But, the standard is wrong. In particular, this code is
3256 const int* const* cipp = ipp;
3258 And, it doesn't make sense for that to be legal unless you
3259 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
3260 the pointed-to types. This issue has been reported to the
3262 t1 = build_type_no_quals (t);
3264 return get_alias_set (t1);
3267 /* Handle the case of multiple type nodes referring to "the same" type,
3268 which occurs with IMA. These share an alias set. FIXME: Currently only
3269 C90 is handled. (In C99 type compatibility is not transitive, which
3270 complicates things mightily. The alias set splay trees can theoretically
3271 represent this, but insertion is tricky when you consider all the
3272 different orders things might arrive in.) */
3274 if (c_language != clk_c || flag_isoc99)
3277 /* Save time if there's only one input file. */
3278 if (num_in_fnames == 1)
3281 /* Pointers need special handling if they point to any type that
3282 needs special handling (below). */
3283 if (TREE_CODE (t) == POINTER_TYPE)
3286 /* Find bottom type under any nested POINTERs. */
3287 for (t2 = TREE_TYPE (t);
3288 TREE_CODE (t2) == POINTER_TYPE;
3289 t2 = TREE_TYPE (t2))
3291 if (TREE_CODE (t2) != RECORD_TYPE
3292 && TREE_CODE (t2) != ENUMERAL_TYPE
3293 && TREE_CODE (t2) != QUAL_UNION_TYPE
3294 && TREE_CODE (t2) != UNION_TYPE)
3296 if (TYPE_SIZE (t2) == 0)
3299 /* These are the only cases that need special handling. */
3300 if (TREE_CODE (t) != RECORD_TYPE
3301 && TREE_CODE (t) != ENUMERAL_TYPE
3302 && TREE_CODE (t) != QUAL_UNION_TYPE
3303 && TREE_CODE (t) != UNION_TYPE
3304 && TREE_CODE (t) != POINTER_TYPE)
3307 if (TYPE_SIZE (t) == 0)
3310 /* Look up t in hash table. Only one of the compatible types within each
3311 alias set is recorded in the table. */
3312 if (!type_hash_table)
3313 type_hash_table = htab_create_ggc (1021, c_type_hash,
3314 (htab_eq) lang_hooks.types_compatible_p,
3316 slot = htab_find_slot (type_hash_table, t, INSERT);
3319 TYPE_ALIAS_SET (t) = TYPE_ALIAS_SET ((tree)*slot);
3320 return TYPE_ALIAS_SET ((tree)*slot);
3323 /* Our caller will assign and record (in t) a new alias set; all we need
3324 to do is remember t in the hash table. */
3330 /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where the
3331 second parameter indicates which OPERATOR is being applied. The COMPLAIN
3332 flag controls whether we should diagnose possibly ill-formed
3333 constructs or not. */
3336 c_sizeof_or_alignof_type (tree type, bool is_sizeof, int complain)
3338 const char *op_name;
3340 enum tree_code type_code = TREE_CODE (type);
3342 op_name = is_sizeof ? "sizeof" : "__alignof__";
3344 if (type_code == FUNCTION_TYPE)
3348 if (complain && (pedantic || warn_pointer_arith))
3349 pedwarn ("invalid application of %<sizeof%> to a function type");
3351 return error_mark_node;
3352 value = size_one_node;
3355 value = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
3357 else if (type_code == VOID_TYPE || type_code == ERROR_MARK)
3359 if (type_code == VOID_TYPE
3360 && complain && (pedantic || warn_pointer_arith))
3361 pedwarn ("invalid application of %qs to a void type", op_name);
3363 return error_mark_node;
3364 value = size_one_node;
3366 else if (!COMPLETE_TYPE_P (type))
3369 error ("invalid application of %qs to incomplete type %qT ",
3371 value = size_zero_node;
3376 /* Convert in case a char is more than one unit. */
3377 value = size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
3378 size_int (TYPE_PRECISION (char_type_node)
3381 value = size_int (TYPE_ALIGN_UNIT (type));
3384 /* VALUE will have an integer type with TYPE_IS_SIZETYPE set.
3385 TYPE_IS_SIZETYPE means that certain things (like overflow) will
3386 never happen. However, this node should really have type
3387 `size_t', which is just a typedef for an ordinary integer type. */
3388 value = fold_convert (size_type_node, value);
3389 gcc_assert (!TYPE_IS_SIZETYPE (TREE_TYPE (value)));
3394 /* Implement the __alignof keyword: Return the minimum required
3395 alignment of EXPR, measured in bytes. For VAR_DECLs,
3396 FUNCTION_DECLs and FIELD_DECLs return DECL_ALIGN (which can be set
3397 from an "aligned" __attribute__ specification). */
3400 c_alignof_expr (tree expr)
3404 if (VAR_OR_FUNCTION_DECL_P (expr))
3405 t = size_int (DECL_ALIGN_UNIT (expr));
3407 else if (TREE_CODE (expr) == COMPONENT_REF
3408 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
3410 error ("%<__alignof%> applied to a bit-field");
3413 else if (TREE_CODE (expr) == COMPONENT_REF
3414 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
3415 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (expr, 1)));
3417 else if (TREE_CODE (expr) == INDIRECT_REF)
3419 tree t = TREE_OPERAND (expr, 0);
3421 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3423 while ((TREE_CODE (t) == NOP_EXPR || TREE_CODE (t) == CONVERT_EXPR)
3424 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
3428 t = TREE_OPERAND (t, 0);
3429 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
3430 if (thisalign > bestalign)
3431 best = t, bestalign = thisalign;
3433 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
3436 return c_alignof (TREE_TYPE (expr));
3438 return fold_convert (size_type_node, t);
3441 /* Handle C and C++ default attributes. */
3443 enum built_in_attribute
3445 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
3446 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
3447 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
3448 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
3449 #include "builtin-attrs.def"
3450 #undef DEF_ATTR_NULL_TREE
3452 #undef DEF_ATTR_IDENT
3453 #undef DEF_ATTR_TREE_LIST
3457 static GTY(()) tree built_in_attributes[(int) ATTR_LAST];
3459 static void c_init_attributes (void);
3463 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
3464 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
3465 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
3466 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
3467 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3468 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3469 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
3470 #define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
3471 #define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
3472 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
3473 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
3474 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
3475 #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
3476 #define DEF_FUNCTION_TYPE_VAR_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
3477 #define DEF_FUNCTION_TYPE_VAR_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG6) \
3479 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
3480 #include "builtin-types.def"
3481 #undef DEF_PRIMITIVE_TYPE
3482 #undef DEF_FUNCTION_TYPE_0
3483 #undef DEF_FUNCTION_TYPE_1
3484 #undef DEF_FUNCTION_TYPE_2
3485 #undef DEF_FUNCTION_TYPE_3
3486 #undef DEF_FUNCTION_TYPE_4
3487 #undef DEF_FUNCTION_TYPE_5
3488 #undef DEF_FUNCTION_TYPE_6
3489 #undef DEF_FUNCTION_TYPE_7
3490 #undef DEF_FUNCTION_TYPE_VAR_0
3491 #undef DEF_FUNCTION_TYPE_VAR_1
3492 #undef DEF_FUNCTION_TYPE_VAR_2
3493 #undef DEF_FUNCTION_TYPE_VAR_3
3494 #undef DEF_FUNCTION_TYPE_VAR_4
3495 #undef DEF_FUNCTION_TYPE_VAR_5
3496 #undef DEF_POINTER_TYPE
3500 typedef enum c_builtin_type builtin_type;
3502 /* A temporary array for c_common_nodes_and_builtins. Used in
3503 communication with def_fn_type. */
3504 static tree builtin_types[(int) BT_LAST + 1];
3506 /* A helper function for c_common_nodes_and_builtins. Build function type
3507 for DEF with return type RET and N arguments. If VAR is true, then the
3508 function should be variadic after those N arguments.
3510 Takes special care not to ICE if any of the types involved are
3511 error_mark_node, which indicates that said type is not in fact available
3512 (see builtin_type_for_size). In which case the function type as a whole
3513 should be error_mark_node. */
3516 def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...)
3518 tree args = NULL, t;
3523 for (i = 0; i < n; ++i)
3525 builtin_type a = va_arg (list, builtin_type);
3526 t = builtin_types[a];
3527 if (t == error_mark_node)
3529 args = tree_cons (NULL_TREE, t, args);
3533 args = nreverse (args);
3535 args = chainon (args, void_list_node);
3537 t = builtin_types[ret];
3538 if (t == error_mark_node)
3540 t = build_function_type (t, args);
3543 builtin_types[def] = t;
3546 /* Build builtin functions common to both C and C++ language
3550 c_define_builtins (tree va_list_ref_type_node, tree va_list_arg_type_node)
3552 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
3553 builtin_types[ENUM] = VALUE;
3554 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
3555 def_fn_type (ENUM, RETURN, 0, 0);
3556 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
3557 def_fn_type (ENUM, RETURN, 0, 1, ARG1);
3558 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
3559 def_fn_type (ENUM, RETURN, 0, 2, ARG1, ARG2);
3560 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3561 def_fn_type (ENUM, RETURN, 0, 3, ARG1, ARG2, ARG3);
3562 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3563 def_fn_type (ENUM, RETURN, 0, 4, ARG1, ARG2, ARG3, ARG4);
3564 #define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3565 def_fn_type (ENUM, RETURN, 0, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3566 #define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3568 def_fn_type (ENUM, RETURN, 0, 6, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6);
3569 #define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
3571 def_fn_type (ENUM, RETURN, 0, 7, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
3572 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3573 def_fn_type (ENUM, RETURN, 1, 0);
3574 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3575 def_fn_type (ENUM, RETURN, 1, 1, ARG1);
3576 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3577 def_fn_type (ENUM, RETURN, 1, 2, ARG1, ARG2);
3578 #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
3579 def_fn_type (ENUM, RETURN, 1, 3, ARG1, ARG2, ARG3);
3580 #define DEF_FUNCTION_TYPE_VAR_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
3581 def_fn_type (ENUM, RETURN, 1, 4, ARG1, ARG2, ARG3, ARG4);
3582 #define DEF_FUNCTION_TYPE_VAR_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
3583 def_fn_type (ENUM, RETURN, 1, 5, ARG1, ARG2, ARG3, ARG4, ARG5);
3584 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3585 builtin_types[(int) ENUM] = build_pointer_type (builtin_types[(int) TYPE]);
3587 #include "builtin-types.def"
3589 #undef DEF_PRIMITIVE_TYPE
3590 #undef DEF_FUNCTION_TYPE_1
3591 #undef DEF_FUNCTION_TYPE_2
3592 #undef DEF_FUNCTION_TYPE_3
3593 #undef DEF_FUNCTION_TYPE_4
3594 #undef DEF_FUNCTION_TYPE_5
3595 #undef DEF_FUNCTION_TYPE_6
3596 #undef DEF_FUNCTION_TYPE_VAR_0
3597 #undef DEF_FUNCTION_TYPE_VAR_1
3598 #undef DEF_FUNCTION_TYPE_VAR_2
3599 #undef DEF_FUNCTION_TYPE_VAR_3
3600 #undef DEF_FUNCTION_TYPE_VAR_4
3601 #undef DEF_FUNCTION_TYPE_VAR_5
3602 #undef DEF_POINTER_TYPE
3603 builtin_types[(int) BT_LAST] = NULL_TREE;
3605 c_init_attributes ();
3607 #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, \
3608 NONANSI_P, ATTRS, IMPLICIT, COND) \
3610 def_builtin_1 (ENUM, NAME, CLASS, \
3611 builtin_types[(int) TYPE], \
3612 builtin_types[(int) LIBTYPE], \
3613 BOTH_P, FALLBACK_P, NONANSI_P, \
3614 built_in_attributes[(int) ATTRS], IMPLICIT);
3615 #include "builtins.def"
3618 targetm.init_builtins ();
3620 build_common_builtin_nodes ();
3626 /* Build tree nodes and builtin functions common to both C and C++ language
3630 c_common_nodes_and_builtins (void)
3632 int wchar_type_size;
3633 tree array_domain_type;
3634 tree va_list_ref_type_node;
3635 tree va_list_arg_type_node;
3637 /* Define `int' and `char' first so that dbx will output them first. */
3638 record_builtin_type (RID_INT, NULL, integer_type_node);
3639 record_builtin_type (RID_CHAR, "char", char_type_node);
3641 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
3642 "unsigned long", "long long unsigned" and "unsigned short" were in C++
3643 but not C. Are the conditionals here needed? */
3644 if (c_dialect_cxx ())
3645 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
3646 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
3647 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
3648 record_builtin_type (RID_MAX, "long unsigned int",
3649 long_unsigned_type_node);
3650 if (c_dialect_cxx ())
3651 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
3652 record_builtin_type (RID_MAX, "long long int",
3653 long_long_integer_type_node);
3654 record_builtin_type (RID_MAX, "long long unsigned int",
3655 long_long_unsigned_type_node);
3656 if (c_dialect_cxx ())
3657 record_builtin_type (RID_MAX, "long long unsigned",
3658 long_long_unsigned_type_node);
3659 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
3660 record_builtin_type (RID_MAX, "short unsigned int",
3661 short_unsigned_type_node);
3662 if (c_dialect_cxx ())
3663 record_builtin_type (RID_MAX, "unsigned short",
3664 short_unsigned_type_node);
3666 /* Define both `signed char' and `unsigned char'. */
3667 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
3668 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
3670 /* These are types that c_common_type_for_size and
3671 c_common_type_for_mode use. */
3672 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3674 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3676 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3678 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3680 #if HOST_BITS_PER_WIDE_INT >= 64
3681 if (targetm.scalar_mode_supported_p (TImode))
3682 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3683 get_identifier ("__int128_t"),
3686 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3687 unsigned_intQI_type_node));
3688 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3689 unsigned_intHI_type_node));
3690 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3691 unsigned_intSI_type_node));
3692 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3693 unsigned_intDI_type_node));
3694 #if HOST_BITS_PER_WIDE_INT >= 64
3695 if (targetm.scalar_mode_supported_p (TImode))
3696 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3697 get_identifier ("__uint128_t"),
3698 unsigned_intTI_type_node));
3701 /* Create the widest literal types. */
3702 widest_integer_literal_type_node
3703 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3704 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3705 widest_integer_literal_type_node));
3707 widest_unsigned_literal_type_node
3708 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3709 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3710 widest_unsigned_literal_type_node));
3712 /* `unsigned long' is the standard type for sizeof.
3713 Note that stddef.h uses `unsigned long',
3714 and this must agree, even if long and int are the same size. */
3716 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
3717 signed_size_type_node = c_common_signed_type (size_type_node);
3718 set_sizetype (size_type_node);
3721 TREE_TYPE (identifier_global_value (get_identifier (PID_TYPE)));
3723 build_common_tree_nodes_2 (flag_short_double);
3725 record_builtin_type (RID_FLOAT, NULL, float_type_node);
3726 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
3727 record_builtin_type (RID_MAX, "long double", long_double_type_node);
3729 /* Only supported decimal floating point extension if the target
3730 actually supports underlying modes. */
3731 if (targetm.scalar_mode_supported_p (SDmode)
3732 && targetm.scalar_mode_supported_p (DDmode)
3733 && targetm.scalar_mode_supported_p (TDmode))
3735 record_builtin_type (RID_DFLOAT32, NULL, dfloat32_type_node);
3736 record_builtin_type (RID_DFLOAT64, NULL, dfloat64_type_node);
3737 record_builtin_type (RID_DFLOAT128, NULL, dfloat128_type_node);
3740 if (targetm.fixed_point_supported_p ())
3742 record_builtin_type (RID_MAX, "short _Fract", short_fract_type_node);
3743 record_builtin_type (RID_FRACT, NULL, fract_type_node);
3744 record_builtin_type (RID_MAX, "long _Fract", long_fract_type_node);
3745 record_builtin_type (RID_MAX, "long long _Fract",
3746 long_long_fract_type_node);
3747 record_builtin_type (RID_MAX, "unsigned short _Fract",
3748 unsigned_short_fract_type_node);
3749 record_builtin_type (RID_MAX, "unsigned _Fract",
3750 unsigned_fract_type_node);
3751 record_builtin_type (RID_MAX, "unsigned long _Fract",
3752 unsigned_long_fract_type_node);
3753 record_builtin_type (RID_MAX, "unsigned long long _Fract",
3754 unsigned_long_long_fract_type_node);
3755 record_builtin_type (RID_MAX, "_Sat short _Fract",
3756 sat_short_fract_type_node);
3757 record_builtin_type (RID_MAX, "_Sat _Fract", sat_fract_type_node);
3758 record_builtin_type (RID_MAX, "_Sat long _Fract",
3759 sat_long_fract_type_node);
3760 record_builtin_type (RID_MAX, "_Sat long long _Fract",
3761 sat_long_long_fract_type_node);
3762 record_builtin_type (RID_MAX, "_Sat unsigned short _Fract",
3763 sat_unsigned_short_fract_type_node);
3764 record_builtin_type (RID_MAX, "_Sat unsigned _Fract",
3765 sat_unsigned_fract_type_node);
3766 record_builtin_type (RID_MAX, "_Sat unsigned long _Fract",
3767 sat_unsigned_long_fract_type_node);
3768 record_builtin_type (RID_MAX, "_Sat unsigned long long _Fract",
3769 sat_unsigned_long_long_fract_type_node);
3770 record_builtin_type (RID_MAX, "short _Accum", short_accum_type_node);
3771 record_builtin_type (RID_ACCUM, NULL, accum_type_node);
3772 record_builtin_type (RID_MAX, "long _Accum", long_accum_type_node);
3773 record_builtin_type (RID_MAX, "long long _Accum",
3774 long_long_accum_type_node);
3775 record_builtin_type (RID_MAX, "unsigned short _Accum",
3776 unsigned_short_accum_type_node);
3777 record_builtin_type (RID_MAX, "unsigned _Accum",
3778 unsigned_accum_type_node);
3779 record_builtin_type (RID_MAX, "unsigned long _Accum",
3780 unsigned_long_accum_type_node);
3781 record_builtin_type (RID_MAX, "unsigned long long _Accum",
3782 unsigned_long_long_accum_type_node);
3783 record_builtin_type (RID_MAX, "_Sat short _Accum",
3784 sat_short_accum_type_node);
3785 record_builtin_type (RID_MAX, "_Sat _Accum", sat_accum_type_node);
3786 record_builtin_type (RID_MAX, "_Sat long _Accum",
3787 sat_long_accum_type_node);
3788 record_builtin_type (RID_MAX, "_Sat long long _Accum",
3789 sat_long_long_accum_type_node);
3790 record_builtin_type (RID_MAX, "_Sat unsigned short _Accum",
3791 sat_unsigned_short_accum_type_node);
3792 record_builtin_type (RID_MAX, "_Sat unsigned _Accum",
3793 sat_unsigned_accum_type_node);
3794 record_builtin_type (RID_MAX, "_Sat unsigned long _Accum",
3795 sat_unsigned_long_accum_type_node);
3796 record_builtin_type (RID_MAX, "_Sat unsigned long long _Accum",
3797 sat_unsigned_long_long_accum_type_node);
3801 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3802 get_identifier ("complex int"),
3803 complex_integer_type_node));
3804 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3805 get_identifier ("complex float"),
3806 complex_float_type_node));
3807 lang_hooks.decls.pushdecl (build_decl (TYPE_DECL,
3808 get_identifier ("complex double"),
3809 complex_double_type_node));
3810 lang_hooks.decls.pushdecl
3811 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3812 complex_long_double_type_node));
3814 if (c_dialect_cxx ())
3815 /* For C++, make fileptr_type_node a distinct void * type until
3816 FILE type is defined. */
3817 fileptr_type_node = build_variant_type_copy (ptr_type_node);
3819 record_builtin_type (RID_VOID, NULL, void_type_node);
3821 /* Set the TYPE_NAME for any variants that were built before
3822 record_builtin_type gave names to the built-in types. */
3824 tree void_name = TYPE_NAME (void_type_node);
3825 TYPE_NAME (void_type_node) = NULL_TREE;
3826 TYPE_NAME (build_qualified_type (void_type_node, TYPE_QUAL_CONST))
3828 TYPE_NAME (void_type_node) = void_name;
3831 /* This node must not be shared. */
3832 void_zero_node = make_node (INTEGER_CST);
3833 TREE_TYPE (void_zero_node) = void_type_node;
3835 void_list_node = build_void_list_node ();
3837 /* Make a type to be the domain of a few array types
3838 whose domains don't really matter.
3839 200 is small enough that it always fits in size_t
3840 and large enough that it can hold most function names for the
3841 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3842 array_domain_type = build_index_type (size_int (200));
3844 /* Make a type for arrays of characters.
3845 With luck nothing will ever really depend on the length of this
3847 char_array_type_node
3848 = build_array_type (char_type_node, array_domain_type);
3850 /* Likewise for arrays of ints. */
3852 = build_array_type (integer_type_node, array_domain_type);
3854 string_type_node = build_pointer_type (char_type_node);
3855 const_string_type_node
3856 = build_pointer_type (build_qualified_type
3857 (char_type_node, TYPE_QUAL_CONST));
3859 /* This is special for C++ so functions can be overloaded. */
3860 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
3861 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
3862 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3863 if (c_dialect_cxx ())
3865 if (TYPE_UNSIGNED (wchar_type_node))
3866 wchar_type_node = make_unsigned_type (wchar_type_size);
3868 wchar_type_node = make_signed_type (wchar_type_size);
3869 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
3873 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
3874 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
3877 /* This is for wide string constants. */
3878 wchar_array_type_node
3879 = build_array_type (wchar_type_node, array_domain_type);
3882 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
3885 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
3887 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
3889 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3891 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
3892 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
3894 lang_hooks.decls.pushdecl
3895 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
3896 va_list_type_node));
3898 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
3900 va_list_arg_type_node = va_list_ref_type_node =
3901 build_pointer_type (TREE_TYPE (va_list_type_node));
3905 va_list_arg_type_node = va_list_type_node;
3906 va_list_ref_type_node = build_reference_type (va_list_type_node);
3909 if (!flag_preprocess_only)
3910 c_define_builtins (va_list_ref_type_node, va_list_arg_type_node);
3912 main_identifier_node = get_identifier ("main");
3914 /* Create the built-in __null node. It is important that this is
3916 null_node = make_node (INTEGER_CST);
3917 TREE_TYPE (null_node) = c_common_type_for_size (POINTER_SIZE, 0);
3919 /* Since builtin_types isn't gc'ed, don't export these nodes. */
3920 memset (builtin_types, 0, sizeof (builtin_types));
3923 /* Look up the function in built_in_decls that corresponds to DECL
3924 and set ASMSPEC as its user assembler name. DECL must be a
3925 function decl that declares a builtin. */
3928 set_builtin_user_assembler_name (tree decl, const char *asmspec)
3931 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
3932 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL
3935 builtin = built_in_decls [DECL_FUNCTION_CODE (decl)];
3936 set_user_assembler_name (builtin, asmspec);
3937 if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMCPY)
3938 init_block_move_fn (asmspec);
3939 else if (DECL_FUNCTION_CODE (decl) == BUILT_IN_MEMSET)
3940 init_block_clear_fn (asmspec);
3943 /* The number of named compound-literals generated thus far. */
3944 static GTY(()) int compound_literal_number;
3946 /* Set DECL_NAME for DECL, a VAR_DECL for a compound-literal. */
3949 set_compound_literal_name (tree decl)
3952 ASM_FORMAT_PRIVATE_NAME (name, "__compound_literal",
3953 compound_literal_number);
3954 compound_literal_number++;
3955 DECL_NAME (decl) = get_identifier (name);
3959 build_va_arg (tree expr, tree type)
3961 return build1 (VA_ARG_EXPR, type, expr);
3965 /* Linked list of disabled built-in functions. */
3967 typedef struct disabled_builtin
3970 struct disabled_builtin *next;
3972 static disabled_builtin *disabled_builtins = NULL;
3974 static bool builtin_function_disabled_p (const char *);
3976 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3977 begins with "__builtin_", give an error. */
3980 disable_builtin_function (const char *name)
3982 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3983 error ("cannot disable built-in function %qs", name);
3986 disabled_builtin *new_disabled_builtin = XNEW (disabled_builtin);
3987 new_disabled_builtin->name = name;
3988 new_disabled_builtin->next = disabled_builtins;
3989 disabled_builtins = new_disabled_builtin;
3994 /* Return true if the built-in function NAME has been disabled, false
3998 builtin_function_disabled_p (const char *name)
4000 disabled_builtin *p;
4001 for (p = disabled_builtins; p != NULL; p = p->next)
4003 if (strcmp (name, p->name) == 0)
4010 /* Worker for DEF_BUILTIN.
4011 Possibly define a builtin function with one or two names.
4012 Does not declare a non-__builtin_ function if flag_no_builtin, or if
4013 nonansi_p and flag_no_nonansi_builtin. */
4016 def_builtin_1 (enum built_in_function fncode,
4018 enum built_in_class fnclass,
4019 tree fntype, tree libtype,
4020 bool both_p, bool fallback_p, bool nonansi_p,
4021 tree fnattrs, bool implicit_p)
4024 const char *libname;
4026 if (fntype == error_mark_node)
4029 gcc_assert ((!both_p && !fallback_p)
4030 || !strncmp (name, "__builtin_",
4031 strlen ("__builtin_")));
4033 libname = name + strlen ("__builtin_");
4034 decl = add_builtin_function (name, fntype, fncode, fnclass,
4035 (fallback_p ? libname : NULL),
4038 && !flag_no_builtin && !builtin_function_disabled_p (libname)
4039 && !(nonansi_p && flag_no_nonansi_builtin))
4040 add_builtin_function (libname, libtype, fncode, fnclass,
4043 built_in_decls[(int) fncode] = decl;
4045 implicit_built_in_decls[(int) fncode] = decl;
4048 /* Nonzero if the type T promotes to int. This is (nearly) the
4049 integral promotions defined in ISO C99 6.3.1.1/2. */
4052 c_promoting_integer_type_p (const_tree t)
4054 switch (TREE_CODE (t))
4057 return (TYPE_MAIN_VARIANT (t) == char_type_node
4058 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
4059 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
4060 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
4061 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
4062 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
4065 /* ??? Technically all enumerations not larger than an int
4066 promote to an int. But this is used along code paths
4067 that only want to notice a size change. */
4068 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
4078 /* Return 1 if PARMS specifies a fixed number of parameters
4079 and none of their types is affected by default promotions. */
4082 self_promoting_args_p (const_tree parms)
4085 for (t = parms; t; t = TREE_CHAIN (t))
4087 tree type = TREE_VALUE (t);
4089 if (type == error_mark_node)
4092 if (TREE_CHAIN (t) == 0 && type != void_type_node)
4098 if (TYPE_MAIN_VARIANT (type) == float_type_node)