1 /* Subroutines shared by all languages that are variants of C.
2 Copyright (C) 1992 Free Software Foundation, Inc.
4 This file is part of GNU CC.
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
28 extern struct obstack permanent_obstack;
30 /* Make bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
33 declare_function_name ()
35 tree decl, type, init;
36 char *name, *printable_name;
39 if (current_function_decl == NULL)
42 printable_name = "top level";
46 char *kind = "function";
47 if (TREE_CODE (TREE_TYPE (current_function_decl)) == METHOD_TYPE)
49 /* Allow functions to be nameless (such as artificial ones). */
50 if (DECL_NAME (current_function_decl))
51 name = IDENTIFIER_POINTER (DECL_NAME (current_function_decl));
54 printable_name = (*decl_printable_name) (current_function_decl, &kind);
57 /* If the default size of char arrays isn't big enough for the name,
59 len = strlen (name) + 1;
60 type = char_array_type_node;
61 if (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TREE_TYPE (char_array_type_node)))
63 type = build_array_type (char_type_node,
64 build_index_type (build_int_2 (len, 0)));
66 push_obstacks_nochange ();
67 decl = build_decl (VAR_DECL, get_identifier ("__FUNCTION__"), type);
68 TREE_STATIC (decl) = 1;
69 TREE_READONLY (decl) = 1;
70 DECL_SOURCE_LINE (decl) = 0;
71 DECL_IN_SYSTEM_HEADER (decl) = 1;
72 DECL_IGNORED_P (decl) = 1;
73 init = build_string (len, name);
74 TREE_TYPE (init) = type;
75 DECL_INITIAL (decl) = init;
76 finish_decl (pushdecl (decl), init, NULL_TREE);
78 len = strlen (printable_name) + 1;
79 type = char_array_type_node;
80 if (TREE_INT_CST_LOW (TYPE_MAX_VALUE (TREE_TYPE (char_array_type_node)))
82 type = build_array_type (char_type_node,
83 build_index_type (build_int_2 (len, 0)));
85 push_obstacks_nochange ();
86 decl = build_decl (VAR_DECL, get_identifier ("__PRETTY_FUNCTION__"), type);
87 TREE_STATIC (decl) = 1;
88 TREE_READONLY (decl) = 1;
89 DECL_SOURCE_LINE (decl) = 0;
90 DECL_IN_SYSTEM_HEADER (decl) = 1;
91 DECL_IGNORED_P (decl) = 1;
92 init = build_string (len, printable_name);
93 TREE_TYPE (init) = type;
94 DECL_INITIAL (decl) = init;
95 finish_decl (pushdecl (decl), init, NULL_TREE);
98 /* Given a chain of STRING_CST nodes,
99 concatenate them into one STRING_CST
100 and give it a suitable array-of-chars data type. */
103 combine_strings (strings)
106 register tree value, t;
107 register int length = 1;
110 int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
113 if (TREE_CHAIN (strings))
115 /* More than one in the chain, so concatenate. */
116 register char *p, *q;
118 /* Don't include the \0 at the end of each substring,
119 except for the last one.
120 Count wide strings and ordinary strings separately. */
121 for (t = strings; t; t = TREE_CHAIN (t))
123 if (TREE_TYPE (t) == wchar_array_type_node)
125 wide_length += (TREE_STRING_LENGTH (t) - wchar_bytes);
129 length += (TREE_STRING_LENGTH (t) - 1);
132 /* If anything is wide, the non-wides will be converted,
133 which makes them take more space. */
135 length = length * wchar_bytes + wide_length;
137 p = savealloc (length);
139 /* Copy the individual strings into the new combined string.
140 If the combined string is wide, convert the chars to ints
141 for any individual strings that are not wide. */
144 for (t = strings; t; t = TREE_CHAIN (t))
146 int len = (TREE_STRING_LENGTH (t)
147 - ((TREE_TYPE (t) == wchar_array_type_node)
149 if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
151 bcopy (TREE_STRING_POINTER (t), q, len);
157 for (i = 0; i < len; i++)
158 ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
159 q += len * wchar_bytes;
165 for (i = 0; i < wchar_bytes; i++)
171 value = make_node (STRING_CST);
172 TREE_STRING_POINTER (value) = p;
173 TREE_STRING_LENGTH (value) = length;
174 TREE_CONSTANT (value) = 1;
179 length = TREE_STRING_LENGTH (value);
180 if (TREE_TYPE (value) == wchar_array_type_node)
184 /* Compute the number of elements, for the array type. */
185 nchars = wide_flag ? length / wchar_bytes : length;
187 /* Create the array type for the string constant.
188 -Wwrite-strings says make the string constant an array of const char
189 so that copying it to a non-const pointer will get a warning. */
190 if (warn_write_strings
191 && (! flag_traditional && ! flag_writable_strings))
194 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
197 = build_array_type (elements,
198 build_index_type (build_int_2 (nchars - 1, 0)));
202 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
203 build_index_type (build_int_2 (nchars - 1, 0)));
204 TREE_CONSTANT (value) = 1;
205 TREE_STATIC (value) = 1;
209 /* Process the attributes listed in ATTRIBUTES
210 and install them in DECL. */
213 decl_attributes (decl, attributes)
214 tree decl, attributes;
217 for (a = attributes; a; a = TREE_CHAIN (a))
218 if (TREE_VALUE (a) == get_identifier ("packed"))
220 if (TREE_CODE (decl) == FIELD_DECL)
221 DECL_PACKED (decl) = 1;
222 /* We can't set DECL_PACKED for a VAR_DECL, because the bit is
223 used for DECL_REGISTER. It wouldn't mean anything anyway. */
225 else if (TREE_VALUE (a) != 0
226 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
227 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("mode"))
231 = IDENTIFIER_POINTER (TREE_VALUE (TREE_VALUE (a)));
233 /* Give this decl a type with the specified mode. */
234 for (i = 0; i < NUM_MACHINE_MODES; i++)
235 if (!strcmp (specified_name, GET_MODE_NAME (i)))
238 = type_for_mode (i, TREE_UNSIGNED (TREE_TYPE (decl)));
241 TREE_TYPE (decl) = type;
242 DECL_SIZE (decl) = 0;
243 layout_decl (decl, 0);
246 error ("no data type for mode `%s'", specified_name);
249 if (i == NUM_MACHINE_MODES)
250 error ("unknown machine mode `%s'", specified_name);
252 else if (TREE_VALUE (a) != 0
253 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
254 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("aligned"))
256 int align = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (a)))
259 if (exact_log2 (align) == -1)
260 error_with_decl (decl,
261 "requested alignment of `%s' is not a power of 2");
262 else if (TREE_CODE (decl) != VAR_DECL
263 && TREE_CODE (decl) != FIELD_DECL)
264 error_with_decl (decl,
265 "alignment specified for `%s'");
267 DECL_ALIGN (decl) = align;
269 else if (TREE_VALUE (a) != 0
270 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
271 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("format"))
273 tree list = TREE_VALUE (TREE_VALUE (a));
274 tree format_type = TREE_PURPOSE (list);
275 int format_num = TREE_INT_CST_LOW (TREE_PURPOSE (TREE_VALUE (list)));
276 int first_arg_num = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (list)));
279 if (TREE_CODE (decl) != FUNCTION_DECL)
281 error_with_decl (decl,
282 "argument format specified for non-function `%s'");
286 if (format_type == get_identifier ("printf"))
288 else if (format_type == get_identifier ("scanf"))
292 error_with_decl (decl, "unrecognized format specifier for `%s'");
296 if (first_arg_num != 0 && first_arg_num <= format_num)
298 error_with_decl (decl,
299 "format string arg follows the args to be formatted, for `%s'");
303 record_format_info (DECL_NAME (decl), is_scan, format_num,
308 /* Print a warning if a constant expression had overflow in folding.
309 Invoke this function on every expression that the language
310 requires to be a constant expression.
311 Note the ANSI C standard says it is erroneous for a
312 constant expression to overflow. */
315 constant_expression_warning (value)
318 if (TREE_CODE (value) == INTEGER_CST && TREE_CONSTANT_OVERFLOW (value))
320 pedwarn ("overflow in constant expression");
321 /* Suppress duplicate warnings. */
322 TREE_CONSTANT_OVERFLOW (value) = 0;
326 /* Print a warning if an expression had overflow in folding.
327 Invoke this function on every expression that
328 (1) appears in the source code, and
329 (2) might be a constant expression that overflowed, and
330 (3) is not already checked by convert_and_check;
331 however, do not invoke this function on operands of explicit casts. */
334 overflow_warning (value)
337 if (TREE_CODE (value) == INTEGER_CST && TREE_CONSTANT_OVERFLOW (value))
339 pedwarn ("integer overflow in expression");
340 TREE_CONSTANT_OVERFLOW (value) = 0;
344 /* Print a warning if a large constant is truncated to unsigned,
345 or if -Wconversion is used and a constant < 0 is converted to unsigned.
346 Invoke this function on every expression that might be implicitly
347 converted to an unsigned type. */
350 unsigned_conversion_warning (result, operand)
351 tree result, operand;
353 if (TREE_CODE (operand) == INTEGER_CST
354 && TREE_CODE (TREE_TYPE (result)) == INTEGER_TYPE
355 && TREE_UNSIGNED (TREE_TYPE (result))
356 && !int_fits_type_p (operand, TREE_TYPE (result)))
358 if (!int_fits_type_p (operand, signed_type (TREE_TYPE (result))))
359 /* This detects cases like converting -129 or 256 to unsigned char. */
360 pedwarn ("large integer implicitly truncated to unsigned type");
361 else if (warn_conversion)
362 pedwarn ("negative integer implicitly converted to unsigned type");
366 /* Convert EXPR to TYPE, warning about conversion problems with constants.
367 Invoke this function on every expression that is converted implicitly,
368 i.e. because of language rules and not because of an explicit cast. */
371 convert_and_check (type, expr)
374 tree t = convert (type, expr);
375 if (TREE_CODE (t) == INTEGER_CST)
377 if (TREE_UNSIGNED (TREE_TYPE (expr))
378 && !TREE_UNSIGNED (type)
379 && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
380 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr)))
381 /* No warning for converting 0x80000000 to int. */
382 TREE_CONSTANT_OVERFLOW (t) = 0;
383 else if (TREE_CONSTANT_OVERFLOW (t))
385 pedwarn ("overflow in implicit constant conversion");
386 TREE_CONSTANT_OVERFLOW (t) = 0;
389 unsigned_conversion_warning (t, expr);
395 c_expand_expr_stmt (expr)
398 /* Do default conversion if safe and possibly important,
399 in case within ({...}). */
400 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
401 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
402 expr = default_conversion (expr);
404 if (TREE_TYPE (expr) != error_mark_node
405 && TYPE_SIZE (TREE_TYPE (expr)) == 0
406 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
407 error ("expression statement has incomplete type");
409 expand_expr_stmt (expr);
412 /* Validate the expression after `case' and apply default promotions. */
415 check_case_value (value)
418 if (value == NULL_TREE)
421 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
422 STRIP_TYPE_NOPS (value);
424 if (TREE_CODE (value) != INTEGER_CST
425 && value != error_mark_node)
427 error ("case label does not reduce to an integer constant");
428 value = error_mark_node;
431 /* Promote char or short to int. */
432 value = default_conversion (value);
434 constant_expression_warning (value);
439 /* Return an integer type with BITS bits of precision,
440 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
443 type_for_size (bits, unsignedp)
447 if (bits == TYPE_PRECISION (signed_char_type_node))
448 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
450 if (bits == TYPE_PRECISION (short_integer_type_node))
451 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
453 if (bits == TYPE_PRECISION (integer_type_node))
454 return unsignedp ? unsigned_type_node : integer_type_node;
456 if (bits == TYPE_PRECISION (long_integer_type_node))
457 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
459 if (bits == TYPE_PRECISION (long_long_integer_type_node))
460 return (unsignedp ? long_long_unsigned_type_node
461 : long_long_integer_type_node);
463 if (bits <= TYPE_PRECISION (intQI_type_node))
464 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
466 if (bits <= TYPE_PRECISION (intHI_type_node))
467 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
469 if (bits <= TYPE_PRECISION (intSI_type_node))
470 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
472 if (bits <= TYPE_PRECISION (intDI_type_node))
473 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
478 /* Return a data type that has machine mode MODE.
479 If the mode is an integer,
480 then UNSIGNEDP selects between signed and unsigned types. */
483 type_for_mode (mode, unsignedp)
484 enum machine_mode mode;
487 if (mode == TYPE_MODE (signed_char_type_node))
488 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
490 if (mode == TYPE_MODE (short_integer_type_node))
491 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
493 if (mode == TYPE_MODE (integer_type_node))
494 return unsignedp ? unsigned_type_node : integer_type_node;
496 if (mode == TYPE_MODE (long_integer_type_node))
497 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
499 if (mode == TYPE_MODE (long_long_integer_type_node))
500 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
502 if (mode == TYPE_MODE (intQI_type_node))
503 return unsignedp ? unsigned_intQI_type_node : intQI_type_node;
505 if (mode == TYPE_MODE (intHI_type_node))
506 return unsignedp ? unsigned_intHI_type_node : intHI_type_node;
508 if (mode == TYPE_MODE (intSI_type_node))
509 return unsignedp ? unsigned_intSI_type_node : intSI_type_node;
511 if (mode == TYPE_MODE (intDI_type_node))
512 return unsignedp ? unsigned_intDI_type_node : intDI_type_node;
514 if (mode == TYPE_MODE (float_type_node))
515 return float_type_node;
517 if (mode == TYPE_MODE (double_type_node))
518 return double_type_node;
520 if (mode == TYPE_MODE (long_double_type_node))
521 return long_double_type_node;
523 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
524 return build_pointer_type (char_type_node);
526 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
527 return build_pointer_type (integer_type_node);
532 /* Print an error message for invalid operands to arith operation CODE.
533 NOP_EXPR is used as a special case (see truthvalue_conversion). */
536 binary_op_error (code)
539 register char *opname;
543 error ("invalid truth-value expression");
553 opname = "max"; break;
555 opname = "min"; break;
557 opname = "=="; break;
559 opname = "!="; break;
561 opname = "<="; break;
563 opname = ">="; break;
569 opname = "<<"; break;
571 opname = ">>"; break;
582 case TRUTH_ANDIF_EXPR:
583 opname = "&&"; break;
584 case TRUTH_ORIF_EXPR:
585 opname = "||"; break;
590 opname = "rotate"; break;
592 error ("invalid operands to binary %s", opname);
595 /* Subroutine of build_binary_op, used for comparison operations.
596 See if the operands have both been converted from subword integer types
597 and, if so, perhaps change them both back to their original type.
599 The arguments of this function are all pointers to local variables
600 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
601 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
603 If this function returns nonzero, it means that the comparison has
604 a constant value. What this function returns is an expression for
608 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
609 tree *op0_ptr, *op1_ptr;
611 enum tree_code *rescode_ptr;
616 int unsignedp0, unsignedp1;
618 tree primop0, primop1;
619 enum tree_code code = *rescode_ptr;
621 /* Throw away any conversions to wider types
622 already present in the operands. */
624 primop0 = get_narrower (op0, &unsignedp0);
625 primop1 = get_narrower (op1, &unsignedp1);
627 /* Handle the case that OP0 does not *contain* a conversion
628 but it *requires* conversion to FINAL_TYPE. */
630 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
631 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
632 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
633 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
635 /* If one of the operands must be floated, we cannot optimize. */
636 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
637 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
639 /* If first arg is constant, swap the args (changing operation
640 so value is preserved), for canonicalization. */
642 if (TREE_CONSTANT (primop0))
644 register tree tem = primop0;
645 register int temi = unsignedp0;
653 unsignedp0 = unsignedp1;
677 /* If comparing an integer against a constant more bits wide,
678 maybe we can deduce a value of 1 or 0 independent of the data.
679 Or else truncate the constant now
680 rather than extend the variable at run time.
682 This is only interesting if the constant is the wider arg.
683 Also, it is not safe if the constant is unsigned and the
684 variable arg is signed, since in this case the variable
685 would be sign-extended and then regarded as unsigned.
686 Our technique fails in this case because the lowest/highest
687 possible unsigned results don't follow naturally from the
688 lowest/highest possible values of the variable operand.
689 For just EQ_EXPR and NE_EXPR there is another technique that
690 could be used: see if the constant can be faithfully represented
691 in the other operand's type, by truncating it and reextending it
692 and see if that preserves the constant's value. */
695 && TREE_CODE (primop1) == INTEGER_CST
696 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
698 int min_gt, max_gt, min_lt, max_lt;
700 /* 1 if comparison is nominally unsigned. */
701 int unsignedp = TREE_UNSIGNED (*restype_ptr);
704 type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
706 maxval = TYPE_MAX_VALUE (type);
707 minval = TYPE_MIN_VALUE (type);
709 if (unsignedp && !unsignedp0)
710 *restype_ptr = signed_type (*restype_ptr);
712 if (TREE_TYPE (primop1) != *restype_ptr)
713 primop1 = convert (*restype_ptr, primop1);
714 if (type != *restype_ptr)
716 minval = convert (*restype_ptr, minval);
717 maxval = convert (*restype_ptr, maxval);
720 if (unsignedp && unsignedp0)
722 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
723 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
724 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
725 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
729 min_gt = INT_CST_LT (primop1, minval);
730 max_gt = INT_CST_LT (primop1, maxval);
731 min_lt = INT_CST_LT (minval, primop1);
732 max_lt = INT_CST_LT (maxval, primop1);
736 /* This used to be a switch, but Genix compiler can't handle that. */
739 if (max_lt || min_gt)
740 val = integer_one_node;
742 else if (code == EQ_EXPR)
744 if (max_lt || min_gt)
745 val = integer_zero_node;
747 else if (code == LT_EXPR)
750 val = integer_one_node;
752 val = integer_zero_node;
754 else if (code == GT_EXPR)
757 val = integer_one_node;
759 val = integer_zero_node;
761 else if (code == LE_EXPR)
764 val = integer_one_node;
766 val = integer_zero_node;
768 else if (code == GE_EXPR)
771 val = integer_one_node;
773 val = integer_zero_node;
776 /* If primop0 was sign-extended and unsigned comparison specd,
777 we did a signed comparison above using the signed type bounds.
778 But the comparison we output must be unsigned.
780 Also, for inequalities, VAL is no good; but if the signed
781 comparison had *any* fixed result, it follows that the
782 unsigned comparison just tests the sign in reverse
783 (positive values are LE, negative ones GE).
784 So we can generate an unsigned comparison
785 against an extreme value of the signed type. */
787 if (unsignedp && !unsignedp0)
794 primop1 = TYPE_MIN_VALUE (type);
800 primop1 = TYPE_MAX_VALUE (type);
804 type = unsigned_type (type);
807 if (!max_gt && !unsignedp0)
809 /* This is the case of (char)x >?< 0x80, which people used to use
810 expecting old C compilers to change the 0x80 into -0x80. */
811 if (val == integer_zero_node)
812 warning ("comparison is always 0 due to limited range of data type");
813 if (val == integer_one_node)
814 warning ("comparison is always 1 due to limited range of data type");
817 if (!min_lt && unsignedp0)
819 /* This is the case of (unsigned char)x >?< -1 or < 0. */
820 if (val == integer_zero_node)
821 warning ("comparison is always 0 due to limited range of data type");
822 if (val == integer_one_node)
823 warning ("comparison is always 1 due to limited range of data type");
828 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
829 if (TREE_SIDE_EFFECTS (primop0))
830 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
834 /* Value is not predetermined, but do the comparison
835 in the type of the operand that is not constant.
836 TYPE is already properly set. */
838 else if (real1 && real2
839 && (TYPE_PRECISION (TREE_TYPE (primop0))
840 == TYPE_PRECISION (TREE_TYPE (primop1))))
841 type = TREE_TYPE (primop0);
843 /* If args' natural types are both narrower than nominal type
844 and both extend in the same manner, compare them
845 in the type of the wider arg.
846 Otherwise must actually extend both to the nominal
847 common type lest different ways of extending
849 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
851 else if (unsignedp0 == unsignedp1 && real1 == real2
852 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
853 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
855 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
856 type = signed_or_unsigned_type (unsignedp0
857 || TREE_UNSIGNED (*restype_ptr),
859 /* Make sure shorter operand is extended the right way
860 to match the longer operand. */
861 primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
863 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
868 /* Here we must do the comparison on the nominal type
869 using the args exactly as we received them. */
874 if (!real1 && !real2 && integer_zerop (primop1)
875 && TREE_UNSIGNED (TREE_TYPE (primop0)))
882 warning ("unsigned value >= 0 is always 1");
883 value = integer_one_node;
888 warning ("unsigned value < 0 is always 0");
889 value = integer_zero_node;
894 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
895 if (TREE_SIDE_EFFECTS (primop0))
896 return build (COMPOUND_EXPR, TREE_TYPE (value),
903 *op0_ptr = convert (type, primop0);
904 *op1_ptr = convert (type, primop1);
906 *restype_ptr = integer_type_node;
911 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
912 or validate its data type for an `if' or `while' statement or ?..: exp.
914 This preparation consists of taking the ordinary
915 representation of an expression expr and producing a valid tree
916 boolean expression describing whether expr is nonzero. We could
917 simply always do build_binary_op (NE_EXPR, expr, integer_zero_node, 1),
918 but we optimize comparisons, &&, ||, and !.
920 The resulting type should always be `integer_type_node'. */
923 truthvalue_conversion (expr)
926 register enum tree_code code;
928 switch (TREE_CODE (expr))
930 /* It is simpler and generates better code to have only TRUTH_*_EXPR
931 or comparison expressions as truth values at this level. */
934 /* A one-bit unsigned bit-field is already acceptable. */
935 if (1 == TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (expr, 1)))
936 && TREE_UNSIGNED (TREE_OPERAND (expr, 1)))
942 /* It is simpler and generates better code to have only TRUTH_*_EXPR
943 or comparison expressions as truth values at this level. */
945 if (integer_zerop (TREE_OPERAND (expr, 1)))
946 return build_unary_op (TRUTH_NOT_EXPR, TREE_OPERAND (expr, 0), 0);
948 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
949 case TRUTH_ANDIF_EXPR:
950 case TRUTH_ORIF_EXPR:
958 return integer_zerop (expr) ? integer_zero_node : integer_one_node;
961 return real_zerop (expr) ? integer_zero_node : integer_one_node;
964 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
965 return build (COMPOUND_EXPR, integer_type_node,
966 TREE_OPERAND (expr, 0), integer_one_node);
968 return integer_one_node;
971 return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
972 ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
973 truthvalue_conversion (TREE_OPERAND (expr, 0)),
974 truthvalue_conversion (TREE_OPERAND (expr, 1)),
981 /* These don't change whether an object is non-zero or zero. */
982 return truthvalue_conversion (TREE_OPERAND (expr, 0));
986 /* These don't change whether an object is zero or non-zero, but
987 we can't ignore them if their second arg has side-effects. */
988 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
989 return build (COMPOUND_EXPR, integer_type_node, TREE_OPERAND (expr, 1),
990 truthvalue_conversion (TREE_OPERAND (expr, 0)));
992 return truthvalue_conversion (TREE_OPERAND (expr, 0));
995 /* Distribute the conversion into the arms of a COND_EXPR. */
996 return fold (build (COND_EXPR, integer_type_node, TREE_OPERAND (expr, 0),
997 truthvalue_conversion (TREE_OPERAND (expr, 1)),
998 truthvalue_conversion (TREE_OPERAND (expr, 2))));
1001 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
1002 since that affects how `default_conversion' will behave. */
1003 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
1004 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
1006 /* fall through... */
1008 /* If this is widening the argument, we can ignore it. */
1009 if (TYPE_PRECISION (TREE_TYPE (expr))
1010 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
1011 return truthvalue_conversion (TREE_OPERAND (expr, 0));
1016 /* These can be changed into a comparison of the two objects. */
1017 if (TREE_TYPE (TREE_OPERAND (expr, 0))
1018 == TREE_TYPE (TREE_OPERAND (expr, 1)))
1019 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
1020 TREE_OPERAND (expr, 1), 1);
1021 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
1022 fold (build1 (NOP_EXPR,
1023 TREE_TYPE (TREE_OPERAND (expr, 0)),
1024 TREE_OPERAND (expr, 1))), 1);
1027 if (warn_parentheses && C_EXP_ORIGINAL_CODE (expr) == MODIFY_EXPR)
1028 warning ("suggest parentheses around assignment used as truth value");
1032 if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
1033 return (build_binary_op
1034 ((TREE_SIDE_EFFECTS (expr)
1035 ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
1036 truthvalue_conversion (build_unary_op (REALPART_EXPR, expr, 0)),
1037 truthvalue_conversion (build_unary_op (IMAGPART_EXPR, expr, 0)),
1040 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
1043 /* Read the rest of a #-directive from input stream FINPUT.
1044 In normal use, the directive name and the white space after it
1045 have already been read, so they won't be included in the result.
1046 We allow for the fact that the directive line may contain
1047 a newline embedded within a character or string literal which forms
1048 a part of the directive.
1050 The value is a string in a reusable buffer. It remains valid
1051 only until the next time this function is called. */
1054 get_directive_line (finput)
1055 register FILE *finput;
1057 static char *directive_buffer = NULL;
1058 static unsigned buffer_length = 0;
1060 register char *buffer_limit;
1061 register int looking_for = 0;
1062 register int char_escaped = 0;
1064 if (buffer_length == 0)
1066 directive_buffer = (char *)xmalloc (128);
1067 buffer_length = 128;
1070 buffer_limit = &directive_buffer[buffer_length];
1072 for (p = directive_buffer; ; )
1076 /* Make buffer bigger if it is full. */
1077 if (p >= buffer_limit)
1079 register unsigned bytes_used = (p - directive_buffer);
1083 = (char *)xrealloc (directive_buffer, buffer_length);
1084 p = &directive_buffer[bytes_used];
1085 buffer_limit = &directive_buffer[buffer_length];
1090 /* Discard initial whitespace. */
1091 if ((c == ' ' || c == '\t') && p == directive_buffer)
1094 /* Detect the end of the directive. */
1095 if (c == '\n' && looking_for == 0)
1104 return directive_buffer;
1106 /* Handle string and character constant syntax. */
1109 if (looking_for == c && !char_escaped)
1110 looking_for = 0; /* Found terminator... stop looking. */
1113 if (c == '\'' || c == '"')
1114 looking_for = c; /* Don't stop buffering until we see another
1115 another one of these (or an EOF). */
1117 /* Handle backslash. */
1118 char_escaped = (c == '\\' && ! char_escaped);
1122 /* Make a variant type in the proper way for C/C++, propagating qualifiers
1123 down to the element type of an array. */
1126 c_build_type_variant (type, constp, volatilep)
1128 int constp, volatilep;
1130 if (TREE_CODE (type) == ARRAY_TYPE)
1132 tree real_main_variant = TYPE_MAIN_VARIANT (type);
1133 int permanent = TREE_PERMANENT (type);
1136 push_obstacks (&permanent_obstack, &permanent_obstack);
1137 type = build_array_type (c_build_type_variant (TREE_TYPE (type),
1139 TYPE_DOMAIN (type));
1140 TYPE_MAIN_VARIANT (type) = real_main_variant;
1144 return build_type_variant (type, constp, volatilep);