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. */
30 /* Given a chain of STRING_CST nodes,
31 concatenate them into one STRING_CST
32 and give it a suitable array-of-chars data type. */
35 combine_strings (strings)
38 register tree value, t;
39 register int length = 1;
42 int wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
45 if (TREE_CHAIN (strings))
47 /* More than one in the chain, so concatenate. */
50 /* Don't include the \0 at the end of each substring,
51 except for the last one.
52 Count wide strings and ordinary strings separately. */
53 for (t = strings; t; t = TREE_CHAIN (t))
55 if (TREE_TYPE (t) == wchar_array_type_node)
57 wide_length += (TREE_STRING_LENGTH (t) - wchar_bytes);
61 length += (TREE_STRING_LENGTH (t) - 1);
64 /* If anything is wide, the non-wides will be converted,
65 which makes them take more space. */
67 length = length * wchar_bytes + wide_length;
69 p = savealloc (length);
71 /* Copy the individual strings into the new combined string.
72 If the combined string is wide, convert the chars to ints
73 for any individual strings that are not wide. */
76 for (t = strings; t; t = TREE_CHAIN (t))
78 int len = (TREE_STRING_LENGTH (t)
79 - ((TREE_TYPE (t) == wchar_array_type_node)
81 if ((TREE_TYPE (t) == wchar_array_type_node) == wide_flag)
83 bcopy (TREE_STRING_POINTER (t), q, len);
89 for (i = 0; i < len; i++)
90 ((int *) q)[i] = TREE_STRING_POINTER (t)[i];
91 q += len * wchar_bytes;
97 for (i = 0; i < wchar_bytes; i++)
103 value = make_node (STRING_CST);
104 TREE_STRING_POINTER (value) = p;
105 TREE_STRING_LENGTH (value) = length;
106 TREE_CONSTANT (value) = 1;
111 length = TREE_STRING_LENGTH (value);
112 if (TREE_TYPE (value) == wchar_array_type_node)
116 /* Compute the number of elements, for the array type. */
117 nchars = wide_flag ? length / wchar_bytes : length;
119 /* Create the array type for the string constant.
120 -Wwrite-strings says make the string constant an array of const char
121 so that copying it to a non-const pointer will get a warning. */
122 if (warn_write_strings
123 && (! flag_traditional && ! flag_writable_strings))
126 = build_type_variant (wide_flag ? wchar_type_node : char_type_node,
129 = build_array_type (elements,
130 build_index_type (build_int_2 (nchars - 1, 0)));
134 = build_array_type (wide_flag ? wchar_type_node : char_type_node,
135 build_index_type (build_int_2 (nchars - 1, 0)));
136 TREE_CONSTANT (value) = 1;
137 TREE_STATIC (value) = 1;
141 /* Process the attributes listed in ATTRIBUTES
142 and install them in DECL. */
145 decl_attributes (decl, attributes)
146 tree decl, attributes;
149 for (a = attributes; a; a = TREE_CHAIN (a))
150 if (TREE_VALUE (a) != 0
151 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
152 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("aligned"))
154 int align = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (a)))
157 if (exact_log2 (align) == -1)
158 warning_with_decl (decl,
159 "requested alignment of `%s' is not a power of 2");
160 else if (TREE_CODE (decl) != VAR_DECL
161 && TREE_CODE (decl) != FIELD_DECL)
162 warning_with_decl (decl,
163 "alignment specified for `%s' which is not a variable");
165 /* ??? The maximum alignment gcc can currently handle is 16 bytes!
166 We should change the representation to be the log of the
167 actual alignment since we only handle powers of 2 anyway. */
168 else if (align > 255)
169 warning_with_decl (decl,
170 "requested alignment of `%s' exceeds compiler limits");
172 DECL_ALIGN (decl) = align;
174 else if (TREE_VALUE (a) != 0
175 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
176 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("packed"))
178 if (TREE_CODE (decl) == FIELD_DECL)
179 DECL_PACKED (decl) = 1;
181 else if (TREE_VALUE (a) != 0
182 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST
183 && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("format"))
185 tree list = TREE_VALUE (TREE_VALUE (a));
186 tree format_type = TREE_PURPOSE (list);
187 int format_num = TREE_INT_CST_LOW (TREE_PURPOSE (TREE_VALUE (list)));
188 int first_arg_num = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (list)));
191 if (TREE_CODE (decl) != FUNCTION_DECL)
193 warning_with_decl (decl,
194 "argument format specified for non-function `%s'");
198 if (format_type == get_identifier ("printf"))
200 else if (format_type == get_identifier ("scanf"))
204 warning_with_decl (decl,"unrecognized format specifier for `%s'");
208 if (first_arg_num != 0 && first_arg_num <= format_num)
210 warning_with_decl (decl,
211 "format string arg follows the args to be formatted, for `%s'");
215 record_format_info (DECL_NAME (decl), is_scan, format_num,
221 c_expand_expr_stmt (expr)
224 /* Do default conversion if safe and possibly important,
225 in case within ({...}). */
226 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE && lvalue_p (expr))
227 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
228 expr = default_conversion (expr);
230 if (TREE_TYPE (expr) != error_mark_node
231 && TYPE_SIZE (TREE_TYPE (expr)) == 0
232 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
233 error ("expression statement has incomplete type");
235 expand_expr_stmt (expr);
238 /* Validate the expression after `case' and apply default promotions. */
241 check_case_value (value)
244 if (value == NULL_TREE)
247 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
248 if (TREE_CODE (value) == NON_LVALUE_EXPR)
249 value = TREE_OPERAND (value, 0);
251 if (TREE_CODE (value) != INTEGER_CST
252 && value != error_mark_node)
254 error ("case label does not reduce to an integer constant");
255 value = error_mark_node;
258 /* Promote char or short to int. */
259 value = default_conversion (value);
264 /* Return an integer type with BITS bits of precision,
265 that is unsigned if UNSIGNEDP is nonzero, otherwise signed. */
268 type_for_size (bits, unsignedp)
272 if (bits <= TYPE_PRECISION (signed_char_type_node))
273 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
275 if (bits <= TYPE_PRECISION (short_integer_type_node))
276 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
278 if (bits <= TYPE_PRECISION (integer_type_node))
279 return unsignedp ? unsigned_type_node : integer_type_node;
281 if (bits <= TYPE_PRECISION (long_integer_type_node))
282 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
284 if (bits <= TYPE_PRECISION (long_long_integer_type_node))
285 return (unsignedp ? long_long_unsigned_type_node
286 : long_long_integer_type_node);
291 /* Return a data type that has machine mode MODE.
292 If the mode is an integer,
293 then UNSIGNEDP selects between signed and unsigned types. */
296 type_for_mode (mode, unsignedp)
297 enum machine_mode mode;
300 if (mode == TYPE_MODE (signed_char_type_node))
301 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
303 if (mode == TYPE_MODE (short_integer_type_node))
304 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
306 if (mode == TYPE_MODE (integer_type_node))
307 return unsignedp ? unsigned_type_node : integer_type_node;
309 if (mode == TYPE_MODE (long_integer_type_node))
310 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
312 if (mode == TYPE_MODE (long_long_integer_type_node))
313 return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
315 if (mode == TYPE_MODE (float_type_node))
316 return float_type_node;
318 if (mode == TYPE_MODE (double_type_node))
319 return double_type_node;
321 if (mode == TYPE_MODE (long_double_type_node))
322 return long_double_type_node;
324 if (mode == TYPE_MODE (build_pointer_type (char_type_node)))
325 return build_pointer_type (char_type_node);
327 if (mode == TYPE_MODE (build_pointer_type (integer_type_node)))
328 return build_pointer_type (integer_type_node);
333 /* Print an error message for invalid operands to arith operation CODE.
334 NOP_EXPR is used as a special case (see truthvalue_conversion). */
337 binary_op_error (code)
340 register char *opname;
344 error ("invalid truth-value expression");
354 opname = "max"; break;
356 opname = "min"; break;
358 opname = "=="; break;
360 opname = "!="; break;
362 opname = "<="; break;
364 opname = ">="; break;
370 opname = "<<"; break;
372 opname = ">>"; break;
381 case TRUTH_ANDIF_EXPR:
382 opname = "&&"; break;
383 case TRUTH_ORIF_EXPR:
384 opname = "||"; break;
388 error ("invalid operands to binary %s", opname);
391 /* Subroutine of build_binary_op, used for comparison operations.
392 See if the operands have both been converted from subword integer types
393 and, if so, perhaps change them both back to their original type.
395 The arguments of this function are all pointers to local variables
396 of build_binary_op: OP0_PTR is &OP0, OP1_PTR is &OP1,
397 RESTYPE_PTR is &RESULT_TYPE and RESCODE_PTR is &RESULTCODE.
399 If this function returns nonzero, it means that the comparison has
400 a constant value. What this function returns is an expression for
404 shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
405 tree *op0_ptr, *op1_ptr;
407 enum tree_code *rescode_ptr;
412 int unsignedp0, unsignedp1;
414 tree primop0, primop1;
415 enum tree_code code = *rescode_ptr;
417 /* Throw away any conversions to wider types
418 already present in the operands. */
420 primop0 = get_narrower (op0, &unsignedp0);
421 primop1 = get_narrower (op1, &unsignedp1);
423 /* Handle the case that OP0 does not *contain* a conversion
424 but it *requires* conversion to FINAL_TYPE. */
426 if (op0 == primop0 && TREE_TYPE (op0) != *restype_ptr)
427 unsignedp0 = TREE_UNSIGNED (TREE_TYPE (op0));
428 if (op1 == primop1 && TREE_TYPE (op1) != *restype_ptr)
429 unsignedp1 = TREE_UNSIGNED (TREE_TYPE (op1));
431 /* If one of the operands must be floated, we cannot optimize. */
432 real1 = TREE_CODE (TREE_TYPE (primop0)) == REAL_TYPE;
433 real2 = TREE_CODE (TREE_TYPE (primop1)) == REAL_TYPE;
435 /* If first arg is constant, swap the args (changing operation
436 so value is preserved), for canonicalization. */
438 if (TREE_CONSTANT (primop0))
440 register tree tem = primop0;
441 register int temi = unsignedp0;
449 unsignedp0 = unsignedp1;
473 /* If comparing an integer against a constant more bits wide,
474 maybe we can deduce a value of 1 or 0 independent of the data.
475 Or else truncate the constant now
476 rather than extend the variable at run time.
478 This is only interesting if the constant is the wider arg.
479 Also, it is not safe if the constant is unsigned and the
480 variable arg is signed, since in this case the variable
481 would be sign-extended and then regarded as unsigned.
482 Our technique fails in this case because the lowest/highest
483 possible unsigned results don't follow naturally from the
484 lowest/highest possible values of the variable operand.
485 For just EQ_EXPR and NE_EXPR there is another technique that
486 could be used: see if the constant can be faithfully represented
487 in the other operand's type, by truncating it and reextending it
488 and see if that preserves the constant's value. */
491 && TREE_CODE (primop1) == INTEGER_CST
492 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr))
494 int min_gt, max_gt, min_lt, max_lt;
496 /* 1 if comparison is nominally unsigned. */
497 int unsignedp = TREE_UNSIGNED (*restype_ptr);
500 type = signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0));
502 maxval = TYPE_MAX_VALUE (type);
503 minval = TYPE_MIN_VALUE (type);
505 if (unsignedp && !unsignedp0)
506 *restype_ptr = signed_type (*restype_ptr);
508 if (TREE_TYPE (primop1) != *restype_ptr)
509 primop1 = convert (*restype_ptr, primop1);
510 if (type != *restype_ptr)
512 minval = convert (*restype_ptr, minval);
513 maxval = convert (*restype_ptr, maxval);
516 if (unsignedp && unsignedp0)
518 min_gt = INT_CST_LT_UNSIGNED (primop1, minval);
519 max_gt = INT_CST_LT_UNSIGNED (primop1, maxval);
520 min_lt = INT_CST_LT_UNSIGNED (minval, primop1);
521 max_lt = INT_CST_LT_UNSIGNED (maxval, primop1);
525 min_gt = INT_CST_LT (primop1, minval);
526 max_gt = INT_CST_LT (primop1, maxval);
527 min_lt = INT_CST_LT (minval, primop1);
528 max_lt = INT_CST_LT (maxval, primop1);
532 /* This used to be a switch, but Genix compiler can't handle that. */
535 if (max_lt || min_gt)
536 val = integer_one_node;
538 else if (code == EQ_EXPR)
540 if (max_lt || min_gt)
541 val = integer_zero_node;
543 else if (code == LT_EXPR)
546 val = integer_one_node;
548 val = integer_zero_node;
550 else if (code == GT_EXPR)
553 val = integer_one_node;
555 val = integer_zero_node;
557 else if (code == LE_EXPR)
560 val = integer_one_node;
562 val = integer_zero_node;
564 else if (code == GE_EXPR)
567 val = integer_one_node;
569 val = integer_zero_node;
572 /* If primop0 was sign-extended and unsigned comparison specd,
573 we did a signed comparison above using the signed type bounds.
574 But the comparison we output must be unsigned.
576 Also, for inequalities, VAL is no good; but if the signed
577 comparison had *any* fixed result, it follows that the
578 unsigned comparison just tests the sign in reverse
579 (positive values are LE, negative ones GE).
580 So we can generate an unsigned comparison
581 against an extreme value of the signed type. */
583 if (unsignedp && !unsignedp0)
590 primop1 = TYPE_MIN_VALUE (type);
596 primop1 = TYPE_MAX_VALUE (type);
600 type = unsigned_type (type);
603 if (max_lt && !unsignedp0)
605 /* This is the case of (char)x >?< 0x80, which people used to use
606 expecting old C compilers to change the 0x80 into -0x80. */
607 if (val == integer_zero_node)
608 warning ("comparison is always 0 due to limited range of data type");
609 if (val == integer_one_node)
610 warning ("comparison is always 1 due to limited range of data type");
613 if (min_gt && unsignedp0)
615 /* This is the case of (unsigned char)x >?< -1. */
616 if (val == integer_zero_node)
617 warning ("comparison is always 0 due to limited range of data type");
618 if (val == integer_one_node)
619 warning ("comparison is always 1 due to limited range of data type");
624 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
625 if (TREE_SIDE_EFFECTS (primop0))
626 return build (COMPOUND_EXPR, TREE_TYPE (val), primop0, val);
630 /* Value is not predetermined, but do the comparison
631 in the type of the operand that is not constant.
632 TYPE is already properly set. */
634 else if (real1 && real2
635 && TYPE_PRECISION (TREE_TYPE (primop0)) == TYPE_PRECISION (TREE_TYPE (primop1)))
636 type = TREE_TYPE (primop0);
638 /* If args' natural types are both narrower than nominal type
639 and both extend in the same manner, compare them
640 in the type of the wider arg.
641 Otherwise must actually extend both to the nominal
642 common type lest different ways of extending
644 (eg, (short)-1 == (unsigned short)-1 should be 0.) */
646 else if (unsignedp0 == unsignedp1 && real1 == real2
647 && TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (*restype_ptr)
648 && TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (*restype_ptr))
650 type = common_type (TREE_TYPE (primop0), TREE_TYPE (primop1));
651 type = signed_or_unsigned_type (unsignedp0
652 || TREE_UNSIGNED (*restype_ptr),
654 /* Make sure shorter operand is extended the right way
655 to match the longer operand. */
656 primop0 = convert (signed_or_unsigned_type (unsignedp0, TREE_TYPE (primop0)),
658 primop1 = convert (signed_or_unsigned_type (unsignedp1, TREE_TYPE (primop1)),
663 /* Here we must do the comparison on the nominal type
664 using the args exactly as we received them. */
669 if (!real1 && !real2 && integer_zerop (primop1)
670 && TREE_UNSIGNED (TREE_TYPE (primop0)))
677 warning ("unsigned value >= 0 is always 1");
678 value = integer_one_node;
683 warning ("unsigned value < 0 is always 0");
684 value = integer_zero_node;
689 /* Don't forget to evaluate PRIMOP0 if it has side effects. */
690 if (TREE_SIDE_EFFECTS (primop0))
691 return build (COMPOUND_EXPR, TREE_TYPE (value),
698 *op0_ptr = convert (type, primop0);
699 *op1_ptr = convert (type, primop1);
701 *restype_ptr = integer_type_node;
706 /* Prepare expr to be an argument of a TRUTH_NOT_EXPR,
707 or validate its data type for an `if' or `while' statement or ?..: exp.
709 This preparation consists of taking the ordinary
710 representation of an expression expr and producing a valid tree
711 boolean expression describing whether expr is nonzero. We could
712 simply always do build_binary_op (NE_EXPR, expr, integer_zero_node, 1),
713 but we optimize comparisons, &&, ||, and !.
715 The resulting type should always be `integer_type_node'. */
718 truthvalue_conversion (expr)
721 register enum tree_code code;
723 switch (TREE_CODE (expr))
725 /* It is simpler and generates better code to have only TRUTH_*_EXPR
726 or comparison expressions as truth values at this level. */
729 /* A one-bit unsigned bit-field is already acceptable. */
730 if (1 == TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (expr, 1)))
731 && TREE_UNSIGNED (TREE_OPERAND (expr, 1)))
737 /* It is simpler and generates better code to have only TRUTH_*_EXPR
738 or comparison expressions as truth values at this level. */
740 if (integer_zerop (TREE_OPERAND (expr, 1)))
741 return build_unary_op (TRUTH_NOT_EXPR, TREE_OPERAND (expr, 0), 0);
743 case NE_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR:
744 case TRUTH_ANDIF_EXPR:
745 case TRUTH_ORIF_EXPR:
752 return integer_zerop (expr) ? integer_zero_node : integer_one_node;
755 return real_zerop (expr) ? integer_zero_node : integer_one_node;
758 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))
759 return build (COMPOUND_EXPR, integer_type_node,
760 TREE_OPERAND (expr, 0), integer_one_node);
762 return integer_one_node;
768 /* These don't change whether an object is non-zero or zero. */
769 return truthvalue_conversion (TREE_OPERAND (expr, 0));
773 /* These don't change whether an object is zero or non-zero, but
774 we can't ignore them if their second arg has side-effects. */
775 if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1)))
776 return build (COMPOUND_EXPR, integer_type_node, TREE_OPERAND (expr, 1),
777 truthvalue_conversion (TREE_OPERAND (expr, 0)));
779 return truthvalue_conversion (TREE_OPERAND (expr, 0));
782 /* Distribute the conversion into the arms of a COND_EXPR. */
783 return fold (build (COND_EXPR, integer_type_node, TREE_OPERAND (expr, 0),
784 truthvalue_conversion (TREE_OPERAND (expr, 1)),
785 truthvalue_conversion (TREE_OPERAND (expr, 2))));
788 /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
789 since that affects how `default_conversion' will behave. */
790 if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
791 || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
793 /* fall through... */
795 /* If this is widening the argument, we can ignore it. */
796 if (TYPE_PRECISION (TREE_TYPE (expr))
797 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
798 return truthvalue_conversion (TREE_OPERAND (expr, 0));
803 /* These can be changed into a comparison of the two objects. */
804 if (TREE_TYPE (TREE_OPERAND (expr, 0))
805 == TREE_TYPE (TREE_OPERAND (expr, 1)))
806 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
807 TREE_OPERAND (expr, 1), 1);
808 return build_binary_op (NE_EXPR, TREE_OPERAND (expr, 0),
809 fold (build1 (NOP_EXPR,
810 TREE_TYPE (TREE_OPERAND (expr, 0)),
811 TREE_OPERAND (expr, 1))), 1);
814 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
817 /* Read the rest of a #-directive from input stream FINPUT.
818 In normal use, the directive name and the white space after it
819 have already been read, so they won't be included in the result.
820 We allow for the fact that the directive line may contain
821 a newline embedded within a character or string literal which forms
822 a part of the directive.
824 The value is a string in a reusable buffer. It remains valid
825 only until the next time this function is called. */
828 get_directive_line (finput)
829 register FILE *finput;
831 static char *directive_buffer = NULL;
832 static unsigned buffer_length = 0;
834 register char *buffer_limit;
835 register int looking_for = 0;
836 register int char_escaped = 0;
838 if (buffer_length == 0)
840 directive_buffer = (char *)xmalloc (128);
844 buffer_limit = &directive_buffer[buffer_length];
846 for (p = directive_buffer; ; )
850 /* Make buffer bigger if it is full. */
851 if (p >= buffer_limit)
853 register unsigned bytes_used = (p - directive_buffer);
857 = (char *)xrealloc (directive_buffer, buffer_length);
858 p = &directive_buffer[bytes_used];
859 buffer_limit = &directive_buffer[buffer_length];
864 /* Discard initial whitespace. */
865 if ((c == ' ' || c == '\t') && p == directive_buffer)
868 /* Detect the end of the directive. */
869 if (c == '\n' && looking_for == 0)
878 return directive_buffer;
880 /* Handle string and character constant syntax. */
883 if (looking_for == c && !char_escaped)
884 looking_for = 0; /* Found terminator... stop looking. */
887 if (c == '\'' || c == '"')
888 looking_for = c; /* Don't stop buffering until we see another
889 another one of these (or an EOF). */
891 /* Handle backslash. */
892 char_escaped = (c == '\\' && ! char_escaped);