1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 88, 91, 92, 93, 94, 1995 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. */
21 /* This file is part of the C front end.
22 It contains routines to build C expressions given their operands,
23 including computing the types of the result, C-specific error checks,
24 and some optimization.
26 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
27 and to process initializations in declarations (since they work
28 like a strange sort of assignment). */
37 /* Nonzero if we've already printed a "missing braces around initializer"
38 message within this initializer. */
39 static int missing_braces_mentioned;
41 extern char *index ();
42 extern char *rindex ();
44 static tree quality_type PROTO((tree, tree));
45 static int comp_target_types PROTO((tree, tree));
46 static int function_types_compatible_p PROTO((tree, tree));
47 static int type_lists_compatible_p PROTO((tree, tree));
48 static int self_promoting_type_p PROTO((tree));
49 static tree decl_constant_value PROTO((tree));
50 static tree lookup_field PROTO((tree, tree, tree *));
51 static tree convert_arguments PROTO((tree, tree, tree, tree));
52 static tree pointer_int_sum PROTO((enum tree_code, tree, tree));
53 static tree pointer_diff PROTO((tree, tree));
54 static tree unary_complex_lvalue PROTO((enum tree_code, tree));
55 static void pedantic_lvalue_warning PROTO((enum tree_code));
56 static tree internal_build_compound_expr PROTO((tree, int));
57 static tree convert_for_assignment PROTO((tree, tree, char *, tree,
59 static void warn_for_assignment PROTO((char *, char *, tree, int));
60 static tree valid_compound_expr_initializer PROTO((tree, tree));
61 static void push_string PROTO((char *));
62 static void push_member_name PROTO((tree));
63 static void push_array_bounds PROTO((int));
64 static int spelling_length PROTO((void));
65 static char *print_spelling PROTO((char *));
66 static char *get_spelling PROTO((char *));
67 static void warning_init PROTO((char *, char *,
69 static tree digest_init PROTO((tree, tree, int, int));
70 static void check_init_type_bitfields PROTO((tree));
71 static void output_init_element PROTO((tree, tree, tree, int));
72 static void output_pending_init_elements PROTO((int));
74 /* Do `exp = require_complete_type (exp);' to make sure exp
75 does not have an incomplete type. (That includes void types.) */
78 require_complete_type (value)
81 tree type = TREE_TYPE (value);
83 /* First, detect a valid value with a complete type. */
84 if (TYPE_SIZE (type) != 0
85 && type != void_type_node)
88 incomplete_type_error (value, type);
89 return error_mark_node;
92 /* Print an error message for invalid use of an incomplete type.
93 VALUE is the expression that was used (or 0 if that isn't known)
94 and TYPE is the type that was invalid. */
97 incomplete_type_error (value, type)
103 /* Avoid duplicate error message. */
104 if (TREE_CODE (type) == ERROR_MARK)
107 if (value != 0 && (TREE_CODE (value) == VAR_DECL
108 || TREE_CODE (value) == PARM_DECL))
109 error ("`%s' has an incomplete type",
110 IDENTIFIER_POINTER (DECL_NAME (value)));
114 /* We must print an error message. Be clever about what it says. */
116 switch (TREE_CODE (type))
119 errmsg = "invalid use of undefined type `struct %s'";
123 errmsg = "invalid use of undefined type `union %s'";
127 errmsg = "invalid use of undefined type `enum %s'";
131 error ("invalid use of void expression");
135 if (TYPE_DOMAIN (type))
137 type = TREE_TYPE (type);
140 error ("invalid use of array with unspecified bounds");
147 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
148 error (errmsg, IDENTIFIER_POINTER (TYPE_NAME (type)));
150 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
151 error ("invalid use of incomplete typedef `%s'",
152 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
156 /* Return a variant of TYPE which has all the type qualifiers of LIKE
157 as well as those of TYPE. */
160 qualify_type (type, like)
163 int constflag = TYPE_READONLY (type) || TYPE_READONLY (like);
164 int volflag = TYPE_VOLATILE (type) || TYPE_VOLATILE (like);
165 return c_build_type_variant (type, constflag, volflag);
168 /* Return the common type of two types.
169 We assume that comptypes has already been done and returned 1;
170 if that isn't so, this may crash. In particular, we assume that qualifiers
173 This is the type for the result of most arithmetic operations
174 if the operands have the given two types. */
180 register enum tree_code code1;
181 register enum tree_code code2;
184 /* Save time if the two types are the same. */
186 if (t1 == t2) return t1;
188 /* If one type is nonsense, use the other. */
189 if (t1 == error_mark_node)
191 if (t2 == error_mark_node)
194 /* Merge the attributes */
196 { register tree a1, a2;
197 a1 = TYPE_ATTRIBUTES (t1);
198 a2 = TYPE_ATTRIBUTES (t2);
200 /* Either one unset? Take the set one. */
202 if (!(attributes = a1))
205 /* One that completely contains the other? Take it. */
207 else if (a2 && !attribute_list_contained (a1, a2))
208 if (attribute_list_contained (a2, a1))
212 /* Pick the longest list, and hang on the other list. */
213 /* ??? For the moment we punt on the issue of attrs with args. */
215 if (list_length (a1) < list_length (a2))
216 attributes = a2, a2 = a1;
218 for (; a2; a2 = TREE_CHAIN (a2))
219 if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
220 attributes) == NULL_TREE)
223 TREE_CHAIN (a1) = attributes;
229 /* Treat an enum type as the unsigned integer type of the same width. */
231 if (TREE_CODE (t1) == ENUMERAL_TYPE)
232 t1 = type_for_size (TYPE_PRECISION (t1), 1);
233 if (TREE_CODE (t2) == ENUMERAL_TYPE)
234 t2 = type_for_size (TYPE_PRECISION (t2), 1);
236 code1 = TREE_CODE (t1);
237 code2 = TREE_CODE (t2);
239 /* If one type is complex, form the common type of the non-complex
240 components, then make that complex. Use T1 or T2 if it is the
242 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
244 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
245 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
246 tree subtype = common_type (subtype1, subtype2);
248 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
249 return build_type_attribute_variant (t1, attributes);
250 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
251 return build_type_attribute_variant (t2, attributes);
253 return build_type_attribute_variant (build_complex_type (subtype),
261 /* If only one is real, use it as the result. */
263 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
264 return build_type_attribute_variant (t1, attributes);
266 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
267 return build_type_attribute_variant (t2, attributes);
269 /* Both real or both integers; use the one with greater precision. */
271 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
272 return build_type_attribute_variant (t1, attributes);
273 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
274 return build_type_attribute_variant (t2, attributes);
276 /* Same precision. Prefer longs to ints even when same size. */
278 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
279 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
280 return build_type_attribute_variant (long_unsigned_type_node,
283 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
284 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
286 /* But preserve unsignedness from the other type,
287 since long cannot hold all the values of an unsigned int. */
288 if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
289 t1 = long_unsigned_type_node;
291 t1 = long_integer_type_node;
292 return build_type_attribute_variant (t1, attributes);
295 /* Otherwise prefer the unsigned one. */
297 if (TREE_UNSIGNED (t1))
298 return build_type_attribute_variant (t1, attributes);
300 return build_type_attribute_variant (t2, attributes);
303 /* For two pointers, do this recursively on the target type,
304 and combine the qualifiers of the two types' targets. */
305 /* This code was turned off; I don't know why.
306 But ANSI C specifies doing this with the qualifiers.
307 So I turned it on again. */
309 tree target = common_type (TYPE_MAIN_VARIANT (TREE_TYPE (t1)),
310 TYPE_MAIN_VARIANT (TREE_TYPE (t2)));
312 = TYPE_READONLY (TREE_TYPE (t1)) || TYPE_READONLY (TREE_TYPE (t2));
314 = TYPE_VOLATILE (TREE_TYPE (t1)) || TYPE_VOLATILE (TREE_TYPE (t2));
315 t1 = build_pointer_type (c_build_type_variant (target, constp,
317 return build_type_attribute_variant (t1, attributes);
320 t1 = build_pointer_type (common_type (TREE_TYPE (t1), TREE_TYPE (t2)));
321 return build_type_attribute_variant (t1, attributes);
326 tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
327 /* Save space: see if the result is identical to one of the args. */
328 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
329 return build_type_attribute_variant (t1, attributes);
330 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
331 return build_type_attribute_variant (t2, attributes);
332 /* Merge the element types, and have a size if either arg has one. */
333 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
334 return build_type_attribute_variant (t1, attributes);
338 /* Function types: prefer the one that specified arg types.
339 If both do, merge the arg types. Also merge the return types. */
341 tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
342 tree p1 = TYPE_ARG_TYPES (t1);
343 tree p2 = TYPE_ARG_TYPES (t2);
348 /* Save space: see if the result is identical to one of the args. */
349 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
350 return build_type_attribute_variant (t1, attributes);
351 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
352 return build_type_attribute_variant (t2, attributes);
354 /* Simple way if one arg fails to specify argument types. */
355 if (TYPE_ARG_TYPES (t1) == 0)
357 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
358 return build_type_attribute_variant (t1, attributes);
360 if (TYPE_ARG_TYPES (t2) == 0)
362 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
363 return build_type_attribute_variant (t1, attributes);
366 /* If both args specify argument types, we must merge the two
367 lists, argument by argument. */
369 len = list_length (p1);
372 for (i = 0; i < len; i++)
373 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
378 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
380 /* A null type means arg type is not specified.
381 Take whatever the other function type has. */
382 if (TREE_VALUE (p1) == 0)
384 TREE_VALUE (n) = TREE_VALUE (p2);
387 if (TREE_VALUE (p2) == 0)
389 TREE_VALUE (n) = TREE_VALUE (p1);
393 /* Given wait (union {union wait *u; int *i} *)
394 and wait (union wait *),
395 prefer union wait * as type of parm. */
396 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
397 && TREE_VALUE (p1) != TREE_VALUE (p2))
400 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
401 memb; memb = TREE_CHAIN (memb))
402 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
404 TREE_VALUE (n) = TREE_VALUE (p2);
406 pedwarn ("function types not truly compatible in ANSI C");
410 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
411 && TREE_VALUE (p2) != TREE_VALUE (p1))
414 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
415 memb; memb = TREE_CHAIN (memb))
416 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
418 TREE_VALUE (n) = TREE_VALUE (p1);
420 pedwarn ("function types not truly compatible in ANSI C");
424 TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
428 t1 = build_function_type (valtype, newargs);
429 /* ... falls through ... */
433 return build_type_attribute_variant (t1, attributes);
438 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
439 or various other operations. Return 2 if they are compatible
440 but a warning may be needed if you use them together. */
443 comptypes (type1, type2)
446 register tree t1 = type1;
447 register tree t2 = type2;
450 /* Suppress errors caused by previously reported errors. */
452 if (t1 == t2 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
455 /* Treat an enum type as the integer type of the same width and
458 if (TREE_CODE (t1) == ENUMERAL_TYPE)
459 t1 = type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
460 if (TREE_CODE (t2) == ENUMERAL_TYPE)
461 t2 = type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
466 /* Different classes of types can't be compatible. */
468 if (TREE_CODE (t1) != TREE_CODE (t2)) return 0;
470 /* Qualifiers must match. */
472 if (TYPE_READONLY (t1) != TYPE_READONLY (t2))
474 if (TYPE_VOLATILE (t1) != TYPE_VOLATILE (t2))
477 /* Allow for two different type nodes which have essentially the same
478 definition. Note that we already checked for equality of the type
479 type qualifiers (just above). */
481 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
484 #ifndef COMP_TYPE_ATTRIBUTES
485 #define COMP_TYPE_ATTRIBUTES(t1,t2) 1
488 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
489 if (! (attrval = COMP_TYPE_ATTRIBUTES (t1, t2)))
492 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
495 switch (TREE_CODE (t1))
498 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
499 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
503 val = function_types_compatible_p (t1, t2);
508 tree d1 = TYPE_DOMAIN (t1);
509 tree d2 = TYPE_DOMAIN (t2);
512 /* Target types must match incl. qualifiers. */
513 if (TREE_TYPE (t1) != TREE_TYPE (t2)
514 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
517 /* Sizes must match unless one is missing or variable. */
518 if (d1 == 0 || d2 == 0 || d1 == d2
519 || TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
520 || TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
521 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST
522 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST)
525 if (! ((TREE_INT_CST_LOW (TYPE_MIN_VALUE (d1))
526 == TREE_INT_CST_LOW (TYPE_MIN_VALUE (d2)))
527 && (TREE_INT_CST_HIGH (TYPE_MIN_VALUE (d1))
528 == TREE_INT_CST_HIGH (TYPE_MIN_VALUE (d2)))
529 && (TREE_INT_CST_LOW (TYPE_MAX_VALUE (d1))
530 == TREE_INT_CST_LOW (TYPE_MAX_VALUE (d2)))
531 && (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (d1))
532 == TREE_INT_CST_HIGH (TYPE_MAX_VALUE (d2)))))
538 if (maybe_objc_comptypes (t1, t2, 0) == 1)
542 return attrval == 2 && val == 1 ? 2 : val;
545 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
546 ignoring their qualifiers. */
549 comp_target_types (ttl, ttr)
554 /* Give maybe_objc_comptypes a crack at letting these types through. */
555 if (val = maybe_objc_comptypes (ttl, ttr, 1) >= 0)
558 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
559 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
561 if (val == 2 && pedantic)
562 pedwarn ("types are not quite compatible");
566 /* Subroutines of `comptypes'. */
568 /* Return 1 if two function types F1 and F2 are compatible.
569 If either type specifies no argument types,
570 the other must specify a fixed number of self-promoting arg types.
571 Otherwise, if one type specifies only the number of arguments,
572 the other must specify that number of self-promoting arg types.
573 Otherwise, the argument types must match. */
576 function_types_compatible_p (f1, f2)
580 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
584 if (!(TREE_TYPE (f1) == TREE_TYPE (f2)
585 || (val = comptypes (TREE_TYPE (f1), TREE_TYPE (f2)))))
588 args1 = TYPE_ARG_TYPES (f1);
589 args2 = TYPE_ARG_TYPES (f2);
591 /* An unspecified parmlist matches any specified parmlist
592 whose argument types don't need default promotions. */
596 if (!self_promoting_args_p (args2))
598 /* If one of these types comes from a non-prototype fn definition,
599 compare that with the other type's arglist.
600 If they don't match, ask for a warning (but no error). */
601 if (TYPE_ACTUAL_ARG_TYPES (f1)
602 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
608 if (!self_promoting_args_p (args1))
610 if (TYPE_ACTUAL_ARG_TYPES (f2)
611 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
616 /* Both types have argument lists: compare them and propagate results. */
617 val1 = type_lists_compatible_p (args1, args2);
618 return val1 != 1 ? val1 : val;
621 /* Check two lists of types for compatibility,
622 returning 0 for incompatible, 1 for compatible,
623 or 2 for compatible with warning. */
626 type_lists_compatible_p (args1, args2)
629 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
635 if (args1 == 0 && args2 == 0)
637 /* If one list is shorter than the other,
638 they fail to match. */
639 if (args1 == 0 || args2 == 0)
641 /* A null pointer instead of a type
642 means there is supposed to be an argument
643 but nothing is specified about what type it has.
644 So match anything that self-promotes. */
645 if (TREE_VALUE (args1) == 0)
647 if (! self_promoting_type_p (TREE_VALUE (args2)))
650 else if (TREE_VALUE (args2) == 0)
652 if (! self_promoting_type_p (TREE_VALUE (args1)))
655 else if (! (newval = comptypes (TREE_VALUE (args1), TREE_VALUE (args2))))
657 /* Allow wait (union {union wait *u; int *i} *)
658 and wait (union wait *) to be compatible. */
659 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
660 && (TYPE_NAME (TREE_VALUE (args1)) == 0
661 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
662 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
663 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
664 TYPE_SIZE (TREE_VALUE (args2))))
667 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
668 memb; memb = TREE_CHAIN (memb))
669 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
674 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
675 && (TYPE_NAME (TREE_VALUE (args2)) == 0
676 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
677 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
678 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
679 TYPE_SIZE (TREE_VALUE (args1))))
682 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
683 memb; memb = TREE_CHAIN (memb))
684 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
693 /* comptypes said ok, but record if it said to warn. */
697 args1 = TREE_CHAIN (args1);
698 args2 = TREE_CHAIN (args2);
702 /* Return 1 if PARMS specifies a fixed number of parameters
703 and none of their types is affected by default promotions. */
706 self_promoting_args_p (parms)
710 for (t = parms; t; t = TREE_CHAIN (t))
712 register tree type = TREE_VALUE (t);
714 if (TREE_CHAIN (t) == 0 && type != void_type_node)
720 if (TYPE_MAIN_VARIANT (type) == float_type_node)
723 if (C_PROMOTING_INTEGER_TYPE_P (type))
729 /* Return 1 if TYPE is not affected by default promotions. */
732 self_promoting_type_p (type)
735 if (TYPE_MAIN_VARIANT (type) == float_type_node)
738 if (C_PROMOTING_INTEGER_TYPE_P (type))
744 /* Return an unsigned type the same as TYPE in other respects. */
750 tree type1 = TYPE_MAIN_VARIANT (type);
751 if (type1 == signed_char_type_node || type1 == char_type_node)
752 return unsigned_char_type_node;
753 if (type1 == integer_type_node)
754 return unsigned_type_node;
755 if (type1 == short_integer_type_node)
756 return short_unsigned_type_node;
757 if (type1 == long_integer_type_node)
758 return long_unsigned_type_node;
759 if (type1 == long_long_integer_type_node)
760 return long_long_unsigned_type_node;
764 /* Return a signed type the same as TYPE in other respects. */
770 tree type1 = TYPE_MAIN_VARIANT (type);
771 if (type1 == unsigned_char_type_node || type1 == char_type_node)
772 return signed_char_type_node;
773 if (type1 == unsigned_type_node)
774 return integer_type_node;
775 if (type1 == short_unsigned_type_node)
776 return short_integer_type_node;
777 if (type1 == long_unsigned_type_node)
778 return long_integer_type_node;
779 if (type1 == long_long_unsigned_type_node)
780 return long_long_integer_type_node;
784 /* Return a type the same as TYPE except unsigned or
785 signed according to UNSIGNEDP. */
788 signed_or_unsigned_type (unsignedp, type)
792 if (! INTEGRAL_TYPE_P (type))
794 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
795 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
796 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
797 return unsignedp ? unsigned_type_node : integer_type_node;
798 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
799 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
800 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
801 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
802 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
803 return (unsignedp ? long_long_unsigned_type_node
804 : long_long_integer_type_node);
808 /* Compute the value of the `sizeof' operator. */
814 enum tree_code code = TREE_CODE (type);
817 if (code == FUNCTION_TYPE)
819 if (pedantic || warn_pointer_arith)
820 pedwarn ("sizeof applied to a function type");
823 if (code == VOID_TYPE)
825 if (pedantic || warn_pointer_arith)
826 pedwarn ("sizeof applied to a void type");
829 if (code == ERROR_MARK)
831 if (TYPE_SIZE (type) == 0)
833 error ("sizeof applied to an incomplete type");
837 /* Convert in case a char is more than one unit. */
838 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
839 size_int (TYPE_PRECISION (char_type_node)));
840 /* size_binop does not put the constant in range, so do it now. */
841 if (TREE_CODE (t) == INTEGER_CST && force_fit_type (t, 0))
842 TREE_CONSTANT_OVERFLOW (t) = TREE_OVERFLOW (t) = 1;
847 c_sizeof_nowarn (type)
850 enum tree_code code = TREE_CODE (type);
853 if (code == FUNCTION_TYPE
855 || code == ERROR_MARK)
857 if (TYPE_SIZE (type) == 0)
860 /* Convert in case a char is more than one unit. */
861 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
862 size_int (TYPE_PRECISION (char_type_node)));
863 force_fit_type (t, 0);
867 /* Compute the size to increment a pointer by. */
870 c_size_in_bytes (type)
873 enum tree_code code = TREE_CODE (type);
876 if (code == FUNCTION_TYPE)
878 if (code == VOID_TYPE)
880 if (code == ERROR_MARK)
882 if (TYPE_SIZE (type) == 0)
884 error ("arithmetic on pointer to an incomplete type");
888 /* Convert in case a char is more than one unit. */
889 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
890 size_int (BITS_PER_UNIT));
891 force_fit_type (t, 0);
895 /* Implement the __alignof keyword: Return the minimum required
896 alignment of TYPE, measured in bytes. */
902 enum tree_code code = TREE_CODE (type);
904 if (code == FUNCTION_TYPE)
905 return size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
907 if (code == VOID_TYPE || code == ERROR_MARK)
910 return size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
913 /* Implement the __alignof keyword: Return the minimum required
914 alignment of EXPR, measured in bytes. For VAR_DECL's and
915 FIELD_DECL's return DECL_ALIGN (which can be set from an
916 "aligned" __attribute__ specification). */
919 c_alignof_expr (expr)
922 if (TREE_CODE (expr) == VAR_DECL)
923 return size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
925 if (TREE_CODE (expr) == COMPONENT_REF
926 && DECL_BIT_FIELD (TREE_OPERAND (expr, 1)))
928 error ("`__alignof' applied to a bit-field");
931 else if (TREE_CODE (expr) == COMPONENT_REF
932 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
933 return size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
935 if (TREE_CODE (expr) == INDIRECT_REF)
937 tree t = TREE_OPERAND (expr, 0);
939 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
941 while (TREE_CODE (t) == NOP_EXPR
942 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
946 t = TREE_OPERAND (t, 0);
947 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
948 if (thisalign > bestalign)
949 best = t, bestalign = thisalign;
951 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
954 return c_alignof (TREE_TYPE (expr));
956 /* Return either DECL or its known constant value (if it has one). */
959 decl_constant_value (decl)
962 if (! TREE_PUBLIC (decl)
963 /* Don't change a variable array bound or initial value to a constant
964 in a place where a variable is invalid. */
965 && current_function_decl != 0
967 && ! TREE_THIS_VOLATILE (decl)
968 && TREE_READONLY (decl) && ! ITERATOR_P (decl)
969 && DECL_INITIAL (decl) != 0
970 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
971 /* This is invalid if initial value is not constant.
972 If it has either a function call, a memory reference,
973 or a variable, then re-evaluating it could give different results. */
974 && TREE_CONSTANT (DECL_INITIAL (decl))
975 /* Check for cases where this is sub-optimal, even though valid. */
976 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR
977 && DECL_MODE (decl) != BLKmode)
978 return DECL_INITIAL (decl);
982 /* Perform default promotions for C data used in expressions.
983 Arrays and functions are converted to pointers;
984 enumeral types or short or char, to int.
985 In addition, manifest constants symbols are replaced by their values. */
988 default_conversion (exp)
991 register tree type = TREE_TYPE (exp);
992 register enum tree_code code = TREE_CODE (type);
994 /* Constants can be used directly unless they're not loadable. */
995 if (TREE_CODE (exp) == CONST_DECL)
996 exp = DECL_INITIAL (exp);
998 /* Replace a nonvolatile const static variable with its value unless
999 it is an array, in which case we must be sure that taking the
1000 address of the array produces consistent results. */
1001 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
1003 exp = decl_constant_value (exp);
1004 type = TREE_TYPE (exp);
1007 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
1009 /* Do not use STRIP_NOPS here! It will remove conversions from pointer
1010 to integer and cause infinite recursion. */
1011 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1012 || (TREE_CODE (exp) == NOP_EXPR
1013 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1014 exp = TREE_OPERAND (exp, 0);
1016 /* Normally convert enums to int,
1017 but convert wide enums to something wider. */
1018 if (code == ENUMERAL_TYPE)
1020 type = type_for_size (MAX (TYPE_PRECISION (type),
1021 TYPE_PRECISION (integer_type_node)),
1023 || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node))
1024 && TREE_UNSIGNED (type)));
1025 return convert (type, exp);
1028 if (C_PROMOTING_INTEGER_TYPE_P (type))
1030 /* Traditionally, unsignedness is preserved in default promotions.
1031 Also preserve unsignedness if not really getting any wider. */
1032 if (TREE_UNSIGNED (type)
1033 && (flag_traditional
1034 || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
1035 return convert (unsigned_type_node, exp);
1036 return convert (integer_type_node, exp);
1038 if (flag_traditional && !flag_allow_single_precision
1039 && TYPE_MAIN_VARIANT (type) == float_type_node)
1040 return convert (double_type_node, exp);
1041 if (code == VOID_TYPE)
1043 error ("void value not ignored as it ought to be");
1044 return error_mark_node;
1046 if (code == FUNCTION_TYPE)
1048 return build_unary_op (ADDR_EXPR, exp, 0);
1050 if (code == ARRAY_TYPE)
1053 tree restype = TREE_TYPE (type);
1058 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r'
1059 || TREE_CODE_CLASS (TREE_CODE (exp)) == 'd')
1061 constp = TREE_READONLY (exp);
1062 volatilep = TREE_THIS_VOLATILE (exp);
1065 if (TYPE_READONLY (type) || TYPE_VOLATILE (type)
1066 || constp || volatilep)
1067 restype = c_build_type_variant (restype,
1068 TYPE_READONLY (type) || constp,
1069 TYPE_VOLATILE (type) || volatilep);
1071 if (TREE_CODE (exp) == INDIRECT_REF)
1072 return convert (TYPE_POINTER_TO (restype),
1073 TREE_OPERAND (exp, 0));
1075 if (TREE_CODE (exp) == COMPOUND_EXPR)
1077 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
1078 return build (COMPOUND_EXPR, TREE_TYPE (op1),
1079 TREE_OPERAND (exp, 0), op1);
1083 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1085 error ("invalid use of non-lvalue array");
1086 return error_mark_node;
1089 ptrtype = build_pointer_type (restype);
1091 if (TREE_CODE (exp) == VAR_DECL)
1093 /* ??? This is not really quite correct
1094 in that the type of the operand of ADDR_EXPR
1095 is not the target type of the type of the ADDR_EXPR itself.
1096 Question is, can this lossage be avoided? */
1097 adr = build1 (ADDR_EXPR, ptrtype, exp);
1098 if (mark_addressable (exp) == 0)
1099 return error_mark_node;
1100 TREE_CONSTANT (adr) = staticp (exp);
1101 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1104 /* This way is better for a COMPONENT_REF since it can
1105 simplify the offset for a component. */
1106 adr = build_unary_op (ADDR_EXPR, exp, 1);
1107 return convert (ptrtype, adr);
1112 /* Look up component name in the structure type definition.
1114 If this component name is found indirectly within an anonymous union,
1115 store in *INDIRECT the component which directly contains
1116 that anonymous union. Otherwise, set *INDIRECT to 0. */
1119 lookup_field (type, component, indirect)
1120 tree type, component;
1125 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1126 to the field elements. Use a binary search on this array to quickly
1127 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1128 will always be set for structures which have many elements. */
1130 if (TYPE_LANG_SPECIFIC (type))
1133 tree *field_array = &TYPE_LANG_SPECIFIC (type)->elts[0];
1135 field = TYPE_FIELDS (type);
1137 top = TYPE_LANG_SPECIFIC (type)->len;
1138 while (top - bot > 1)
1142 half = (top - bot + 1) >> 1;
1143 field = field_array[bot+half];
1145 if (DECL_NAME (field) == NULL_TREE)
1147 /* Step through all anon unions in linear fashion. */
1148 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1152 field = field_array[bot++];
1153 anon = lookup_field (TREE_TYPE (field), component, &junk);
1154 if (anon != NULL_TREE)
1161 /* Entire record is only anon unions. */
1165 /* Restart the binary search, with new lower bound. */
1169 cmp = (HOST_WIDE_INT) DECL_NAME (field) - (HOST_WIDE_INT) component;
1178 if (DECL_NAME (field_array[bot]) == component)
1179 field = field_array[bot];
1180 else if (DECL_NAME (field) != component)
1185 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1187 if (DECL_NAME (field) == NULL_TREE)
1190 tree anon = lookup_field (TREE_TYPE (field), component, &junk);
1191 if (anon != NULL_TREE)
1198 if (DECL_NAME (field) == component)
1203 *indirect = NULL_TREE;
1207 /* Make an expression to refer to the COMPONENT field of
1208 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1211 build_component_ref (datum, component)
1212 tree datum, component;
1214 register tree type = TREE_TYPE (datum);
1215 register enum tree_code code = TREE_CODE (type);
1216 register tree field = NULL;
1219 /* If DATUM is a COMPOUND_EXPR or COND_EXPR, move our reference inside it
1220 unless we are not to support things not strictly ANSI. */
1221 switch (TREE_CODE (datum))
1225 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
1226 return build (COMPOUND_EXPR, TREE_TYPE (value),
1227 TREE_OPERAND (datum, 0), value);
1230 return build_conditional_expr
1231 (TREE_OPERAND (datum, 0),
1232 build_component_ref (TREE_OPERAND (datum, 1), component),
1233 build_component_ref (TREE_OPERAND (datum, 2), component));
1236 /* See if there is a field or component with name COMPONENT. */
1238 if (code == RECORD_TYPE || code == UNION_TYPE)
1242 if (TYPE_SIZE (type) == 0)
1244 incomplete_type_error (NULL_TREE, type);
1245 return error_mark_node;
1248 field = lookup_field (type, component, &indirect);
1252 error (code == RECORD_TYPE
1253 ? "structure has no member named `%s'"
1254 : "union has no member named `%s'",
1255 IDENTIFIER_POINTER (component));
1256 return error_mark_node;
1258 if (TREE_TYPE (field) == error_mark_node)
1259 return error_mark_node;
1261 /* If FIELD was found buried within an anonymous union,
1262 make one COMPONENT_REF to get that anonymous union,
1263 then fall thru to make a second COMPONENT_REF to get FIELD. */
1266 ref = build (COMPONENT_REF, TREE_TYPE (indirect), datum, indirect);
1267 if (TREE_READONLY (datum) || TREE_READONLY (indirect))
1268 TREE_READONLY (ref) = 1;
1269 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (indirect))
1270 TREE_THIS_VOLATILE (ref) = 1;
1274 ref = build (COMPONENT_REF, TREE_TYPE (field), datum, field);
1276 if (TREE_READONLY (datum) || TREE_READONLY (field))
1277 TREE_READONLY (ref) = 1;
1278 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (field))
1279 TREE_THIS_VOLATILE (ref) = 1;
1283 else if (code != ERROR_MARK)
1284 error ("request for member `%s' in something not a structure or union",
1285 IDENTIFIER_POINTER (component));
1287 return error_mark_node;
1290 /* Given an expression PTR for a pointer, return an expression
1291 for the value pointed to.
1292 ERRORSTRING is the name of the operator to appear in error messages. */
1295 build_indirect_ref (ptr, errorstring)
1299 register tree pointer = default_conversion (ptr);
1300 register tree type = TREE_TYPE (pointer);
1302 if (TREE_CODE (type) == POINTER_TYPE)
1304 if (TREE_CODE (pointer) == ADDR_EXPR
1306 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1307 == TREE_TYPE (type)))
1308 return TREE_OPERAND (pointer, 0);
1311 tree t = TREE_TYPE (type);
1312 register tree ref = build1 (INDIRECT_REF,
1313 TYPE_MAIN_VARIANT (t), pointer);
1315 if (TYPE_SIZE (t) == 0 && TREE_CODE (t) != ARRAY_TYPE)
1317 error ("dereferencing pointer to incomplete type");
1318 return error_mark_node;
1320 if (TREE_CODE (t) == VOID_TYPE)
1321 warning ("dereferencing `void *' pointer");
1323 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1324 so that we get the proper error message if the result is used
1325 to assign to. Also, &* is supposed to be a no-op.
1326 And ANSI C seems to specify that the type of the result
1327 should be the const type. */
1328 /* A de-reference of a pointer to const is not a const. It is valid
1329 to change it via some other pointer. */
1330 TREE_READONLY (ref) = TYPE_READONLY (t);
1331 TREE_SIDE_EFFECTS (ref)
1332 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer) || flag_volatile;
1333 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1337 else if (TREE_CODE (pointer) != ERROR_MARK)
1338 error ("invalid type argument of `%s'", errorstring);
1339 return error_mark_node;
1342 /* This handles expressions of the form "a[i]", which denotes
1345 This is logically equivalent in C to *(a+i), but we may do it differently.
1346 If A is a variable or a member, we generate a primitive ARRAY_REF.
1347 This avoids forcing the array out of registers, and can work on
1348 arrays that are not lvalues (for example, members of structures returned
1352 build_array_ref (array, index)
1357 error ("subscript missing in array reference");
1358 return error_mark_node;
1361 if (TREE_TYPE (array) == error_mark_node
1362 || TREE_TYPE (index) == error_mark_node)
1363 return error_mark_node;
1365 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
1366 && TREE_CODE (array) != INDIRECT_REF)
1370 /* Subscripting with type char is likely to lose
1371 on a machine where chars are signed.
1372 So warn on any machine, but optionally.
1373 Don't warn for unsigned char since that type is safe.
1374 Don't warn for signed char because anyone who uses that
1375 must have done so deliberately. */
1376 if (warn_char_subscripts
1377 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1378 warning ("array subscript has type `char'");
1380 /* Apply default promotions *after* noticing character types. */
1381 index = default_conversion (index);
1383 /* Require integer *after* promotion, for sake of enums. */
1384 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1386 error ("array subscript is not an integer");
1387 return error_mark_node;
1390 /* An array that is indexed by a non-constant
1391 cannot be stored in a register; we must be able to do
1392 address arithmetic on its address.
1393 Likewise an array of elements of variable size. */
1394 if (TREE_CODE (index) != INTEGER_CST
1395 || (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))) != 0
1396 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1398 if (mark_addressable (array) == 0)
1399 return error_mark_node;
1401 /* An array that is indexed by a constant value which is not within
1402 the array bounds cannot be stored in a register either; because we
1403 would get a crash in store_bit_field/extract_bit_field when trying
1404 to access a non-existent part of the register. */
1405 if (TREE_CODE (index) == INTEGER_CST
1406 && TYPE_VALUES (TREE_TYPE (array))
1407 && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
1409 if (mark_addressable (array) == 0)
1410 return error_mark_node;
1413 if (pedantic && !lvalue_p (array))
1415 if (DECL_REGISTER (array))
1416 pedwarn ("ANSI C forbids subscripting `register' array");
1418 pedwarn ("ANSI C forbids subscripting non-lvalue array");
1424 while (TREE_CODE (foo) == COMPONENT_REF)
1425 foo = TREE_OPERAND (foo, 0);
1426 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
1427 pedwarn ("ANSI C forbids subscripting non-lvalue array");
1430 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1431 rval = build (ARRAY_REF, type, array, index);
1432 /* Array ref is const/volatile if the array elements are
1433 or if the array is. */
1434 TREE_READONLY (rval)
1435 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1436 | TREE_READONLY (array));
1437 TREE_SIDE_EFFECTS (rval)
1438 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1439 | TREE_SIDE_EFFECTS (array));
1440 TREE_THIS_VOLATILE (rval)
1441 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1442 /* This was added by rms on 16 Nov 91.
1443 It fixes vol struct foo *a; a->elts[1]
1444 in an inline function.
1445 Hope it doesn't break something else. */
1446 | TREE_THIS_VOLATILE (array));
1447 return require_complete_type (fold (rval));
1451 tree ar = default_conversion (array);
1452 tree ind = default_conversion (index);
1454 /* Put the integer in IND to simplify error checking. */
1455 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1462 if (ar == error_mark_node)
1465 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
1467 error ("subscripted value is neither array nor pointer");
1468 return error_mark_node;
1470 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1472 error ("array subscript is not an integer");
1473 return error_mark_node;
1476 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1481 /* Build a function call to function FUNCTION with parameters PARAMS.
1482 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1483 TREE_VALUE of each node is a parameter-expression.
1484 FUNCTION's data type may be a function type or a pointer-to-function. */
1487 build_function_call (function, params)
1488 tree function, params;
1490 register tree fntype, fundecl = 0;
1491 register tree coerced_params;
1492 tree name = NULL_TREE, assembler_name = NULL_TREE;
1494 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1495 STRIP_TYPE_NOPS (function);
1497 /* Convert anything with function type to a pointer-to-function. */
1498 if (TREE_CODE (function) == FUNCTION_DECL)
1500 name = DECL_NAME (function);
1501 assembler_name = DECL_ASSEMBLER_NAME (function);
1503 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1504 (because calling an inline function does not mean the function
1505 needs to be separately compiled). */
1506 fntype = build_type_variant (TREE_TYPE (function),
1507 TREE_READONLY (function),
1508 TREE_THIS_VOLATILE (function));
1510 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1513 function = default_conversion (function);
1515 fntype = TREE_TYPE (function);
1517 if (TREE_CODE (fntype) == ERROR_MARK)
1518 return error_mark_node;
1520 if (!(TREE_CODE (fntype) == POINTER_TYPE
1521 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1523 error ("called object is not a function");
1524 return error_mark_node;
1527 /* fntype now gets the type of function pointed to. */
1528 fntype = TREE_TYPE (fntype);
1530 /* Convert the parameters to the types declared in the
1531 function prototype, or apply default promotions. */
1534 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
1536 /* Check for errors in format strings. */
1538 if (warn_format && (name || assembler_name))
1539 check_function_format (name, assembler_name, coerced_params);
1541 /* Recognize certain built-in functions so we can make tree-codes
1542 other than CALL_EXPR. We do this when it enables fold-const.c
1543 to do something useful. */
1545 if (TREE_CODE (function) == ADDR_EXPR
1546 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1547 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
1548 switch (DECL_FUNCTION_CODE (TREE_OPERAND (function, 0)))
1553 if (coerced_params == 0)
1554 return integer_zero_node;
1555 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
1559 register tree result
1560 = build (CALL_EXPR, TREE_TYPE (fntype),
1561 function, coerced_params, NULL_TREE);
1563 TREE_SIDE_EFFECTS (result) = 1;
1564 if (TREE_TYPE (result) == void_type_node)
1566 return require_complete_type (result);
1570 /* Convert the argument expressions in the list VALUES
1571 to the types in the list TYPELIST. The result is a list of converted
1572 argument expressions.
1574 If TYPELIST is exhausted, or when an element has NULL as its type,
1575 perform the default conversions.
1577 PARMLIST is the chain of parm decls for the function being called.
1578 It may be 0, if that info is not available.
1579 It is used only for generating error messages.
1581 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1583 This is also where warnings about wrong number of args are generated.
1585 Both VALUES and the returned value are chains of TREE_LIST nodes
1586 with the elements of the list in the TREE_VALUE slots of those nodes. */
1589 convert_arguments (typelist, values, name, fundecl)
1590 tree typelist, values, name, fundecl;
1592 register tree typetail, valtail;
1593 register tree result = NULL;
1596 /* Scan the given expressions and types, producing individual
1597 converted arguments and pushing them on RESULT in reverse order. */
1599 for (valtail = values, typetail = typelist, parmnum = 0;
1601 valtail = TREE_CHAIN (valtail), parmnum++)
1603 register tree type = typetail ? TREE_VALUE (typetail) : 0;
1604 register tree val = TREE_VALUE (valtail);
1606 if (type == void_type_node)
1609 error ("too many arguments to function `%s'",
1610 IDENTIFIER_POINTER (name));
1612 error ("too many arguments to function");
1616 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1617 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1618 to convert automatically to a pointer. */
1619 if (TREE_CODE (val) == NON_LVALUE_EXPR)
1620 val = TREE_OPERAND (val, 0);
1622 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
1623 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE)
1624 val = default_conversion (val);
1626 val = require_complete_type (val);
1630 /* Formal parm type is specified by a function prototype. */
1633 if (TYPE_SIZE (type) == 0)
1635 error ("type of formal parameter %d is incomplete", parmnum + 1);
1640 /* Optionally warn about conversions that
1641 differ from the default conversions. */
1642 if (warn_conversion)
1644 int formal_prec = TYPE_PRECISION (type);
1646 if (INTEGRAL_TYPE_P (type)
1647 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1648 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1649 else if (TREE_CODE (type) == COMPLEX_TYPE
1650 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1651 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1652 else if (TREE_CODE (type) == REAL_TYPE
1653 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1654 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1655 else if (TREE_CODE (type) == REAL_TYPE
1656 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1657 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1658 /* ??? At some point, messages should be written about
1659 conversions between complex types, but that's too messy
1661 else if (TREE_CODE (type) == REAL_TYPE
1662 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1664 /* Warn if any argument is passed as `float',
1665 since without a prototype it would be `double'. */
1666 if (formal_prec == TYPE_PRECISION (float_type_node))
1667 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
1669 /* Detect integer changing in width or signedness. */
1670 else if (INTEGRAL_TYPE_P (type)
1671 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1673 tree would_have_been = default_conversion (val);
1674 tree type1 = TREE_TYPE (would_have_been);
1676 if (TREE_CODE (type) == ENUMERAL_TYPE
1677 && type == TREE_TYPE (val))
1678 /* No warning if function asks for enum
1679 and the actual arg is that enum type. */
1681 else if (formal_prec != TYPE_PRECISION (type1))
1682 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
1683 else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
1685 /* Don't complain if the formal parameter type
1686 is an enum, because we can't tell now whether
1687 the value was an enum--even the same enum. */
1688 else if (TREE_CODE (type) == ENUMERAL_TYPE)
1690 else if (TREE_CODE (val) == INTEGER_CST
1691 && int_fits_type_p (val, type))
1692 /* Change in signedness doesn't matter
1693 if a constant value is unaffected. */
1695 /* Likewise for a constant in a NOP_EXPR. */
1696 else if (TREE_CODE (val) == NOP_EXPR
1697 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
1698 && int_fits_type_p (TREE_OPERAND (val, 0), type))
1700 #if 0 /* We never get such tree structure here. */
1701 else if (TREE_CODE (TREE_TYPE (val)) == ENUMERAL_TYPE
1702 && int_fits_type_p (TYPE_MIN_VALUE (TREE_TYPE (val)), type)
1703 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (val)), type))
1704 /* Change in signedness doesn't matter
1705 if an enum value is unaffected. */
1708 /* If the value is extended from a narrower
1709 unsigned type, it doesn't matter whether we
1710 pass it as signed or unsigned; the value
1711 certainly is the same either way. */
1712 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
1713 && TREE_UNSIGNED (TREE_TYPE (val)))
1715 else if (TREE_UNSIGNED (type))
1716 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
1718 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
1722 parmval = convert_for_assignment (type, val,
1723 (char *)0, /* arg passing */
1724 fundecl, name, parmnum + 1);
1726 #ifdef PROMOTE_PROTOTYPES
1727 if ((TREE_CODE (type) == INTEGER_TYPE
1728 || TREE_CODE (type) == ENUMERAL_TYPE)
1729 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
1730 parmval = default_conversion (parmval);
1733 result = tree_cons (NULL_TREE, parmval, result);
1735 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
1736 && (TYPE_PRECISION (TREE_TYPE (val))
1737 < TYPE_PRECISION (double_type_node)))
1738 /* Convert `float' to `double'. */
1739 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
1741 /* Convert `short' and `char' to full-size `int'. */
1742 result = tree_cons (NULL_TREE, default_conversion (val), result);
1745 typetail = TREE_CHAIN (typetail);
1748 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
1751 error ("too few arguments to function `%s'",
1752 IDENTIFIER_POINTER (name));
1754 error ("too few arguments to function");
1757 return nreverse (result);
1760 /* This is the entry point used by the parser
1761 for binary operators in the input.
1762 In addition to constructing the expression,
1763 we check for operands that were written with other binary operators
1764 in a way that is likely to confuse the user. */
1767 parser_build_binary_op (code, arg1, arg2)
1768 enum tree_code code;
1771 tree result = build_binary_op (code, arg1, arg2, 1);
1774 char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
1775 char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
1776 enum tree_code code1 = ERROR_MARK;
1777 enum tree_code code2 = ERROR_MARK;
1779 if (class1 == 'e' || class1 == '1'
1780 || class1 == '2' || class1 == '<')
1781 code1 = C_EXP_ORIGINAL_CODE (arg1);
1782 if (class2 == 'e' || class2 == '1'
1783 || class2 == '2' || class2 == '<')
1784 code2 = C_EXP_ORIGINAL_CODE (arg2);
1786 /* Check for cases such as x+y<<z which users are likely
1787 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1788 is cleared to prevent these warnings. */
1789 if (warn_parentheses)
1791 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
1793 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1794 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1795 warning ("suggest parentheses around + or - inside shift");
1798 if (code == TRUTH_ORIF_EXPR)
1800 if (code1 == TRUTH_ANDIF_EXPR
1801 || code2 == TRUTH_ANDIF_EXPR)
1802 warning ("suggest parentheses around && within ||");
1805 if (code == BIT_IOR_EXPR)
1807 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
1808 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1809 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
1810 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1811 warning ("suggest parentheses around arithmetic in operand of |");
1814 if (code == BIT_XOR_EXPR)
1816 if (code1 == BIT_AND_EXPR
1817 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1818 || code2 == BIT_AND_EXPR
1819 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1820 warning ("suggest parentheses around arithmetic in operand of ^");
1823 if (code == BIT_AND_EXPR)
1825 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1826 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1827 warning ("suggest parentheses around + or - in operand of &");
1831 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
1832 if (TREE_CODE_CLASS (code) == '<' && extra_warnings
1833 && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
1834 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1836 unsigned_conversion_warning (result, arg1);
1837 unsigned_conversion_warning (result, arg2);
1838 overflow_warning (result);
1840 class = TREE_CODE_CLASS (TREE_CODE (result));
1842 /* Record the code that was specified in the source,
1843 for the sake of warnings about confusing nesting. */
1844 if (class == 'e' || class == '1'
1845 || class == '2' || class == '<')
1846 C_SET_EXP_ORIGINAL_CODE (result, code);
1849 int flag = TREE_CONSTANT (result);
1850 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
1851 so that convert_for_assignment wouldn't strip it.
1852 That way, we got warnings for things like p = (1 - 1).
1853 But it turns out we should not get those warnings. */
1854 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
1855 C_SET_EXP_ORIGINAL_CODE (result, code);
1856 TREE_CONSTANT (result) = flag;
1862 /* Build a binary-operation expression without default conversions.
1863 CODE is the kind of expression to build.
1864 This function differs from `build' in several ways:
1865 the data type of the result is computed and recorded in it,
1866 warnings are generated if arg data types are invalid,
1867 special handling for addition and subtraction of pointers is known,
1868 and some optimization is done (operations on narrow ints
1869 are done in the narrower type when that gives the same result).
1870 Constant folding is also done before the result is returned.
1872 Note that the operands will never have enumeral types, or function
1873 or array types, because either they will have the default conversions
1874 performed or they have both just been converted to some other type in which
1875 the arithmetic is to be done. */
1878 build_binary_op (code, orig_op0, orig_op1, convert_p)
1879 enum tree_code code;
1880 tree orig_op0, orig_op1;
1884 register enum tree_code code0, code1;
1887 /* Expression code to give to the expression when it is built.
1888 Normally this is CODE, which is what the caller asked for,
1889 but in some special cases we change it. */
1890 register enum tree_code resultcode = code;
1892 /* Data type in which the computation is to be performed.
1893 In the simplest cases this is the common type of the arguments. */
1894 register tree result_type = NULL;
1896 /* Nonzero means operands have already been type-converted
1897 in whatever way is necessary.
1898 Zero means they need to be converted to RESULT_TYPE. */
1901 /* Nonzero means create the expression with this type, rather than
1903 tree build_type = 0;
1905 /* Nonzero means after finally constructing the expression
1906 convert it to this type. */
1907 tree final_type = 0;
1909 /* Nonzero if this is an operation like MIN or MAX which can
1910 safely be computed in short if both args are promoted shorts.
1911 Also implies COMMON.
1912 -1 indicates a bitwise operation; this makes a difference
1913 in the exact conditions for when it is safe to do the operation
1914 in a narrower mode. */
1917 /* Nonzero if this is a comparison operation;
1918 if both args are promoted shorts, compare the original shorts.
1919 Also implies COMMON. */
1920 int short_compare = 0;
1922 /* Nonzero if this is a right-shift operation, which can be computed on the
1923 original short and then promoted if the operand is a promoted short. */
1924 int short_shift = 0;
1926 /* Nonzero means set RESULT_TYPE to the common type of the args. */
1931 op0 = default_conversion (orig_op0);
1932 op1 = default_conversion (orig_op1);
1940 type0 = TREE_TYPE (op0);
1941 type1 = TREE_TYPE (op1);
1943 /* The expression codes of the data types of the arguments tell us
1944 whether the arguments are integers, floating, pointers, etc. */
1945 code0 = TREE_CODE (type0);
1946 code1 = TREE_CODE (type1);
1948 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1949 STRIP_TYPE_NOPS (op0);
1950 STRIP_TYPE_NOPS (op1);
1952 /* If an error was already reported for one of the arguments,
1953 avoid reporting another error. */
1955 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
1956 return error_mark_node;
1961 /* Handle the pointer + int case. */
1962 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1963 return pointer_int_sum (PLUS_EXPR, op0, op1);
1964 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
1965 return pointer_int_sum (PLUS_EXPR, op1, op0);
1971 /* Subtraction of two similar pointers.
1972 We must subtract them as integers, then divide by object size. */
1973 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
1974 && comp_target_types (type0, type1))
1975 return pointer_diff (op0, op1);
1976 /* Handle pointer minus int. Just like pointer plus int. */
1977 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1978 return pointer_int_sum (MINUS_EXPR, op0, op1);
1987 case TRUNC_DIV_EXPR:
1989 case FLOOR_DIV_EXPR:
1990 case ROUND_DIV_EXPR:
1991 case EXACT_DIV_EXPR:
1992 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
1993 || code0 == COMPLEX_TYPE)
1994 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
1995 || code1 == COMPLEX_TYPE))
1997 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
1998 resultcode = RDIV_EXPR;
2001 /* Although it would be tempting to shorten always here, that
2002 loses on some targets, since the modulo instruction is
2003 undefined if the quotient can't be represented in the
2004 computation mode. We shorten only if unsigned or if
2005 dividing by something we know != -1. */
2006 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2007 || (TREE_CODE (op1) == INTEGER_CST
2008 && (TREE_INT_CST_LOW (op1) != -1
2009 || TREE_INT_CST_HIGH (op1) != -1)));
2016 case BIT_ANDTC_EXPR:
2019 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2021 /* If one operand is a constant, and the other is a short type
2022 that has been converted to an int,
2023 really do the work in the short type and then convert the
2024 result to int. If we are lucky, the constant will be 0 or 1
2025 in the short type, making the entire operation go away. */
2026 if (TREE_CODE (op0) == INTEGER_CST
2027 && TREE_CODE (op1) == NOP_EXPR
2028 && TYPE_PRECISION (type1) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1, 0)))
2029 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op1, 0))))
2031 final_type = result_type;
2032 op1 = TREE_OPERAND (op1, 0);
2033 result_type = TREE_TYPE (op1);
2035 if (TREE_CODE (op1) == INTEGER_CST
2036 && TREE_CODE (op0) == NOP_EXPR
2037 && TYPE_PRECISION (type0) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0)))
2038 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
2040 final_type = result_type;
2041 op0 = TREE_OPERAND (op0, 0);
2042 result_type = TREE_TYPE (op0);
2046 case TRUNC_MOD_EXPR:
2047 case FLOOR_MOD_EXPR:
2048 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2050 /* Although it would be tempting to shorten always here, that loses
2051 on some targets, since the modulo instruction is undefined if the
2052 quotient can't be represented in the computation mode. We shorten
2053 only if unsigned or if dividing by something we know != -1. */
2054 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2055 || (TREE_CODE (op1) == INTEGER_CST
2056 && (TREE_INT_CST_LOW (op1) != -1
2057 || TREE_INT_CST_HIGH (op1) != -1)));
2062 case TRUTH_ANDIF_EXPR:
2063 case TRUTH_ORIF_EXPR:
2064 case TRUTH_AND_EXPR:
2066 case TRUTH_XOR_EXPR:
2067 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
2068 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2069 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
2070 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2072 /* Result of these operations is always an int,
2073 but that does not mean the operands should be
2074 converted to ints! */
2075 result_type = integer_type_node;
2076 op0 = truthvalue_conversion (op0);
2077 op1 = truthvalue_conversion (op1);
2082 /* Shift operations: result has same type as first operand;
2083 always convert second operand to int.
2084 Also set SHORT_SHIFT if shifting rightward. */
2087 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2089 if (TREE_CODE (op1) == INTEGER_CST)
2091 if (tree_int_cst_sgn (op1) < 0)
2092 warning ("right shift count is negative");
2095 if (TREE_INT_CST_LOW (op1) | TREE_INT_CST_HIGH (op1))
2097 if (TREE_INT_CST_HIGH (op1) != 0
2098 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2099 >= TYPE_PRECISION (type0)))
2100 warning ("right shift count >= width of type");
2103 /* Use the type of the value to be shifted.
2104 This is what most traditional C compilers do. */
2105 result_type = type0;
2106 /* Unless traditional, convert the shift-count to an integer,
2107 regardless of size of value being shifted. */
2108 if (! flag_traditional)
2110 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2111 op1 = convert (integer_type_node, op1);
2112 /* Avoid converting op1 to result_type later. */
2119 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2121 if (TREE_CODE (op1) == INTEGER_CST)
2123 if (tree_int_cst_sgn (op1) < 0)
2124 warning ("left shift count is negative");
2125 else if (TREE_INT_CST_HIGH (op1) != 0
2126 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2127 >= TYPE_PRECISION (type0)))
2128 warning ("left shift count >= width of type");
2130 /* Use the type of the value to be shifted.
2131 This is what most traditional C compilers do. */
2132 result_type = type0;
2133 /* Unless traditional, convert the shift-count to an integer,
2134 regardless of size of value being shifted. */
2135 if (! flag_traditional)
2137 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2138 op1 = convert (integer_type_node, op1);
2139 /* Avoid converting op1 to result_type later. */
2147 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2149 if (TREE_CODE (op1) == INTEGER_CST)
2151 if (tree_int_cst_sgn (op1) < 0)
2152 warning ("shift count is negative");
2153 else if (TREE_INT_CST_HIGH (op1) != 0
2154 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2155 >= TYPE_PRECISION (type0)))
2156 warning ("shift count >= width of type");
2158 /* Use the type of the value to be shifted.
2159 This is what most traditional C compilers do. */
2160 result_type = type0;
2161 /* Unless traditional, convert the shift-count to an integer,
2162 regardless of size of value being shifted. */
2163 if (! flag_traditional)
2165 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2166 op1 = convert (integer_type_node, op1);
2167 /* Avoid converting op1 to result_type later. */
2175 /* Result of comparison is always int,
2176 but don't convert the args to int! */
2177 build_type = integer_type_node;
2178 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2179 || code0 == COMPLEX_TYPE)
2180 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2181 || code1 == COMPLEX_TYPE))
2183 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2185 register tree tt0 = TREE_TYPE (type0);
2186 register tree tt1 = TREE_TYPE (type1);
2187 /* Anything compares with void *. void * compares with anything.
2188 Otherwise, the targets must be compatible
2189 and both must be object or both incomplete. */
2190 if (comp_target_types (type0, type1))
2191 result_type = common_type (type0, type1);
2192 else if (TYPE_MAIN_VARIANT (tt0) == void_type_node)
2194 /* op0 != orig_op0 detects the case of something
2195 whose value is 0 but which isn't a valid null ptr const. */
2196 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
2197 && TREE_CODE (tt1) == FUNCTION_TYPE)
2198 pedwarn ("ANSI C forbids comparison of `void *' with function pointer");
2200 else if (TYPE_MAIN_VARIANT (tt1) == void_type_node)
2202 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
2203 && TREE_CODE (tt0) == FUNCTION_TYPE)
2204 pedwarn ("ANSI C forbids comparison of `void *' with function pointer");
2207 pedwarn ("comparison of distinct pointer types lacks a cast");
2209 if (result_type == NULL_TREE)
2210 result_type = ptr_type_node;
2212 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2213 && integer_zerop (op1))
2214 result_type = type0;
2215 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2216 && integer_zerop (op0))
2217 result_type = type1;
2218 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2220 result_type = type0;
2221 if (! flag_traditional)
2222 pedwarn ("comparison between pointer and integer");
2224 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2226 result_type = type1;
2227 if (! flag_traditional)
2228 pedwarn ("comparison between pointer and integer");
2234 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2235 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2237 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2239 if (comp_target_types (type0, type1))
2241 result_type = common_type (type0, type1);
2243 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2244 pedwarn ("ANSI C forbids ordered comparisons of pointers to functions");
2248 result_type = ptr_type_node;
2249 pedwarn ("comparison of distinct pointer types lacks a cast");
2258 build_type = integer_type_node;
2259 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2260 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2262 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2264 if (comp_target_types (type0, type1))
2266 result_type = common_type (type0, type1);
2267 if ((TYPE_SIZE (TREE_TYPE (type0)) != 0)
2268 != (TYPE_SIZE (TREE_TYPE (type1)) != 0))
2269 pedwarn ("comparison of complete and incomplete pointers");
2271 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2272 pedwarn ("ANSI C forbids ordered comparisons of pointers to functions");
2276 result_type = ptr_type_node;
2277 pedwarn ("comparison of distinct pointer types lacks a cast");
2280 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2281 && integer_zerop (op1))
2283 result_type = type0;
2284 if (pedantic || extra_warnings)
2285 pedwarn ("ordered comparison of pointer with integer zero");
2287 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2288 && integer_zerop (op0))
2290 result_type = type1;
2292 pedwarn ("ordered comparison of pointer with integer zero");
2294 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2296 result_type = type0;
2297 if (! flag_traditional)
2298 pedwarn ("comparison between pointer and integer");
2300 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2302 result_type = type1;
2303 if (! flag_traditional)
2304 pedwarn ("comparison between pointer and integer");
2309 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2311 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2313 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
2315 if (shorten || common || short_compare)
2316 result_type = common_type (type0, type1);
2318 /* For certain operations (which identify themselves by shorten != 0)
2319 if both args were extended from the same smaller type,
2320 do the arithmetic in that type and then extend.
2322 shorten !=0 and !=1 indicates a bitwise operation.
2323 For them, this optimization is safe only if
2324 both args are zero-extended or both are sign-extended.
2325 Otherwise, we might change the result.
2326 Eg, (short)-1 | (unsigned short)-1 is (int)-1
2327 but calculated in (unsigned short) it would be (unsigned short)-1. */
2329 if (shorten && none_complex)
2331 int unsigned0, unsigned1;
2332 tree arg0 = get_narrower (op0, &unsigned0);
2333 tree arg1 = get_narrower (op1, &unsigned1);
2334 /* UNS is 1 if the operation to be done is an unsigned one. */
2335 int uns = TREE_UNSIGNED (result_type);
2338 final_type = result_type;
2340 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
2341 but it *requires* conversion to FINAL_TYPE. */
2343 if ((TYPE_PRECISION (TREE_TYPE (op0))
2344 == TYPE_PRECISION (TREE_TYPE (arg0)))
2345 && TREE_TYPE (op0) != final_type)
2346 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
2347 if ((TYPE_PRECISION (TREE_TYPE (op1))
2348 == TYPE_PRECISION (TREE_TYPE (arg1)))
2349 && TREE_TYPE (op1) != final_type)
2350 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
2352 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
2354 /* For bitwise operations, signedness of nominal type
2355 does not matter. Consider only how operands were extended. */
2359 /* Note that in all three cases below we refrain from optimizing
2360 an unsigned operation on sign-extended args.
2361 That would not be valid. */
2363 /* Both args variable: if both extended in same way
2364 from same width, do it in that width.
2365 Do it unsigned if args were zero-extended. */
2366 if ((TYPE_PRECISION (TREE_TYPE (arg0))
2367 < TYPE_PRECISION (result_type))
2368 && (TYPE_PRECISION (TREE_TYPE (arg1))
2369 == TYPE_PRECISION (TREE_TYPE (arg0)))
2370 && unsigned0 == unsigned1
2371 && (unsigned0 || !uns))
2373 = signed_or_unsigned_type (unsigned0,
2374 common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
2375 else if (TREE_CODE (arg0) == INTEGER_CST
2376 && (unsigned1 || !uns)
2377 && (TYPE_PRECISION (TREE_TYPE (arg1))
2378 < TYPE_PRECISION (result_type))
2379 && (type = signed_or_unsigned_type (unsigned1,
2381 int_fits_type_p (arg0, type)))
2383 else if (TREE_CODE (arg1) == INTEGER_CST
2384 && (unsigned0 || !uns)
2385 && (TYPE_PRECISION (TREE_TYPE (arg0))
2386 < TYPE_PRECISION (result_type))
2387 && (type = signed_or_unsigned_type (unsigned0,
2389 int_fits_type_p (arg1, type)))
2393 /* Shifts can be shortened if shifting right. */
2398 tree arg0 = get_narrower (op0, &unsigned_arg);
2400 final_type = result_type;
2402 if (arg0 == op0 && final_type == TREE_TYPE (op0))
2403 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
2405 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
2406 /* We can shorten only if the shift count is less than the
2407 number of bits in the smaller type size. */
2408 && TREE_INT_CST_HIGH (op1) == 0
2409 && TYPE_PRECISION (TREE_TYPE (arg0)) > TREE_INT_CST_LOW (op1)
2410 /* If arg is sign-extended and then unsigned-shifted,
2411 we can simulate this with a signed shift in arg's type
2412 only if the extended result is at least twice as wide
2413 as the arg. Otherwise, the shift could use up all the
2414 ones made by sign-extension and bring in zeros.
2415 We can't optimize that case at all, but in most machines
2416 it never happens because available widths are 2**N. */
2417 && (!TREE_UNSIGNED (final_type)
2419 || 2 * TYPE_PRECISION (TREE_TYPE (arg0)) <= TYPE_PRECISION (result_type)))
2421 /* Do an unsigned shift if the operand was zero-extended. */
2423 = signed_or_unsigned_type (unsigned_arg,
2425 /* Convert value-to-be-shifted to that type. */
2426 if (TREE_TYPE (op0) != result_type)
2427 op0 = convert (result_type, op0);
2432 /* Comparison operations are shortened too but differently.
2433 They identify themselves by setting short_compare = 1. */
2437 /* Don't write &op0, etc., because that would prevent op0
2438 from being kept in a register.
2439 Instead, make copies of the our local variables and
2440 pass the copies by reference, then copy them back afterward. */
2441 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
2442 enum tree_code xresultcode = resultcode;
2444 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
2447 op0 = xop0, op1 = xop1;
2449 resultcode = xresultcode;
2453 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
2454 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
2456 int unsignedp0, unsignedp1;
2457 tree primop0 = get_narrower (op0, &unsignedp0);
2458 tree primop1 = get_narrower (op1, &unsignedp1);
2460 /* Avoid spurious warnings for comparison with enumerators. */
2464 STRIP_TYPE_NOPS (xop0);
2465 STRIP_TYPE_NOPS (xop1);
2467 /* Give warnings for comparisons between signed and unsigned
2468 quantities that may fail. */
2469 /* Do the checking based on the original operand trees, so that
2470 casts will be considered, but default promotions won't be. */
2472 /* Do not warn if the comparison is being done in a signed type,
2473 since the signed type will only be chosen if it can represent
2474 all the values of the unsigned type. */
2475 if (! TREE_UNSIGNED (result_type))
2477 /* Do not warn if both operands are unsigned. */
2478 else if (op0_signed == op1_signed)
2480 /* Do not warn if the signed quantity is an unsuffixed
2481 integer literal (or some static constant expression
2482 involving such literals) and it is non-negative. */
2483 else if ((op0_signed && TREE_CODE (xop0) == INTEGER_CST
2484 && tree_int_cst_sgn (xop0) >= 0)
2485 || (op1_signed && TREE_CODE (xop1) == INTEGER_CST
2486 && tree_int_cst_sgn (xop1) >= 0))
2488 /* Do not warn if the comparison is an equality operation,
2489 the unsigned quantity is an integral constant and it does
2490 not use the most significant bit of result_type. */
2491 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
2492 && ((op0_signed && TREE_CODE (xop1) == INTEGER_CST
2493 && int_fits_type_p (xop1, signed_type (result_type))
2494 || (op1_signed && TREE_CODE (xop0) == INTEGER_CST
2495 && int_fits_type_p (xop0, signed_type (result_type))))))
2498 warning ("comparison between signed and unsigned");
2500 /* Warn if two unsigned values are being compared in a size
2501 larger than their original size, and one (and only one) is the
2502 result of a `~' operator. This comparison will always fail.
2504 Also warn if one operand is a constant, and the constant
2505 does not have all bits set that are set in the ~ operand
2506 when it is extended. */
2508 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
2509 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
2511 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
2512 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
2515 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
2518 if (TREE_CODE (primop0) == INTEGER_CST
2519 || TREE_CODE (primop1) == INTEGER_CST)
2522 long constant, mask;
2523 int unsignedp, bits;
2525 if (TREE_CODE (primop0) == INTEGER_CST)
2528 unsignedp = unsignedp1;
2529 constant = TREE_INT_CST_LOW (primop0);
2534 unsignedp = unsignedp0;
2535 constant = TREE_INT_CST_LOW (primop1);
2538 bits = TYPE_PRECISION (TREE_TYPE (primop));
2539 if (bits < TYPE_PRECISION (result_type)
2540 && bits < HOST_BITS_PER_LONG && unsignedp)
2542 mask = (~0L) << bits;
2543 if ((mask & constant) != mask)
2544 warning ("comparison of promoted ~unsigned with constant");
2547 else if (unsignedp0 && unsignedp1
2548 && (TYPE_PRECISION (TREE_TYPE (primop0))
2549 < TYPE_PRECISION (result_type))
2550 && (TYPE_PRECISION (TREE_TYPE (primop1))
2551 < TYPE_PRECISION (result_type)))
2552 warning ("comparison of promoted ~unsigned with unsigned");
2558 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
2559 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
2560 Then the expression will be built.
2561 It will be given type FINAL_TYPE if that is nonzero;
2562 otherwise, it will be given type RESULT_TYPE. */
2566 binary_op_error (code);
2567 return error_mark_node;
2572 if (TREE_TYPE (op0) != result_type)
2573 op0 = convert (result_type, op0);
2574 if (TREE_TYPE (op1) != result_type)
2575 op1 = convert (result_type, op1);
2578 if (build_type == NULL_TREE)
2579 build_type = result_type;
2582 register tree result = build (resultcode, build_type, op0, op1);
2583 register tree folded;
2585 folded = fold (result);
2586 if (folded == result)
2587 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2588 if (final_type != 0)
2589 return convert (final_type, folded);
2594 /* Return a tree for the sum or difference (RESULTCODE says which)
2595 of pointer PTROP and integer INTOP. */
2598 pointer_int_sum (resultcode, ptrop, intop)
2599 enum tree_code resultcode;
2600 register tree ptrop, intop;
2604 register tree result;
2605 register tree folded;
2607 /* The result is a pointer of the same type that is being added. */
2609 register tree result_type = TREE_TYPE (ptrop);
2611 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2613 if (pedantic || warn_pointer_arith)
2614 pedwarn ("pointer of type `void *' used in arithmetic");
2615 size_exp = integer_one_node;
2617 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2619 if (pedantic || warn_pointer_arith)
2620 pedwarn ("pointer to a function used in arithmetic");
2621 size_exp = integer_one_node;
2624 size_exp = c_size_in_bytes (TREE_TYPE (result_type));
2626 /* If what we are about to multiply by the size of the elements
2627 contains a constant term, apply distributive law
2628 and multiply that constant term separately.
2629 This helps produce common subexpressions. */
2631 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2632 && ! TREE_CONSTANT (intop)
2633 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2634 && TREE_CONSTANT (size_exp)
2635 /* If the constant comes from pointer subtraction,
2636 skip this optimization--it would cause an error. */
2637 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE)
2639 enum tree_code subcode = resultcode;
2640 tree int_type = TREE_TYPE (intop);
2641 if (TREE_CODE (intop) == MINUS_EXPR)
2642 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2643 /* Convert both subexpression types to the type of intop,
2644 because weird cases involving pointer arithmetic
2645 can result in a sum or difference with different type args. */
2646 ptrop = build_binary_op (subcode, ptrop,
2647 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2648 intop = convert (int_type, TREE_OPERAND (intop, 0));
2651 /* Convert the integer argument to a type the same size as a pointer
2652 so the multiply won't overflow spuriously. */
2654 if (TYPE_PRECISION (TREE_TYPE (intop)) != POINTER_SIZE)
2655 intop = convert (type_for_size (POINTER_SIZE, 0), intop);
2657 /* Replace the integer argument with a suitable product by the object size.
2658 Do this multiplication as signed, then convert to the appropriate
2659 pointer type (actually unsigned integral). */
2661 intop = convert (result_type,
2662 build_binary_op (MULT_EXPR, intop,
2663 convert (TREE_TYPE (intop), size_exp), 1));
2665 /* Create the sum or difference. */
2667 result = build (resultcode, result_type, ptrop, intop);
2669 folded = fold (result);
2670 if (folded == result)
2671 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2675 /* Return a tree for the difference of pointers OP0 and OP1.
2676 The resulting tree has type int. */
2679 pointer_diff (op0, op1)
2680 register tree op0, op1;
2682 register tree result, folded;
2683 tree restype = ptrdiff_type_node;
2685 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2687 if (pedantic || warn_pointer_arith)
2689 if (TREE_CODE (target_type) == VOID_TYPE)
2690 pedwarn ("pointer of type `void *' used in subtraction");
2691 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2692 pedwarn ("pointer to a function used in subtraction");
2695 /* First do the subtraction as integers;
2696 then drop through to build the divide operator. */
2698 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2699 convert (restype, op1), 1);
2700 /* This generates an error if op1 is pointer to incomplete type. */
2701 if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (op1))) == 0)
2702 error ("arithmetic on pointer to an incomplete type");
2704 /* This generates an error if op0 is pointer to incomplete type. */
2705 op1 = c_size_in_bytes (target_type);
2707 /* Divide by the size, in easiest possible way. */
2709 result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2711 folded = fold (result);
2712 if (folded == result)
2713 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2717 /* Construct and perhaps optimize a tree representation
2718 for a unary operation. CODE, a tree_code, specifies the operation
2719 and XARG is the operand. NOCONVERT nonzero suppresses
2720 the default promotions (such as from short to int). */
2723 build_unary_op (code, xarg, noconvert)
2724 enum tree_code code;
2728 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2729 register tree arg = xarg;
2730 register tree argtype = 0;
2731 register enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2732 char *errstring = NULL;
2735 if (typecode == ERROR_MARK)
2736 return error_mark_node;
2737 if (typecode == ENUMERAL_TYPE)
2738 typecode = INTEGER_TYPE;
2743 /* This is used for unary plus, because a CONVERT_EXPR
2744 is enough to prevent anybody from looking inside for
2745 associativity, but won't generate any code. */
2746 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2747 || typecode == COMPLEX_TYPE))
2748 errstring = "wrong type argument to unary plus";
2749 else if (!noconvert)
2750 arg = default_conversion (arg);
2754 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2755 || typecode == COMPLEX_TYPE))
2756 errstring = "wrong type argument to unary minus";
2757 else if (!noconvert)
2758 arg = default_conversion (arg);
2762 if (typecode == COMPLEX_TYPE)
2766 arg = default_conversion (arg);
2768 else if (typecode != INTEGER_TYPE)
2769 errstring = "wrong type argument to bit-complement";
2770 else if (!noconvert)
2771 arg = default_conversion (arg);
2775 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2776 || typecode == COMPLEX_TYPE))
2777 errstring = "wrong type argument to abs";
2778 else if (!noconvert)
2779 arg = default_conversion (arg);
2783 /* Conjugating a real value is a no-op, but allow it anyway. */
2784 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2785 || typecode == COMPLEX_TYPE))
2786 errstring = "wrong type argument to conjugation";
2787 else if (!noconvert)
2788 arg = default_conversion (arg);
2791 case TRUTH_NOT_EXPR:
2792 if (typecode != INTEGER_TYPE
2793 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2794 && typecode != COMPLEX_TYPE
2795 /* These will convert to a pointer. */
2796 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2798 errstring = "wrong type argument to unary exclamation mark";
2801 arg = truthvalue_conversion (arg);
2802 return invert_truthvalue (arg);
2808 if (TREE_CODE (arg) == COMPLEX_CST)
2809 return TREE_REALPART (arg);
2810 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2811 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2816 if (TREE_CODE (arg) == COMPLEX_CST)
2817 return TREE_IMAGPART (arg);
2818 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2819 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2821 return convert (TREE_TYPE (arg), integer_zero_node);
2823 case PREINCREMENT_EXPR:
2824 case POSTINCREMENT_EXPR:
2825 case PREDECREMENT_EXPR:
2826 case POSTDECREMENT_EXPR:
2827 /* Handle complex lvalues (when permitted)
2828 by reduction to simpler cases. */
2830 val = unary_complex_lvalue (code, arg);
2834 /* Increment or decrement the real part of the value,
2835 and don't change the imaginary part. */
2836 if (typecode == COMPLEX_TYPE)
2840 arg = stabilize_reference (arg);
2841 real = build_unary_op (REALPART_EXPR, arg, 1);
2842 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2843 return build (COMPLEX_EXPR, TREE_TYPE (arg),
2844 build_unary_op (code, real, 1), imag);
2847 /* Report invalid types. */
2849 if (typecode != POINTER_TYPE
2850 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2852 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2853 errstring ="wrong type argument to increment";
2855 errstring ="wrong type argument to decrement";
2861 tree result_type = TREE_TYPE (arg);
2863 arg = get_unwidened (arg, 0);
2864 argtype = TREE_TYPE (arg);
2866 /* Compute the increment. */
2868 if (typecode == POINTER_TYPE)
2870 /* If pointer target is an undefined struct,
2871 we just cannot know how to do the arithmetic. */
2872 if (TYPE_SIZE (TREE_TYPE (result_type)) == 0)
2873 error ("%s of pointer to unknown structure",
2874 ((code == PREINCREMENT_EXPR
2875 || code == POSTINCREMENT_EXPR)
2876 ? "increment" : "decrement"));
2877 else if ((pedantic || warn_pointer_arith)
2878 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2879 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2880 pedwarn ("wrong type argument to %s",
2881 ((code == PREINCREMENT_EXPR
2882 || code == POSTINCREMENT_EXPR)
2883 ? "increment" : "decrement"));
2884 inc = c_size_in_bytes (TREE_TYPE (result_type));
2887 inc = integer_one_node;
2889 inc = convert (argtype, inc);
2891 /* Handle incrementing a cast-expression. */
2894 switch (TREE_CODE (arg))
2899 case FIX_TRUNC_EXPR:
2900 case FIX_FLOOR_EXPR:
2901 case FIX_ROUND_EXPR:
2903 pedantic_lvalue_warning (CONVERT_EXPR);
2904 /* If the real type has the same machine representation
2905 as the type it is cast to, we can make better output
2906 by adding directly to the inside of the cast. */
2907 if ((TREE_CODE (TREE_TYPE (arg))
2908 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
2909 && (TYPE_MODE (TREE_TYPE (arg))
2910 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
2911 arg = TREE_OPERAND (arg, 0);
2914 tree incremented, modify, value;
2915 arg = stabilize_reference (arg);
2916 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
2919 value = save_expr (arg);
2920 incremented = build (((code == PREINCREMENT_EXPR
2921 || code == POSTINCREMENT_EXPR)
2922 ? PLUS_EXPR : MINUS_EXPR),
2923 argtype, value, inc);
2924 TREE_SIDE_EFFECTS (incremented) = 1;
2925 modify = build_modify_expr (arg, NOP_EXPR, incremented);
2926 value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
2927 TREE_USED (value) = 1;
2937 /* Complain about anything else that is not a true lvalue. */
2938 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2939 || code == POSTINCREMENT_EXPR)
2940 ? "increment" : "decrement")))
2941 return error_mark_node;
2943 /* Report a read-only lvalue. */
2944 if (TREE_READONLY (arg))
2945 readonly_warning (arg,
2946 ((code == PREINCREMENT_EXPR
2947 || code == POSTINCREMENT_EXPR)
2948 ? "increment" : "decrement"));
2950 val = build (code, TREE_TYPE (arg), arg, inc);
2951 TREE_SIDE_EFFECTS (val) = 1;
2952 val = convert (result_type, val);
2953 if (TREE_CODE (val) != code)
2954 TREE_NO_UNUSED_WARNING (val) = 1;
2959 /* Note that this operation never does default_conversion
2960 regardless of NOCONVERT. */
2962 /* Let &* cancel out to simplify resulting code. */
2963 if (TREE_CODE (arg) == INDIRECT_REF)
2965 /* Don't let this be an lvalue. */
2966 if (lvalue_p (TREE_OPERAND (arg, 0)))
2967 return non_lvalue (TREE_OPERAND (arg, 0));
2968 return TREE_OPERAND (arg, 0);
2971 /* For &x[y], return x+y */
2972 if (TREE_CODE (arg) == ARRAY_REF)
2974 if (mark_addressable (TREE_OPERAND (arg, 0)) == 0)
2975 return error_mark_node;
2976 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
2977 TREE_OPERAND (arg, 1), 1);
2980 /* Handle complex lvalues (when permitted)
2981 by reduction to simpler cases. */
2982 val = unary_complex_lvalue (code, arg);
2986 #if 0 /* Turned off because inconsistent;
2987 float f; *&(int)f = 3.4 stores in int format
2988 whereas (int)f = 3.4 stores in float format. */
2989 /* Address of a cast is just a cast of the address
2990 of the operand of the cast. */
2991 switch (TREE_CODE (arg))
2996 case FIX_TRUNC_EXPR:
2997 case FIX_FLOOR_EXPR:
2998 case FIX_ROUND_EXPR:
3001 pedwarn ("ANSI C forbids the address of a cast expression");
3002 return convert (build_pointer_type (TREE_TYPE (arg)),
3003 build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0),
3008 /* Allow the address of a constructor if all the elements
3010 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_CONSTANT (arg))
3012 /* Anything not already handled and not a true memory reference
3014 else if (typecode != FUNCTION_TYPE && !lvalue_or_else (arg, "unary `&'"))
3015 return error_mark_node;
3017 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
3018 argtype = TREE_TYPE (arg);
3019 /* If the lvalue is const or volatile,
3020 merge that into the type that the address will point to. */
3021 if (TREE_CODE_CLASS (TREE_CODE (arg)) == 'd'
3022 || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
3024 if (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg))
3025 argtype = c_build_type_variant (argtype,
3026 TREE_READONLY (arg),
3027 TREE_THIS_VOLATILE (arg));
3030 argtype = build_pointer_type (argtype);
3032 if (mark_addressable (arg) == 0)
3033 return error_mark_node;
3038 if (TREE_CODE (arg) == COMPONENT_REF)
3040 tree field = TREE_OPERAND (arg, 1);
3042 addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
3044 if (DECL_BIT_FIELD (field))
3046 error ("attempt to take address of bit-field structure member `%s'",
3047 IDENTIFIER_POINTER (DECL_NAME (field)));
3048 return error_mark_node;
3051 addr = convert (argtype, addr);
3053 if (! integer_zerop (DECL_FIELD_BITPOS (field)))
3056 = size_binop (EASY_DIV_EXPR, DECL_FIELD_BITPOS (field),
3057 size_int (BITS_PER_UNIT));
3058 int flag = TREE_CONSTANT (addr);
3059 addr = fold (build (PLUS_EXPR, argtype,
3060 addr, convert (argtype, offset)));
3061 TREE_CONSTANT (addr) = flag;
3065 addr = build1 (code, argtype, arg);
3067 /* Address of a static or external variable or
3068 file-scope function counts as a constant. */
3070 && ! (TREE_CODE (arg) == FUNCTION_DECL
3071 && DECL_CONTEXT (arg) != 0))
3072 TREE_CONSTANT (addr) = 1;
3080 argtype = TREE_TYPE (arg);
3081 return fold (build1 (code, argtype, arg));
3085 return error_mark_node;
3089 /* If CONVERSIONS is a conversion expression or a nested sequence of such,
3090 convert ARG with the same conversions in the same order
3091 and return the result. */
3094 convert_sequence (conversions, arg)
3098 switch (TREE_CODE (conversions))
3103 case FIX_TRUNC_EXPR:
3104 case FIX_FLOOR_EXPR:
3105 case FIX_ROUND_EXPR:
3107 return convert (TREE_TYPE (conversions),
3108 convert_sequence (TREE_OPERAND (conversions, 0),
3117 /* Return nonzero if REF is an lvalue valid for this language.
3118 Lvalues can be assigned, unless their type has TYPE_READONLY.
3119 Lvalues can have their address taken, unless they have DECL_REGISTER. */
3125 register enum tree_code code = TREE_CODE (ref);
3132 return lvalue_p (TREE_OPERAND (ref, 0));
3143 if (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3144 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
3151 /* Return nonzero if REF is an lvalue valid for this language;
3152 otherwise, print an error message and return zero. */
3155 lvalue_or_else (ref, string)
3159 int win = lvalue_p (ref);
3161 error ("invalid lvalue in %s", string);
3165 /* Apply unary lvalue-demanding operator CODE to the expression ARG
3166 for certain kinds of expressions which are not really lvalues
3167 but which we can accept as lvalues.
3169 If ARG is not a kind of expression we can handle, return zero. */
3172 unary_complex_lvalue (code, arg)
3173 enum tree_code code;
3176 /* Handle (a, b) used as an "lvalue". */
3177 if (TREE_CODE (arg) == COMPOUND_EXPR)
3179 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
3180 pedantic_lvalue_warning (COMPOUND_EXPR);
3181 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
3182 TREE_OPERAND (arg, 0), real_result);
3185 /* Handle (a ? b : c) used as an "lvalue". */
3186 if (TREE_CODE (arg) == COND_EXPR)
3188 pedantic_lvalue_warning (COND_EXPR);
3189 return (build_conditional_expr
3190 (TREE_OPERAND (arg, 0),
3191 build_unary_op (code, TREE_OPERAND (arg, 1), 0),
3192 build_unary_op (code, TREE_OPERAND (arg, 2), 0)));
3198 /* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
3199 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
3202 pedantic_lvalue_warning (code)
3203 enum tree_code code;
3206 pedwarn ("ANSI C forbids use of %s expressions as lvalues",
3207 code == COND_EXPR ? "conditional"
3208 : code == COMPOUND_EXPR ? "compound" : "cast");
3211 /* Warn about storing in something that is `const'. */
3214 readonly_warning (arg, string)
3219 strcpy (buf, string);
3221 /* Forbid assignments to iterators. */
3222 if (TREE_CODE (arg) == VAR_DECL && ITERATOR_P (arg))
3224 strcat (buf, " of iterator `%s'");
3225 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (arg)));
3228 if (TREE_CODE (arg) == COMPONENT_REF)
3230 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3231 readonly_warning (TREE_OPERAND (arg, 0), string);
3234 strcat (buf, " of read-only member `%s'");
3235 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
3238 else if (TREE_CODE (arg) == VAR_DECL)
3240 strcat (buf, " of read-only variable `%s'");
3241 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (arg)));
3245 pedwarn ("%s of read-only location", buf);
3249 /* Mark EXP saying that we need to be able to take the
3250 address of it; it should not be allocated in a register.
3251 Value is 1 if successful. */
3254 mark_addressable (exp)
3257 register tree x = exp;
3259 switch (TREE_CODE (x))
3266 x = TREE_OPERAND (x, 0);
3270 TREE_ADDRESSABLE (x) = 1;
3277 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
3278 && DECL_NONLOCAL (x))
3280 if (TREE_PUBLIC (x))
3282 error ("global register variable `%s' used in nested function",
3283 IDENTIFIER_POINTER (DECL_NAME (x)));
3286 pedwarn ("register variable `%s' used in nested function",
3287 IDENTIFIER_POINTER (DECL_NAME (x)));
3289 else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
3291 if (TREE_PUBLIC (x))
3293 error ("address of global register variable `%s' requested",
3294 IDENTIFIER_POINTER (DECL_NAME (x)));
3298 /* If we are making this addressable due to its having
3299 volatile components, give a different error message. Also
3300 handle the case of an unnamed parameter by not trying
3301 to give the name. */
3303 else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x)))
3305 error ("cannot put object with volatile field into register");
3309 pedwarn ("address of register variable `%s' requested",
3310 IDENTIFIER_POINTER (DECL_NAME (x)));
3312 put_var_into_stack (x);
3316 TREE_ADDRESSABLE (x) = 1;
3317 #if 0 /* poplevel deals with this now. */
3318 if (DECL_CONTEXT (x) == 0)
3319 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
3327 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
3330 build_conditional_expr (ifexp, op1, op2)
3331 tree ifexp, op1, op2;
3333 register tree type1;
3334 register tree type2;
3335 register enum tree_code code1;
3336 register enum tree_code code2;
3337 register tree result_type = NULL;
3338 tree orig_op1 = op1, orig_op2 = op2;
3340 /* If second operand is omitted, it is the same as the first one;
3341 make sure it is calculated only once. */
3345 pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
3346 ifexp = op1 = save_expr (ifexp);
3349 ifexp = truthvalue_conversion (default_conversion (ifexp));
3351 #if 0 /* Produces wrong result if within sizeof. */
3352 /* Don't promote the operands separately if they promote
3353 the same way. Return the unpromoted type and let the combined
3354 value get promoted if necessary. */
3356 if (TREE_TYPE (op1) == TREE_TYPE (op2)
3357 && TREE_CODE (TREE_TYPE (op1)) != ARRAY_TYPE
3358 && TREE_CODE (TREE_TYPE (op1)) != ENUMERAL_TYPE
3359 && TREE_CODE (TREE_TYPE (op1)) != FUNCTION_TYPE)
3361 if (TREE_CODE (ifexp) == INTEGER_CST)
3362 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3364 return fold (build (COND_EXPR, TREE_TYPE (op1), ifexp, op1, op2));
3368 /* Promote both alternatives. */
3370 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3371 op1 = default_conversion (op1);
3372 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3373 op2 = default_conversion (op2);
3375 if (TREE_CODE (ifexp) == ERROR_MARK
3376 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3377 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3378 return error_mark_node;
3380 type1 = TREE_TYPE (op1);
3381 code1 = TREE_CODE (type1);
3382 type2 = TREE_TYPE (op2);
3383 code2 = TREE_CODE (type2);
3385 /* Quickly detect the usual case where op1 and op2 have the same type
3387 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3390 result_type = type1;
3392 result_type = TYPE_MAIN_VARIANT (type1);
3394 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE)
3395 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE))
3397 result_type = common_type (type1, type2);
3399 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3401 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3402 pedwarn ("ANSI C forbids conditional expr with only one void side");
3403 result_type = void_type_node;
3405 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3407 if (comp_target_types (type1, type2))
3408 result_type = common_type (type1, type2);
3409 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3410 && TREE_CODE (orig_op1) != NOP_EXPR)
3411 result_type = qualify_type (type2, type1);
3412 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3413 && TREE_CODE (orig_op2) != NOP_EXPR)
3414 result_type = qualify_type (type1, type2);
3415 else if (TYPE_MAIN_VARIANT (TREE_TYPE (type1)) == void_type_node)
3417 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3418 pedwarn ("ANSI C forbids conditional expr between `void *' and function pointer");
3419 result_type = qualify_type (type1, type2);
3421 else if (TYPE_MAIN_VARIANT (TREE_TYPE (type2)) == void_type_node)
3423 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3424 pedwarn ("ANSI C forbids conditional expr between `void *' and function pointer");
3425 result_type = qualify_type (type2, type1);
3429 pedwarn ("pointer type mismatch in conditional expression");
3430 result_type = build_pointer_type (void_type_node);
3433 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3435 if (! integer_zerop (op2))
3436 pedwarn ("pointer/integer type mismatch in conditional expression");
3439 op2 = null_pointer_node;
3440 #if 0 /* The spec seems to say this is permitted. */
3441 if (pedantic && TREE_CODE (type1) == FUNCTION_TYPE)
3442 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3445 result_type = type1;
3447 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3449 if (!integer_zerop (op1))
3450 pedwarn ("pointer/integer type mismatch in conditional expression");
3453 op1 = null_pointer_node;
3454 #if 0 /* The spec seems to say this is permitted. */
3455 if (pedantic && TREE_CODE (type2) == FUNCTION_TYPE)
3456 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3459 result_type = type2;
3464 if (flag_cond_mismatch)
3465 result_type = void_type_node;
3468 error ("type mismatch in conditional expression");
3469 return error_mark_node;
3473 /* Merge const and volatile flags of the incoming types. */
3475 = build_type_variant (result_type,
3476 TREE_READONLY (op1) || TREE_READONLY (op2),
3477 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3479 if (result_type != TREE_TYPE (op1))
3480 op1 = convert_and_check (result_type, op1);
3481 if (result_type != TREE_TYPE (op2))
3482 op2 = convert_and_check (result_type, op2);
3485 if (code1 == RECORD_TYPE || code1 == UNION_TYPE)
3487 result_type = TREE_TYPE (op1);
3488 if (TREE_CONSTANT (ifexp))
3489 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3491 if (TYPE_MODE (result_type) == BLKmode)
3493 register tree tempvar
3494 = build_decl (VAR_DECL, NULL_TREE, result_type);
3495 register tree xop1 = build_modify_expr (tempvar, op1);
3496 register tree xop2 = build_modify_expr (tempvar, op2);
3497 register tree result = fold (build (COND_EXPR, result_type,
3498 ifexp, xop1, xop2));
3500 layout_decl (tempvar, TYPE_ALIGN (result_type));
3501 /* No way to handle variable-sized objects here.
3502 I fear that the entire handling of BLKmode conditional exprs
3503 needs to be redone. */
3504 if (TREE_CODE (DECL_SIZE (tempvar)) != INTEGER_CST)
3507 = assign_stack_local (DECL_MODE (tempvar),
3508 (TREE_INT_CST_LOW (DECL_SIZE (tempvar))
3509 + BITS_PER_UNIT - 1)
3513 TREE_SIDE_EFFECTS (result)
3514 = TREE_SIDE_EFFECTS (ifexp) | TREE_SIDE_EFFECTS (op1)
3515 | TREE_SIDE_EFFECTS (op2);
3516 return build (COMPOUND_EXPR, result_type, result, tempvar);
3521 if (TREE_CODE (ifexp) == INTEGER_CST)
3522 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3524 return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
3527 /* Given a list of expressions, return a compound expression
3528 that performs them all and returns the value of the last of them. */
3531 build_compound_expr (list)
3534 return internal_build_compound_expr (list, TRUE);
3538 internal_build_compound_expr (list, first_p)
3544 if (TREE_CHAIN (list) == 0)
3546 #if 0 /* If something inside inhibited lvalueness, we should not override. */
3547 /* Consider (x, y+0), which is not an lvalue since y+0 is not. */
3549 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3550 if (TREE_CODE (list) == NON_LVALUE_EXPR)
3551 list = TREE_OPERAND (list, 0);
3554 /* Don't let (0, 0) be null pointer constant. */
3555 if (!first_p && integer_zerop (TREE_VALUE (list)))
3556 return non_lvalue (TREE_VALUE (list));
3557 return TREE_VALUE (list);
3560 if (TREE_CHAIN (list) != 0 && TREE_CHAIN (TREE_CHAIN (list)) == 0)
3562 /* Convert arrays to pointers when there really is a comma operator. */
3563 if (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (list)))) == ARRAY_TYPE)
3564 TREE_VALUE (TREE_CHAIN (list))
3565 = default_conversion (TREE_VALUE (TREE_CHAIN (list)));
3568 rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
3570 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
3572 /* The left-hand operand of a comma expression is like an expression
3573 statement: with -W or -Wunused, we should warn if it doesn't have
3574 any side-effects, unless it was explicitly cast to (void). */
3575 if ((extra_warnings || warn_unused)
3576 && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
3577 && TREE_TYPE (TREE_VALUE (list)) == void_type_node))
3578 warning ("left-hand operand of comma expression has no effect");
3580 /* When pedantic, a compound expression can be neither an lvalue
3581 nor an integer constant expression. */
3586 /* With -Wunused, we should also warn if the left-hand operand does have
3587 side-effects, but computes a value which is not used. For example, in
3588 `foo() + bar(), baz()' the result of the `+' operator is not used,
3589 so we should issue a warning. */
3590 else if (warn_unused)
3591 warn_if_unused_value (TREE_VALUE (list));
3593 return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
3596 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3599 build_c_cast (type, expr)
3603 register tree value = expr;
3605 if (type == error_mark_node || expr == error_mark_node)
3606 return error_mark_node;
3607 type = TYPE_MAIN_VARIANT (type);
3610 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3611 if (TREE_CODE (value) == NON_LVALUE_EXPR)
3612 value = TREE_OPERAND (value, 0);
3615 if (TREE_CODE (type) == ARRAY_TYPE)
3617 error ("cast specifies array type");
3618 return error_mark_node;
3621 if (TREE_CODE (type) == FUNCTION_TYPE)
3623 error ("cast specifies function type");
3624 return error_mark_node;
3627 if (type == TREE_TYPE (value))
3631 if (TREE_CODE (type) == RECORD_TYPE
3632 || TREE_CODE (type) == UNION_TYPE)
3633 pedwarn ("ANSI C forbids casting nonscalar to the same type");
3636 else if (TREE_CODE (type) == UNION_TYPE)
3639 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
3640 || TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE)
3641 value = default_conversion (value);
3643 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3644 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3645 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3654 pedwarn ("ANSI C forbids casts to union type");
3655 if (TYPE_NAME (type) != 0)
3657 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
3658 name = IDENTIFIER_POINTER (TYPE_NAME (type));
3660 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
3664 t = digest_init (type, build (CONSTRUCTOR, type, NULL_TREE,
3665 build_tree_list (field, value)),
3667 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3670 error ("cast to union type from type not present in union");
3671 return error_mark_node;
3677 /* If casting to void, avoid the error that would come
3678 from default_conversion in the case of a non-lvalue array. */
3679 if (type == void_type_node)
3680 return build1 (CONVERT_EXPR, type, value);
3682 /* Convert functions and arrays to pointers,
3683 but don't convert any other types. */
3684 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
3685 || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE)
3686 value = default_conversion (value);
3687 otype = TREE_TYPE (value);
3689 /* Optionally warn about potentially worrisome casts. */
3692 && TREE_CODE (type) == POINTER_TYPE
3693 && TREE_CODE (otype) == POINTER_TYPE)
3695 if (TYPE_VOLATILE (TREE_TYPE (otype))
3696 && ! TYPE_VOLATILE (TREE_TYPE (type)))
3697 pedwarn ("cast discards `volatile' from pointer target type");
3698 if (TYPE_READONLY (TREE_TYPE (otype))
3699 && ! TYPE_READONLY (TREE_TYPE (type)))
3700 pedwarn ("cast discards `const' from pointer target type");
3703 /* Warn about possible alignment problems. */
3704 if (STRICT_ALIGNMENT && warn_cast_align
3705 && TREE_CODE (type) == POINTER_TYPE
3706 && TREE_CODE (otype) == POINTER_TYPE
3707 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3708 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3709 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3710 warning ("cast increases required alignment of target type");
3712 if (TREE_CODE (type) == INTEGER_TYPE
3713 && TREE_CODE (otype) == POINTER_TYPE
3714 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3715 && !TREE_CONSTANT (value))
3716 warning ("cast from pointer to integer of different size");
3718 if (warn_bad_function_cast
3719 && TREE_CODE (value) == CALL_EXPR
3720 && TREE_CODE (type) != TREE_CODE (otype))
3721 warning ("cast does not match function type");
3723 if (TREE_CODE (type) == POINTER_TYPE
3724 && TREE_CODE (otype) == INTEGER_TYPE
3725 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3727 /* Don't warn about converting 0 to pointer,
3728 provided the 0 was explicit--not cast or made by folding. */
3729 && !(TREE_CODE (value) == INTEGER_CST && integer_zerop (value))
3731 /* Don't warn about converting any constant. */
3732 && !TREE_CONSTANT (value))
3733 warning ("cast to pointer from integer of different size");
3736 value = convert (type, value);
3738 /* Ignore any integer overflow caused by the cast. */
3739 if (TREE_CODE (value) == INTEGER_CST)
3741 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3742 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3746 /* Pedantically, don't ley (void *) (FOO *) 0 be a null pointer constant. */
3747 if (pedantic && TREE_CODE (value) == INTEGER_CST
3748 && TREE_CODE (expr) == INTEGER_CST
3749 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3750 value = non_lvalue (value);
3752 /* If pedantic, don't let a cast be an lvalue. */
3753 if (value == expr && pedantic)
3754 value = non_lvalue (value);
3759 /* Build an assignment expression of lvalue LHS from value RHS.
3760 MODIFYCODE is the code for a binary operator that we use
3761 to combine the old value of LHS with RHS to get the new value.
3762 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3765 build_modify_expr (lhs, modifycode, rhs)
3767 enum tree_code modifycode;
3769 register tree result;
3771 tree lhstype = TREE_TYPE (lhs);
3772 tree olhstype = lhstype;
3774 /* Types that aren't fully specified cannot be used in assignments. */
3775 lhs = require_complete_type (lhs);
3777 /* Avoid duplicate error messages from operands that had errors. */
3778 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3779 return error_mark_node;
3781 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3782 /* Do not use STRIP_NOPS here. We do not want an enumerator
3783 whose value is 0 to count as a null pointer constant. */
3784 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3785 rhs = TREE_OPERAND (rhs, 0);
3789 /* Handle control structure constructs used as "lvalues". */
3791 switch (TREE_CODE (lhs))
3793 /* Handle (a, b) used as an "lvalue". */
3795 pedantic_lvalue_warning (COMPOUND_EXPR);
3796 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
3798 if (TREE_CODE (newrhs) == ERROR_MARK)
3799 return error_mark_node;
3800 return build (COMPOUND_EXPR, lhstype,
3801 TREE_OPERAND (lhs, 0), newrhs);
3803 /* Handle (a ? b : c) used as an "lvalue". */
3805 pedantic_lvalue_warning (COND_EXPR);
3806 rhs = save_expr (rhs);
3808 /* Produce (a ? (b = rhs) : (c = rhs))
3809 except that the RHS goes through a save-expr
3810 so the code to compute it is only emitted once. */
3812 = build_conditional_expr (TREE_OPERAND (lhs, 0),
3813 build_modify_expr (TREE_OPERAND (lhs, 1),
3815 build_modify_expr (TREE_OPERAND (lhs, 2),
3817 if (TREE_CODE (cond) == ERROR_MARK)
3819 /* Make sure the code to compute the rhs comes out
3820 before the split. */
3821 return build (COMPOUND_EXPR, TREE_TYPE (lhs),
3822 /* But cast it to void to avoid an "unused" error. */
3823 convert (void_type_node, rhs), cond);
3827 /* If a binary op has been requested, combine the old LHS value with the RHS
3828 producing the value we should actually store into the LHS. */
3830 if (modifycode != NOP_EXPR)
3832 lhs = stabilize_reference (lhs);
3833 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3836 /* Handle a cast used as an "lvalue".
3837 We have already performed any binary operator using the value as cast.
3838 Now convert the result to the cast type of the lhs,
3839 and then true type of the lhs and store it there;
3840 then convert result back to the cast type to be the value
3841 of the assignment. */
3843 switch (TREE_CODE (lhs))
3848 case FIX_TRUNC_EXPR:
3849 case FIX_FLOOR_EXPR:
3850 case FIX_ROUND_EXPR:
3852 if (TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
3853 || TREE_CODE (TREE_TYPE (newrhs)) == FUNCTION_TYPE)
3854 newrhs = default_conversion (newrhs);
3856 tree inner_lhs = TREE_OPERAND (lhs, 0);
3858 result = build_modify_expr (inner_lhs, NOP_EXPR,
3859 convert (TREE_TYPE (inner_lhs),
3860 convert (lhstype, newrhs)));
3861 if (TREE_CODE (result) == ERROR_MARK)
3863 pedantic_lvalue_warning (CONVERT_EXPR);
3864 return convert (TREE_TYPE (lhs), result);
3868 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3869 Reject anything strange now. */
3871 if (!lvalue_or_else (lhs, "assignment"))
3872 return error_mark_node;
3874 /* Warn about storing in something that is `const'. */
3876 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3877 || ((TREE_CODE (lhstype) == RECORD_TYPE
3878 || TREE_CODE (lhstype) == UNION_TYPE)
3879 && C_TYPE_FIELDS_READONLY (lhstype)))
3880 readonly_warning (lhs, "assignment");
3882 /* If storing into a structure or union member,
3883 it has probably been given type `int'.
3884 Compute the type that would go with
3885 the actual amount of storage the member occupies. */
3887 if (TREE_CODE (lhs) == COMPONENT_REF
3888 && (TREE_CODE (lhstype) == INTEGER_TYPE
3889 || TREE_CODE (lhstype) == REAL_TYPE
3890 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3891 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3893 /* If storing in a field that is in actuality a short or narrower than one,
3894 we must store in the field in its actual type. */
3896 if (lhstype != TREE_TYPE (lhs))
3898 lhs = copy_node (lhs);
3899 TREE_TYPE (lhs) = lhstype;
3902 /* Convert new value to destination type. */
3904 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
3905 NULL_TREE, NULL_TREE, 0);
3906 if (TREE_CODE (newrhs) == ERROR_MARK)
3907 return error_mark_node;
3909 result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
3910 TREE_SIDE_EFFECTS (result) = 1;
3912 /* If we got the LHS in a different type for storing in,
3913 convert the result back to the nominal type of LHS
3914 so that the value we return always has the same type
3915 as the LHS argument. */
3917 if (olhstype == TREE_TYPE (result))
3919 return convert_for_assignment (olhstype, result, "assignment",
3920 NULL_TREE, NULL_TREE, 0);
3923 /* Convert value RHS to type TYPE as preparation for an assignment
3924 to an lvalue of type TYPE.
3925 The real work of conversion is done by `convert'.
3926 The purpose of this function is to generate error messages
3927 for assignments that are not allowed in C.
3928 ERRTYPE is a string to use in error messages:
3929 "assignment", "return", etc. If it is null, this is parameter passing
3930 for a function call (and different error messages are output). Otherwise,
3931 it may be a name stored in the spelling stack and interpreted by
3934 FUNNAME is the name of the function being called,
3935 as an IDENTIFIER_NODE, or null.
3936 PARMNUM is the number of the argument, for printing in error messages. */
3939 convert_for_assignment (type, rhs, errtype, fundecl, funname, parmnum)
3942 tree fundecl, funname;
3945 register enum tree_code codel = TREE_CODE (type);
3946 register tree rhstype;
3947 register enum tree_code coder;
3949 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3950 /* Do not use STRIP_NOPS here. We do not want an enumerator
3951 whose value is 0 to count as a null pointer constant. */
3952 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3953 rhs = TREE_OPERAND (rhs, 0);
3955 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3956 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3957 rhs = default_conversion (rhs);
3958 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3959 rhs = decl_constant_value (rhs);
3961 rhstype = TREE_TYPE (rhs);
3962 coder = TREE_CODE (rhstype);
3964 if (coder == ERROR_MARK)
3965 return error_mark_node;
3967 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3969 overflow_warning (rhs);
3970 /* Check for Objective-C protocols. This will issue a warning if
3971 there are protocol violations. No need to use the return value. */
3972 maybe_objc_comptypes (type, rhstype, 0);
3976 if (coder == VOID_TYPE)
3978 error ("void value not ignored as it ought to be");
3979 return error_mark_node;
3981 /* Arithmetic types all interconvert, and enum is treated like int. */
3982 if ((codel == INTEGER_TYPE || codel == REAL_TYPE || codel == ENUMERAL_TYPE
3983 || codel == COMPLEX_TYPE)
3984 && (coder == INTEGER_TYPE || coder == REAL_TYPE || coder == ENUMERAL_TYPE
3985 || coder == COMPLEX_TYPE))
3986 return convert_and_check (type, rhs);
3988 /* Conversion to a union from its member types. */
3989 else if (codel == UNION_TYPE)
3993 for (memb_types = TYPE_FIELDS (type); memb_types;
3994 memb_types = TREE_CHAIN (memb_types))
3996 if (comptypes (TREE_TYPE (memb_types), TREE_TYPE (rhs)))
3999 && !(fundecl != 0 && DECL_IN_SYSTEM_HEADER (fundecl)))
4000 pedwarn ("ANSI C prohibits argument conversion to union type");
4001 return build1 (NOP_EXPR, type, rhs);
4004 else if (coder == POINTER_TYPE
4005 && TREE_CODE (TREE_TYPE (memb_types)) == POINTER_TYPE)
4007 tree memb_type = TREE_TYPE (memb_types);
4008 register tree ttl = TREE_TYPE (memb_type);
4009 register tree ttr = TREE_TYPE (rhstype);
4011 /* Any non-function converts to a [const][volatile] void *
4012 and vice versa; otherwise, targets must be the same.
4013 Meanwhile, the lhs target must have all the qualifiers of
4015 if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4016 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4017 || comp_target_types (memb_type, rhstype))
4019 /* Const and volatile mean something different for function
4020 types, so the usual warnings are not appropriate. */
4021 if (TREE_CODE (ttr) != FUNCTION_TYPE
4022 || TREE_CODE (ttl) != FUNCTION_TYPE)
4024 if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
4025 warn_for_assignment ("%s discards `const' from pointer target type",
4026 get_spelling (errtype), funname,
4028 if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
4029 warn_for_assignment ("%s discards `volatile' from pointer target type",
4030 get_spelling (errtype), funname,
4035 /* Because const and volatile on functions are
4036 restrictions that say the function will not do
4037 certain things, it is okay to use a const or volatile
4038 function where an ordinary one is wanted, but not
4040 if (TYPE_READONLY (ttl) && ! TYPE_READONLY (ttr))
4041 warn_for_assignment ("%s makes `const *' function pointer from non-const",
4042 get_spelling (errtype), funname,
4044 if (TYPE_VOLATILE (ttl) && ! TYPE_VOLATILE (ttr))
4045 warn_for_assignment ("%s makes `volatile *' function pointer from non-volatile",
4046 get_spelling (errtype), funname,
4051 && !(fundecl != 0 && DECL_IN_SYSTEM_HEADER (fundecl)))
4052 pedwarn ("ANSI C prohibits argument conversion to union type");
4053 return build1 (NOP_EXPR, type, rhs);
4057 /* Can convert integer zero to any pointer type. */
4058 else if (TREE_CODE (TREE_TYPE (memb_types)) == POINTER_TYPE
4059 && (integer_zerop (rhs)
4060 || (TREE_CODE (rhs) == NOP_EXPR
4061 && integer_zerop (TREE_OPERAND (rhs, 0)))))
4062 return build1 (NOP_EXPR, type, null_pointer_node);
4066 /* Conversions among pointers */
4067 else if (codel == POINTER_TYPE && coder == POINTER_TYPE)
4069 register tree ttl = TREE_TYPE (type);
4070 register tree ttr = TREE_TYPE (rhstype);
4072 /* Any non-function converts to a [const][volatile] void *
4073 and vice versa; otherwise, targets must be the same.
4074 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
4075 if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4076 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4077 || comp_target_types (type, rhstype)
4078 || (unsigned_type (TYPE_MAIN_VARIANT (ttl))
4079 == unsigned_type (TYPE_MAIN_VARIANT (ttr))))
4082 && ((TYPE_MAIN_VARIANT (ttl) == void_type_node
4083 && TREE_CODE (ttr) == FUNCTION_TYPE)
4085 (TYPE_MAIN_VARIANT (ttr) == void_type_node
4086 /* Check TREE_CODE to catch cases like (void *) (char *) 0
4087 which are not ANSI null ptr constants. */
4088 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
4089 && TREE_CODE (ttl) == FUNCTION_TYPE)))
4090 warn_for_assignment ("ANSI forbids %s between function pointer and `void *'",
4091 get_spelling (errtype), funname, parmnum);
4092 /* Const and volatile mean something different for function types,
4093 so the usual warnings are not appropriate. */
4094 else if (TREE_CODE (ttr) != FUNCTION_TYPE
4095 && TREE_CODE (ttl) != FUNCTION_TYPE)
4097 if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
4098 warn_for_assignment ("%s discards `const' from pointer target type",
4099 get_spelling (errtype), funname, parmnum);
4100 else if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
4101 warn_for_assignment ("%s discards `volatile' from pointer target type",
4102 get_spelling (errtype), funname, parmnum);
4103 /* If this is not a case of ignoring a mismatch in signedness,
4105 else if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4106 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4107 || comp_target_types (type, rhstype))
4109 /* If there is a mismatch, do warn. */
4111 warn_for_assignment ("pointer targets in %s differ in signedness",
4112 get_spelling (errtype), funname, parmnum);
4114 else if (TREE_CODE (ttl) == FUNCTION_TYPE
4115 && TREE_CODE (ttr) == FUNCTION_TYPE)
4117 /* Because const and volatile on functions are restrictions
4118 that say the function will not do certain things,
4119 it is okay to use a const or volatile function
4120 where an ordinary one is wanted, but not vice-versa. */
4121 if (TYPE_READONLY (ttl) && ! TYPE_READONLY (ttr))
4122 warn_for_assignment ("%s makes `const *' function pointer from non-const",
4123 get_spelling (errtype), funname, parmnum);
4124 if (TYPE_VOLATILE (ttl) && ! TYPE_VOLATILE (ttr))
4125 warn_for_assignment ("%s makes `volatile *' function pointer from non-volatile",
4126 get_spelling (errtype), funname, parmnum);
4130 warn_for_assignment ("%s from incompatible pointer type",
4131 get_spelling (errtype), funname, parmnum);
4132 return convert (type, rhs);
4134 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
4136 /* An explicit constant 0 can convert to a pointer,
4137 or one that results from arithmetic, even including
4138 a cast to integer type. */
4139 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
4141 ! (TREE_CODE (rhs) == NOP_EXPR
4142 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
4143 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
4144 && integer_zerop (TREE_OPERAND (rhs, 0))))
4146 warn_for_assignment ("%s makes pointer from integer without a cast",
4147 get_spelling (errtype), funname, parmnum);
4148 return convert (type, rhs);
4150 return null_pointer_node;
4152 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
4154 warn_for_assignment ("%s makes integer from pointer without a cast",
4155 get_spelling (errtype), funname, parmnum);
4156 return convert (type, rhs);
4163 tree selector = maybe_building_objc_message_expr ();
4165 if (selector && parmnum > 2)
4166 error ("incompatible type for argument %d of `%s'",
4167 parmnum - 2, IDENTIFIER_POINTER (selector));
4169 error ("incompatible type for argument %d of `%s'",
4170 parmnum, IDENTIFIER_POINTER (funname));
4173 error ("incompatible type for argument %d of indirect function call",
4177 error ("incompatible types in %s", get_spelling (errtype));
4179 return error_mark_node;
4182 /* Print a warning using MSG.
4183 It gets OPNAME as its one parameter.
4184 If OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
4185 FUNCTION and ARGNUM are handled specially if we are building an
4186 Objective-C selector. */
4189 warn_for_assignment (msg, opname, function, argnum)
4195 static char argstring[] = "passing arg %d of `%s'";
4196 static char argnofun[] = "passing arg %d";
4200 tree selector = maybe_building_objc_message_expr ();
4202 if (selector && argnum > 2)
4204 function = selector;
4209 /* Function name is known; supply it. */
4210 opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4211 + sizeof (argstring) + 25 /*%d*/ + 1);
4212 sprintf (opname, argstring, argnum, IDENTIFIER_POINTER (function));
4216 /* Function name unknown (call through ptr); just give arg number. */
4217 opname = (char *) alloca (sizeof (argnofun) + 25 /*%d*/ + 1);
4218 sprintf (opname, argnofun, argnum);
4221 pedwarn (msg, opname);
4224 /* Return nonzero if VALUE is a valid constant-valued expression
4225 for use in initializing a static variable; one that can be an
4226 element of a "constant" initializer.
4228 Return null_pointer_node if the value is absolute;
4229 if it is relocatable, return the variable that determines the relocation.
4230 We assume that VALUE has been folded as much as possible;
4231 therefore, we do not need to check for such things as
4232 arithmetic-combinations of integers. */
4235 initializer_constant_valid_p (value, endtype)
4239 switch (TREE_CODE (value))
4242 if (TREE_CODE (TREE_TYPE (value)) == UNION_TYPE
4243 && TREE_CONSTANT (value))
4245 initializer_constant_valid_p (TREE_VALUE (CONSTRUCTOR_ELTS (value)),
4248 return TREE_STATIC (value) ? null_pointer_node : 0;
4254 return null_pointer_node;
4257 return TREE_OPERAND (value, 0);
4259 case NON_LVALUE_EXPR:
4260 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4264 /* Allow conversions between pointer types. */
4265 if (TREE_CODE (TREE_TYPE (value)) == POINTER_TYPE
4266 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == POINTER_TYPE)
4267 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4269 /* Allow conversions between real types. */
4270 if (TREE_CODE (TREE_TYPE (value)) == REAL_TYPE
4271 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == REAL_TYPE)
4272 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4274 /* Allow length-preserving conversions between integer types. */
4275 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4276 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE
4277 && (TYPE_PRECISION (TREE_TYPE (value))
4278 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4279 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4281 /* Allow conversions between other integer types only if
4283 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4284 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE)
4286 tree inner = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4288 if (inner == null_pointer_node)
4289 return null_pointer_node;
4293 /* Allow (int) &foo provided int is as wide as a pointer. */
4294 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4295 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == POINTER_TYPE
4296 && (TYPE_PRECISION (TREE_TYPE (value))
4297 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4298 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4301 /* Likewise conversions from int to pointers. */
4302 if (TREE_CODE (TREE_TYPE (value)) == POINTER_TYPE
4303 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE
4304 && (TYPE_PRECISION (TREE_TYPE (value))
4305 <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4306 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4309 /* Allow conversions to union types if the value inside is okay. */
4310 if (TREE_CODE (TREE_TYPE (value)) == UNION_TYPE)
4311 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4316 if (TREE_CODE (endtype) == INTEGER_TYPE
4317 && TYPE_PRECISION (endtype) < POINTER_SIZE)
4320 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4322 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4324 /* If either term is absolute, use the other terms relocation. */
4325 if (valid0 == null_pointer_node)
4327 if (valid1 == null_pointer_node)
4333 if (TREE_CODE (endtype) == INTEGER_TYPE
4334 && TYPE_PRECISION (endtype) < POINTER_SIZE)
4337 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4339 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4341 /* Win if second argument is absolute. */
4342 if (valid1 == null_pointer_node)
4344 /* Win if both arguments have the same relocation.
4345 Then the value is absolute. */
4346 if (valid0 == valid1)
4347 return null_pointer_node;
4355 /* If VALUE is a compound expr all of whose expressions are constant, then
4356 return its value. Otherwise, return error_mark_node.
4358 This is for handling COMPOUND_EXPRs as initializer elements
4359 which is allowed with a warning when -pedantic is specified. */
4362 valid_compound_expr_initializer (value, endtype)
4366 if (TREE_CODE (value) == COMPOUND_EXPR)
4368 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4370 return error_mark_node;
4371 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4374 else if (! TREE_CONSTANT (value)
4375 && ! initializer_constant_valid_p (value, endtype))
4376 return error_mark_node;
4381 /* Perform appropriate conversions on the initial value of a variable,
4382 store it in the declaration DECL,
4383 and print any error messages that are appropriate.
4384 If the init is invalid, store an ERROR_MARK. */
4387 store_init_value (decl, init)
4390 register tree value, type;
4392 /* If variable's type was invalidly declared, just ignore it. */
4394 type = TREE_TYPE (decl);
4395 if (TREE_CODE (type) == ERROR_MARK)
4398 /* Digest the specified initializer into an expression. */
4400 value = digest_init (type, init, TREE_STATIC (decl),
4401 TREE_STATIC (decl) || pedantic);
4403 /* Store the expression if valid; else report error. */
4406 /* Note that this is the only place we can detect the error
4407 in a case such as struct foo bar = (struct foo) { x, y };
4408 where there is one initial value which is a constructor expression. */
4409 if (value == error_mark_node)
4411 else if (TREE_STATIC (decl) && ! TREE_CONSTANT (value))
4413 error ("initializer for static variable is not constant");
4414 value = error_mark_node;
4416 else if (TREE_STATIC (decl)
4417 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
4419 error ("initializer for static variable uses complicated arithmetic");
4420 value = error_mark_node;
4424 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
4426 if (! TREE_CONSTANT (value))
4427 pedwarn ("aggregate initializer is not constant");
4428 else if (! TREE_STATIC (value))
4429 pedwarn ("aggregate initializer uses complicated arithmetic");
4434 DECL_INITIAL (decl) = value;
4436 /* ANSI wants warnings about out-of-range constant initializers. */
4437 STRIP_TYPE_NOPS (value);
4438 constant_expression_warning (value);
4441 /* Methods for storing and printing names for error messages. */
4443 /* Implement a spelling stack that allows components of a name to be pushed
4444 and popped. Each element on the stack is this structure. */
4456 #define SPELLING_STRING 1
4457 #define SPELLING_MEMBER 2
4458 #define SPELLING_BOUNDS 3
4460 static struct spelling *spelling; /* Next stack element (unused). */
4461 static struct spelling *spelling_base; /* Spelling stack base. */
4462 static int spelling_size; /* Size of the spelling stack. */
4464 /* Macros to save and restore the spelling stack around push_... functions.
4465 Alternative to SAVE_SPELLING_STACK. */
4467 #define SPELLING_DEPTH() (spelling - spelling_base)
4468 #define RESTORE_SPELLING_DEPTH(depth) (spelling = spelling_base + depth)
4470 /* Save and restore the spelling stack around arbitrary C code. */
4472 #define SAVE_SPELLING_DEPTH(code) \
4474 int __depth = SPELLING_DEPTH (); \
4476 RESTORE_SPELLING_DEPTH (__depth); \
4479 /* Push an element on the spelling stack with type KIND and assign VALUE
4482 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4484 int depth = SPELLING_DEPTH (); \
4486 if (depth >= spelling_size) \
4488 spelling_size += 10; \
4489 if (spelling_base == 0) \
4491 = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \
4494 = (struct spelling *) xrealloc (spelling_base, \
4495 spelling_size * sizeof (struct spelling)); \
4496 RESTORE_SPELLING_DEPTH (depth); \
4499 spelling->kind = (KIND); \
4500 spelling->MEMBER = (VALUE); \
4504 /* Push STRING on the stack. Printed literally. */
4507 push_string (string)
4510 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4513 /* Push a member name on the stack. Printed as '.' STRING. */
4516 push_member_name (decl)
4521 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4522 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4525 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4528 push_array_bounds (bounds)
4531 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4534 /* Compute the maximum size in bytes of the printed spelling. */
4539 register int size = 0;
4540 register struct spelling *p;
4542 for (p = spelling_base; p < spelling; p++)
4544 if (p->kind == SPELLING_BOUNDS)
4547 size += strlen (p->u.s) + 1;
4553 /* Print the spelling to BUFFER and return it. */
4556 print_spelling (buffer)
4557 register char *buffer;
4559 register char *d = buffer;
4561 register struct spelling *p;
4563 for (p = spelling_base; p < spelling; p++)
4564 if (p->kind == SPELLING_BOUNDS)
4566 sprintf (d, "[%d]", p->u.i);
4571 if (p->kind == SPELLING_MEMBER)
4573 for (s = p->u.s; *d = *s++; d++)
4580 /* Provide a means to pass component names derived from the spelling stack. */
4582 char initialization_message;
4584 /* Interpret the spelling of the given ERRTYPE message. */
4587 get_spelling (errtype)
4590 static char *buffer;
4591 static int size = -1;
4593 if (errtype == &initialization_message)
4595 /* Avoid counting chars */
4596 static char message[] = "initialization of `%s'";
4597 register int needed = sizeof (message) + spelling_length () + 1;
4601 buffer = (char *) xmalloc (size = needed);
4603 buffer = (char *) xrealloc (buffer, size = needed);
4605 temp = (char *) alloca (needed);
4606 sprintf (buffer, message, print_spelling (temp));
4613 /* Issue an error message for a bad initializer component.
4614 FORMAT describes the message. OFWHAT is the name for the component.
4615 LOCAL is a format string for formatting the insertion of the name
4618 If OFWHAT is null, the component name is stored on the spelling stack.
4619 If the component name is a null string, then LOCAL is omitted entirely. */
4622 error_init (format, local, ofwhat)
4623 char *format, *local, *ofwhat;
4628 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4629 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4632 sprintf (buffer, local, ofwhat);
4636 error (format, buffer);
4639 /* Issue a pedantic warning for a bad initializer component.
4640 FORMAT describes the message. OFWHAT is the name for the component.
4641 LOCAL is a format string for formatting the insertion of the name
4644 If OFWHAT is null, the component name is stored on the spelling stack.
4645 If the component name is a null string, then LOCAL is omitted entirely. */
4648 pedwarn_init (format, local, ofwhat)
4649 char *format, *local, *ofwhat;
4654 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4655 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4658 sprintf (buffer, local, ofwhat);
4662 pedwarn (format, buffer);
4665 /* Issue a warning for a bad initializer component.
4666 FORMAT describes the message. OFWHAT is the name for the component.
4667 LOCAL is a format string for formatting the insertion of the name
4670 If OFWHAT is null, the component name is stored on the spelling stack.
4671 If the component name is a null string, then LOCAL is omitted entirely. */
4674 warning_init (format, local, ofwhat)
4675 char *format, *local, *ofwhat;
4680 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4681 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4684 sprintf (buffer, local, ofwhat);
4688 warning (format, buffer);
4691 /* Digest the parser output INIT as an initializer for type TYPE.
4692 Return a C expression of type TYPE to represent the initial value.
4694 The arguments REQUIRE_CONSTANT and CONSTRUCTOR_CONSTANT request errors
4695 if non-constant initializers or elements are seen. CONSTRUCTOR_CONSTANT
4696 applies only to elements of constructors. */
4699 digest_init (type, init, require_constant, constructor_constant)
4701 int require_constant, constructor_constant;
4703 enum tree_code code = TREE_CODE (type);
4704 tree inside_init = init;
4706 if (init == error_mark_node)
4709 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4710 /* Do not use STRIP_NOPS here. We do not want an enumerator
4711 whose value is 0 to count as a null pointer constant. */
4712 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4713 inside_init = TREE_OPERAND (init, 0);
4715 /* Initialization of an array of chars from a string constant
4716 optionally enclosed in braces. */
4718 if (code == ARRAY_TYPE)
4720 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4721 if ((typ1 == char_type_node
4722 || typ1 == signed_char_type_node
4723 || typ1 == unsigned_char_type_node
4724 || typ1 == unsigned_wchar_type_node
4725 || typ1 == signed_wchar_type_node)
4726 && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
4728 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4729 TYPE_MAIN_VARIANT (type)))
4732 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4734 && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
4736 error_init ("char-array%s initialized from wide string",
4738 return error_mark_node;
4740 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4742 && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
4744 error_init ("int-array%s initialized from non-wide string",
4746 return error_mark_node;
4749 TREE_TYPE (inside_init) = type;
4750 if (TYPE_DOMAIN (type) != 0
4751 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
4753 register int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
4754 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
4755 /* Subtract 1 (or sizeof (wchar_t))
4756 because it's ok to ignore the terminating null char
4757 that is counted in the length of the constant. */
4758 if (size < TREE_STRING_LENGTH (inside_init)
4759 - (TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node)
4760 ? TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT
4763 "initializer-string for array of chars%s is too long",
4770 /* Any type can be initialized
4771 from an expression of the same type, optionally with braces. */
4773 if (inside_init && TREE_TYPE (inside_init) != 0
4774 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4775 TYPE_MAIN_VARIANT (type))
4776 || (code == ARRAY_TYPE
4777 && comptypes (TREE_TYPE (inside_init), type))
4778 || (code == POINTER_TYPE
4779 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4780 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)
4781 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4782 TREE_TYPE (type)))))
4784 if (code == POINTER_TYPE
4785 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4786 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE))
4787 inside_init = default_conversion (inside_init);
4788 else if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4789 && TREE_CODE (inside_init) != CONSTRUCTOR)
4791 error_init ("array%s initialized from non-constant array expression",
4793 return error_mark_node;
4796 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4797 inside_init = decl_constant_value (inside_init);
4799 /* Compound expressions can only occur here if -pedantic or
4800 -pedantic-errors is specified. In the later case, we always want
4801 an error. In the former case, we simply want a warning. */
4802 if (require_constant && pedantic
4803 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4806 = valid_compound_expr_initializer (inside_init,
4807 TREE_TYPE (inside_init));
4808 if (inside_init == error_mark_node)
4809 error_init ("initializer element%s is not constant",
4812 pedwarn_init ("initializer element%s is not constant",
4814 if (flag_pedantic_errors)
4815 inside_init = error_mark_node;
4817 else if (require_constant && ! TREE_CONSTANT (inside_init))
4819 error_init ("initializer element%s is not constant",
4821 inside_init = error_mark_node;
4823 else if (require_constant
4824 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4826 error_init ("initializer element%s is not computable at load time",
4828 inside_init = error_mark_node;
4834 /* Handle scalar types, including conversions. */
4836 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4837 || code == ENUMERAL_TYPE || code == COMPLEX_TYPE)
4839 /* Note that convert_for_assignment calls default_conversion
4840 for arrays and functions. We must not call it in the
4841 case where inside_init is a null pointer constant. */
4843 = convert_for_assignment (type, init, "initialization",
4844 NULL_TREE, NULL_TREE, 0);
4846 if (require_constant && ! TREE_CONSTANT (inside_init))
4848 error_init ("initializer element%s is not constant",
4850 inside_init = error_mark_node;
4852 else if (require_constant
4853 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4855 error_init ("initializer element%s is not computable at load time",
4857 inside_init = error_mark_node;
4863 /* Come here only for records and arrays. */
4865 if (TYPE_SIZE (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4867 error_init ("variable-sized object%s may not be initialized",
4869 return error_mark_node;
4872 /* Traditionally, you can write struct foo x = 0;
4873 and it initializes the first element of x to 0. */
4874 if (flag_traditional)
4876 tree top = 0, prev = 0;
4877 while (TREE_CODE (type) == RECORD_TYPE
4878 || TREE_CODE (type) == ARRAY_TYPE
4879 || TREE_CODE (type) == QUAL_UNION_TYPE
4880 || TREE_CODE (type) == UNION_TYPE)
4882 tree temp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
4886 TREE_OPERAND (prev, 1) = build_tree_list (NULL_TREE, temp);
4888 if (TREE_CODE (type) == ARRAY_TYPE)
4889 type = TREE_TYPE (type);
4890 else if (TYPE_FIELDS (type))
4891 type = TREE_TYPE (TYPE_FIELDS (type));
4894 error_init ("invalid initializer%s", " for `%s'", NULL);
4895 return error_mark_node;
4898 TREE_OPERAND (prev, 1)
4899 = build_tree_list (NULL_TREE,
4900 digest_init (type, init, require_constant,
4901 constructor_constant));
4904 error_init ("invalid initializer%s", " for `%s'", NULL);
4905 return error_mark_node;
4908 /* Handle initializers that use braces. */
4910 /* Type of object we are accumulating a constructor for.
4911 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4912 static tree constructor_type;
4914 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4916 static tree constructor_fields;
4918 /* For an ARRAY_TYPE, this is the specified index
4919 at which to store the next element we get.
4920 This is a special INTEGER_CST node that we modify in place. */
4921 static tree constructor_index;
4923 /* For an ARRAY_TYPE, this is the end index of the range
4924 to initialize with the next element, or NULL in the ordinary case
4925 where the element is used just once. */
4926 static tree constructor_range_end;
4928 /* For an ARRAY_TYPE, this is the maximum index. */
4929 static tree constructor_max_index;
4931 /* For a RECORD_TYPE, this is the first field not yet written out. */
4932 static tree constructor_unfilled_fields;
4934 /* For an ARRAY_TYPE, this is the index of the first element
4935 not yet written out.
4936 This is a special INTEGER_CST node that we modify in place. */
4937 static tree constructor_unfilled_index;
4939 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4940 This is so we can generate gaps between fields, when appropriate.
4941 This is a special INTEGER_CST node that we modify in place. */
4942 static tree constructor_bit_index;
4944 /* If we are saving up the elements rather than allocating them,
4945 this is the list of elements so far (in reverse order,
4946 most recent first). */
4947 static tree constructor_elements;
4949 /* 1 if so far this constructor's elements are all compile-time constants. */
4950 static int constructor_constant;
4952 /* 1 if so far this constructor's elements are all valid address constants. */
4953 static int constructor_simple;
4955 /* 1 if this constructor is erroneous so far. */
4956 static int constructor_erroneous;
4958 /* 1 if have called defer_addressed_constants. */
4959 static int constructor_subconstants_deferred;
4961 /* List of pending elements at this constructor level.
4962 These are elements encountered out of order
4963 which belong at places we haven't reached yet in actually
4964 writing the output. */
4965 static tree constructor_pending_elts;
4967 /* The SPELLING_DEPTH of this constructor. */
4968 static int constructor_depth;
4970 /* 0 if implicitly pushing constructor levels is allowed. */
4971 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4973 /* 1 if this constructor level was entered implicitly. */
4974 static int constructor_implicit;
4976 static int require_constant_value;
4977 static int require_constant_elements;
4979 /* 1 if it is ok to output this constructor as we read it.
4980 0 means must accumulate a CONSTRUCTOR expression. */
4981 static int constructor_incremental;
4983 /* DECL node for which an initializer is being read.
4984 0 means we are reading a constructor expression
4985 such as (struct foo) {...}. */
4986 static tree constructor_decl;
4988 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4989 static char *constructor_asmspec;
4991 /* Nonzero if this is an initializer for a top-level decl. */
4992 static int constructor_top_level;
4994 /* When we finish reading a constructor expression
4995 (constructor_decl is 0), the CONSTRUCTOR goes here. */
4996 static tree constructor_result;
4998 /* This stack has a level for each implicit or explicit level of
4999 structuring in the initializer, including the outermost one. It
5000 saves the values of most of the variables above. */
5002 struct constructor_stack
5004 struct constructor_stack *next;
5010 tree unfilled_index;
5011 tree unfilled_fields;
5017 /* If nonzero, this value should replace the entire
5018 constructor at this level. */
5019 tree replacement_value;
5028 struct constructor_stack *constructor_stack;
5030 /* This stack records separate initializers that are nested.
5031 Nested initializers can't happen in ANSI C, but GNU C allows them
5032 in cases like { ... (struct foo) { ... } ... }. */
5034 struct initializer_stack
5036 struct initializer_stack *next;
5039 struct constructor_stack *constructor_stack;
5041 struct spelling *spelling;
5042 struct spelling *spelling_base;
5046 char require_constant_value;
5047 char require_constant_elements;
5051 struct initializer_stack *initializer_stack;
5053 /* Prepare to parse and output the initializer for variable DECL. */
5056 start_init (decl, asmspec_tree, top_level)
5062 struct initializer_stack *p
5063 = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack));
5067 asmspec = TREE_STRING_POINTER (asmspec_tree);
5069 p->decl = constructor_decl;
5070 p->asmspec = constructor_asmspec;
5071 p->incremental = constructor_incremental;
5072 p->require_constant_value = require_constant_value;
5073 p->require_constant_elements = require_constant_elements;
5074 p->constructor_stack = constructor_stack;
5075 p->elements = constructor_elements;
5076 p->spelling = spelling;
5077 p->spelling_base = spelling_base;
5078 p->spelling_size = spelling_size;
5079 p->deferred = constructor_subconstants_deferred;
5080 p->top_level = constructor_top_level;
5081 p->next = initializer_stack;
5082 initializer_stack = p;
5084 constructor_decl = decl;
5085 constructor_incremental = top_level;
5086 constructor_asmspec = asmspec;
5087 constructor_subconstants_deferred = 0;
5088 constructor_top_level = top_level;
5092 require_constant_value = TREE_STATIC (decl);
5093 require_constant_elements
5094 = ((TREE_STATIC (decl) || pedantic)
5095 /* For a scalar, you can always use any value to initialize,
5096 even within braces. */
5097 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
5098 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5099 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
5100 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
5101 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
5102 constructor_incremental |= TREE_STATIC (decl);
5106 require_constant_value = 0;
5107 require_constant_elements = 0;
5108 locus = "(anonymous)";
5111 constructor_stack = 0;
5113 missing_braces_mentioned = 0;
5117 RESTORE_SPELLING_DEPTH (0);
5120 push_string (locus);
5126 struct initializer_stack *p = initializer_stack;
5128 /* Output subconstants (string constants, usually)
5129 that were referenced within this initializer and saved up.
5130 Must do this if and only if we called defer_addressed_constants. */
5131 if (constructor_subconstants_deferred)
5132 output_deferred_addressed_constants ();
5134 /* Free the whole constructor stack of this initializer. */
5135 while (constructor_stack)
5137 struct constructor_stack *q = constructor_stack;
5138 constructor_stack = q->next;
5142 /* Pop back to the data of the outer initializer (if any). */
5143 constructor_decl = p->decl;
5144 constructor_asmspec = p->asmspec;
5145 constructor_incremental = p->incremental;
5146 require_constant_value = p->require_constant_value;
5147 require_constant_elements = p->require_constant_elements;
5148 constructor_stack = p->constructor_stack;
5149 constructor_elements = p->elements;
5150 spelling = p->spelling;
5151 spelling_base = p->spelling_base;
5152 spelling_size = p->spelling_size;
5153 constructor_subconstants_deferred = p->deferred;
5154 constructor_top_level = p->top_level;
5155 initializer_stack = p->next;
5159 /* Call here when we see the initializer is surrounded by braces.
5160 This is instead of a call to push_init_level;
5161 it is matched by a call to pop_init_level.
5163 TYPE is the type to initialize, for a constructor expression.
5164 For an initializer for a decl, TYPE is zero. */
5167 really_start_incremental_init (type)
5170 struct constructor_stack *p
5171 = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5174 type = TREE_TYPE (constructor_decl);
5176 /* Turn off constructor_incremental if type is a struct with bitfields.
5177 Do this before the first push, so that the corrected value
5178 is available in finish_init. */
5179 check_init_type_bitfields (type);
5181 p->type = constructor_type;
5182 p->fields = constructor_fields;
5183 p->index = constructor_index;
5184 p->range_end = constructor_range_end;
5185 p->max_index = constructor_max_index;
5186 p->unfilled_index = constructor_unfilled_index;
5187 p->unfilled_fields = constructor_unfilled_fields;
5188 p->bit_index = constructor_bit_index;
5189 p->elements = constructor_elements;
5190 p->constant = constructor_constant;
5191 p->simple = constructor_simple;
5192 p->erroneous = constructor_erroneous;
5193 p->pending_elts = constructor_pending_elts;
5194 p->depth = constructor_depth;
5195 p->replacement_value = 0;
5197 p->incremental = constructor_incremental;
5200 constructor_stack = p;
5202 constructor_constant = 1;
5203 constructor_simple = 1;
5204 constructor_depth = SPELLING_DEPTH ();
5205 constructor_elements = 0;
5206 constructor_pending_elts = 0;
5207 constructor_type = type;
5209 if (TREE_CODE (constructor_type) == RECORD_TYPE
5210 || TREE_CODE (constructor_type) == UNION_TYPE)
5212 constructor_fields = TYPE_FIELDS (constructor_type);
5213 /* Skip any nameless bit fields atthe beginning. */
5214 while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
5215 && DECL_NAME (constructor_fields) == 0)
5216 constructor_fields = TREE_CHAIN (constructor_fields);
5217 constructor_unfilled_fields = constructor_fields;
5218 constructor_bit_index = copy_node (integer_zero_node);
5220 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5222 constructor_range_end = 0;
5223 if (TYPE_DOMAIN (constructor_type))
5225 constructor_max_index
5226 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5228 = copy_node (TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5231 constructor_index = copy_node (integer_zero_node);
5232 constructor_unfilled_index = copy_node (constructor_index);
5236 /* Handle the case of int x = {5}; */
5237 constructor_fields = constructor_type;
5238 constructor_unfilled_fields = constructor_type;
5241 if (constructor_incremental)
5243 int momentary = suspend_momentary ();
5244 push_obstacks_nochange ();
5245 if (TREE_PERMANENT (constructor_decl))
5246 end_temporary_allocation ();
5247 make_decl_rtl (constructor_decl, constructor_asmspec,
5248 constructor_top_level);
5249 assemble_variable (constructor_decl, constructor_top_level, 0, 1);
5251 resume_momentary (momentary);
5254 if (constructor_incremental)
5256 defer_addressed_constants ();
5257 constructor_subconstants_deferred = 1;
5261 /* Push down into a subobject, for initialization.
5262 If this is for an explicit set of braces, IMPLICIT is 0.
5263 If it is because the next element belongs at a lower level,
5267 push_init_level (implicit)
5270 struct constructor_stack *p;
5272 /* If we've exhausted any levels that didn't have braces,
5274 while (constructor_stack->implicit)
5276 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5277 || TREE_CODE (constructor_type) == UNION_TYPE)
5278 && constructor_fields == 0)
5279 process_init_element (pop_init_level (1));
5280 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5281 && tree_int_cst_lt (constructor_max_index, constructor_index))
5282 process_init_element (pop_init_level (1));
5287 /* Structure elements may require alignment. Do this now
5288 if necessary for the subaggregate. */
5289 if (constructor_incremental && constructor_type != 0
5290 && TREE_CODE (constructor_type) == RECORD_TYPE && constructor_fields)
5292 /* Advance to offset of this element. */
5293 if (! tree_int_cst_equal (constructor_bit_index,
5294 DECL_FIELD_BITPOS (constructor_fields)))
5296 int next = (TREE_INT_CST_LOW
5297 (DECL_FIELD_BITPOS (constructor_fields))
5299 int here = (TREE_INT_CST_LOW (constructor_bit_index)
5302 assemble_zeros (next - here);
5306 p = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5307 p->type = constructor_type;
5308 p->fields = constructor_fields;
5309 p->index = constructor_index;
5310 p->range_end = constructor_range_end;
5311 p->max_index = constructor_max_index;
5312 p->unfilled_index = constructor_unfilled_index;
5313 p->unfilled_fields = constructor_unfilled_fields;
5314 p->bit_index = constructor_bit_index;
5315 p->elements = constructor_elements;
5316 p->constant = constructor_constant;
5317 p->simple = constructor_simple;
5318 p->erroneous = constructor_erroneous;
5319 p->pending_elts = constructor_pending_elts;
5320 p->depth = constructor_depth;
5321 p->replacement_value = 0;
5322 p->implicit = implicit;
5323 p->incremental = constructor_incremental;
5325 p->next = constructor_stack;
5326 constructor_stack = p;
5328 constructor_constant = 1;
5329 constructor_simple = 1;
5330 constructor_depth = SPELLING_DEPTH ();
5331 constructor_elements = 0;
5332 constructor_pending_elts = 0;
5334 /* Don't die if an entire brace-pair level is superfluous
5335 in the containing level. */
5336 if (constructor_type == 0)
5338 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5339 || TREE_CODE (constructor_type) == UNION_TYPE)
5341 /* Don't die if there are extra init elts at the end. */
5342 if (constructor_fields == 0)
5343 constructor_type = 0;
5346 constructor_type = TREE_TYPE (constructor_fields);
5347 push_member_name (constructor_fields);
5348 constructor_depth++;
5349 if (constructor_fields != constructor_unfilled_fields)
5350 constructor_incremental = 0;
5353 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5355 constructor_type = TREE_TYPE (constructor_type);
5356 push_array_bounds (TREE_INT_CST_LOW (constructor_index));
5357 constructor_depth++;
5358 if (! tree_int_cst_equal (constructor_index, constructor_unfilled_index)
5359 || constructor_range_end != 0)
5360 constructor_incremental = 0;
5363 if (constructor_type == 0)
5365 error_init ("extra brace group at end of initializer%s",
5367 constructor_fields = 0;
5368 constructor_unfilled_fields = 0;
5372 /* Turn off constructor_incremental if type is a struct with bitfields. */
5373 check_init_type_bitfields (constructor_type);
5375 if (implicit && warn_missing_braces && !missing_braces_mentioned)
5377 missing_braces_mentioned = 1;
5378 warning_init ("missing braces around initializer%s", " for `%s'", NULL);
5381 if (TREE_CODE (constructor_type) == RECORD_TYPE
5382 || TREE_CODE (constructor_type) == UNION_TYPE)
5384 constructor_fields = TYPE_FIELDS (constructor_type);
5385 /* Skip any nameless bit fields atthe beginning. */
5386 while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
5387 && DECL_NAME (constructor_fields) == 0)
5388 constructor_fields = TREE_CHAIN (constructor_fields);
5389 constructor_unfilled_fields = constructor_fields;
5390 constructor_bit_index = copy_node (integer_zero_node);
5392 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5394 constructor_range_end = 0;
5395 if (TYPE_DOMAIN (constructor_type))
5397 constructor_max_index
5398 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5400 = copy_node (TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5403 constructor_index = copy_node (integer_zero_node);
5404 constructor_unfilled_index = copy_node (constructor_index);
5408 warning_init ("braces around scalar initializer%s", " for `%s'", NULL);
5409 constructor_fields = constructor_type;
5410 constructor_unfilled_fields = constructor_type;
5414 /* Don't read a struct incrementally if it has any bitfields,
5415 because the incremental reading code doesn't know how to
5416 handle bitfields yet. */
5419 check_init_type_bitfields (type)
5422 if (TREE_CODE (type) == RECORD_TYPE)
5425 for (tail = TYPE_FIELDS (type); tail;
5426 tail = TREE_CHAIN (tail))
5428 if (DECL_BIT_FIELD (tail)
5429 /* This catches cases like `int foo : 8;'. */
5430 || DECL_MODE (tail) != TYPE_MODE (TREE_TYPE (tail)))
5432 constructor_incremental = 0;
5436 check_init_type_bitfields (TREE_TYPE (tail));
5440 else if (TREE_CODE (type) == ARRAY_TYPE)
5441 check_init_type_bitfields (TREE_TYPE (type));
5444 /* At the end of an implicit or explicit brace level,
5445 finish up that level of constructor.
5446 If we were outputting the elements as they are read, return 0
5447 from inner levels (process_init_element ignores that),
5448 but return error_mark_node from the outermost level
5449 (that's what we want to put in DECL_INITIAL).
5450 Otherwise, return a CONSTRUCTOR expression. */
5453 pop_init_level (implicit)
5456 struct constructor_stack *p;
5458 tree constructor = 0;
5462 /* When we come to an explicit close brace,
5463 pop any inner levels that didn't have explicit braces. */
5464 while (constructor_stack->implicit)
5465 process_init_element (pop_init_level (1));
5468 p = constructor_stack;
5470 if (constructor_type != 0)
5471 size = int_size_in_bytes (constructor_type);
5473 /* Now output all pending elements. */
5474 output_pending_init_elements (1);
5476 #if 0 /* c-parse.in warns about {}. */
5477 /* In ANSI, each brace level must have at least one element. */
5478 if (! implicit && pedantic
5479 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5480 ? integer_zerop (constructor_unfilled_index)
5481 : constructor_unfilled_fields == TYPE_FIELDS (constructor_type)))
5482 pedwarn_init ("empty braces in initializer%s", " for `%s'", NULL);
5485 /* Pad out the end of the structure. */
5487 if (p->replacement_value)
5489 /* If this closes a superfluous brace pair,
5490 just pass out the element between them. */
5491 constructor = p->replacement_value;
5492 /* If this is the top level thing within the initializer,
5493 and it's for a variable, then since we already called
5494 assemble_variable, we must output the value now. */
5495 if (p->next == 0 && constructor_decl != 0
5496 && constructor_incremental)
5498 constructor = digest_init (constructor_type, constructor,
5499 require_constant_value,
5500 require_constant_elements);
5502 /* If initializing an array of unknown size,
5503 determine the size now. */
5504 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5505 && TYPE_DOMAIN (constructor_type) == 0)
5510 push_obstacks_nochange ();
5511 if (TREE_PERMANENT (constructor_type))
5512 end_temporary_allocation ();
5514 momentary_p = suspend_momentary ();
5516 /* We shouldn't have an incomplete array type within
5518 if (constructor_stack->next)
5522 = complete_array_type (constructor_type,
5527 size = int_size_in_bytes (constructor_type);
5528 resume_momentary (momentary_p);
5532 output_constant (constructor, size);
5535 else if (constructor_type == 0)
5537 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5538 && TREE_CODE (constructor_type) != UNION_TYPE
5539 && TREE_CODE (constructor_type) != ARRAY_TYPE
5540 && ! constructor_incremental)
5542 /* A nonincremental scalar initializer--just return
5543 the element, after verifying there is just one. */
5544 if (constructor_elements == 0)
5546 error_init ("empty scalar initializer%s",
5548 constructor = error_mark_node;
5550 else if (TREE_CHAIN (constructor_elements) != 0)
5552 error_init ("extra elements in scalar initializer%s",
5554 constructor = TREE_VALUE (constructor_elements);
5557 constructor = TREE_VALUE (constructor_elements);
5559 else if (! constructor_incremental)
5561 if (constructor_erroneous)
5562 constructor = error_mark_node;
5565 int momentary = suspend_momentary ();
5567 constructor = build (CONSTRUCTOR, constructor_type, NULL_TREE,
5568 nreverse (constructor_elements));
5569 if (constructor_constant)
5570 TREE_CONSTANT (constructor) = 1;
5571 if (constructor_constant && constructor_simple)
5572 TREE_STATIC (constructor) = 1;
5574 resume_momentary (momentary);
5580 int momentary = suspend_momentary ();
5582 if (TREE_CODE (constructor_type) == RECORD_TYPE
5583 || TREE_CODE (constructor_type) == UNION_TYPE)
5585 /* Find the offset of the end of that field. */
5586 filled = size_binop (CEIL_DIV_EXPR,
5587 constructor_bit_index,
5588 size_int (BITS_PER_UNIT));
5590 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5592 /* If initializing an array of unknown size,
5593 determine the size now. */
5594 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5595 && TYPE_DOMAIN (constructor_type) == 0)
5598 = size_binop (MINUS_EXPR,
5599 constructor_unfilled_index,
5602 push_obstacks_nochange ();
5603 if (TREE_PERMANENT (constructor_type))
5604 end_temporary_allocation ();
5605 maxindex = copy_node (maxindex);
5606 TYPE_DOMAIN (constructor_type) = build_index_type (maxindex);
5607 TREE_TYPE (maxindex) = TYPE_DOMAIN (constructor_type);
5609 /* TYPE_MAX_VALUE is always one less than the number of elements
5610 in the array, because we start counting at zero. Therefore,
5611 warn only if the value is less than zero. */
5613 && (tree_int_cst_sgn (TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5615 error_with_decl (constructor_decl,
5616 "zero or negative array size `%s'");
5617 layout_type (constructor_type);
5618 size = int_size_in_bytes (constructor_type);
5622 filled = size_binop (MULT_EXPR, constructor_unfilled_index,
5623 size_in_bytes (TREE_TYPE (constructor_type)));
5629 assemble_zeros (size - TREE_INT_CST_LOW (filled));
5631 resume_momentary (momentary);
5635 constructor_type = p->type;
5636 constructor_fields = p->fields;
5637 constructor_index = p->index;
5638 constructor_range_end = p->range_end;
5639 constructor_max_index = p->max_index;
5640 constructor_unfilled_index = p->unfilled_index;
5641 constructor_unfilled_fields = p->unfilled_fields;
5642 constructor_bit_index = p->bit_index;
5643 constructor_elements = p->elements;
5644 constructor_constant = p->constant;
5645 constructor_simple = p->simple;
5646 constructor_erroneous = p->erroneous;
5647 constructor_pending_elts = p->pending_elts;
5648 constructor_depth = p->depth;
5649 constructor_incremental = p->incremental;
5650 RESTORE_SPELLING_DEPTH (constructor_depth);
5652 constructor_stack = p->next;
5655 if (constructor == 0)
5657 if (constructor_stack == 0)
5658 return error_mark_node;
5664 /* Within an array initializer, specify the next index to be initialized.
5665 FIRST is that index. If LAST is nonzero, then initialize a range
5666 of indices, running from FIRST through LAST. */
5669 set_init_index (first, last)
5672 while ((TREE_CODE (first) == NOP_EXPR
5673 || TREE_CODE (first) == CONVERT_EXPR
5674 || TREE_CODE (first) == NON_LVALUE_EXPR)
5675 && (TYPE_MODE (TREE_TYPE (first))
5676 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5677 (first) = TREE_OPERAND (first, 0);
5679 while ((TREE_CODE (last) == NOP_EXPR
5680 || TREE_CODE (last) == CONVERT_EXPR
5681 || TREE_CODE (last) == NON_LVALUE_EXPR)
5682 && (TYPE_MODE (TREE_TYPE (last))
5683 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5684 (last) = TREE_OPERAND (last, 0);
5686 if (TREE_CODE (first) != INTEGER_CST)
5687 error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
5688 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5689 error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
5690 else if (tree_int_cst_lt (first, constructor_unfilled_index))
5691 error_init ("duplicate array index in initializer%s", " for `%s'", NULL);
5694 TREE_INT_CST_LOW (constructor_index)
5695 = TREE_INT_CST_LOW (first);
5696 TREE_INT_CST_HIGH (constructor_index)
5697 = TREE_INT_CST_HIGH (first);
5699 if (last != 0 && tree_int_cst_lt (last, first))
5700 error_init ("empty index range in initializer%s", " for `%s'", NULL);
5704 pedwarn ("ANSI C forbids specifying element to initialize");
5705 constructor_range_end = last;
5710 /* Within a struct initializer, specify the next field to be initialized. */
5713 set_init_label (fieldname)
5719 for (tail = TYPE_FIELDS (constructor_type); tail;
5720 tail = TREE_CHAIN (tail))
5722 if (tail == constructor_unfilled_fields)
5724 if (DECL_NAME (tail) == fieldname)
5729 error ("unknown field `%s' specified in initializer",
5730 IDENTIFIER_POINTER (fieldname));
5732 error ("field `%s' already initialized",
5733 IDENTIFIER_POINTER (fieldname));
5736 constructor_fields = tail;
5738 pedwarn ("ANSI C forbids specifying structure member to initialize");
5742 /* "Output" the next constructor element.
5743 At top level, really output it to assembler code now.
5744 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5745 TYPE is the data type that the containing data type wants here.
5746 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5748 PENDING if non-nil means output pending elements that belong
5749 right after this element. (PENDING is normally 1;
5750 it is 0 while outputting pending elements, to avoid recursion.) */
5753 output_init_element (value, type, field, pending)
5754 tree value, type, field;
5759 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5760 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5761 && !(TREE_CODE (value) == STRING_CST
5762 && TREE_CODE (type) == ARRAY_TYPE
5763 && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
5764 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5765 TYPE_MAIN_VARIANT (type))))
5766 value = default_conversion (value);
5768 if (value == error_mark_node)
5769 constructor_erroneous = 1;
5770 else if (!TREE_CONSTANT (value))
5771 constructor_constant = 0;
5772 else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0
5773 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5774 || TREE_CODE (constructor_type) == UNION_TYPE)
5775 && DECL_BIT_FIELD (field) && TREE_CODE (value) != INTEGER_CST))
5776 constructor_simple = 0;
5778 if (require_constant_value && ! TREE_CONSTANT (value))
5780 error_init ("initializer element%s is not constant",
5782 value = error_mark_node;
5784 else if (require_constant_elements
5785 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
5787 error_init ("initializer element%s is not computable at load time",
5789 value = error_mark_node;
5792 /* If this element duplicates one on constructor_pending_elts,
5793 print a message and ignore it. Don't do this when we're
5794 processing elements taken off constructor_pending_elts,
5795 because we'd always get spurious errors. */
5798 if (TREE_CODE (constructor_type) == RECORD_TYPE
5799 || TREE_CODE (constructor_type) == UNION_TYPE)
5801 if (purpose_member (field, constructor_pending_elts))
5803 error_init ("duplicate initializer%s", " for `%s'", NULL);
5807 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5810 for (tail = constructor_pending_elts; tail;
5811 tail = TREE_CHAIN (tail))
5812 if (TREE_PURPOSE (tail) != 0
5813 && TREE_CODE (TREE_PURPOSE (tail)) == INTEGER_CST
5814 && tree_int_cst_equal (TREE_PURPOSE (tail), constructor_index))
5819 error_init ("duplicate initializer%s", " for `%s'", NULL);
5825 /* If this element doesn't come next in sequence,
5826 put it on constructor_pending_elts. */
5827 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5828 && !tree_int_cst_equal (field, constructor_unfilled_index))
5831 /* The copy_node is needed in case field is actually
5832 constructor_index, which is modified in place. */
5833 constructor_pending_elts
5834 = tree_cons (copy_node (field),
5835 digest_init (type, value, require_constant_value,
5836 require_constant_elements),
5837 constructor_pending_elts);
5839 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5840 && field != constructor_unfilled_fields)
5842 /* We do this for records but not for unions. In a union,
5843 no matter which field is specified, it can be initialized
5844 right away since it starts at the beginning of the union. */
5846 constructor_pending_elts
5848 digest_init (type, value, require_constant_value,
5849 require_constant_elements),
5850 constructor_pending_elts);
5854 /* Otherwise, output this element either to
5855 constructor_elements or to the assembler file. */
5859 if (! constructor_incremental)
5861 if (field && TREE_CODE (field) == INTEGER_CST)
5862 field = copy_node (field);
5863 constructor_elements
5864 = tree_cons (field, digest_init (type, value,
5865 require_constant_value,
5866 require_constant_elements),
5867 constructor_elements);
5871 /* Structure elements may require alignment.
5872 Do this, if necessary. */
5873 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5875 /* Advance to offset of this element. */
5876 if (! tree_int_cst_equal (constructor_bit_index,
5877 DECL_FIELD_BITPOS (field)))
5879 int next = (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field))
5881 int here = (TREE_INT_CST_LOW (constructor_bit_index)
5884 assemble_zeros (next - here);
5887 output_constant (digest_init (type, value,
5888 require_constant_value,
5889 require_constant_elements),
5890 int_size_in_bytes (type));
5892 /* For a record or union,
5893 keep track of end position of last field. */
5894 if (TREE_CODE (constructor_type) == RECORD_TYPE
5895 || TREE_CODE (constructor_type) == UNION_TYPE)
5897 tree temp = size_binop (PLUS_EXPR, DECL_FIELD_BITPOS (field),
5899 TREE_INT_CST_LOW (constructor_bit_index)
5900 = TREE_INT_CST_LOW (temp);
5901 TREE_INT_CST_HIGH (constructor_bit_index)
5902 = TREE_INT_CST_HIGH (temp);
5907 /* Advance the variable that indicates sequential elements output. */
5908 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5910 tree tem = size_binop (PLUS_EXPR, constructor_unfilled_index,
5912 TREE_INT_CST_LOW (constructor_unfilled_index)
5913 = TREE_INT_CST_LOW (tem);
5914 TREE_INT_CST_HIGH (constructor_unfilled_index)
5915 = TREE_INT_CST_HIGH (tem);
5917 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5918 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5919 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5920 constructor_unfilled_fields = 0;
5922 /* Now output any pending elements which have become next. */
5924 output_pending_init_elements (0);
5928 /* Output any pending elements which have become next.
5929 As we output elements, constructor_unfilled_{fields,index}
5930 advances, which may cause other elements to become next;
5931 if so, they too are output.
5933 If ALL is 0, we return when there are
5934 no more pending elements to output now.
5936 If ALL is 1, we output space as necessary so that
5937 we can output all the pending elements. */
5940 output_pending_init_elements (all)
5948 /* Look thru the whole pending list.
5949 If we find an element that should be output now,
5950 output it. Otherwise, set NEXT to the element
5951 that comes first among those still pending. */
5954 for (tail = constructor_pending_elts; tail;
5955 tail = TREE_CHAIN (tail))
5957 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5959 if (tree_int_cst_equal (TREE_PURPOSE (tail),
5960 constructor_unfilled_index))
5962 output_init_element (TREE_VALUE (tail),
5963 TREE_TYPE (constructor_type),
5964 constructor_unfilled_index, 0);
5967 else if (tree_int_cst_lt (TREE_PURPOSE (tail),
5968 constructor_unfilled_index))
5971 || tree_int_cst_lt (TREE_PURPOSE (tail), next))
5972 next = TREE_PURPOSE (tail);
5974 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5975 || TREE_CODE (constructor_type) == UNION_TYPE)
5977 if (TREE_PURPOSE (tail) == constructor_unfilled_fields)
5979 output_init_element (TREE_VALUE (tail),
5980 TREE_TYPE (constructor_unfilled_fields),
5981 constructor_unfilled_fields,
5985 else if (constructor_unfilled_fields == 0
5986 || tree_int_cst_lt (DECL_FIELD_BITPOS (TREE_PURPOSE (tail)),
5987 DECL_FIELD_BITPOS (constructor_unfilled_fields)))
5990 || tree_int_cst_lt (DECL_FIELD_BITPOS (TREE_PURPOSE (tail)),
5991 DECL_FIELD_BITPOS (next)))
5992 next = TREE_PURPOSE (tail);
5996 /* Ordinarily return, but not if we want to output all
5997 and there are elements left. */
5998 if (! (all && next != 0))
6001 /* Generate space up to the position of NEXT. */
6002 if (constructor_incremental)
6005 tree nextpos_tree = size_int (0);
6007 if (TREE_CODE (constructor_type) == RECORD_TYPE
6008 || TREE_CODE (constructor_type) == UNION_TYPE)
6010 /* Find the last field written out, if any. */
6011 for (tail = TYPE_FIELDS (constructor_type); tail;
6012 tail = TREE_CHAIN (tail))
6013 if (TREE_CHAIN (tail) == constructor_unfilled_fields)
6017 /* Find the offset of the end of that field. */
6018 filled = size_binop (CEIL_DIV_EXPR,
6019 size_binop (PLUS_EXPR,
6020 DECL_FIELD_BITPOS (tail),
6022 size_int (BITS_PER_UNIT));
6024 filled = size_int (0);
6026 nextpos_tree = size_binop (CEIL_DIV_EXPR,
6027 DECL_FIELD_BITPOS (next),
6028 size_int (BITS_PER_UNIT));
6030 TREE_INT_CST_HIGH (constructor_bit_index)
6031 = TREE_INT_CST_HIGH (DECL_FIELD_BITPOS (next));
6032 TREE_INT_CST_LOW (constructor_bit_index)
6033 = TREE_INT_CST_LOW (DECL_FIELD_BITPOS (next));
6034 constructor_unfilled_fields = next;
6036 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6038 filled = size_binop (MULT_EXPR, constructor_unfilled_index,
6039 size_in_bytes (TREE_TYPE (constructor_type)));
6041 = size_binop (MULT_EXPR, next,
6042 size_in_bytes (TREE_TYPE (constructor_type)));
6043 TREE_INT_CST_LOW (constructor_unfilled_index)
6044 = TREE_INT_CST_LOW (next);
6045 TREE_INT_CST_HIGH (constructor_unfilled_index)
6046 = TREE_INT_CST_HIGH (next);
6053 int nextpos = TREE_INT_CST_LOW (nextpos_tree);
6055 assemble_zeros (nextpos - TREE_INT_CST_LOW (filled));
6060 /* If it's not incremental, just skip over the gap,
6061 so that after jumping to retry we will output the next
6062 successive element. */
6063 if (TREE_CODE (constructor_type) == RECORD_TYPE
6064 || TREE_CODE (constructor_type) == UNION_TYPE)
6065 constructor_unfilled_fields = next;
6066 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6068 TREE_INT_CST_LOW (constructor_unfilled_index)
6069 = TREE_INT_CST_LOW (next);
6070 TREE_INT_CST_HIGH (constructor_unfilled_index)
6071 = TREE_INT_CST_HIGH (next);
6078 /* Add one non-braced element to the current constructor level.
6079 This adjusts the current position within the constructor's type.
6080 This may also start or terminate implicit levels
6081 to handle a partly-braced initializer.
6083 Once this has found the correct level for the new element,
6084 it calls output_init_element.
6086 Note: if we are incrementally outputting this constructor,
6087 this function may be called with a null argument
6088 representing a sub-constructor that was already incrementally output.
6089 When that happens, we output nothing, but we do the bookkeeping
6090 to skip past that element of the current constructor. */
6093 process_init_element (value)
6096 tree orig_value = value;
6097 int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
6099 /* Handle superfluous braces around string cst as in
6100 char x[] = {"foo"}; */
6103 && TREE_CODE (constructor_type) == ARRAY_TYPE
6104 && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
6105 && integer_zerop (constructor_unfilled_index))
6107 constructor_stack->replacement_value = value;
6111 if (constructor_stack->replacement_value != 0)
6113 error_init ("excess elements in struct initializer%s",
6114 " after `%s'", NULL_PTR);
6118 /* Ignore elements of a brace group if it is entirely superfluous
6119 and has already been diagnosed. */
6120 if (constructor_type == 0)
6123 /* If we've exhausted any levels that didn't have braces,
6125 while (constructor_stack->implicit)
6127 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6128 || TREE_CODE (constructor_type) == UNION_TYPE)
6129 && constructor_fields == 0)
6130 process_init_element (pop_init_level (1));
6131 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6132 && tree_int_cst_lt (constructor_max_index, constructor_index))
6133 process_init_element (pop_init_level (1));
6140 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6143 enum tree_code fieldcode;
6145 if (constructor_fields == 0)
6147 pedwarn_init ("excess elements in struct initializer%s",
6148 " after `%s'", NULL_PTR);
6152 fieldtype = TREE_TYPE (constructor_fields);
6153 if (fieldtype != error_mark_node)
6154 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6155 fieldcode = TREE_CODE (fieldtype);
6157 /* Accept a string constant to initialize a subarray. */
6159 && fieldcode == ARRAY_TYPE
6160 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6163 /* Otherwise, if we have come to a subaggregate,
6164 and we don't have an element of its type, push into it. */
6165 else if (value != 0 && !constructor_no_implicit
6166 && value != error_mark_node
6167 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6168 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6169 || fieldcode == UNION_TYPE))
6171 push_init_level (1);
6177 push_member_name (constructor_fields);
6178 output_init_element (value, fieldtype, constructor_fields, 1);
6179 RESTORE_SPELLING_DEPTH (constructor_depth);
6182 /* Do the bookkeeping for an element that was
6183 directly output as a constructor. */
6185 /* For a record, keep track of end position of last field. */
6186 tree temp = size_binop (PLUS_EXPR,
6187 DECL_FIELD_BITPOS (constructor_fields),
6188 DECL_SIZE (constructor_fields));
6189 TREE_INT_CST_LOW (constructor_bit_index)
6190 = TREE_INT_CST_LOW (temp);
6191 TREE_INT_CST_HIGH (constructor_bit_index)
6192 = TREE_INT_CST_HIGH (temp);
6194 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6197 constructor_fields = TREE_CHAIN (constructor_fields);
6198 /* Skip any nameless bit fields atthe beginning. */
6199 while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
6200 && DECL_NAME (constructor_fields) == 0)
6201 constructor_fields = TREE_CHAIN (constructor_fields);
6204 if (TREE_CODE (constructor_type) == UNION_TYPE)
6207 enum tree_code fieldcode;
6209 if (constructor_fields == 0)
6211 pedwarn_init ("excess elements in union initializer%s",
6212 " after `%s'", NULL_PTR);
6216 fieldtype = TREE_TYPE (constructor_fields);
6217 if (fieldtype != error_mark_node)
6218 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6219 fieldcode = TREE_CODE (fieldtype);
6221 /* Accept a string constant to initialize a subarray. */
6223 && fieldcode == ARRAY_TYPE
6224 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6227 /* Otherwise, if we have come to a subaggregate,
6228 and we don't have an element of its type, push into it. */
6229 else if (value != 0 && !constructor_no_implicit
6230 && value != error_mark_node
6231 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6232 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6233 || fieldcode == UNION_TYPE))
6235 push_init_level (1);
6241 push_member_name (constructor_fields);
6242 output_init_element (value, fieldtype, constructor_fields, 1);
6243 RESTORE_SPELLING_DEPTH (constructor_depth);
6246 /* Do the bookkeeping for an element that was
6247 directly output as a constructor. */
6249 TREE_INT_CST_LOW (constructor_bit_index)
6250 = TREE_INT_CST_LOW (DECL_SIZE (constructor_fields));
6251 TREE_INT_CST_HIGH (constructor_bit_index)
6252 = TREE_INT_CST_HIGH (DECL_SIZE (constructor_fields));
6254 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6257 constructor_fields = 0;
6260 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6262 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6263 enum tree_code eltcode = TREE_CODE (elttype);
6265 /* Accept a string constant to initialize a subarray. */
6267 && eltcode == ARRAY_TYPE
6268 && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
6271 /* Otherwise, if we have come to a subaggregate,
6272 and we don't have an element of its type, push into it. */
6273 else if (value != 0 && !constructor_no_implicit
6274 && value != error_mark_node
6275 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
6276 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6277 || eltcode == UNION_TYPE))
6279 push_init_level (1);
6283 if (constructor_max_index != 0
6284 && tree_int_cst_lt (constructor_max_index, constructor_index))
6286 pedwarn_init ("excess elements in array initializer%s",
6287 " after `%s'", NULL_PTR);
6291 /* In the case of [LO .. HI] = VALUE, only evaluate VALUE once. */
6292 if (constructor_range_end)
6293 value = save_expr (value);
6295 /* Now output the actual element.
6296 Ordinarily, output once.
6297 If there is a range, repeat it till we advance past the range. */
6304 push_array_bounds (TREE_INT_CST_LOW (constructor_index));
6305 output_init_element (value, elttype, constructor_index, 1);
6306 RESTORE_SPELLING_DEPTH (constructor_depth);
6309 tem = size_binop (PLUS_EXPR, constructor_index,
6311 TREE_INT_CST_LOW (constructor_index)
6312 = TREE_INT_CST_LOW (tem);
6313 TREE_INT_CST_HIGH (constructor_index)
6314 = TREE_INT_CST_HIGH (tem);
6317 /* If we are doing the bookkeeping for an element that was
6318 directly output as a constructor,
6319 we must update constructor_unfilled_index. */
6321 TREE_INT_CST_LOW (constructor_unfilled_index)
6322 = TREE_INT_CST_LOW (constructor_index);
6323 TREE_INT_CST_HIGH (constructor_unfilled_index)
6324 = TREE_INT_CST_HIGH (constructor_index);
6327 while (! (constructor_range_end == 0
6328 || tree_int_cst_lt (constructor_range_end,
6329 constructor_index)));
6334 /* Handle the sole element allowed in a braced initializer
6335 for a scalar variable. */
6336 if (constructor_fields == 0)
6338 pedwarn_init ("excess elements in scalar initializer%s",
6339 " after `%s'", NULL_PTR);
6344 output_init_element (value, constructor_type, NULL_TREE, 1);
6345 constructor_fields = 0;
6349 /* If the (lexically) previous elments are not now saved,
6350 we can discard the storage for them. */
6351 if (constructor_incremental && constructor_pending_elts == 0 && value != 0
6352 && constructor_stack == 0)
6356 /* Expand an ASM statement with operands, handling output operands
6357 that are not variables or INDIRECT_REFS by transforming such
6358 cases into cases that expand_asm_operands can handle.
6360 Arguments are same as for expand_asm_operands. */
6363 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
6364 tree string, outputs, inputs, clobbers;
6369 int noutputs = list_length (outputs);
6371 /* o[I] is the place that output number I should be written. */
6372 register tree *o = (tree *) alloca (noutputs * sizeof (tree));
6375 if (TREE_CODE (string) == ADDR_EXPR)
6376 string = TREE_OPERAND (string, 0);
6377 if (TREE_CODE (string) != STRING_CST)
6379 error ("asm template is not a string constant");
6383 /* Record the contents of OUTPUTS before it is modified. */
6384 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6385 o[i] = TREE_VALUE (tail);
6387 /* Perform default conversions on array and function inputs. */
6388 /* Don't do this for other types--
6389 it would screw up operands expected to be in memory. */
6390 for (i = 0, tail = inputs; tail; tail = TREE_CHAIN (tail), i++)
6391 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == ARRAY_TYPE
6392 || TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == FUNCTION_TYPE)
6393 TREE_VALUE (tail) = default_conversion (TREE_VALUE (tail));
6395 /* Generate the ASM_OPERANDS insn;
6396 store into the TREE_VALUEs of OUTPUTS some trees for
6397 where the values were actually stored. */
6398 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
6400 /* Copy all the intermediate outputs into the specified outputs. */
6401 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6403 if (o[i] != TREE_VALUE (tail))
6405 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
6409 /* Detect modification of read-only values.
6410 (Otherwise done by build_modify_expr.) */
6413 tree type = TREE_TYPE (o[i]);
6414 if (TYPE_READONLY (type)
6415 || ((TREE_CODE (type) == RECORD_TYPE
6416 || TREE_CODE (type) == UNION_TYPE)
6417 && C_TYPE_FIELDS_READONLY (type)))
6418 readonly_warning (o[i], "modification by `asm'");
6422 /* Those MODIFY_EXPRs could do autoincrements. */
6426 /* Expand a C `return' statement.
6427 RETVAL is the expression for what to return,
6428 or a null pointer for `return;' with no value. */
6431 c_expand_return (retval)
6434 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6436 if (TREE_THIS_VOLATILE (current_function_decl))
6437 warning ("function declared `noreturn' has a `return' statement");
6441 current_function_returns_null = 1;
6442 if (warn_return_type && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6443 warning ("`return' with no value, in function returning non-void");
6444 expand_null_return ();
6446 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6448 current_function_returns_null = 1;
6449 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6450 pedwarn ("`return' with a value, in function returning void");
6451 expand_return (retval);
6455 tree t = convert_for_assignment (valtype, retval, "return",
6456 NULL_TREE, NULL_TREE, 0);
6457 tree res = DECL_RESULT (current_function_decl);
6460 if (t == error_mark_node)
6463 inner = t = convert (TREE_TYPE (res), t);
6465 /* Strip any conversions, additions, and subtractions, and see if
6466 we are returning the address of a local variable. Warn if so. */
6469 switch (TREE_CODE (inner))
6471 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6473 inner = TREE_OPERAND (inner, 0);
6477 /* If the second operand of the MINUS_EXPR has a pointer
6478 type (or is converted from it), this may be valid, so
6479 don't give a warning. */
6481 tree op1 = TREE_OPERAND (inner, 1);
6483 while (! POINTER_TYPE_P (TREE_TYPE (op1))
6484 && (TREE_CODE (op1) == NOP_EXPR
6485 || TREE_CODE (op1) == NON_LVALUE_EXPR
6486 || TREE_CODE (op1) == CONVERT_EXPR))
6487 op1 = TREE_OPERAND (op1, 0);
6489 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6492 inner = TREE_OPERAND (inner, 0);
6497 inner = TREE_OPERAND (inner, 0);
6499 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
6500 inner = TREE_OPERAND (inner, 0);
6502 if (TREE_CODE (inner) == VAR_DECL
6503 && ! DECL_EXTERNAL (inner)
6504 && ! TREE_STATIC (inner)
6505 && DECL_CONTEXT (inner) == current_function_decl)
6506 warning ("function returns address of local variable");
6513 t = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
6514 TREE_SIDE_EFFECTS (t) = 1;
6516 current_function_returns_value = 1;
6520 /* Start a C switch statement, testing expression EXP.
6521 Return EXP if it is valid, an error node otherwise. */
6524 c_expand_start_case (exp)
6527 register enum tree_code code = TREE_CODE (TREE_TYPE (exp));
6528 tree type = TREE_TYPE (exp);
6530 if (code != INTEGER_TYPE && code != ENUMERAL_TYPE && code != ERROR_MARK)
6532 error ("switch quantity not an integer");
6533 exp = error_mark_node;
6538 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6540 if (warn_traditional
6541 && (type == long_integer_type_node
6542 || type == long_unsigned_type_node))
6543 pedwarn ("`long' switch expression not converted to `int' in ANSI C");
6545 exp = default_conversion (exp);
6546 type = TREE_TYPE (exp);
6547 index = get_unwidened (exp, NULL_TREE);
6548 /* We can't strip a conversion from a signed type to an unsigned,
6549 because if we did, int_fits_type_p would do the wrong thing
6550 when checking case values for being in range,
6551 and it's too hard to do the right thing. */
6552 if (TREE_UNSIGNED (TREE_TYPE (exp))
6553 == TREE_UNSIGNED (TREE_TYPE (index)))
6557 expand_start_case (1, exp, type, "switch statement");