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"
40 cpp_reader *parse_in; /* Declared in c-lex.h. */
42 #undef WCHAR_TYPE_SIZE
43 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
45 /* We let tm.h override the types used here, to handle trivial differences
46 such as the choice of unsigned int or long unsigned int for size_t.
47 When machines start needing nontrivial differences in the size type,
48 it would be best to do something here to figure out automatically
49 from other information what type to use. */
52 #define SIZE_TYPE "long unsigned int"
56 #define WCHAR_TYPE "int"
60 #define PTRDIFF_TYPE "long int"
64 #define WINT_TYPE "unsigned int"
68 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
70 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
76 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
78 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
79 ? "long unsigned int" \
80 : "long long unsigned int"))
83 /* The variant of the C language being processed. */
85 enum c_language_kind c_language;
87 /* The following symbols are subsumed in the c_global_trees array, and
88 listed here individually for documentation purposes.
90 INTEGER_TYPE and REAL_TYPE nodes for the standard data types.
92 tree short_integer_type_node;
93 tree long_integer_type_node;
94 tree long_long_integer_type_node;
96 tree short_unsigned_type_node;
97 tree long_unsigned_type_node;
98 tree long_long_unsigned_type_node;
100 tree boolean_type_node;
101 tree boolean_false_node;
102 tree boolean_true_node;
104 tree ptrdiff_type_node;
106 tree unsigned_char_type_node;
107 tree signed_char_type_node;
108 tree wchar_type_node;
109 tree signed_wchar_type_node;
110 tree unsigned_wchar_type_node;
112 tree float_type_node;
113 tree double_type_node;
114 tree long_double_type_node;
116 tree complex_integer_type_node;
117 tree complex_float_type_node;
118 tree complex_double_type_node;
119 tree complex_long_double_type_node;
121 tree intQI_type_node;
122 tree intHI_type_node;
123 tree intSI_type_node;
124 tree intDI_type_node;
125 tree intTI_type_node;
127 tree unsigned_intQI_type_node;
128 tree unsigned_intHI_type_node;
129 tree unsigned_intSI_type_node;
130 tree unsigned_intDI_type_node;
131 tree unsigned_intTI_type_node;
133 tree widest_integer_literal_type_node;
134 tree widest_unsigned_literal_type_node;
136 Nodes for types `void *' and `const void *'.
138 tree ptr_type_node, const_ptr_type_node;
140 Nodes for types `char *' and `const char *'.
142 tree string_type_node, const_string_type_node;
144 Type `char[SOMENUMBER]'.
145 Used when an array of char is needed and the size is irrelevant.
147 tree char_array_type_node;
149 Type `int[SOMENUMBER]' or something like it.
150 Used when an array of int needed and the size is irrelevant.
152 tree int_array_type_node;
154 Type `wchar_t[SOMENUMBER]' or something like it.
155 Used when a wide string literal is created.
157 tree wchar_array_type_node;
159 Type `int ()' -- used for implicit declaration of functions.
161 tree default_function_type;
163 A VOID_TYPE node, packaged in a TREE_LIST.
167 The lazily created VAR_DECLs for __FUNCTION__, __PRETTY_FUNCTION__,
168 and __func__. (C doesn't generate __FUNCTION__ and__PRETTY_FUNCTION__
169 VAR_DECLS, but C++ does.)
171 tree function_name_decl_node;
172 tree pretty_function_name_decl_node;
173 tree c99_function_name_decl_node;
175 Stack of nested function name VAR_DECLs.
177 tree saved_function_name_decls;
181 tree c_global_trees[CTI_MAX];
183 /* Nonzero means don't recognize the non-ANSI builtin functions. */
187 /* Nonzero means don't recognize the non-ANSI builtin functions.
190 int flag_no_nonansi_builtin;
192 /* Nonzero means give `double' the same size as `float'. */
194 int flag_short_double;
196 /* Nonzero means give `wchar_t' the same size as `short'. */
198 int flag_short_wchar;
200 /* Nonzero means warn about possible violations of sequence point rules. */
202 int warn_sequence_point;
204 /* Nonzero means to warn about compile-time division by zero. */
205 int warn_div_by_zero = 1;
207 /* The elements of `ridpointers' are identifier nodes for the reserved
208 type names and storage classes. It is indexed by a RID_... value. */
211 tree (*make_fname_decl) PARAMS ((tree, int));
213 /* If non-NULL, the address of a language-specific function that
214 returns 1 for language-specific statement codes. */
215 int (*lang_statement_code_p) PARAMS ((enum tree_code));
217 /* If non-NULL, the address of a language-specific function that takes
218 any action required right before expand_function_end is called. */
219 void (*lang_expand_function_end) PARAMS ((void));
221 /* Nonzero means the expression being parsed will never be evaluated.
222 This is a count, since unevaluated expressions can nest. */
225 /* Information about how a function name is generated. */
228 tree *const decl; /* pointer to the VAR_DECL. */
229 const unsigned rid; /* RID number for the identifier. */
230 const int pretty; /* How pretty is it? */
233 /* The three ways of getting then name of the current function. */
235 const struct fname_var_t fname_vars[] =
237 /* C99 compliant __func__, must be first. */
238 {&c99_function_name_decl_node, RID_C99_FUNCTION_NAME, 0},
239 /* GCC __FUNCTION__ compliant. */
240 {&function_name_decl_node, RID_FUNCTION_NAME, 0},
241 /* GCC __PRETTY_FUNCTION__ compliant. */
242 {&pretty_function_name_decl_node, RID_PRETTY_FUNCTION_NAME, 1},
246 static int constant_fits_type_p PARAMS ((tree, tree));
248 /* Keep a stack of if statements. We record the number of compound
249 statements seen up to the if keyword, as well as the line number
250 and file of the if. If a potentially ambiguous else is seen, that
251 fact is recorded; the warning is issued when we can be sure that
252 the enclosing if statement does not have an else branch. */
262 static if_elt *if_stack;
264 /* Amount of space in the if statement stack. */
265 static int if_stack_space = 0;
268 static int if_stack_pointer = 0;
270 /* Record the start of an if-then, and record the start of it
271 for ambiguous else detection.
273 COND is the condition for the if-then statement.
275 IF_STMT is the statement node that has already been created for
276 this if-then statement. It is created before parsing the
277 condition to keep line number information accurate. */
280 c_expand_start_cond (cond, compstmt_count, if_stmt)
285 /* Make sure there is enough space on the stack. */
286 if (if_stack_space == 0)
289 if_stack = (if_elt *) xmalloc (10 * sizeof (if_elt));
291 else if (if_stack_space == if_stack_pointer)
293 if_stack_space += 10;
294 if_stack = (if_elt *) xrealloc (if_stack, if_stack_space * sizeof (if_elt));
297 IF_COND (if_stmt) = cond;
300 /* Record this if statement. */
301 if_stack[if_stack_pointer].compstmt_count = compstmt_count;
302 if_stack[if_stack_pointer].file = input_filename;
303 if_stack[if_stack_pointer].line = lineno;
304 if_stack[if_stack_pointer].needs_warning = 0;
305 if_stack[if_stack_pointer].if_stmt = if_stmt;
309 /* Called after the then-clause for an if-statement is processed. */
314 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
315 RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
318 /* Record the end of an if-then. Optionally warn if a nested
319 if statement had an ambiguous else clause. */
325 if (if_stack[if_stack_pointer].needs_warning)
326 warning_with_file_and_line (if_stack[if_stack_pointer].file,
327 if_stack[if_stack_pointer].line,
328 "suggest explicit braces to avoid ambiguous `else'");
329 last_expr_type = NULL_TREE;
332 /* Called between the then-clause and the else-clause
333 of an if-then-else. */
336 c_expand_start_else ()
338 /* An ambiguous else warning must be generated for the enclosing if
339 statement, unless we see an else branch for that one, too. */
341 && if_stack_pointer > 1
342 && (if_stack[if_stack_pointer - 1].compstmt_count
343 == if_stack[if_stack_pointer - 2].compstmt_count))
344 if_stack[if_stack_pointer - 2].needs_warning = 1;
346 /* Even if a nested if statement had an else branch, it can't be
347 ambiguous if this one also has an else. So don't warn in that
348 case. Also don't warn for any if statements nested in this else. */
349 if_stack[if_stack_pointer - 1].needs_warning = 0;
350 if_stack[if_stack_pointer - 1].compstmt_count--;
353 /* Called after the else-clause for an if-statement is processed. */
358 tree if_stmt = if_stack[if_stack_pointer - 1].if_stmt;
359 RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
362 /* Begin an if-statement. Returns a newly created IF_STMT if
365 Unlike the C++ front-end, we do not call add_stmt here; it is
366 probably safe to do so, but I am not very familiar with this
367 code so I am being extra careful not to change its behavior
368 beyond what is strictly necessary for correctness. */
374 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
378 /* Begin a while statement. Returns a newly created WHILE_STMT if
381 Unlike the C++ front-end, we do not call add_stmt here; it is
382 probably safe to do so, but I am not very familiar with this
383 code so I am being extra careful not to change its behavior
384 beyond what is strictly necessary for correctness. */
387 c_begin_while_stmt ()
390 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
395 c_finish_while_stmt_cond (cond, while_stmt)
399 WHILE_COND (while_stmt) = cond;
402 /* Push current bindings for the function name VAR_DECLS. */
408 tree saved = NULL_TREE;
410 for (ix = 0; fname_vars[ix].decl; ix++)
412 tree decl = *fname_vars[ix].decl;
416 saved = tree_cons (decl, build_int_2 (ix, 0), saved);
417 *fname_vars[ix].decl = NULL_TREE;
420 if (saved || saved_function_name_decls)
421 /* Normally they'll have been NULL, so only push if we've got a
422 stack, or they are non-NULL. */
423 saved_function_name_decls = tree_cons (saved, NULL_TREE,
424 saved_function_name_decls);
427 /* Finish up the current bindings, adding them into the
428 current function's statement tree. This is done by wrapping the
429 function's body in a COMPOUND_STMT containing these decls too. This
430 must be done _before_ finish_stmt_tree is called. If there is no
431 current function, we must be at file scope and no statements are
432 involved. Pop the previous bindings. */
435 finish_fname_decls ()
438 tree body = NULL_TREE;
439 tree stack = saved_function_name_decls;
441 for (; stack && TREE_VALUE (stack); stack = TREE_CHAIN (stack))
442 body = chainon (TREE_VALUE (stack), body);
446 /* They were called into existence, so add to statement tree. */
447 body = chainon (body,
448 TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)));
449 body = build_stmt (COMPOUND_STMT, body);
451 COMPOUND_STMT_NO_SCOPE (body) = 1;
452 TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)) = body;
455 for (ix = 0; fname_vars[ix].decl; ix++)
456 *fname_vars[ix].decl = NULL_TREE;
460 /* We had saved values, restore them. */
463 for (saved = TREE_PURPOSE (stack); saved; saved = TREE_CHAIN (saved))
465 tree decl = TREE_PURPOSE (saved);
466 unsigned ix = TREE_INT_CST_LOW (TREE_VALUE (saved));
468 *fname_vars[ix].decl = decl;
470 stack = TREE_CHAIN (stack);
472 saved_function_name_decls = stack;
475 /* Return the text name of the current function, suitable prettified
479 fname_as_string (pretty_p)
482 const char *name = NULL;
485 name = (current_function_decl
486 ? (*decl_printable_name) (current_function_decl, 2)
488 else if (current_function_decl && DECL_NAME (current_function_decl))
489 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
495 /* Return the text name of the current function, formatted as
496 required by the supplied RID value. */
504 for (ix = 0; fname_vars[ix].decl; ix++)
505 if (fname_vars[ix].rid == rid)
507 return fname_as_string (fname_vars[ix].pretty);
510 /* Return the VAR_DECL for a const char array naming the current
511 function. If the VAR_DECL has not yet been created, create it
512 now. RID indicates how it should be formatted and IDENTIFIER_NODE
513 ID is its name (unfortunately C and C++ hold the RID values of
514 keywords in different places, so we can't derive RID from ID in
515 this language independent code. */
523 tree decl = NULL_TREE;
525 for (ix = 0; fname_vars[ix].decl; ix++)
526 if (fname_vars[ix].rid == rid)
529 decl = *fname_vars[ix].decl;
532 tree saved_last_tree = last_tree;
534 decl = (*make_fname_decl) (id, fname_vars[ix].pretty);
535 if (last_tree != saved_last_tree)
537 /* We created some statement tree for the decl. This belongs
538 at the start of the function, so remove it now and reinsert
539 it after the function is complete. */
540 tree stmts = TREE_CHAIN (saved_last_tree);
542 TREE_CHAIN (saved_last_tree) = NULL_TREE;
543 last_tree = saved_last_tree;
544 saved_function_name_decls = tree_cons (decl, stmts,
545 saved_function_name_decls);
547 *fname_vars[ix].decl = decl;
549 if (!ix && !current_function_decl)
550 pedwarn_with_decl (decl, "`%s' is not defined outside of function scope");
555 /* Given a chain of STRING_CST nodes,
556 concatenate them into one STRING_CST
557 and give it a suitable array-of-chars data type. */
560 combine_strings (strings)
567 int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
569 const int nchars_max = flag_isoc99 ? 4095 : 509;
571 if (TREE_CHAIN (strings))
573 /* More than one in the chain, so concatenate. */
576 /* Don't include the \0 at the end of each substring,
577 except for the last one.
578 Count wide strings and ordinary strings separately. */
579 for (t = strings; t; t = TREE_CHAIN (t))
581 if (TREE_TYPE (t) == wchar_array_type_node)
583 wide_length += (TREE_STRING_LENGTH (t) - wchar_bytes);
588 length += (TREE_STRING_LENGTH (t) - 1);
589 if (C_ARTIFICIAL_STRING_P (t) && !in_system_header)
590 warning ("concatenation of string literals with __FUNCTION__ is deprecated. This feature will be removed in future");
594 /* If anything is wide, the non-wides will be converted,
595 which makes them take more space. */
597 length = length * wchar_bytes + wide_length;
601 /* Copy the individual strings into the new combined string.
602 If the combined string is wide, convert the chars to ints
603 for any individual strings that are not wide. */
606 for (t = strings; t; t = TREE_CHAIN (t))
608 int len = (TREE_STRING_LENGTH (t)
609 - ((TREE_TYPE (t) == wchar_array_type_node)
611 if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
613 memcpy (q, TREE_STRING_POINTER (t), len);
619 for (i = 0; i < len; i++)
621 if (BYTES_BIG_ENDIAN)
623 for (j=0; j<(WCHAR_TYPE_SIZE / BITS_PER_UNIT)-1; j++)
625 *q++ = TREE_STRING_POINTER (t)[i];
629 *q++ = TREE_STRING_POINTER (t)[i];
630 for (j=0; j<(WCHAR_TYPE_SIZE / BITS_PER_UNIT)-1; j++)
639 for (i = 0; i < wchar_bytes; i++)
645 value = build_string (length, p);
650 length = TREE_STRING_LENGTH (value);
651 if (TREE_TYPE (value) == wchar_array_type_node)
655 /* Compute the number of elements, for the array type. */
656 nchars = wide_flag ? length / wchar_bytes : length;
658 if (pedantic && nchars - 1 > nchars_max && c_language == clk_c)
659 pedwarn ("string length `%d' is greater than the length `%d' ISO C%d compilers are required to support",
660 nchars - 1, nchars_max, flag_isoc99 ? 99 : 89);
662 /* Create the array type for the string constant.
663 -Wwrite-strings says make the string constant an array of const char
664 so that copying it to a non-const pointer will get a warning.
665 For C++, this is the standard behavior. */
666 if (flag_const_strings && ! flag_writable_strings)
669 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
672 = build_array_type (elements,
673 build_index_type (build_int_2 (nchars - 1, 0)));
677 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
678 build_index_type (build_int_2 (nchars - 1, 0)));
680 TREE_CONSTANT (value) = 1;
681 TREE_READONLY (value) = ! flag_writable_strings;
682 TREE_STATIC (value) = 1;
686 static int is_valid_printf_arglist PARAMS ((tree));
687 static rtx c_expand_builtin PARAMS ((tree, rtx, enum machine_mode, enum expand_modifier));
688 static rtx c_expand_builtin_printf PARAMS ((tree, rtx, enum machine_mode,
689 enum expand_modifier, int, int));
690 static rtx c_expand_builtin_fprintf PARAMS ((tree, rtx, enum machine_mode,
691 enum expand_modifier, int, int));
693 /* Print a warning if a constant expression had overflow in folding.
694 Invoke this function on every expression that the language
695 requires to be a constant expression.
696 Note the ANSI C standard says it is erroneous for a
697 constant expression to overflow. */
700 constant_expression_warning (value)
703 if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
704 || TREE_CODE (value) == VECTOR_CST
705 || TREE_CODE (value) == COMPLEX_CST)
706 && TREE_CONSTANT_OVERFLOW (value) && pedantic)
707 pedwarn ("overflow in constant expression");
710 /* Print a warning if an expression had overflow in folding.
711 Invoke this function on every expression that
712 (1) appears in the source code, and
713 (2) might be a constant expression that overflowed, and
714 (3) is not already checked by convert_and_check;
715 however, do not invoke this function on operands of explicit casts. */
718 overflow_warning (value)
721 if ((TREE_CODE (value) == INTEGER_CST
722 || (TREE_CODE (value) == COMPLEX_CST
723 && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
724 && TREE_OVERFLOW (value))
726 TREE_OVERFLOW (value) = 0;
727 if (skip_evaluation == 0)
728 warning ("integer overflow in expression");
730 else if ((TREE_CODE (value) == REAL_CST
731 || (TREE_CODE (value) == COMPLEX_CST
732 && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
733 && TREE_OVERFLOW (value))
735 TREE_OVERFLOW (value) = 0;
736 if (skip_evaluation == 0)
737 warning ("floating point overflow in expression");
739 else if (TREE_CODE (value) == VECTOR_CST && TREE_OVERFLOW (value))
741 TREE_OVERFLOW (value) = 0;
742 if (skip_evaluation == 0)
743 warning ("vector overflow in expression");
747 /* Print a warning if a large constant is truncated to unsigned,
748 or if -Wconversion is used and a constant < 0 is converted to unsigned.
749 Invoke this function on every expression that might be implicitly
750 converted to an unsigned type. */
753 unsigned_conversion_warning (result, operand)
754 tree result, operand;
756 if (TREE_CODE (operand) == INTEGER_CST
757 && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
758 && TREE_UNSIGNED (TREE_TYPE (result))
759 && skip_evaluation == 0
760 && !int_fits_type_p (operand, TREE_TYPE (result)))
762 if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
763 /* This detects cases like converting -129 or 256 to unsigned char. */
764 warning ("large integer implicitly truncated to unsigned type");
765 else if (warn_conversion)
766 warning ("negative integer implicitly converted to unsigned type");
770 /* Nonzero if constant C has a value that is permissible
771 for type TYPE (an INTEGER_TYPE). */
774 constant_fits_type_p (c, type)
777 if (TREE_CODE (c) == INTEGER_CST)
778 return int_fits_type_p (c, type);
780 c = convert (type, c);
781 return !TREE_OVERFLOW (c);
784 /* Convert EXPR to TYPE, warning about conversion problems with constants.
785 Invoke this function on every expression that is converted implicitly,
786 i.e. because of language rules and not because of an explicit cast. */
789 convert_and_check (type, expr)
792 tree t = convert (type, expr);
793 if (TREE_CODE (t) == INTEGER_CST)
795 if (TREE_OVERFLOW (t))
797 TREE_OVERFLOW (t) = 0;
799 /* Do not diagnose overflow in a constant expression merely
800 because a conversion overflowed. */
801 TREE_CONSTANT_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (expr);
803 /* No warning for converting 0x80000000 to int. */
804 if (!(TREE_UNSIGNED (type) < TREE_UNSIGNED (TREE_TYPE (expr))
805 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
806 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr))))
807 /* If EXPR fits in the unsigned version of TYPE,
808 don't warn unless pedantic. */
810 || TREE_UNSIGNED (type)
811 || ! constant_fits_type_p (expr, unsigned_type (type)))
812 && skip_evaluation == 0)
813 warning ("overflow in implicit constant conversion");
816 unsigned_conversion_warning (t, expr);
821 /* A node in a list that describes references to variables (EXPR), which are
822 either read accesses if WRITER is zero, or write accesses, in which case
823 WRITER is the parent of EXPR. */
830 /* Used to implement a cache the results of a call to verify_tree. We only
831 use this for SAVE_EXPRs. */
834 struct tlist_cache *next;
835 struct tlist *cache_before_sp;
836 struct tlist *cache_after_sp;
840 /* Obstack to use when allocating tlist structures, and corresponding
842 static struct obstack tlist_obstack;
843 static char *tlist_firstobj = 0;
845 /* Keep track of the identifiers we've warned about, so we can avoid duplicate
847 static struct tlist *warned_ids;
848 /* SAVE_EXPRs need special treatment. We process them only once and then
849 cache the results. */
850 static struct tlist_cache *save_expr_cache;
852 static void add_tlist PARAMS ((struct tlist **, struct tlist *, tree, int));
853 static void merge_tlist PARAMS ((struct tlist **, struct tlist *, int));
854 static void verify_tree PARAMS ((tree, struct tlist **, struct tlist **, tree));
855 static int warning_candidate_p PARAMS ((tree));
856 static void warn_for_collisions PARAMS ((struct tlist *));
857 static void warn_for_collisions_1 PARAMS ((tree, tree, struct tlist *, int));
858 static struct tlist *new_tlist PARAMS ((struct tlist *, tree, tree));
859 static void verify_sequence_points PARAMS ((tree));
861 /* Create a new struct tlist and fill in its fields. */
862 static struct tlist *
863 new_tlist (next, t, writer)
869 l = (struct tlist *) obstack_alloc (&tlist_obstack, sizeof *l);
876 /* Add duplicates of the nodes found in ADD to the list *TO. If EXCLUDE_WRITER
877 is nonnull, we ignore any node we find which has a writer equal to it. */
880 add_tlist (to, add, exclude_writer, copy)
888 struct tlist *next = add->next;
891 if (! exclude_writer || add->writer != exclude_writer)
892 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
897 /* Merge the nodes of ADD into TO. This merging process is done so that for
898 each variable that already exists in TO, no new node is added; however if
899 there is a write access recorded in ADD, and an occurrence on TO is only
900 a read access, then the occurrence in TO will be modified to record the
904 merge_tlist (to, add, copy)
909 struct tlist **end = to;
918 struct tlist *next = add->next;
920 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
921 if (tmp2->expr == add->expr)
925 tmp2->writer = add->writer;
929 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
937 /* WRITTEN is a variable, WRITER is its parent. Warn if any of the variable
938 references in list LIST conflict with it, excluding reads if ONLY writers
942 warn_for_collisions_1 (written, writer, list, only_writes)
943 tree written, writer;
949 /* Avoid duplicate warnings. */
950 for (tmp = warned_ids; tmp; tmp = tmp->next)
951 if (tmp->expr == written)
956 if (list->expr == written
957 && list->writer != writer
958 && (! only_writes || list->writer))
960 warned_ids = new_tlist (warned_ids, written, NULL_TREE);
961 warning ("operation on `%s' may be undefined",
962 IDENTIFIER_POINTER (DECL_NAME (list->expr)));
968 /* Given a list LIST of references to variables, find whether any of these
969 can cause conflicts due to missing sequence points. */
972 warn_for_collisions (list)
977 for (tmp = list; tmp; tmp = tmp->next)
980 warn_for_collisions_1 (tmp->expr, tmp->writer, list, 0);
984 /* Return nonzero if X is a tree that can be verified by the sequence point
987 warning_candidate_p (x)
990 return TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == PARM_DECL;
993 /* Walk the tree X, and record accesses to variables. If X is written by the
994 parent tree, WRITER is the parent.
995 We store accesses in one of the two lists: PBEFORE_SP, and PNO_SP. If this
996 expression or its only operand forces a sequence point, then everything up
997 to the sequence point is stored in PBEFORE_SP. Everything else gets stored
999 Once we return, we will have emitted warnings if any subexpression before
1000 such a sequence point could be undefined. On a higher level, however, the
1001 sequence point may not be relevant, and we'll merge the two lists.
1003 Example: (b++, a) + b;
1004 The call that processes the COMPOUND_EXPR will store the increment of B
1005 in PBEFORE_SP, and the use of A in PNO_SP. The higher-level call that
1006 processes the PLUS_EXPR will need to merge the two lists so that
1007 eventually, all accesses end up on the same list (and we'll warn about the
1008 unordered subexpressions b++ and b.
1010 A note on merging. If we modify the former example so that our expression
1013 care must be taken not simply to add all three expressions into the final
1014 PNO_SP list. The function merge_tlist takes care of that by merging the
1015 before-SP list of the COMPOUND_EXPR into its after-SP list in a special
1016 way, so that no more than one access to B is recorded. */
1019 verify_tree (x, pbefore_sp, pno_sp, writer)
1021 struct tlist **pbefore_sp, **pno_sp;
1024 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1025 enum tree_code code;
1028 /* X may be NULL if it is the operand of an empty statement expression
1034 code = TREE_CODE (x);
1035 class = TREE_CODE_CLASS (code);
1037 if (warning_candidate_p (x))
1039 *pno_sp = new_tlist (*pno_sp, x, writer);
1049 case TRUTH_ANDIF_EXPR:
1050 case TRUTH_ORIF_EXPR:
1051 tmp_before = tmp_nosp = tmp_list3 = 0;
1052 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1053 warn_for_collisions (tmp_nosp);
1054 merge_tlist (pbefore_sp, tmp_before, 0);
1055 merge_tlist (pbefore_sp, tmp_nosp, 0);
1056 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, pno_sp, NULL_TREE);
1057 merge_tlist (pbefore_sp, tmp_list3, 0);
1061 tmp_before = tmp_list2 = 0;
1062 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
1063 warn_for_collisions (tmp_list2);
1064 merge_tlist (pbefore_sp, tmp_before, 0);
1065 merge_tlist (pbefore_sp, tmp_list2, 1);
1067 tmp_list3 = tmp_nosp = 0;
1068 verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
1069 warn_for_collisions (tmp_nosp);
1070 merge_tlist (pbefore_sp, tmp_list3, 0);
1072 tmp_list3 = tmp_list2 = 0;
1073 verify_tree (TREE_OPERAND (x, 2), &tmp_list3, &tmp_list2, NULL_TREE);
1074 warn_for_collisions (tmp_list2);
1075 merge_tlist (pbefore_sp, tmp_list3, 0);
1076 /* Rather than add both tmp_nosp and tmp_list2, we have to merge the
1077 two first, to avoid warning for (a ? b++ : b++). */
1078 merge_tlist (&tmp_nosp, tmp_list2, 0);
1079 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1082 case PREDECREMENT_EXPR:
1083 case PREINCREMENT_EXPR:
1084 case POSTDECREMENT_EXPR:
1085 case POSTINCREMENT_EXPR:
1086 verify_tree (TREE_OPERAND (x, 0), pno_sp, pno_sp, x);
1090 tmp_before = tmp_nosp = tmp_list3 = 0;
1091 verify_tree (TREE_OPERAND (x, 1), &tmp_before, &tmp_nosp, NULL_TREE);
1092 verify_tree (TREE_OPERAND (x, 0), &tmp_list3, &tmp_list3, x);
1093 /* Expressions inside the LHS are not ordered wrt. the sequence points
1094 in the RHS. Example:
1096 Despite the fact that the modification of "a" is in the before_sp
1097 list (tmp_before), it conflicts with the use of "a" in the LHS.
1098 We can handle this by adding the contents of tmp_list3
1099 to those of tmp_before, and redoing the collision warnings for that
1101 add_tlist (&tmp_before, tmp_list3, x, 1);
1102 warn_for_collisions (tmp_before);
1103 /* Exclude the LHS itself here; we first have to merge it into the
1104 tmp_nosp list. This is done to avoid warning for "a = a"; if we
1105 didn't exclude the LHS, we'd get it twice, once as a read and once
1107 add_tlist (pno_sp, tmp_list3, x, 0);
1108 warn_for_collisions_1 (TREE_OPERAND (x, 0), x, tmp_nosp, 1);
1110 merge_tlist (pbefore_sp, tmp_before, 0);
1111 if (warning_candidate_p (TREE_OPERAND (x, 0)))
1112 merge_tlist (&tmp_nosp, new_tlist (NULL, TREE_OPERAND (x, 0), x), 0);
1113 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 1);
1117 /* We need to warn about conflicts among arguments and conflicts between
1118 args and the function address. Side effects of the function address,
1119 however, are not ordered by the sequence point of the call. */
1120 tmp_before = tmp_nosp = tmp_list2 = tmp_list3 = 0;
1121 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1122 if (TREE_OPERAND (x, 1))
1123 verify_tree (TREE_OPERAND (x, 1), &tmp_list2, &tmp_list3, NULL_TREE);
1124 merge_tlist (&tmp_list3, tmp_list2, 0);
1125 add_tlist (&tmp_before, tmp_list3, NULL_TREE, 0);
1126 add_tlist (&tmp_before, tmp_nosp, NULL_TREE, 0);
1127 warn_for_collisions (tmp_before);
1128 add_tlist (pbefore_sp, tmp_before, NULL_TREE, 0);
1132 /* Scan all the list, e.g. indices of multi dimensional array. */
1135 tmp_before = tmp_nosp = 0;
1136 verify_tree (TREE_VALUE (x), &tmp_before, &tmp_nosp, NULL_TREE);
1137 merge_tlist (&tmp_nosp, tmp_before, 0);
1138 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1145 struct tlist_cache *t;
1146 for (t = save_expr_cache; t; t = t->next)
1152 t = (struct tlist_cache *) obstack_alloc (&tlist_obstack,
1154 t->next = save_expr_cache;
1156 save_expr_cache = t;
1158 tmp_before = tmp_nosp = 0;
1159 verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_nosp, NULL_TREE);
1160 warn_for_collisions (tmp_nosp);
1165 struct tlist *t = tmp_nosp;
1167 merge_tlist (&tmp_list3, t, 0);
1169 t->cache_before_sp = tmp_before;
1170 t->cache_after_sp = tmp_list3;
1172 merge_tlist (pbefore_sp, t->cache_before_sp, 1);
1173 add_tlist (pno_sp, t->cache_after_sp, NULL_TREE, 1);
1182 if (first_rtl_op (code) == 0)
1184 x = TREE_OPERAND (x, 0);
1200 int max = first_rtl_op (TREE_CODE (x));
1201 for (lp = 0; lp < max; lp++)
1203 tmp_before = tmp_nosp = 0;
1204 verify_tree (TREE_OPERAND (x, lp), &tmp_before, &tmp_nosp, NULL_TREE);
1205 merge_tlist (&tmp_nosp, tmp_before, 0);
1206 add_tlist (pno_sp, tmp_nosp, NULL_TREE, 0);
1213 /* Try to warn for undefined behaviour in EXPR due to missing sequence
1217 verify_sequence_points (expr)
1220 struct tlist *before_sp = 0, *after_sp = 0;
1223 save_expr_cache = 0;
1224 if (tlist_firstobj == 0)
1226 gcc_obstack_init (&tlist_obstack);
1227 tlist_firstobj = obstack_alloc (&tlist_obstack, 0);
1230 verify_tree (expr, &before_sp, &after_sp, 0);
1231 warn_for_collisions (after_sp);
1232 obstack_free (&tlist_obstack, tlist_firstobj);
1236 c_expand_expr_stmt (expr)
1239 /* Do default conversion if safe and possibly important,
1240 in case within ({...}). */
1241 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
1242 && (flag_isoc99 || lvalue_p (expr)))
1243 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
1244 expr = default_conversion (expr);
1246 if (warn_sequence_point)
1247 verify_sequence_points (expr);
1249 if (TREE_TYPE (expr) != error_mark_node
1250 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
1251 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
1252 error ("expression statement has incomplete type");
1254 last_expr_type = TREE_TYPE (expr);
1255 return add_stmt (build_stmt (EXPR_STMT, expr));
1258 /* Validate the expression after `case' and apply default promotions. */
1261 check_case_value (value)
1264 if (value == NULL_TREE)
1267 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1268 STRIP_TYPE_NOPS (value);
1269 /* In C++, the following is allowed:
1272 switch (...) { case i: ... }
1274 So, we try to reduce the VALUE to a constant that way. */
1275 if (c_language == clk_cplusplus)
1277 value = decl_constant_value (value);
1278 STRIP_TYPE_NOPS (value);
1279 value = fold (value);
1282 if (TREE_CODE (value) != INTEGER_CST
1283 && value != error_mark_node)
1285 error ("case label does not reduce to an integer constant");
1286 value = error_mark_node;
1289 /* Promote char or short to int. */
1290 value = default_conversion (value);
1292 constant_expression_warning (value);
1297 /* Return an integer type with BITS bits of precision,
1298 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1301 type_for_size (bits, unsignedp)
1305 if (bits == TYPE_PRECISION (integer_type_node))
1306 return unsignedp ? unsigned_type_node : integer_type_node;
1308 if (bits == TYPE_PRECISION (signed_char_type_node))
1309 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1311 if (bits == TYPE_PRECISION (short_integer_type_node))
1312 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1314 if (bits == TYPE_PRECISION (long_integer_type_node))
1315 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1317 if (bits == TYPE_PRECISION (long_long_integer_type_node))
1318 return (unsignedp ? long_long_unsigned_type_node
1319 : long_long_integer_type_node);
1321 if (bits == TYPE_PRECISION (widest_integer_literal_type_node))
1322 return (unsignedp ? widest_unsigned_literal_type_node
1323 : widest_integer_literal_type_node);
1325 if (bits <= TYPE_PRECISION (intQI_type_node))
1326 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1328 if (bits <= TYPE_PRECISION (intHI_type_node))
1329 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1331 if (bits <= TYPE_PRECISION (intSI_type_node))
1332 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1334 if (bits <= TYPE_PRECISION (intDI_type_node))
1335 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1340 /* Return a data type that has machine mode MODE.
1341 If the mode is an integer,
1342 then UNSIGNEDP selects between signed and unsigned types. */
1345 type_for_mode (mode, unsignedp)
1346 enum machine_mode mode;
1349 if (mode == TYPE_MODE (integer_type_node))
1350 return unsignedp ? unsigned_type_node : integer_type_node;
1352 if (mode == TYPE_MODE (signed_char_type_node))
1353 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1355 if (mode == TYPE_MODE (short_integer_type_node))
1356 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1358 if (mode == TYPE_MODE (long_integer_type_node))
1359 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1361 if (mode == TYPE_MODE (long_long_integer_type_node))
1362 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
1364 if (mode == TYPE_MODE (widest_integer_literal_type_node))
1365 return unsignedp ? widest_unsigned_literal_type_node
1366 : widest_integer_literal_type_node;
1369 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1372 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1375 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1378 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1380 #if HOST_BITS_PER_WIDE_INT >= 64
1381 if (mode == TYPE_MODE (intTI_type_node))
1382 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1385 if (mode == TYPE_MODE (float_type_node))
1386 return float_type_node;
1388 if (mode == TYPE_MODE (double_type_node))
1389 return double_type_node;
1391 if (mode == TYPE_MODE (long_double_type_node))
1392 return long_double_type_node;
1394 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
1395 return build_pointer_type (char_type_node);
1397 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
1398 return build_pointer_type (integer_type_node);
1400 #ifdef VECTOR_MODE_SUPPORTED_P
1401 if (VECTOR_MODE_SUPPORTED_P (mode))
1406 return unsignedp ? unsigned_V16QI_type_node : V16QI_type_node;
1408 return unsignedp ? unsigned_V8HI_type_node : V8HI_type_node;
1410 return unsignedp ? unsigned_V4SI_type_node : V4SI_type_node;
1412 return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node;
1414 return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node;
1416 return unsignedp ? unsigned_V8QI_type_node : V8QI_type_node;
1418 return V16SF_type_node;
1420 return V4SF_type_node;
1422 return V2SF_type_node;
1432 /* Return an unsigned type the same as TYPE in other respects. */
1434 unsigned_type (type)
1437 tree type1 = TYPE_MAIN_VARIANT (type);
1438 if (type1 == signed_char_type_node || type1 == char_type_node)
1439 return unsigned_char_type_node;
1440 if (type1 == integer_type_node)
1441 return unsigned_type_node;
1442 if (type1 == short_integer_type_node)
1443 return short_unsigned_type_node;
1444 if (type1 == long_integer_type_node)
1445 return long_unsigned_type_node;
1446 if (type1 == long_long_integer_type_node)
1447 return long_long_unsigned_type_node;
1448 if (type1 == widest_integer_literal_type_node)
1449 return widest_unsigned_literal_type_node;
1450 #if HOST_BITS_PER_WIDE_INT >= 64
1451 if (type1 == intTI_type_node)
1452 return unsigned_intTI_type_node;
1454 if (type1 == intDI_type_node)
1455 return unsigned_intDI_type_node;
1456 if (type1 == intSI_type_node)
1457 return unsigned_intSI_type_node;
1458 if (type1 == intHI_type_node)
1459 return unsigned_intHI_type_node;
1460 if (type1 == intQI_type_node)
1461 return unsigned_intQI_type_node;
1463 return signed_or_unsigned_type (1, type);
1466 /* Return a signed type the same as TYPE in other respects. */
1472 tree type1 = TYPE_MAIN_VARIANT (type);
1473 if (type1 == unsigned_char_type_node || type1 == char_type_node)
1474 return signed_char_type_node;
1475 if (type1 == unsigned_type_node)
1476 return integer_type_node;
1477 if (type1 == short_unsigned_type_node)
1478 return short_integer_type_node;
1479 if (type1 == long_unsigned_type_node)
1480 return long_integer_type_node;
1481 if (type1 == long_long_unsigned_type_node)
1482 return long_long_integer_type_node;
1483 if (type1 == widest_unsigned_literal_type_node)
1484 return widest_integer_literal_type_node;
1485 #if HOST_BITS_PER_WIDE_INT >= 64
1486 if (type1 == unsigned_intTI_type_node)
1487 return intTI_type_node;
1489 if (type1 == unsigned_intDI_type_node)
1490 return intDI_type_node;
1491 if (type1 == unsigned_intSI_type_node)
1492 return intSI_type_node;
1493 if (type1 == unsigned_intHI_type_node)
1494 return intHI_type_node;
1495 if (type1 == unsigned_intQI_type_node)
1496 return intQI_type_node;
1498 return signed_or_unsigned_type (0, type);
1501 /* Return a type the same as TYPE except unsigned or
1502 signed according to UNSIGNEDP. */
1505 signed_or_unsigned_type (unsignedp, type)
1509 if (! INTEGRAL_TYPE_P (type)
1510 || TREE_UNSIGNED (type) == unsignedp)
1513 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
1514 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
1515 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1516 return unsignedp ? unsigned_type_node : integer_type_node;
1517 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
1518 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
1519 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
1520 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
1521 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
1522 return (unsignedp ? long_long_unsigned_type_node
1523 : long_long_integer_type_node);
1524 if (TYPE_PRECISION (type) == TYPE_PRECISION (widest_integer_literal_type_node))
1525 return (unsignedp ? widest_unsigned_literal_type_node
1526 : widest_integer_literal_type_node);
1528 #if HOST_BITS_PER_WIDE_INT >= 64
1529 if (TYPE_PRECISION (type) == TYPE_PRECISION (intTI_type_node))
1530 return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
1532 if (TYPE_PRECISION (type) == TYPE_PRECISION (intDI_type_node))
1533 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
1534 if (TYPE_PRECISION (type) == TYPE_PRECISION (intSI_type_node))
1535 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1536 if (TYPE_PRECISION (type) == TYPE_PRECISION (intHI_type_node))
1537 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1538 if (TYPE_PRECISION (type) == TYPE_PRECISION (intQI_type_node))
1539 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1544 /* Return the minimum number of bits needed to represent VALUE in a
1545 signed or unsigned type, UNSIGNEDP says which. */
1548 min_precision (value, unsignedp)
1554 /* If the value is negative, compute its negative minus 1. The latter
1555 adjustment is because the absolute value of the largest negative value
1556 is one larger than the largest positive value. This is equivalent to
1557 a bit-wise negation, so use that operation instead. */
1559 if (tree_int_cst_sgn (value) < 0)
1560 value = fold (build1 (BIT_NOT_EXPR, TREE_TYPE (value), value));
1562 /* Return the number of bits needed, taking into account the fact
1563 that we need one more bit for a signed than unsigned type. */
1565 if (integer_zerop (value))
1568 log = tree_floor_log2 (value);
1570 return log + 1 + ! unsignedp;
1573 /* Print an error message for invalid operands to arith operation CODE.
1574 NOP_EXPR is used as a special case (see truthvalue_conversion). */
1577 binary_op_error (code)
1578 enum tree_code code;
1585 error ("invalid truth-value expression");
1589 opname = "+"; break;
1591 opname = "-"; break;
1593 opname = "*"; break;
1595 opname = "max"; break;
1597 opname = "min"; break;
1599 opname = "=="; break;
1601 opname = "!="; break;
1603 opname = "<="; break;
1605 opname = ">="; break;
1607 opname = "<"; break;
1609 opname = ">"; break;
1611 opname = "<<"; break;
1613 opname = ">>"; break;
1614 case TRUNC_MOD_EXPR:
1615 case FLOOR_MOD_EXPR:
1616 opname = "%"; break;
1617 case TRUNC_DIV_EXPR:
1618 case FLOOR_DIV_EXPR:
1619 opname = "/"; break;
1621 opname = "&"; break;
1623 opname = "|"; break;
1624 case TRUTH_ANDIF_EXPR:
1625 opname = "&&"; break;
1626 case TRUTH_ORIF_EXPR:
1627 opname = "||"; break;
1629 opname = "^"; break;
1632 opname = "rotate"; break;
1634 opname = "unknown"; break;
1636 error ("invalid operands to binary %s", opname);
1639 /* Subroutine of build_binary_op, used for comparison operations.
1640 See if the operands have both been converted from subword integer types
1641 and, if so, perhaps change them both back to their original type.
1642 This function is also responsible for converting the two operands
1643 to the proper common type for comparison.
1645 The arguments of this function are all pointers to local variables
1646 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
1647 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
1649 If this function returns nonzero, it means that the comparison has
1650 a constant value. What this function returns is an expression for
1654 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
1655 tree *op0_ptr, *op1_ptr;
1657 enum tree_code *rescode_ptr;
1660 tree op0 = *op0_ptr;
1661 tree op1 = *op1_ptr;
1662 int unsignedp0, unsignedp1;
1664 tree primop0, primop1;
1665 enum tree_code code = *rescode_ptr;
1667 /* Throw away any conversions to wider types
1668 already present in the operands. */
1670 primop0 = get_narrower (op0, &unsignedp0);
1671 primop1 = get_narrower (op1, &unsignedp1);
1673 /* Handle the case that OP0 does not *contain* a conversion
1674 but it *requires* conversion to FINAL_TYPE. */
1676 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
1677 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
1678 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
1679 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
1681 /* If one of the operands must be floated, we cannot optimize. */
1682 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
1683 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
1685 /* If first arg is constant, swap the args (changing operation
1686 so value is preserved), for canonicalization. Don't do this if
1687 the second arg is 0. */
1689 if (TREE_CONSTANT (primop0)
1690 && ! integer_zerop (primop1) && ! real_zerop (primop1))
1693 int temi = unsignedp0;
1701 unsignedp0 = unsignedp1;
1724 *rescode_ptr = code;
1727 /* If comparing an integer against a constant more bits wide,
1728 maybe we can deduce a value of 1 or 0 independent of the data.
1729 Or else truncate the constant now
1730 rather than extend the variable at run time.
1732 This is only interesting if the constant is the wider arg.
1733 Also, it is not safe if the constant is unsigned and the
1734 variable arg is signed, since in this case the variable
1735 would be sign-extended and then regarded as unsigned.
1736 Our technique fails in this case because the lowest/highest
1737 possible unsigned results don't follow naturally from the
1738 lowest/highest possible values of the variable operand.
1739 For just EQ_EXPR and NE_EXPR there is another technique that
1740 could be used: see if the constant can be faithfully represented
1741 in the other operand's type, by truncating it and reextending it
1742 and see if that preserves the constant's value. */
1744 if (!real1 && !real2
1745 && TREE_CODE (primop1) == INTEGER_CST
1746 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
1748 int min_gt, max_gt, min_lt, max_lt;
1749 tree maxval, minval;
1750 /* 1 if comparison is nominally unsigned. */
1751 int unsignedp = TREE_UNSIGNED (*restype_ptr);
1754 type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
1756 /* If TYPE is an enumeration, then we need to get its min/max
1757 values from it's underlying integral type, not the enumerated
1759 if (TREE_CODE (type) == ENUMERAL_TYPE)
1760 type = type_for_size (TYPE_PRECISION (type), unsignedp0);
1762 maxval = TYPE_MAX_VALUE (type);
1763 minval = TYPE_MIN_VALUE (type);
1765 if (unsignedp && !unsignedp0)
1766 *restype_ptr = signed_type (*restype_ptr);
1768 if (TREE_TYPE (primop1) != *restype_ptr)
1769 primop1 = convert (*restype_ptr, primop1);
1770 if (type != *restype_ptr)
1772 minval = convert (*restype_ptr, minval);
1773 maxval = convert (*restype_ptr, maxval);
1776 if (unsignedp && unsignedp0)
1778 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
1779 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
1780 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
1781 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
1785 min_gt = INT_CST_LT (primop1, minval);
1786 max_gt = INT_CST_LT (primop1, maxval);
1787 min_lt = INT_CST_LT (minval, primop1);
1788 max_lt = INT_CST_LT (maxval, primop1);
1792 /* This used to be a switch, but Genix compiler can't handle that. */
1793 if (code == NE_EXPR)
1795 if (max_lt || min_gt)
1796 val = boolean_true_node;
1798 else if (code == EQ_EXPR)
1800 if (max_lt || min_gt)
1801 val = boolean_false_node;
1803 else if (code == LT_EXPR)
1806 val = boolean_true_node;
1808 val = boolean_false_node;
1810 else if (code == GT_EXPR)
1813 val = boolean_true_node;
1815 val = boolean_false_node;
1817 else if (code == LE_EXPR)
1820 val = boolean_true_node;
1822 val = boolean_false_node;
1824 else if (code == GE_EXPR)
1827 val = boolean_true_node;
1829 val = boolean_false_node;
1832 /* If primop0 was sign-extended and unsigned comparison specd,
1833 we did a signed comparison above using the signed type bounds.
1834 But the comparison we output must be unsigned.
1836 Also, for inequalities, VAL is no good; but if the signed
1837 comparison had *any* fixed result, it follows that the
1838 unsigned comparison just tests the sign in reverse
1839 (positive values are LE, negative ones GE).
1840 So we can generate an unsigned comparison
1841 against an extreme value of the signed type. */
1843 if (unsignedp && !unsignedp0)
1850 primop1 = TYPE_MIN_VALUE (type);
1856 primop1 = TYPE_MAX_VALUE (type);
1863 type = unsigned_type (type);
1866 if (!max_gt && !unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
1868 /* This is the case of (char)x >?< 0x80, which people used to use
1869 expecting old C compilers to change the 0x80 into -0x80. */
1870 if (val == boolean_false_node)
1871 warning ("comparison is always false due to limited range of data type");
1872 if (val == boolean_true_node)
1873 warning ("comparison is always true due to limited range of data type");
1876 if (!min_lt && unsignedp0 && TREE_CODE (primop0) != INTEGER_CST)
1878 /* This is the case of (unsigned char)x >?< -1 or < 0. */
1879 if (val == boolean_false_node)
1880 warning ("comparison is always false due to limited range of data type");
1881 if (val == boolean_true_node)
1882 warning ("comparison is always true due to limited range of data type");
1887 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
1888 if (TREE_SIDE_EFFECTS (primop0))
1889 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
1893 /* Value is not predetermined, but do the comparison
1894 in the type of the operand that is not constant.
1895 TYPE is already properly set. */
1897 else if (real1 && real2
1898 && (TYPE_PRECISION (TREE_TYPE (primop0))
1899 == TYPE_PRECISION (TREE_TYPE (primop1))))
1900 type = TREE_TYPE (primop0);
1902 /* If args' natural types are both narrower than nominal type
1903 and both extend in the same manner, compare them
1904 in the type of the wider arg.
1905 Otherwise must actually extend both to the nominal
1906 common type lest different ways of extending
1908 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
1910 else if (unsignedp0 == unsignedp1 && real1 == real2
1911 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
1912 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
1914 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
1915 type = signed_or_unsigned_type (unsignedp0
1916 || TREE_UNSIGNED (*restype_ptr),
1918 /* Make sure shorter operand is extended the right way
1919 to match the longer operand. */
1920 primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
1922 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
1927 /* Here we must do the comparison on the nominal type
1928 using the args exactly as we received them. */
1929 type = *restype_ptr;
1933 if (!real1 && !real2 && integer_zerop (primop1)
1934 && TREE_UNSIGNED (*restype_ptr))
1940 /* All unsigned values are >= 0, so we warn if extra warnings
1941 are requested. However, if OP0 is a constant that is
1942 >= 0, the signedness of the comparison isn't an issue,
1943 so suppress the warning. */
1944 if (extra_warnings && !in_system_header
1945 && ! (TREE_CODE (primop0) == INTEGER_CST
1946 && ! TREE_OVERFLOW (convert (signed_type (type),
1948 warning ("comparison of unsigned expression >= 0 is always true");
1949 value = boolean_true_node;
1953 if (extra_warnings && !in_system_header
1954 && ! (TREE_CODE (primop0) == INTEGER_CST
1955 && ! TREE_OVERFLOW (convert (signed_type (type),
1957 warning ("comparison of unsigned expression < 0 is always false");
1958 value = boolean_false_node;
1967 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
1968 if (TREE_SIDE_EFFECTS (primop0))
1969 return build (COMPOUND_EXPR, TREE_TYPE (value),
1976 *op0_ptr = convert (type, primop0);
1977 *op1_ptr = convert (type, primop1);
1979 *restype_ptr = boolean_type_node;
1984 /* Return a tree for the sum or difference (RESULTCODE says which)
1985 of pointer PTROP and integer INTOP. */
1988 pointer_int_sum (resultcode, ptrop, intop)
1989 enum tree_code resultcode;
1997 /* The result is a pointer of the same type that is being added. */
1999 tree result_type = TREE_TYPE (ptrop);
2001 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2003 if (pedantic || warn_pointer_arith)
2004 pedwarn ("pointer of type `void *' used in arithmetic");
2005 size_exp = integer_one_node;
2007 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2009 if (pedantic || warn_pointer_arith)
2010 pedwarn ("pointer to a function used in arithmetic");
2011 size_exp = integer_one_node;
2013 else if (TREE_CODE (TREE_TYPE (result_type)) == METHOD_TYPE)
2015 if (pedantic || warn_pointer_arith)
2016 pedwarn ("pointer to member function used in arithmetic");
2017 size_exp = integer_one_node;
2019 else if (TREE_CODE (TREE_TYPE (result_type)) == OFFSET_TYPE)
2021 if (pedantic || warn_pointer_arith)
2022 pedwarn ("pointer to a member used in arithmetic");
2023 size_exp = integer_one_node;
2026 size_exp = size_in_bytes (TREE_TYPE (result_type));
2028 /* If what we are about to multiply by the size of the elements
2029 contains a constant term, apply distributive law
2030 and multiply that constant term separately.
2031 This helps produce common subexpressions. */
2033 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2034 && ! TREE_CONSTANT (intop)
2035 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2036 && TREE_CONSTANT (size_exp)
2037 /* If the constant comes from pointer subtraction,
2038 skip this optimization--it would cause an error. */
2039 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2040 /* If the constant is unsigned, and smaller than the pointer size,
2041 then we must skip this optimization. This is because it could cause
2042 an overflow error if the constant is negative but INTOP is not. */
2043 && (! TREE_UNSIGNED (TREE_TYPE (intop))
2044 || (TYPE_PRECISION (TREE_TYPE (intop))
2045 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2047 enum tree_code subcode = resultcode;
2048 tree int_type = TREE_TYPE (intop);
2049 if (TREE_CODE (intop) == MINUS_EXPR)
2050 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2051 /* Convert both subexpression types to the type of intop,
2052 because weird cases involving pointer arithmetic
2053 can result in a sum or difference with different type args. */
2054 ptrop = build_binary_op (subcode, ptrop,
2055 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2056 intop = convert (int_type, TREE_OPERAND (intop, 0));
2059 /* Convert the integer argument to a type the same size as sizetype
2060 so the multiply won't overflow spuriously. */
2062 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2063 || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
2064 intop = convert (type_for_size (TYPE_PRECISION (sizetype),
2065 TREE_UNSIGNED (sizetype)), intop);
2067 /* Replace the integer argument with a suitable product by the object size.
2068 Do this multiplication as signed, then convert to the appropriate
2069 pointer type (actually unsigned integral). */
2071 intop = convert (result_type,
2072 build_binary_op (MULT_EXPR, intop,
2073 convert (TREE_TYPE (intop), size_exp), 1));
2075 /* Create the sum or difference. */
2077 result = build (resultcode, result_type, ptrop, intop);
2079 folded = fold (result);
2080 if (folded == result)
2081 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2085 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
2086 or validate its data type for an `if' or `while' statement or ?..: exp.
2088 This preparation consists of taking the ordinary
2089 representation of an expression expr and producing a valid tree
2090 boolean expression describing whether expr is nonzero. We could
2091 simply always do build_binary_op (NE_EXPR, expr, boolean_false_node, 1),
2092 but we optimize comparisons, &&, ||, and !.
2094 The resulting type should always be `boolean_type_node'. */
2097 truthvalue_conversion (expr)
2100 if (TREE_CODE (expr) == ERROR_MARK)
2103 #if 0 /* This appears to be wrong for C++. */
2104 /* These really should return error_mark_node after 2.4 is stable.
2105 But not all callers handle ERROR_MARK properly. */
2106 switch (TREE_CODE (TREE_TYPE (expr)))
2109 error ("struct type value used where scalar is required");
2110 return boolean_false_node;
2113 error ("union type value used where scalar is required");
2114 return boolean_false_node;
2117 error ("array type value used where scalar is required");
2118 return boolean_false_node;
2125 switch (TREE_CODE (expr))
2128 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
2129 case TRUTH_ANDIF_EXPR:
2130 case TRUTH_ORIF_EXPR:
2131 case TRUTH_AND_EXPR:
2133 case TRUTH_XOR_EXPR:
2134 case TRUTH_NOT_EXPR:
2135 TREE_TYPE (expr) = boolean_type_node;
2142 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
2145 return real_zerop (expr) ? boolean_false_node : boolean_true_node;
2148 /* If we are taking the address of an external decl, it might be zero
2149 if it is weak, so we cannot optimize. */
2150 if (DECL_P (TREE_OPERAND (expr, 0))
2151 && DECL_EXTERNAL (TREE_OPERAND (expr, 0)))
2154 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
2155 return build (COMPOUND_EXPR, boolean_type_node,
2156 TREE_OPERAND (expr, 0), boolean_true_node);
2158 return boolean_true_node;
2161 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
2162 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2163 truthvalue_conversion (TREE_OPERAND (expr, 0)),
2164 truthvalue_conversion (TREE_OPERAND (expr, 1)),
2171 /* These don't change whether an object is non-zero or zero. */
2172 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2176 /* These don't change whether an object is zero or non-zero, but
2177 we can't ignore them if their second arg has side-effects. */
2178 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
2179 return build (COMPOUND_EXPR, boolean_type_node, TREE_OPERAND (expr, 1),
2180 truthvalue_conversion (TREE_OPERAND (expr, 0)));
2182 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2185 /* Distribute the conversion into the arms of a COND_EXPR. */
2186 return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0),
2187 truthvalue_conversion (TREE_OPERAND (expr, 1)),
2188 truthvalue_conversion (TREE_OPERAND (expr, 2))));
2191 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
2192 since that affects how `default_conversion' will behave. */
2193 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
2194 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2196 /* fall through... */
2198 /* If this is widening the argument, we can ignore it. */
2199 if (TYPE_PRECISION (TREE_TYPE (expr))
2200 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2201 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2205 /* With IEEE arithmetic, x - x may not equal 0, so we can't optimize
2207 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT
2208 && TREE_CODE (TREE_TYPE (expr)) == REAL_TYPE)
2210 /* fall through... */
2212 /* This and MINUS_EXPR can be changed into a comparison of the
2214 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2215 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2216 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2217 TREE_OPERAND (expr, 1), 1);
2218 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2219 fold (build1 (NOP_EXPR,
2220 TREE_TYPE (TREE_OPERAND (expr, 0)),
2221 TREE_OPERAND (expr, 1))), 1);
2224 if (integer_onep (TREE_OPERAND (expr, 1))
2225 && TREE_TYPE (expr) != boolean_type_node)
2226 /* Using convert here would cause infinite recursion. */
2227 return build1 (NOP_EXPR, boolean_type_node, expr);
2231 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2232 warning ("suggest parentheses around assignment used as truth value");
2239 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2241 tree tem = save_expr (expr);
2242 return (build_binary_op
2243 ((TREE_SIDE_EFFECTS (expr)
2244 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2245 truthvalue_conversion (build_unary_op (REALPART_EXPR, tem, 0)),
2246 truthvalue_conversion (build_unary_op (IMAGPART_EXPR, tem, 0)),
2250 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2253 static tree builtin_function_2 PARAMS ((const char *, const char *, tree, tree,
2254 int, enum built_in_class, int, int,
2257 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2258 down to the element type of an array. */
2261 c_build_qualified_type (type, type_quals)
2265 /* A restrict-qualified pointer type must be a pointer to object or
2266 incomplete type. Note that the use of POINTER_TYPE_P also allows
2267 REFERENCE_TYPEs, which is appropriate for C++. Unfortunately,
2268 the C++ front-end also use POINTER_TYPE for pointer-to-member
2269 values, so even though it should be illegal to use `restrict'
2270 with such an entity we don't flag that here. Thus, special case
2271 code for that case is required in the C++ front-end. */
2272 if ((type_quals & TYPE_QUAL_RESTRICT)
2273 && (!POINTER_TYPE_P (type)
2274 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2276 error ("invalid use of `restrict'");
2277 type_quals &= ~TYPE_QUAL_RESTRICT;
2280 if (TREE_CODE (type) == ARRAY_TYPE)
2281 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
2283 TYPE_DOMAIN (type));
2284 return build_qualified_type (type, type_quals);
2287 /* Apply the TYPE_QUALS to the new DECL. */
2290 c_apply_type_quals_to_decl (type_quals, decl)
2294 if ((type_quals & TYPE_QUAL_CONST)
2295 || (TREE_TYPE (decl)
2296 && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
2297 TREE_READONLY (decl) = 1;
2298 if (type_quals & TYPE_QUAL_VOLATILE)
2300 TREE_SIDE_EFFECTS (decl) = 1;
2301 TREE_THIS_VOLATILE (decl) = 1;
2303 if (type_quals & TYPE_QUAL_RESTRICT)
2305 if (!TREE_TYPE (decl)
2306 || !POINTER_TYPE_P (TREE_TYPE (decl))
2307 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
2308 error ("invalid use of `restrict'");
2309 else if (flag_strict_aliasing)
2310 /* Indicate we need to make a unique alias set for this pointer.
2311 We can't do it here because it might be pointing to an
2313 DECL_POINTER_ALIAS_SET (decl) = -2;
2318 /* Return the typed-based alias set for T, which may be an expression
2319 or a type. Return -1 if we don't do anything special. */
2322 c_common_get_alias_set (t)
2327 /* We know nothing about vector types */
2328 if (TREE_CODE (t) == VECTOR_TYPE)
2331 /* Permit type-punning when accessing a union, provided the access
2332 is directly through the union. For example, this code does not
2333 permit taking the address of a union member and then storing
2334 through it. Even the type-punning allowed here is a GCC
2335 extension, albeit a common and useful one; the C standard says
2336 that such accesses have implementation-defined behavior. */
2338 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2339 u = TREE_OPERAND (u, 0))
2340 if (TREE_CODE (u) == COMPONENT_REF
2341 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2344 /* If this is a char *, the ANSI C standard says it can alias
2345 anything. Note that all references need do this. */
2346 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'r'
2347 && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
2348 && TYPE_PRECISION (TREE_TYPE (t)) == TYPE_PRECISION (char_type_node))
2351 /* That's all the expressions we handle specially. */
2355 /* The C standard specifically allows aliasing between signed and
2356 unsigned variants of the same type. We treat the signed
2357 variant as canonical. */
2358 if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
2360 tree t1 = signed_type (t);
2362 /* t1 == t can happen for boolean nodes which are always unsigned. */
2364 return get_alias_set (t1);
2366 else if (POINTER_TYPE_P (t))
2370 /* Unfortunately, there is no canonical form of a pointer type.
2371 In particular, if we have `typedef int I', then `int *', and
2372 `I *' are different types. So, we have to pick a canonical
2373 representative. We do this below.
2375 Technically, this approach is actually more conservative that
2376 it needs to be. In particular, `const int *' and `int *'
2377 should be in different alias sets, according to the C and C++
2378 standard, since their types are not the same, and so,
2379 technically, an `int **' and `const int **' cannot point at
2382 But, the standard is wrong. In particular, this code is
2387 const int* const* cipp = &ipp;
2389 And, it doesn't make sense for that to be legal unless you
2390 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2391 the pointed-to types. This issue has been reported to the
2393 t1 = build_type_no_quals (t);
2395 return get_alias_set (t1);
2401 /* Implement the __alignof keyword: Return the minimum required
2402 alignment of TYPE, measured in bytes. */
2408 enum tree_code code = TREE_CODE (type);
2411 /* In C++, sizeof applies to the referent. Handle alignof the same way. */
2412 if (code == REFERENCE_TYPE)
2414 type = TREE_TYPE (type);
2415 code = TREE_CODE (type);
2418 if (code == FUNCTION_TYPE)
2419 t = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2420 else if (code == VOID_TYPE || code == ERROR_MARK)
2422 else if (!COMPLETE_TYPE_P (type))
2424 error ("__alignof__ applied to an incomplete type");
2428 t = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
2430 return fold (build1 (NOP_EXPR, c_size_type_node, t));
2433 /* Implement the __alignof keyword: Return the minimum required
2434 alignment of EXPR, measured in bytes. For VAR_DECL's and
2435 FIELD_DECL's return DECL_ALIGN (which can be set from an
2436 "aligned" __attribute__ specification). */
2439 c_alignof_expr (expr)
2444 if (TREE_CODE (expr) == VAR_DECL)
2445 t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
2447 else if (TREE_CODE (expr) == COMPONENT_REF
2448 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2450 error ("`__alignof' applied to a bit-field");
2453 else if (TREE_CODE (expr) == COMPONENT_REF
2454 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2455 t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
2457 else if (TREE_CODE (expr) == INDIRECT_REF)
2459 tree t = TREE_OPERAND (expr, 0);
2461 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2463 while (TREE_CODE (t) == NOP_EXPR
2464 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2468 t = TREE_OPERAND (t, 0);
2469 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2470 if (thisalign > bestalign)
2471 best = t, bestalign = thisalign;
2473 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2476 return c_alignof (TREE_TYPE (expr));
2478 return fold (build1 (NOP_EXPR, c_size_type_node, t));
2481 /* Give the specifications for the format attributes, used by C and all
2484 static const struct attribute_spec c_format_attribute_table[] =
2486 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2487 { "format", 3, 3, false, true, true,
2488 handle_format_attribute },
2489 { "format_arg", 1, 1, false, true, true,
2490 handle_format_arg_attribute },
2491 { NULL, 0, 0, false, false, false, NULL }
2494 /* Build tree nodes and builtin functions common to both C and C++ language
2498 c_common_nodes_and_builtins ()
2502 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2503 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2504 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2505 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2506 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2507 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2508 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2509 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2510 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2511 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2512 #include "builtin-types.def"
2513 #undef DEF_PRIMITIVE_TYPE
2514 #undef DEF_FUNCTION_TYPE_0
2515 #undef DEF_FUNCTION_TYPE_1
2516 #undef DEF_FUNCTION_TYPE_2
2517 #undef DEF_FUNCTION_TYPE_3
2518 #undef DEF_FUNCTION_TYPE_4
2519 #undef DEF_FUNCTION_TYPE_VAR_0
2520 #undef DEF_FUNCTION_TYPE_VAR_1
2521 #undef DEF_FUNCTION_TYPE_VAR_2
2522 #undef DEF_POINTER_TYPE
2526 typedef enum builtin_type builtin_type;
2528 tree builtin_types[(int) BT_LAST];
2529 int wchar_type_size;
2530 tree array_domain_type;
2531 tree va_list_ref_type_node;
2532 tree va_list_arg_type_node;
2534 /* We must initialize this before any builtin functions (which might have
2535 attributes) are declared. (c_common_init is too late.) */
2536 format_attribute_table = c_format_attribute_table;
2538 /* Define `int' and `char' first so that dbx will output them first. */
2539 record_builtin_type (RID_INT, NULL, integer_type_node);
2540 record_builtin_type (RID_CHAR, "char", char_type_node);
2542 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
2543 "unsigned long", "long long unsigned" and "unsigned short" were in C++
2544 but not C. Are the conditionals here needed? */
2545 if (c_language == clk_cplusplus)
2546 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
2547 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
2548 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
2549 record_builtin_type (RID_MAX, "long unsigned int",
2550 long_unsigned_type_node);
2551 if (c_language == clk_cplusplus)
2552 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
2553 record_builtin_type (RID_MAX, "long long int",
2554 long_long_integer_type_node);
2555 record_builtin_type (RID_MAX, "long long unsigned int",
2556 long_long_unsigned_type_node);
2557 if (c_language == clk_cplusplus)
2558 record_builtin_type (RID_MAX, "long long unsigned",
2559 long_long_unsigned_type_node);
2560 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
2561 record_builtin_type (RID_MAX, "short unsigned int",
2562 short_unsigned_type_node);
2563 if (c_language == clk_cplusplus)
2564 record_builtin_type (RID_MAX, "unsigned short",
2565 short_unsigned_type_node);
2567 /* Define both `signed char' and `unsigned char'. */
2568 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
2569 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
2571 /* These are types that type_for_size and type_for_mode use. */
2572 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
2573 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
2574 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
2575 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
2576 #if HOST_BITS_PER_WIDE_INT >= 64
2577 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
2579 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
2580 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
2581 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
2582 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
2583 #if HOST_BITS_PER_WIDE_INT >= 64
2584 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
2587 /* Create the widest literal types. */
2588 widest_integer_literal_type_node
2589 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
2590 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2591 widest_integer_literal_type_node));
2593 widest_unsigned_literal_type_node
2594 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
2595 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2596 widest_unsigned_literal_type_node));
2598 /* `unsigned long' is the standard type for sizeof.
2599 Note that stddef.h uses `unsigned long',
2600 and this must agree, even if long and int are the same size. */
2602 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
2603 signed_size_type_node = signed_type (c_size_type_node);
2604 set_sizetype (c_size_type_node);
2606 build_common_tree_nodes_2 (flag_short_double);
2608 record_builtin_type (RID_FLOAT, NULL, float_type_node);
2609 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
2610 record_builtin_type (RID_MAX, "long double", long_double_type_node);
2612 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
2613 complex_integer_type_node));
2614 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
2615 complex_float_type_node));
2616 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
2617 complex_double_type_node));
2618 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
2619 complex_long_double_type_node));
2621 record_builtin_type (RID_VOID, NULL, void_type_node);
2623 void_zero_node = build_int_2 (0, 0);
2624 TREE_TYPE (void_zero_node) = void_type_node;
2626 void_list_node = build_void_list_node ();
2628 /* Make a type to be the domain of a few array types
2629 whose domains don't really matter.
2630 200 is small enough that it always fits in size_t
2631 and large enough that it can hold most function names for the
2632 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
2633 array_domain_type = build_index_type (size_int (200));
2635 /* Make a type for arrays of characters.
2636 With luck nothing will ever really depend on the length of this
2638 char_array_type_node
2639 = build_array_type (char_type_node, array_domain_type);
2641 /* Likewise for arrays of ints. */
2643 = build_array_type (integer_type_node, array_domain_type);
2645 string_type_node = build_pointer_type (char_type_node);
2646 const_string_type_node
2647 = build_pointer_type (build_qualified_type
2648 (char_type_node, TYPE_QUAL_CONST));
2650 (*targetm.init_builtins) ();
2652 /* This is special for C++ so functions can be overloaded. */
2653 wchar_type_node = get_identifier (flag_short_wchar
2654 ? "short unsigned int"
2656 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
2657 wchar_type_size = TYPE_PRECISION (wchar_type_node);
2658 if (c_language == clk_cplusplus)
2660 if (TREE_UNSIGNED (wchar_type_node))
2661 wchar_type_node = make_unsigned_type (wchar_type_size);
2663 wchar_type_node = make_signed_type (wchar_type_size);
2664 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
2668 signed_wchar_type_node = signed_type (wchar_type_node);
2669 unsigned_wchar_type_node = unsigned_type (wchar_type_node);
2672 /* This is for wide string constants. */
2673 wchar_array_type_node
2674 = build_array_type (wchar_type_node, array_domain_type);
2677 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
2680 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
2682 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
2684 default_function_type = build_function_type (integer_type_node, NULL_TREE);
2686 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
2687 unsigned_ptrdiff_type_node = unsigned_type (ptrdiff_type_node);
2689 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
2690 va_list_type_node));
2692 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
2693 ptrdiff_type_node));
2695 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
2698 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
2700 va_list_arg_type_node = va_list_ref_type_node =
2701 build_pointer_type (TREE_TYPE (va_list_type_node));
2705 va_list_arg_type_node = va_list_type_node;
2706 va_list_ref_type_node = build_reference_type (va_list_type_node);
2709 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
2710 builtin_types[(int) ENUM] = VALUE;
2711 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
2712 builtin_types[(int) ENUM] \
2713 = build_function_type (builtin_types[(int) RETURN], \
2715 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
2716 builtin_types[(int) ENUM] \
2717 = build_function_type (builtin_types[(int) RETURN], \
2718 tree_cons (NULL_TREE, \
2719 builtin_types[(int) ARG1], \
2721 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
2722 builtin_types[(int) ENUM] \
2723 = build_function_type \
2724 (builtin_types[(int) RETURN], \
2725 tree_cons (NULL_TREE, \
2726 builtin_types[(int) ARG1], \
2727 tree_cons (NULL_TREE, \
2728 builtin_types[(int) ARG2], \
2730 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
2731 builtin_types[(int) ENUM] \
2732 = build_function_type \
2733 (builtin_types[(int) RETURN], \
2734 tree_cons (NULL_TREE, \
2735 builtin_types[(int) ARG1], \
2736 tree_cons (NULL_TREE, \
2737 builtin_types[(int) ARG2], \
2738 tree_cons (NULL_TREE, \
2739 builtin_types[(int) ARG3], \
2741 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
2742 builtin_types[(int) ENUM] \
2743 = build_function_type \
2744 (builtin_types[(int) RETURN], \
2745 tree_cons (NULL_TREE, \
2746 builtin_types[(int) ARG1], \
2747 tree_cons (NULL_TREE, \
2748 builtin_types[(int) ARG2], \
2751 builtin_types[(int) ARG3], \
2752 tree_cons (NULL_TREE, \
2753 builtin_types[(int) ARG4], \
2754 void_list_node)))));
2755 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
2756 builtin_types[(int) ENUM] \
2757 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
2758 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
2759 builtin_types[(int) ENUM] \
2760 = build_function_type (builtin_types[(int) RETURN], \
2761 tree_cons (NULL_TREE, \
2762 builtin_types[(int) ARG1], \
2765 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
2766 builtin_types[(int) ENUM] \
2767 = build_function_type \
2768 (builtin_types[(int) RETURN], \
2769 tree_cons (NULL_TREE, \
2770 builtin_types[(int) ARG1], \
2771 tree_cons (NULL_TREE, \
2772 builtin_types[(int) ARG2], \
2774 #define DEF_POINTER_TYPE(ENUM, TYPE) \
2775 builtin_types[(int) ENUM] \
2776 = build_pointer_type (builtin_types[(int) TYPE]);
2777 #include "builtin-types.def"
2778 #undef DEF_PRIMITIVE_TYPE
2779 #undef DEF_FUNCTION_TYPE_1
2780 #undef DEF_FUNCTION_TYPE_2
2781 #undef DEF_FUNCTION_TYPE_3
2782 #undef DEF_FUNCTION_TYPE_4
2783 #undef DEF_FUNCTION_TYPE_VAR_0
2784 #undef DEF_FUNCTION_TYPE_VAR_1
2785 #undef DEF_POINTER_TYPE
2787 #define DEF_BUILTIN(ENUM, NAME, CLASS, \
2788 TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P) \
2793 if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \
2797 decl = builtin_function (NAME, builtin_types[TYPE], ENUM, \
2800 ? (NAME + strlen ("__builtin_")) \
2803 decl = builtin_function_2 (NAME, \
2804 NAME + strlen ("__builtin_"), \
2805 builtin_types[TYPE], \
2806 builtin_types[LIBTYPE], \
2811 /*noreturn_p=*/0); \
2813 built_in_decls[(int) ENUM] = decl; \
2815 #include "builtins.def"
2818 /* Declare _exit and _Exit just to mark them as non-returning. */
2819 builtin_function_2 (NULL, "_exit", NULL_TREE,
2820 builtin_types[BT_FN_VOID_INT],
2821 0, NOT_BUILT_IN, 0, 1, 1);
2822 builtin_function_2 (NULL, "_Exit", NULL_TREE,
2823 builtin_types[BT_FN_VOID_INT],
2824 0, NOT_BUILT_IN, 0, !flag_isoc99, 1);
2826 /* Declare these functions non-returning
2827 to avoid spurious "control drops through" warnings. */
2828 builtin_function_2 (NULL, "abort",
2829 NULL_TREE, ((c_language == clk_cplusplus)
2830 ? builtin_types[BT_FN_VOID]
2831 : builtin_types[BT_FN_VOID_VAR]),
2832 0, NOT_BUILT_IN, 0, 0, 1);
2834 builtin_function_2 (NULL, "exit",
2835 NULL_TREE, ((c_language == clk_cplusplus)
2836 ? builtin_types[BT_FN_VOID_INT]
2837 : builtin_types[BT_FN_VOID_VAR]),
2838 0, NOT_BUILT_IN, 0, 0, 1);
2840 main_identifier_node = get_identifier ("main");
2842 /* ??? Perhaps there's a better place to do this. But it is related
2843 to __builtin_va_arg, so it isn't that off-the-wall. */
2844 lang_type_promotes_to = simple_type_promotes_to;
2848 build_va_arg (expr, type)
2851 return build1 (VA_ARG_EXPR, type, expr);
2855 /* Linked list of disabled built-in functions. */
2857 typedef struct disabled_builtin
2860 struct disabled_builtin *next;
2862 static disabled_builtin *disabled_builtins = NULL;
2864 static bool builtin_function_disabled_p PARAMS ((const char *));
2866 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
2867 begins with "__builtin_", give an error. */
2870 disable_builtin_function (name)
2873 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
2874 error ("cannot disable built-in function `%s'", name);
2877 disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
2879 new->next = disabled_builtins;
2880 disabled_builtins = new;
2885 /* Return true if the built-in function NAME has been disabled, false
2889 builtin_function_disabled_p (name)
2892 disabled_builtin *p;
2893 for (p = disabled_builtins; p != NULL; p = p->next)
2895 if (strcmp (name, p->name) == 0)
2902 /* Possibly define a builtin function with one or two names. BUILTIN_NAME
2903 is an __builtin_-prefixed name; NAME is the ordinary name; one or both
2904 of these may be NULL (though both being NULL is useless).
2905 BUILTIN_TYPE is the type of the __builtin_-prefixed function;
2906 TYPE is the type of the function with the ordinary name. These
2907 may differ if the ordinary name is declared with a looser type to avoid
2908 conflicts with headers. FUNCTION_CODE and CLASS are as for
2909 builtin_function. If LIBRARY_NAME_P is nonzero, NAME is passed as
2910 the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
2911 If NONANSI_P is nonzero, the name NAME is treated as a non-ANSI name; if
2912 NORETURN_P is nonzero, the function is marked as non-returning.
2913 Returns the declaration of BUILTIN_NAME, if any, otherwise
2914 the declaration of NAME. Does not declare NAME if flag_no_builtin,
2915 or if NONANSI_P and flag_no_nonansi_builtin. */
2918 builtin_function_2 (builtin_name, name, builtin_type, type, function_code,
2919 class, library_name_p, nonansi_p, noreturn_p)
2920 const char *builtin_name;
2925 enum built_in_class class;
2930 tree bdecl = NULL_TREE;
2931 tree decl = NULL_TREE;
2932 if (builtin_name != 0)
2934 bdecl = builtin_function (builtin_name, builtin_type, function_code,
2935 class, library_name_p ? name : NULL);
2938 TREE_THIS_VOLATILE (bdecl) = 1;
2939 TREE_SIDE_EFFECTS (bdecl) = 1;
2942 if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
2943 && !(nonansi_p && flag_no_nonansi_builtin))
2945 decl = builtin_function (name, type, function_code, class, NULL);
2947 DECL_BUILT_IN_NONANSI (decl) = 1;
2950 TREE_THIS_VOLATILE (decl) = 1;
2951 TREE_SIDE_EFFECTS (decl) = 1;
2954 return (bdecl != 0 ? bdecl : decl);
2957 /* Nonzero if the type T promotes to int. This is (nearly) the
2958 integral promotions defined in ISO C99 6.3.1.1/2. */
2961 c_promoting_integer_type_p (t)
2964 switch (TREE_CODE (t))
2967 return (TYPE_MAIN_VARIANT (t) == char_type_node
2968 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
2969 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
2970 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
2971 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
2972 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
2975 /* ??? Technically all enumerations not larger than an int
2976 promote to an int. But this is used along code paths
2977 that only want to notice a size change. */
2978 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
2988 /* Given a type, apply default promotions wrt unnamed function arguments
2989 and return the new type. Return NULL_TREE if no change. */
2990 /* ??? There is a function of the same name in the C++ front end that
2991 does something similar, but is more thorough and does not return NULL
2992 if no change. We could perhaps share code, but it would make the
2993 self_promoting_type property harder to identify. */
2996 simple_type_promotes_to (type)
2999 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3000 return double_type_node;
3002 if (c_promoting_integer_type_p (type))
3004 /* Preserve unsignedness if not really getting any wider. */
3005 if (TREE_UNSIGNED (type)
3006 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
3007 return unsigned_type_node;
3008 return integer_type_node;
3014 /* Return 1 if PARMS specifies a fixed number of parameters
3015 and none of their types is affected by default promotions. */
3018 self_promoting_args_p (parms)
3022 for (t = parms; t; t = TREE_CHAIN (t))
3024 tree type = TREE_VALUE (t);
3026 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3032 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3035 if (c_promoting_integer_type_p (type))
3041 /* Recursively examines the array elements of TYPE, until a non-array
3042 element type is found. */
3045 strip_array_types (type)
3048 while (TREE_CODE (type) == ARRAY_TYPE)
3049 type = TREE_TYPE (type);
3054 /* Recognize certain built-in functions so we can make tree-codes
3055 other than CALL_EXPR. We do this when it enables fold-const.c
3056 to do something useful. */
3057 /* ??? By rights this should go in builtins.c, but only C and C++
3058 implement build_{binary,unary}_op. Not exactly sure what bits
3059 of functionality are actually needed from those functions, or
3060 where the similar functionality exists in the other front ends. */
3063 expand_tree_builtin (function, params, coerced_params)
3064 tree function, params, coerced_params;
3066 enum tree_code code;
3068 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
3071 switch (DECL_FUNCTION_CODE (function))
3075 case BUILT_IN_LLABS:
3076 case BUILT_IN_IMAXABS:
3078 case BUILT_IN_FABSL:
3079 case BUILT_IN_FABSF:
3080 if (coerced_params == 0)
3081 return integer_zero_node;
3082 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
3085 case BUILT_IN_CONJF:
3086 case BUILT_IN_CONJL:
3087 if (coerced_params == 0)
3088 return integer_zero_node;
3089 return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0);
3091 case BUILT_IN_CREAL:
3092 case BUILT_IN_CREALF:
3093 case BUILT_IN_CREALL:
3094 if (coerced_params == 0)
3095 return integer_zero_node;
3096 return build_unary_op (REALPART_EXPR, TREE_VALUE (coerced_params), 0);
3098 case BUILT_IN_CIMAG:
3099 case BUILT_IN_CIMAGF:
3100 case BUILT_IN_CIMAGL:
3101 if (coerced_params == 0)
3102 return integer_zero_node;
3103 return build_unary_op (IMAGPART_EXPR, TREE_VALUE (coerced_params), 0);
3105 case BUILT_IN_ISGREATER:
3106 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
3112 case BUILT_IN_ISGREATEREQUAL:
3113 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
3119 case BUILT_IN_ISLESS:
3120 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
3126 case BUILT_IN_ISLESSEQUAL:
3127 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
3133 case BUILT_IN_ISLESSGREATER:
3134 if (TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
3140 case BUILT_IN_ISUNORDERED:
3141 if (TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT)
3142 return integer_zero_node;
3143 code = UNORDERED_EXPR;
3151 || TREE_CHAIN (params) == 0)
3153 error ("too few arguments to function `%s'",
3154 IDENTIFIER_POINTER (DECL_NAME (function)));
3155 return error_mark_node;
3157 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
3159 error ("too many arguments to function `%s'",
3160 IDENTIFIER_POINTER (DECL_NAME (function)));
3161 return error_mark_node;
3164 arg0 = TREE_VALUE (params);
3165 arg1 = TREE_VALUE (TREE_CHAIN (params));
3166 arg0 = build_binary_op (code, arg0, arg1, 0);
3167 if (code != UNORDERED_EXPR)
3168 arg0 = build_unary_op (TRUTH_NOT_EXPR, arg0, 0);
3180 /* Returns non-zero if CODE is the code for a statement. */
3183 statement_code_p (code)
3184 enum tree_code code;
3208 if (lang_statement_code_p)
3209 return (*lang_statement_code_p) (code);
3214 /* Walk the statement tree, rooted at *tp. Apply FUNC to all the
3215 sub-trees of *TP in a pre-order traversal. FUNC is called with the
3216 DATA and the address of each sub-tree. If FUNC returns a non-NULL
3217 value, the traversal is aborted, and the value returned by FUNC is
3218 returned. If FUNC sets WALK_SUBTREES to zero, then the subtrees of
3219 the node being visited are not walked.
3221 We don't need a without_duplicates variant of this one because the
3222 statement tree is a tree, not a graph. */
3225 walk_stmt_tree (tp, func, data)
3230 enum tree_code code;
3235 #define WALK_SUBTREE(NODE) \
3238 result = walk_stmt_tree (&(NODE), func, data); \
3244 /* Skip empty subtrees. */
3248 /* Skip subtrees below non-statement nodes. */
3249 if (!statement_code_p (TREE_CODE (*tp)))
3252 /* Call the function. */
3254 result = (*func) (tp, &walk_subtrees, data);
3256 /* If we found something, return it. */
3260 /* FUNC may have modified the tree, recheck that we're looking at a
3262 code = TREE_CODE (*tp);
3263 if (!statement_code_p (code))
3266 /* Visit the subtrees unless FUNC decided that there was nothing
3267 interesting below this point in the tree. */
3270 /* Walk over all the sub-trees of this operand. Statement nodes
3271 never contain RTL, and we needn't worry about TARGET_EXPRs. */
3272 len = TREE_CODE_LENGTH (code);
3274 /* Go through the subtrees. We need to do this in forward order so
3275 that the scope of a FOR_EXPR is handled properly. */
3276 for (i = 0; i < len; ++i)
3277 WALK_SUBTREE (TREE_OPERAND (*tp, i));
3280 /* Finally visit the chain. This can be tail-recursion optimized if
3281 we write it this way. */
3282 return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
3287 /* Used to compare case labels. K1 and K2 are actually tree nodes
3288 representing case labels, or NULL_TREE for a `default' label.
3289 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3290 K2, and 0 if K1 and K2 are equal. */
3293 case_compare (k1, k2)
3297 /* Consider a NULL key (such as arises with a `default' label) to be
3298 smaller than anything else. */
3304 return tree_int_cst_compare ((tree) k1, (tree) k2);
3307 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3308 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3309 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3310 case label was declared using the usual C/C++ syntax, rather than
3311 the GNU case range extension. CASES is a tree containing all the
3312 case ranges processed so far; COND is the condition for the
3313 switch-statement itself. Returns the CASE_LABEL created, or
3314 ERROR_MARK_NODE if no CASE_LABEL is created. */
3317 c_add_case_label (cases, cond, low_value, high_value)
3326 splay_tree_node node;
3328 /* Create the LABEL_DECL itself. */
3329 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3330 DECL_CONTEXT (label) = current_function_decl;
3332 /* If there was an error processing the switch condition, bail now
3333 before we get more confused. */
3334 if (!cond || cond == error_mark_node)
3336 /* Add a label anyhow so that the back-end doesn't think that
3337 the beginning of the switch is unreachable. */
3339 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3340 return error_mark_node;
3343 if ((low_value && TREE_TYPE (low_value)
3344 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3345 || (high_value && TREE_TYPE (high_value)
3346 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3347 error ("pointers are not permitted as case values");
3349 /* Case ranges are a GNU extension. */
3350 if (high_value && pedantic)
3352 if (c_language == clk_cplusplus)
3353 pedwarn ("ISO C++ forbids range expressions in switch statements");
3355 pedwarn ("ISO C forbids range expressions in switch statements");
3358 type = TREE_TYPE (cond);
3361 low_value = check_case_value (low_value);
3362 low_value = convert_and_check (type, low_value);
3366 high_value = check_case_value (high_value);
3367 high_value = convert_and_check (type, high_value);
3370 /* If an error has occurred, bail out now. */
3371 if (low_value == error_mark_node || high_value == error_mark_node)
3374 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3375 return error_mark_node;
3378 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3379 really a case range, even though it was written that way. Remove
3380 the HIGH_VALUE to simplify later processing. */
3381 if (tree_int_cst_equal (low_value, high_value))
3382 high_value = NULL_TREE;
3383 if (low_value && high_value
3384 && !tree_int_cst_lt (low_value, high_value))
3385 warning ("empty range specified");
3387 /* Look up the LOW_VALUE in the table of case labels we already
3389 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3390 /* If there was not an exact match, check for overlapping ranges.
3391 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3392 that's a `default' label and the only overlap is an exact match. */
3393 if (!node && (low_value || high_value))
3395 splay_tree_node low_bound;
3396 splay_tree_node high_bound;
3398 /* Even though there wasn't an exact match, there might be an
3399 overlap between this case range and another case range.
3400 Since we've (inductively) not allowed any overlapping case
3401 ranges, we simply need to find the greatest low case label
3402 that is smaller that LOW_VALUE, and the smallest low case
3403 label that is greater than LOW_VALUE. If there is an overlap
3404 it will occur in one of these two ranges. */
3405 low_bound = splay_tree_predecessor (cases,
3406 (splay_tree_key) low_value);
3407 high_bound = splay_tree_successor (cases,
3408 (splay_tree_key) low_value);
3410 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3411 the LOW_VALUE, so there is no need to check unless the
3412 LOW_BOUND is in fact itself a case range. */
3414 && CASE_HIGH ((tree) low_bound->value)
3415 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3418 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3419 range is bigger than the low end of the current range, so we
3420 are only interested if the current range is a real range, and
3421 not an ordinary case label. */
3424 && (tree_int_cst_compare ((tree) high_bound->key,
3429 /* If there was an overlap, issue an error. */
3432 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
3436 error ("duplicate (or overlapping) case value");
3437 error_with_decl (duplicate,
3438 "this is the first entry overlapping that value");
3442 error ("duplicate case value") ;
3443 error_with_decl (duplicate, "previously used here");
3447 error ("multiple default labels in one switch");
3448 error_with_decl (duplicate, "this is the first default label");
3451 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3454 /* Add a CASE_LABEL to the statement-tree. */
3455 case_label = add_stmt (build_case_label (low_value, high_value, label));
3456 /* Register this case label in the splay tree. */
3457 splay_tree_insert (cases,
3458 (splay_tree_key) low_value,
3459 (splay_tree_value) case_label);
3464 /* Finish an expression taking the address of LABEL. Returns an
3465 expression for the address. */
3468 finish_label_address_expr (label)
3475 if (c_language == clk_cplusplus)
3476 pedwarn ("ISO C++ forbids taking the address of a label");
3478 pedwarn ("ISO C forbids taking the address of a label");
3481 label = lookup_label (label);
3482 if (label == NULL_TREE)
3483 result = null_pointer_node;
3486 TREE_USED (label) = 1;
3487 result = build1 (ADDR_EXPR, ptr_type_node, label);
3488 TREE_CONSTANT (result) = 1;
3489 /* The current function in not necessarily uninlinable.
3490 Computed gotos are incompatible with inlining, but the value
3491 here could be used only in a diagnostic, for example. */
3497 /* Mark P (a stmt_tree) for GC. The use of a `void *' for the
3498 parameter allows this function to be used as a GC-marking
3505 stmt_tree st = (stmt_tree) p;
3507 ggc_mark_tree (st->x_last_stmt);
3508 ggc_mark_tree (st->x_last_expr_type);
3511 /* Mark LD for GC. */
3514 c_mark_lang_decl (c)
3515 struct c_lang_decl *c ATTRIBUTE_UNUSED;
3519 /* Mark F for GC. */
3522 mark_c_language_function (f)
3523 struct language_function *f;
3528 mark_stmt_tree (&f->x_stmt_tree);
3529 ggc_mark_tree (f->x_scope_stmt_stack);
3532 /* Hook used by expand_expr to expand language-specific tree codes. */
3535 c_expand_expr (exp, target, tmode, modifier)
3538 enum machine_mode tmode;
3539 enum expand_modifier modifier;
3541 switch (TREE_CODE (exp))
3548 /* Since expand_expr_stmt calls free_temp_slots after every
3549 expression statement, we must call push_temp_slots here.
3550 Otherwise, any temporaries in use now would be considered
3551 out-of-scope after the first EXPR_STMT from within the
3554 rtl_expr = expand_start_stmt_expr ();
3556 /* If we want the result of this expression, find the last
3557 EXPR_STMT in the COMPOUND_STMT and mark it as addressable. */
3558 if (target != const0_rtx
3559 && TREE_CODE (STMT_EXPR_STMT (exp)) == COMPOUND_STMT
3560 && TREE_CODE (COMPOUND_BODY (STMT_EXPR_STMT (exp))) == SCOPE_STMT)
3562 tree expr = COMPOUND_BODY (STMT_EXPR_STMT (exp));
3563 tree last = TREE_CHAIN (expr);
3565 while (TREE_CHAIN (last))
3568 last = TREE_CHAIN (last);
3571 if (TREE_CODE (last) == SCOPE_STMT
3572 && TREE_CODE (expr) == EXPR_STMT)
3573 TREE_ADDRESSABLE (expr) = 1;
3576 expand_stmt (STMT_EXPR_STMT (exp));
3577 expand_end_stmt_expr (rtl_expr);
3578 result = expand_expr (rtl_expr, target, tmode, modifier);
3586 if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
3587 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3589 && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3590 && (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3591 == BUILT_IN_FRONTEND))
3592 return c_expand_builtin (exp, target, tmode, modifier);
3598 case COMPOUND_LITERAL_EXPR:
3600 /* Initialize the anonymous variable declared in the compound
3601 literal, then return the variable. */
3602 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
3603 emit_local_var (decl);
3604 return expand_expr (decl, target, tmode, modifier);
3615 /* Hook used by safe_from_p to handle language-specific tree codes. */
3618 c_safe_from_p (target, exp)
3622 /* We can see statements here when processing the body of a
3623 statement-expression. For a declaration statement declaring a
3624 variable, look at the variable's initializer. */
3625 if (TREE_CODE (exp) == DECL_STMT)
3627 tree decl = DECL_STMT_DECL (exp);
3629 if (TREE_CODE (decl) == VAR_DECL
3630 && DECL_INITIAL (decl)
3631 && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
3635 /* For any statement, we must follow the statement-chain. */
3636 if (statement_code_p (TREE_CODE (exp)) && TREE_CHAIN (exp))
3637 return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
3639 /* Assume everything else is safe. */
3643 /* Hook used by unsafe_for_reeval to handle language-specific tree codes. */
3646 c_unsafe_for_reeval (exp)
3649 /* Statement expressions may not be reevaluated, likewise compound
3651 if (TREE_CODE (exp) == STMT_EXPR
3652 || TREE_CODE (exp) == COMPOUND_LITERAL_EXPR)
3655 /* Walk all other expressions. */
3659 /* Hook used by staticp to handle language-specific tree codes. */
3665 if (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
3666 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)))
3671 /* Tree code classes. */
3673 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
3675 static const char c_tree_code_type[] = {
3677 #include "c-common.def"
3681 /* Table indexed by tree code giving number of expression
3682 operands beyond the fixed part of the node structure.
3683 Not used for types or decls. */
3685 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
3687 static const int c_tree_code_length[] = {
3689 #include "c-common.def"
3693 /* Names of tree components.
3694 Used for printing out the tree and error messages. */
3695 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
3697 static const char *const c_tree_code_name[] = {
3699 #include "c-common.def"
3703 /* Adds the tree codes specific to the C front end to the list of all
3709 memcpy (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE,
3711 (int) LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE);
3712 memcpy (tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE,
3714 (LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) * sizeof (int));
3715 memcpy (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE,
3717 (LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) * sizeof (char *));
3718 lang_unsafe_for_reeval = c_unsafe_for_reeval;
3721 #define CALLED_AS_BUILT_IN(NODE) \
3722 (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
3725 c_expand_builtin (exp, target, tmode, modifier)
3728 enum machine_mode tmode;
3729 enum expand_modifier modifier;
3731 tree type = TREE_TYPE (exp);
3732 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
3733 tree arglist = TREE_OPERAND (exp, 1);
3734 enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
3735 enum tree_code code = TREE_CODE (exp);
3736 const int ignore = (target == const0_rtx
3737 || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
3738 || code == CONVERT_EXPR || code == REFERENCE_EXPR
3739 || code == COND_EXPR)
3740 && TREE_CODE (type) == VOID_TYPE));
3742 if (! optimize && ! CALLED_AS_BUILT_IN (fndecl))
3743 return expand_call (exp, target, ignore);
3747 case BUILT_IN_PRINTF:
3748 target = c_expand_builtin_printf (arglist, target, tmode,
3749 modifier, ignore, /*unlocked=*/ 0);
3754 case BUILT_IN_PRINTF_UNLOCKED:
3755 target = c_expand_builtin_printf (arglist, target, tmode,
3756 modifier, ignore, /*unlocked=*/ 1);
3761 case BUILT_IN_FPRINTF:
3762 target = c_expand_builtin_fprintf (arglist, target, tmode,
3763 modifier, ignore, /*unlocked=*/ 0);
3768 case BUILT_IN_FPRINTF_UNLOCKED:
3769 target = c_expand_builtin_fprintf (arglist, target, tmode,
3770 modifier, ignore, /*unlocked=*/ 1);
3775 default: /* just do library call, if unknown builtin */
3776 error ("built-in function `%s' not currently supported",
3777 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
3780 /* The switch statement above can drop through to cause the function
3781 to be called normally. */
3782 return expand_call (exp, target, ignore);
3785 /* Check an arglist to *printf for problems. The arglist should start
3786 at the format specifier, with the remaining arguments immediately
3789 is_valid_printf_arglist (arglist)
3792 /* Save this value so we can restore it later. */
3793 const int SAVE_pedantic = pedantic;
3794 int diagnostic_occurred = 0;
3797 /* Set this to a known value so the user setting won't affect code
3800 /* Check to make sure there are no format specifier errors. */
3801 attrs = tree_cons (get_identifier ("format"),
3802 tree_cons (NULL_TREE,
3803 get_identifier ("printf"),
3804 tree_cons (NULL_TREE,
3806 tree_cons (NULL_TREE,
3810 check_function_format (&diagnostic_occurred, attrs, arglist);
3812 /* Restore the value of `pedantic'. */
3813 pedantic = SAVE_pedantic;
3815 /* If calling `check_function_format_ptr' produces a warning, we
3816 return false, otherwise we return true. */
3817 return ! diagnostic_occurred;
3820 /* If the arguments passed to printf are suitable for optimizations,
3821 we attempt to transform the call. */
3823 c_expand_builtin_printf (arglist, target, tmode, modifier, ignore, unlocked)
3826 enum machine_mode tmode;
3827 enum expand_modifier modifier;
3831 tree fn_putchar = unlocked ?
3832 built_in_decls[BUILT_IN_PUTCHAR_UNLOCKED] : built_in_decls[BUILT_IN_PUTCHAR];
3833 tree fn_puts = unlocked ?
3834 built_in_decls[BUILT_IN_PUTS_UNLOCKED] : built_in_decls[BUILT_IN_PUTS];
3835 tree fn, format_arg, stripped_string;
3837 /* If the return value is used, or the replacement _DECL isn't
3838 initialized, don't do the transformation. */
3839 if (!ignore || !fn_putchar || !fn_puts)
3842 /* Verify the required arguments in the original call. */
3844 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE))
3847 /* Check the specifier vs. the parameters. */
3848 if (!is_valid_printf_arglist (arglist))
3851 format_arg = TREE_VALUE (arglist);
3852 stripped_string = format_arg;
3853 STRIP_NOPS (stripped_string);
3854 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
3855 stripped_string = TREE_OPERAND (stripped_string, 0);
3857 /* If the format specifier isn't a STRING_CST, punt. */
3858 if (TREE_CODE (stripped_string) != STRING_CST)
3861 /* OK! We can attempt optimization. */
3863 /* If the format specifier was "%s\n", call __builtin_puts(arg2). */
3864 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0)
3866 arglist = TREE_CHAIN (arglist);
3869 /* If the format specifier was "%c", call __builtin_putchar (arg2). */
3870 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
3872 arglist = TREE_CHAIN (arglist);
3877 /* We can't handle anything else with % args or %% ... yet. */
3878 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
3881 /* If the resulting constant string has a length of 1, call
3882 putchar. Note, TREE_STRING_LENGTH includes the terminating
3883 NULL in its count. */
3884 if (TREE_STRING_LENGTH (stripped_string) == 2)
3886 /* Given printf("c"), (where c is any one character,)
3887 convert "c"[0] to an int and pass that to the replacement
3889 arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0);
3890 arglist = build_tree_list (NULL_TREE, arglist);
3894 /* If the resulting constant was "string\n", call
3895 __builtin_puts("string"). Ensure "string" has at least one
3896 character besides the trailing \n. Note, TREE_STRING_LENGTH
3897 includes the terminating NULL in its count. */
3898 else if (TREE_STRING_LENGTH (stripped_string) > 2
3899 && TREE_STRING_POINTER (stripped_string)
3900 [TREE_STRING_LENGTH (stripped_string) - 2] == '\n')
3902 /* Create a NULL-terminated string that's one char shorter
3903 than the original, stripping off the trailing '\n'. */
3904 const int newlen = TREE_STRING_LENGTH (stripped_string) - 1;
3905 char *newstr = (char *) alloca (newlen);
3906 memcpy (newstr, TREE_STRING_POINTER (stripped_string), newlen - 1);
3907 newstr[newlen - 1] = 0;
3909 arglist = combine_strings (build_string (newlen, newstr));
3910 arglist = build_tree_list (NULL_TREE, arglist);
3914 /* We'd like to arrange to call fputs(string) here, but we
3915 need stdout and don't have a way to get it ... yet. */
3919 return expand_expr (build_function_call (fn, arglist),
3920 (ignore ? const0_rtx : target),
3924 /* If the arguments passed to fprintf are suitable for optimizations,
3925 we attempt to transform the call. */
3927 c_expand_builtin_fprintf (arglist, target, tmode, modifier, ignore, unlocked)
3930 enum machine_mode tmode;
3931 enum expand_modifier modifier;
3935 tree fn_fputc = unlocked ?
3936 built_in_decls[BUILT_IN_FPUTC_UNLOCKED] : built_in_decls[BUILT_IN_FPUTC];
3937 tree fn_fputs = unlocked ?
3938 built_in_decls[BUILT_IN_FPUTS_UNLOCKED] : built_in_decls[BUILT_IN_FPUTS];
3939 tree fn, format_arg, stripped_string;
3941 /* If the return value is used, or the replacement _DECL isn't
3942 initialized, don't do the transformation. */
3943 if (!ignore || !fn_fputc || !fn_fputs)
3946 /* Verify the required arguments in the original call. */
3948 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
3949 || (TREE_CHAIN (arglist) == 0)
3950 || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) !=
3954 /* Check the specifier vs. the parameters. */
3955 if (!is_valid_printf_arglist (TREE_CHAIN (arglist)))
3958 format_arg = TREE_VALUE (TREE_CHAIN (arglist));
3959 stripped_string = format_arg;
3960 STRIP_NOPS (stripped_string);
3961 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
3962 stripped_string = TREE_OPERAND (stripped_string, 0);
3964 /* If the format specifier isn't a STRING_CST, punt. */
3965 if (TREE_CODE (stripped_string) != STRING_CST)
3968 /* OK! We can attempt optimization. */
3970 /* If the format specifier was "%s", call __builtin_fputs(arg3, arg1). */
3971 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s") == 0)
3973 tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
3974 arglist = tree_cons (NULL_TREE,
3975 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
3979 /* If the format specifier was "%c", call __builtin_fputc (arg3, arg1). */
3980 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
3982 tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
3983 arglist = tree_cons (NULL_TREE,
3984 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
3990 /* We can't handle anything else with % args or %% ... yet. */
3991 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
3994 /* When "string" doesn't contain %, replace all cases of
3995 fprintf(stream,string) with fputs(string,stream). The fputs
3996 builtin will take take of special cases like length==1. */
3997 arglist = tree_cons (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)),
3998 build_tree_list (NULL_TREE, TREE_VALUE (arglist)));
4002 return expand_expr (build_function_call (fn, arglist),
4003 (ignore ? const0_rtx : target),
4008 /* Given a boolean expression ARG, return a tree representing an increment
4009 or decrement (as indicated by CODE) of ARG. The front end must check for
4010 invalid cases (e.g., decrement in C++). */
4012 boolean_increment (code, arg)
4013 enum tree_code code;
4017 tree true_res = (c_language == clk_cplusplus
4019 : c_bool_true_node);
4020 arg = stabilize_reference (arg);
4023 case PREINCREMENT_EXPR:
4024 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4026 case POSTINCREMENT_EXPR:
4027 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4028 arg = save_expr (arg);
4029 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4030 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4032 case PREDECREMENT_EXPR:
4033 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4035 case POSTDECREMENT_EXPR:
4036 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4037 arg = save_expr (arg);
4038 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4039 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4044 TREE_SIDE_EFFECTS (val) = 1;
4048 /* Handle C and C++ default attributes. */
4050 enum built_in_attribute
4052 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4053 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4054 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4055 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4056 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No entry needed in enum. */
4057 #include "builtin-attrs.def"
4058 #undef DEF_ATTR_NULL_TREE
4060 #undef DEF_ATTR_IDENT
4061 #undef DEF_ATTR_TREE_LIST
4066 static tree built_in_attributes[(int) ATTR_LAST];
4068 static bool c_attrs_initialized = false;
4070 static void c_init_attributes PARAMS ((void));
4072 /* Common initialization before parsing options. */
4074 c_common_init_options (lang)
4075 enum c_language_kind lang;
4078 parse_in = cpp_create_reader (lang == clk_c ? CLK_GNUC89:
4079 lang == clk_cplusplus ? CLK_GNUCXX: CLK_OBJC);
4081 /* Mark as "unspecified" (see c_common_post_options). */
4082 flag_bounds_check = -1;
4085 /* Post-switch processing. */
4087 c_common_post_options ()
4089 cpp_post_options (parse_in);
4091 flag_inline_trees = 1;
4093 /* Use tree inlining if possible. Function instrumentation is only
4094 done in the RTL level, so we disable tree inlining. */
4095 if (! flag_instrument_function_entry_exit)
4097 if (!flag_no_inline)
4099 if (flag_inline_functions)
4101 flag_inline_trees = 2;
4102 flag_inline_functions = 0;
4106 /* If still "unspecified", make it match -fbounded-pointers. */
4107 if (flag_bounds_check == -1)
4108 flag_bounds_check = flag_bounded_pointers;
4110 /* Special format checking options don't work without -Wformat; warn if
4112 if (warn_format_y2k && !warn_format)
4113 warning ("-Wformat-y2k ignored without -Wformat");
4114 if (warn_format_extra_args && !warn_format)
4115 warning ("-Wformat-extra-args ignored without -Wformat");
4116 if (warn_format_nonliteral && !warn_format)
4117 warning ("-Wformat-nonliteral ignored without -Wformat");
4118 if (warn_format_security && !warn_format)
4119 warning ("-Wformat-security ignored without -Wformat");
4120 if (warn_missing_format_attribute && !warn_format)
4121 warning ("-Wmissing-format-attribute ignored without -Wformat");
4124 /* Front end initialization common to C, ObjC and C++. */
4126 c_common_init (filename)
4127 const char *filename;
4129 /* Do this before initializing pragmas, as then cpplib's hash table
4131 filename = init_c_lex (filename);
4135 if (!c_attrs_initialized)
4136 c_init_attributes ();
4141 /* Common finish hook for the C, ObjC and C++ front ends. */
4145 cpp_finish (parse_in);
4147 /* For performance, avoid tearing down cpplib's internal structures.
4148 Call cpp_errors () instead of cpp_destroy (). */
4149 errorcount += cpp_errors (parse_in);
4153 c_init_attributes ()
4155 /* Fill in the built_in_attributes array. */
4156 #define DEF_ATTR_NULL_TREE(ENUM) \
4157 built_in_attributes[(int) ENUM] = NULL_TREE;
4158 #define DEF_ATTR_INT(ENUM, VALUE) \
4159 built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0);
4160 #define DEF_ATTR_IDENT(ENUM, STRING) \
4161 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4162 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4163 built_in_attributes[(int) ENUM] \
4164 = tree_cons (built_in_attributes[(int) PURPOSE], \
4165 built_in_attributes[(int) VALUE], \
4166 built_in_attributes[(int) CHAIN]);
4167 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No initialization needed. */
4168 #include "builtin-attrs.def"
4169 #undef DEF_ATTR_NULL_TREE
4171 #undef DEF_ATTR_IDENT
4172 #undef DEF_ATTR_TREE_LIST
4174 ggc_add_tree_root (built_in_attributes, (int) ATTR_LAST);
4175 c_attrs_initialized = true;
4178 /* Depending on the name of DECL, apply default attributes to it. */
4181 c_common_insert_default_attributes (decl)
4184 tree name = DECL_NAME (decl);
4186 if (!c_attrs_initialized)
4187 c_init_attributes ();
4189 #define DEF_ATTR_NULL_TREE(ENUM) /* Nothing needed after initialization. */
4190 #define DEF_ATTR_INT(ENUM, VALUE)
4191 #define DEF_ATTR_IDENT(ENUM, STRING)
4192 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)
4193 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) \
4194 if ((PREDICATE) && name == built_in_attributes[(int) NAME]) \
4195 decl_attributes (&decl, built_in_attributes[(int) ATTRS], \
4196 ATTR_FLAG_BUILT_IN);
4197 #include "builtin-attrs.def"
4198 #undef DEF_ATTR_NULL_TREE
4200 #undef DEF_ATTR_IDENT
4201 #undef DEF_ATTR_TREE_LIST
4205 /* Output a -Wshadow warning MSGID about NAME, an IDENTIFIER_NODE, and
4206 additionally give the location of the previous declaration DECL. */
4208 shadow_warning (msgid, name, decl)
4212 warning ("declaration of `%s' shadows %s", IDENTIFIER_POINTER (name), msgid);
4213 warning_with_file_and_line (DECL_SOURCE_FILE (decl),
4214 DECL_SOURCE_LINE (decl),
4215 "shadowed declaration is here");