1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
33 #include "tree-inline.h"
34 #include "diagnostic.h"
39 #include "langhooks.h"
40 #include "except.h" /* For USING_SJLJ_EXCEPTIONS. */
42 cpp_reader *parse_in; /* Declared in c-pragma.h. */
44 /* We let tm.h override the types used here, to handle trivial differences
45 such as the choice of unsigned int or long unsigned int for size_t.
46 When machines start needing nontrivial differences in the size type,
47 it would be best to do something here to figure out automatically
48 from other information what type to use. */
51 #define SIZE_TYPE "long unsigned int"
55 #define WCHAR_TYPE "int"
58 /* WCHAR_TYPE gets overridden by -fshort-wchar. */
59 #define MODIFIED_WCHAR_TYPE \
60 (flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
63 #define PTRDIFF_TYPE "long int"
67 #define WINT_TYPE "unsigned int"
71 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
73 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
79 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
81 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
82 ? "long unsigned int" \
83 : "long long unsigned int"))
86 #ifndef STDC_0_IN_SYSTEM_HEADERS
87 #define STDC_0_IN_SYSTEM_HEADERS 0
90 #ifndef REGISTER_PREFIX
91 #define REGISTER_PREFIX ""
94 /* The variant of the C language being processed. */
96 enum c_language_kind c_language;
98 /* The following symbols are subsumed in the c_global_trees array, and
99 listed here individually for documentation purposes.
101 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
103 tree short_integer_type_node;
104 tree long_integer_type_node;
105 tree long_long_integer_type_node;
107 tree short_unsigned_type_node;
108 tree long_unsigned_type_node;
109 tree long_long_unsigned_type_node;
111 tree boolean_type_node;
112 tree boolean_false_node;
113 tree boolean_true_node;
115 tree ptrdiff_type_node;
117 tree unsigned_char_type_node;
118 tree signed_char_type_node;
119 tree wchar_type_node;
120 tree signed_wchar_type_node;
121 tree unsigned_wchar_type_node;
123 tree float_type_node;
124 tree double_type_node;
125 tree long_double_type_node;
127 tree complex_integer_type_node;
128 tree complex_float_type_node;
129 tree complex_double_type_node;
130 tree complex_long_double_type_node;
132 tree intQI_type_node;
133 tree intHI_type_node;
134 tree intSI_type_node;
135 tree intDI_type_node;
136 tree intTI_type_node;
138 tree unsigned_intQI_type_node;
139 tree unsigned_intHI_type_node;
140 tree unsigned_intSI_type_node;
141 tree unsigned_intDI_type_node;
142 tree unsigned_intTI_type_node;
144 tree widest_integer_literal_type_node;
145 tree widest_unsigned_literal_type_node;
147 Nodes for types `void *' and `const void *'.
149 tree ptr_type_node, const_ptr_type_node;
151 Nodes for types `char *' and `const char *'.
153 tree string_type_node, const_string_type_node;
155 Type `char[SOMENUMBER]'.
156 Used when an array of char is needed and the size is irrelevant.
158 tree char_array_type_node;
160 Type `int[SOMENUMBER]' or something like it.
161 Used when an array of int needed and the size is irrelevant.
163 tree int_array_type_node;
165 Type `wchar_t[SOMENUMBER]' or something like it.
166 Used when a wide string literal is created.
168 tree wchar_array_type_node;
170 Type `int ()' -- used for implicit declaration of functions.
172 tree default_function_type;
174 A VOID_TYPE node, packaged in a TREE_LIST.
178 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
179 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
180 VAR_DECLS, but C++ does.)
182 tree function_name_decl_node;
183 tree pretty_function_name_decl_node;
184 tree c99_function_name_decl_node;
186 Stack of nested function name VAR_DECLs.
188 tree saved_function_name_decls;
192 tree c_global_trees[CTI_MAX];
194 /* Nonzero if prepreprocessing only. */
195 int flag_preprocess_only;
197 /* Nonzero if an ISO standard was selected. It rejects macros in the
201 /* Nonzero if -undef was given. It suppresses target built-in macros
205 /* Nonzero means don't recognize the non-ANSI builtin functions. */
209 /* Nonzero means don't recognize the non-ANSI builtin functions.
212 int flag_no_nonansi_builtin;
214 /* Nonzero means give `double' the same size as `float'. */
216 int flag_short_double;
218 /* Nonzero means give `wchar_t' the same size as `short'. */
220 int flag_short_wchar;
222 /* Nonzero means warn about use of multicharacter literals. */
224 int warn_multichar = 1;
226 /* Nonzero means warn about possible violations of sequence point rules. */
228 int warn_sequence_point;
230 /* Nonzero means to warn about compile-time division by zero. */
231 int warn_div_by_zero = 1;
233 /* Warn about NULL being passed to argument slots marked as requiring
238 /* The elements of `ridpointers' are identifier nodes for the reserved
239 type names and storage classes. It is indexed by a RID_... value. */
242 tree (*make_fname_decl) PARAMS ((tree, int));
244 /* If non-NULL, the address of a language-specific function that
245 returns 1 for language-specific statement codes. */
246 int (*lang_statement_code_p) PARAMS ((enum tree_code));
248 /* If non-NULL, the address of a language-specific function that takes
249 any action required right before expand_function_end is called. */
250 void (*lang_expand_function_end) PARAMS ((void));
252 /* Nonzero means the expression being parsed will never be evaluated.
253 This is a count, since unevaluated expressions can nest. */
256 /* Information about how a function name is generated. */
259 tree *const decl; /* pointer to the VAR_DECL. */
260 const unsigned rid; /* RID number for the identifier. */
261 const int pretty; /* How pretty is it? */
264 /* The three ways of getting then name of the current function. */
266 const struct fname_var_t fname_vars[] =
268 /* C99 compliant __func__, must be first. */
269 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
270 /* GCC __FUNCTION__ compliant. */
271 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
272 /* GCC __PRETTY_FUNCTION__ compliant. */
273 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
277 static int constant_fits_type_p PARAMS ((tree, tree));
279 /* Keep a stack of if statements. We record the number of compound
280 statements seen up to the if keyword, as well as the line number
281 and file of the if. If a potentially ambiguous else is seen, that
282 fact is recorded; the warning is issued when we can be sure that
283 the enclosing if statement does not have an else branch. */
293 static if_elt *if_stack;
295 /* Amount of space in the if statement stack. */
296 static int if_stack_space = 0;
299 static int if_stack_pointer = 0;
301 static void cb_register_builtins PARAMS ((cpp_reader *));
303 static tree handle_packed_attribute PARAMS ((tree *, tree, tree, int,
305 static tree handle_nocommon_attribute PARAMS ((tree *, tree, tree, int,
307 static tree handle_common_attribute PARAMS ((tree *, tree, tree, int,
309 static tree handle_noreturn_attribute PARAMS ((tree *, tree, tree, int,
311 static tree handle_noinline_attribute PARAMS ((tree *, tree, tree, int,
313 static tree handle_always_inline_attribute PARAMS ((tree *, tree, tree, int,
315 static tree handle_used_attribute PARAMS ((tree *, tree, tree, int,
317 static tree handle_unused_attribute PARAMS ((tree *, tree, tree, int,
319 static tree handle_const_attribute PARAMS ((tree *, tree, tree, int,
321 static tree handle_transparent_union_attribute PARAMS ((tree *, tree, tree,
323 static tree handle_constructor_attribute PARAMS ((tree *, tree, tree, int,
325 static tree handle_destructor_attribute PARAMS ((tree *, tree, tree, int,
327 static tree handle_mode_attribute PARAMS ((tree *, tree, tree, int,
329 static tree handle_section_attribute PARAMS ((tree *, tree, tree, int,
331 static tree handle_aligned_attribute PARAMS ((tree *, tree, tree, int,
333 static tree handle_weak_attribute PARAMS ((tree *, tree, tree, int,
335 static tree handle_alias_attribute PARAMS ((tree *, tree, tree, int,
337 static tree handle_visibility_attribute PARAMS ((tree *, tree, tree, int,
339 static tree handle_no_instrument_function_attribute PARAMS ((tree *, tree,
342 static tree handle_malloc_attribute PARAMS ((tree *, tree, tree, int,
344 static tree handle_no_limit_stack_attribute PARAMS ((tree *, tree, tree, int,
346 static tree handle_pure_attribute PARAMS ((tree *, tree, tree, int,
348 static tree handle_deprecated_attribute PARAMS ((tree *, tree, tree, int,
350 static tree handle_vector_size_attribute PARAMS ((tree *, tree, tree, int,
352 static tree handle_nonnull_attribute PARAMS ((tree *, tree, tree, int,
354 static tree handle_nothrow_attribute PARAMS ((tree *, tree, tree, int,
356 static tree vector_size_helper PARAMS ((tree, tree));
358 static void check_function_nonnull PARAMS ((tree, tree));
359 static void check_nonnull_arg PARAMS ((void *, tree,
360 unsigned HOST_WIDE_INT));
361 static bool nonnull_check_p PARAMS ((tree, unsigned HOST_WIDE_INT));
362 static bool get_nonnull_operand PARAMS ((tree,
363 unsigned HOST_WIDE_INT *));
364 void builtin_define_std PARAMS ((const char *));
365 static void builtin_define_with_value PARAMS ((const char *, const char *,
368 /* Table of machine-independent attributes common to all C-like languages. */
369 const struct attribute_spec c_common_attribute_table[] =
371 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
372 { "packed", 0, 0, false, false, false,
373 handle_packed_attribute },
374 { "nocommon", 0, 0, true, false, false,
375 handle_nocommon_attribute },
376 { "common", 0, 0, true, false, false,
377 handle_common_attribute },
378 /* FIXME: logically, noreturn attributes should be listed as
379 "false, true, true" and apply to function types. But implementing this
380 would require all the places in the compiler that use TREE_THIS_VOLATILE
381 on a decl to identify non-returning functions to be located and fixed
382 to check the function type instead. */
383 { "noreturn", 0, 0, true, false, false,
384 handle_noreturn_attribute },
385 { "volatile", 0, 0, true, false, false,
386 handle_noreturn_attribute },
387 { "noinline", 0, 0, true, false, false,
388 handle_noinline_attribute },
389 { "always_inline", 0, 0, true, false, false,
390 handle_always_inline_attribute },
391 { "used", 0, 0, true, false, false,
392 handle_used_attribute },
393 { "unused", 0, 0, false, false, false,
394 handle_unused_attribute },
395 /* The same comments as for noreturn attributes apply to const ones. */
396 { "const", 0, 0, true, false, false,
397 handle_const_attribute },
398 { "transparent_union", 0, 0, false, false, false,
399 handle_transparent_union_attribute },
400 { "constructor", 0, 0, true, false, false,
401 handle_constructor_attribute },
402 { "destructor", 0, 0, true, false, false,
403 handle_destructor_attribute },
404 { "mode", 1, 1, false, true, false,
405 handle_mode_attribute },
406 { "section", 1, 1, true, false, false,
407 handle_section_attribute },
408 { "aligned", 0, 1, false, false, false,
409 handle_aligned_attribute },
410 { "weak", 0, 0, true, false, false,
411 handle_weak_attribute },
412 { "alias", 1, 1, true, false, false,
413 handle_alias_attribute },
414 { "no_instrument_function", 0, 0, true, false, false,
415 handle_no_instrument_function_attribute },
416 { "malloc", 0, 0, true, false, false,
417 handle_malloc_attribute },
418 { "no_stack_limit", 0, 0, true, false, false,
419 handle_no_limit_stack_attribute },
420 { "pure", 0, 0, true, false, false,
421 handle_pure_attribute },
422 { "deprecated", 0, 0, false, false, false,
423 handle_deprecated_attribute },
424 { "vector_size", 1, 1, false, true, false,
425 handle_vector_size_attribute },
426 { "visibility", 1, 1, true, false, false,
427 handle_visibility_attribute },
428 { "nonnull", 0, -1, false, true, true,
429 handle_nonnull_attribute },
430 { "nothrow", 0, 0, true, false, false,
431 handle_nothrow_attribute },
432 { NULL, 0, 0, false, false, false, NULL }
435 /* Give the specifications for the format attributes, used by C and all
438 const struct attribute_spec c_common_format_attribute_table[] =
440 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
441 { "format", 3, 3, false, true, true,
442 handle_format_attribute },
443 { "format_arg", 1, 1, false, true, true,
444 handle_format_arg_attribute },
445 { NULL, 0, 0, false, false, false, NULL }
448 /* Record the start of an if-then, and record the start of it
449 for ambiguous else detection.
451 COND is the condition for the if-then statement.
453 IF_STMT is the statement node that has already been created for
454 this if-then statement. It is created before parsing the
455 condition to keep line number information accurate. */
458 c_expand_start_cond (cond, compstmt_count, if_stmt)
463 /* Make sure there is enough space on the stack. */
464 if (if_stack_space == 0)
467 if_stack = (if_elt *) xmalloc (10 * sizeof (if_elt));
469 else if (if_stack_space == if_stack_pointer)
471 if_stack_space += 10;
472 if_stack = (if_elt *) xrealloc (if_stack, if_stack_space * sizeof (if_elt));
475 IF_COND (if_stmt) = cond;
478 /* Record this if statement. */
479 if_stack[if_stack_pointer].compstmt_count = compstmt_count;
480 if_stack[if_stack_pointer].file = input_filename;
481 if_stack[if_stack_pointer].line = lineno;
482 if_stack[if_stack_pointer].needs_warning = 0;
483 if_stack[if_stack_pointer].if_stmt = if_stmt;
487 /* Called after the then-clause for an if-statement is processed. */
492 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
493 RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
496 /* Record the end of an if-then. Optionally warn if a nested
497 if statement had an ambiguous else clause. */
503 if (if_stack[if_stack_pointer].needs_warning)
504 warning_with_file_and_line (if_stack[if_stack_pointer].file,
505 if_stack[if_stack_pointer].line,
506 "suggest explicit braces to avoid ambiguous `else'");
507 last_expr_type = NULL_TREE;
510 /* Called between the then-clause and the else-clause
511 of an if-then-else. */
514 c_expand_start_else ()
516 /* An ambiguous else warning must be generated for the enclosing if
517 statement, unless we see an else branch for that one, too. */
519 && if_stack_pointer > 1
520 && (if_stack[if_stack_pointer - 1].compstmt_count
521 == if_stack[if_stack_pointer - 2].compstmt_count))
522 if_stack[if_stack_pointer - 2].needs_warning = 1;
524 /* Even if a nested if statement had an else branch, it can't be
525 ambiguous if this one also has an else. So don't warn in that
526 case. Also don't warn for any if statements nested in this else. */
527 if_stack[if_stack_pointer - 1].needs_warning = 0;
528 if_stack[if_stack_pointer - 1].compstmt_count--;
531 /* Called after the else-clause for an if-statement is processed. */
536 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
537 RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
540 /* Begin an if-statement. Returns a newly created IF_STMT if
543 Unlike the C++ front-end, we do not call add_stmt here; it is
544 probably safe to do so, but I am not very familiar with this
545 code so I am being extra careful not to change its behavior
546 beyond what is strictly necessary for correctness. */
552 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
556 /* Begin a while statement. Returns a newly created WHILE_STMT if
559 Unlike the C++ front-end, we do not call add_stmt here; it is
560 probably safe to do so, but I am not very familiar with this
561 code so I am being extra careful not to change its behavior
562 beyond what is strictly necessary for correctness. */
565 c_begin_while_stmt ()
568 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
573 c_finish_while_stmt_cond (cond, while_stmt)
577 WHILE_COND (while_stmt) = cond;
580 /* Push current bindings for the function name VAR_DECLS. */
586 tree saved = NULL_TREE;
588 for (ix = 0; fname_vars[ix].decl; ix++)
590 tree decl = *fname_vars[ix].decl;
594 saved = tree_cons (decl, build_int_2 (ix, 0), saved);
595 *fname_vars[ix].decl = NULL_TREE;
598 if (saved || saved_function_name_decls)
599 /* Normally they'll have been NULL, so only push if we've got a
600 stack, or they are non-NULL. */
601 saved_function_name_decls = tree_cons (saved, NULL_TREE,
602 saved_function_name_decls);
605 /* Finish up the current bindings, adding them into the
606 current function's statement tree. This is done by wrapping the
607 function's body in a COMPOUND_STMT containing these decls too. This
608 must be done _before_ finish_stmt_tree is called. If there is no
609 current function, we must be at file scope and no statements are
610 involved. Pop the previous bindings. */
613 finish_fname_decls ()
616 tree body = NULL_TREE;
617 tree stack = saved_function_name_decls;
619 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
620 body = chainon (TREE_VALUE (stack), body);
624 /* They were called into existence, so add to statement tree. */
625 body = chainon (body,
626 TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)));
627 body = build_stmt (COMPOUND_STMT, body);
629 COMPOUND_STMT_NO_SCOPE (body) = 1;
630 TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)) = body;
633 for (ix = 0; fname_vars[ix].decl; ix++)
634 *fname_vars[ix].decl = NULL_TREE;
638 /* We had saved values, restore them. */
641 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
643 tree decl = TREE_PURPOSE (saved);
644 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
646 *fname_vars[ix].decl = decl;
648 stack = TREE_CHAIN (stack);
650 saved_function_name_decls = stack;
653 /* Return the text name of the current function, suitable prettified
657 fname_as_string (pretty_p)
660 const char *name = NULL;
663 name = (current_function_decl
664 ? (*lang_hooks.decl_printable_name) (current_function_decl, 2)
666 else if (current_function_decl && DECL_NAME (current_function_decl))
667 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
673 /* Return the text name of the current function, formatted as
674 required by the supplied RID value. */
682 for (ix = 0; fname_vars[ix].decl; ix++)
683 if (fname_vars[ix].rid == rid)
685 return fname_as_string (fname_vars[ix].pretty);
688 /* Return the VAR_DECL for a const char array naming the current
689 function. If the VAR_DECL has not yet been created, create it
690 now. RID indicates how it should be formatted and IDENTIFIER_NODE
691 ID is its name (unfortunately C and C++ hold the RID values of
692 keywords in different places, so we can't derive RID from ID in
693 this language independent code. */
701 tree decl = NULL_TREE;
703 for (ix = 0; fname_vars[ix].decl; ix++)
704 if (fname_vars[ix].rid == rid)
707 decl = *fname_vars[ix].decl;
710 tree saved_last_tree = last_tree;
712 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
713 if (last_tree != saved_last_tree)
715 /* We created some statement tree for the decl. This belongs
716 at the start of the function, so remove it now and reinsert
717 it after the function is complete. */
718 tree stmts = TREE_CHAIN (saved_last_tree);
720 TREE_CHAIN (saved_last_tree) = NULL_TREE;
721 last_tree = saved_last_tree;
722 saved_function_name_decls = tree_cons (decl, stmts,
723 saved_function_name_decls);
725 *fname_vars[ix].decl = decl;
727 if (!ix && !current_function_decl)
728 pedwarn_with_decl (decl, "`%s' is not defined outside of function scope");
733 /* Given a STRING_CST, give it a suitable array-of-chars data type. */
736 fix_string_type (value)
739 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
740 const int wide_flag = TREE_TYPE (value) == wchar_array_type_node;
741 const int nchars_max = flag_isoc99 ? 4095 : 509;
742 int length = TREE_STRING_LENGTH (value);
745 /* Compute the number of elements, for the array type. */
746 nchars = wide_flag ? length / wchar_bytes : length;
748 if (pedantic && nchars - 1 > nchars_max && c_language == clk_c)
749 pedwarn ("string length `%d' is greater than the length `%d' ISO C%d compilers are required to support",
750 nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
752 /* Create the array type for the string constant.
753 -Wwrite-strings says make the string constant an array of const char
754 so that copying it to a non-const pointer will get a warning.
755 For C++, this is the standard behavior. */
756 if (flag_const_strings && ! flag_writable_strings)
759 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
762 = build_array_type (elements,
763 build_index_type (build_int_2 (nchars - 1, 0)));
767 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
768 build_index_type (build_int_2 (nchars - 1, 0)));
770 TREE_CONSTANT (value) = 1;
771 TREE_READONLY (value) = ! flag_writable_strings;
772 TREE_STATIC (value) = 1;
776 /* Given a VARRAY of STRING_CST nodes, concatenate them into one
780 combine_strings (strings)
783 const int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
784 const int nstrings = VARRAY_ACTIVE_SIZE (strings);
792 /* Don't include the \0 at the end of each substring. Count wide
793 strings and ordinary strings separately. */
794 for (i = 0; i < nstrings; ++i)
796 t = VARRAY_TREE (strings, i);
798 if (TREE_TYPE (t) == wchar_array_type_node)
800 wide_length += TREE_STRING_LENGTH (t) - wchar_bytes;
805 length += (TREE_STRING_LENGTH (t) - 1);
806 if (C_ARTIFICIAL_STRING_P (t) && !in_system_header)
807 warning ("concatenation of string literals with __FUNCTION__ is deprecated");
811 /* If anything is wide, the non-wides will be converted,
812 which makes them take more space. */
814 length = length * wchar_bytes + wide_length;
816 p = xmalloc (length);
818 /* Copy the individual strings into the new combined string.
819 If the combined string is wide, convert the chars to ints
820 for any individual strings that are not wide. */
823 for (i = 0; i < nstrings; ++i)
827 t = VARRAY_TREE (strings, i);
828 this_wide = TREE_TYPE (t) == wchar_array_type_node;
829 len = TREE_STRING_LENGTH (t) - (this_wide ? wchar_bytes : 1);
830 if (this_wide == wide_flag)
832 memcpy (q, TREE_STRING_POINTER (t), len);
837 const int nzeros = (TYPE_PRECISION (wchar_type_node)
838 / BITS_PER_UNIT) - 1;
841 if (BYTES_BIG_ENDIAN)
843 for (k = 0; k < len; k++)
845 for (j = 0; j < nzeros; j++)
847 *q++ = TREE_STRING_POINTER (t)[k];
852 for (k = 0; k < len; k++)
854 *q++ = TREE_STRING_POINTER (t)[k];
855 for (j = 0; j < nzeros; j++)
862 /* Nul terminate the string. */
865 for (i = 0; i < wchar_bytes; i++)
871 value = build_string (length, p);
875 TREE_TYPE (value) = wchar_array_type_node;
877 TREE_TYPE (value) = char_array_type_node;
882 static int is_valid_printf_arglist PARAMS ((tree));
883 static rtx c_expand_builtin PARAMS ((tree, rtx, enum machine_mode, enum expand_modifier));
884 static rtx c_expand_builtin_printf PARAMS ((tree, rtx, enum machine_mode,
885 enum expand_modifier, int, int));
886 static rtx c_expand_builtin_fprintf PARAMS ((tree, rtx, enum machine_mode,
887 enum expand_modifier, int, int));
889 /* Print a warning if a constant expression had overflow in folding.
890 Invoke this function on every expression that the language
891 requires to be a constant expression.
892 Note the ANSI C standard says it is erroneous for a
893 constant expression to overflow. */
896 constant_expression_warning (value)
899 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
900 || TREE_CODE (value) == VECTOR_CST
901 || TREE_CODE (value) == COMPLEX_CST)
902 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
903 pedwarn ("overflow in constant expression");
906 /* Print a warning if an expression had overflow in folding.
907 Invoke this function on every expression that
908 (1) appears in the source code, and
909 (2) might be a constant expression that overflowed, and
910 (3) is not already checked by convert_and_check;
911 however, do not invoke this function on operands of explicit casts. */
914 overflow_warning (value)
917 if ((TREE_CODE (value) == INTEGER_CST
918 || (TREE_CODE (value) == COMPLEX_CST
919 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
920 && TREE_OVERFLOW (value))
922 TREE_OVERFLOW (value) = 0;
923 if (skip_evaluation == 0)
924 warning ("integer overflow in expression");
926 else if ((TREE_CODE (value) == REAL_CST
927 || (TREE_CODE (value) == COMPLEX_CST
928 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
929 && TREE_OVERFLOW (value))
931 TREE_OVERFLOW (value) = 0;
932 if (skip_evaluation == 0)
933 warning ("floating point overflow in expression");
935 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
937 TREE_OVERFLOW (value) = 0;
938 if (skip_evaluation == 0)
939 warning ("vector overflow in expression");
943 /* Print a warning if a large constant is truncated to unsigned,
944 or if -Wconversion is used and a constant < 0 is converted to unsigned.
945 Invoke this function on every expression that might be implicitly
946 converted to an unsigned type. */
949 unsigned_conversion_warning (result, operand)
950 tree result, operand;
952 tree type = TREE_TYPE (result);
954 if (TREE_CODE (operand) == INTEGER_CST
955 && TREE_CODE (type) == INTEGER_TYPE
956 && TREE_UNSIGNED (type)
957 && skip_evaluation == 0
958 && !int_fits_type_p (operand, type))
960 if (!int_fits_type_p (operand, c_common_signed_type (type)))
961 /* This detects cases like converting -129 or 256 to unsigned char. */
962 warning ("large integer implicitly truncated to unsigned type");
963 else if (warn_conversion)
964 warning ("negative integer implicitly converted to unsigned type");
968 /* Nonzero if constant C has a value that is permissible
969 for type TYPE (an INTEGER_TYPE). */
972 constant_fits_type_p (c, type)
975 if (TREE_CODE (c) == INTEGER_CST)
976 return int_fits_type_p (c, type);
978 c = convert (type, c);
979 return !TREE_OVERFLOW (c);
982 /* Convert EXPR to TYPE, warning about conversion problems with constants.
983 Invoke this function on every expression that is converted implicitly,
984 i.e. because of language rules and not because of an explicit cast. */
987 convert_and_check (type, expr)
990 tree t = convert (type, expr);
991 if (TREE_CODE (t) == INTEGER_CST)
993 if (TREE_OVERFLOW (t))
995 TREE_OVERFLOW (t) = 0;
997 /* Do not diagnose overflow in a constant expression merely
998 because a conversion overflowed. */
999 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
1001 /* No warning for converting 0x80000000 to int. */
1002 if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
1003 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
1004 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
1005 /* If EXPR fits in the unsigned version of TYPE,
1006 don't warn unless pedantic. */
1008 || TREE_UNSIGNED (type)
1009 || ! constant_fits_type_p (expr,
1010 c_common_unsigned_type (type)))
1011 && skip_evaluation == 0)
1012 warning ("overflow in implicit constant conversion");
1015 unsigned_conversion_warning (t, expr);
1020 /* A node in a list that describes references to variables (EXPR), which are
1021 either read accesses if WRITER is zero, or write accesses, in which case
1022 WRITER is the parent of EXPR. */
1029 /* Used to implement a cache the results of a call to verify_tree. We only
1030 use this for SAVE_EXPRs. */
1033 struct tlist_cache *next;
1034 struct tlist *cache_before_sp;
1035 struct tlist *cache_after_sp;
1039 /* Obstack to use when allocating tlist structures, and corresponding
1041 static struct obstack tlist_obstack;
1042 static char *tlist_firstobj = 0;
1044 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
1046 static struct tlist *warned_ids;
1047 /* SAVE_EXPRs need special treatment. We process them only once and then
1048 cache the results. */
1049 static struct tlist_cache *save_expr_cache;
1051 static void add_tlist PARAMS ((struct tlist **, struct tlist *, tree, int));
1052 static void merge_tlist PARAMS ((struct tlist **, struct tlist *, int));
1053 static void verify_tree PARAMS ((tree, struct tlist **, struct tlist **, tree));
1054 static int warning_candidate_p PARAMS ((tree));
1055 static void warn_for_collisions PARAMS ((struct tlist *));
1056 static void warn_for_collisions_1 PARAMS ((tree, tree, struct tlist *, int));
1057 static struct tlist *new_tlist PARAMS ((struct tlist *, tree, tree));
1058 static void verify_sequence_points PARAMS ((tree));
1060 /* Create a new struct tlist and fill in its fields. */
1061 static struct tlist *
1062 new_tlist (next, t, writer)
1068 l = (struct tlist *) obstack_alloc (&tlist_obstack, sizeof *l);
1075 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
1076 is nonnull, we ignore any node we find which has a writer equal to it. */
1079 add_tlist (to, add, exclude_writer, copy)
1082 tree exclude_writer;
1087 struct tlist *next = add->next;
1090 if (! exclude_writer || add->writer != exclude_writer)
1091 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
1096 /* Merge the nodes of ADD into TO. This merging process is done so that for
1097 each variable that already exists in TO, no new node is added; however if
1098 there is a write access recorded in ADD, and an occurrence on TO is only
1099 a read access, then the occurrence in TO will be modified to record the
1103 merge_tlist (to, add, copy)
1108 struct tlist **end = to;
1111 end = &(*end)->next;
1117 struct tlist *next = add->next;
1119 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
1120 if (tmp2->expr == add->expr)
1124 tmp2->writer = add->writer;
1128 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
1129 end = &(*end)->next;
1136 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
1137 references in list LIST conflict with it, excluding reads if ONLY writers
1141 warn_for_collisions_1 (written, writer, list, only_writes)
1142 tree written, writer;
1148 /* Avoid duplicate warnings. */
1149 for (tmp = warned_ids; tmp; tmp = tmp->next)
1150 if (tmp->expr == written)
1155 if (list->expr == written
1156 && list->writer != writer
1157 && (! only_writes || list->writer))
1159 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
1160 warning ("operation on `%s' may be undefined",
1161 IDENTIFIER_POINTER (DECL_NAME (list->expr)));
1167 /* Given a list LIST of references to variables, find whether any of these
1168 can cause conflicts due to missing sequence points. */
1171 warn_for_collisions (list)
1176 for (tmp = list; tmp; tmp = tmp->next)
1179 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
1183 /* Return nonzero if X is a tree that can be verified by the sequence point
1186 warning_candidate_p (x)
1189 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
1192 /* Walk the tree X, and record accesses to variables. If X is written by the
1193 parent tree, WRITER is the parent.
1194 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
1195 expression or its only operand forces a sequence point, then everything up
1196 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
1198 Once we return, we will have emitted warnings if any subexpression before
1199 such a sequence point could be undefined. On a higher level, however, the
1200 sequence point may not be relevant, and we'll merge the two lists.
1202 Example: (b++, a) + b;
1203 The call that processes the COMPOUND_EXPR will store the increment of B
1204 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1205 processes the PLUS_EXPR will need to merge the two lists so that
1206 eventually, all accesses end up on the same list (and we'll warn about the
1207 unordered subexpressions b++ and b.
1209 A note on merging. If we modify the former example so that our expression
1212 care must be taken not simply to add all three expressions into the final
1213 PNO_SP list. The function merge_tlist takes care of that by merging the
1214 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1215 way, so that no more than one access to B is recorded. */
1218 verify_tree (x, pbefore_sp, pno_sp, writer)
1220 struct tlist **pbefore_sp, **pno_sp;
1223 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1224 enum tree_code code;
1227 /* X may be NULL if it is the operand of an empty statement expression
1233 code = TREE_CODE (x);
1234 class = TREE_CODE_CLASS (code);
1236 if (warning_candidate_p (x))
1238 *pno_sp = new_tlist (*pno_sp, x, writer);
1248 case TRUTH_ANDIF_EXPR:
1249 case TRUTH_ORIF_EXPR:
1250 tmp_before = tmp_nosp = tmp_list3 = 0;
1251 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1252 warn_for_collisions (tmp_nosp);
1253 merge_tlist (pbefore_sp, tmp_before, 0);
1254 merge_tlist (pbefore_sp, tmp_nosp, 0);
1255 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1256 merge_tlist (pbefore_sp, tmp_list3, 0);
1260 tmp_before = tmp_list2 = 0;
1261 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1262 warn_for_collisions (tmp_list2);
1263 merge_tlist (pbefore_sp, tmp_before, 0);
1264 merge_tlist (pbefore_sp, tmp_list2, 1);
1266 tmp_list3 = tmp_nosp = 0;
1267 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1268 warn_for_collisions (tmp_nosp);
1269 merge_tlist (pbefore_sp, tmp_list3, 0);
1271 tmp_list3 = tmp_list2 = 0;
1272 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1273 warn_for_collisions (tmp_list2);
1274 merge_tlist (pbefore_sp, tmp_list3, 0);
1275 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1276 two first, to avoid warning for (a ? b++ : b++). */
1277 merge_tlist (&tmp_nosp, tmp_list2, 0);
1278 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1281 case PREDECREMENT_EXPR:
1282 case PREINCREMENT_EXPR:
1283 case POSTDECREMENT_EXPR:
1284 case POSTINCREMENT_EXPR:
1285 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1289 tmp_before = tmp_nosp = tmp_list3 = 0;
1290 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1291 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1292 /* Expressions inside the LHS are not ordered wrt. the sequence points
1293 in the RHS. Example:
1295 Despite the fact that the modification of "a" is in the before_sp
1296 list (tmp_before), it conflicts with the use of "a" in the LHS.
1297 We can handle this by adding the contents of tmp_list3
1298 to those of tmp_before, and redoing the collision warnings for that
1300 add_tlist (&tmp_before, tmp_list3, x, 1);
1301 warn_for_collisions (tmp_before);
1302 /* Exclude the LHS itself here; we first have to merge it into the
1303 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1304 didn't exclude the LHS, we'd get it twice, once as a read and once
1306 add_tlist (pno_sp, tmp_list3, x, 0);
1307 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1309 merge_tlist (pbefore_sp, tmp_before, 0);
1310 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1311 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1312 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1316 /* We need to warn about conflicts among arguments and conflicts between
1317 args and the function address. Side effects of the function address,
1318 however, are not ordered by the sequence point of the call. */
1319 tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1320 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1321 if (TREE_OPERAND (x, 1))
1322 verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1323 merge_tlist (&tmp_list3, tmp_list2, 0);
1324 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1325 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1326 warn_for_collisions (tmp_before);
1327 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1331 /* Scan all the list, e.g. indices of multi dimensional array. */
1334 tmp_before = tmp_nosp = 0;
1335 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1336 merge_tlist (&tmp_nosp, tmp_before, 0);
1337 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1344 struct tlist_cache *t;
1345 for (t = save_expr_cache; t; t = t->next)
1351 t = (struct tlist_cache *) obstack_alloc (&tlist_obstack,
1353 t->next = save_expr_cache;
1355 save_expr_cache = t;
1357 tmp_before = tmp_nosp = 0;
1358 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1359 warn_for_collisions (tmp_nosp);
1364 struct tlist *t = tmp_nosp;
1366 merge_tlist (&tmp_list3, t, 0);
1368 t->cache_before_sp = tmp_before;
1369 t->cache_after_sp = tmp_list3;
1371 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1372 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1381 if (first_rtl_op (code) == 0)
1383 x = TREE_OPERAND (x, 0);
1399 int max = first_rtl_op (TREE_CODE (x));
1400 for (lp = 0; lp < max; lp++)
1402 tmp_before = tmp_nosp = 0;
1403 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, NULL_TREE);
1404 merge_tlist (&tmp_nosp, tmp_before, 0);
1405 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1412 /* Try to warn for undefined behaviour in EXPR due to missing sequence
1416 verify_sequence_points (expr)
1419 struct tlist *before_sp = 0, *after_sp = 0;
1422 save_expr_cache = 0;
1423 if (tlist_firstobj == 0)
1425 gcc_obstack_init (&tlist_obstack);
1426 tlist_firstobj = obstack_alloc (&tlist_obstack, 0);
1429 verify_tree (expr, &before_sp, &after_sp, 0);
1430 warn_for_collisions (after_sp);
1431 obstack_free (&tlist_obstack, tlist_firstobj);
1435 c_expand_expr_stmt (expr)
1438 /* Do default conversion if safe and possibly important,
1439 in case within ({...}). */
1440 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
1441 && (flag_isoc99 || lvalue_p (expr)))
1442 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
1443 expr = default_conversion (expr);
1445 if (warn_sequence_point)
1446 verify_sequence_points (expr);
1448 if (TREE_TYPE (expr) != error_mark_node
1449 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
1450 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
1451 error ("expression statement has incomplete type");
1453 last_expr_type = TREE_TYPE (expr);
1454 return add_stmt (build_stmt (EXPR_STMT, expr));
1457 /* Validate the expression after `case' and apply default promotions. */
1460 check_case_value (value)
1463 if (value == NULL_TREE)
1466 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1467 STRIP_TYPE_NOPS (value);
1468 /* In C++, the following is allowed:
1471 switch (...) { case i: ... }
1473 So, we try to reduce the VALUE to a constant that way. */
1474 if (c_language == clk_cplusplus)
1476 value = decl_constant_value (value);
1477 STRIP_TYPE_NOPS (value);
1478 value = fold (value);
1481 if (TREE_CODE (value) != INTEGER_CST
1482 && value != error_mark_node)
1484 error ("case label does not reduce to an integer constant");
1485 value = error_mark_node;
1488 /* Promote char or short to int. */
1489 value = default_conversion (value);
1491 constant_expression_warning (value);
1496 /* Return an integer type with BITS bits of precision,
1497 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1500 c_common_type_for_size (bits, unsignedp)
1504 if (bits == TYPE_PRECISION (integer_type_node))
1505 return unsignedp ? unsigned_type_node : integer_type_node;
1507 if (bits == TYPE_PRECISION (signed_char_type_node))
1508 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1510 if (bits == TYPE_PRECISION (short_integer_type_node))
1511 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1513 if (bits == TYPE_PRECISION (long_integer_type_node))
1514 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1516 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1517 return (unsignedp ? long_long_unsigned_type_node
1518 : long_long_integer_type_node);
1520 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1521 return (unsignedp ? widest_unsigned_literal_type_node
1522 : widest_integer_literal_type_node);
1524 if (bits <= TYPE_PRECISION (intQI_type_node))
1525 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1527 if (bits <= TYPE_PRECISION (intHI_type_node))
1528 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1530 if (bits <= TYPE_PRECISION (intSI_type_node))
1531 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1533 if (bits <= TYPE_PRECISION (intDI_type_node))
1534 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1539 /* Return a data type that has machine mode MODE.
1540 If the mode is an integer,
1541 then UNSIGNEDP selects between signed and unsigned types. */
1544 c_common_type_for_mode (mode, unsignedp)
1545 enum machine_mode mode;
1548 if (mode == TYPE_MODE (integer_type_node))
1549 return unsignedp ? unsigned_type_node : integer_type_node;
1551 if (mode == TYPE_MODE (signed_char_type_node))
1552 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1554 if (mode == TYPE_MODE (short_integer_type_node))
1555 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1557 if (mode == TYPE_MODE (long_integer_type_node))
1558 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1560 if (mode == TYPE_MODE (long_long_integer_type_node))
1561 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1563 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1564 return unsignedp ? widest_unsigned_literal_type_node
1565 : widest_integer_literal_type_node;
1568 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1571 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1574 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1577 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1579 #if HOST_BITS_PER_WIDE_INT >= 64
1580 if (mode == TYPE_MODE (intTI_type_node))
1581 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1584 if (mode == TYPE_MODE (float_type_node))
1585 return float_type_node;
1587 if (mode == TYPE_MODE (double_type_node))
1588 return double_type_node;
1590 if (mode == TYPE_MODE (long_double_type_node))
1591 return long_double_type_node;
1593 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1594 return build_pointer_type (char_type_node);
1596 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1597 return build_pointer_type (integer_type_node);
1599 #ifdef VECTOR_MODE_SUPPORTED_P
1600 if (VECTOR_MODE_SUPPORTED_P (mode))
1605 return unsignedp ? unsigned_V16QI_type_node : V16QI_type_node;
1607 return unsignedp ? unsigned_V8HI_type_node : V8HI_type_node;
1609 return unsignedp ? unsigned_V4SI_type_node : V4SI_type_node;
1611 return unsignedp ? unsigned_V2DI_type_node : V2DI_type_node;
1613 return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node;
1615 return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node;
1617 return unsignedp ? unsigned_V8QI_type_node : V8QI_type_node;
1619 return V16SF_type_node;
1621 return V4SF_type_node;
1623 return V2SF_type_node;
1625 return V2DF_type_node;
1635 /* Return an unsigned type the same as TYPE in other respects. */
1637 c_common_unsigned_type (type)
1640 tree type1 = TYPE_MAIN_VARIANT (type);
1641 if (type1 == signed_char_type_node || type1 == char_type_node)
1642 return unsigned_char_type_node;
1643 if (type1 == integer_type_node)
1644 return unsigned_type_node;
1645 if (type1 == short_integer_type_node)
1646 return short_unsigned_type_node;
1647 if (type1 == long_integer_type_node)
1648 return long_unsigned_type_node;
1649 if (type1 == long_long_integer_type_node)
1650 return long_long_unsigned_type_node;
1651 if (type1 == widest_integer_literal_type_node)
1652 return widest_unsigned_literal_type_node;
1653 #if HOST_BITS_PER_WIDE_INT >= 64
1654 if (type1 == intTI_type_node)
1655 return unsigned_intTI_type_node;
1657 if (type1 == intDI_type_node)
1658 return unsigned_intDI_type_node;
1659 if (type1 == intSI_type_node)
1660 return unsigned_intSI_type_node;
1661 if (type1 == intHI_type_node)
1662 return unsigned_intHI_type_node;
1663 if (type1 == intQI_type_node)
1664 return unsigned_intQI_type_node;
1666 return c_common_signed_or_unsigned_type (1, type);
1669 /* Return a signed type the same as TYPE in other respects. */
1672 c_common_signed_type (type)
1675 tree type1 = TYPE_MAIN_VARIANT (type);
1676 if (type1 == unsigned_char_type_node || type1 == char_type_node)
1677 return signed_char_type_node;
1678 if (type1 == unsigned_type_node)
1679 return integer_type_node;
1680 if (type1 == short_unsigned_type_node)
1681 return short_integer_type_node;
1682 if (type1 == long_unsigned_type_node)
1683 return long_integer_type_node;
1684 if (type1 == long_long_unsigned_type_node)
1685 return long_long_integer_type_node;
1686 if (type1 == widest_unsigned_literal_type_node)
1687 return widest_integer_literal_type_node;
1688 #if HOST_BITS_PER_WIDE_INT >= 64
1689 if (type1 == unsigned_intTI_type_node)
1690 return intTI_type_node;
1692 if (type1 == unsigned_intDI_type_node)
1693 return intDI_type_node;
1694 if (type1 == unsigned_intSI_type_node)
1695 return intSI_type_node;
1696 if (type1 == unsigned_intHI_type_node)
1697 return intHI_type_node;
1698 if (type1 == unsigned_intQI_type_node)
1699 return intQI_type_node;
1701 return c_common_signed_or_unsigned_type (0, type);
1704 /* Return a type the same as TYPE except unsigned or
1705 signed according to UNSIGNEDP. */
1708 c_common_signed_or_unsigned_type (unsignedp, type)
1712 if (! INTEGRAL_TYPE_P (type)
1713 || TREE_UNSIGNED (type) == unsignedp)
1716 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
1717 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1718 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1719 return unsignedp ? unsigned_type_node : integer_type_node;
1720 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
1721 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1722 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
1723 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1724 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
1725 return (unsignedp ? long_long_unsigned_type_node
1726 : long_long_integer_type_node);
1727 if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node))
1728 return (unsignedp ? widest_unsigned_literal_type_node
1729 : widest_integer_literal_type_node);
1731 #if HOST_BITS_PER_WIDE_INT >= 64
1732 if (TYPE_PRECISION (type) == TYPE_PRECISION (intTI_type_node))
1733 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1735 if (TYPE_PRECISION (type) == TYPE_PRECISION (intDI_type_node))
1736 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1737 if (TYPE_PRECISION (type) == TYPE_PRECISION (intSI_type_node))
1738 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1739 if (TYPE_PRECISION (type) == TYPE_PRECISION (intHI_type_node))
1740 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1741 if (TYPE_PRECISION (type) == TYPE_PRECISION (intQI_type_node))
1742 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1747 /* Return the minimum number of bits needed to represent VALUE in a
1748 signed or unsigned type, UNSIGNEDP says which. */
1751 min_precision (value, unsignedp)
1757 /* If the value is negative, compute its negative minus 1. The latter
1758 adjustment is because the absolute value of the largest negative value
1759 is one larger than the largest positive value. This is equivalent to
1760 a bit-wise negation, so use that operation instead. */
1762 if (tree_int_cst_sgn (value) < 0)
1763 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
1765 /* Return the number of bits needed, taking into account the fact
1766 that we need one more bit for a signed than unsigned type. */
1768 if (integer_zerop (value))
1771 log = tree_floor_log2 (value);
1773 return log + 1 + ! unsignedp;
1776 /* Print an error message for invalid operands to arith operation
1777 CODE. NOP_EXPR is used as a special case (see
1778 c_common_truthvalue_conversion). */
1781 binary_op_error (code)
1782 enum tree_code code;
1789 error ("invalid truth-value expression");
1793 opname = "+"; break;
1795 opname = "-"; break;
1797 opname = "*"; break;
1799 opname = "max"; break;
1801 opname = "min"; break;
1803 opname = "=="; break;
1805 opname = "!="; break;
1807 opname = "<="; break;
1809 opname = ">="; break;
1811 opname = "<"; break;
1813 opname = ">"; break;
1815 opname = "<<"; break;
1817 opname = ">>"; break;
1818 case TRUNC_MOD_EXPR:
1819 case FLOOR_MOD_EXPR:
1820 opname = "%"; break;
1821 case TRUNC_DIV_EXPR:
1822 case FLOOR_DIV_EXPR:
1823 opname = "/"; break;
1825 opname = "&"; break;
1827 opname = "|"; break;
1828 case TRUTH_ANDIF_EXPR:
1829 opname = "&&"; break;
1830 case TRUTH_ORIF_EXPR:
1831 opname = "||"; break;
1833 opname = "^"; break;
1836 opname = "rotate"; break;
1838 opname = "unknown"; break;
1840 error ("invalid operands to binary %s", opname);
1843 /* Subroutine of build_binary_op, used for comparison operations.
1844 See if the operands have both been converted from subword integer types
1845 and, if so, perhaps change them both back to their original type.
1846 This function is also responsible for converting the two operands
1847 to the proper common type for comparison.
1849 The arguments of this function are all pointers to local variables
1850 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1851 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1853 If this function returns nonzero, it means that the comparison has
1854 a constant value. What this function returns is an expression for
1858 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
1859 tree *op0_ptr, *op1_ptr;
1861 enum tree_code *rescode_ptr;
1864 tree op0 = *op0_ptr;
1865 tree op1 = *op1_ptr;
1866 int unsignedp0, unsignedp1;
1868 tree primop0, primop1;
1869 enum tree_code code = *rescode_ptr;
1871 /* Throw away any conversions to wider types
1872 already present in the operands. */
1874 primop0 = get_narrower (op0, &unsignedp0);
1875 primop1 = get_narrower (op1, &unsignedp1);
1877 /* Handle the case that OP0 does not *contain* a conversion
1878 but it *requires* conversion to FINAL_TYPE. */
1880 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
1881 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
1882 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
1883 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
1885 /* If one of the operands must be floated, we cannot optimize. */
1886 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
1887 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
1889 /* If first arg is constant, swap the args (changing operation
1890 so value is preserved), for canonicalization. Don't do this if
1891 the second arg is 0. */
1893 if (TREE_CONSTANT (primop0)
1894 && ! integer_zerop (primop1) && ! real_zerop (primop1))
1897 int temi = unsignedp0;
1905 unsignedp0 = unsignedp1;
1928 *rescode_ptr = code;
1931 /* If comparing an integer against a constant more bits wide,
1932 maybe we can deduce a value of 1 or 0 independent of the data.
1933 Or else truncate the constant now
1934 rather than extend the variable at run time.
1936 This is only interesting if the constant is the wider arg.
1937 Also, it is not safe if the constant is unsigned and the
1938 variable arg is signed, since in this case the variable
1939 would be sign-extended and then regarded as unsigned.
1940 Our technique fails in this case because the lowest/highest
1941 possible unsigned results don't follow naturally from the
1942 lowest/highest possible values of the variable operand.
1943 For just EQ_EXPR and NE_EXPR there is another technique that
1944 could be used: see if the constant can be faithfully represented
1945 in the other operand's type, by truncating it and reextending it
1946 and see if that preserves the constant's value. */
1948 if (!real1 && !real2
1949 && TREE_CODE (primop1) == INTEGER_CST
1950 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
1952 int min_gt, max_gt, min_lt, max_lt;
1953 tree maxval, minval;
1954 /* 1 if comparison is nominally unsigned. */
1955 int unsignedp = TREE_UNSIGNED (*restype_ptr);
1958 type = c_common_signed_or_unsigned_type (unsignedp0,
1959 TREE_TYPE (primop0));
1961 /* If TYPE is an enumeration, then we need to get its min/max
1962 values from it's underlying integral type, not the enumerated
1964 if (TREE_CODE (type) == ENUMERAL_TYPE)
1965 type = c_common_type_for_size (TYPE_PRECISION (type), unsignedp0);
1967 maxval = TYPE_MAX_VALUE (type);
1968 minval = TYPE_MIN_VALUE (type);
1970 if (unsignedp && !unsignedp0)
1971 *restype_ptr = c_common_signed_type (*restype_ptr);
1973 if (TREE_TYPE (primop1) != *restype_ptr)
1974 primop1 = convert (*restype_ptr, primop1);
1975 if (type != *restype_ptr)
1977 minval = convert (*restype_ptr, minval);
1978 maxval = convert (*restype_ptr, maxval);
1981 if (unsignedp && unsignedp0)
1983 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
1984 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
1985 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
1986 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
1990 min_gt = INT_CST_LT (primop1, minval);
1991 max_gt = INT_CST_LT (primop1, maxval);
1992 min_lt = INT_CST_LT (minval, primop1);
1993 max_lt = INT_CST_LT (maxval, primop1);
1997 /* This used to be a switch, but Genix compiler can't handle that. */
1998 if (code == NE_EXPR)
2000 if (max_lt || min_gt)
2001 val = boolean_true_node;
2003 else if (code == EQ_EXPR)
2005 if (max_lt || min_gt)
2006 val = boolean_false_node;
2008 else if (code == LT_EXPR)
2011 val = boolean_true_node;
2013 val = boolean_false_node;
2015 else if (code == GT_EXPR)
2018 val = boolean_true_node;
2020 val = boolean_false_node;
2022 else if (code == LE_EXPR)
2025 val = boolean_true_node;
2027 val = boolean_false_node;
2029 else if (code == GE_EXPR)
2032 val = boolean_true_node;
2034 val = boolean_false_node;
2037 /* If primop0 was sign-extended and unsigned comparison specd,
2038 we did a signed comparison above using the signed type bounds.
2039 But the comparison we output must be unsigned.
2041 Also, for inequalities, VAL is no good; but if the signed
2042 comparison had *any* fixed result, it follows that the
2043 unsigned comparison just tests the sign in reverse
2044 (positive values are LE, negative ones GE).
2045 So we can generate an unsigned comparison
2046 against an extreme value of the signed type. */
2048 if (unsignedp && !unsignedp0)
2055 primop1 = TYPE_MIN_VALUE (type);
2061 primop1 = TYPE_MAX_VALUE (type);
2068 type = c_common_unsigned_type (type);
2071 if (TREE_CODE (primop0) != INTEGER_CST)
2073 if (val == boolean_false_node)
2074 warning ("comparison is always false due to limited range of data type");
2075 if (val == boolean_true_node)
2076 warning ("comparison is always true due to limited range of data type");
2081 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2082 if (TREE_SIDE_EFFECTS (primop0))
2083 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
2087 /* Value is not predetermined, but do the comparison
2088 in the type of the operand that is not constant.
2089 TYPE is already properly set. */
2091 else if (real1 && real2
2092 && (TYPE_PRECISION (TREE_TYPE (primop0))
2093 == TYPE_PRECISION (TREE_TYPE (primop1))))
2094 type = TREE_TYPE (primop0);
2096 /* If args' natural types are both narrower than nominal type
2097 and both extend in the same manner, compare them
2098 in the type of the wider arg.
2099 Otherwise must actually extend both to the nominal
2100 common type lest different ways of extending
2102 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
2104 else if (unsignedp0 == unsignedp1 && real1 == real2
2105 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
2106 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
2108 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
2109 type = c_common_signed_or_unsigned_type (unsignedp0
2110 || TREE_UNSIGNED (*restype_ptr),
2112 /* Make sure shorter operand is extended the right way
2113 to match the longer operand. */
2115 = convert (c_common_signed_or_unsigned_type (unsignedp0,
2116 TREE_TYPE (primop0)),
2119 = convert (c_common_signed_or_unsigned_type (unsignedp1,
2120 TREE_TYPE (primop1)),
2125 /* Here we must do the comparison on the nominal type
2126 using the args exactly as we received them. */
2127 type = *restype_ptr;
2131 if (!real1 && !real2 && integer_zerop (primop1)
2132 && TREE_UNSIGNED (*restype_ptr))
2138 /* All unsigned values are >= 0, so we warn if extra warnings
2139 are requested. However, if OP0 is a constant that is
2140 >= 0, the signedness of the comparison isn't an issue,
2141 so suppress the warning. */
2142 if (extra_warnings && !in_system_header
2143 && ! (TREE_CODE (primop0) == INTEGER_CST
2144 && ! TREE_OVERFLOW (convert (c_common_signed_type (type),
2146 warning ("comparison of unsigned expression >= 0 is always true");
2147 value = boolean_true_node;
2151 if (extra_warnings && !in_system_header
2152 && ! (TREE_CODE (primop0) == INTEGER_CST
2153 && ! TREE_OVERFLOW (convert (c_common_signed_type (type),
2155 warning ("comparison of unsigned expression < 0 is always false");
2156 value = boolean_false_node;
2165 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
2166 if (TREE_SIDE_EFFECTS (primop0))
2167 return build (COMPOUND_EXPR, TREE_TYPE (value),
2174 *op0_ptr = convert (type, primop0);
2175 *op1_ptr = convert (type, primop1);
2177 *restype_ptr = boolean_type_node;
2182 /* Return a tree for the sum or difference (RESULTCODE says which)
2183 of pointer PTROP and integer INTOP. */
2186 pointer_int_sum (resultcode, ptrop, intop)
2187 enum tree_code resultcode;
2195 /* The result is a pointer of the same type that is being added. */
2197 tree result_type = TREE_TYPE (ptrop);
2199 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2201 if (pedantic || warn_pointer_arith)
2202 pedwarn ("pointer of type `void *' used in arithmetic");
2203 size_exp = integer_one_node;
2205 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2207 if (pedantic || warn_pointer_arith)
2208 pedwarn ("pointer to a function used in arithmetic");
2209 size_exp = integer_one_node;
2211 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2213 if (pedantic || warn_pointer_arith)
2214 pedwarn ("pointer to member function used in arithmetic");
2215 size_exp = integer_one_node;
2217 else if (TREE_CODE (TREE_TYPE (result_type)) == OFFSET_TYPE)
2219 if (pedantic || warn_pointer_arith)
2220 pedwarn ("pointer to a member used in arithmetic");
2221 size_exp = integer_one_node;
2224 size_exp = size_in_bytes (TREE_TYPE (result_type));
2226 /* If what we are about to multiply by the size of the elements
2227 contains a constant term, apply distributive law
2228 and multiply that constant term separately.
2229 This helps produce common subexpressions. */
2231 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2232 && ! TREE_CONSTANT (intop)
2233 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2234 && TREE_CONSTANT (size_exp)
2235 /* If the constant comes from pointer subtraction,
2236 skip this optimization--it would cause an error. */
2237 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2238 /* If the constant is unsigned, and smaller than the pointer size,
2239 then we must skip this optimization. This is because it could cause
2240 an overflow error if the constant is negative but INTOP is not. */
2241 && (! TREE_UNSIGNED (TREE_TYPE (intop))
2242 || (TYPE_PRECISION (TREE_TYPE (intop))
2243 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2245 enum tree_code subcode = resultcode;
2246 tree int_type = TREE_TYPE (intop);
2247 if (TREE_CODE (intop) == MINUS_EXPR)
2248 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2249 /* Convert both subexpression types to the type of intop,
2250 because weird cases involving pointer arithmetic
2251 can result in a sum or difference with different type args. */
2252 ptrop = build_binary_op (subcode, ptrop,
2253 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2254 intop = convert (int_type, TREE_OPERAND (intop, 0));
2257 /* Convert the integer argument to a type the same size as sizetype
2258 so the multiply won't overflow spuriously. */
2260 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2261 || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
2262 intop = convert (c_common_type_for_size (TYPE_PRECISION (sizetype),
2263 TREE_UNSIGNED (sizetype)), intop);
2265 /* Replace the integer argument with a suitable product by the object size.
2266 Do this multiplication as signed, then convert to the appropriate
2267 pointer type (actually unsigned integral). */
2269 intop = convert (result_type,
2270 build_binary_op (MULT_EXPR, intop,
2271 convert (TREE_TYPE (intop), size_exp), 1));
2273 /* Create the sum or difference. */
2275 result = build (resultcode, result_type, ptrop, intop);
2277 folded = fold (result);
2278 if (folded == result)
2279 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2283 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2284 or validate its data type for an `if' or `while' statement or ?..: exp.
2286 This preparation consists of taking the ordinary
2287 representation of an expression expr and producing a valid tree
2288 boolean expression describing whether expr is nonzero. We could
2289 simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
2290 but we optimize comparisons, &&, ||, and !.
2292 The resulting type should always be `boolean_type_node'. */
2295 c_common_truthvalue_conversion (expr)
2298 if (TREE_CODE (expr) == ERROR_MARK)
2301 #if 0 /* This appears to be wrong for C++. */
2302 /* These really should return error_mark_node after 2.4 is stable.
2303 But not all callers handle ERROR_MARK properly. */
2304 switch (TREE_CODE (TREE_TYPE (expr)))
2307 error ("struct type value used where scalar is required");
2308 return boolean_false_node;
2311 error ("union type value used where scalar is required");
2312 return boolean_false_node;
2315 error ("array type value used where scalar is required");
2316 return boolean_false_node;
2323 switch (TREE_CODE (expr))
2326 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2327 case TRUTH_ANDIF_EXPR:
2328 case TRUTH_ORIF_EXPR:
2329 case TRUTH_AND_EXPR:
2331 case TRUTH_XOR_EXPR:
2332 case TRUTH_NOT_EXPR:
2333 TREE_TYPE (expr) = boolean_type_node;
2340 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
2343 return real_zerop (expr) ? boolean_false_node : boolean_true_node;
2346 /* If we are taking the address of an external decl, it might be zero
2347 if it is weak, so we cannot optimize. */
2348 if (DECL_P (TREE_OPERAND (expr, 0))
2349 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2352 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2353 return build (COMPOUND_EXPR, boolean_type_node,
2354 TREE_OPERAND (expr, 0), boolean_true_node);
2356 return boolean_true_node;
2359 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2360 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2361 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)),
2362 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2369 /* These don't change whether an object is non-zero or zero. */
2370 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2374 /* These don't change whether an object is zero or non-zero, but
2375 we can't ignore them if their second arg has side-effects. */
2376 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2377 return build (COMPOUND_EXPR, boolean_type_node, TREE_OPERAND (expr, 1),
2378 c_common_truthvalue_conversion (TREE_OPERAND (expr, 0)));
2380 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2383 /* Distribute the conversion into the arms of a COND_EXPR. */
2384 return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
2385 c_common_truthvalue_conversion (TREE_OPERAND (expr, 1)),
2386 c_common_truthvalue_conversion (TREE_OPERAND (expr, 2))));
2389 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2390 since that affects how `default_conversion' will behave. */
2391 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2392 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2394 /* fall through... */
2396 /* If this is widening the argument, we can ignore it. */
2397 if (TYPE_PRECISION (TREE_TYPE (expr))
2398 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2399 return c_common_truthvalue_conversion (TREE_OPERAND (expr, 0));
2403 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2404 aren't guaranteed to the be same for modes that can represent
2405 infinity, since if x and y are both +infinity, or both
2406 -infinity, then x - y is not a number.
2408 Note that this transformation is safe when x or y is NaN.
2409 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2411 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
2413 /* fall through... */
2415 /* This and MINUS_EXPR can be changed into a comparison of the
2417 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2418 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2419 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2420 TREE_OPERAND (expr, 1), 1);
2421 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2422 fold (build1 (NOP_EXPR,
2423 TREE_TYPE (TREE_OPERAND (expr, 0)),
2424 TREE_OPERAND (expr, 1))), 1);
2427 if (integer_onep (TREE_OPERAND (expr, 1))
2428 && TREE_TYPE (expr) != boolean_type_node)
2429 /* Using convert here would cause infinite recursion. */
2430 return build1 (NOP_EXPR, boolean_type_node, expr);
2434 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2435 warning ("suggest parentheses around assignment used as truth value");
2442 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2444 tree t = save_expr (expr);
2445 return (build_binary_op
2446 ((TREE_SIDE_EFFECTS (expr)
2447 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2448 c_common_truthvalue_conversion (build_unary_op (REALPART_EXPR, t, 0)),
2449 c_common_truthvalue_conversion (build_unary_op (IMAGPART_EXPR, t, 0)),
2453 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2456 static tree builtin_function_2 PARAMS ((const char *, const char *, tree, tree,
2457 int, enum built_in_class, int, int,
2460 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2461 down to the element type of an array. */
2464 c_build_qualified_type (type, type_quals)
2468 /* A restrict-qualified pointer type must be a pointer to object or
2469 incomplete type. Note that the use of POINTER_TYPE_P also allows
2470 REFERENCE_TYPEs, which is appropriate for C++. Unfortunately,
2471 the C++ front-end also use POINTER_TYPE for pointer-to-member
2472 values, so even though it should be illegal to use `restrict'
2473 with such an entity we don't flag that here. Thus, special case
2474 code for that case is required in the C++ front-end. */
2475 if ((type_quals & TYPE_QUAL_RESTRICT)
2476 && (!POINTER_TYPE_P (type)
2477 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2479 error ("invalid use of `restrict'");
2480 type_quals &= ~TYPE_QUAL_RESTRICT;
2483 if (TREE_CODE (type) == ARRAY_TYPE)
2484 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
2486 TYPE_DOMAIN (type));
2487 return build_qualified_type (type, type_quals);
2490 /* Apply the TYPE_QUALS to the new DECL. */
2493 c_apply_type_quals_to_decl (type_quals, decl)
2497 if ((type_quals & TYPE_QUAL_CONST)
2498 || (TREE_TYPE (decl)
2499 && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
2500 TREE_READONLY (decl) = 1;
2501 if (type_quals & TYPE_QUAL_VOLATILE)
2503 TREE_SIDE_EFFECTS (decl) = 1;
2504 TREE_THIS_VOLATILE (decl) = 1;
2506 if (type_quals & TYPE_QUAL_RESTRICT)
2508 if (!TREE_TYPE (decl)
2509 || !POINTER_TYPE_P (TREE_TYPE (decl))
2510 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
2511 error ("invalid use of `restrict'");
2512 else if (flag_strict_aliasing)
2513 /* Indicate we need to make a unique alias set for this pointer.
2514 We can't do it here because it might be pointing to an
2516 DECL_POINTER_ALIAS_SET (decl) = -2;
2520 /* Return the typed-based alias set for T, which may be an expression
2521 or a type. Return -1 if we don't do anything special. */
2524 c_common_get_alias_set (t)
2529 /* We know nothing about vector types */
2530 if (TREE_CODE (t) == VECTOR_TYPE)
2533 /* Permit type-punning when accessing a union, provided the access
2534 is directly through the union. For example, this code does not
2535 permit taking the address of a union member and then storing
2536 through it. Even the type-punning allowed here is a GCC
2537 extension, albeit a common and useful one; the C standard says
2538 that such accesses have implementation-defined behavior. */
2540 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2541 u = TREE_OPERAND (u, 0))
2542 if (TREE_CODE (u) == COMPONENT_REF
2543 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2546 /* If this is a char *, the ANSI C standard says it can alias
2547 anything. Note that all references need do this. */
2548 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'r'
2549 && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
2550 && TYPE_PRECISION (TREE_TYPE (t)) == TYPE_PRECISION (char_type_node))
2553 /* That's all the expressions we handle specially. */
2557 /* The C standard specifically allows aliasing between signed and
2558 unsigned variants of the same type. We treat the signed
2559 variant as canonical. */
2560 if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
2562 tree t1 = c_common_signed_type (t);
2564 /* t1 == t can happen for boolean nodes which are always unsigned. */
2566 return get_alias_set (t1);
2568 else if (POINTER_TYPE_P (t))
2572 /* Unfortunately, there is no canonical form of a pointer type.
2573 In particular, if we have `typedef int I', then `int *', and
2574 `I *' are different types. So, we have to pick a canonical
2575 representative. We do this below.
2577 Technically, this approach is actually more conservative that
2578 it needs to be. In particular, `const int *' and `int *'
2579 should be in different alias sets, according to the C and C++
2580 standard, since their types are not the same, and so,
2581 technically, an `int **' and `const int **' cannot point at
2584 But, the standard is wrong. In particular, this code is
2589 const int* const* cipp = &ipp;
2591 And, it doesn't make sense for that to be legal unless you
2592 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2593 the pointed-to types. This issue has been reported to the
2595 t1 = build_type_no_quals (t);
2597 return get_alias_set (t1);
2603 /* Implement the __alignof keyword: Return the minimum required
2604 alignment of TYPE, measured in bytes. */
2610 enum tree_code code = TREE_CODE (type);
2613 /* In C++, sizeof applies to the referent. Handle alignof the same way. */
2614 if (code == REFERENCE_TYPE)
2616 type = TREE_TYPE (type);
2617 code = TREE_CODE (type);
2620 if (code == FUNCTION_TYPE)
2621 t = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2622 else if (code == VOID_TYPE || code == ERROR_MARK)
2624 else if (!COMPLETE_TYPE_P (type))
2626 error ("__alignof__ applied to an incomplete type");
2630 t = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
2632 return fold (build1 (NOP_EXPR, c_size_type_node, t));
2635 /* Implement the __alignof keyword: Return the minimum required
2636 alignment of EXPR, measured in bytes. For VAR_DECL's and
2637 FIELD_DECL's return DECL_ALIGN (which can be set from an
2638 "aligned" __attribute__ specification). */
2641 c_alignof_expr (expr)
2646 if (TREE_CODE (expr) == VAR_DECL)
2647 t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
2649 else if (TREE_CODE (expr) == COMPONENT_REF
2650 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2652 error ("`__alignof' applied to a bit-field");
2655 else if (TREE_CODE (expr) == COMPONENT_REF
2656 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2657 t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
2659 else if (TREE_CODE (expr) == INDIRECT_REF)
2661 tree t = TREE_OPERAND (expr, 0);
2663 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2665 while (TREE_CODE (t) == NOP_EXPR
2666 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2670 t = TREE_OPERAND (t, 0);
2671 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2672 if (thisalign > bestalign)
2673 best = t, bestalign = thisalign;
2675 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2678 return c_alignof (TREE_TYPE (expr));
2680 return fold (build1 (NOP_EXPR, c_size_type_node, t));
2683 /* Build tree nodes and builtin functions common to both C and C++ language
2687 c_common_nodes_and_builtins ()
2691 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2692 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2693 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2694 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2695 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2696 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2697 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2698 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2699 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2700 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2701 #include "builtin-types.def"
2702 #undef DEF_PRIMITIVE_TYPE
2703 #undef DEF_FUNCTION_TYPE_0
2704 #undef DEF_FUNCTION_TYPE_1
2705 #undef DEF_FUNCTION_TYPE_2
2706 #undef DEF_FUNCTION_TYPE_3
2707 #undef DEF_FUNCTION_TYPE_4
2708 #undef DEF_FUNCTION_TYPE_VAR_0
2709 #undef DEF_FUNCTION_TYPE_VAR_1
2710 #undef DEF_FUNCTION_TYPE_VAR_2
2711 #undef DEF_POINTER_TYPE
2715 typedef enum builtin_type builtin_type;
2717 tree builtin_types[(int) BT_LAST];
2718 int wchar_type_size;
2719 tree array_domain_type;
2720 tree va_list_ref_type_node;
2721 tree va_list_arg_type_node;
2723 /* Define `int' and `char' first so that dbx will output them first. */
2724 record_builtin_type (RID_INT, NULL, integer_type_node);
2725 record_builtin_type (RID_CHAR, "char", char_type_node);
2727 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
2728 "unsigned long", "long long unsigned" and "unsigned short" were in C++
2729 but not C. Are the conditionals here needed? */
2730 if (c_language == clk_cplusplus)
2731 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
2732 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
2733 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
2734 record_builtin_type (RID_MAX, "long unsigned int",
2735 long_unsigned_type_node);
2736 if (c_language == clk_cplusplus)
2737 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
2738 record_builtin_type (RID_MAX, "long long int",
2739 long_long_integer_type_node);
2740 record_builtin_type (RID_MAX, "long long unsigned int",
2741 long_long_unsigned_type_node);
2742 if (c_language == clk_cplusplus)
2743 record_builtin_type (RID_MAX, "long long unsigned",
2744 long_long_unsigned_type_node);
2745 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
2746 record_builtin_type (RID_MAX, "short unsigned int",
2747 short_unsigned_type_node);
2748 if (c_language == clk_cplusplus)
2749 record_builtin_type (RID_MAX, "unsigned short",
2750 short_unsigned_type_node);
2752 /* Define both `signed char' and `unsigned char'. */
2753 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
2754 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
2756 /* These are types that c_common_type_for_size and
2757 c_common_type_for_mode use. */
2758 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2760 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2762 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2764 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2766 #if HOST_BITS_PER_WIDE_INT >= 64
2767 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2768 get_identifier ("__int128_t"),
2771 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2772 unsigned_intQI_type_node));
2773 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2774 unsigned_intHI_type_node));
2775 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2776 unsigned_intSI_type_node));
2777 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2778 unsigned_intDI_type_node));
2779 #if HOST_BITS_PER_WIDE_INT >= 64
2780 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2781 get_identifier ("__uint128_t"),
2782 unsigned_intTI_type_node));
2785 /* Create the widest literal types. */
2786 widest_integer_literal_type_node
2787 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
2788 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2789 widest_integer_literal_type_node));
2791 widest_unsigned_literal_type_node
2792 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
2793 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, NULL_TREE,
2794 widest_unsigned_literal_type_node));
2796 /* `unsigned long' is the standard type for sizeof.
2797 Note that stddef.h uses `unsigned long',
2798 and this must agree, even if long and int are the same size. */
2800 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
2801 signed_size_type_node = c_common_signed_type (c_size_type_node);
2802 set_sizetype (c_size_type_node);
2804 build_common_tree_nodes_2 (flag_short_double);
2806 record_builtin_type (RID_FLOAT, NULL, float_type_node);
2807 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
2808 record_builtin_type (RID_MAX, "long double", long_double_type_node);
2810 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2811 get_identifier ("complex int"),
2812 complex_integer_type_node));
2813 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2814 get_identifier ("complex float"),
2815 complex_float_type_node));
2816 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2817 get_identifier ("complex double"),
2818 complex_double_type_node));
2819 (*lang_hooks.decls.pushdecl)
2820 (build_decl (TYPE_DECL, get_identifier ("complex long double"),
2821 complex_long_double_type_node));
2823 /* Types which are common to the fortran compiler and libf2c. When
2824 changing these, you also need to be concerned with f/com.h. */
2826 if (TYPE_PRECISION (float_type_node)
2827 == TYPE_PRECISION (long_integer_type_node))
2829 g77_integer_type_node = long_integer_type_node;
2830 g77_uinteger_type_node = long_unsigned_type_node;
2832 else if (TYPE_PRECISION (float_type_node)
2833 == TYPE_PRECISION (integer_type_node))
2835 g77_integer_type_node = integer_type_node;
2836 g77_uinteger_type_node = unsigned_type_node;
2839 g77_integer_type_node = g77_uinteger_type_node = NULL_TREE;
2841 if (g77_integer_type_node != NULL_TREE)
2843 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2844 get_identifier ("__g77_integer"),
2845 g77_integer_type_node));
2846 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2847 get_identifier ("__g77_uinteger"),
2848 g77_uinteger_type_node));
2851 if (TYPE_PRECISION (float_type_node) * 2
2852 == TYPE_PRECISION (long_integer_type_node))
2854 g77_longint_type_node = long_integer_type_node;
2855 g77_ulongint_type_node = long_unsigned_type_node;
2857 else if (TYPE_PRECISION (float_type_node) * 2
2858 == TYPE_PRECISION (long_long_integer_type_node))
2860 g77_longint_type_node = long_long_integer_type_node;
2861 g77_ulongint_type_node = long_long_unsigned_type_node;
2864 g77_longint_type_node = g77_ulongint_type_node = NULL_TREE;
2866 if (g77_longint_type_node != NULL_TREE)
2868 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2869 get_identifier ("__g77_longint"),
2870 g77_longint_type_node));
2871 (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
2872 get_identifier ("__g77_ulongint"),
2873 g77_ulongint_type_node));
2876 record_builtin_type (RID_VOID, NULL, void_type_node);
2878 void_zero_node = build_int_2 (0, 0);
2879 TREE_TYPE (void_zero_node) = void_type_node;
2881 void_list_node = build_void_list_node ();
2883 /* Make a type to be the domain of a few array types
2884 whose domains don't really matter.
2885 200 is small enough that it always fits in size_t
2886 and large enough that it can hold most function names for the
2887 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
2888 array_domain_type = build_index_type (size_int (200));
2890 /* Make a type for arrays of characters.
2891 With luck nothing will ever really depend on the length of this
2893 char_array_type_node
2894 = build_array_type (char_type_node, array_domain_type);
2896 /* Likewise for arrays of ints. */
2898 = build_array_type (integer_type_node, array_domain_type);
2900 string_type_node = build_pointer_type (char_type_node);
2901 const_string_type_node
2902 = build_pointer_type (build_qualified_type
2903 (char_type_node, TYPE_QUAL_CONST));
2905 (*targetm.init_builtins) ();
2907 /* This is special for C++ so functions can be overloaded. */
2908 wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
2909 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
2910 wchar_type_size = TYPE_PRECISION (wchar_type_node);
2911 if (c_language == clk_cplusplus)
2913 if (TREE_UNSIGNED (wchar_type_node))
2914 wchar_type_node = make_unsigned_type (wchar_type_size);
2916 wchar_type_node = make_signed_type (wchar_type_size);
2917 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
2921 signed_wchar_type_node = c_common_signed_type (wchar_type_node);
2922 unsigned_wchar_type_node = c_common_unsigned_type (wchar_type_node);
2925 /* This is for wide string constants. */
2926 wchar_array_type_node
2927 = build_array_type (wchar_type_node, array_domain_type);
2930 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
2933 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
2935 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
2937 default_function_type = build_function_type (integer_type_node, NULL_TREE);
2939 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
2940 unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node);
2942 (*lang_hooks.decls.pushdecl)
2943 (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
2944 va_list_type_node));
2946 (*lang_hooks.decls.pushdecl)
2947 (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
2948 ptrdiff_type_node));
2950 (*lang_hooks.decls.pushdecl)
2951 (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
2954 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
2956 va_list_arg_type_node = va_list_ref_type_node =
2957 build_pointer_type (TREE_TYPE (va_list_type_node));
2961 va_list_arg_type_node = va_list_type_node;
2962 va_list_ref_type_node = build_reference_type (va_list_type_node);
2965 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
2966 builtin_types[(int) ENUM] = VALUE;
2967 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
2968 builtin_types[(int) ENUM] \
2969 = build_function_type (builtin_types[(int) RETURN], \
2971 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
2972 builtin_types[(int) ENUM] \
2973 = build_function_type (builtin_types[(int) RETURN], \
2974 tree_cons (NULL_TREE, \
2975 builtin_types[(int) ARG1], \
2977 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
2978 builtin_types[(int) ENUM] \
2979 = build_function_type \
2980 (builtin_types[(int) RETURN], \
2981 tree_cons (NULL_TREE, \
2982 builtin_types[(int) ARG1], \
2983 tree_cons (NULL_TREE, \
2984 builtin_types[(int) ARG2], \
2986 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
2987 builtin_types[(int) ENUM] \
2988 = build_function_type \
2989 (builtin_types[(int) RETURN], \
2990 tree_cons (NULL_TREE, \
2991 builtin_types[(int) ARG1], \
2992 tree_cons (NULL_TREE, \
2993 builtin_types[(int) ARG2], \
2994 tree_cons (NULL_TREE, \
2995 builtin_types[(int) ARG3], \
2997 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
2998 builtin_types[(int) ENUM] \
2999 = build_function_type \
3000 (builtin_types[(int) RETURN], \
3001 tree_cons (NULL_TREE, \
3002 builtin_types[(int) ARG1], \
3003 tree_cons (NULL_TREE, \
3004 builtin_types[(int) ARG2], \
3007 builtin_types[(int) ARG3], \
3008 tree_cons (NULL_TREE, \
3009 builtin_types[(int) ARG4], \
3010 void_list_node)))));
3011 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
3012 builtin_types[(int) ENUM] \
3013 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
3014 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
3015 builtin_types[(int) ENUM] \
3016 = build_function_type (builtin_types[(int) RETURN], \
3017 tree_cons (NULL_TREE, \
3018 builtin_types[(int) ARG1], \
3021 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
3022 builtin_types[(int) ENUM] \
3023 = build_function_type \
3024 (builtin_types[(int) RETURN], \
3025 tree_cons (NULL_TREE, \
3026 builtin_types[(int) ARG1], \
3027 tree_cons (NULL_TREE, \
3028 builtin_types[(int) ARG2], \
3030 #define DEF_POINTER_TYPE(ENUM, TYPE) \
3031 builtin_types[(int) ENUM] \
3032 = build_pointer_type (builtin_types[(int) TYPE]);
3033 #include "builtin-types.def"
3034 #undef DEF_PRIMITIVE_TYPE
3035 #undef DEF_FUNCTION_TYPE_1
3036 #undef DEF_FUNCTION_TYPE_2
3037 #undef DEF_FUNCTION_TYPE_3
3038 #undef DEF_FUNCTION_TYPE_4
3039 #undef DEF_FUNCTION_TYPE_VAR_0
3040 #undef DEF_FUNCTION_TYPE_VAR_1
3041 #undef DEF_POINTER_TYPE
3043 #define DEF_BUILTIN(ENUM, NAME, CLASS, \
3044 TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P) \
3049 if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \
3053 decl = builtin_function (NAME, builtin_types[TYPE], ENUM, \
3056 ? (NAME + strlen ("__builtin_")) \
3059 decl = builtin_function_2 (NAME, \
3060 NAME + strlen ("__builtin_"), \
3061 builtin_types[TYPE], \
3062 builtin_types[LIBTYPE], \
3067 /*noreturn_p=*/0); \
3069 built_in_decls[(int) ENUM] = decl; \
3071 #include "builtins.def"
3074 /* Declare _exit and _Exit just to mark them as non-returning. */
3075 builtin_function_2 (NULL, "_exit", NULL_TREE,
3076 builtin_types[BT_FN_VOID_INT],
3077 0, NOT_BUILT_IN, 0, 1, 1);
3078 builtin_function_2 (NULL, "_Exit", NULL_TREE,
3079 builtin_types[BT_FN_VOID_INT],
3080 0, NOT_BUILT_IN, 0, !flag_isoc99, 1);
3082 /* Declare these functions non-returning
3083 to avoid spurious "control drops through" warnings. */
3084 builtin_function_2 (NULL, "abort",
3085 NULL_TREE, ((c_language == clk_cplusplus)
3086 ? builtin_types[BT_FN_VOID]
3087 : builtin_types[BT_FN_VOID_VAR]),
3088 0, NOT_BUILT_IN, 0, 0, 1);
3090 builtin_function_2 (NULL, "exit",
3091 NULL_TREE, ((c_language == clk_cplusplus)
3092 ? builtin_types[BT_FN_VOID_INT]
3093 : builtin_types[BT_FN_VOID_VAR]),
3094 0, NOT_BUILT_IN, 0, 0, 1);
3096 main_identifier_node = get_identifier ("main");
3100 build_va_arg (expr, type)
3103 return build1 (VA_ARG_EXPR, type, expr);
3107 /* Linked list of disabled built-in functions. */
3109 typedef struct disabled_builtin
3112 struct disabled_builtin *next;
3114 static disabled_builtin *disabled_builtins = NULL;
3116 static bool builtin_function_disabled_p PARAMS ((const char *));
3118 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
3119 begins with "__builtin_", give an error. */
3122 disable_builtin_function (name)
3125 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
3126 error ("cannot disable built-in function `%s'", name);
3129 disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
3131 new->next = disabled_builtins;
3132 disabled_builtins = new;
3137 /* Return true if the built-in function NAME has been disabled, false
3141 builtin_function_disabled_p (name)
3144 disabled_builtin *p;
3145 for (p = disabled_builtins; p != NULL; p = p->next)
3147 if (strcmp (name, p->name) == 0)
3154 /* Possibly define a builtin function with one or two names. BUILTIN_NAME
3155 is an __builtin_-prefixed name; NAME is the ordinary name; one or both
3156 of these may be NULL (though both being NULL is useless).
3157 BUILTIN_TYPE is the type of the __builtin_-prefixed function;
3158 TYPE is the type of the function with the ordinary name. These
3159 may differ if the ordinary name is declared with a looser type to avoid
3160 conflicts with headers. FUNCTION_CODE and CLASS are as for
3161 builtin_function. If LIBRARY_NAME_P is nonzero, NAME is passed as
3162 the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
3163 If NONANSI_P is nonzero, the name NAME is treated as a non-ANSI name; if
3164 NORETURN_P is nonzero, the function is marked as non-returning.
3165 Returns the declaration of BUILTIN_NAME, if any, otherwise
3166 the declaration of NAME. Does not declare NAME if flag_no_builtin,
3167 or if NONANSI_P and flag_no_nonansi_builtin. */
3170 builtin_function_2 (builtin_name, name, builtin_type, type, function_code,
3171 class, library_name_p, nonansi_p, noreturn_p)
3172 const char *builtin_name;
3177 enum built_in_class class;
3182 tree bdecl = NULL_TREE;
3183 tree decl = NULL_TREE;
3184 if (builtin_name != 0)
3186 bdecl = builtin_function (builtin_name, builtin_type, function_code,
3187 class, library_name_p ? name : NULL);
3190 TREE_THIS_VOLATILE (bdecl) = 1;
3191 TREE_SIDE_EFFECTS (bdecl) = 1;
3194 if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
3195 && !(nonansi_p && flag_no_nonansi_builtin))
3197 decl = builtin_function (name, type, function_code, class, NULL);
3199 DECL_BUILT_IN_NONANSI (decl) = 1;
3202 TREE_THIS_VOLATILE (decl) = 1;
3203 TREE_SIDE_EFFECTS (decl) = 1;
3206 return (bdecl != 0 ? bdecl : decl);
3209 /* Nonzero if the type T promotes to int. This is (nearly) the
3210 integral promotions defined in ISO C99 6.3.1.1/2. */
3213 c_promoting_integer_type_p (t)
3216 switch (TREE_CODE (t))
3219 return (TYPE_MAIN_VARIANT (t) == char_type_node
3220 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
3221 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
3222 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
3223 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
3224 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
3227 /* ??? Technically all enumerations not larger than an int
3228 promote to an int. But this is used along code paths
3229 that only want to notice a size change. */
3230 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
3240 /* Return 1 if PARMS specifies a fixed number of parameters
3241 and none of their types is affected by default promotions. */
3244 self_promoting_args_p (parms)
3248 for (t = parms; t; t = TREE_CHAIN (t))
3250 tree type = TREE_VALUE (t);
3252 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3258 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3261 if (c_promoting_integer_type_p (type))
3267 /* Recursively examines the array elements of TYPE, until a non-array
3268 element type is found. */
3271 strip_array_types (type)
3274 while (TREE_CODE (type) == ARRAY_TYPE)
3275 type = TREE_TYPE (type);
3280 static tree expand_unordered_cmp PARAMS ((tree, tree, enum tree_code,
3283 /* Expand a call to an unordered comparison function such as
3284 __builtin_isgreater(). FUNCTION is the function's declaration and
3285 PARAMS a list of the values passed. For __builtin_isunordered(),
3286 UNORDERED_CODE is UNORDERED_EXPR and ORDERED_CODE is NOP_EXPR. In
3287 other cases, UNORDERED_CODE and ORDERED_CODE are comparison codes
3288 that give the opposite of the desired result. UNORDERED_CODE is
3289 used for modes that can hold NaNs and ORDERED_CODE is used for the
3293 expand_unordered_cmp (function, params, unordered_code, ordered_code)
3294 tree function, params;
3295 enum tree_code unordered_code, ordered_code;
3297 tree arg0, arg1, type;
3298 enum tree_code code0, code1;
3300 /* Check that we have exactly two arguments. */
3301 if (params == 0 || TREE_CHAIN (params) == 0)
3303 error ("too few arguments to function `%s'",
3304 IDENTIFIER_POINTER (DECL_NAME (function)));
3305 return error_mark_node;
3307 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
3309 error ("too many arguments to function `%s'",
3310 IDENTIFIER_POINTER (DECL_NAME (function)));
3311 return error_mark_node;
3314 arg0 = TREE_VALUE (params);
3315 arg1 = TREE_VALUE (TREE_CHAIN (params));
3317 code0 = TREE_CODE (TREE_TYPE (arg0));
3318 code1 = TREE_CODE (TREE_TYPE (arg1));
3320 /* Make sure that the arguments have a common type of REAL. */
3322 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3323 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3324 type = common_type (TREE_TYPE (arg0), TREE_TYPE (arg1));
3326 if (type == 0 || TREE_CODE (type) != REAL_TYPE)
3328 error ("non-floating-point argument to function `%s'",
3329 IDENTIFIER_POINTER (DECL_NAME (function)));
3330 return error_mark_node;
3333 if (unordered_code == UNORDERED_EXPR)
3335 if (MODE_HAS_NANS (TYPE_MODE (type)))
3336 return build_binary_op (unordered_code,
3337 convert (type, arg0),
3338 convert (type, arg1),
3341 return integer_zero_node;
3344 return build_unary_op (TRUTH_NOT_EXPR,
3345 build_binary_op (MODE_HAS_NANS (TYPE_MODE (type))
3348 convert (type, arg0),
3349 convert (type, arg1),
3355 /* Recognize certain built-in functions so we can make tree-codes
3356 other than CALL_EXPR. We do this when it enables fold-const.c
3357 to do something useful. */
3358 /* ??? By rights this should go in builtins.c, but only C and C++
3359 implement build_{binary,unary}_op. Not exactly sure what bits
3360 of functionality are actually needed from those functions, or
3361 where the similar functionality exists in the other front ends. */
3364 expand_tree_builtin (function, params, coerced_params)
3365 tree function, params, coerced_params;
3367 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
3370 switch (DECL_FUNCTION_CODE (function))
3374 case BUILT_IN_LLABS:
3375 case BUILT_IN_IMAXABS:
3377 case BUILT_IN_FABSL:
3378 case BUILT_IN_FABSF:
3379 if (coerced_params == 0)
3380 return integer_zero_node;
3381 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
3384 case BUILT_IN_CONJF:
3385 case BUILT_IN_CONJL:
3386 if (coerced_params == 0)
3387 return integer_zero_node;
3388 return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0);
3390 case BUILT_IN_CREAL:
3391 case BUILT_IN_CREALF:
3392 case BUILT_IN_CREALL:
3393 if (coerced_params == 0)
3394 return integer_zero_node;
3395 return build_unary_op (REALPART_EXPR, TREE_VALUE (coerced_params), 0);
3397 case BUILT_IN_CIMAG:
3398 case BUILT_IN_CIMAGF:
3399 case BUILT_IN_CIMAGL:
3400 if (coerced_params == 0)
3401 return integer_zero_node;
3402 return build_unary_op (IMAGPART_EXPR, TREE_VALUE (coerced_params), 0);
3404 case BUILT_IN_ISGREATER:
3405 return expand_unordered_cmp (function, params, UNLE_EXPR, LE_EXPR);
3407 case BUILT_IN_ISGREATEREQUAL:
3408 return expand_unordered_cmp (function, params, UNLT_EXPR, LT_EXPR);
3410 case BUILT_IN_ISLESS:
3411 return expand_unordered_cmp (function, params, UNGE_EXPR, GE_EXPR);
3413 case BUILT_IN_ISLESSEQUAL:
3414 return expand_unordered_cmp (function, params, UNGT_EXPR, GT_EXPR);
3416 case BUILT_IN_ISLESSGREATER:
3417 return expand_unordered_cmp (function, params, UNEQ_EXPR, EQ_EXPR);
3419 case BUILT_IN_ISUNORDERED:
3420 return expand_unordered_cmp (function, params, UNORDERED_EXPR, NOP_EXPR);
3429 /* Returns non-zero if CODE is the code for a statement. */
3432 statement_code_p (code)
3433 enum tree_code code;
3458 if (lang_statement_code_p)
3459 return (*lang_statement_code_p) (code);
3464 /* Walk the statement tree, rooted at *tp. Apply FUNC to all the
3465 sub-trees of *TP in a pre-order traversal. FUNC is called with the
3466 DATA and the address of each sub-tree. If FUNC returns a non-NULL
3467 value, the traversal is aborted, and the value returned by FUNC is
3468 returned. If FUNC sets WALK_SUBTREES to zero, then the subtrees of
3469 the node being visited are not walked.
3471 We don't need a without_duplicates variant of this one because the
3472 statement tree is a tree, not a graph. */
3475 walk_stmt_tree (tp, func, data)
3480 enum tree_code code;
3485 #define WALK_SUBTREE(NODE) \
3488 result = walk_stmt_tree (&(NODE), func, data); \
3494 /* Skip empty subtrees. */
3498 /* Skip subtrees below non-statement nodes. */
3499 if (!statement_code_p (TREE_CODE (*tp)))
3502 /* Call the function. */
3504 result = (*func) (tp, &walk_subtrees, data);
3506 /* If we found something, return it. */
3510 /* FUNC may have modified the tree, recheck that we're looking at a
3512 code = TREE_CODE (*tp);
3513 if (!statement_code_p (code))
3516 /* Visit the subtrees unless FUNC decided that there was nothing
3517 interesting below this point in the tree. */
3520 /* Walk over all the sub-trees of this operand. Statement nodes
3521 never contain RTL, and we needn't worry about TARGET_EXPRs. */
3522 len = TREE_CODE_LENGTH (code);
3524 /* Go through the subtrees. We need to do this in forward order so
3525 that the scope of a FOR_EXPR is handled properly. */
3526 for (i = 0; i < len; ++i)
3527 WALK_SUBTREE (TREE_OPERAND (*tp, i));
3530 /* Finally visit the chain. This can be tail-recursion optimized if
3531 we write it this way. */
3532 return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
3537 /* Used to compare case labels. K1 and K2 are actually tree nodes
3538 representing case labels, or NULL_TREE for a `default' label.
3539 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3540 K2, and 0 if K1 and K2 are equal. */
3543 case_compare (k1, k2)
3547 /* Consider a NULL key (such as arises with a `default' label) to be
3548 smaller than anything else. */
3554 return tree_int_cst_compare ((tree) k1, (tree) k2);
3557 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3558 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3559 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3560 case label was declared using the usual C/C++ syntax, rather than
3561 the GNU case range extension. CASES is a tree containing all the
3562 case ranges processed so far; COND is the condition for the
3563 switch-statement itself. Returns the CASE_LABEL created, or
3564 ERROR_MARK_NODE if no CASE_LABEL is created. */
3567 c_add_case_label (cases, cond, low_value, high_value)
3576 splay_tree_node node;
3578 /* Create the LABEL_DECL itself. */
3579 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3580 DECL_CONTEXT (label) = current_function_decl;
3582 /* If there was an error processing the switch condition, bail now
3583 before we get more confused. */
3584 if (!cond || cond == error_mark_node)
3586 /* Add a label anyhow so that the back-end doesn't think that
3587 the beginning of the switch is unreachable. */
3589 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3590 return error_mark_node;
3593 if ((low_value && TREE_TYPE (low_value)
3594 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3595 || (high_value && TREE_TYPE (high_value)
3596 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3597 error ("pointers are not permitted as case values");
3599 /* Case ranges are a GNU extension. */
3600 if (high_value && pedantic)
3602 if (c_language == clk_cplusplus)
3603 pedwarn ("ISO C++ forbids range expressions in switch statements");
3605 pedwarn ("ISO C forbids range expressions in switch statements");
3608 type = TREE_TYPE (cond);
3611 low_value = check_case_value (low_value);
3612 low_value = convert_and_check (type, low_value);
3616 high_value = check_case_value (high_value);
3617 high_value = convert_and_check (type, high_value);
3620 /* If an error has occurred, bail out now. */
3621 if (low_value == error_mark_node || high_value == error_mark_node)
3624 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3625 return error_mark_node;
3628 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3629 really a case range, even though it was written that way. Remove
3630 the HIGH_VALUE to simplify later processing. */
3631 if (tree_int_cst_equal (low_value, high_value))
3632 high_value = NULL_TREE;
3633 if (low_value && high_value
3634 && !tree_int_cst_lt (low_value, high_value))
3635 warning ("empty range specified");
3637 /* Look up the LOW_VALUE in the table of case labels we already
3639 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3640 /* If there was not an exact match, check for overlapping ranges.
3641 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3642 that's a `default' label and the only overlap is an exact match. */
3643 if (!node && (low_value || high_value))
3645 splay_tree_node low_bound;
3646 splay_tree_node high_bound;
3648 /* Even though there wasn't an exact match, there might be an
3649 overlap between this case range and another case range.
3650 Since we've (inductively) not allowed any overlapping case
3651 ranges, we simply need to find the greatest low case label
3652 that is smaller that LOW_VALUE, and the smallest low case
3653 label that is greater than LOW_VALUE. If there is an overlap
3654 it will occur in one of these two ranges. */
3655 low_bound = splay_tree_predecessor (cases,
3656 (splay_tree_key) low_value);
3657 high_bound = splay_tree_successor (cases,
3658 (splay_tree_key) low_value);
3660 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3661 the LOW_VALUE, so there is no need to check unless the
3662 LOW_BOUND is in fact itself a case range. */
3664 && CASE_HIGH ((tree) low_bound->value)
3665 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3668 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3669 range is bigger than the low end of the current range, so we
3670 are only interested if the current range is a real range, and
3671 not an ordinary case label. */
3674 && (tree_int_cst_compare ((tree) high_bound->key,
3679 /* If there was an overlap, issue an error. */
3682 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
3686 error ("duplicate (or overlapping) case value");
3687 error_with_decl (duplicate,
3688 "this is the first entry overlapping that value");
3692 error ("duplicate case value") ;
3693 error_with_decl (duplicate, "previously used here");
3697 error ("multiple default labels in one switch");
3698 error_with_decl (duplicate, "this is the first default label");
3701 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3704 /* Add a CASE_LABEL to the statement-tree. */
3705 case_label = add_stmt (build_case_label (low_value, high_value, label));
3706 /* Register this case label in the splay tree. */
3707 splay_tree_insert (cases,
3708 (splay_tree_key) low_value,
3709 (splay_tree_value) case_label);
3714 /* Finish an expression taking the address of LABEL. Returns an
3715 expression for the address. */
3718 finish_label_address_expr (label)
3725 if (c_language == clk_cplusplus)
3726 pedwarn ("ISO C++ forbids taking the address of a label");
3728 pedwarn ("ISO C forbids taking the address of a label");
3731 label = lookup_label (label);
3732 if (label == NULL_TREE)
3733 result = null_pointer_node;
3736 TREE_USED (label) = 1;
3737 result = build1 (ADDR_EXPR, ptr_type_node, label);
3738 TREE_CONSTANT (result) = 1;
3739 /* The current function in not necessarily uninlinable.
3740 Computed gotos are incompatible with inlining, but the value
3741 here could be used only in a diagnostic, for example. */
3747 /* Mark P (a stmt_tree) for GC. The use of a `void *' for the
3748 parameter allows this function to be used as a GC-marking
3755 stmt_tree st = (stmt_tree) p;
3757 ggc_mark_tree (st->x_last_stmt);
3758 ggc_mark_tree (st->x_last_expr_type);
3761 /* Mark LD for GC. */
3764 c_mark_lang_decl (c)
3765 struct c_lang_decl *c ATTRIBUTE_UNUSED;
3769 /* Mark F for GC. */
3772 mark_c_language_function (f)
3773 struct language_function *f;
3778 mark_stmt_tree (&f->x_stmt_tree);
3779 ggc_mark_tree (f->x_scope_stmt_stack);
3782 /* Hook used by expand_expr to expand language-specific tree codes. */
3785 c_expand_expr (exp, target, tmode, modifier)
3788 enum machine_mode tmode;
3789 int modifier; /* Actually enum_modifier. */
3791 switch (TREE_CODE (exp))
3797 bool preserve_result = false;
3799 /* Since expand_expr_stmt calls free_temp_slots after every
3800 expression statement, we must call push_temp_slots here.
3801 Otherwise, any temporaries in use now would be considered
3802 out-of-scope after the first EXPR_STMT from within the
3805 rtl_expr = expand_start_stmt_expr (!STMT_EXPR_NO_SCOPE (exp));
3807 /* If we want the result of this expression, find the last
3808 EXPR_STMT in the COMPOUND_STMT and mark it as addressable. */
3809 if (target != const0_rtx
3810 && TREE_CODE (STMT_EXPR_STMT (exp)) == COMPOUND_STMT
3811 && TREE_CODE (COMPOUND_BODY (STMT_EXPR_STMT (exp))) == SCOPE_STMT)
3813 tree expr = COMPOUND_BODY (STMT_EXPR_STMT (exp));
3814 tree last = TREE_CHAIN (expr);
3816 while (TREE_CHAIN (last))
3819 last = TREE_CHAIN (last);
3822 if (TREE_CODE (last) == SCOPE_STMT
3823 && TREE_CODE (expr) == EXPR_STMT)
3825 TREE_ADDRESSABLE (expr) = 1;
3826 preserve_result = true;
3830 expand_stmt (STMT_EXPR_STMT (exp));
3831 expand_end_stmt_expr (rtl_expr);
3833 result = expand_expr (rtl_expr, target, tmode, modifier);
3834 if (preserve_result && GET_CODE (result) == MEM)
3836 if (GET_MODE (result) != BLKmode)
3837 result = copy_to_reg (result);
3839 preserve_temp_slots (result);
3842 /* If the statment-expression does not have a scope, then the
3843 new temporaries we created within it must live beyond the
3844 statement-expression. */
3845 if (STMT_EXPR_NO_SCOPE (exp))
3846 preserve_temp_slots (NULL_RTX);
3855 if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
3856 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3858 && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3859 && (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3860 == BUILT_IN_FRONTEND))
3861 return c_expand_builtin (exp, target, tmode, modifier);
3867 case COMPOUND_LITERAL_EXPR:
3869 /* Initialize the anonymous variable declared in the compound
3870 literal, then return the variable. */
3871 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
3872 emit_local_var (decl);
3873 return expand_expr (decl, target, tmode, modifier);
3884 /* Hook used by safe_from_p to handle language-specific tree codes. */
3887 c_safe_from_p (target, exp)
3891 /* We can see statements here when processing the body of a
3892 statement-expression. For a declaration statement declaring a
3893 variable, look at the variable's initializer. */
3894 if (TREE_CODE (exp) == DECL_STMT)
3896 tree decl = DECL_STMT_DECL (exp);
3898 if (TREE_CODE (decl) == VAR_DECL
3899 && DECL_INITIAL (decl)
3900 && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
3904 /* For any statement, we must follow the statement-chain. */
3905 if (statement_code_p (TREE_CODE (exp)) && TREE_CHAIN (exp))
3906 return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
3908 /* Assume everything else is safe. */
3912 /* Hook used by unsafe_for_reeval to handle language-specific tree codes. */
3915 c_common_unsafe_for_reeval (exp)
3918 /* Statement expressions may not be reevaluated, likewise compound
3920 if (TREE_CODE (exp) == STMT_EXPR
3921 || TREE_CODE (exp) == COMPOUND_LITERAL_EXPR)
3924 /* Walk all other expressions. */
3928 /* Hook used by staticp to handle language-specific tree codes. */
3934 if (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
3935 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)))
3940 #define CALLED_AS_BUILT_IN(NODE) \
3941 (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
3944 c_expand_builtin (exp, target, tmode, modifier)
3947 enum machine_mode tmode;
3948 enum expand_modifier modifier;
3950 tree type = TREE_TYPE (exp);
3951 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
3952 tree arglist = TREE_OPERAND (exp, 1);
3953 enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
3954 enum tree_code code = TREE_CODE (exp);
3955 const int ignore = (target == const0_rtx
3956 || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
3957 || code == CONVERT_EXPR || code == REFERENCE_EXPR
3958 || code == COND_EXPR)
3959 && TREE_CODE (type) == VOID_TYPE));
3961 if (! optimize && ! CALLED_AS_BUILT_IN (fndecl))
3962 return expand_call (exp, target, ignore);
3966 case BUILT_IN_PRINTF:
3967 target = c_expand_builtin_printf (arglist, target, tmode,
3968 modifier, ignore, /*unlocked=*/ 0);
3973 case BUILT_IN_PRINTF_UNLOCKED:
3974 target = c_expand_builtin_printf (arglist, target, tmode,
3975 modifier, ignore, /*unlocked=*/ 1);
3980 case BUILT_IN_FPRINTF:
3981 target = c_expand_builtin_fprintf (arglist, target, tmode,
3982 modifier, ignore, /*unlocked=*/ 0);
3987 case BUILT_IN_FPRINTF_UNLOCKED:
3988 target = c_expand_builtin_fprintf (arglist, target, tmode,
3989 modifier, ignore, /*unlocked=*/ 1);
3994 default: /* just do library call, if unknown builtin */
3995 error ("built-in function `%s' not currently supported",
3996 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
3999 /* The switch statement above can drop through to cause the function
4000 to be called normally. */
4001 return expand_call (exp, target, ignore);
4004 /* Check an arglist to *printf for problems. The arglist should start
4005 at the format specifier, with the remaining arguments immediately
4008 is_valid_printf_arglist (arglist)
4011 /* Save this value so we can restore it later. */
4012 const int SAVE_pedantic = pedantic;
4013 int diagnostic_occurred = 0;
4016 /* Set this to a known value so the user setting won't affect code
4019 /* Check to make sure there are no format specifier errors. */
4020 attrs = tree_cons (get_identifier ("format"),
4021 tree_cons (NULL_TREE,
4022 get_identifier ("printf"),
4023 tree_cons (NULL_TREE,
4025 tree_cons (NULL_TREE,
4029 check_function_format (&diagnostic_occurred, attrs, arglist);
4031 /* Restore the value of `pedantic'. */
4032 pedantic = SAVE_pedantic;
4034 /* If calling `check_function_format_ptr' produces a warning, we
4035 return false, otherwise we return true. */
4036 return ! diagnostic_occurred;
4039 /* If the arguments passed to printf are suitable for optimizations,
4040 we attempt to transform the call. */
4042 c_expand_builtin_printf (arglist, target, tmode, modifier, ignore, unlocked)
4045 enum machine_mode tmode;
4046 enum expand_modifier modifier;
4050 tree fn_putchar = unlocked ?
4051 built_in_decls[BUILT_IN_PUTCHAR_UNLOCKED] : built_in_decls[BUILT_IN_PUTCHAR];
4052 tree fn_puts = unlocked ?
4053 built_in_decls[BUILT_IN_PUTS_UNLOCKED] : built_in_decls[BUILT_IN_PUTS];
4054 tree fn, format_arg, stripped_string;
4056 /* If the return value is used, or the replacement _DECL isn't
4057 initialized, don't do the transformation. */
4058 if (!ignore || !fn_putchar || !fn_puts)
4061 /* Verify the required arguments in the original call. */
4063 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE))
4066 /* Check the specifier vs. the parameters. */
4067 if (!is_valid_printf_arglist (arglist))
4070 format_arg = TREE_VALUE (arglist);
4071 stripped_string = format_arg;
4072 STRIP_NOPS (stripped_string);
4073 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
4074 stripped_string = TREE_OPERAND (stripped_string, 0);
4076 /* If the format specifier isn't a STRING_CST, punt. */
4077 if (TREE_CODE (stripped_string) != STRING_CST)
4080 /* OK! We can attempt optimization. */
4082 /* If the format specifier was "%s\n", call __builtin_puts(arg2). */
4083 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0)
4085 arglist = TREE_CHAIN (arglist);
4088 /* If the format specifier was "%c", call __builtin_putchar (arg2). */
4089 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
4091 arglist = TREE_CHAIN (arglist);
4096 /* We can't handle anything else with % args or %% ... yet. */
4097 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
4100 /* If the resulting constant string has a length of 1, call
4101 putchar. Note, TREE_STRING_LENGTH includes the terminating
4102 NULL in its count. */
4103 if (TREE_STRING_LENGTH (stripped_string) == 2)
4105 /* Given printf("c"), (where c is any one character,)
4106 convert "c"[0] to an int and pass that to the replacement
4108 arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0);
4109 arglist = build_tree_list (NULL_TREE, arglist);
4113 /* If the resulting constant was "string\n", call
4114 __builtin_puts("string"). Ensure "string" has at least one
4115 character besides the trailing \n. Note, TREE_STRING_LENGTH
4116 includes the terminating NULL in its count. */
4117 else if (TREE_STRING_LENGTH (stripped_string) > 2
4118 && TREE_STRING_POINTER (stripped_string)
4119 [TREE_STRING_LENGTH (stripped_string) - 2] == '\n')
4121 /* Create a NULL-terminated string that's one char shorter
4122 than the original, stripping off the trailing '\n'. */
4123 const int newlen = TREE_STRING_LENGTH (stripped_string) - 1;
4124 char *newstr = (char *) alloca (newlen);
4125 memcpy (newstr, TREE_STRING_POINTER (stripped_string), newlen - 1);
4126 newstr[newlen - 1] = 0;
4128 arglist = fix_string_type (build_string (newlen, newstr));
4129 arglist = build_tree_list (NULL_TREE, arglist);
4133 /* We'd like to arrange to call fputs(string) here, but we
4134 need stdout and don't have a way to get it ... yet. */
4138 return expand_expr (build_function_call (fn, arglist),
4139 (ignore ? const0_rtx : target),
4143 /* If the arguments passed to fprintf are suitable for optimizations,
4144 we attempt to transform the call. */
4146 c_expand_builtin_fprintf (arglist, target, tmode, modifier, ignore, unlocked)
4149 enum machine_mode tmode;
4150 enum expand_modifier modifier;
4154 tree fn_fputc = unlocked ?
4155 built_in_decls[BUILT_IN_FPUTC_UNLOCKED] : built_in_decls[BUILT_IN_FPUTC];
4156 tree fn_fputs = unlocked ?
4157 built_in_decls[BUILT_IN_FPUTS_UNLOCKED] : built_in_decls[BUILT_IN_FPUTS];
4158 tree fn, format_arg, stripped_string;
4160 /* If the return value is used, or the replacement _DECL isn't
4161 initialized, don't do the transformation. */
4162 if (!ignore || !fn_fputc || !fn_fputs)
4165 /* Verify the required arguments in the original call. */
4167 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
4168 || (TREE_CHAIN (arglist) == 0)
4169 || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) !=
4173 /* Check the specifier vs. the parameters. */
4174 if (!is_valid_printf_arglist (TREE_CHAIN (arglist)))
4177 format_arg = TREE_VALUE (TREE_CHAIN (arglist));
4178 stripped_string = format_arg;
4179 STRIP_NOPS (stripped_string);
4180 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
4181 stripped_string = TREE_OPERAND (stripped_string, 0);
4183 /* If the format specifier isn't a STRING_CST, punt. */
4184 if (TREE_CODE (stripped_string) != STRING_CST)
4187 /* OK! We can attempt optimization. */
4189 /* If the format specifier was "%s", call __builtin_fputs(arg3, arg1). */
4190 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s") == 0)
4192 tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
4193 arglist = tree_cons (NULL_TREE,
4194 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
4198 /* If the format specifier was "%c", call __builtin_fputc (arg3, arg1). */
4199 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
4201 tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
4202 arglist = tree_cons (NULL_TREE,
4203 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
4209 /* We can't handle anything else with % args or %% ... yet. */
4210 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
4213 /* When "string" doesn't contain %, replace all cases of
4214 fprintf(stream,string) with fputs(string,stream). The fputs
4215 builtin will take take of special cases like length==1. */
4216 arglist = tree_cons (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)),
4217 build_tree_list (NULL_TREE, TREE_VALUE (arglist)));
4221 return expand_expr (build_function_call (fn, arglist),
4222 (ignore ? const0_rtx : target),
4227 /* Given a boolean expression ARG, return a tree representing an increment
4228 or decrement (as indicated by CODE) of ARG. The front end must check for
4229 invalid cases (e.g., decrement in C++). */
4231 boolean_increment (code, arg)
4232 enum tree_code code;
4236 tree true_res = (c_language == clk_cplusplus
4238 : c_bool_true_node);
4239 arg = stabilize_reference (arg);
4242 case PREINCREMENT_EXPR:
4243 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4245 case POSTINCREMENT_EXPR:
4246 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4247 arg = save_expr (arg);
4248 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4249 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4251 case PREDECREMENT_EXPR:
4252 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4254 case POSTDECREMENT_EXPR:
4255 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4256 arg = save_expr (arg);
4257 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4258 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4263 TREE_SIDE_EFFECTS (val) = 1;
4267 /* Handle C and C++ default attributes. */
4269 enum built_in_attribute
4271 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4272 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4273 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4274 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4275 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No entry needed in enum. */
4276 #include "builtin-attrs.def"
4277 #undef DEF_ATTR_NULL_TREE
4279 #undef DEF_ATTR_IDENT
4280 #undef DEF_ATTR_TREE_LIST
4285 static tree built_in_attributes[(int) ATTR_LAST];
4287 static bool c_attrs_initialized = false;
4289 static void c_init_attributes PARAMS ((void));
4291 /* Common initialization before parsing options. */
4293 c_common_init_options (lang)
4294 enum c_language_kind lang;
4297 parse_in = cpp_create_reader (lang == clk_c || lang == clk_objective_c
4298 ? CLK_GNUC89 : CLK_GNUCXX);
4299 if (lang == clk_objective_c)
4300 cpp_get_options (parse_in)->objc = 1;
4302 /* Mark as "unspecified" (see c_common_post_options). */
4303 flag_bounds_check = -1;
4306 /* Post-switch processing. */
4308 c_common_post_options ()
4310 cpp_post_options (parse_in);
4312 flag_inline_trees = 1;
4314 /* Use tree inlining if possible. Function instrumentation is only
4315 done in the RTL level, so we disable tree inlining. */
4316 if (! flag_instrument_function_entry_exit)
4318 if (!flag_no_inline)
4320 if (flag_inline_functions)
4322 flag_inline_trees = 2;
4323 flag_inline_functions = 0;
4327 /* If still "unspecified", make it match -fbounded-pointers. */
4328 if (flag_bounds_check == -1)
4329 flag_bounds_check = flag_bounded_pointers;
4331 /* Special format checking options don't work without -Wformat; warn if
4333 if (warn_format_y2k && !warn_format)
4334 warning ("-Wformat-y2k ignored without -Wformat");
4335 if (warn_format_extra_args && !warn_format)
4336 warning ("-Wformat-extra-args ignored without -Wformat");
4337 if (warn_format_zero_length && !warn_format)
4338 warning ("-Wformat-zero-length ignored without -Wformat");
4339 if (warn_format_nonliteral && !warn_format)
4340 warning ("-Wformat-nonliteral ignored without -Wformat");
4341 if (warn_format_security && !warn_format)
4342 warning ("-Wformat-security ignored without -Wformat");
4343 if (warn_missing_format_attribute && !warn_format)
4344 warning ("-Wmissing-format-attribute ignored without -Wformat");
4346 /* If an error has occurred in cpplib, note it so we fail
4348 errorcount += cpp_errors (parse_in);
4351 /* Hook that registers front end and target-specific built-ins. */
4353 cb_register_builtins (pfile)
4356 /* -undef turns off target-specific built-ins. */
4360 if (c_language == clk_cplusplus)
4362 if (SUPPORTS_ONE_ONLY)
4363 cpp_define (pfile, "__GXX_WEAK__=1");
4365 cpp_define (pfile, "__GXX_WEAK__=0");
4368 /* libgcc needs to know this. */
4369 if (USING_SJLJ_EXCEPTIONS)
4370 cpp_define (pfile, "__USING_SJLJ_EXCEPTIONS__");
4372 /* stddef.h needs to know these. */
4373 builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
4374 builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
4375 builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
4376 builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
4378 /* For use in assembly language. */
4379 builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
4380 builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
4383 builtin_define_with_value ("__VERSION__", version_string, 1);
4385 /* Other target-independent built-ins determined by command-line
4388 cpp_define (pfile, "__OPTIMIZE_SIZE__");
4390 cpp_define (pfile, "__OPTIMIZE__");
4393 cpp_define (pfile, "__STDC_HOSTED__=1");
4395 cpp_define (pfile, "__STDC_HOSTED__=0");
4397 if (fast_math_flags_set_p ())
4398 cpp_define (pfile, "__FAST_MATH__");
4400 cpp_define (pfile, "__NO_INLINE__");
4403 cpp_define (pfile, "__STRICT_ANSI__");
4405 if (!flag_signed_char)
4406 cpp_define (pfile, "__CHAR_UNSIGNED__");
4408 /* A straightforward target hook doesn't work, because of problems
4409 linking that hook's body when part of non-C front ends. */
4410 # define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
4411 # define builtin_define(TXT) cpp_define (pfile, TXT)
4412 # define builtin_assert(TXT) cpp_assert (pfile, TXT)
4413 TARGET_CPU_CPP_BUILTINS ();
4414 TARGET_OS_CPP_BUILTINS ();
4417 /* Pass an object-like macro. If it doesn't lie in the user's
4418 namespace, defines it unconditionally. Otherwise define a version
4419 with two leading underscores, and another version with two leading
4420 and trailing underscores, and define the original only if an ISO
4421 standard was not nominated.
4423 e.g. passing "unix" defines "__unix", "__unix__" and possibly
4424 "unix". Passing "_mips" defines "__mips", "__mips__" and possibly
4427 builtin_define_std (macro)
4430 size_t len = strlen (macro);
4431 char *buff = alloca (len + 5);
4435 /* prepend __ (or maybe just _) if in user's namespace. */
4436 memcpy (p, macro, len + 1);
4439 if (p[1] != '_' && !ISUPPER (p[1]))
4441 cpp_define (parse_in, p);
4443 /* If it was in user's namespace... */
4446 /* Define the macro with leading and following __. */
4452 cpp_define (parse_in, p);
4454 /* Finally, define the original macro if permitted. */
4456 cpp_define (parse_in, macro);
4460 /* Pass an object-like macro and a value to define it to. The third
4461 parameter says whether or not to turn the value into a string
4464 builtin_define_with_value (macro, expansion, is_str)
4466 const char *expansion;
4470 size_t mlen = strlen (macro);
4471 size_t elen = strlen (expansion);
4472 size_t extra = 2; /* space for an = and a NUL */
4475 extra += 2; /* space for two quote marks */
4477 buf = alloca (mlen + elen + extra);
4479 sprintf (buf, "%s=\"%s\"", macro, expansion);
4481 sprintf (buf, "%s=%s", macro, expansion);
4483 cpp_define (parse_in, buf);
4486 /* Front end initialization common to C, ObjC and C++. */
4488 c_common_init (filename)
4489 const char *filename;
4491 cpp_options *options = cpp_get_options (parse_in);
4493 /* Set up preprocessor arithmetic. Must be done after call to
4494 c_common_nodes_and_builtins for wchar_type_node to be good. */
4495 options->precision = TYPE_PRECISION (intmax_type_node);
4496 options->char_precision = TYPE_PRECISION (char_type_node);
4497 options->int_precision = TYPE_PRECISION (integer_type_node);
4498 options->wchar_precision = TYPE_PRECISION (wchar_type_node);
4499 options->unsigned_wchar = TREE_UNSIGNED (wchar_type_node);
4500 options->unsigned_char = !flag_signed_char;
4501 options->warn_multichar = warn_multichar;
4502 options->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS;
4504 /* Register preprocessor built-ins before calls to
4506 cpp_get_callbacks (parse_in)->register_builtins = cb_register_builtins;
4508 /* NULL is passed up to toplev.c and we exit quickly. */
4509 if (flag_preprocess_only)
4511 cpp_preprocess_file (parse_in);
4515 /* Do this before initializing pragmas, as then cpplib's hash table
4517 filename = init_c_lex (filename);
4521 if (!c_attrs_initialized)
4522 c_init_attributes ();
4527 /* Common finish hook for the C, ObjC and C++ front ends. */
4531 cpp_finish (parse_in);
4533 /* For performance, avoid tearing down cpplib's internal structures.
4534 Call cpp_errors () instead of cpp_destroy (). */
4535 errorcount += cpp_errors (parse_in);
4539 c_init_attributes ()
4541 /* Fill in the built_in_attributes array. */
4542 #define DEF_ATTR_NULL_TREE(ENUM) \
4543 built_in_attributes[(int) ENUM] = NULL_TREE;
4544 #define DEF_ATTR_INT(ENUM, VALUE) \
4545 built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0);
4546 #define DEF_ATTR_IDENT(ENUM, STRING) \
4547 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4548 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4549 built_in_attributes[(int) ENUM] \
4550 = tree_cons (built_in_attributes[(int) PURPOSE], \
4551 built_in_attributes[(int) VALUE], \
4552 built_in_attributes[(int) CHAIN]);
4553 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No initialization needed. */
4554 #include "builtin-attrs.def"
4555 #undef DEF_ATTR_NULL_TREE
4557 #undef DEF_ATTR_IDENT
4558 #undef DEF_ATTR_TREE_LIST
4560 ggc_add_tree_root (built_in_attributes, (int) ATTR_LAST);
4561 c_attrs_initialized = true;
4564 /* Depending on the name of DECL, apply default attributes to it. */
4567 c_common_insert_default_attributes (decl)
4570 tree name = DECL_NAME (decl);
4572 if (!c_attrs_initialized)
4573 c_init_attributes ();
4575 #define DEF_ATTR_NULL_TREE(ENUM) /* Nothing needed after initialization. */
4576 #define DEF_ATTR_INT(ENUM, VALUE)
4577 #define DEF_ATTR_IDENT(ENUM, STRING)
4578 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)
4579 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) \
4580 if ((PREDICATE) && name == built_in_attributes[(int) NAME]) \
4581 decl_attributes (&decl, built_in_attributes[(int) ATTRS], \
4582 ATTR_FLAG_BUILT_IN);
4583 #include "builtin-attrs.def"
4584 #undef DEF_ATTR_NULL_TREE
4586 #undef DEF_ATTR_IDENT
4587 #undef DEF_ATTR_TREE_LIST
4591 /* Output a -Wshadow warning MSGID about NAME, an IDENTIFIER_NODE, and
4592 additionally give the location of the previous declaration DECL. */
4594 shadow_warning (msgid, name, decl)
4598 warning ("declaration of `%s' shadows %s", IDENTIFIER_POINTER (name), msgid);
4599 warning_with_file_and_line (DECL_SOURCE_FILE (decl),
4600 DECL_SOURCE_LINE (decl),
4601 "shadowed declaration is here");
4604 /* Attribute handlers common to C front ends. */
4606 /* Handle a "packed" attribute; arguments as in
4607 struct attribute_spec.handler. */
4610 handle_packed_attribute (node, name, args, flags, no_add_attrs)
4613 tree args ATTRIBUTE_UNUSED;
4620 if (TREE_CODE (*node) == TYPE_DECL)
4621 type = &TREE_TYPE (*node);
4628 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4629 *type = build_type_copy (*type);
4630 TYPE_PACKED (*type) = 1;
4632 else if (TREE_CODE (*node) == FIELD_DECL)
4633 DECL_PACKED (*node) = 1;
4634 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
4635 used for DECL_REGISTER. It wouldn't mean anything anyway. */
4638 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4639 *no_add_attrs = true;
4645 /* Handle a "nocommon" attribute; arguments as in
4646 struct attribute_spec.handler. */
4649 handle_nocommon_attribute (node, name, args, flags, no_add_attrs)
4652 tree args ATTRIBUTE_UNUSED;
4653 int flags ATTRIBUTE_UNUSED;
4656 if (TREE_CODE (*node) == VAR_DECL)
4657 DECL_COMMON (*node) = 0;
4660 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4661 *no_add_attrs = true;
4667 /* Handle a "common" attribute; arguments as in
4668 struct attribute_spec.handler. */
4671 handle_common_attribute (node, name, args, flags, no_add_attrs)
4674 tree args ATTRIBUTE_UNUSED;
4675 int flags ATTRIBUTE_UNUSED;
4678 if (TREE_CODE (*node) == VAR_DECL)
4679 DECL_COMMON (*node) = 1;
4682 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4683 *no_add_attrs = true;
4689 /* Handle a "noreturn" attribute; arguments as in
4690 struct attribute_spec.handler. */
4693 handle_noreturn_attribute (node, name, args, flags, no_add_attrs)
4696 tree args ATTRIBUTE_UNUSED;
4697 int flags ATTRIBUTE_UNUSED;
4700 tree type = TREE_TYPE (*node);
4702 /* See FIXME comment in c_common_attribute_table. */
4703 if (TREE_CODE (*node) == FUNCTION_DECL)
4704 TREE_THIS_VOLATILE (*node) = 1;
4705 else if (TREE_CODE (type) == POINTER_TYPE
4706 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4708 = build_pointer_type
4709 (build_type_variant (TREE_TYPE (type),
4710 TREE_READONLY (TREE_TYPE (type)), 1));
4713 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4714 *no_add_attrs = true;
4720 /* Handle a "noinline" attribute; arguments as in
4721 struct attribute_spec.handler. */
4724 handle_noinline_attribute (node, name, args, flags, no_add_attrs)
4727 tree args ATTRIBUTE_UNUSED;
4728 int flags ATTRIBUTE_UNUSED;
4731 if (TREE_CODE (*node) == FUNCTION_DECL)
4732 DECL_UNINLINABLE (*node) = 1;
4735 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4736 *no_add_attrs = true;
4742 /* Handle a "always_inline" attribute; arguments as in
4743 struct attribute_spec.handler. */
4746 handle_always_inline_attribute (node, name, args, flags, no_add_attrs)
4749 tree args ATTRIBUTE_UNUSED;
4750 int flags ATTRIBUTE_UNUSED;
4753 if (TREE_CODE (*node) == FUNCTION_DECL)
4755 /* Do nothing else, just set the attribute. We'll get at
4756 it later with lookup_attribute. */
4760 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4761 *no_add_attrs = true;
4767 /* Handle a "used" attribute; arguments as in
4768 struct attribute_spec.handler. */
4771 handle_used_attribute (node, name, args, flags, no_add_attrs)
4774 tree args ATTRIBUTE_UNUSED;
4775 int flags ATTRIBUTE_UNUSED;
4778 if (TREE_CODE (*node) == FUNCTION_DECL)
4779 TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (*node))
4780 = TREE_USED (*node) = 1;
4783 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4784 *no_add_attrs = true;
4790 /* Handle a "unused" attribute; arguments as in
4791 struct attribute_spec.handler. */
4794 handle_unused_attribute (node, name, args, flags, no_add_attrs)
4797 tree args ATTRIBUTE_UNUSED;
4805 if (TREE_CODE (decl) == PARM_DECL
4806 || TREE_CODE (decl) == VAR_DECL
4807 || TREE_CODE (decl) == FUNCTION_DECL
4808 || TREE_CODE (decl) == LABEL_DECL
4809 || TREE_CODE (decl) == TYPE_DECL)
4810 TREE_USED (decl) = 1;
4813 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4814 *no_add_attrs = true;
4819 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4820 *node = build_type_copy (*node);
4821 TREE_USED (*node) = 1;
4827 /* Handle a "const" attribute; arguments as in
4828 struct attribute_spec.handler. */
4831 handle_const_attribute (node, name, args, flags, no_add_attrs)
4834 tree args ATTRIBUTE_UNUSED;
4835 int flags ATTRIBUTE_UNUSED;
4838 tree type = TREE_TYPE (*node);
4840 /* See FIXME comment on noreturn in c_common_attribute_table. */
4841 if (TREE_CODE (*node) == FUNCTION_DECL)
4842 TREE_READONLY (*node) = 1;
4843 else if (TREE_CODE (type) == POINTER_TYPE
4844 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
4846 = build_pointer_type
4847 (build_type_variant (TREE_TYPE (type), 1,
4848 TREE_THIS_VOLATILE (TREE_TYPE (type))));
4851 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4852 *no_add_attrs = true;
4858 /* Handle a "transparent_union" attribute; arguments as in
4859 struct attribute_spec.handler. */
4862 handle_transparent_union_attribute (node, name, args, flags, no_add_attrs)
4865 tree args ATTRIBUTE_UNUSED;
4869 tree decl = NULL_TREE;
4876 type = &TREE_TYPE (decl);
4877 is_type = TREE_CODE (*node) == TYPE_DECL;
4879 else if (TYPE_P (*node))
4880 type = node, is_type = 1;
4883 && TREE_CODE (*type) == UNION_TYPE
4885 || (TYPE_FIELDS (*type) != 0
4886 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))))
4888 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
4889 *type = build_type_copy (*type);
4890 TYPE_TRANSPARENT_UNION (*type) = 1;
4892 else if (decl != 0 && TREE_CODE (decl) == PARM_DECL
4893 && TREE_CODE (*type) == UNION_TYPE
4894 && TYPE_MODE (*type) == DECL_MODE (TYPE_FIELDS (*type)))
4895 DECL_TRANSPARENT_UNION (decl) = 1;
4898 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4899 *no_add_attrs = true;
4905 /* Handle a "constructor" attribute; arguments as in
4906 struct attribute_spec.handler. */
4909 handle_constructor_attribute (node, name, args, flags, no_add_attrs)
4912 tree args ATTRIBUTE_UNUSED;
4913 int flags ATTRIBUTE_UNUSED;
4917 tree type = TREE_TYPE (decl);
4919 if (TREE_CODE (decl) == FUNCTION_DECL
4920 && TREE_CODE (type) == FUNCTION_TYPE
4921 && decl_function_context (decl) == 0)
4923 DECL_STATIC_CONSTRUCTOR (decl) = 1;
4924 TREE_USED (decl) = 1;
4928 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4929 *no_add_attrs = true;
4935 /* Handle a "destructor" attribute; arguments as in
4936 struct attribute_spec.handler. */
4939 handle_destructor_attribute (node, name, args, flags, no_add_attrs)
4942 tree args ATTRIBUTE_UNUSED;
4943 int flags ATTRIBUTE_UNUSED;
4947 tree type = TREE_TYPE (decl);
4949 if (TREE_CODE (decl) == FUNCTION_DECL
4950 && TREE_CODE (type) == FUNCTION_TYPE
4951 && decl_function_context (decl) == 0)
4953 DECL_STATIC_DESTRUCTOR (decl) = 1;
4954 TREE_USED (decl) = 1;
4958 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4959 *no_add_attrs = true;
4965 /* Handle a "mode" attribute; arguments as in
4966 struct attribute_spec.handler. */
4969 handle_mode_attribute (node, name, args, flags, no_add_attrs)
4973 int flags ATTRIBUTE_UNUSED;
4978 *no_add_attrs = true;
4980 if (TREE_CODE (TREE_VALUE (args)) != IDENTIFIER_NODE)
4981 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
4985 const char *p = IDENTIFIER_POINTER (TREE_VALUE (args));
4986 int len = strlen (p);
4987 enum machine_mode mode = VOIDmode;
4990 if (len > 4 && p[0] == '_' && p[1] == '_'
4991 && p[len - 1] == '_' && p[len - 2] == '_')
4993 char *newp = (char *) alloca (len - 1);
4995 strcpy (newp, &p[2]);
4996 newp[len - 4] = '\0';
5000 /* Change this type to have a type with the specified mode.
5001 First check for the special modes. */
5002 if (! strcmp (p, "byte"))
5004 else if (!strcmp (p, "word"))
5006 else if (! strcmp (p, "pointer"))
5009 for (j = 0; j < NUM_MACHINE_MODES; j++)
5010 if (!strcmp (p, GET_MODE_NAME (j)))
5011 mode = (enum machine_mode) j;
5013 if (mode == VOIDmode)
5014 error ("unknown machine mode `%s'", p);
5015 else if (0 == (typefm = (*lang_hooks.types.type_for_mode)
5016 (mode, TREE_UNSIGNED (type))))
5017 error ("no data type for mode `%s'", p);
5020 /* No need to layout the type here. The caller should do this. */
5026 /* Handle a "section" attribute; arguments as in
5027 struct attribute_spec.handler. */
5030 handle_section_attribute (node, name, args, flags, no_add_attrs)
5032 tree name ATTRIBUTE_UNUSED;
5034 int flags ATTRIBUTE_UNUSED;
5039 if (targetm.have_named_sections)
5041 if ((TREE_CODE (decl) == FUNCTION_DECL
5042 || TREE_CODE (decl) == VAR_DECL)
5043 && TREE_CODE (TREE_VALUE (args)) == STRING_CST)
5045 if (TREE_CODE (decl) == VAR_DECL
5046 && current_function_decl != NULL_TREE
5047 && ! TREE_STATIC (decl))
5049 error_with_decl (decl,
5050 "section attribute cannot be specified for local variables");
5051 *no_add_attrs = true;
5054 /* The decl may have already been given a section attribute
5055 from a previous declaration. Ensure they match. */
5056 else if (DECL_SECTION_NAME (decl) != NULL_TREE
5057 && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)),
5058 TREE_STRING_POINTER (TREE_VALUE (args))) != 0)
5060 error_with_decl (*node,
5061 "section of `%s' conflicts with previous declaration");
5062 *no_add_attrs = true;
5065 DECL_SECTION_NAME (decl) = TREE_VALUE (args);
5069 error_with_decl (*node,
5070 "section attribute not allowed for `%s'");
5071 *no_add_attrs = true;
5076 error_with_decl (*node,
5077 "section attributes are not supported for this target");
5078 *no_add_attrs = true;
5084 /* Handle a "aligned" attribute; arguments as in
5085 struct attribute_spec.handler. */
5088 handle_aligned_attribute (node, name, args, flags, no_add_attrs)
5090 tree name ATTRIBUTE_UNUSED;
5095 tree decl = NULL_TREE;
5098 tree align_expr = (args ? TREE_VALUE (args)
5099 : size_int (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
5105 type = &TREE_TYPE (decl);
5106 is_type = TREE_CODE (*node) == TYPE_DECL;
5108 else if (TYPE_P (*node))
5109 type = node, is_type = 1;
5111 /* Strip any NOPs of any kind. */
5112 while (TREE_CODE (align_expr) == NOP_EXPR
5113 || TREE_CODE (align_expr) == CONVERT_EXPR
5114 || TREE_CODE (align_expr) == NON_LVALUE_EXPR)
5115 align_expr = TREE_OPERAND (align_expr, 0);
5117 if (TREE_CODE (align_expr) != INTEGER_CST)
5119 error ("requested alignment is not a constant");
5120 *no_add_attrs = true;
5122 else if ((i = tree_log2 (align_expr)) == -1)
5124 error ("requested alignment is not a power of 2");
5125 *no_add_attrs = true;
5127 else if (i > HOST_BITS_PER_INT - 2)
5129 error ("requested alignment is too large");
5130 *no_add_attrs = true;
5134 /* If we have a TYPE_DECL, then copy the type, so that we
5135 don't accidentally modify a builtin type. See pushdecl. */
5136 if (decl && TREE_TYPE (decl) != error_mark_node
5137 && DECL_ORIGINAL_TYPE (decl) == NULL_TREE)
5139 tree tt = TREE_TYPE (decl);
5140 *type = build_type_copy (*type);
5141 DECL_ORIGINAL_TYPE (decl) = tt;
5142 TYPE_NAME (*type) = decl;
5143 TREE_USED (*type) = TREE_USED (decl);
5144 TREE_TYPE (decl) = *type;
5146 else if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5147 *type = build_type_copy (*type);
5149 TYPE_ALIGN (*type) = (1 << i) * BITS_PER_UNIT;
5150 TYPE_USER_ALIGN (*type) = 1;
5152 else if (TREE_CODE (decl) != VAR_DECL
5153 && TREE_CODE (decl) != FIELD_DECL)
5155 error_with_decl (decl,
5156 "alignment may not be specified for `%s'");
5157 *no_add_attrs = true;
5161 DECL_ALIGN (decl) = (1 << i) * BITS_PER_UNIT;
5162 DECL_USER_ALIGN (decl) = 1;
5168 /* Handle a "weak" attribute; arguments as in
5169 struct attribute_spec.handler. */
5172 handle_weak_attribute (node, name, args, flags, no_add_attrs)
5174 tree name ATTRIBUTE_UNUSED;
5175 tree args ATTRIBUTE_UNUSED;
5176 int flags ATTRIBUTE_UNUSED;
5177 bool *no_add_attrs ATTRIBUTE_UNUSED;
5179 declare_weak (*node);
5184 /* Handle an "alias" attribute; arguments as in
5185 struct attribute_spec.handler. */
5188 handle_alias_attribute (node, name, args, flags, no_add_attrs)
5192 int flags ATTRIBUTE_UNUSED;
5197 if ((TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5198 || (TREE_CODE (decl) != FUNCTION_DECL && ! DECL_EXTERNAL (decl)))
5200 error_with_decl (decl,
5201 "`%s' defined both normally and as an alias");
5202 *no_add_attrs = true;
5204 else if (decl_function_context (decl) == 0)
5208 id = TREE_VALUE (args);
5209 if (TREE_CODE (id) != STRING_CST)
5211 error ("alias arg not a string");
5212 *no_add_attrs = true;
5215 id = get_identifier (TREE_STRING_POINTER (id));
5216 /* This counts as a use of the object pointed to. */
5219 if (TREE_CODE (decl) == FUNCTION_DECL)
5220 DECL_INITIAL (decl) = error_mark_node;
5222 DECL_EXTERNAL (decl) = 0;
5226 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5227 *no_add_attrs = true;
5233 /* Handle an "visibility" attribute; arguments as in
5234 struct attribute_spec.handler. */
5237 handle_visibility_attribute (node, name, args, flags, no_add_attrs)
5241 int flags ATTRIBUTE_UNUSED;
5246 if (decl_function_context (decl) != 0 || ! TREE_PUBLIC (decl))
5248 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5249 *no_add_attrs = true;
5255 id = TREE_VALUE (args);
5256 if (TREE_CODE (id) != STRING_CST)
5258 error ("visibility arg not a string");
5259 *no_add_attrs = true;
5262 if (strcmp (TREE_STRING_POINTER (id), "hidden")
5263 && strcmp (TREE_STRING_POINTER (id), "protected")
5264 && strcmp (TREE_STRING_POINTER (id), "internal"))
5266 error ("visibility arg must be one of \"hidden\", \"protected\" or \"internal\"");
5267 *no_add_attrs = true;
5275 /* Handle a "no_instrument_function" attribute; arguments as in
5276 struct attribute_spec.handler. */
5279 handle_no_instrument_function_attribute (node, name, args, flags, no_add_attrs)
5282 tree args ATTRIBUTE_UNUSED;
5283 int flags ATTRIBUTE_UNUSED;
5288 if (TREE_CODE (decl) != FUNCTION_DECL)
5290 error_with_decl (decl,
5291 "`%s' attribute applies only to functions",
5292 IDENTIFIER_POINTER (name));
5293 *no_add_attrs = true;
5295 else if (DECL_INITIAL (decl))
5297 error_with_decl (decl,
5298 "can't set `%s' attribute after definition",
5299 IDENTIFIER_POINTER (name));
5300 *no_add_attrs = true;
5303 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
5308 /* Handle a "malloc" attribute; arguments as in
5309 struct attribute_spec.handler. */
5312 handle_malloc_attribute (node, name, args, flags, no_add_attrs)
5315 tree args ATTRIBUTE_UNUSED;
5316 int flags ATTRIBUTE_UNUSED;
5319 if (TREE_CODE (*node) == FUNCTION_DECL)
5320 DECL_IS_MALLOC (*node) = 1;
5321 /* ??? TODO: Support types. */
5324 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5325 *no_add_attrs = true;
5331 /* Handle a "no_limit_stack" attribute; arguments as in
5332 struct attribute_spec.handler. */
5335 handle_no_limit_stack_attribute (node, name, args, flags, no_add_attrs)
5338 tree args ATTRIBUTE_UNUSED;
5339 int flags ATTRIBUTE_UNUSED;
5344 if (TREE_CODE (decl) != FUNCTION_DECL)
5346 error_with_decl (decl,
5347 "`%s' attribute applies only to functions",
5348 IDENTIFIER_POINTER (name));
5349 *no_add_attrs = true;
5351 else if (DECL_INITIAL (decl))
5353 error_with_decl (decl,
5354 "can't set `%s' attribute after definition",
5355 IDENTIFIER_POINTER (name));
5356 *no_add_attrs = true;
5359 DECL_NO_LIMIT_STACK (decl) = 1;
5364 /* Handle a "pure" attribute; arguments as in
5365 struct attribute_spec.handler. */
5368 handle_pure_attribute (node, name, args, flags, no_add_attrs)
5371 tree args ATTRIBUTE_UNUSED;
5372 int flags ATTRIBUTE_UNUSED;
5375 if (TREE_CODE (*node) == FUNCTION_DECL)
5376 DECL_IS_PURE (*node) = 1;
5377 /* ??? TODO: Support types. */
5380 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5381 *no_add_attrs = true;
5387 /* Handle a "deprecated" attribute; arguments as in
5388 struct attribute_spec.handler. */
5391 handle_deprecated_attribute (node, name, args, flags, no_add_attrs)
5394 tree args ATTRIBUTE_UNUSED;
5398 tree type = NULL_TREE;
5400 const char *what = NULL;
5405 type = TREE_TYPE (decl);
5407 if (TREE_CODE (decl) == TYPE_DECL
5408 || TREE_CODE (decl) == PARM_DECL
5409 || TREE_CODE (decl) == VAR_DECL
5410 || TREE_CODE (decl) == FUNCTION_DECL
5411 || TREE_CODE (decl) == FIELD_DECL)
5412 TREE_DEPRECATED (decl) = 1;
5416 else if (TYPE_P (*node))
5418 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
5419 *node = build_type_copy (*node);
5420 TREE_DEPRECATED (*node) = 1;
5428 *no_add_attrs = true;
5429 if (type && TYPE_NAME (type))
5431 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
5432 what = IDENTIFIER_POINTER (TYPE_NAME (*node));
5433 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
5434 && DECL_NAME (TYPE_NAME (type)))
5435 what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
5438 warning ("`%s' attribute ignored for `%s'",
5439 IDENTIFIER_POINTER (name), what);
5441 warning ("`%s' attribute ignored",
5442 IDENTIFIER_POINTER (name));
5448 /* Keep a list of vector type nodes we created in handle_vector_size_attribute,
5449 to prevent us from duplicating type nodes unnecessarily.
5450 The normal mechanism to prevent duplicates is to use type_hash_canon, but
5451 since we want to distinguish types that are essentially identical (except
5452 for their debug representation), we use a local list here. */
5453 static tree vector_type_node_list = 0;
5455 /* Handle a "vector_size" attribute; arguments as in
5456 struct attribute_spec.handler. */
5459 handle_vector_size_attribute (node, name, args, flags, no_add_attrs)
5463 int flags ATTRIBUTE_UNUSED;
5466 unsigned HOST_WIDE_INT vecsize, nunits;
5467 enum machine_mode mode, orig_mode, new_mode;
5468 tree type = *node, new_type = NULL_TREE;
5469 tree type_list_node;
5471 *no_add_attrs = true;
5473 if (! host_integerp (TREE_VALUE (args), 1))
5475 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5479 /* Get the vector size (in bytes). */
5480 vecsize = tree_low_cst (TREE_VALUE (args), 1);
5482 /* We need to provide for vector pointers, vector arrays, and
5483 functions returning vectors. For example:
5485 __attribute__((vector_size(16))) short *foo;
5487 In this case, the mode is SI, but the type being modified is
5488 HI, so we need to look further. */
5490 while (POINTER_TYPE_P (type)
5491 || TREE_CODE (type) == FUNCTION_TYPE
5492 || TREE_CODE (type) == ARRAY_TYPE)
5493 type = TREE_TYPE (type);
5495 /* Get the mode of the type being modified. */
5496 orig_mode = TYPE_MODE (type);
5498 if (TREE_CODE (type) == RECORD_TYPE
5499 || (GET_MODE_CLASS (orig_mode) != MODE_FLOAT
5500 && GET_MODE_CLASS (orig_mode) != MODE_INT)
5501 || ! host_integerp (TYPE_SIZE_UNIT (type), 1))
5503 error ("invalid vector type for attribute `%s'",
5504 IDENTIFIER_POINTER (name));
5508 /* Calculate how many units fit in the vector. */
5509 nunits = vecsize / tree_low_cst (TYPE_SIZE_UNIT (type), 1);
5511 /* Find a suitably sized vector. */
5512 new_mode = VOIDmode;
5513 for (mode = GET_CLASS_NARROWEST_MODE (GET_MODE_CLASS (orig_mode) == MODE_INT
5515 : MODE_VECTOR_FLOAT);
5517 mode = GET_MODE_WIDER_MODE (mode))
5518 if (vecsize == GET_MODE_SIZE (mode)
5519 && nunits == (unsigned HOST_WIDE_INT) GET_MODE_NUNITS (mode))
5525 if (new_mode == VOIDmode)
5527 error ("no vector mode with the size and type specified could be found");
5531 for (type_list_node = vector_type_node_list; type_list_node;
5532 type_list_node = TREE_CHAIN (type_list_node))
5534 tree other_type = TREE_VALUE (type_list_node);
5535 tree record = TYPE_DEBUG_REPRESENTATION_TYPE (other_type);
5536 tree fields = TYPE_FIELDS (record);
5537 tree field_type = TREE_TYPE (fields);
5538 tree array_type = TREE_TYPE (field_type);
5539 if (TREE_CODE (fields) != FIELD_DECL
5540 || TREE_CODE (field_type) != ARRAY_TYPE)
5543 if (TYPE_MODE (other_type) == mode && type == array_type)
5545 new_type = other_type;
5550 if (new_type == NULL_TREE)
5552 tree index, array, rt, list_node;
5554 new_type = (*lang_hooks.types.type_for_mode) (new_mode,
5555 TREE_UNSIGNED (type));
5559 error ("no vector mode with the size and type specified could be found");
5563 new_type = build_type_copy (new_type);
5565 /* Set the debug information here, because this is the only
5566 place where we know the underlying type for a vector made
5567 with vector_size. For debugging purposes we pretend a vector
5568 is an array within a structure. */
5569 index = build_int_2 (TYPE_VECTOR_SUBPARTS (new_type) - 1, 0);
5570 array = build_array_type (type, build_index_type (index));
5571 rt = make_node (RECORD_TYPE);
5573 TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
5574 DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
5576 TYPE_DEBUG_REPRESENTATION_TYPE (new_type) = rt;
5578 list_node = build_tree_list (NULL, new_type);
5579 TREE_CHAIN (list_node) = vector_type_node_list;
5580 vector_type_node_list = list_node;
5583 /* Build back pointers if needed. */
5584 *node = vector_size_helper (*node, new_type);
5589 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
5592 If we requested a pointer to a vector, build up the pointers that
5593 we stripped off while looking for the inner type. Similarly for
5594 return values from functions.
5596 The argument "type" is the top of the chain, and "bottom" is the
5597 new type which we will point to. */
5600 vector_size_helper (type, bottom)
5605 if (POINTER_TYPE_P (type))
5607 inner = vector_size_helper (TREE_TYPE (type), bottom);
5608 outer = build_pointer_type (inner);
5610 else if (TREE_CODE (type) == ARRAY_TYPE)
5612 inner = vector_size_helper (TREE_TYPE (type), bottom);
5613 outer = build_array_type (inner, TYPE_VALUES (type));
5615 else if (TREE_CODE (type) == FUNCTION_TYPE)
5617 inner = vector_size_helper (TREE_TYPE (type), bottom);
5618 outer = build_function_type (inner, TYPE_VALUES (type));
5623 TREE_READONLY (outer) = TREE_READONLY (type);
5624 TREE_THIS_VOLATILE (outer) = TREE_THIS_VOLATILE (type);
5629 /* Handle the "nonnull" attribute. */
5631 handle_nonnull_attribute (node, name, args, flags, no_add_attrs)
5633 tree name ATTRIBUTE_UNUSED;
5635 int flags ATTRIBUTE_UNUSED;
5639 unsigned HOST_WIDE_INT attr_arg_num;
5641 /* If no arguments are specified, all pointer arguments should be
5642 non-null. Veryify a full prototype is given so that the arguments
5643 will have the correct types when we actually check them later. */
5646 if (! TYPE_ARG_TYPES (type))
5648 error ("nonnull attribute without arguments on a non-prototype");
5649 *no_add_attrs = true;
5654 /* Argument list specified. Verify that each argument number references
5655 a pointer argument. */
5656 for (attr_arg_num = 1; args; args = TREE_CHAIN (args))
5659 unsigned HOST_WIDE_INT arg_num, ck_num;
5661 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
5663 error ("nonnull argument has invalid operand number (arg %lu)",
5664 (unsigned long) attr_arg_num);
5665 *no_add_attrs = true;
5669 argument = TYPE_ARG_TYPES (type);
5672 for (ck_num = 1; ; ck_num++)
5674 if (! argument || ck_num == arg_num)
5676 argument = TREE_CHAIN (argument);
5680 || TREE_CODE (TREE_VALUE (argument)) == VOID_TYPE)
5682 error ("nonnull argument with out-of-range operand number (arg %lu, operand %lu)",
5683 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5684 *no_add_attrs = true;
5688 if (TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE)
5690 error ("nonnull argument references non-pointer operand (arg %lu, operand %lu)",
5691 (unsigned long) attr_arg_num, (unsigned long) arg_num);
5692 *no_add_attrs = true;
5701 /* Check the argument list of a function call for null in argument slots
5702 that are marked as requiring a non-null pointer argument. */
5705 check_function_nonnull (attrs, params)
5709 tree a, args, param;
5712 for (a = attrs; a; a = TREE_CHAIN (a))
5714 if (is_attribute_p ("nonnull", TREE_PURPOSE (a)))
5716 args = TREE_VALUE (a);
5718 /* Walk the argument list. If we encounter an argument number we
5719 should check for non-null, do it. If the attribute has no args,
5720 then every pointer argument is checked (in which case the check
5721 for pointer type is done in check_nonnull_arg). */
5722 for (param = params, param_num = 1; ;
5723 param_num++, param = TREE_CHAIN (param))
5727 if (! args || nonnull_check_p (args, param_num))
5728 check_function_arguments_recurse (check_nonnull_arg, NULL,
5736 /* Helper for check_function_nonnull; given a list of operands which
5737 must be non-null in ARGS, determine if operand PARAM_NUM should be
5741 nonnull_check_p (args, param_num)
5743 unsigned HOST_WIDE_INT param_num;
5745 unsigned HOST_WIDE_INT arg_num;
5747 for (; args; args = TREE_CHAIN (args))
5749 if (! get_nonnull_operand (TREE_VALUE (args), &arg_num))
5752 if (arg_num == param_num)
5758 /* Check that the function argument PARAM (which is operand number
5759 PARAM_NUM) is non-null. This is called by check_function_nonnull
5760 via check_function_arguments_recurse. */
5763 check_nonnull_arg (ctx, param, param_num)
5764 void *ctx ATTRIBUTE_UNUSED;
5766 unsigned HOST_WIDE_INT param_num;
5768 /* Just skip checking the argument if it's not a pointer. This can
5769 happen if the "nonnull" attribute was given without an operand
5770 list (which means to check every pointer argument). */
5772 if (TREE_CODE (TREE_TYPE (param)) != POINTER_TYPE)
5775 if (integer_zerop (param))
5776 warning ("null argument where non-null required (arg %lu)",
5777 (unsigned long) param_num);
5780 /* Helper for nonnull attribute handling; fetch the operand number
5781 from the attribute argument list. */
5784 get_nonnull_operand (arg_num_expr, valp)
5786 unsigned HOST_WIDE_INT *valp;
5788 /* Strip any conversions from the arg number and verify they
5790 while (TREE_CODE (arg_num_expr) == NOP_EXPR
5791 || TREE_CODE (arg_num_expr) == CONVERT_EXPR
5792 || TREE_CODE (arg_num_expr) == NON_LVALUE_EXPR)
5793 arg_num_expr = TREE_OPERAND (arg_num_expr, 0);
5795 if (TREE_CODE (arg_num_expr) != INTEGER_CST
5796 || TREE_INT_CST_HIGH (arg_num_expr) != 0)
5799 *valp = TREE_INT_CST_LOW (arg_num_expr);
5803 /* Handle a "nothrow" attribute; arguments as in
5804 struct attribute_spec.handler. */
5807 handle_nothrow_attribute (node, name, args, flags, no_add_attrs)
5810 tree args ATTRIBUTE_UNUSED;
5811 int flags ATTRIBUTE_UNUSED;
5814 if (TREE_CODE (*node) == FUNCTION_DECL)
5815 TREE_NOTHROW (*node) = 1;
5816 /* ??? TODO: Support types. */
5819 warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
5820 *no_add_attrs = true;
5826 /* Check for valid arguments being passed to a function. */
5828 check_function_arguments (attrs, params)
5832 /* Check for null being passed in a pointer argument that must be
5833 non-null. We also need to do this if format checking is enabled. */
5836 check_function_nonnull (attrs, params);
5838 /* Check for errors in format strings. */
5841 check_function_format (NULL, attrs, params);
5844 /* Generic argument checking recursion routine. PARAM is the argument to
5845 be checked. PARAM_NUM is the number of the argument. CALLBACK is invoked
5846 once the argument is resolved. CTX is context for the callback. */
5848 check_function_arguments_recurse (callback, ctx, param, param_num)
5849 void (*callback) PARAMS ((void *, tree, unsigned HOST_WIDE_INT));
5852 unsigned HOST_WIDE_INT param_num;
5854 if (TREE_CODE (param) == NOP_EXPR)
5856 /* Strip coercion. */
5857 check_function_arguments_recurse (callback, ctx,
5858 TREE_OPERAND (param, 0), param_num);
5862 if (TREE_CODE (param) == CALL_EXPR)
5864 tree type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (param, 0)));
5866 bool found_format_arg = false;
5868 /* See if this is a call to a known internationalization function
5869 that modifies a format arg. Such a function may have multiple
5870 format_arg attributes (for example, ngettext). */
5872 for (attrs = TYPE_ATTRIBUTES (type);
5874 attrs = TREE_CHAIN (attrs))
5875 if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs)))
5878 tree format_num_expr;
5882 /* Extract the argument number, which was previously checked
5884 format_num_expr = TREE_VALUE (TREE_VALUE (attrs));
5885 while (TREE_CODE (format_num_expr) == NOP_EXPR
5886 || TREE_CODE (format_num_expr) == CONVERT_EXPR
5887 || TREE_CODE (format_num_expr) == NON_LVALUE_EXPR)
5888 format_num_expr = TREE_OPERAND (format_num_expr, 0);
5890 if (TREE_CODE (format_num_expr) != INTEGER_CST
5891 || TREE_INT_CST_HIGH (format_num_expr) != 0)
5894 format_num = TREE_INT_CST_LOW (format_num_expr);
5896 for (inner_args = TREE_OPERAND (param, 1), i = 1;
5898 inner_args = TREE_CHAIN (inner_args), i++)
5899 if (i == format_num)
5901 check_function_arguments_recurse (callback, ctx,
5902 TREE_VALUE (inner_args),
5904 found_format_arg = true;
5909 /* If we found a format_arg attribute and did a recursive check,
5910 we are done with checking this argument. Otherwise, we continue
5911 and this will be considered a non-literal. */
5912 if (found_format_arg)
5916 if (TREE_CODE (param) == COND_EXPR)
5918 /* Check both halves of the conditional expression. */
5919 check_function_arguments_recurse (callback, ctx,
5920 TREE_OPERAND (param, 1), param_num);
5921 check_function_arguments_recurse (callback, ctx,
5922 TREE_OPERAND (param, 2), param_num);
5926 (*callback) (ctx, param, param_num);