cp:
[official-gcc.git] / gcc / c-common.c
blob7fad4b304f228e76ac1b90b7160902e3164a745b
1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
22 #include "config.h"
23 #include "system.h"
24 #include "tree.h"
25 #include "flags.h"
26 #include "toplev.h"
27 #include "output.h"
28 #include "c-pragma.h"
29 #include "rtl.h"
30 #include "ggc.h"
31 #include "expr.h"
32 #include "c-common.h"
33 #include "tree-inline.h"
34 #include "diagnostic.h"
35 #include "tm_p.h"
36 #include "obstack.h"
37 #include "c-lex.h"
38 #include "cpplib.h"
39 #include "target.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. */
51 #ifndef SIZE_TYPE
52 #define SIZE_TYPE "long unsigned int"
53 #endif
55 #ifndef WCHAR_TYPE
56 #define WCHAR_TYPE "int"
57 #endif
59 #ifndef PTRDIFF_TYPE
60 #define PTRDIFF_TYPE "long int"
61 #endif
63 #ifndef WINT_TYPE
64 #define WINT_TYPE "unsigned int"
65 #endif
67 #ifndef INTMAX_TYPE
68 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
69 ? "int" \
70 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
71 ? "long int" \
72 : "long long int"))
73 #endif
75 #ifndef UINTMAX_TYPE
76 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
77 ? "unsigned int" \
78 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
79 ? "long unsigned int" \
80 : "long long unsigned int"))
81 #endif
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.
165 tree void_list_node;
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. */
185 int flag_no_builtin;
187 /* Nonzero means don't recognize the non-ANSI builtin functions.
188 -ansi sets this. */
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. */
209 tree *ridpointers;
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. */
223 int skip_evaluation;
225 /* Information about how a function name is generated. */
226 struct fname_var_t
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},
243 {NULL, 0, 0},
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. */
253 typedef struct
255 int compstmt_count;
256 int line;
257 const char *file;
258 int needs_warning;
259 tree if_stmt;
260 } if_elt;
262 static if_elt *if_stack;
264 /* Amount of space in the if statement stack. */
265 static int if_stack_space = 0;
267 /* Stack pointer. */
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. */
279 void
280 c_expand_start_cond (cond, compstmt_count, if_stmt)
281 tree cond;
282 int compstmt_count;
283 tree if_stmt;
285 /* Make sure there is enough space on the stack. */
286 if (if_stack_space == 0)
288 if_stack_space = 10;
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;
298 add_stmt (if_stmt);
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;
306 if_stack_pointer++;
309 /* Called after the then-clause for an if-statement is processed. */
311 void
312 c_finish_then ()
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. */
321 void
322 c_expand_end_cond ()
324 if_stack_pointer--;
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. */
335 void
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. */
340 if (warn_parentheses
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. */
355 void
356 c_finish_else ()
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
363 appropriate.
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. */
370 tree
371 c_begin_if_stmt ()
373 tree r;
374 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
375 return r;
378 /* Begin a while statement. Returns a newly created WHILE_STMT if
379 appropriate.
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. */
386 tree
387 c_begin_while_stmt ()
389 tree r;
390 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
391 return r;
394 void
395 c_finish_while_stmt_cond (cond, while_stmt)
396 tree while_stmt;
397 tree cond;
399 WHILE_COND (while_stmt) = cond;
402 /* Push current bindings for the function name VAR_DECLS. */
404 void
405 start_fname_decls ()
407 unsigned ix;
408 tree saved = NULL_TREE;
410 for (ix = 0; fname_vars[ix].decl; ix++)
412 tree decl = *fname_vars[ix].decl;
414 if (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. */
434 void
435 finish_fname_decls ()
437 unsigned ix;
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);
444 if (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;
458 if (stack)
460 /* We had saved values, restore them. */
461 tree saved;
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
476 by PRETTY_P. */
478 const char *
479 fname_as_string (pretty_p)
480 int pretty_p;
482 const char *name = NULL;
484 if (pretty_p)
485 name = (current_function_decl
486 ? (*decl_printable_name) (current_function_decl, 2)
487 : "top level");
488 else if (current_function_decl && DECL_NAME (current_function_decl))
489 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
490 else
491 name = "";
492 return name;
495 /* Return the text name of the current function, formatted as
496 required by the supplied RID value. */
498 const char *
499 fname_string (rid)
500 unsigned rid;
502 unsigned ix;
504 for (ix = 0; fname_vars[ix].decl; ix++)
505 if (fname_vars[ix].rid == rid)
506 break;
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. */
517 tree
518 fname_decl (rid, id)
519 unsigned rid;
520 tree id;
522 unsigned ix;
523 tree decl = NULL_TREE;
525 for (ix = 0; fname_vars[ix].decl; ix++)
526 if (fname_vars[ix].rid == rid)
527 break;
529 decl = *fname_vars[ix].decl;
530 if (!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");
552 return decl;
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. */
559 tree
560 combine_strings (strings)
561 tree strings;
563 tree value, t;
564 int length = 1;
565 int wide_length = 0;
566 int wide_flag = 0;
567 int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
568 int nchars;
569 const int nchars_max = flag_isoc99 ? 4095 : 509;
571 if (TREE_CHAIN (strings))
573 /* More than one in the chain, so concatenate. */
574 char *p, *q;
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);
584 wide_flag = 1;
586 else
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. */
596 if (wide_flag)
597 length = length * wchar_bytes + wide_length;
599 p = alloca (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. */
605 q = p;
606 for (t = strings; t; t = TREE_CHAIN (t))
608 int len = (TREE_STRING_LENGTH (t)
609 - ((TREE_TYPE (t) == wchar_array_type_node)
610 ? wchar_bytes : 1));
611 if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
613 memcpy (q, TREE_STRING_POINTER (t), len);
614 q += len;
616 else
618 int i, j;
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++)
624 *q++ = 0;
625 *q++ = TREE_STRING_POINTER (t)[i];
627 else
629 *q++ = TREE_STRING_POINTER (t)[i];
630 for (j=0; j<(WCHAR_TYPE_SIZE / BITS_PER_UNIT)-1; j++)
631 *q++ = 0;
636 if (wide_flag)
638 int i;
639 for (i = 0; i < wchar_bytes; i++)
640 *q++ = 0;
642 else
643 *q = 0;
645 value = build_string (length, p);
647 else
649 value = strings;
650 length = TREE_STRING_LENGTH (value);
651 if (TREE_TYPE (value) == wchar_array_type_node)
652 wide_flag = 1;
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)
668 tree elements
669 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
670 1, 0);
671 TREE_TYPE (value)
672 = build_array_type (elements,
673 build_index_type (build_int_2 (nchars - 1, 0)));
675 else
676 TREE_TYPE (value)
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;
683 return value;
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. */
699 void
700 constant_expression_warning (value)
701 tree 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. */
717 void
718 overflow_warning (value)
719 tree 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. */
752 void
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). */
773 static int
774 constant_fits_type_p (c, type)
775 tree 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. */
788 tree
789 convert_and_check (type, expr)
790 tree 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. */
809 if ((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");
815 else
816 unsigned_conversion_warning (t, expr);
818 return t;
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. */
824 struct tlist
826 struct tlist *next;
827 tree expr, writer;
830 /* Used to implement a cache the results of a call to verify_tree. We only
831 use this for SAVE_EXPRs. */
832 struct tlist_cache
834 struct tlist_cache *next;
835 struct tlist *cache_before_sp;
836 struct tlist *cache_after_sp;
837 tree expr;
840 /* Obstack to use when allocating tlist structures, and corresponding
841 firstobj. */
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
846 warnings. */
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)
864 struct tlist *next;
865 tree t;
866 tree writer;
868 struct tlist *l;
869 l = (struct tlist *) obstack_alloc (&tlist_obstack, sizeof *l);
870 l->next = next;
871 l->expr = t;
872 l->writer = writer;
873 return 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. */
879 static void
880 add_tlist (to, add, exclude_writer, copy)
881 struct tlist **to;
882 struct tlist *add;
883 tree exclude_writer;
884 int copy;
886 while (add)
888 struct tlist *next = add->next;
889 if (! copy)
890 add->next = *to;
891 if (! exclude_writer || add->writer != exclude_writer)
892 *to = copy ? new_tlist (*to, add->expr, add->writer) : add;
893 add = next;
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
901 write. */
903 static void
904 merge_tlist (to, add, copy)
905 struct tlist **to;
906 struct tlist *add;
907 int copy;
909 struct tlist **end = to;
911 while (*end)
912 end = &(*end)->next;
914 while (add)
916 int found = 0;
917 struct tlist *tmp2;
918 struct tlist *next = add->next;
920 for (tmp2 = *to; tmp2; tmp2 = tmp2->next)
921 if (tmp2->expr == add->expr)
923 found = 1;
924 if (! tmp2->writer)
925 tmp2->writer = add->writer;
927 if (! found)
929 *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
930 end = &(*end)->next;
931 *end = 0;
933 add = next;
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
939 is nonzero. */
941 static void
942 warn_for_collisions_1 (written, writer, list, only_writes)
943 tree written, writer;
944 struct tlist *list;
945 int only_writes;
947 struct tlist *tmp;
949 /* Avoid duplicate warnings. */
950 for (tmp = warned_ids; tmp; tmp = tmp->next)
951 if (tmp->expr == written)
952 return;
954 while (list)
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)));
964 list = list->next;
968 /* Given a list LIST of references to variables, find whether any of these
969 can cause conflicts due to missing sequence points. */
971 static void
972 warn_for_collisions (list)
973 struct tlist *list;
975 struct tlist *tmp;
977 for (tmp = list; tmp; tmp = tmp->next)
979 if (tmp->writer)
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
985 warnings. */
986 static int
987 warning_candidate_p (x)
988 tree 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
998 in PNO_SP.
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
1011 becomes
1012 (b++, b) + a
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. */
1018 static void
1019 verify_tree (x, pbefore_sp, pno_sp, writer)
1020 tree x;
1021 struct tlist **pbefore_sp, **pno_sp;
1022 tree writer;
1024 struct tlist *tmp_before, *tmp_nosp, *tmp_list2, *tmp_list3;
1025 enum tree_code code;
1026 char class;
1028 /* X may be NULL if it is the operand of an empty statement expression
1029 ({ }). */
1030 if (x == NULL)
1031 return;
1033 restart:
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);
1040 return;
1043 switch (code)
1045 case CONSTRUCTOR:
1046 return;
1048 case COMPOUND_EXPR:
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);
1058 return;
1060 case COND_EXPR:
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);
1080 return;
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);
1087 return;
1089 case MODIFY_EXPR:
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:
1095 *a = (a++, 2)
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
1100 list. */
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
1106 as a write. */
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);
1114 return;
1116 case CALL_EXPR:
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);
1129 return;
1131 case TREE_LIST:
1132 /* Scan all the list, e.g. indices of multi dimensional array. */
1133 while (x)
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);
1139 x = TREE_CHAIN (x);
1141 return;
1143 case SAVE_EXPR:
1145 struct tlist_cache *t;
1146 for (t = save_expr_cache; t; t = t->next)
1147 if (t->expr == x)
1148 break;
1150 if (! t)
1152 t = (struct tlist_cache *) obstack_alloc (&tlist_obstack,
1153 sizeof *t);
1154 t->next = save_expr_cache;
1155 t->expr = x;
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);
1162 tmp_list3 = 0;
1163 while (tmp_nosp)
1165 struct tlist *t = tmp_nosp;
1166 tmp_nosp = t->next;
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);
1174 return;
1176 default:
1177 break;
1180 if (class == '1')
1182 if (first_rtl_op (code) == 0)
1183 return;
1184 x = TREE_OPERAND (x, 0);
1185 writer = 0;
1186 goto restart;
1189 switch (class)
1191 case 'r':
1192 case '<':
1193 case '2':
1194 case 'b':
1195 case 'e':
1196 case 's':
1197 case 'x':
1199 int lp;
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);
1208 break;
1213 /* Try to warn for undefined behaviour in EXPR due to missing sequence
1214 points. */
1216 static void
1217 verify_sequence_points (expr)
1218 tree expr;
1220 struct tlist *before_sp = 0, *after_sp = 0;
1222 warned_ids = 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);
1235 tree
1236 c_expand_expr_stmt (expr)
1237 tree 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. */
1260 tree
1261 check_case_value (value)
1262 tree value;
1264 if (value == NULL_TREE)
1265 return value;
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:
1271 const int i = 3;
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;
1288 else
1289 /* Promote char or short to int. */
1290 value = default_conversion (value);
1292 constant_expression_warning (value);
1294 return value;
1297 /* Return an integer type with BITS bits of precision,
1298 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
1300 tree
1301 type_for_size (bits, unsignedp)
1302 unsigned bits;
1303 int 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;
1337 return 0;
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. */
1344 tree
1345 type_for_mode (mode, unsignedp)
1346 enum machine_mode mode;
1347 int unsignedp;
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;
1368 if (mode == QImode)
1369 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
1371 if (mode == HImode)
1372 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
1374 if (mode == SImode)
1375 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
1377 if (mode == DImode)
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;
1383 #endif
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))
1403 switch (mode)
1405 case V16QImode:
1406 return unsignedp ? unsigned_V16QI_type_node : V16QI_type_node;
1407 case V8HImode:
1408 return unsignedp ? unsigned_V8HI_type_node : V8HI_type_node;
1409 case V4SImode:
1410 return unsignedp ? unsigned_V4SI_type_node : V4SI_type_node;
1411 case V2SImode:
1412 return unsignedp ? unsigned_V2SI_type_node : V2SI_type_node;
1413 case V4HImode:
1414 return unsignedp ? unsigned_V4HI_type_node : V4HI_type_node;
1415 case V8QImode:
1416 return unsignedp ? unsigned_V8QI_type_node : V8QI_type_node;
1417 case V16SFmode:
1418 return V16SF_type_node;
1419 case V4SFmode:
1420 return V4SF_type_node;
1421 case V2SFmode:
1422 return V2SF_type_node;
1423 default:
1424 break;
1427 #endif
1429 return 0;
1432 /* Return an unsigned type the same as TYPE in other respects. */
1433 tree
1434 unsigned_type (type)
1435 tree 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;
1453 #endif
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. */
1468 tree
1469 signed_type (type)
1470 tree type;
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;
1488 #endif
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. */
1504 tree
1505 signed_or_unsigned_type (unsignedp, type)
1506 int unsignedp;
1507 tree type;
1509 if (! INTEGRAL_TYPE_P (type)
1510 || TREE_UNSIGNED (type) == unsignedp)
1511 return type;
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;
1531 #endif
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;
1541 return type;
1544 /* Return the minimum number of bits needed to represent VALUE in a
1545 signed or unsigned type, UNSIGNEDP says which. */
1547 unsigned int
1548 min_precision (value, unsignedp)
1549 tree value;
1550 int unsignedp;
1552 int log;
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))
1566 log = 0;
1567 else
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). */
1576 void
1577 binary_op_error (code)
1578 enum tree_code code;
1580 const char *opname;
1582 switch (code)
1584 case NOP_EXPR:
1585 error ("invalid truth-value expression");
1586 return;
1588 case PLUS_EXPR:
1589 opname = "+"; break;
1590 case MINUS_EXPR:
1591 opname = "-"; break;
1592 case MULT_EXPR:
1593 opname = "*"; break;
1594 case MAX_EXPR:
1595 opname = "max"; break;
1596 case MIN_EXPR:
1597 opname = "min"; break;
1598 case EQ_EXPR:
1599 opname = "=="; break;
1600 case NE_EXPR:
1601 opname = "!="; break;
1602 case LE_EXPR:
1603 opname = "<="; break;
1604 case GE_EXPR:
1605 opname = ">="; break;
1606 case LT_EXPR:
1607 opname = "<"; break;
1608 case GT_EXPR:
1609 opname = ">"; break;
1610 case LSHIFT_EXPR:
1611 opname = "<<"; break;
1612 case RSHIFT_EXPR:
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;
1620 case BIT_AND_EXPR:
1621 opname = "&"; break;
1622 case BIT_IOR_EXPR:
1623 opname = "|"; break;
1624 case TRUTH_ANDIF_EXPR:
1625 opname = "&&"; break;
1626 case TRUTH_ORIF_EXPR:
1627 opname = "||"; break;
1628 case BIT_XOR_EXPR:
1629 opname = "^"; break;
1630 case LROTATE_EXPR:
1631 case RROTATE_EXPR:
1632 opname = "rotate"; break;
1633 default:
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
1651 that value. */
1653 tree
1654 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
1655 tree *op0_ptr, *op1_ptr;
1656 tree *restype_ptr;
1657 enum tree_code *rescode_ptr;
1659 tree type;
1660 tree op0 = *op0_ptr;
1661 tree op1 = *op1_ptr;
1662 int unsignedp0, unsignedp1;
1663 int real1, real2;
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))
1692 tree tem = primop0;
1693 int temi = unsignedp0;
1694 primop0 = primop1;
1695 primop1 = tem;
1696 tem = op0;
1697 op0 = op1;
1698 op1 = tem;
1699 *op0_ptr = op0;
1700 *op1_ptr = op1;
1701 unsignedp0 = unsignedp1;
1702 unsignedp1 = temi;
1703 temi = real1;
1704 real1 = real2;
1705 real2 = temi;
1707 switch (code)
1709 case LT_EXPR:
1710 code = GT_EXPR;
1711 break;
1712 case GT_EXPR:
1713 code = LT_EXPR;
1714 break;
1715 case LE_EXPR:
1716 code = GE_EXPR;
1717 break;
1718 case GE_EXPR:
1719 code = LE_EXPR;
1720 break;
1721 default:
1722 break;
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);
1752 tree val;
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
1758 type itself. */
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);
1783 else
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);
1791 val = 0;
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)
1805 if (max_lt)
1806 val = boolean_true_node;
1807 if (!min_lt)
1808 val = boolean_false_node;
1810 else if (code == GT_EXPR)
1812 if (min_gt)
1813 val = boolean_true_node;
1814 if (!max_gt)
1815 val = boolean_false_node;
1817 else if (code == LE_EXPR)
1819 if (!max_gt)
1820 val = boolean_true_node;
1821 if (min_gt)
1822 val = boolean_false_node;
1824 else if (code == GE_EXPR)
1826 if (!min_lt)
1827 val = boolean_true_node;
1828 if (max_lt)
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)
1845 if (val != 0)
1846 switch (code)
1848 case LT_EXPR:
1849 case GE_EXPR:
1850 primop1 = TYPE_MIN_VALUE (type);
1851 val = 0;
1852 break;
1854 case LE_EXPR:
1855 case GT_EXPR:
1856 primop1 = TYPE_MAX_VALUE (type);
1857 val = 0;
1858 break;
1860 default:
1861 break;
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");
1885 if (val != 0)
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);
1890 return 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
1907 alter the result.
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),
1917 type);
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)),
1921 primop0);
1922 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
1923 primop1);
1925 else
1927 /* Here we must do the comparison on the nominal type
1928 using the args exactly as we received them. */
1929 type = *restype_ptr;
1930 primop0 = op0;
1931 primop1 = op1;
1933 if (!real1 && !real2 && integer_zerop (primop1)
1934 && TREE_UNSIGNED (*restype_ptr))
1936 tree value = 0;
1937 switch (code)
1939 case GE_EXPR:
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),
1947 primop0))))
1948 warning ("comparison of unsigned expression >= 0 is always true");
1949 value = boolean_true_node;
1950 break;
1952 case LT_EXPR:
1953 if (extra_warnings && !in_system_header
1954 && ! (TREE_CODE (primop0) == INTEGER_CST
1955 && ! TREE_OVERFLOW (convert (signed_type (type),
1956 primop0))))
1957 warning ("comparison of unsigned expression < 0 is always false");
1958 value = boolean_false_node;
1959 break;
1961 default:
1962 break;
1965 if (value != 0)
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),
1970 primop0, value);
1971 return value;
1976 *op0_ptr = convert (type, primop0);
1977 *op1_ptr = convert (type, primop1);
1979 *restype_ptr = boolean_type_node;
1981 return 0;
1984 /* Return a tree for the sum or difference (RESULTCODE says which)
1985 of pointer PTROP and integer INTOP. */
1987 tree
1988 pointer_int_sum (resultcode, ptrop, intop)
1989 enum tree_code resultcode;
1990 tree ptrop, intop;
1992 tree size_exp;
1994 tree result;
1995 tree folded;
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;
2025 else
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);
2082 return folded;
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'. */
2096 tree
2097 truthvalue_conversion (expr)
2098 tree expr;
2100 if (TREE_CODE (expr) == ERROR_MARK)
2101 return expr;
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)))
2108 case RECORD_TYPE:
2109 error ("struct type value used where scalar is required");
2110 return boolean_false_node;
2112 case UNION_TYPE:
2113 error ("union type value used where scalar is required");
2114 return boolean_false_node;
2116 case ARRAY_TYPE:
2117 error ("array type value used where scalar is required");
2118 return boolean_false_node;
2120 default:
2121 break;
2123 #endif /* 0 */
2125 switch (TREE_CODE (expr))
2127 case EQ_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:
2132 case TRUTH_OR_EXPR:
2133 case TRUTH_XOR_EXPR:
2134 case TRUTH_NOT_EXPR:
2135 TREE_TYPE (expr) = boolean_type_node;
2136 return expr;
2138 case ERROR_MARK:
2139 return expr;
2141 case INTEGER_CST:
2142 return integer_zerop (expr) ? boolean_false_node : boolean_true_node;
2144 case REAL_CST:
2145 return real_zerop (expr) ? boolean_false_node : boolean_true_node;
2147 case ADDR_EXPR:
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)))
2152 break;
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);
2157 else
2158 return boolean_true_node;
2160 case COMPLEX_EXPR:
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)),
2167 case NEGATE_EXPR:
2168 case ABS_EXPR:
2169 case FLOAT_EXPR:
2170 case FFS_EXPR:
2171 /* These don't change whether an object is non-zero or zero. */
2172 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2174 case LROTATE_EXPR:
2175 case RROTATE_EXPR:
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)));
2181 else
2182 return truthvalue_conversion (TREE_OPERAND (expr, 0));
2184 case COND_EXPR:
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))));
2190 case CONVERT_EXPR:
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)
2195 break;
2196 /* fall through... */
2197 case NOP_EXPR:
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));
2202 break;
2204 case MINUS_EXPR:
2205 /* Perhaps reduce (x - y) != 0 to (x != y). The expressions
2206 aren't guaranteed to the be same for modes that can represent
2207 infinity, since if x and y are both +infinity, or both
2208 -infinity, then x - y is not a number.
2210 Note that this transformation is safe when x or y is NaN.
2211 (x - y) is then NaN, and both (x - y) != 0 and x != y will
2212 be false. */
2213 if (HONOR_INFINITIES (TYPE_MODE (TREE_TYPE (TREE_OPERAND (expr, 0)))))
2214 break;
2215 /* fall through... */
2216 case BIT_XOR_EXPR:
2217 /* This and MINUS_EXPR can be changed into a comparison of the
2218 two objects. */
2219 if (TREE_TYPE (TREE_OPERAND (expr, 0))
2220 == TREE_TYPE (TREE_OPERAND (expr, 1)))
2221 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2222 TREE_OPERAND (expr, 1), 1);
2223 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
2224 fold (build1 (NOP_EXPR,
2225 TREE_TYPE (TREE_OPERAND (expr, 0)),
2226 TREE_OPERAND (expr, 1))), 1);
2228 case BIT_AND_EXPR:
2229 if (integer_onep (TREE_OPERAND (expr, 1))
2230 && TREE_TYPE (expr) != boolean_type_node)
2231 /* Using convert here would cause infinite recursion. */
2232 return build1 (NOP_EXPR, boolean_type_node, expr);
2233 break;
2235 case MODIFY_EXPR:
2236 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
2237 warning ("suggest parentheses around assignment used as truth value");
2238 break;
2240 default:
2241 break;
2244 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
2246 tree tem = save_expr (expr);
2247 return (build_binary_op
2248 ((TREE_SIDE_EFFECTS (expr)
2249 ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
2250 truthvalue_conversion (build_unary_op (REALPART_EXPR, tem, 0)),
2251 truthvalue_conversion (build_unary_op (IMAGPART_EXPR, tem, 0)),
2252 0));
2255 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
2258 static tree builtin_function_2 PARAMS ((const char *, const char *, tree, tree,
2259 int, enum built_in_class, int, int,
2260 int));
2262 /* Make a variant type in the proper way for C/C++, propagating qualifiers
2263 down to the element type of an array. */
2265 tree
2266 c_build_qualified_type (type, type_quals)
2267 tree type;
2268 int type_quals;
2270 /* A restrict-qualified pointer type must be a pointer to object or
2271 incomplete type. Note that the use of POINTER_TYPE_P also allows
2272 REFERENCE_TYPEs, which is appropriate for C++. Unfortunately,
2273 the C++ front-end also use POINTER_TYPE for pointer-to-member
2274 values, so even though it should be illegal to use `restrict'
2275 with such an entity we don't flag that here. Thus, special case
2276 code for that case is required in the C++ front-end. */
2277 if ((type_quals & TYPE_QUAL_RESTRICT)
2278 && (!POINTER_TYPE_P (type)
2279 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
2281 error ("invalid use of `restrict'");
2282 type_quals &= ~TYPE_QUAL_RESTRICT;
2285 if (TREE_CODE (type) == ARRAY_TYPE)
2286 return build_array_type (c_build_qualified_type (TREE_TYPE (type),
2287 type_quals),
2288 TYPE_DOMAIN (type));
2289 return build_qualified_type (type, type_quals);
2292 /* Apply the TYPE_QUALS to the new DECL. */
2294 void
2295 c_apply_type_quals_to_decl (type_quals, decl)
2296 int type_quals;
2297 tree decl;
2299 if ((type_quals & TYPE_QUAL_CONST)
2300 || (TREE_TYPE (decl)
2301 && TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE))
2302 TREE_READONLY (decl) = 1;
2303 if (type_quals & TYPE_QUAL_VOLATILE)
2305 TREE_SIDE_EFFECTS (decl) = 1;
2306 TREE_THIS_VOLATILE (decl) = 1;
2308 if (type_quals & TYPE_QUAL_RESTRICT)
2310 if (!TREE_TYPE (decl)
2311 || !POINTER_TYPE_P (TREE_TYPE (decl))
2312 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (TREE_TYPE (decl))))
2313 error ("invalid use of `restrict'");
2314 else if (flag_strict_aliasing)
2315 /* Indicate we need to make a unique alias set for this pointer.
2316 We can't do it here because it might be pointing to an
2317 incomplete type. */
2318 DECL_POINTER_ALIAS_SET (decl) = -2;
2323 /* Return the typed-based alias set for T, which may be an expression
2324 or a type. Return -1 if we don't do anything special. */
2326 HOST_WIDE_INT
2327 c_common_get_alias_set (t)
2328 tree t;
2330 tree u;
2332 /* We know nothing about vector types */
2333 if (TREE_CODE (t) == VECTOR_TYPE)
2334 return 0;
2336 /* Permit type-punning when accessing a union, provided the access
2337 is directly through the union. For example, this code does not
2338 permit taking the address of a union member and then storing
2339 through it. Even the type-punning allowed here is a GCC
2340 extension, albeit a common and useful one; the C standard says
2341 that such accesses have implementation-defined behavior. */
2342 for (u = t;
2343 TREE_CODE (u) == COMPONENT_REF || TREE_CODE (u) == ARRAY_REF;
2344 u = TREE_OPERAND (u, 0))
2345 if (TREE_CODE (u) == COMPONENT_REF
2346 && TREE_CODE (TREE_TYPE (TREE_OPERAND (u, 0))) == UNION_TYPE)
2347 return 0;
2349 /* If this is a char *, the ANSI C standard says it can alias
2350 anything. Note that all references need do this. */
2351 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'r'
2352 && TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE
2353 && TYPE_PRECISION (TREE_TYPE (t)) == TYPE_PRECISION (char_type_node))
2354 return 0;
2356 /* That's all the expressions we handle specially. */
2357 if (! TYPE_P (t))
2358 return -1;
2360 /* The C standard specifically allows aliasing between signed and
2361 unsigned variants of the same type. We treat the signed
2362 variant as canonical. */
2363 if (TREE_CODE (t) == INTEGER_TYPE && TREE_UNSIGNED (t))
2365 tree t1 = signed_type (t);
2367 /* t1 == t can happen for boolean nodes which are always unsigned. */
2368 if (t1 != t)
2369 return get_alias_set (t1);
2371 else if (POINTER_TYPE_P (t))
2373 tree t1;
2375 /* Unfortunately, there is no canonical form of a pointer type.
2376 In particular, if we have `typedef int I', then `int *', and
2377 `I *' are different types. So, we have to pick a canonical
2378 representative. We do this below.
2380 Technically, this approach is actually more conservative that
2381 it needs to be. In particular, `const int *' and `int *'
2382 should be in different alias sets, according to the C and C++
2383 standard, since their types are not the same, and so,
2384 technically, an `int **' and `const int **' cannot point at
2385 the same thing.
2387 But, the standard is wrong. In particular, this code is
2388 legal C++:
2390 int *ip;
2391 int **ipp = &ip;
2392 const int* const* cipp = &ipp;
2394 And, it doesn't make sense for that to be legal unless you
2395 can dereference IPP and CIPP. So, we ignore cv-qualifiers on
2396 the pointed-to types. This issue has been reported to the
2397 C++ committee. */
2398 t1 = build_type_no_quals (t);
2399 if (t1 != t)
2400 return get_alias_set (t1);
2403 return -1;
2406 /* Implement the __alignof keyword: Return the minimum required
2407 alignment of TYPE, measured in bytes. */
2409 tree
2410 c_alignof (type)
2411 tree type;
2413 enum tree_code code = TREE_CODE (type);
2414 tree t;
2416 /* In C++, sizeof applies to the referent. Handle alignof the same way. */
2417 if (code == REFERENCE_TYPE)
2419 type = TREE_TYPE (type);
2420 code = TREE_CODE (type);
2423 if (code == FUNCTION_TYPE)
2424 t = size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
2425 else if (code == VOID_TYPE || code == ERROR_MARK)
2426 t = size_one_node;
2427 else if (!COMPLETE_TYPE_P (type))
2429 error ("__alignof__ applied to an incomplete type");
2430 t = size_zero_node;
2432 else
2433 t = size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
2435 return fold (build1 (NOP_EXPR, c_size_type_node, t));
2438 /* Implement the __alignof keyword: Return the minimum required
2439 alignment of EXPR, measured in bytes. For VAR_DECL's and
2440 FIELD_DECL's return DECL_ALIGN (which can be set from an
2441 "aligned" __attribute__ specification). */
2443 tree
2444 c_alignof_expr (expr)
2445 tree expr;
2447 tree t;
2449 if (TREE_CODE (expr) == VAR_DECL)
2450 t = size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
2452 else if (TREE_CODE (expr) == COMPONENT_REF
2453 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
2455 error ("`__alignof' applied to a bit-field");
2456 t = size_one_node;
2458 else if (TREE_CODE (expr) == COMPONENT_REF
2459 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
2460 t = size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
2462 else if (TREE_CODE (expr) == INDIRECT_REF)
2464 tree t = TREE_OPERAND (expr, 0);
2465 tree best = t;
2466 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2468 while (TREE_CODE (t) == NOP_EXPR
2469 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
2471 int thisalign;
2473 t = TREE_OPERAND (t, 0);
2474 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
2475 if (thisalign > bestalign)
2476 best = t, bestalign = thisalign;
2478 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
2480 else
2481 return c_alignof (TREE_TYPE (expr));
2483 return fold (build1 (NOP_EXPR, c_size_type_node, t));
2486 /* Give the specifications for the format attributes, used by C and all
2487 descendents. */
2489 static const struct attribute_spec c_format_attribute_table[] =
2491 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2492 { "format", 3, 3, false, true, true,
2493 handle_format_attribute },
2494 { "format_arg", 1, 1, false, true, true,
2495 handle_format_arg_attribute },
2496 { NULL, 0, 0, false, false, false, NULL }
2499 /* Build tree nodes and builtin functions common to both C and C++ language
2500 frontends. */
2502 void
2503 c_common_nodes_and_builtins ()
2505 enum builtin_type
2507 #define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
2508 #define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
2509 #define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
2510 #define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
2511 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
2512 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
2513 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
2514 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
2515 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
2516 #define DEF_POINTER_TYPE(NAME, TYPE) NAME,
2517 #include "builtin-types.def"
2518 #undef DEF_PRIMITIVE_TYPE
2519 #undef DEF_FUNCTION_TYPE_0
2520 #undef DEF_FUNCTION_TYPE_1
2521 #undef DEF_FUNCTION_TYPE_2
2522 #undef DEF_FUNCTION_TYPE_3
2523 #undef DEF_FUNCTION_TYPE_4
2524 #undef DEF_FUNCTION_TYPE_VAR_0
2525 #undef DEF_FUNCTION_TYPE_VAR_1
2526 #undef DEF_FUNCTION_TYPE_VAR_2
2527 #undef DEF_POINTER_TYPE
2528 BT_LAST
2531 typedef enum builtin_type builtin_type;
2533 tree builtin_types[(int) BT_LAST];
2534 int wchar_type_size;
2535 tree array_domain_type;
2536 tree va_list_ref_type_node;
2537 tree va_list_arg_type_node;
2539 /* We must initialize this before any builtin functions (which might have
2540 attributes) are declared. (c_common_init is too late.) */
2541 format_attribute_table = c_format_attribute_table;
2543 /* Define `int' and `char' first so that dbx will output them first. */
2544 record_builtin_type (RID_INT, NULL, integer_type_node);
2545 record_builtin_type (RID_CHAR, "char", char_type_node);
2547 /* `signed' is the same as `int'. FIXME: the declarations of "signed",
2548 "unsigned long", "long long unsigned" and "unsigned short" were in C++
2549 but not C. Are the conditionals here needed? */
2550 if (c_language == clk_cplusplus)
2551 record_builtin_type (RID_SIGNED, NULL, integer_type_node);
2552 record_builtin_type (RID_LONG, "long int", long_integer_type_node);
2553 record_builtin_type (RID_UNSIGNED, "unsigned int", unsigned_type_node);
2554 record_builtin_type (RID_MAX, "long unsigned int",
2555 long_unsigned_type_node);
2556 if (c_language == clk_cplusplus)
2557 record_builtin_type (RID_MAX, "unsigned long", long_unsigned_type_node);
2558 record_builtin_type (RID_MAX, "long long int",
2559 long_long_integer_type_node);
2560 record_builtin_type (RID_MAX, "long long unsigned int",
2561 long_long_unsigned_type_node);
2562 if (c_language == clk_cplusplus)
2563 record_builtin_type (RID_MAX, "long long unsigned",
2564 long_long_unsigned_type_node);
2565 record_builtin_type (RID_SHORT, "short int", short_integer_type_node);
2566 record_builtin_type (RID_MAX, "short unsigned int",
2567 short_unsigned_type_node);
2568 if (c_language == clk_cplusplus)
2569 record_builtin_type (RID_MAX, "unsigned short",
2570 short_unsigned_type_node);
2572 /* Define both `signed char' and `unsigned char'. */
2573 record_builtin_type (RID_MAX, "signed char", signed_char_type_node);
2574 record_builtin_type (RID_MAX, "unsigned char", unsigned_char_type_node);
2576 /* These are types that type_for_size and type_for_mode use. */
2577 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
2578 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
2579 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
2580 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
2581 #if HOST_BITS_PER_WIDE_INT >= 64
2582 pushdecl (build_decl (TYPE_DECL, get_identifier ("__int128_t"), intTI_type_node));
2583 #endif
2584 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
2585 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
2586 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
2587 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
2588 #if HOST_BITS_PER_WIDE_INT >= 64
2589 pushdecl (build_decl (TYPE_DECL, get_identifier ("__uint128_t"), unsigned_intTI_type_node));
2590 #endif
2592 /* Create the widest literal types. */
2593 widest_integer_literal_type_node
2594 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
2595 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2596 widest_integer_literal_type_node));
2598 widest_unsigned_literal_type_node
2599 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
2600 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
2601 widest_unsigned_literal_type_node));
2603 /* `unsigned long' is the standard type for sizeof.
2604 Note that stddef.h uses `unsigned long',
2605 and this must agree, even if long and int are the same size. */
2606 c_size_type_node =
2607 TREE_TYPE (identifier_global_value (get_identifier (SIZE_TYPE)));
2608 signed_size_type_node = signed_type (c_size_type_node);
2609 set_sizetype (c_size_type_node);
2611 build_common_tree_nodes_2 (flag_short_double);
2613 record_builtin_type (RID_FLOAT, NULL, float_type_node);
2614 record_builtin_type (RID_DOUBLE, NULL, double_type_node);
2615 record_builtin_type (RID_MAX, "long double", long_double_type_node);
2617 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
2618 complex_integer_type_node));
2619 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
2620 complex_float_type_node));
2621 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
2622 complex_double_type_node));
2623 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
2624 complex_long_double_type_node));
2626 record_builtin_type (RID_VOID, NULL, void_type_node);
2628 void_zero_node = build_int_2 (0, 0);
2629 TREE_TYPE (void_zero_node) = void_type_node;
2631 void_list_node = build_void_list_node ();
2633 /* Make a type to be the domain of a few array types
2634 whose domains don't really matter.
2635 200 is small enough that it always fits in size_t
2636 and large enough that it can hold most function names for the
2637 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
2638 array_domain_type = build_index_type (size_int (200));
2640 /* Make a type for arrays of characters.
2641 With luck nothing will ever really depend on the length of this
2642 array type. */
2643 char_array_type_node
2644 = build_array_type (char_type_node, array_domain_type);
2646 /* Likewise for arrays of ints. */
2647 int_array_type_node
2648 = build_array_type (integer_type_node, array_domain_type);
2650 string_type_node = build_pointer_type (char_type_node);
2651 const_string_type_node
2652 = build_pointer_type (build_qualified_type
2653 (char_type_node, TYPE_QUAL_CONST));
2655 (*targetm.init_builtins) ();
2657 /* This is special for C++ so functions can be overloaded. */
2658 wchar_type_node = get_identifier (flag_short_wchar
2659 ? "short unsigned int"
2660 : WCHAR_TYPE);
2661 wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
2662 wchar_type_size = TYPE_PRECISION (wchar_type_node);
2663 if (c_language == clk_cplusplus)
2665 if (TREE_UNSIGNED (wchar_type_node))
2666 wchar_type_node = make_unsigned_type (wchar_type_size);
2667 else
2668 wchar_type_node = make_signed_type (wchar_type_size);
2669 record_builtin_type (RID_WCHAR, "wchar_t", wchar_type_node);
2671 else
2673 signed_wchar_type_node = signed_type (wchar_type_node);
2674 unsigned_wchar_type_node = unsigned_type (wchar_type_node);
2677 /* This is for wide string constants. */
2678 wchar_array_type_node
2679 = build_array_type (wchar_type_node, array_domain_type);
2681 wint_type_node =
2682 TREE_TYPE (identifier_global_value (get_identifier (WINT_TYPE)));
2684 intmax_type_node =
2685 TREE_TYPE (identifier_global_value (get_identifier (INTMAX_TYPE)));
2686 uintmax_type_node =
2687 TREE_TYPE (identifier_global_value (get_identifier (UINTMAX_TYPE)));
2689 default_function_type = build_function_type (integer_type_node, NULL_TREE);
2690 ptrdiff_type_node
2691 = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE)));
2692 unsigned_ptrdiff_type_node = unsigned_type (ptrdiff_type_node);
2694 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_va_list"),
2695 va_list_type_node));
2697 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_ptrdiff_t"),
2698 ptrdiff_type_node));
2700 pushdecl (build_decl (TYPE_DECL, get_identifier ("__builtin_size_t"),
2701 sizetype));
2703 if (TREE_CODE (va_list_type_node) == ARRAY_TYPE)
2705 va_list_arg_type_node = va_list_ref_type_node =
2706 build_pointer_type (TREE_TYPE (va_list_type_node));
2708 else
2710 va_list_arg_type_node = va_list_type_node;
2711 va_list_ref_type_node = build_reference_type (va_list_type_node);
2714 #define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
2715 builtin_types[(int) ENUM] = VALUE;
2716 #define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
2717 builtin_types[(int) ENUM] \
2718 = build_function_type (builtin_types[(int) RETURN], \
2719 void_list_node);
2720 #define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
2721 builtin_types[(int) ENUM] \
2722 = build_function_type (builtin_types[(int) RETURN], \
2723 tree_cons (NULL_TREE, \
2724 builtin_types[(int) ARG1], \
2725 void_list_node));
2726 #define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
2727 builtin_types[(int) ENUM] \
2728 = build_function_type \
2729 (builtin_types[(int) RETURN], \
2730 tree_cons (NULL_TREE, \
2731 builtin_types[(int) ARG1], \
2732 tree_cons (NULL_TREE, \
2733 builtin_types[(int) ARG2], \
2734 void_list_node)));
2735 #define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
2736 builtin_types[(int) ENUM] \
2737 = build_function_type \
2738 (builtin_types[(int) RETURN], \
2739 tree_cons (NULL_TREE, \
2740 builtin_types[(int) ARG1], \
2741 tree_cons (NULL_TREE, \
2742 builtin_types[(int) ARG2], \
2743 tree_cons (NULL_TREE, \
2744 builtin_types[(int) ARG3], \
2745 void_list_node))));
2746 #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
2747 builtin_types[(int) ENUM] \
2748 = build_function_type \
2749 (builtin_types[(int) RETURN], \
2750 tree_cons (NULL_TREE, \
2751 builtin_types[(int) ARG1], \
2752 tree_cons (NULL_TREE, \
2753 builtin_types[(int) ARG2], \
2754 tree_cons \
2755 (NULL_TREE, \
2756 builtin_types[(int) ARG3], \
2757 tree_cons (NULL_TREE, \
2758 builtin_types[(int) ARG4], \
2759 void_list_node)))));
2760 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
2761 builtin_types[(int) ENUM] \
2762 = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
2763 #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \
2764 builtin_types[(int) ENUM] \
2765 = build_function_type (builtin_types[(int) RETURN], \
2766 tree_cons (NULL_TREE, \
2767 builtin_types[(int) ARG1], \
2768 NULL_TREE));
2770 #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \
2771 builtin_types[(int) ENUM] \
2772 = build_function_type \
2773 (builtin_types[(int) RETURN], \
2774 tree_cons (NULL_TREE, \
2775 builtin_types[(int) ARG1], \
2776 tree_cons (NULL_TREE, \
2777 builtin_types[(int) ARG2], \
2778 NULL_TREE)));
2779 #define DEF_POINTER_TYPE(ENUM, TYPE) \
2780 builtin_types[(int) ENUM] \
2781 = build_pointer_type (builtin_types[(int) TYPE]);
2782 #include "builtin-types.def"
2783 #undef DEF_PRIMITIVE_TYPE
2784 #undef DEF_FUNCTION_TYPE_1
2785 #undef DEF_FUNCTION_TYPE_2
2786 #undef DEF_FUNCTION_TYPE_3
2787 #undef DEF_FUNCTION_TYPE_4
2788 #undef DEF_FUNCTION_TYPE_VAR_0
2789 #undef DEF_FUNCTION_TYPE_VAR_1
2790 #undef DEF_POINTER_TYPE
2792 #define DEF_BUILTIN(ENUM, NAME, CLASS, \
2793 TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P) \
2794 if (NAME) \
2796 tree decl; \
2798 if (strncmp (NAME, "__builtin_", strlen ("__builtin_")) != 0) \
2799 abort (); \
2801 if (!BOTH_P) \
2802 decl = builtin_function (NAME, builtin_types[TYPE], ENUM, \
2803 CLASS, \
2804 (FALLBACK_P \
2805 ? (NAME + strlen ("__builtin_")) \
2806 : NULL)); \
2807 else \
2808 decl = builtin_function_2 (NAME, \
2809 NAME + strlen ("__builtin_"), \
2810 builtin_types[TYPE], \
2811 builtin_types[LIBTYPE], \
2812 ENUM, \
2813 CLASS, \
2814 FALLBACK_P, \
2815 NONANSI_P, \
2816 /*noreturn_p=*/0); \
2818 built_in_decls[(int) ENUM] = decl; \
2820 #include "builtins.def"
2821 #undef DEF_BUILTIN
2823 /* Declare _exit and _Exit just to mark them as non-returning. */
2824 builtin_function_2 (NULL, "_exit", NULL_TREE,
2825 builtin_types[BT_FN_VOID_INT],
2826 0, NOT_BUILT_IN, 0, 1, 1);
2827 builtin_function_2 (NULL, "_Exit", NULL_TREE,
2828 builtin_types[BT_FN_VOID_INT],
2829 0, NOT_BUILT_IN, 0, !flag_isoc99, 1);
2831 /* Declare these functions non-returning
2832 to avoid spurious "control drops through" warnings. */
2833 builtin_function_2 (NULL, "abort",
2834 NULL_TREE, ((c_language == clk_cplusplus)
2835 ? builtin_types[BT_FN_VOID]
2836 : builtin_types[BT_FN_VOID_VAR]),
2837 0, NOT_BUILT_IN, 0, 0, 1);
2839 builtin_function_2 (NULL, "exit",
2840 NULL_TREE, ((c_language == clk_cplusplus)
2841 ? builtin_types[BT_FN_VOID_INT]
2842 : builtin_types[BT_FN_VOID_VAR]),
2843 0, NOT_BUILT_IN, 0, 0, 1);
2845 main_identifier_node = get_identifier ("main");
2847 /* ??? Perhaps there's a better place to do this. But it is related
2848 to __builtin_va_arg, so it isn't that off-the-wall. */
2849 lang_type_promotes_to = simple_type_promotes_to;
2852 tree
2853 build_va_arg (expr, type)
2854 tree expr, type;
2856 return build1 (VA_ARG_EXPR, type, expr);
2860 /* Linked list of disabled built-in functions. */
2862 typedef struct disabled_builtin
2864 const char *name;
2865 struct disabled_builtin *next;
2866 } disabled_builtin;
2867 static disabled_builtin *disabled_builtins = NULL;
2869 static bool builtin_function_disabled_p PARAMS ((const char *));
2871 /* Disable a built-in function specified by -fno-builtin-NAME. If NAME
2872 begins with "__builtin_", give an error. */
2874 void
2875 disable_builtin_function (name)
2876 const char *name;
2878 if (strncmp (name, "__builtin_", strlen ("__builtin_")) == 0)
2879 error ("cannot disable built-in function `%s'", name);
2880 else
2882 disabled_builtin *new = xmalloc (sizeof (disabled_builtin));
2883 new->name = name;
2884 new->next = disabled_builtins;
2885 disabled_builtins = new;
2890 /* Return true if the built-in function NAME has been disabled, false
2891 otherwise. */
2893 static bool
2894 builtin_function_disabled_p (name)
2895 const char *name;
2897 disabled_builtin *p;
2898 for (p = disabled_builtins; p != NULL; p = p->next)
2900 if (strcmp (name, p->name) == 0)
2901 return true;
2903 return false;
2907 /* Possibly define a builtin function with one or two names. BUILTIN_NAME
2908 is an __builtin_-prefixed name; NAME is the ordinary name; one or both
2909 of these may be NULL (though both being NULL is useless).
2910 BUILTIN_TYPE is the type of the __builtin_-prefixed function;
2911 TYPE is the type of the function with the ordinary name. These
2912 may differ if the ordinary name is declared with a looser type to avoid
2913 conflicts with headers. FUNCTION_CODE and CLASS are as for
2914 builtin_function. If LIBRARY_NAME_P is nonzero, NAME is passed as
2915 the LIBRARY_NAME parameter to builtin_function when declaring BUILTIN_NAME.
2916 If NONANSI_P is nonzero, the name NAME is treated as a non-ANSI name; if
2917 NORETURN_P is nonzero, the function is marked as non-returning.
2918 Returns the declaration of BUILTIN_NAME, if any, otherwise
2919 the declaration of NAME. Does not declare NAME if flag_no_builtin,
2920 or if NONANSI_P and flag_no_nonansi_builtin. */
2922 static tree
2923 builtin_function_2 (builtin_name, name, builtin_type, type, function_code,
2924 class, library_name_p, nonansi_p, noreturn_p)
2925 const char *builtin_name;
2926 const char *name;
2927 tree builtin_type;
2928 tree type;
2929 int function_code;
2930 enum built_in_class class;
2931 int library_name_p;
2932 int nonansi_p;
2933 int noreturn_p;
2935 tree bdecl = NULL_TREE;
2936 tree decl = NULL_TREE;
2937 if (builtin_name != 0)
2939 bdecl = builtin_function (builtin_name, builtin_type, function_code,
2940 class, library_name_p ? name : NULL);
2941 if (noreturn_p)
2943 TREE_THIS_VOLATILE (bdecl) = 1;
2944 TREE_SIDE_EFFECTS (bdecl) = 1;
2947 if (name != 0 && !flag_no_builtin && !builtin_function_disabled_p (name)
2948 && !(nonansi_p && flag_no_nonansi_builtin))
2950 decl = builtin_function (name, type, function_code, class, NULL);
2951 if (nonansi_p)
2952 DECL_BUILT_IN_NONANSI (decl) = 1;
2953 if (noreturn_p)
2955 TREE_THIS_VOLATILE (decl) = 1;
2956 TREE_SIDE_EFFECTS (decl) = 1;
2959 return (bdecl != 0 ? bdecl : decl);
2962 /* Nonzero if the type T promotes to int. This is (nearly) the
2963 integral promotions defined in ISO C99 6.3.1.1/2. */
2965 bool
2966 c_promoting_integer_type_p (t)
2967 tree t;
2969 switch (TREE_CODE (t))
2971 case INTEGER_TYPE:
2972 return (TYPE_MAIN_VARIANT (t) == char_type_node
2973 || TYPE_MAIN_VARIANT (t) == signed_char_type_node
2974 || TYPE_MAIN_VARIANT (t) == unsigned_char_type_node
2975 || TYPE_MAIN_VARIANT (t) == short_integer_type_node
2976 || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node
2977 || TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node));
2979 case ENUMERAL_TYPE:
2980 /* ??? Technically all enumerations not larger than an int
2981 promote to an int. But this is used along code paths
2982 that only want to notice a size change. */
2983 return TYPE_PRECISION (t) < TYPE_PRECISION (integer_type_node);
2985 case BOOLEAN_TYPE:
2986 return 1;
2988 default:
2989 return 0;
2993 /* Given a type, apply default promotions wrt unnamed function arguments
2994 and return the new type. Return NULL_TREE if no change. */
2995 /* ??? There is a function of the same name in the C++ front end that
2996 does something similar, but is more thorough and does not return NULL
2997 if no change. We could perhaps share code, but it would make the
2998 self_promoting_type property harder to identify. */
3000 tree
3001 simple_type_promotes_to (type)
3002 tree type;
3004 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3005 return double_type_node;
3007 if (c_promoting_integer_type_p (type))
3009 /* Preserve unsignedness if not really getting any wider. */
3010 if (TREE_UNSIGNED (type)
3011 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
3012 return unsigned_type_node;
3013 return integer_type_node;
3016 return NULL_TREE;
3019 /* Return 1 if PARMS specifies a fixed number of parameters
3020 and none of their types is affected by default promotions. */
3023 self_promoting_args_p (parms)
3024 tree parms;
3026 tree t;
3027 for (t = parms; t; t = TREE_CHAIN (t))
3029 tree type = TREE_VALUE (t);
3031 if (TREE_CHAIN (t) == 0 && type != void_type_node)
3032 return 0;
3034 if (type == 0)
3035 return 0;
3037 if (TYPE_MAIN_VARIANT (type) == float_type_node)
3038 return 0;
3040 if (c_promoting_integer_type_p (type))
3041 return 0;
3043 return 1;
3046 /* Recursively examines the array elements of TYPE, until a non-array
3047 element type is found. */
3049 tree
3050 strip_array_types (type)
3051 tree type;
3053 while (TREE_CODE (type) == ARRAY_TYPE)
3054 type = TREE_TYPE (type);
3056 return type;
3059 static tree expand_unordered_cmp PARAMS ((tree, tree, enum tree_code,
3060 enum tree_code));
3062 /* Expand a call to an unordered comparison function such as
3063 __builtin_isgreater(). FUNCTION is the function's declaration and
3064 PARAMS a list of the values passed. For __builtin_isunordered(),
3065 UNORDERED_CODE is UNORDERED_EXPR and ORDERED_CODE is NOP_EXPR. In
3066 other cases, UNORDERED_CODE and ORDERED_CODE are comparison codes
3067 that give the opposite of the desired result. UNORDERED_CODE is
3068 used for modes that can hold NaNs and ORDERED_CODE is used for the
3069 rest. */
3071 static tree
3072 expand_unordered_cmp (function, params, unordered_code, ordered_code)
3073 tree function, params;
3074 enum tree_code unordered_code, ordered_code;
3076 tree arg0, arg1, type;
3077 enum tree_code code0, code1;
3079 /* Check that we have exactly two arguments. */
3080 if (params == 0 || TREE_CHAIN (params) == 0)
3082 error ("too few arguments to function `%s'",
3083 IDENTIFIER_POINTER (DECL_NAME (function)));
3084 return error_mark_node;
3086 else if (TREE_CHAIN (TREE_CHAIN (params)) != 0)
3088 error ("too many arguments to function `%s'",
3089 IDENTIFIER_POINTER (DECL_NAME (function)));
3090 return error_mark_node;
3093 arg0 = TREE_VALUE (params);
3094 arg1 = TREE_VALUE (TREE_CHAIN (params));
3096 code0 = TREE_CODE (TREE_TYPE (arg0));
3097 code1 = TREE_CODE (TREE_TYPE (arg1));
3099 /* Make sure that the arguments have a common type of REAL. */
3100 type = 0;
3101 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
3102 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
3103 type = common_type (TREE_TYPE (arg0), TREE_TYPE (arg1));
3105 if (type == 0 || TREE_CODE (type) != REAL_TYPE)
3107 error ("non-floating-point argument to function `%s'",
3108 IDENTIFIER_POINTER (DECL_NAME (function)));
3109 return error_mark_node;
3112 if (unordered_code == UNORDERED_EXPR)
3114 if (MODE_HAS_NANS (TYPE_MODE (type)))
3115 return build_binary_op (unordered_code,
3116 convert (type, arg0),
3117 convert (type, arg1),
3119 else
3120 return integer_zero_node;
3123 return build_unary_op (TRUTH_NOT_EXPR,
3124 build_binary_op (MODE_HAS_NANS (TYPE_MODE (type))
3125 ? unordered_code
3126 : ordered_code,
3127 convert (type, arg0),
3128 convert (type, arg1),
3134 /* Recognize certain built-in functions so we can make tree-codes
3135 other than CALL_EXPR. We do this when it enables fold-const.c
3136 to do something useful. */
3137 /* ??? By rights this should go in builtins.c, but only C and C++
3138 implement build_{binary,unary}_op. Not exactly sure what bits
3139 of functionality are actually needed from those functions, or
3140 where the similar functionality exists in the other front ends. */
3142 tree
3143 expand_tree_builtin (function, params, coerced_params)
3144 tree function, params, coerced_params;
3146 if (DECL_BUILT_IN_CLASS (function) != BUILT_IN_NORMAL)
3147 return NULL_TREE;
3149 switch (DECL_FUNCTION_CODE (function))
3151 case BUILT_IN_ABS:
3152 case BUILT_IN_LABS:
3153 case BUILT_IN_LLABS:
3154 case BUILT_IN_IMAXABS:
3155 case BUILT_IN_FABS:
3156 case BUILT_IN_FABSL:
3157 case BUILT_IN_FABSF:
3158 if (coerced_params == 0)
3159 return integer_zero_node;
3160 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
3162 case BUILT_IN_CONJ:
3163 case BUILT_IN_CONJF:
3164 case BUILT_IN_CONJL:
3165 if (coerced_params == 0)
3166 return integer_zero_node;
3167 return build_unary_op (CONJ_EXPR, TREE_VALUE (coerced_params), 0);
3169 case BUILT_IN_CREAL:
3170 case BUILT_IN_CREALF:
3171 case BUILT_IN_CREALL:
3172 if (coerced_params == 0)
3173 return integer_zero_node;
3174 return build_unary_op (REALPART_EXPR, TREE_VALUE (coerced_params), 0);
3176 case BUILT_IN_CIMAG:
3177 case BUILT_IN_CIMAGF:
3178 case BUILT_IN_CIMAGL:
3179 if (coerced_params == 0)
3180 return integer_zero_node;
3181 return build_unary_op (IMAGPART_EXPR, TREE_VALUE (coerced_params), 0);
3183 case BUILT_IN_ISGREATER:
3184 return expand_unordered_cmp (function, params, UNLE_EXPR, LE_EXPR);
3186 case BUILT_IN_ISGREATEREQUAL:
3187 return expand_unordered_cmp (function, params, UNLT_EXPR, LT_EXPR);
3189 case BUILT_IN_ISLESS:
3190 return expand_unordered_cmp (function, params, UNGE_EXPR, GE_EXPR);
3192 case BUILT_IN_ISLESSEQUAL:
3193 return expand_unordered_cmp (function, params, UNGT_EXPR, GT_EXPR);
3195 case BUILT_IN_ISLESSGREATER:
3196 return expand_unordered_cmp (function, params, UNEQ_EXPR, EQ_EXPR);
3198 case BUILT_IN_ISUNORDERED:
3199 return expand_unordered_cmp (function, params, UNORDERED_EXPR, NOP_EXPR);
3201 default:
3202 break;
3205 return NULL_TREE;
3208 /* Returns non-zero if CODE is the code for a statement. */
3211 statement_code_p (code)
3212 enum tree_code code;
3214 switch (code)
3216 case EXPR_STMT:
3217 case COMPOUND_STMT:
3218 case DECL_STMT:
3219 case IF_STMT:
3220 case FOR_STMT:
3221 case WHILE_STMT:
3222 case DO_STMT:
3223 case RETURN_STMT:
3224 case BREAK_STMT:
3225 case CONTINUE_STMT:
3226 case SCOPE_STMT:
3227 case SWITCH_STMT:
3228 case GOTO_STMT:
3229 case LABEL_STMT:
3230 case ASM_STMT:
3231 case FILE_STMT:
3232 case CASE_LABEL:
3233 return 1;
3235 default:
3236 if (lang_statement_code_p)
3237 return (*lang_statement_code_p) (code);
3238 return 0;
3242 /* Walk the statement tree, rooted at *tp. Apply FUNC to all the
3243 sub-trees of *TP in a pre-order traversal. FUNC is called with the
3244 DATA and the address of each sub-tree. If FUNC returns a non-NULL
3245 value, the traversal is aborted, and the value returned by FUNC is
3246 returned. If FUNC sets WALK_SUBTREES to zero, then the subtrees of
3247 the node being visited are not walked.
3249 We don't need a without_duplicates variant of this one because the
3250 statement tree is a tree, not a graph. */
3252 tree
3253 walk_stmt_tree (tp, func, data)
3254 tree *tp;
3255 walk_tree_fn func;
3256 void *data;
3258 enum tree_code code;
3259 int walk_subtrees;
3260 tree result;
3261 int i, len;
3263 #define WALK_SUBTREE(NODE) \
3264 do \
3266 result = walk_stmt_tree (&(NODE), func, data); \
3267 if (result) \
3268 return result; \
3270 while (0)
3272 /* Skip empty subtrees. */
3273 if (!*tp)
3274 return NULL_TREE;
3276 /* Skip subtrees below non-statement nodes. */
3277 if (!statement_code_p (TREE_CODE (*tp)))
3278 return NULL_TREE;
3280 /* Call the function. */
3281 walk_subtrees = 1;
3282 result = (*func) (tp, &walk_subtrees, data);
3284 /* If we found something, return it. */
3285 if (result)
3286 return result;
3288 /* FUNC may have modified the tree, recheck that we're looking at a
3289 statement node. */
3290 code = TREE_CODE (*tp);
3291 if (!statement_code_p (code))
3292 return NULL_TREE;
3294 /* Visit the subtrees unless FUNC decided that there was nothing
3295 interesting below this point in the tree. */
3296 if (walk_subtrees)
3298 /* Walk over all the sub-trees of this operand. Statement nodes
3299 never contain RTL, and we needn't worry about TARGET_EXPRs. */
3300 len = TREE_CODE_LENGTH (code);
3302 /* Go through the subtrees. We need to do this in forward order so
3303 that the scope of a FOR_EXPR is handled properly. */
3304 for (i = 0; i < len; ++i)
3305 WALK_SUBTREE (TREE_OPERAND (*tp, i));
3308 /* Finally visit the chain. This can be tail-recursion optimized if
3309 we write it this way. */
3310 return walk_stmt_tree (&TREE_CHAIN (*tp), func, data);
3312 #undef WALK_SUBTREE
3315 /* Used to compare case labels. K1 and K2 are actually tree nodes
3316 representing case labels, or NULL_TREE for a `default' label.
3317 Returns -1 if K1 is ordered before K2, -1 if K1 is ordered after
3318 K2, and 0 if K1 and K2 are equal. */
3321 case_compare (k1, k2)
3322 splay_tree_key k1;
3323 splay_tree_key k2;
3325 /* Consider a NULL key (such as arises with a `default' label) to be
3326 smaller than anything else. */
3327 if (!k1)
3328 return k2 ? -1 : 0;
3329 else if (!k2)
3330 return k1 ? 1 : 0;
3332 return tree_int_cst_compare ((tree) k1, (tree) k2);
3335 /* Process a case label for the range LOW_VALUE ... HIGH_VALUE. If
3336 LOW_VALUE and HIGH_VALUE are both NULL_TREE then this case label is
3337 actually a `default' label. If only HIGH_VALUE is NULL_TREE, then
3338 case label was declared using the usual C/C++ syntax, rather than
3339 the GNU case range extension. CASES is a tree containing all the
3340 case ranges processed so far; COND is the condition for the
3341 switch-statement itself. Returns the CASE_LABEL created, or
3342 ERROR_MARK_NODE if no CASE_LABEL is created. */
3344 tree
3345 c_add_case_label (cases, cond, low_value, high_value)
3346 splay_tree cases;
3347 tree cond;
3348 tree low_value;
3349 tree high_value;
3351 tree type;
3352 tree label;
3353 tree case_label;
3354 splay_tree_node node;
3356 /* Create the LABEL_DECL itself. */
3357 label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
3358 DECL_CONTEXT (label) = current_function_decl;
3360 /* If there was an error processing the switch condition, bail now
3361 before we get more confused. */
3362 if (!cond || cond == error_mark_node)
3364 /* Add a label anyhow so that the back-end doesn't think that
3365 the beginning of the switch is unreachable. */
3366 if (!cases->root)
3367 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3368 return error_mark_node;
3371 if ((low_value && TREE_TYPE (low_value)
3372 && POINTER_TYPE_P (TREE_TYPE (low_value)))
3373 || (high_value && TREE_TYPE (high_value)
3374 && POINTER_TYPE_P (TREE_TYPE (high_value))))
3375 error ("pointers are not permitted as case values");
3377 /* Case ranges are a GNU extension. */
3378 if (high_value && pedantic)
3380 if (c_language == clk_cplusplus)
3381 pedwarn ("ISO C++ forbids range expressions in switch statements");
3382 else
3383 pedwarn ("ISO C forbids range expressions in switch statements");
3386 type = TREE_TYPE (cond);
3387 if (low_value)
3389 low_value = check_case_value (low_value);
3390 low_value = convert_and_check (type, low_value);
3392 if (high_value)
3394 high_value = check_case_value (high_value);
3395 high_value = convert_and_check (type, high_value);
3398 /* If an error has occurred, bail out now. */
3399 if (low_value == error_mark_node || high_value == error_mark_node)
3401 if (!cases->root)
3402 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3403 return error_mark_node;
3406 /* If the LOW_VALUE and HIGH_VALUE are the same, then this isn't
3407 really a case range, even though it was written that way. Remove
3408 the HIGH_VALUE to simplify later processing. */
3409 if (tree_int_cst_equal (low_value, high_value))
3410 high_value = NULL_TREE;
3411 if (low_value && high_value
3412 && !tree_int_cst_lt (low_value, high_value))
3413 warning ("empty range specified");
3415 /* Look up the LOW_VALUE in the table of case labels we already
3416 have. */
3417 node = splay_tree_lookup (cases, (splay_tree_key) low_value);
3418 /* If there was not an exact match, check for overlapping ranges.
3419 There's no need to do this if there's no LOW_VALUE or HIGH_VALUE;
3420 that's a `default' label and the only overlap is an exact match. */
3421 if (!node && (low_value || high_value))
3423 splay_tree_node low_bound;
3424 splay_tree_node high_bound;
3426 /* Even though there wasn't an exact match, there might be an
3427 overlap between this case range and another case range.
3428 Since we've (inductively) not allowed any overlapping case
3429 ranges, we simply need to find the greatest low case label
3430 that is smaller that LOW_VALUE, and the smallest low case
3431 label that is greater than LOW_VALUE. If there is an overlap
3432 it will occur in one of these two ranges. */
3433 low_bound = splay_tree_predecessor (cases,
3434 (splay_tree_key) low_value);
3435 high_bound = splay_tree_successor (cases,
3436 (splay_tree_key) low_value);
3438 /* Check to see if the LOW_BOUND overlaps. It is smaller than
3439 the LOW_VALUE, so there is no need to check unless the
3440 LOW_BOUND is in fact itself a case range. */
3441 if (low_bound
3442 && CASE_HIGH ((tree) low_bound->value)
3443 && tree_int_cst_compare (CASE_HIGH ((tree) low_bound->value),
3444 low_value) >= 0)
3445 node = low_bound;
3446 /* Check to see if the HIGH_BOUND overlaps. The low end of that
3447 range is bigger than the low end of the current range, so we
3448 are only interested if the current range is a real range, and
3449 not an ordinary case label. */
3450 else if (high_bound
3451 && high_value
3452 && (tree_int_cst_compare ((tree) high_bound->key,
3453 high_value)
3454 <= 0))
3455 node = high_bound;
3457 /* If there was an overlap, issue an error. */
3458 if (node)
3460 tree duplicate = CASE_LABEL_DECL ((tree) node->value);
3462 if (high_value)
3464 error ("duplicate (or overlapping) case value");
3465 error_with_decl (duplicate,
3466 "this is the first entry overlapping that value");
3468 else if (low_value)
3470 error ("duplicate case value") ;
3471 error_with_decl (duplicate, "previously used here");
3473 else
3475 error ("multiple default labels in one switch");
3476 error_with_decl (duplicate, "this is the first default label");
3478 if (!cases->root)
3479 add_stmt (build_case_label (NULL_TREE, NULL_TREE, label));
3482 /* Add a CASE_LABEL to the statement-tree. */
3483 case_label = add_stmt (build_case_label (low_value, high_value, label));
3484 /* Register this case label in the splay tree. */
3485 splay_tree_insert (cases,
3486 (splay_tree_key) low_value,
3487 (splay_tree_value) case_label);
3489 return case_label;
3492 /* Finish an expression taking the address of LABEL. Returns an
3493 expression for the address. */
3495 tree
3496 finish_label_address_expr (label)
3497 tree label;
3499 tree result;
3501 if (pedantic)
3503 if (c_language == clk_cplusplus)
3504 pedwarn ("ISO C++ forbids taking the address of a label");
3505 else
3506 pedwarn ("ISO C forbids taking the address of a label");
3509 label = lookup_label (label);
3510 if (label == NULL_TREE)
3511 result = null_pointer_node;
3512 else
3514 TREE_USED (label) = 1;
3515 result = build1 (ADDR_EXPR, ptr_type_node, label);
3516 TREE_CONSTANT (result) = 1;
3517 /* The current function in not necessarily uninlinable.
3518 Computed gotos are incompatible with inlining, but the value
3519 here could be used only in a diagnostic, for example. */
3522 return result;
3525 /* Mark P (a stmt_tree) for GC. The use of a `void *' for the
3526 parameter allows this function to be used as a GC-marking
3527 function. */
3529 void
3530 mark_stmt_tree (p)
3531 void *p;
3533 stmt_tree st = (stmt_tree) p;
3535 ggc_mark_tree (st->x_last_stmt);
3536 ggc_mark_tree (st->x_last_expr_type);
3539 /* Mark LD for GC. */
3541 void
3542 c_mark_lang_decl (c)
3543 struct c_lang_decl *c ATTRIBUTE_UNUSED;
3547 /* Mark F for GC. */
3549 void
3550 mark_c_language_function (f)
3551 struct language_function *f;
3553 if (!f)
3554 return;
3556 mark_stmt_tree (&f->x_stmt_tree);
3557 ggc_mark_tree (f->x_scope_stmt_stack);
3560 /* Hook used by expand_expr to expand language-specific tree codes. */
3563 c_expand_expr (exp, target, tmode, modifier)
3564 tree exp;
3565 rtx target;
3566 enum machine_mode tmode;
3567 enum expand_modifier modifier;
3569 switch (TREE_CODE (exp))
3571 case STMT_EXPR:
3573 tree rtl_expr;
3574 rtx result;
3576 /* Since expand_expr_stmt calls free_temp_slots after every
3577 expression statement, we must call push_temp_slots here.
3578 Otherwise, any temporaries in use now would be considered
3579 out-of-scope after the first EXPR_STMT from within the
3580 STMT_EXPR. */
3581 push_temp_slots ();
3582 rtl_expr = expand_start_stmt_expr ();
3584 /* If we want the result of this expression, find the last
3585 EXPR_STMT in the COMPOUND_STMT and mark it as addressable. */
3586 if (target != const0_rtx
3587 && TREE_CODE (STMT_EXPR_STMT (exp)) == COMPOUND_STMT
3588 && TREE_CODE (COMPOUND_BODY (STMT_EXPR_STMT (exp))) == SCOPE_STMT)
3590 tree expr = COMPOUND_BODY (STMT_EXPR_STMT (exp));
3591 tree last = TREE_CHAIN (expr);
3593 while (TREE_CHAIN (last))
3595 expr = last;
3596 last = TREE_CHAIN (last);
3599 if (TREE_CODE (last) == SCOPE_STMT
3600 && TREE_CODE (expr) == EXPR_STMT)
3601 TREE_ADDRESSABLE (expr) = 1;
3604 expand_stmt (STMT_EXPR_STMT (exp));
3605 expand_end_stmt_expr (rtl_expr);
3606 result = expand_expr (rtl_expr, target, tmode, modifier);
3607 pop_temp_slots ();
3608 return result;
3610 break;
3612 case CALL_EXPR:
3614 if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
3615 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3616 == FUNCTION_DECL)
3617 && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3618 && (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
3619 == BUILT_IN_FRONTEND))
3620 return c_expand_builtin (exp, target, tmode, modifier);
3621 else
3622 abort ();
3624 break;
3626 case COMPOUND_LITERAL_EXPR:
3628 /* Initialize the anonymous variable declared in the compound
3629 literal, then return the variable. */
3630 tree decl = COMPOUND_LITERAL_EXPR_DECL (exp);
3631 emit_local_var (decl);
3632 return expand_expr (decl, target, tmode, modifier);
3635 default:
3636 abort ();
3639 abort ();
3640 return NULL;
3643 /* Hook used by safe_from_p to handle language-specific tree codes. */
3646 c_safe_from_p (target, exp)
3647 rtx target;
3648 tree exp;
3650 /* We can see statements here when processing the body of a
3651 statement-expression. For a declaration statement declaring a
3652 variable, look at the variable's initializer. */
3653 if (TREE_CODE (exp) == DECL_STMT)
3655 tree decl = DECL_STMT_DECL (exp);
3657 if (TREE_CODE (decl) == VAR_DECL
3658 && DECL_INITIAL (decl)
3659 && !safe_from_p (target, DECL_INITIAL (decl), /*top_p=*/0))
3660 return 0;
3663 /* For any statement, we must follow the statement-chain. */
3664 if (statement_code_p (TREE_CODE (exp)) && TREE_CHAIN (exp))
3665 return safe_from_p (target, TREE_CHAIN (exp), /*top_p=*/0);
3667 /* Assume everything else is safe. */
3668 return 1;
3671 /* Hook used by unsafe_for_reeval to handle language-specific tree codes. */
3674 c_unsafe_for_reeval (exp)
3675 tree exp;
3677 /* Statement expressions may not be reevaluated, likewise compound
3678 literals. */
3679 if (TREE_CODE (exp) == STMT_EXPR
3680 || TREE_CODE (exp) == COMPOUND_LITERAL_EXPR)
3681 return 2;
3683 /* Walk all other expressions. */
3684 return -1;
3687 /* Hook used by staticp to handle language-specific tree codes. */
3690 c_staticp (exp)
3691 tree exp;
3693 if (TREE_CODE (exp) == COMPOUND_LITERAL_EXPR
3694 && TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (exp)))
3695 return 1;
3696 return 0;
3699 /* Tree code classes. */
3701 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
3703 static const char c_tree_code_type[] = {
3704 'x',
3705 #include "c-common.def"
3707 #undef DEFTREECODE
3709 /* Table indexed by tree code giving number of expression
3710 operands beyond the fixed part of the node structure.
3711 Not used for types or decls. */
3713 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
3715 static const int c_tree_code_length[] = {
3717 #include "c-common.def"
3719 #undef DEFTREECODE
3721 /* Names of tree components.
3722 Used for printing out the tree and error messages. */
3723 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
3725 static const char *const c_tree_code_name[] = {
3726 "@@dummy",
3727 #include "c-common.def"
3729 #undef DEFTREECODE
3731 /* Adds the tree codes specific to the C front end to the list of all
3732 tree codes. */
3734 void
3735 add_c_tree_codes ()
3737 memcpy (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE,
3738 c_tree_code_type,
3739 (int) LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE);
3740 memcpy (tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE,
3741 c_tree_code_length,
3742 (LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) * sizeof (int));
3743 memcpy (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE,
3744 c_tree_code_name,
3745 (LAST_C_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) * sizeof (char *));
3746 lang_unsafe_for_reeval = c_unsafe_for_reeval;
3749 #define CALLED_AS_BUILT_IN(NODE) \
3750 (!strncmp (IDENTIFIER_POINTER (DECL_NAME (NODE)), "__builtin_", 10))
3752 static rtx
3753 c_expand_builtin (exp, target, tmode, modifier)
3754 tree exp;
3755 rtx target;
3756 enum machine_mode tmode;
3757 enum expand_modifier modifier;
3759 tree type = TREE_TYPE (exp);
3760 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
3761 tree arglist = TREE_OPERAND (exp, 1);
3762 enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
3763 enum tree_code code = TREE_CODE (exp);
3764 const int ignore = (target == const0_rtx
3765 || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
3766 || code == CONVERT_EXPR || code == REFERENCE_EXPR
3767 || code == COND_EXPR)
3768 && TREE_CODE (type) == VOID_TYPE));
3770 if (! optimize && ! CALLED_AS_BUILT_IN (fndecl))
3771 return expand_call (exp, target, ignore);
3773 switch (fcode)
3775 case BUILT_IN_PRINTF:
3776 target = c_expand_builtin_printf (arglist, target, tmode,
3777 modifier, ignore, /*unlocked=*/ 0);
3778 if (target)
3779 return target;
3780 break;
3782 case BUILT_IN_PRINTF_UNLOCKED:
3783 target = c_expand_builtin_printf (arglist, target, tmode,
3784 modifier, ignore, /*unlocked=*/ 1);
3785 if (target)
3786 return target;
3787 break;
3789 case BUILT_IN_FPRINTF:
3790 target = c_expand_builtin_fprintf (arglist, target, tmode,
3791 modifier, ignore, /*unlocked=*/ 0);
3792 if (target)
3793 return target;
3794 break;
3796 case BUILT_IN_FPRINTF_UNLOCKED:
3797 target = c_expand_builtin_fprintf (arglist, target, tmode,
3798 modifier, ignore, /*unlocked=*/ 1);
3799 if (target)
3800 return target;
3801 break;
3803 default: /* just do library call, if unknown builtin */
3804 error ("built-in function `%s' not currently supported",
3805 IDENTIFIER_POINTER (DECL_NAME (fndecl)));
3808 /* The switch statement above can drop through to cause the function
3809 to be called normally. */
3810 return expand_call (exp, target, ignore);
3813 /* Check an arglist to *printf for problems. The arglist should start
3814 at the format specifier, with the remaining arguments immediately
3815 following it. */
3816 static int
3817 is_valid_printf_arglist (arglist)
3818 tree arglist;
3820 /* Save this value so we can restore it later. */
3821 const int SAVE_pedantic = pedantic;
3822 int diagnostic_occurred = 0;
3823 tree attrs;
3825 /* Set this to a known value so the user setting won't affect code
3826 generation. */
3827 pedantic = 1;
3828 /* Check to make sure there are no format specifier errors. */
3829 attrs = tree_cons (get_identifier ("format"),
3830 tree_cons (NULL_TREE,
3831 get_identifier ("printf"),
3832 tree_cons (NULL_TREE,
3833 integer_one_node,
3834 tree_cons (NULL_TREE,
3835 build_int_2 (2, 0),
3836 NULL_TREE))),
3837 NULL_TREE);
3838 check_function_format (&diagnostic_occurred, attrs, arglist);
3840 /* Restore the value of `pedantic'. */
3841 pedantic = SAVE_pedantic;
3843 /* If calling `check_function_format_ptr' produces a warning, we
3844 return false, otherwise we return true. */
3845 return ! diagnostic_occurred;
3848 /* If the arguments passed to printf are suitable for optimizations,
3849 we attempt to transform the call. */
3850 static rtx
3851 c_expand_builtin_printf (arglist, target, tmode, modifier, ignore, unlocked)
3852 tree arglist;
3853 rtx target;
3854 enum machine_mode tmode;
3855 enum expand_modifier modifier;
3856 int ignore;
3857 int unlocked;
3859 tree fn_putchar = unlocked ?
3860 built_in_decls[BUILT_IN_PUTCHAR_UNLOCKED] : built_in_decls[BUILT_IN_PUTCHAR];
3861 tree fn_puts = unlocked ?
3862 built_in_decls[BUILT_IN_PUTS_UNLOCKED] : built_in_decls[BUILT_IN_PUTS];
3863 tree fn, format_arg, stripped_string;
3865 /* If the return value is used, or the replacement _DECL isn't
3866 initialized, don't do the transformation. */
3867 if (!ignore || !fn_putchar || !fn_puts)
3868 return 0;
3870 /* Verify the required arguments in the original call. */
3871 if (arglist == 0
3872 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE))
3873 return 0;
3875 /* Check the specifier vs. the parameters. */
3876 if (!is_valid_printf_arglist (arglist))
3877 return 0;
3879 format_arg = TREE_VALUE (arglist);
3880 stripped_string = format_arg;
3881 STRIP_NOPS (stripped_string);
3882 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
3883 stripped_string = TREE_OPERAND (stripped_string, 0);
3885 /* If the format specifier isn't a STRING_CST, punt. */
3886 if (TREE_CODE (stripped_string) != STRING_CST)
3887 return 0;
3889 /* OK! We can attempt optimization. */
3891 /* If the format specifier was "%s\n", call __builtin_puts(arg2). */
3892 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s\n") == 0)
3894 arglist = TREE_CHAIN (arglist);
3895 fn = fn_puts;
3897 /* If the format specifier was "%c", call __builtin_putchar (arg2). */
3898 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
3900 arglist = TREE_CHAIN (arglist);
3901 fn = fn_putchar;
3903 else
3905 /* We can't handle anything else with % args or %% ... yet. */
3906 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
3907 return 0;
3909 /* If the resulting constant string has a length of 1, call
3910 putchar. Note, TREE_STRING_LENGTH includes the terminating
3911 NULL in its count. */
3912 if (TREE_STRING_LENGTH (stripped_string) == 2)
3914 /* Given printf("c"), (where c is any one character,)
3915 convert "c"[0] to an int and pass that to the replacement
3916 function. */
3917 arglist = build_int_2 (TREE_STRING_POINTER (stripped_string)[0], 0);
3918 arglist = build_tree_list (NULL_TREE, arglist);
3920 fn = fn_putchar;
3922 /* If the resulting constant was "string\n", call
3923 __builtin_puts("string"). Ensure "string" has at least one
3924 character besides the trailing \n. Note, TREE_STRING_LENGTH
3925 includes the terminating NULL in its count. */
3926 else if (TREE_STRING_LENGTH (stripped_string) > 2
3927 && TREE_STRING_POINTER (stripped_string)
3928 [TREE_STRING_LENGTH (stripped_string) - 2] == '\n')
3930 /* Create a NULL-terminated string that's one char shorter
3931 than the original, stripping off the trailing '\n'. */
3932 const int newlen = TREE_STRING_LENGTH (stripped_string) - 1;
3933 char *newstr = (char *) alloca (newlen);
3934 memcpy (newstr, TREE_STRING_POINTER (stripped_string), newlen - 1);
3935 newstr[newlen - 1] = 0;
3937 arglist = combine_strings (build_string (newlen, newstr));
3938 arglist = build_tree_list (NULL_TREE, arglist);
3939 fn = fn_puts;
3941 else
3942 /* We'd like to arrange to call fputs(string) here, but we
3943 need stdout and don't have a way to get it ... yet. */
3944 return 0;
3947 return expand_expr (build_function_call (fn, arglist),
3948 (ignore ? const0_rtx : target),
3949 tmode, modifier);
3952 /* If the arguments passed to fprintf are suitable for optimizations,
3953 we attempt to transform the call. */
3954 static rtx
3955 c_expand_builtin_fprintf (arglist, target, tmode, modifier, ignore, unlocked)
3956 tree arglist;
3957 rtx target;
3958 enum machine_mode tmode;
3959 enum expand_modifier modifier;
3960 int ignore;
3961 int unlocked;
3963 tree fn_fputc = unlocked ?
3964 built_in_decls[BUILT_IN_FPUTC_UNLOCKED] : built_in_decls[BUILT_IN_FPUTC];
3965 tree fn_fputs = unlocked ?
3966 built_in_decls[BUILT_IN_FPUTS_UNLOCKED] : built_in_decls[BUILT_IN_FPUTS];
3967 tree fn, format_arg, stripped_string;
3969 /* If the return value is used, or the replacement _DECL isn't
3970 initialized, don't do the transformation. */
3971 if (!ignore || !fn_fputc || !fn_fputs)
3972 return 0;
3974 /* Verify the required arguments in the original call. */
3975 if (arglist == 0
3976 || (TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE)
3977 || (TREE_CHAIN (arglist) == 0)
3978 || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) !=
3979 POINTER_TYPE))
3980 return 0;
3982 /* Check the specifier vs. the parameters. */
3983 if (!is_valid_printf_arglist (TREE_CHAIN (arglist)))
3984 return 0;
3986 format_arg = TREE_VALUE (TREE_CHAIN (arglist));
3987 stripped_string = format_arg;
3988 STRIP_NOPS (stripped_string);
3989 if (stripped_string && TREE_CODE (stripped_string) == ADDR_EXPR)
3990 stripped_string = TREE_OPERAND (stripped_string, 0);
3992 /* If the format specifier isn't a STRING_CST, punt. */
3993 if (TREE_CODE (stripped_string) != STRING_CST)
3994 return 0;
3996 /* OK! We can attempt optimization. */
3998 /* If the format specifier was "%s", call __builtin_fputs(arg3, arg1). */
3999 if (strcmp (TREE_STRING_POINTER (stripped_string), "%s") == 0)
4001 tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
4002 arglist = tree_cons (NULL_TREE,
4003 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
4004 newarglist);
4005 fn = fn_fputs;
4007 /* If the format specifier was "%c", call __builtin_fputc (arg3, arg1). */
4008 else if (strcmp (TREE_STRING_POINTER (stripped_string), "%c") == 0)
4010 tree newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist));
4011 arglist = tree_cons (NULL_TREE,
4012 TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))),
4013 newarglist);
4014 fn = fn_fputc;
4016 else
4018 /* We can't handle anything else with % args or %% ... yet. */
4019 if (strchr (TREE_STRING_POINTER (stripped_string), '%'))
4020 return 0;
4022 /* When "string" doesn't contain %, replace all cases of
4023 fprintf(stream,string) with fputs(string,stream). The fputs
4024 builtin will take take of special cases like length==1. */
4025 arglist = tree_cons (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)),
4026 build_tree_list (NULL_TREE, TREE_VALUE (arglist)));
4027 fn = fn_fputs;
4030 return expand_expr (build_function_call (fn, arglist),
4031 (ignore ? const0_rtx : target),
4032 tmode, modifier);
4036 /* Given a boolean expression ARG, return a tree representing an increment
4037 or decrement (as indicated by CODE) of ARG. The front end must check for
4038 invalid cases (e.g., decrement in C++). */
4039 tree
4040 boolean_increment (code, arg)
4041 enum tree_code code;
4042 tree arg;
4044 tree val;
4045 tree true_res = (c_language == clk_cplusplus
4046 ? boolean_true_node
4047 : c_bool_true_node);
4048 arg = stabilize_reference (arg);
4049 switch (code)
4051 case PREINCREMENT_EXPR:
4052 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4053 break;
4054 case POSTINCREMENT_EXPR:
4055 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, true_res);
4056 arg = save_expr (arg);
4057 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4058 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4059 break;
4060 case PREDECREMENT_EXPR:
4061 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4062 break;
4063 case POSTDECREMENT_EXPR:
4064 val = build (MODIFY_EXPR, TREE_TYPE (arg), arg, invert_truthvalue (arg));
4065 arg = save_expr (arg);
4066 val = build (COMPOUND_EXPR, TREE_TYPE (arg), val, arg);
4067 val = build (COMPOUND_EXPR, TREE_TYPE (arg), arg, val);
4068 break;
4069 default:
4070 abort ();
4072 TREE_SIDE_EFFECTS (val) = 1;
4073 return val;
4076 /* Handle C and C++ default attributes. */
4078 enum built_in_attribute
4080 #define DEF_ATTR_NULL_TREE(ENUM) ENUM,
4081 #define DEF_ATTR_INT(ENUM, VALUE) ENUM,
4082 #define DEF_ATTR_IDENT(ENUM, STRING) ENUM,
4083 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) ENUM,
4084 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No entry needed in enum. */
4085 #include "builtin-attrs.def"
4086 #undef DEF_ATTR_NULL_TREE
4087 #undef DEF_ATTR_INT
4088 #undef DEF_ATTR_IDENT
4089 #undef DEF_ATTR_TREE_LIST
4090 #undef DEF_FN_ATTR
4091 ATTR_LAST
4094 static tree built_in_attributes[(int) ATTR_LAST];
4096 static bool c_attrs_initialized = false;
4098 static void c_init_attributes PARAMS ((void));
4100 /* Common initialization before parsing options. */
4101 void
4102 c_common_init_options (lang)
4103 enum c_language_kind lang;
4105 c_language = lang;
4106 parse_in = cpp_create_reader (lang == clk_c ? CLK_GNUC89:
4107 lang == clk_cplusplus ? CLK_GNUCXX: CLK_OBJC);
4109 /* Mark as "unspecified" (see c_common_post_options). */
4110 flag_bounds_check = -1;
4113 /* Post-switch processing. */
4114 void
4115 c_common_post_options ()
4117 cpp_post_options (parse_in);
4119 flag_inline_trees = 1;
4121 /* Use tree inlining if possible. Function instrumentation is only
4122 done in the RTL level, so we disable tree inlining. */
4123 if (! flag_instrument_function_entry_exit)
4125 if (!flag_no_inline)
4126 flag_no_inline = 1;
4127 if (flag_inline_functions)
4129 flag_inline_trees = 2;
4130 flag_inline_functions = 0;
4134 /* If still "unspecified", make it match -fbounded-pointers. */
4135 if (flag_bounds_check == -1)
4136 flag_bounds_check = flag_bounded_pointers;
4138 /* Special format checking options don't work without -Wformat; warn if
4139 they are used. */
4140 if (warn_format_y2k && !warn_format)
4141 warning ("-Wformat-y2k ignored without -Wformat");
4142 if (warn_format_extra_args && !warn_format)
4143 warning ("-Wformat-extra-args ignored without -Wformat");
4144 if (warn_format_nonliteral && !warn_format)
4145 warning ("-Wformat-nonliteral ignored without -Wformat");
4146 if (warn_format_security && !warn_format)
4147 warning ("-Wformat-security ignored without -Wformat");
4148 if (warn_missing_format_attribute && !warn_format)
4149 warning ("-Wmissing-format-attribute ignored without -Wformat");
4152 /* Front end initialization common to C, ObjC and C++. */
4153 const char *
4154 c_common_init (filename)
4155 const char *filename;
4157 /* Do this before initializing pragmas, as then cpplib's hash table
4158 has been set up. */
4159 filename = init_c_lex (filename);
4161 init_pragma ();
4163 if (!c_attrs_initialized)
4164 c_init_attributes ();
4166 return filename;
4169 /* Common finish hook for the C, ObjC and C++ front ends. */
4170 void
4171 c_common_finish ()
4173 cpp_finish (parse_in);
4175 /* For performance, avoid tearing down cpplib's internal structures.
4176 Call cpp_errors () instead of cpp_destroy (). */
4177 errorcount += cpp_errors (parse_in);
4180 static void
4181 c_init_attributes ()
4183 /* Fill in the built_in_attributes array. */
4184 #define DEF_ATTR_NULL_TREE(ENUM) \
4185 built_in_attributes[(int) ENUM] = NULL_TREE;
4186 #define DEF_ATTR_INT(ENUM, VALUE) \
4187 built_in_attributes[(int) ENUM] = build_int_2 (VALUE, VALUE < 0 ? -1 : 0);
4188 #define DEF_ATTR_IDENT(ENUM, STRING) \
4189 built_in_attributes[(int) ENUM] = get_identifier (STRING);
4190 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN) \
4191 built_in_attributes[(int) ENUM] \
4192 = tree_cons (built_in_attributes[(int) PURPOSE], \
4193 built_in_attributes[(int) VALUE], \
4194 built_in_attributes[(int) CHAIN]);
4195 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) /* No initialization needed. */
4196 #include "builtin-attrs.def"
4197 #undef DEF_ATTR_NULL_TREE
4198 #undef DEF_ATTR_INT
4199 #undef DEF_ATTR_IDENT
4200 #undef DEF_ATTR_TREE_LIST
4201 #undef DEF_FN_ATTR
4202 ggc_add_tree_root (built_in_attributes, (int) ATTR_LAST);
4203 c_attrs_initialized = true;
4206 /* Depending on the name of DECL, apply default attributes to it. */
4208 void
4209 c_common_insert_default_attributes (decl)
4210 tree decl;
4212 tree name = DECL_NAME (decl);
4214 if (!c_attrs_initialized)
4215 c_init_attributes ();
4217 #define DEF_ATTR_NULL_TREE(ENUM) /* Nothing needed after initialization. */
4218 #define DEF_ATTR_INT(ENUM, VALUE)
4219 #define DEF_ATTR_IDENT(ENUM, STRING)
4220 #define DEF_ATTR_TREE_LIST(ENUM, PURPOSE, VALUE, CHAIN)
4221 #define DEF_FN_ATTR(NAME, ATTRS, PREDICATE) \
4222 if ((PREDICATE) && name == built_in_attributes[(int) NAME]) \
4223 decl_attributes (&decl, built_in_attributes[(int) ATTRS], \
4224 ATTR_FLAG_BUILT_IN);
4225 #include "builtin-attrs.def"
4226 #undef DEF_ATTR_NULL_TREE
4227 #undef DEF_ATTR_INT
4228 #undef DEF_ATTR_IDENT
4229 #undef DEF_ATTR_TREE_LIST
4230 #undef DEF_FN_ATTR
4233 /* Output a -Wshadow warning MSGID about NAME, an IDENTIFIER_NODE, and
4234 additionally give the location of the previous declaration DECL. */
4235 void
4236 shadow_warning (msgid, name, decl)
4237 const char *msgid;
4238 tree name, decl;
4240 warning ("declaration of `%s' shadows %s", IDENTIFIER_POINTER (name), msgid);
4241 warning_with_file_and_line (DECL_SOURCE_FILE (decl),
4242 DECL_SOURCE_LINE (decl),
4243 "shadowed declaration is here");