1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 /* This file is part of the C front end.
24 It contains routines to build C expressions given their operands,
25 including computing the types of the result, C-specific error checks,
26 and some optimization.
28 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
29 and to process initializations in declarations (since they work
30 like a strange sort of assignment). */
46 /* Nonzero if we've already printed a "missing braces around initializer"
47 message within this initializer. */
48 static int missing_braces_mentioned;
50 /* 1 if we explained undeclared var errors. */
51 static int undeclared_variable_notice;
53 static tree qualify_type PARAMS ((tree, tree));
54 static int comp_target_types PARAMS ((tree, tree));
55 static int function_types_compatible_p PARAMS ((tree, tree));
56 static int type_lists_compatible_p PARAMS ((tree, tree));
57 static tree decl_constant_value PARAMS ((tree));
58 static tree lookup_field PARAMS ((tree, tree, tree *));
59 static tree convert_arguments PARAMS ((tree, tree, tree, tree));
60 static tree pointer_int_sum PARAMS ((enum tree_code, tree, tree));
61 static tree pointer_diff PARAMS ((tree, tree));
62 static tree unary_complex_lvalue PARAMS ((enum tree_code, tree));
63 static void pedantic_lvalue_warning PARAMS ((enum tree_code));
64 static tree internal_build_compound_expr PARAMS ((tree, int));
65 static tree convert_for_assignment PARAMS ((tree, tree, const char *,
67 static void warn_for_assignment PARAMS ((const char *, const char *,
69 static tree valid_compound_expr_initializer PARAMS ((tree, tree));
70 static void push_string PARAMS ((const char *));
71 static void push_member_name PARAMS ((tree));
72 static void push_array_bounds PARAMS ((int));
73 static int spelling_length PARAMS ((void));
74 static char *print_spelling PARAMS ((char *));
75 static void warning_init PARAMS ((const char *));
76 static tree digest_init PARAMS ((tree, tree, int, int));
77 static void check_init_type_bitfields PARAMS ((tree));
78 static void output_init_element PARAMS ((tree, tree, tree, int));
79 static void output_pending_init_elements PARAMS ((int));
80 static void add_pending_init PARAMS ((tree, tree));
81 static int pending_init_member PARAMS ((tree));
83 /* Do `exp = require_complete_type (exp);' to make sure exp
84 does not have an incomplete type. (That includes void types.) */
87 require_complete_type (value)
90 tree type = TREE_TYPE (value);
92 if (TREE_CODE (value) == ERROR_MARK)
93 return error_mark_node;
95 /* First, detect a valid value with a complete type. */
96 if (COMPLETE_TYPE_P (type))
99 incomplete_type_error (value, type);
100 return error_mark_node;
103 /* Print an error message for invalid use of an incomplete type.
104 VALUE is the expression that was used (or 0 if that isn't known)
105 and TYPE is the type that was invalid. */
108 incomplete_type_error (value, type)
112 const char *type_code_string;
114 /* Avoid duplicate error message. */
115 if (TREE_CODE (type) == ERROR_MARK)
118 if (value != 0 && (TREE_CODE (value) == VAR_DECL
119 || TREE_CODE (value) == PARM_DECL))
120 error ("`%s' has an incomplete type",
121 IDENTIFIER_POINTER (DECL_NAME (value)));
125 /* We must print an error message. Be clever about what it says. */
127 switch (TREE_CODE (type))
130 type_code_string = "struct";
134 type_code_string = "union";
138 type_code_string = "enum";
142 error ("invalid use of void expression");
146 if (TYPE_DOMAIN (type))
148 type = TREE_TYPE (type);
151 error ("invalid use of array with unspecified bounds");
158 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
159 error ("invalid use of undefined type `%s %s'",
160 type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
162 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
163 error ("invalid use of incomplete typedef `%s'",
164 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
168 /* Return a variant of TYPE which has all the type qualifiers of LIKE
169 as well as those of TYPE. */
172 qualify_type (type, like)
175 return c_build_qualified_type (type,
176 TYPE_QUALS (type) | TYPE_QUALS (like));
179 /* Return the common type of two types.
180 We assume that comptypes has already been done and returned 1;
181 if that isn't so, this may crash. In particular, we assume that qualifiers
184 This is the type for the result of most arithmetic operations
185 if the operands have the given two types. */
191 register enum tree_code code1;
192 register enum tree_code code2;
195 /* Save time if the two types are the same. */
197 if (t1 == t2) return t1;
199 /* If one type is nonsense, use the other. */
200 if (t1 == error_mark_node)
202 if (t2 == error_mark_node)
205 /* Merge the attributes. */
206 attributes = merge_machine_type_attributes (t1, t2);
208 /* Treat an enum type as the unsigned integer type of the same width. */
210 if (TREE_CODE (t1) == ENUMERAL_TYPE)
211 t1 = type_for_size (TYPE_PRECISION (t1), 1);
212 if (TREE_CODE (t2) == ENUMERAL_TYPE)
213 t2 = type_for_size (TYPE_PRECISION (t2), 1);
215 code1 = TREE_CODE (t1);
216 code2 = TREE_CODE (t2);
218 /* If one type is complex, form the common type of the non-complex
219 components, then make that complex. Use T1 or T2 if it is the
221 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
223 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
224 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
225 tree subtype = common_type (subtype1, subtype2);
227 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
228 return build_type_attribute_variant (t1, attributes);
229 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
230 return build_type_attribute_variant (t2, attributes);
232 return build_type_attribute_variant (build_complex_type (subtype),
240 /* If only one is real, use it as the result. */
242 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
243 return build_type_attribute_variant (t1, attributes);
245 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
246 return build_type_attribute_variant (t2, attributes);
248 /* Both real or both integers; use the one with greater precision. */
250 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
251 return build_type_attribute_variant (t1, attributes);
252 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
253 return build_type_attribute_variant (t2, attributes);
255 /* Same precision. Prefer longs to ints even when same size. */
257 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
258 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
259 return build_type_attribute_variant (long_unsigned_type_node,
262 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
263 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
265 /* But preserve unsignedness from the other type,
266 since long cannot hold all the values of an unsigned int. */
267 if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
268 t1 = long_unsigned_type_node;
270 t1 = long_integer_type_node;
271 return build_type_attribute_variant (t1, attributes);
274 /* Likewise, prefer long double to double even if same size. */
275 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
276 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
277 return build_type_attribute_variant (long_double_type_node,
280 /* Otherwise prefer the unsigned one. */
282 if (TREE_UNSIGNED (t1))
283 return build_type_attribute_variant (t1, attributes);
285 return build_type_attribute_variant (t2, attributes);
288 /* For two pointers, do this recursively on the target type,
289 and combine the qualifiers of the two types' targets. */
290 /* This code was turned off; I don't know why.
291 But ANSI C specifies doing this with the qualifiers.
292 So I turned it on again. */
294 tree pointed_to_1 = TREE_TYPE (t1);
295 tree pointed_to_2 = TREE_TYPE (t2);
296 tree target = common_type (TYPE_MAIN_VARIANT (pointed_to_1),
297 TYPE_MAIN_VARIANT (pointed_to_2));
298 t1 = build_pointer_type (c_build_qualified_type
300 TYPE_QUALS (pointed_to_1) |
301 TYPE_QUALS (pointed_to_2)));
302 return build_type_attribute_variant (t1, attributes);
305 t1 = build_pointer_type (common_type (TREE_TYPE (t1), TREE_TYPE (t2)));
306 return build_type_attribute_variant (t1, attributes);
311 tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
312 /* Save space: see if the result is identical to one of the args. */
313 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
314 return build_type_attribute_variant (t1, attributes);
315 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
316 return build_type_attribute_variant (t2, attributes);
317 /* Merge the element types, and have a size if either arg has one. */
318 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
319 return build_type_attribute_variant (t1, attributes);
323 /* Function types: prefer the one that specified arg types.
324 If both do, merge the arg types. Also merge the return types. */
326 tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
327 tree p1 = TYPE_ARG_TYPES (t1);
328 tree p2 = TYPE_ARG_TYPES (t2);
333 /* Save space: see if the result is identical to one of the args. */
334 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
335 return build_type_attribute_variant (t1, attributes);
336 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
337 return build_type_attribute_variant (t2, attributes);
339 /* Simple way if one arg fails to specify argument types. */
340 if (TYPE_ARG_TYPES (t1) == 0)
342 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
343 return build_type_attribute_variant (t1, attributes);
345 if (TYPE_ARG_TYPES (t2) == 0)
347 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
348 return build_type_attribute_variant (t1, attributes);
351 /* If both args specify argument types, we must merge the two
352 lists, argument by argument. */
354 len = list_length (p1);
357 for (i = 0; i < len; i++)
358 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
363 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
365 /* A null type means arg type is not specified.
366 Take whatever the other function type has. */
367 if (TREE_VALUE (p1) == 0)
369 TREE_VALUE (n) = TREE_VALUE (p2);
372 if (TREE_VALUE (p2) == 0)
374 TREE_VALUE (n) = TREE_VALUE (p1);
378 /* Given wait (union {union wait *u; int *i} *)
379 and wait (union wait *),
380 prefer union wait * as type of parm. */
381 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
382 && TREE_VALUE (p1) != TREE_VALUE (p2))
385 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
386 memb; memb = TREE_CHAIN (memb))
387 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
389 TREE_VALUE (n) = TREE_VALUE (p2);
391 pedwarn ("function types not truly compatible in ISO C");
395 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
396 && TREE_VALUE (p2) != TREE_VALUE (p1))
399 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
400 memb; memb = TREE_CHAIN (memb))
401 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
403 TREE_VALUE (n) = TREE_VALUE (p1);
405 pedwarn ("function types not truly compatible in ISO C");
409 TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
413 t1 = build_function_type (valtype, newargs);
414 /* ... falls through ... */
418 return build_type_attribute_variant (t1, attributes);
423 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
424 or various other operations. Return 2 if they are compatible
425 but a warning may be needed if you use them together. */
428 comptypes (type1, type2)
431 register tree t1 = type1;
432 register tree t2 = type2;
435 /* Suppress errors caused by previously reported errors. */
437 if (t1 == t2 || !t1 || !t2
438 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
441 /* If either type is the internal version of sizetype, return the
443 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
444 && TYPE_DOMAIN (t1) != 0)
445 t1 = TYPE_DOMAIN (t1);
447 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
448 && TYPE_DOMAIN (t2) != 0)
449 t2 = TYPE_DOMAIN (t2);
451 /* Treat an enum type as the integer type of the same width and
454 if (TREE_CODE (t1) == ENUMERAL_TYPE)
455 t1 = type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
456 if (TREE_CODE (t2) == ENUMERAL_TYPE)
457 t2 = type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
462 /* Different classes of types can't be compatible. */
464 if (TREE_CODE (t1) != TREE_CODE (t2)) return 0;
466 /* Qualifiers must match. */
468 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
471 /* Allow for two different type nodes which have essentially the same
472 definition. Note that we already checked for equality of the type
473 qualifiers (just above). */
475 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
478 #ifndef COMP_TYPE_ATTRIBUTES
479 #define COMP_TYPE_ATTRIBUTES(t1,t2) 1
482 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
483 if (! (attrval = COMP_TYPE_ATTRIBUTES (t1, t2)))
486 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
489 switch (TREE_CODE (t1))
492 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
493 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
497 val = function_types_compatible_p (t1, t2);
502 tree d1 = TYPE_DOMAIN (t1);
503 tree d2 = TYPE_DOMAIN (t2);
506 /* Target types must match incl. qualifiers. */
507 if (TREE_TYPE (t1) != TREE_TYPE (t2)
508 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
511 /* Sizes must match unless one is missing or variable. */
512 if (d1 == 0 || d2 == 0 || d1 == d2
513 || TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
514 || TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
515 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST
516 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST)
519 if (! tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
520 || ! tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
527 if (maybe_objc_comptypes (t1, t2, 0) == 1)
534 return attrval == 2 && val == 1 ? 2 : val;
537 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
538 ignoring their qualifiers. */
541 comp_target_types (ttl, ttr)
546 /* Give maybe_objc_comptypes a crack at letting these types through. */
547 if ((val = maybe_objc_comptypes (ttl, ttr, 1)) >= 0)
550 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
551 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
553 if (val == 2 && pedantic)
554 pedwarn ("types are not quite compatible");
558 /* Subroutines of `comptypes'. */
560 /* Return 1 if two function types F1 and F2 are compatible.
561 If either type specifies no argument types,
562 the other must specify a fixed number of self-promoting arg types.
563 Otherwise, if one type specifies only the number of arguments,
564 the other must specify that number of self-promoting arg types.
565 Otherwise, the argument types must match. */
568 function_types_compatible_p (f1, f2)
572 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
576 if (!(TREE_TYPE (f1) == TREE_TYPE (f2)
577 || (val = comptypes (TREE_TYPE (f1), TREE_TYPE (f2)))))
580 args1 = TYPE_ARG_TYPES (f1);
581 args2 = TYPE_ARG_TYPES (f2);
583 /* An unspecified parmlist matches any specified parmlist
584 whose argument types don't need default promotions. */
588 if (!self_promoting_args_p (args2))
590 /* If one of these types comes from a non-prototype fn definition,
591 compare that with the other type's arglist.
592 If they don't match, ask for a warning (but no error). */
593 if (TYPE_ACTUAL_ARG_TYPES (f1)
594 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
600 if (!self_promoting_args_p (args1))
602 if (TYPE_ACTUAL_ARG_TYPES (f2)
603 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
608 /* Both types have argument lists: compare them and propagate results. */
609 val1 = type_lists_compatible_p (args1, args2);
610 return val1 != 1 ? val1 : val;
613 /* Check two lists of types for compatibility,
614 returning 0 for incompatible, 1 for compatible,
615 or 2 for compatible with warning. */
618 type_lists_compatible_p (args1, args2)
621 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
627 if (args1 == 0 && args2 == 0)
629 /* If one list is shorter than the other,
630 they fail to match. */
631 if (args1 == 0 || args2 == 0)
633 /* A null pointer instead of a type
634 means there is supposed to be an argument
635 but nothing is specified about what type it has.
636 So match anything that self-promotes. */
637 if (TREE_VALUE (args1) == 0)
639 if (simple_type_promotes_to (TREE_VALUE (args2)) != NULL_TREE)
642 else if (TREE_VALUE (args2) == 0)
644 if (simple_type_promotes_to (TREE_VALUE (args1)) != NULL_TREE)
647 else if (! (newval = comptypes (TREE_VALUE (args1), TREE_VALUE (args2))))
649 /* Allow wait (union {union wait *u; int *i} *)
650 and wait (union wait *) to be compatible. */
651 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
652 && (TYPE_NAME (TREE_VALUE (args1)) == 0
653 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
654 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
655 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
656 TYPE_SIZE (TREE_VALUE (args2))))
659 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
660 memb; memb = TREE_CHAIN (memb))
661 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
666 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
667 && (TYPE_NAME (TREE_VALUE (args2)) == 0
668 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
669 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
670 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
671 TYPE_SIZE (TREE_VALUE (args1))))
674 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
675 memb; memb = TREE_CHAIN (memb))
676 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
685 /* comptypes said ok, but record if it said to warn. */
689 args1 = TREE_CHAIN (args1);
690 args2 = TREE_CHAIN (args2);
694 /* Compute the value of the `sizeof' operator. */
700 enum tree_code code = TREE_CODE (type);
702 if (code == FUNCTION_TYPE)
704 if (pedantic || warn_pointer_arith)
705 pedwarn ("sizeof applied to a function type");
706 return size_one_node;
708 if (code == VOID_TYPE)
710 if (pedantic || warn_pointer_arith)
711 pedwarn ("sizeof applied to a void type");
712 return size_one_node;
715 if (code == ERROR_MARK)
716 return size_one_node;
718 if (!COMPLETE_TYPE_P (type))
720 error ("sizeof applied to an incomplete type");
721 return size_zero_node;
724 /* Convert in case a char is more than one unit. */
725 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
726 size_int (TYPE_PRECISION (char_type_node)
731 c_sizeof_nowarn (type)
734 enum tree_code code = TREE_CODE (type);
736 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
737 return size_one_node;
739 if (!COMPLETE_TYPE_P (type))
740 return size_zero_node;
742 /* Convert in case a char is more than one unit. */
743 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
744 size_int (TYPE_PRECISION (char_type_node)
748 /* Compute the size to increment a pointer by. */
751 c_size_in_bytes (type)
754 enum tree_code code = TREE_CODE (type);
756 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
757 return size_one_node;
759 if (!COMPLETE_OR_VOID_TYPE_P (type))
761 error ("arithmetic on pointer to an incomplete type");
762 return size_one_node;
765 /* Convert in case a char is more than one unit. */
766 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
767 size_int (TYPE_PRECISION (char_type_node)
771 /* Implement the __alignof keyword: Return the minimum required
772 alignment of TYPE, measured in bytes. */
778 enum tree_code code = TREE_CODE (type);
780 if (code == FUNCTION_TYPE)
781 return size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
783 if (code == VOID_TYPE || code == ERROR_MARK)
784 return size_one_node;
786 if (!COMPLETE_TYPE_P (type))
788 error ("__alignof__ applied to an incomplete type");
789 return size_zero_node;
792 return size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
795 /* Implement the __alignof keyword: Return the minimum required
796 alignment of EXPR, measured in bytes. For VAR_DECL's and
797 FIELD_DECL's return DECL_ALIGN (which can be set from an
798 "aligned" __attribute__ specification). */
801 c_alignof_expr (expr)
804 if (TREE_CODE (expr) == VAR_DECL)
805 return size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
807 if (TREE_CODE (expr) == COMPONENT_REF
808 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
810 error ("`__alignof' applied to a bit-field");
811 return size_one_node;
813 else if (TREE_CODE (expr) == COMPONENT_REF
814 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
815 return size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
817 if (TREE_CODE (expr) == INDIRECT_REF)
819 tree t = TREE_OPERAND (expr, 0);
821 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
823 while (TREE_CODE (t) == NOP_EXPR
824 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
828 t = TREE_OPERAND (t, 0);
829 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
830 if (thisalign > bestalign)
831 best = t, bestalign = thisalign;
833 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
836 return c_alignof (TREE_TYPE (expr));
839 /* Return either DECL or its known constant value (if it has one). */
842 decl_constant_value (decl)
845 if (/* Don't change a variable array bound or initial value to a constant
846 in a place where a variable is invalid. */
847 current_function_decl != 0
849 && ! TREE_THIS_VOLATILE (decl)
850 && TREE_READONLY (decl) && ! ITERATOR_P (decl)
851 && DECL_INITIAL (decl) != 0
852 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
853 /* This is invalid if initial value is not constant.
854 If it has either a function call, a memory reference,
855 or a variable, then re-evaluating it could give different results. */
856 && TREE_CONSTANT (DECL_INITIAL (decl))
857 /* Check for cases where this is sub-optimal, even though valid. */
858 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR
859 && DECL_MODE (decl) != BLKmode)
860 return DECL_INITIAL (decl);
864 /* Perform default promotions for C data used in expressions.
865 Arrays and functions are converted to pointers;
866 enumeral types or short or char, to int.
867 In addition, manifest constants symbols are replaced by their values. */
870 default_conversion (exp)
873 register tree type = TREE_TYPE (exp);
874 register enum tree_code code = TREE_CODE (type);
876 /* Constants can be used directly unless they're not loadable. */
877 if (TREE_CODE (exp) == CONST_DECL)
878 exp = DECL_INITIAL (exp);
880 /* Replace a nonvolatile const static variable with its value unless
881 it is an array, in which case we must be sure that taking the
882 address of the array produces consistent results. */
883 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
885 exp = decl_constant_value (exp);
886 type = TREE_TYPE (exp);
889 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
892 Do not use STRIP_NOPS here! It will remove conversions from pointer
893 to integer and cause infinite recursion. */
894 while (TREE_CODE (exp) == NON_LVALUE_EXPR
895 || (TREE_CODE (exp) == NOP_EXPR
896 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
897 exp = TREE_OPERAND (exp, 0);
899 /* Normally convert enums to int,
900 but convert wide enums to something wider. */
901 if (code == ENUMERAL_TYPE)
903 type = type_for_size (MAX (TYPE_PRECISION (type),
904 TYPE_PRECISION (integer_type_node)),
906 || (TYPE_PRECISION (type)
907 >= TYPE_PRECISION (integer_type_node)))
908 && TREE_UNSIGNED (type)));
910 return convert (type, exp);
913 if (TREE_CODE (exp) == COMPONENT_REF
914 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
915 /* If it's thinner than an int, promote it like a
916 C_PROMOTING_INTEGER_TYPE_P, otherwise leave it alone. */
917 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
918 TYPE_PRECISION (integer_type_node)))
919 return convert (flag_traditional && TREE_UNSIGNED (type)
920 ? unsigned_type_node : integer_type_node,
923 if (C_PROMOTING_INTEGER_TYPE_P (type))
925 /* Traditionally, unsignedness is preserved in default promotions.
926 Also preserve unsignedness if not really getting any wider. */
927 if (TREE_UNSIGNED (type)
929 || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
930 return convert (unsigned_type_node, exp);
932 return convert (integer_type_node, exp);
935 if (flag_traditional && !flag_allow_single_precision
936 && TYPE_MAIN_VARIANT (type) == float_type_node)
937 return convert (double_type_node, exp);
939 if (code == VOID_TYPE)
941 error ("void value not ignored as it ought to be");
942 return error_mark_node;
944 if (code == FUNCTION_TYPE)
946 return build_unary_op (ADDR_EXPR, exp, 0);
948 if (code == ARRAY_TYPE)
951 tree restype = TREE_TYPE (type);
956 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp))
958 constp = TREE_READONLY (exp);
959 volatilep = TREE_THIS_VOLATILE (exp);
962 if (TYPE_QUALS (type) || constp || volatilep)
964 = c_build_qualified_type (restype,
966 | (constp * TYPE_QUAL_CONST)
967 | (volatilep * TYPE_QUAL_VOLATILE));
969 if (TREE_CODE (exp) == INDIRECT_REF)
970 return convert (TYPE_POINTER_TO (restype),
971 TREE_OPERAND (exp, 0));
973 if (TREE_CODE (exp) == COMPOUND_EXPR)
975 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
976 return build (COMPOUND_EXPR, TREE_TYPE (op1),
977 TREE_OPERAND (exp, 0), op1);
981 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
983 error ("invalid use of non-lvalue array");
984 return error_mark_node;
987 ptrtype = build_pointer_type (restype);
989 if (TREE_CODE (exp) == VAR_DECL)
991 /* ??? This is not really quite correct
992 in that the type of the operand of ADDR_EXPR
993 is not the target type of the type of the ADDR_EXPR itself.
994 Question is, can this lossage be avoided? */
995 adr = build1 (ADDR_EXPR, ptrtype, exp);
996 if (mark_addressable (exp) == 0)
997 return error_mark_node;
998 TREE_CONSTANT (adr) = staticp (exp);
999 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1002 /* This way is better for a COMPONENT_REF since it can
1003 simplify the offset for a component. */
1004 adr = build_unary_op (ADDR_EXPR, exp, 1);
1005 return convert (ptrtype, adr);
1010 /* Look up component name in the structure type definition.
1012 If this component name is found indirectly within an anonymous union,
1013 store in *INDIRECT the component which directly contains
1014 that anonymous union. Otherwise, set *INDIRECT to 0. */
1017 lookup_field (type, component, indirect)
1018 tree type, component;
1023 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1024 to the field elements. Use a binary search on this array to quickly
1025 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1026 will always be set for structures which have many elements. */
1028 if (TYPE_LANG_SPECIFIC (type))
1031 tree *field_array = &TYPE_LANG_SPECIFIC (type)->elts[0];
1033 field = TYPE_FIELDS (type);
1035 top = TYPE_LANG_SPECIFIC (type)->len;
1036 while (top - bot > 1)
1038 half = (top - bot + 1) >> 1;
1039 field = field_array[bot+half];
1041 if (DECL_NAME (field) == NULL_TREE)
1043 /* Step through all anon unions in linear fashion. */
1044 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1046 tree anon = 0, junk;
1048 field = field_array[bot++];
1049 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1050 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1051 anon = lookup_field (TREE_TYPE (field), component, &junk);
1053 if (anon != NULL_TREE)
1060 /* Entire record is only anon unions. */
1064 /* Restart the binary search, with new lower bound. */
1068 if (DECL_NAME (field) == component)
1070 if (DECL_NAME (field) < component)
1076 if (DECL_NAME (field_array[bot]) == component)
1077 field = field_array[bot];
1078 else if (DECL_NAME (field) != component)
1083 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1085 if (DECL_NAME (field) == NULL_TREE)
1090 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1091 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1092 anon = lookup_field (TREE_TYPE (field), component, &junk);
1094 if (anon != NULL_TREE)
1101 if (DECL_NAME (field) == component)
1106 *indirect = NULL_TREE;
1110 /* Make an expression to refer to the COMPONENT field of
1111 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1114 build_component_ref (datum, component)
1115 tree datum, component;
1117 register tree type = TREE_TYPE (datum);
1118 register enum tree_code code = TREE_CODE (type);
1119 register tree field = NULL;
1122 /* If DATUM is a COMPOUND_EXPR or COND_EXPR, move our reference inside it
1123 unless we are not to support things not strictly ANSI. */
1124 switch (TREE_CODE (datum))
1128 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
1129 return build (COMPOUND_EXPR, TREE_TYPE (value),
1130 TREE_OPERAND (datum, 0), value);
1133 return build_conditional_expr
1134 (TREE_OPERAND (datum, 0),
1135 build_component_ref (TREE_OPERAND (datum, 1), component),
1136 build_component_ref (TREE_OPERAND (datum, 2), component));
1142 /* See if there is a field or component with name COMPONENT. */
1144 if (code == RECORD_TYPE || code == UNION_TYPE)
1148 if (!COMPLETE_TYPE_P (type))
1150 incomplete_type_error (NULL_TREE, type);
1151 return error_mark_node;
1154 field = lookup_field (type, component, &indirect);
1158 error ("%s has no member named `%s'",
1159 code == RECORD_TYPE ? "structure" : "union",
1160 IDENTIFIER_POINTER (component));
1161 return error_mark_node;
1163 if (TREE_TYPE (field) == error_mark_node)
1164 return error_mark_node;
1166 /* If FIELD was found buried within an anonymous union,
1167 make one COMPONENT_REF to get that anonymous union,
1168 then fall thru to make a second COMPONENT_REF to get FIELD. */
1171 ref = build (COMPONENT_REF, TREE_TYPE (indirect), datum, indirect);
1172 if (TREE_READONLY (datum) || TREE_READONLY (indirect))
1173 TREE_READONLY (ref) = 1;
1174 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (indirect))
1175 TREE_THIS_VOLATILE (ref) = 1;
1179 ref = build (COMPONENT_REF, TREE_TYPE (field), datum, field);
1181 if (TREE_READONLY (datum) || TREE_READONLY (field))
1182 TREE_READONLY (ref) = 1;
1183 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (field))
1184 TREE_THIS_VOLATILE (ref) = 1;
1188 else if (code != ERROR_MARK)
1189 error ("request for member `%s' in something not a structure or union",
1190 IDENTIFIER_POINTER (component));
1192 return error_mark_node;
1195 /* Given an expression PTR for a pointer, return an expression
1196 for the value pointed to.
1197 ERRORSTRING is the name of the operator to appear in error messages. */
1200 build_indirect_ref (ptr, errorstring)
1202 const char *errorstring;
1204 register tree pointer = default_conversion (ptr);
1205 register tree type = TREE_TYPE (pointer);
1207 if (TREE_CODE (type) == POINTER_TYPE)
1209 if (TREE_CODE (pointer) == ADDR_EXPR
1211 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1212 == TREE_TYPE (type)))
1213 return TREE_OPERAND (pointer, 0);
1216 tree t = TREE_TYPE (type);
1217 register tree ref = build1 (INDIRECT_REF,
1218 TYPE_MAIN_VARIANT (t), pointer);
1220 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1222 error ("dereferencing pointer to incomplete type");
1223 return error_mark_node;
1225 if (VOID_TYPE_P (t) && skip_evaluation == 0)
1226 warning ("dereferencing `void *' pointer");
1228 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1229 so that we get the proper error message if the result is used
1230 to assign to. Also, &* is supposed to be a no-op.
1231 And ANSI C seems to specify that the type of the result
1232 should be the const type. */
1233 /* A de-reference of a pointer to const is not a const. It is valid
1234 to change it via some other pointer. */
1235 TREE_READONLY (ref) = TYPE_READONLY (t);
1236 TREE_SIDE_EFFECTS (ref)
1237 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer) || flag_volatile;
1238 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1242 else if (TREE_CODE (pointer) != ERROR_MARK)
1243 error ("invalid type argument of `%s'", errorstring);
1244 return error_mark_node;
1247 /* This handles expressions of the form "a[i]", which denotes
1250 This is logically equivalent in C to *(a+i), but we may do it differently.
1251 If A is a variable or a member, we generate a primitive ARRAY_REF.
1252 This avoids forcing the array out of registers, and can work on
1253 arrays that are not lvalues (for example, members of structures returned
1257 build_array_ref (array, index)
1262 error ("subscript missing in array reference");
1263 return error_mark_node;
1266 if (TREE_TYPE (array) == error_mark_node
1267 || TREE_TYPE (index) == error_mark_node)
1268 return error_mark_node;
1270 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
1271 && TREE_CODE (array) != INDIRECT_REF)
1275 /* Subscripting with type char is likely to lose
1276 on a machine where chars are signed.
1277 So warn on any machine, but optionally.
1278 Don't warn for unsigned char since that type is safe.
1279 Don't warn for signed char because anyone who uses that
1280 must have done so deliberately. */
1281 if (warn_char_subscripts
1282 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1283 warning ("array subscript has type `char'");
1285 /* Apply default promotions *after* noticing character types. */
1286 index = default_conversion (index);
1288 /* Require integer *after* promotion, for sake of enums. */
1289 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1291 error ("array subscript is not an integer");
1292 return error_mark_node;
1295 /* An array that is indexed by a non-constant
1296 cannot be stored in a register; we must be able to do
1297 address arithmetic on its address.
1298 Likewise an array of elements of variable size. */
1299 if (TREE_CODE (index) != INTEGER_CST
1300 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1301 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1303 if (mark_addressable (array) == 0)
1304 return error_mark_node;
1306 /* An array that is indexed by a constant value which is not within
1307 the array bounds cannot be stored in a register either; because we
1308 would get a crash in store_bit_field/extract_bit_field when trying
1309 to access a non-existent part of the register. */
1310 if (TREE_CODE (index) == INTEGER_CST
1311 && TYPE_VALUES (TREE_TYPE (array))
1312 && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
1314 if (mark_addressable (array) == 0)
1315 return error_mark_node;
1318 if (pedantic && !lvalue_p (array))
1320 if (DECL_REGISTER (array))
1321 pedwarn ("ISO C forbids subscripting `register' array");
1323 pedwarn ("ISO C89 forbids subscripting non-lvalue array");
1329 while (TREE_CODE (foo) == COMPONENT_REF)
1330 foo = TREE_OPERAND (foo, 0);
1331 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
1332 pedwarn ("ISO C89 forbids subscripting non-lvalue array");
1335 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1336 rval = build (ARRAY_REF, type, array, index);
1337 /* Array ref is const/volatile if the array elements are
1338 or if the array is. */
1339 TREE_READONLY (rval)
1340 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1341 | TREE_READONLY (array));
1342 TREE_SIDE_EFFECTS (rval)
1343 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1344 | TREE_SIDE_EFFECTS (array));
1345 TREE_THIS_VOLATILE (rval)
1346 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1347 /* This was added by rms on 16 Nov 91.
1348 It fixes vol struct foo *a; a->elts[1]
1349 in an inline function.
1350 Hope it doesn't break something else. */
1351 | TREE_THIS_VOLATILE (array));
1352 return require_complete_type (fold (rval));
1356 tree ar = default_conversion (array);
1357 tree ind = default_conversion (index);
1359 /* Do the same warning check as above, but only on the part that's
1360 syntactically the index and only if it is also semantically
1362 if (warn_char_subscripts
1363 && TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
1364 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1365 warning ("subscript has type `char'");
1367 /* Put the integer in IND to simplify error checking. */
1368 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1375 if (ar == error_mark_node)
1378 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
1379 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
1381 error ("subscripted value is neither array nor pointer");
1382 return error_mark_node;
1384 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1386 error ("array subscript is not an integer");
1387 return error_mark_node;
1390 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1395 /* Build an external reference to identifier ID. FUN indicates
1396 whether this will be used for a function call. */
1398 build_external_ref (id, fun)
1403 tree decl = lookup_name (id);
1404 tree objc_ivar = lookup_objc_ivar (id);
1406 if (!decl || decl == error_mark_node || C_DECL_ANTICIPATED (decl))
1412 if (!decl || decl == error_mark_node)
1413 /* Ordinary implicit function declaration. */
1414 ref = implicitly_declare (id);
1417 /* Implicit declaration of built-in function. Don't
1418 change the built-in declaration, but don't let this
1419 go by silently, either. */
1420 implicit_decl_warning (id);
1422 /* only issue this warning once */
1423 C_DECL_ANTICIPATED (decl) = 0;
1429 /* Reference to undeclared variable, including reference to
1430 builtin outside of function-call context. */
1431 if (current_function_decl == 0)
1432 error ("`%s' undeclared here (not in a function)",
1433 IDENTIFIER_POINTER (id));
1436 if (IDENTIFIER_GLOBAL_VALUE (id) != error_mark_node
1437 || IDENTIFIER_ERROR_LOCUS (id) != current_function_decl)
1439 error ("`%s' undeclared (first use in this function)",
1440 IDENTIFIER_POINTER (id));
1442 if (! undeclared_variable_notice)
1444 error ("(Each undeclared identifier is reported only once");
1445 error ("for each function it appears in.)");
1446 undeclared_variable_notice = 1;
1449 IDENTIFIER_GLOBAL_VALUE (id) = error_mark_node;
1450 IDENTIFIER_ERROR_LOCUS (id) = current_function_decl;
1452 return error_mark_node;
1457 /* Properly declared variable or function reference. */
1460 else if (decl != objc_ivar && IDENTIFIER_LOCAL_VALUE (id))
1462 warning ("local declaration of `%s' hides instance variable",
1463 IDENTIFIER_POINTER (id));
1470 if (TREE_TYPE (ref) == error_mark_node)
1471 return error_mark_node;
1473 assemble_external (ref);
1474 TREE_USED (ref) = 1;
1476 if (TREE_CODE (ref) == CONST_DECL)
1478 ref = DECL_INITIAL (ref);
1479 TREE_CONSTANT (ref) = 1;
1485 /* Build a function call to function FUNCTION with parameters PARAMS.
1486 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1487 TREE_VALUE of each node is a parameter-expression.
1488 FUNCTION's data type may be a function type or a pointer-to-function. */
1491 build_function_call (function, params)
1492 tree function, params;
1494 register tree fntype, fundecl = 0;
1495 register tree coerced_params;
1496 tree name = NULL_TREE, assembler_name = NULL_TREE, result;
1498 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1499 STRIP_TYPE_NOPS (function);
1501 /* Convert anything with function type to a pointer-to-function. */
1502 if (TREE_CODE (function) == FUNCTION_DECL)
1504 name = DECL_NAME (function);
1505 assembler_name = DECL_ASSEMBLER_NAME (function);
1507 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1508 (because calling an inline function does not mean the function
1509 needs to be separately compiled). */
1510 fntype = build_type_variant (TREE_TYPE (function),
1511 TREE_READONLY (function),
1512 TREE_THIS_VOLATILE (function));
1514 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1517 function = default_conversion (function);
1519 fntype = TREE_TYPE (function);
1521 if (TREE_CODE (fntype) == ERROR_MARK)
1522 return error_mark_node;
1524 if (!(TREE_CODE (fntype) == POINTER_TYPE
1525 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1527 error ("called object is not a function");
1528 return error_mark_node;
1531 /* fntype now gets the type of function pointed to. */
1532 fntype = TREE_TYPE (fntype);
1534 /* Convert the parameters to the types declared in the
1535 function prototype, or apply default promotions. */
1538 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
1540 /* Check for errors in format strings. */
1542 if (warn_format && (name || assembler_name))
1543 check_function_format (name, assembler_name, coerced_params);
1545 /* Recognize certain built-in functions so we can make tree-codes
1546 other than CALL_EXPR. We do this when it enables fold-const.c
1547 to do something useful. */
1549 if (TREE_CODE (function) == ADDR_EXPR
1550 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1551 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
1553 result = expand_tree_builtin (TREE_OPERAND (function, 0),
1554 params, coerced_params);
1559 result = build (CALL_EXPR, TREE_TYPE (fntype),
1560 function, coerced_params, NULL_TREE);
1562 TREE_SIDE_EFFECTS (result) = 1;
1563 if (VOID_TYPE_P (TREE_TYPE (result)))
1565 return require_complete_type (result);
1568 /* Convert the argument expressions in the list VALUES
1569 to the types in the list TYPELIST. The result is a list of converted
1570 argument expressions.
1572 If TYPELIST is exhausted, or when an element has NULL as its type,
1573 perform the default conversions.
1575 PARMLIST is the chain of parm decls for the function being called.
1576 It may be 0, if that info is not available.
1577 It is used only for generating error messages.
1579 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1581 This is also where warnings about wrong number of args are generated.
1583 Both VALUES and the returned value are chains of TREE_LIST nodes
1584 with the elements of the list in the TREE_VALUE slots of those nodes. */
1587 convert_arguments (typelist, values, name, fundecl)
1588 tree typelist, values, name, fundecl;
1590 register tree typetail, valtail;
1591 register tree result = NULL;
1594 /* Scan the given expressions and types, producing individual
1595 converted arguments and pushing them on RESULT in reverse order. */
1597 for (valtail = values, typetail = typelist, parmnum = 0;
1599 valtail = TREE_CHAIN (valtail), parmnum++)
1601 register tree type = typetail ? TREE_VALUE (typetail) : 0;
1602 register tree val = TREE_VALUE (valtail);
1604 if (type == void_type_node)
1607 error ("too many arguments to function `%s'",
1608 IDENTIFIER_POINTER (name));
1610 error ("too many arguments to function");
1614 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1615 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1616 to convert automatically to a pointer. */
1617 if (TREE_CODE (val) == NON_LVALUE_EXPR)
1618 val = TREE_OPERAND (val, 0);
1620 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
1621 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE)
1622 val = default_conversion (val);
1624 val = require_complete_type (val);
1628 /* Formal parm type is specified by a function prototype. */
1631 if (!COMPLETE_TYPE_P (type))
1633 error ("type of formal parameter %d is incomplete", parmnum + 1);
1638 /* Optionally warn about conversions that
1639 differ from the default conversions. */
1640 if (warn_conversion)
1642 int formal_prec = TYPE_PRECISION (type);
1644 if (INTEGRAL_TYPE_P (type)
1645 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1646 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1647 else if (TREE_CODE (type) == COMPLEX_TYPE
1648 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1649 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1650 else if (TREE_CODE (type) == REAL_TYPE
1651 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1652 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1653 else if (TREE_CODE (type) == REAL_TYPE
1654 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1655 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1656 /* ??? At some point, messages should be written about
1657 conversions between complex types, but that's too messy
1659 else if (TREE_CODE (type) == REAL_TYPE
1660 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1662 /* Warn if any argument is passed as `float',
1663 since without a prototype it would be `double'. */
1664 if (formal_prec == TYPE_PRECISION (float_type_node))
1665 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
1667 /* Detect integer changing in width or signedness. */
1668 else if (INTEGRAL_TYPE_P (type)
1669 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1671 tree would_have_been = default_conversion (val);
1672 tree type1 = TREE_TYPE (would_have_been);
1674 if (TREE_CODE (type) == ENUMERAL_TYPE
1675 && type == TREE_TYPE (val))
1676 /* No warning if function asks for enum
1677 and the actual arg is that enum type. */
1679 else if (formal_prec != TYPE_PRECISION (type1))
1680 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
1681 else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
1683 /* Don't complain if the formal parameter type
1684 is an enum, because we can't tell now whether
1685 the value was an enum--even the same enum. */
1686 else if (TREE_CODE (type) == ENUMERAL_TYPE)
1688 else if (TREE_CODE (val) == INTEGER_CST
1689 && int_fits_type_p (val, type))
1690 /* Change in signedness doesn't matter
1691 if a constant value is unaffected. */
1693 /* Likewise for a constant in a NOP_EXPR. */
1694 else if (TREE_CODE (val) == NOP_EXPR
1695 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
1696 && int_fits_type_p (TREE_OPERAND (val, 0), type))
1698 #if 0 /* We never get such tree structure here. */
1699 else if (TREE_CODE (TREE_TYPE (val)) == ENUMERAL_TYPE
1700 && int_fits_type_p (TYPE_MIN_VALUE (TREE_TYPE (val)), type)
1701 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (val)), type))
1702 /* Change in signedness doesn't matter
1703 if an enum value is unaffected. */
1706 /* If the value is extended from a narrower
1707 unsigned type, it doesn't matter whether we
1708 pass it as signed or unsigned; the value
1709 certainly is the same either way. */
1710 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
1711 && TREE_UNSIGNED (TREE_TYPE (val)))
1713 else if (TREE_UNSIGNED (type))
1714 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
1716 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
1720 parmval = convert_for_assignment (type, val,
1721 (char *) 0, /* arg passing */
1722 fundecl, name, parmnum + 1);
1724 if (PROMOTE_PROTOTYPES
1725 && (TREE_CODE (type) == INTEGER_TYPE
1726 || TREE_CODE (type) == ENUMERAL_TYPE)
1727 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
1728 parmval = default_conversion (parmval);
1730 result = tree_cons (NULL_TREE, parmval, result);
1732 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
1733 && (TYPE_PRECISION (TREE_TYPE (val))
1734 < TYPE_PRECISION (double_type_node)))
1735 /* Convert `float' to `double'. */
1736 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
1738 /* Convert `short' and `char' to full-size `int'. */
1739 result = tree_cons (NULL_TREE, default_conversion (val), result);
1742 typetail = TREE_CHAIN (typetail);
1745 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
1748 error ("too few arguments to function `%s'",
1749 IDENTIFIER_POINTER (name));
1751 error ("too few arguments to function");
1754 return nreverse (result);
1757 /* This is the entry point used by the parser
1758 for binary operators in the input.
1759 In addition to constructing the expression,
1760 we check for operands that were written with other binary operators
1761 in a way that is likely to confuse the user. */
1764 parser_build_binary_op (code, arg1, arg2)
1765 enum tree_code code;
1768 tree result = build_binary_op (code, arg1, arg2, 1);
1771 char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
1772 char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
1773 enum tree_code code1 = ERROR_MARK;
1774 enum tree_code code2 = ERROR_MARK;
1776 if (class1 == 'e' || class1 == '1'
1777 || class1 == '2' || class1 == '<')
1778 code1 = C_EXP_ORIGINAL_CODE (arg1);
1779 if (class2 == 'e' || class2 == '1'
1780 || class2 == '2' || class2 == '<')
1781 code2 = C_EXP_ORIGINAL_CODE (arg2);
1783 /* Check for cases such as x+y<<z which users are likely
1784 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1785 is cleared to prevent these warnings. */
1786 if (warn_parentheses)
1788 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
1790 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1791 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1792 warning ("suggest parentheses around + or - inside shift");
1795 if (code == TRUTH_ORIF_EXPR)
1797 if (code1 == TRUTH_ANDIF_EXPR
1798 || code2 == TRUTH_ANDIF_EXPR)
1799 warning ("suggest parentheses around && within ||");
1802 if (code == BIT_IOR_EXPR)
1804 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
1805 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1806 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
1807 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1808 warning ("suggest parentheses around arithmetic in operand of |");
1809 /* Check cases like x|y==z */
1810 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1811 warning ("suggest parentheses around comparison 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 ^");
1821 /* Check cases like x^y==z */
1822 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1823 warning ("suggest parentheses around comparison in operand of ^");
1826 if (code == BIT_AND_EXPR)
1828 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1829 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1830 warning ("suggest parentheses around + or - in operand of &");
1831 /* Check cases like x&y==z */
1832 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1833 warning ("suggest parentheses around comparison in operand of &");
1837 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
1838 if (TREE_CODE_CLASS (code) == '<' && extra_warnings
1839 && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
1840 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1842 unsigned_conversion_warning (result, arg1);
1843 unsigned_conversion_warning (result, arg2);
1844 overflow_warning (result);
1846 class = TREE_CODE_CLASS (TREE_CODE (result));
1848 /* Record the code that was specified in the source,
1849 for the sake of warnings about confusing nesting. */
1850 if (class == 'e' || class == '1'
1851 || class == '2' || class == '<')
1852 C_SET_EXP_ORIGINAL_CODE (result, code);
1855 int flag = TREE_CONSTANT (result);
1856 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
1857 so that convert_for_assignment wouldn't strip it.
1858 That way, we got warnings for things like p = (1 - 1).
1859 But it turns out we should not get those warnings. */
1860 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
1861 C_SET_EXP_ORIGINAL_CODE (result, code);
1862 TREE_CONSTANT (result) = flag;
1868 /* Build a binary-operation expression without default conversions.
1869 CODE is the kind of expression to build.
1870 This function differs from `build' in several ways:
1871 the data type of the result is computed and recorded in it,
1872 warnings are generated if arg data types are invalid,
1873 special handling for addition and subtraction of pointers is known,
1874 and some optimization is done (operations on narrow ints
1875 are done in the narrower type when that gives the same result).
1876 Constant folding is also done before the result is returned.
1878 Note that the operands will never have enumeral types, or function
1879 or array types, because either they will have the default conversions
1880 performed or they have both just been converted to some other type in which
1881 the arithmetic is to be done. */
1884 build_binary_op (code, orig_op0, orig_op1, convert_p)
1885 enum tree_code code;
1886 tree orig_op0, orig_op1;
1890 register enum tree_code code0, code1;
1893 /* Expression code to give to the expression when it is built.
1894 Normally this is CODE, which is what the caller asked for,
1895 but in some special cases we change it. */
1896 register enum tree_code resultcode = code;
1898 /* Data type in which the computation is to be performed.
1899 In the simplest cases this is the common type of the arguments. */
1900 register tree result_type = NULL;
1902 /* Nonzero means operands have already been type-converted
1903 in whatever way is necessary.
1904 Zero means they need to be converted to RESULT_TYPE. */
1907 /* Nonzero means create the expression with this type, rather than
1909 tree build_type = 0;
1911 /* Nonzero means after finally constructing the expression
1912 convert it to this type. */
1913 tree final_type = 0;
1915 /* Nonzero if this is an operation like MIN or MAX which can
1916 safely be computed in short if both args are promoted shorts.
1917 Also implies COMMON.
1918 -1 indicates a bitwise operation; this makes a difference
1919 in the exact conditions for when it is safe to do the operation
1920 in a narrower mode. */
1923 /* Nonzero if this is a comparison operation;
1924 if both args are promoted shorts, compare the original shorts.
1925 Also implies COMMON. */
1926 int short_compare = 0;
1928 /* Nonzero if this is a right-shift operation, which can be computed on the
1929 original short and then promoted if the operand is a promoted short. */
1930 int short_shift = 0;
1932 /* Nonzero means set RESULT_TYPE to the common type of the args. */
1937 op0 = default_conversion (orig_op0);
1938 op1 = default_conversion (orig_op1);
1946 type0 = TREE_TYPE (op0);
1947 type1 = TREE_TYPE (op1);
1949 /* The expression codes of the data types of the arguments tell us
1950 whether the arguments are integers, floating, pointers, etc. */
1951 code0 = TREE_CODE (type0);
1952 code1 = TREE_CODE (type1);
1954 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1955 STRIP_TYPE_NOPS (op0);
1956 STRIP_TYPE_NOPS (op1);
1958 /* If an error was already reported for one of the arguments,
1959 avoid reporting another error. */
1961 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
1962 return error_mark_node;
1967 /* Handle the pointer + int case. */
1968 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1969 return pointer_int_sum (PLUS_EXPR, op0, op1);
1970 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
1971 return pointer_int_sum (PLUS_EXPR, op1, op0);
1977 /* Subtraction of two similar pointers.
1978 We must subtract them as integers, then divide by object size. */
1979 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
1980 && comp_target_types (type0, type1))
1981 return pointer_diff (op0, op1);
1982 /* Handle pointer minus int. Just like pointer plus int. */
1983 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1984 return pointer_int_sum (MINUS_EXPR, op0, op1);
1993 case TRUNC_DIV_EXPR:
1995 case FLOOR_DIV_EXPR:
1996 case ROUND_DIV_EXPR:
1997 case EXACT_DIV_EXPR:
1998 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
1999 || code0 == COMPLEX_TYPE)
2000 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2001 || code1 == COMPLEX_TYPE))
2003 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
2004 resultcode = RDIV_EXPR;
2006 /* Although it would be tempting to shorten always here, that
2007 loses on some targets, since the modulo instruction is
2008 undefined if the quotient can't be represented in the
2009 computation mode. We shorten only if unsigned or if
2010 dividing by something we know != -1. */
2011 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2012 || (TREE_CODE (op1) == INTEGER_CST
2013 && ! integer_all_onesp (op1)));
2019 case BIT_ANDTC_EXPR:
2022 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2024 /* If one operand is a constant, and the other is a short type
2025 that has been converted to an int,
2026 really do the work in the short type and then convert the
2027 result to int. If we are lucky, the constant will be 0 or 1
2028 in the short type, making the entire operation go away. */
2029 if (TREE_CODE (op0) == INTEGER_CST
2030 && TREE_CODE (op1) == NOP_EXPR
2031 && TYPE_PRECISION (type1) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1, 0)))
2032 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op1, 0))))
2034 final_type = result_type;
2035 op1 = TREE_OPERAND (op1, 0);
2036 result_type = TREE_TYPE (op1);
2038 if (TREE_CODE (op1) == INTEGER_CST
2039 && TREE_CODE (op0) == NOP_EXPR
2040 && TYPE_PRECISION (type0) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0)))
2041 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
2043 final_type = result_type;
2044 op0 = TREE_OPERAND (op0, 0);
2045 result_type = TREE_TYPE (op0);
2049 case TRUNC_MOD_EXPR:
2050 case FLOOR_MOD_EXPR:
2051 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2053 /* Although it would be tempting to shorten always here, that loses
2054 on some targets, since the modulo instruction is undefined if the
2055 quotient can't be represented in the computation mode. We shorten
2056 only if unsigned or if dividing by something we know != -1. */
2057 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2058 || (TREE_CODE (op1) == INTEGER_CST
2059 && ! integer_all_onesp (op1)));
2064 case TRUTH_ANDIF_EXPR:
2065 case TRUTH_ORIF_EXPR:
2066 case TRUTH_AND_EXPR:
2068 case TRUTH_XOR_EXPR:
2069 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
2070 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2071 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
2072 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2074 /* Result of these operations is always an int,
2075 but that does not mean the operands should be
2076 converted to ints! */
2077 result_type = integer_type_node;
2078 op0 = truthvalue_conversion (op0);
2079 op1 = truthvalue_conversion (op1);
2084 /* Shift operations: result has same type as first operand;
2085 always convert second operand to int.
2086 Also set SHORT_SHIFT if shifting rightward. */
2089 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2091 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2093 if (tree_int_cst_sgn (op1) < 0)
2094 warning ("right shift count is negative");
2097 if (! integer_zerop (op1))
2100 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2101 warning ("right shift count >= width of type");
2105 /* Use the type of the value to be shifted.
2106 This is what most traditional C compilers do. */
2107 result_type = type0;
2108 /* Unless traditional, convert the shift-count to an integer,
2109 regardless of size of value being shifted. */
2110 if (! flag_traditional)
2112 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2113 op1 = convert (integer_type_node, op1);
2114 /* Avoid converting op1 to result_type later. */
2121 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2123 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2125 if (tree_int_cst_sgn (op1) < 0)
2126 warning ("left shift count is negative");
2128 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2129 warning ("left shift count >= width of type");
2132 /* Use the type of the value to be shifted.
2133 This is what most traditional C compilers do. */
2134 result_type = type0;
2135 /* Unless traditional, convert the shift-count to an integer,
2136 regardless of size of value being shifted. */
2137 if (! flag_traditional)
2139 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2140 op1 = convert (integer_type_node, op1);
2141 /* Avoid converting op1 to result_type later. */
2149 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2151 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2153 if (tree_int_cst_sgn (op1) < 0)
2154 warning ("shift count is negative");
2155 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2156 warning ("shift count >= width of type");
2159 /* Use the type of the value to be shifted.
2160 This is what most traditional C compilers do. */
2161 result_type = type0;
2162 /* Unless traditional, convert the shift-count to an integer,
2163 regardless of size of value being shifted. */
2164 if (! flag_traditional)
2166 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2167 op1 = convert (integer_type_node, op1);
2168 /* Avoid converting op1 to result_type later. */
2176 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
2177 warning ("comparing floating point with == or != is unsafe");
2178 /* Result of comparison is always int,
2179 but don't convert the args to int! */
2180 build_type = integer_type_node;
2181 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2182 || code0 == COMPLEX_TYPE)
2183 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2184 || code1 == COMPLEX_TYPE))
2186 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2188 register tree tt0 = TREE_TYPE (type0);
2189 register tree tt1 = TREE_TYPE (type1);
2190 /* Anything compares with void *. void * compares with anything.
2191 Otherwise, the targets must be compatible
2192 and both must be object or both incomplete. */
2193 if (comp_target_types (type0, type1))
2194 result_type = common_type (type0, type1);
2195 else if (VOID_TYPE_P (tt0))
2197 /* op0 != orig_op0 detects the case of something
2198 whose value is 0 but which isn't a valid null ptr const. */
2199 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
2200 && TREE_CODE (tt1) == FUNCTION_TYPE)
2201 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
2203 else if (VOID_TYPE_P (tt1))
2205 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
2206 && TREE_CODE (tt0) == FUNCTION_TYPE)
2207 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
2210 pedwarn ("comparison of distinct pointer types lacks a cast");
2212 if (result_type == NULL_TREE)
2213 result_type = ptr_type_node;
2215 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2216 && integer_zerop (op1))
2217 result_type = type0;
2218 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2219 && integer_zerop (op0))
2220 result_type = type1;
2221 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2223 result_type = type0;
2224 if (! flag_traditional)
2225 pedwarn ("comparison between pointer and integer");
2227 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2229 result_type = type1;
2230 if (! flag_traditional)
2231 pedwarn ("comparison between pointer and integer");
2237 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2238 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2240 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2242 if (comp_target_types (type0, type1))
2244 result_type = common_type (type0, type1);
2246 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2247 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
2251 result_type = ptr_type_node;
2252 pedwarn ("comparison of distinct pointer types lacks a cast");
2261 build_type = integer_type_node;
2262 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2263 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2265 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2267 if (comp_target_types (type0, type1))
2269 result_type = common_type (type0, type1);
2270 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
2271 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
2272 pedwarn ("comparison of complete and incomplete pointers");
2274 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2275 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
2279 result_type = ptr_type_node;
2280 pedwarn ("comparison of distinct pointer types lacks a cast");
2283 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2284 && integer_zerop (op1))
2286 result_type = type0;
2287 if (pedantic || extra_warnings)
2288 pedwarn ("ordered comparison of pointer with integer zero");
2290 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2291 && integer_zerop (op0))
2293 result_type = type1;
2295 pedwarn ("ordered comparison of pointer with integer zero");
2297 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2299 result_type = type0;
2300 if (! flag_traditional)
2301 pedwarn ("comparison between pointer and integer");
2303 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2305 result_type = type1;
2306 if (! flag_traditional)
2307 pedwarn ("comparison between pointer and integer");
2311 case UNORDERED_EXPR:
2318 build_type = integer_type_node;
2319 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
2321 error ("unordered comparison on non-floating point argument");
2322 return error_mark_node;
2331 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2333 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2335 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
2337 if (shorten || common || short_compare)
2338 result_type = common_type (type0, type1);
2340 /* For certain operations (which identify themselves by shorten != 0)
2341 if both args were extended from the same smaller type,
2342 do the arithmetic in that type and then extend.
2344 shorten !=0 and !=1 indicates a bitwise operation.
2345 For them, this optimization is safe only if
2346 both args are zero-extended or both are sign-extended.
2347 Otherwise, we might change the result.
2348 Eg, (short)-1 | (unsigned short)-1 is (int)-1
2349 but calculated in (unsigned short) it would be (unsigned short)-1. */
2351 if (shorten && none_complex)
2353 int unsigned0, unsigned1;
2354 tree arg0 = get_narrower (op0, &unsigned0);
2355 tree arg1 = get_narrower (op1, &unsigned1);
2356 /* UNS is 1 if the operation to be done is an unsigned one. */
2357 int uns = TREE_UNSIGNED (result_type);
2360 final_type = result_type;
2362 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
2363 but it *requires* conversion to FINAL_TYPE. */
2365 if ((TYPE_PRECISION (TREE_TYPE (op0))
2366 == TYPE_PRECISION (TREE_TYPE (arg0)))
2367 && TREE_TYPE (op0) != final_type)
2368 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
2369 if ((TYPE_PRECISION (TREE_TYPE (op1))
2370 == TYPE_PRECISION (TREE_TYPE (arg1)))
2371 && TREE_TYPE (op1) != final_type)
2372 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
2374 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
2376 /* For bitwise operations, signedness of nominal type
2377 does not matter. Consider only how operands were extended. */
2381 /* Note that in all three cases below we refrain from optimizing
2382 an unsigned operation on sign-extended args.
2383 That would not be valid. */
2385 /* Both args variable: if both extended in same way
2386 from same width, do it in that width.
2387 Do it unsigned if args were zero-extended. */
2388 if ((TYPE_PRECISION (TREE_TYPE (arg0))
2389 < TYPE_PRECISION (result_type))
2390 && (TYPE_PRECISION (TREE_TYPE (arg1))
2391 == TYPE_PRECISION (TREE_TYPE (arg0)))
2392 && unsigned0 == unsigned1
2393 && (unsigned0 || !uns))
2395 = signed_or_unsigned_type (unsigned0,
2396 common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
2397 else if (TREE_CODE (arg0) == INTEGER_CST
2398 && (unsigned1 || !uns)
2399 && (TYPE_PRECISION (TREE_TYPE (arg1))
2400 < TYPE_PRECISION (result_type))
2401 && (type = signed_or_unsigned_type (unsigned1,
2403 int_fits_type_p (arg0, type)))
2405 else if (TREE_CODE (arg1) == INTEGER_CST
2406 && (unsigned0 || !uns)
2407 && (TYPE_PRECISION (TREE_TYPE (arg0))
2408 < TYPE_PRECISION (result_type))
2409 && (type = signed_or_unsigned_type (unsigned0,
2411 int_fits_type_p (arg1, type)))
2415 /* Shifts can be shortened if shifting right. */
2420 tree arg0 = get_narrower (op0, &unsigned_arg);
2422 final_type = result_type;
2424 if (arg0 == op0 && final_type == TREE_TYPE (op0))
2425 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
2427 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
2428 /* We can shorten only if the shift count is less than the
2429 number of bits in the smaller type size. */
2430 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
2431 /* If arg is sign-extended and then unsigned-shifted,
2432 we can simulate this with a signed shift in arg's type
2433 only if the extended result is at least twice as wide
2434 as the arg. Otherwise, the shift could use up all the
2435 ones made by sign-extension and bring in zeros.
2436 We can't optimize that case at all, but in most machines
2437 it never happens because available widths are 2**N. */
2438 && (!TREE_UNSIGNED (final_type)
2440 || (2 * TYPE_PRECISION (TREE_TYPE (arg0))
2441 <= TYPE_PRECISION (result_type))))
2443 /* Do an unsigned shift if the operand was zero-extended. */
2445 = signed_or_unsigned_type (unsigned_arg,
2447 /* Convert value-to-be-shifted to that type. */
2448 if (TREE_TYPE (op0) != result_type)
2449 op0 = convert (result_type, op0);
2454 /* Comparison operations are shortened too but differently.
2455 They identify themselves by setting short_compare = 1. */
2459 /* Don't write &op0, etc., because that would prevent op0
2460 from being kept in a register.
2461 Instead, make copies of the our local variables and
2462 pass the copies by reference, then copy them back afterward. */
2463 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
2464 enum tree_code xresultcode = resultcode;
2466 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
2471 op0 = xop0, op1 = xop1;
2473 resultcode = xresultcode;
2475 if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare != 0)
2476 && skip_evaluation == 0)
2478 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
2479 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
2480 int unsignedp0, unsignedp1;
2481 tree primop0 = get_narrower (op0, &unsignedp0);
2482 tree primop1 = get_narrower (op1, &unsignedp1);
2486 STRIP_TYPE_NOPS (xop0);
2487 STRIP_TYPE_NOPS (xop1);
2489 /* Give warnings for comparisons between signed and unsigned
2490 quantities that may fail.
2492 Do the checking based on the original operand trees, so that
2493 casts will be considered, but default promotions won't be.
2495 Do not warn if the comparison is being done in a signed type,
2496 since the signed type will only be chosen if it can represent
2497 all the values of the unsigned type. */
2498 if (! TREE_UNSIGNED (result_type))
2500 /* Do not warn if both operands are the same signedness. */
2501 else if (op0_signed == op1_signed)
2508 sop = xop0, uop = xop1;
2510 sop = xop1, uop = xop0;
2512 /* Do not warn if the signed quantity is an
2513 unsuffixed integer literal (or some static
2514 constant expression involving such literals or a
2515 conditional expression involving such literals)
2516 and it is non-negative. */
2517 if (tree_expr_nonnegative_p (sop))
2519 /* Do not warn if the comparison is an equality operation,
2520 the unsigned quantity is an integral constant, and it
2521 would fit in the result if the result were signed. */
2522 else if (TREE_CODE (uop) == INTEGER_CST
2523 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
2524 && int_fits_type_p (uop, signed_type (result_type)))
2526 /* Do not warn if the unsigned quantity is an enumeration
2527 constant and its maximum value would fit in the result
2528 if the result were signed. */
2529 else if (TREE_CODE (uop) == INTEGER_CST
2530 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
2531 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE(uop)),
2532 signed_type (result_type)))
2535 warning ("comparison between signed and unsigned");
2538 /* Warn if two unsigned values are being compared in a size
2539 larger than their original size, and one (and only one) is the
2540 result of a `~' operator. This comparison will always fail.
2542 Also warn if one operand is a constant, and the constant
2543 does not have all bits set that are set in the ~ operand
2544 when it is extended. */
2546 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
2547 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
2549 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
2550 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
2553 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
2556 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
2559 HOST_WIDE_INT constant, mask;
2560 int unsignedp, bits;
2562 if (host_integerp (primop0, 0))
2565 unsignedp = unsignedp1;
2566 constant = tree_low_cst (primop0, 0);
2571 unsignedp = unsignedp0;
2572 constant = tree_low_cst (primop1, 0);
2575 bits = TYPE_PRECISION (TREE_TYPE (primop));
2576 if (bits < TYPE_PRECISION (result_type)
2577 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
2579 mask = (~ (HOST_WIDE_INT) 0) << bits;
2580 if ((mask & constant) != mask)
2581 warning ("comparison of promoted ~unsigned with constant");
2584 else if (unsignedp0 && unsignedp1
2585 && (TYPE_PRECISION (TREE_TYPE (primop0))
2586 < TYPE_PRECISION (result_type))
2587 && (TYPE_PRECISION (TREE_TYPE (primop1))
2588 < TYPE_PRECISION (result_type)))
2589 warning ("comparison of promoted ~unsigned with unsigned");
2595 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
2596 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
2597 Then the expression will be built.
2598 It will be given type FINAL_TYPE if that is nonzero;
2599 otherwise, it will be given type RESULT_TYPE. */
2603 binary_op_error (code);
2604 return error_mark_node;
2609 if (TREE_TYPE (op0) != result_type)
2610 op0 = convert (result_type, op0);
2611 if (TREE_TYPE (op1) != result_type)
2612 op1 = convert (result_type, op1);
2615 if (build_type == NULL_TREE)
2616 build_type = result_type;
2619 register tree result = build (resultcode, build_type, op0, op1);
2620 register tree folded;
2622 folded = fold (result);
2623 if (folded == result)
2624 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2625 if (final_type != 0)
2626 return convert (final_type, folded);
2631 /* Return a tree for the sum or difference (RESULTCODE says which)
2632 of pointer PTROP and integer INTOP. */
2635 pointer_int_sum (resultcode, ptrop, intop)
2636 enum tree_code resultcode;
2637 register tree ptrop, intop;
2641 register tree result;
2642 register tree folded;
2644 /* The result is a pointer of the same type that is being added. */
2646 register tree result_type = TREE_TYPE (ptrop);
2648 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2650 if (pedantic || warn_pointer_arith)
2651 pedwarn ("pointer of type `void *' used in arithmetic");
2652 size_exp = integer_one_node;
2654 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2656 if (pedantic || warn_pointer_arith)
2657 pedwarn ("pointer to a function used in arithmetic");
2658 size_exp = integer_one_node;
2661 size_exp = c_size_in_bytes (TREE_TYPE (result_type));
2663 /* If what we are about to multiply by the size of the elements
2664 contains a constant term, apply distributive law
2665 and multiply that constant term separately.
2666 This helps produce common subexpressions. */
2668 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2669 && ! TREE_CONSTANT (intop)
2670 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2671 && TREE_CONSTANT (size_exp)
2672 /* If the constant comes from pointer subtraction,
2673 skip this optimization--it would cause an error. */
2674 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2675 /* If the constant is unsigned, and smaller than the pointer size,
2676 then we must skip this optimization. This is because it could cause
2677 an overflow error if the constant is negative but INTOP is not. */
2678 && (! TREE_UNSIGNED (TREE_TYPE (intop))
2679 || (TYPE_PRECISION (TREE_TYPE (intop))
2680 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2682 enum tree_code subcode = resultcode;
2683 tree int_type = TREE_TYPE (intop);
2684 if (TREE_CODE (intop) == MINUS_EXPR)
2685 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2686 /* Convert both subexpression types to the type of intop,
2687 because weird cases involving pointer arithmetic
2688 can result in a sum or difference with different type args. */
2689 ptrop = build_binary_op (subcode, ptrop,
2690 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2691 intop = convert (int_type, TREE_OPERAND (intop, 0));
2694 /* Convert the integer argument to a type the same size as sizetype
2695 so the multiply won't overflow spuriously. */
2697 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2698 || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
2699 intop = convert (type_for_size (TYPE_PRECISION (sizetype),
2700 TREE_UNSIGNED (sizetype)), intop);
2702 /* Replace the integer argument with a suitable product by the object size.
2703 Do this multiplication as signed, then convert to the appropriate
2704 pointer type (actually unsigned integral). */
2706 intop = convert (result_type,
2707 build_binary_op (MULT_EXPR, intop,
2708 convert (TREE_TYPE (intop), size_exp), 1));
2710 /* Create the sum or difference. */
2712 result = build (resultcode, result_type, ptrop, intop);
2714 folded = fold (result);
2715 if (folded == result)
2716 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2720 /* Return a tree for the difference of pointers OP0 and OP1.
2721 The resulting tree has type int. */
2724 pointer_diff (op0, op1)
2725 register tree op0, op1;
2727 register tree result, folded;
2728 tree restype = ptrdiff_type_node;
2730 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2732 if (pedantic || warn_pointer_arith)
2734 if (TREE_CODE (target_type) == VOID_TYPE)
2735 pedwarn ("pointer of type `void *' used in subtraction");
2736 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2737 pedwarn ("pointer to a function used in subtraction");
2740 /* First do the subtraction as integers;
2741 then drop through to build the divide operator.
2742 Do not do default conversions on the minus operator
2743 in case restype is a short type. */
2745 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2746 convert (restype, op1), 0);
2747 /* This generates an error if op1 is pointer to incomplete type. */
2748 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
2749 error ("arithmetic on pointer to an incomplete type");
2751 /* This generates an error if op0 is pointer to incomplete type. */
2752 op1 = c_size_in_bytes (target_type);
2754 /* Divide by the size, in easiest possible way. */
2756 result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2758 folded = fold (result);
2759 if (folded == result)
2760 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2764 /* Construct and perhaps optimize a tree representation
2765 for a unary operation. CODE, a tree_code, specifies the operation
2766 and XARG is the operand. NOCONVERT nonzero suppresses
2767 the default promotions (such as from short to int). */
2770 build_unary_op (code, xarg, noconvert)
2771 enum tree_code code;
2775 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2776 register tree arg = xarg;
2777 register tree argtype = 0;
2778 register enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2781 if (typecode == ERROR_MARK)
2782 return error_mark_node;
2783 if (typecode == ENUMERAL_TYPE)
2784 typecode = INTEGER_TYPE;
2789 /* This is used for unary plus, because a CONVERT_EXPR
2790 is enough to prevent anybody from looking inside for
2791 associativity, but won't generate any code. */
2792 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2793 || typecode == COMPLEX_TYPE))
2795 error ("wrong type argument to unary plus");
2796 return error_mark_node;
2798 else if (!noconvert)
2799 arg = default_conversion (arg);
2803 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2804 || typecode == COMPLEX_TYPE))
2806 error ("wrong type argument to unary minus");
2807 return error_mark_node;
2809 else if (!noconvert)
2810 arg = default_conversion (arg);
2814 if (typecode == COMPLEX_TYPE)
2818 arg = default_conversion (arg);
2820 else if (typecode != INTEGER_TYPE)
2822 error ("wrong type argument to bit-complement");
2823 return error_mark_node;
2825 else if (!noconvert)
2826 arg = default_conversion (arg);
2830 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2831 || typecode == COMPLEX_TYPE))
2833 error ("wrong type argument to abs");
2834 return error_mark_node;
2836 else if (!noconvert)
2837 arg = default_conversion (arg);
2841 /* Conjugating a real value is a no-op, but allow it anyway. */
2842 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2843 || typecode == COMPLEX_TYPE))
2845 error ("wrong type argument to conjugation");
2846 return error_mark_node;
2848 else if (!noconvert)
2849 arg = default_conversion (arg);
2852 case TRUTH_NOT_EXPR:
2853 if (typecode != INTEGER_TYPE
2854 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2855 && typecode != COMPLEX_TYPE
2856 /* These will convert to a pointer. */
2857 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2859 error ("wrong type argument to unary exclamation mark");
2860 return error_mark_node;
2862 arg = truthvalue_conversion (arg);
2863 return invert_truthvalue (arg);
2869 if (TREE_CODE (arg) == COMPLEX_CST)
2870 return TREE_REALPART (arg);
2871 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2872 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2877 if (TREE_CODE (arg) == COMPLEX_CST)
2878 return TREE_IMAGPART (arg);
2879 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2880 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2882 return convert (TREE_TYPE (arg), integer_zero_node);
2884 case PREINCREMENT_EXPR:
2885 case POSTINCREMENT_EXPR:
2886 case PREDECREMENT_EXPR:
2887 case POSTDECREMENT_EXPR:
2888 /* Handle complex lvalues (when permitted)
2889 by reduction to simpler cases. */
2891 val = unary_complex_lvalue (code, arg);
2895 /* Increment or decrement the real part of the value,
2896 and don't change the imaginary part. */
2897 if (typecode == COMPLEX_TYPE)
2901 arg = stabilize_reference (arg);
2902 real = build_unary_op (REALPART_EXPR, arg, 1);
2903 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2904 return build (COMPLEX_EXPR, TREE_TYPE (arg),
2905 build_unary_op (code, real, 1), imag);
2908 /* Report invalid types. */
2910 if (typecode != POINTER_TYPE
2911 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2913 error ("wrong type argument to %s",
2914 code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR
2915 ? "increment" : "decrement");
2916 return error_mark_node;
2921 tree result_type = TREE_TYPE (arg);
2923 arg = get_unwidened (arg, 0);
2924 argtype = TREE_TYPE (arg);
2926 /* Compute the increment. */
2928 if (typecode == POINTER_TYPE)
2930 /* If pointer target is an undefined struct,
2931 we just cannot know how to do the arithmetic. */
2932 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2933 error ("%s of pointer to unknown structure",
2934 code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR
2935 ? "increment" : "decrement");
2936 else if ((pedantic || warn_pointer_arith)
2937 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2938 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2939 pedwarn ("wrong type argument to %s",
2940 code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR
2941 ? "increment" : "decrement");
2942 inc = c_size_in_bytes (TREE_TYPE (result_type));
2945 inc = integer_one_node;
2947 inc = convert (argtype, inc);
2949 /* Handle incrementing a cast-expression. */
2952 switch (TREE_CODE (arg))
2957 case FIX_TRUNC_EXPR:
2958 case FIX_FLOOR_EXPR:
2959 case FIX_ROUND_EXPR:
2961 pedantic_lvalue_warning (CONVERT_EXPR);
2962 /* If the real type has the same machine representation
2963 as the type it is cast to, we can make better output
2964 by adding directly to the inside of the cast. */
2965 if ((TREE_CODE (TREE_TYPE (arg))
2966 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
2967 && (TYPE_MODE (TREE_TYPE (arg))
2968 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
2969 arg = TREE_OPERAND (arg, 0);
2972 tree incremented, modify, value;
2973 arg = stabilize_reference (arg);
2974 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
2977 value = save_expr (arg);
2978 incremented = build (((code == PREINCREMENT_EXPR
2979 || code == POSTINCREMENT_EXPR)
2980 ? PLUS_EXPR : MINUS_EXPR),
2981 argtype, value, inc);
2982 TREE_SIDE_EFFECTS (incremented) = 1;
2983 modify = build_modify_expr (arg, NOP_EXPR, incremented);
2984 value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
2985 TREE_USED (value) = 1;
2995 /* Complain about anything else that is not a true lvalue. */
2996 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2997 || code == POSTINCREMENT_EXPR)
2998 ? "invalid lvalue in increment"
2999 : "invalid lvalue in decrement")))
3000 return error_mark_node;
3002 /* Report a read-only lvalue. */
3003 if (TREE_READONLY (arg))
3004 readonly_warning (arg,
3005 ((code == PREINCREMENT_EXPR
3006 || code == POSTINCREMENT_EXPR)
3007 ? "increment" : "decrement"));
3009 val = build (code, TREE_TYPE (arg), arg, inc);
3010 TREE_SIDE_EFFECTS (val) = 1;
3011 val = convert (result_type, val);
3012 if (TREE_CODE (val) != code)
3013 TREE_NO_UNUSED_WARNING (val) = 1;
3018 /* Note that this operation never does default_conversion
3019 regardless of NOCONVERT. */
3021 /* Let &* cancel out to simplify resulting code. */
3022 if (TREE_CODE (arg) == INDIRECT_REF)
3024 /* Don't let this be an lvalue. */
3025 if (lvalue_p (TREE_OPERAND (arg, 0)))
3026 return non_lvalue (TREE_OPERAND (arg, 0));
3027 return TREE_OPERAND (arg, 0);
3030 /* For &x[y], return x+y */
3031 if (TREE_CODE (arg) == ARRAY_REF)
3033 if (mark_addressable (TREE_OPERAND (arg, 0)) == 0)
3034 return error_mark_node;
3035 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
3036 TREE_OPERAND (arg, 1), 1);
3039 /* Handle complex lvalues (when permitted)
3040 by reduction to simpler cases. */
3041 val = unary_complex_lvalue (code, arg);
3045 #if 0 /* Turned off because inconsistent;
3046 float f; *&(int)f = 3.4 stores in int format
3047 whereas (int)f = 3.4 stores in float format. */
3048 /* Address of a cast is just a cast of the address
3049 of the operand of the cast. */
3050 switch (TREE_CODE (arg))
3055 case FIX_TRUNC_EXPR:
3056 case FIX_FLOOR_EXPR:
3057 case FIX_ROUND_EXPR:
3060 pedwarn ("ISO C forbids the address of a cast expression");
3061 return convert (build_pointer_type (TREE_TYPE (arg)),
3062 build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0),
3067 /* Allow the address of a constructor if all the elements
3069 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_CONSTANT (arg))
3071 /* Anything not already handled and not a true memory reference
3073 else if (typecode != FUNCTION_TYPE
3074 && !lvalue_or_else (arg, "invalid lvalue in unary `&'"))
3075 return error_mark_node;
3077 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
3078 argtype = TREE_TYPE (arg);
3080 /* If the lvalue is const or volatile, merge that into the type
3081 to which the address will point. Note that you can't get a
3082 restricted pointer by taking the address of something, so we
3083 only have to deal with `const' and `volatile' here. */
3084 if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
3085 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
3086 argtype = c_build_type_variant (argtype,
3087 TREE_READONLY (arg),
3088 TREE_THIS_VOLATILE (arg));
3090 argtype = build_pointer_type (argtype);
3092 if (mark_addressable (arg) == 0)
3093 return error_mark_node;
3098 if (TREE_CODE (arg) == COMPONENT_REF)
3100 tree field = TREE_OPERAND (arg, 1);
3102 addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
3104 if (DECL_C_BIT_FIELD (field))
3106 error ("attempt to take address of bit-field structure member `%s'",
3107 IDENTIFIER_POINTER (DECL_NAME (field)));
3108 return error_mark_node;
3111 addr = fold (build (PLUS_EXPR, argtype,
3112 convert (argtype, addr),
3113 convert (argtype, byte_position (field))));
3116 addr = build1 (code, argtype, arg);
3118 /* Address of a static or external variable or
3119 file-scope function counts as a constant. */
3121 && ! (TREE_CODE (arg) == FUNCTION_DECL
3122 && DECL_CONTEXT (arg) != 0))
3123 TREE_CONSTANT (addr) = 1;
3132 argtype = TREE_TYPE (arg);
3133 return fold (build1 (code, argtype, arg));
3137 /* If CONVERSIONS is a conversion expression or a nested sequence of such,
3138 convert ARG with the same conversions in the same order
3139 and return the result. */
3142 convert_sequence (conversions, arg)
3146 switch (TREE_CODE (conversions))
3151 case FIX_TRUNC_EXPR:
3152 case FIX_FLOOR_EXPR:
3153 case FIX_ROUND_EXPR:
3155 return convert (TREE_TYPE (conversions),
3156 convert_sequence (TREE_OPERAND (conversions, 0),
3165 /* Return nonzero if REF is an lvalue valid for this language.
3166 Lvalues can be assigned, unless their type has TYPE_READONLY.
3167 Lvalues can have their address taken, unless they have DECL_REGISTER. */
3173 register enum tree_code code = TREE_CODE (ref);
3180 return lvalue_p (TREE_OPERAND (ref, 0));
3191 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3192 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
3196 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
3203 /* Return nonzero if REF is an lvalue valid for this language;
3204 otherwise, print an error message and return zero. */
3207 lvalue_or_else (ref, msgid)
3211 int win = lvalue_p (ref);
3214 error ("%s", msgid);
3219 /* Apply unary lvalue-demanding operator CODE to the expression ARG
3220 for certain kinds of expressions which are not really lvalues
3221 but which we can accept as lvalues.
3223 If ARG is not a kind of expression we can handle, return zero. */
3226 unary_complex_lvalue (code, arg)
3227 enum tree_code code;
3230 /* Handle (a, b) used as an "lvalue". */
3231 if (TREE_CODE (arg) == COMPOUND_EXPR)
3233 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
3235 /* If this returns a function type, it isn't really being used as
3236 an lvalue, so don't issue a warning about it. */
3237 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE)
3238 pedantic_lvalue_warning (COMPOUND_EXPR);
3240 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
3241 TREE_OPERAND (arg, 0), real_result);
3244 /* Handle (a ? b : c) used as an "lvalue". */
3245 if (TREE_CODE (arg) == COND_EXPR)
3247 pedantic_lvalue_warning (COND_EXPR);
3248 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE)
3249 pedantic_lvalue_warning (COMPOUND_EXPR);
3251 return (build_conditional_expr
3252 (TREE_OPERAND (arg, 0),
3253 build_unary_op (code, TREE_OPERAND (arg, 1), 0),
3254 build_unary_op (code, TREE_OPERAND (arg, 2), 0)));
3260 /* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
3261 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
3264 pedantic_lvalue_warning (code)
3265 enum tree_code code;
3271 pedwarn ("ISO C forbids use of conditional expressions as lvalues");
3274 pedwarn ("ISO C forbids use of compound expressions as lvalues");
3277 pedwarn ("ISO C forbids use of cast expressions as lvalues");
3282 /* Warn about storing in something that is `const'. */
3285 readonly_warning (arg, msgid)
3289 /* Forbid assignments to iterators. */
3290 if (TREE_CODE (arg) == VAR_DECL && ITERATOR_P (arg))
3291 pedwarn ("%s of iterator `%s'", _(msgid),
3292 IDENTIFIER_POINTER (DECL_NAME (arg)));
3294 if (TREE_CODE (arg) == COMPONENT_REF)
3296 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3297 readonly_warning (TREE_OPERAND (arg, 0), msgid);
3299 pedwarn ("%s of read-only member `%s'", _(msgid),
3300 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
3302 else if (TREE_CODE (arg) == VAR_DECL)
3303 pedwarn ("%s of read-only variable `%s'", _(msgid),
3304 IDENTIFIER_POINTER (DECL_NAME (arg)));
3306 pedwarn ("%s of read-only location", _(msgid));
3309 /* Mark EXP saying that we need to be able to take the
3310 address of it; it should not be allocated in a register.
3311 Value is 1 if successful. */
3314 mark_addressable (exp)
3317 register tree x = exp;
3319 switch (TREE_CODE (x))
3322 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
3324 error ("cannot take address of bitfield `%s'",
3325 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
3329 /* ... fall through ... */
3335 x = TREE_OPERAND (x, 0);
3339 TREE_ADDRESSABLE (x) = 1;
3346 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
3347 && DECL_NONLOCAL (x))
3349 if (TREE_PUBLIC (x))
3351 error ("global register variable `%s' used in nested function",
3352 IDENTIFIER_POINTER (DECL_NAME (x)));
3355 pedwarn ("register variable `%s' used in nested function",
3356 IDENTIFIER_POINTER (DECL_NAME (x)));
3358 else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
3360 if (TREE_PUBLIC (x))
3362 error ("address of global register variable `%s' requested",
3363 IDENTIFIER_POINTER (DECL_NAME (x)));
3367 /* If we are making this addressable due to its having
3368 volatile components, give a different error message. Also
3369 handle the case of an unnamed parameter by not trying
3370 to give the name. */
3372 else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x)))
3374 error ("cannot put object with volatile field into register");
3378 pedwarn ("address of register variable `%s' requested",
3379 IDENTIFIER_POINTER (DECL_NAME (x)));
3381 put_var_into_stack (x);
3385 TREE_ADDRESSABLE (x) = 1;
3386 #if 0 /* poplevel deals with this now. */
3387 if (DECL_CONTEXT (x) == 0)
3388 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
3396 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
3399 build_conditional_expr (ifexp, op1, op2)
3400 tree ifexp, op1, op2;
3402 register tree type1;
3403 register tree type2;
3404 register enum tree_code code1;
3405 register enum tree_code code2;
3406 register tree result_type = NULL;
3407 tree orig_op1 = op1, orig_op2 = op2;
3409 ifexp = truthvalue_conversion (default_conversion (ifexp));
3411 #if 0 /* Produces wrong result if within sizeof. */
3412 /* Don't promote the operands separately if they promote
3413 the same way. Return the unpromoted type and let the combined
3414 value get promoted if necessary. */
3416 if (TREE_TYPE (op1) == TREE_TYPE (op2)
3417 && TREE_CODE (TREE_TYPE (op1)) != ARRAY_TYPE
3418 && TREE_CODE (TREE_TYPE (op1)) != ENUMERAL_TYPE
3419 && TREE_CODE (TREE_TYPE (op1)) != FUNCTION_TYPE)
3421 if (TREE_CODE (ifexp) == INTEGER_CST)
3422 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3424 return fold (build (COND_EXPR, TREE_TYPE (op1), ifexp, op1, op2));
3428 /* Promote both alternatives. */
3430 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3431 op1 = default_conversion (op1);
3432 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3433 op2 = default_conversion (op2);
3435 if (TREE_CODE (ifexp) == ERROR_MARK
3436 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3437 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3438 return error_mark_node;
3440 type1 = TREE_TYPE (op1);
3441 code1 = TREE_CODE (type1);
3442 type2 = TREE_TYPE (op2);
3443 code2 = TREE_CODE (type2);
3445 /* Quickly detect the usual case where op1 and op2 have the same type
3447 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3450 result_type = type1;
3452 result_type = TYPE_MAIN_VARIANT (type1);
3454 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
3455 || code1 == COMPLEX_TYPE)
3456 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3457 || code2 == COMPLEX_TYPE))
3459 result_type = common_type (type1, type2);
3461 /* If -Wsign-compare, warn here if type1 and type2 have
3462 different signedness. We'll promote the signed to unsigned
3463 and later code won't know it used to be different.
3464 Do this check on the original types, so that explicit casts
3465 will be considered, but default promotions won't. */
3466 if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare)
3467 && !skip_evaluation)
3469 int unsigned_op1 = TREE_UNSIGNED (TREE_TYPE (orig_op1));
3470 int unsigned_op2 = TREE_UNSIGNED (TREE_TYPE (orig_op2));
3472 if (unsigned_op1 ^ unsigned_op2)
3474 /* Do not warn if the result type is signed, since the
3475 signed type will only be chosen if it can represent
3476 all the values of the unsigned type. */
3477 if (! TREE_UNSIGNED (result_type))
3479 /* Do not warn if the signed quantity is an unsuffixed
3480 integer literal (or some static constant expression
3481 involving such literals) and it is non-negative. */
3482 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
3483 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
3486 warning ("signed and unsigned type in conditional expression");
3490 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3492 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3493 pedwarn ("ISO C forbids conditional expr with only one void side");
3494 result_type = void_type_node;
3496 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3498 if (comp_target_types (type1, type2))
3499 result_type = common_type (type1, type2);
3500 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3501 && TREE_CODE (orig_op1) != NOP_EXPR)
3502 result_type = qualify_type (type2, type1);
3503 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3504 && TREE_CODE (orig_op2) != NOP_EXPR)
3505 result_type = qualify_type (type1, type2);
3506 else if (VOID_TYPE_P (TREE_TYPE (type1)))
3508 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3509 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
3510 result_type = qualify_type (type1, type2);
3512 else if (VOID_TYPE_P (TREE_TYPE (type2)))
3514 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3515 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
3516 result_type = qualify_type (type2, type1);
3520 pedwarn ("pointer type mismatch in conditional expression");
3521 result_type = build_pointer_type (void_type_node);
3524 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3526 if (! integer_zerop (op2))
3527 pedwarn ("pointer/integer type mismatch in conditional expression");
3530 op2 = null_pointer_node;
3531 #if 0 /* The spec seems to say this is permitted. */
3532 if (pedantic && TREE_CODE (type1) == FUNCTION_TYPE)
3533 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3536 result_type = type1;
3538 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3540 if (!integer_zerop (op1))
3541 pedwarn ("pointer/integer type mismatch in conditional expression");
3544 op1 = null_pointer_node;
3545 #if 0 /* The spec seems to say this is permitted. */
3546 if (pedantic && TREE_CODE (type2) == FUNCTION_TYPE)
3547 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3550 result_type = type2;
3555 if (flag_cond_mismatch)
3556 result_type = void_type_node;
3559 error ("type mismatch in conditional expression");
3560 return error_mark_node;
3564 /* Merge const and volatile flags of the incoming types. */
3566 = build_type_variant (result_type,
3567 TREE_READONLY (op1) || TREE_READONLY (op2),
3568 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3570 if (result_type != TREE_TYPE (op1))
3571 op1 = convert_and_check (result_type, op1);
3572 if (result_type != TREE_TYPE (op2))
3573 op2 = convert_and_check (result_type, op2);
3575 if (TREE_CODE (ifexp) == INTEGER_CST)
3576 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3578 return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
3581 /* Given a list of expressions, return a compound expression
3582 that performs them all and returns the value of the last of them. */
3585 build_compound_expr (list)
3588 return internal_build_compound_expr (list, TRUE);
3592 internal_build_compound_expr (list, first_p)
3598 if (TREE_CHAIN (list) == 0)
3600 #if 0 /* If something inside inhibited lvalueness, we should not override. */
3601 /* Consider (x, y+0), which is not an lvalue since y+0 is not. */
3603 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3604 if (TREE_CODE (list) == NON_LVALUE_EXPR)
3605 list = TREE_OPERAND (list, 0);
3608 /* Don't let (0, 0) be null pointer constant. */
3609 if (!first_p && integer_zerop (TREE_VALUE (list)))
3610 return non_lvalue (TREE_VALUE (list));
3611 return TREE_VALUE (list);
3614 if (TREE_CHAIN (list) != 0 && TREE_CHAIN (TREE_CHAIN (list)) == 0)
3616 /* Convert arrays to pointers when there really is a comma operator. */
3617 if (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (list)))) == ARRAY_TYPE)
3618 TREE_VALUE (TREE_CHAIN (list))
3619 = default_conversion (TREE_VALUE (TREE_CHAIN (list)));
3622 rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
3624 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
3626 /* The left-hand operand of a comma expression is like an expression
3627 statement: with -W or -Wunused, we should warn if it doesn't have
3628 any side-effects, unless it was explicitly cast to (void). */
3629 if ((extra_warnings || warn_unused_value)
3630 && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
3631 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE (list)))))
3632 warning ("left-hand operand of comma expression has no effect");
3634 /* When pedantic, a compound expression can be neither an lvalue
3635 nor an integer constant expression. */
3640 /* With -Wunused, we should also warn if the left-hand operand does have
3641 side-effects, but computes a value which is not used. For example, in
3642 `foo() + bar(), baz()' the result of the `+' operator is not used,
3643 so we should issue a warning. */
3644 else if (warn_unused_value)
3645 warn_if_unused_value (TREE_VALUE (list));
3647 return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
3650 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3653 build_c_cast (type, expr)
3657 register tree value = expr;
3659 if (type == error_mark_node || expr == error_mark_node)
3660 return error_mark_node;
3661 type = TYPE_MAIN_VARIANT (type);
3664 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3665 if (TREE_CODE (value) == NON_LVALUE_EXPR)
3666 value = TREE_OPERAND (value, 0);
3669 if (TREE_CODE (type) == ARRAY_TYPE)
3671 error ("cast specifies array type");
3672 return error_mark_node;
3675 if (TREE_CODE (type) == FUNCTION_TYPE)
3677 error ("cast specifies function type");
3678 return error_mark_node;
3681 if (type == TREE_TYPE (value))
3685 if (TREE_CODE (type) == RECORD_TYPE
3686 || TREE_CODE (type) == UNION_TYPE)
3687 pedwarn ("ISO C forbids casting nonscalar to the same type");
3690 else if (TREE_CODE (type) == UNION_TYPE)
3693 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
3694 || TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE)
3695 value = default_conversion (value);
3697 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3698 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3699 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3708 pedwarn ("ISO C forbids casts to union type");
3709 if (TYPE_NAME (type) != 0)
3711 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
3712 name = IDENTIFIER_POINTER (TYPE_NAME (type));
3714 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
3718 t = digest_init (type, build (CONSTRUCTOR, type, NULL_TREE,
3719 build_tree_list (field, value)),
3721 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3724 error ("cast to union type from type not present in union");
3725 return error_mark_node;
3731 /* If casting to void, avoid the error that would come
3732 from default_conversion in the case of a non-lvalue array. */
3733 if (type == void_type_node)
3734 return build1 (CONVERT_EXPR, type, value);
3736 /* Convert functions and arrays to pointers,
3737 but don't convert any other types. */
3738 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
3739 || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE)
3740 value = default_conversion (value);
3741 otype = TREE_TYPE (value);
3743 /* Optionally warn about potentially worrisome casts. */
3746 && TREE_CODE (type) == POINTER_TYPE
3747 && TREE_CODE (otype) == POINTER_TYPE)
3749 tree in_type = type;
3750 tree in_otype = otype;
3753 /* Check that the qualifiers on IN_TYPE are a superset of
3754 the qualifiers of IN_OTYPE. The outermost level of
3755 POINTER_TYPE nodes is uninteresting and we stop as soon
3756 as we hit a non-POINTER_TYPE node on either type. */
3759 in_otype = TREE_TYPE (in_otype);
3760 in_type = TREE_TYPE (in_type);
3761 warn |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3763 while (TREE_CODE (in_type) == POINTER_TYPE
3764 && TREE_CODE (in_otype) == POINTER_TYPE);
3767 /* There are qualifiers present in IN_OTYPE that are not
3768 present in IN_TYPE. */
3769 warning ("cast discards qualifiers from pointer target type");
3772 /* Warn about possible alignment problems. */
3773 if (STRICT_ALIGNMENT && warn_cast_align
3774 && TREE_CODE (type) == POINTER_TYPE
3775 && TREE_CODE (otype) == POINTER_TYPE
3776 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3777 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3778 /* Don't warn about opaque types, where the actual alignment
3779 restriction is unknown. */
3780 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3781 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3782 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3783 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3784 warning ("cast increases required alignment of target type");
3786 if (TREE_CODE (type) == INTEGER_TYPE
3787 && TREE_CODE (otype) == POINTER_TYPE
3788 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3789 && !TREE_CONSTANT (value))
3790 warning ("cast from pointer to integer of different size");
3792 if (warn_bad_function_cast
3793 && TREE_CODE (value) == CALL_EXPR
3794 && TREE_CODE (type) != TREE_CODE (otype))
3795 warning ("cast does not match function type");
3797 if (TREE_CODE (type) == POINTER_TYPE
3798 && TREE_CODE (otype) == INTEGER_TYPE
3799 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3800 /* Don't warn about converting any constant. */
3801 && !TREE_CONSTANT (value))
3802 warning ("cast to pointer from integer of different size");
3805 value = convert (type, value);
3807 /* Ignore any integer overflow caused by the cast. */
3808 if (TREE_CODE (value) == INTEGER_CST)
3810 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3811 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3815 /* Pedantically, don't ley (void *) (FOO *) 0 be a null pointer constant. */
3816 if (pedantic && TREE_CODE (value) == INTEGER_CST
3817 && TREE_CODE (expr) == INTEGER_CST
3818 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3819 value = non_lvalue (value);
3821 /* If pedantic, don't let a cast be an lvalue. */
3822 if (value == expr && pedantic)
3823 value = non_lvalue (value);
3828 /* Build an assignment expression of lvalue LHS from value RHS.
3829 MODIFYCODE is the code for a binary operator that we use
3830 to combine the old value of LHS with RHS to get the new value.
3831 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3834 build_modify_expr (lhs, modifycode, rhs)
3836 enum tree_code modifycode;
3838 register tree result;
3840 tree lhstype = TREE_TYPE (lhs);
3841 tree olhstype = lhstype;
3843 /* Types that aren't fully specified cannot be used in assignments. */
3844 lhs = require_complete_type (lhs);
3846 /* Avoid duplicate error messages from operands that had errors. */
3847 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3848 return error_mark_node;
3850 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3851 /* Do not use STRIP_NOPS here. We do not want an enumerator
3852 whose value is 0 to count as a null pointer constant. */
3853 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3854 rhs = TREE_OPERAND (rhs, 0);
3858 /* Handle control structure constructs used as "lvalues". */
3860 switch (TREE_CODE (lhs))
3862 /* Handle (a, b) used as an "lvalue". */
3864 pedantic_lvalue_warning (COMPOUND_EXPR);
3865 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1), modifycode, rhs);
3866 if (TREE_CODE (newrhs) == ERROR_MARK)
3867 return error_mark_node;
3868 return build (COMPOUND_EXPR, lhstype,
3869 TREE_OPERAND (lhs, 0), newrhs);
3871 /* Handle (a ? b : c) used as an "lvalue". */
3873 pedantic_lvalue_warning (COND_EXPR);
3874 rhs = save_expr (rhs);
3876 /* Produce (a ? (b = rhs) : (c = rhs))
3877 except that the RHS goes through a save-expr
3878 so the code to compute it is only emitted once. */
3880 = build_conditional_expr (TREE_OPERAND (lhs, 0),
3881 build_modify_expr (TREE_OPERAND (lhs, 1),
3883 build_modify_expr (TREE_OPERAND (lhs, 2),
3885 if (TREE_CODE (cond) == ERROR_MARK)
3887 /* Make sure the code to compute the rhs comes out
3888 before the split. */
3889 return build (COMPOUND_EXPR, TREE_TYPE (lhs),
3890 /* But cast it to void to avoid an "unused" error. */
3891 convert (void_type_node, rhs), cond);
3897 /* If a binary op has been requested, combine the old LHS value with the RHS
3898 producing the value we should actually store into the LHS. */
3900 if (modifycode != NOP_EXPR)
3902 lhs = stabilize_reference (lhs);
3903 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3906 /* Handle a cast used as an "lvalue".
3907 We have already performed any binary operator using the value as cast.
3908 Now convert the result to the cast type of the lhs,
3909 and then true type of the lhs and store it there;
3910 then convert result back to the cast type to be the value
3911 of the assignment. */
3913 switch (TREE_CODE (lhs))
3918 case FIX_TRUNC_EXPR:
3919 case FIX_FLOOR_EXPR:
3920 case FIX_ROUND_EXPR:
3922 if (TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
3923 || TREE_CODE (TREE_TYPE (newrhs)) == FUNCTION_TYPE)
3924 newrhs = default_conversion (newrhs);
3926 tree inner_lhs = TREE_OPERAND (lhs, 0);
3928 result = build_modify_expr (inner_lhs, NOP_EXPR,
3929 convert (TREE_TYPE (inner_lhs),
3930 convert (lhstype, newrhs)));
3931 if (TREE_CODE (result) == ERROR_MARK)
3933 pedantic_lvalue_warning (CONVERT_EXPR);
3934 return convert (TREE_TYPE (lhs), result);
3941 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3942 Reject anything strange now. */
3944 if (!lvalue_or_else (lhs, "invalid lvalue in assignment"))
3945 return error_mark_node;
3947 /* Warn about storing in something that is `const'. */
3949 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3950 || ((TREE_CODE (lhstype) == RECORD_TYPE
3951 || TREE_CODE (lhstype) == UNION_TYPE)
3952 && C_TYPE_FIELDS_READONLY (lhstype)))
3953 readonly_warning (lhs, "assignment");
3955 /* If storing into a structure or union member,
3956 it has probably been given type `int'.
3957 Compute the type that would go with
3958 the actual amount of storage the member occupies. */
3960 if (TREE_CODE (lhs) == COMPONENT_REF
3961 && (TREE_CODE (lhstype) == INTEGER_TYPE
3962 || TREE_CODE (lhstype) == REAL_TYPE
3963 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3964 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3966 /* If storing in a field that is in actuality a short or narrower than one,
3967 we must store in the field in its actual type. */
3969 if (lhstype != TREE_TYPE (lhs))
3971 lhs = copy_node (lhs);
3972 TREE_TYPE (lhs) = lhstype;
3975 /* Convert new value to destination type. */
3977 newrhs = convert_for_assignment (lhstype, newrhs, _("assignment"),
3978 NULL_TREE, NULL_TREE, 0);
3979 if (TREE_CODE (newrhs) == ERROR_MARK)
3980 return error_mark_node;
3982 result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
3983 TREE_SIDE_EFFECTS (result) = 1;
3985 /* If we got the LHS in a different type for storing in,
3986 convert the result back to the nominal type of LHS
3987 so that the value we return always has the same type
3988 as the LHS argument. */
3990 if (olhstype == TREE_TYPE (result))
3992 return convert_for_assignment (olhstype, result, _("assignment"),
3993 NULL_TREE, NULL_TREE, 0);
3996 /* Convert value RHS to type TYPE as preparation for an assignment
3997 to an lvalue of type TYPE.
3998 The real work of conversion is done by `convert'.
3999 The purpose of this function is to generate error messages
4000 for assignments that are not allowed in C.
4001 ERRTYPE is a string to use in error messages:
4002 "assignment", "return", etc. If it is null, this is parameter passing
4003 for a function call (and different error messages are output).
4005 FUNNAME is the name of the function being called,
4006 as an IDENTIFIER_NODE, or null.
4007 PARMNUM is the number of the argument, for printing in error messages. */
4010 convert_for_assignment (type, rhs, errtype, fundecl, funname, parmnum)
4012 const char *errtype;
4013 tree fundecl, funname;
4016 register enum tree_code codel = TREE_CODE (type);
4017 register tree rhstype;
4018 register enum tree_code coder;
4020 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4021 /* Do not use STRIP_NOPS here. We do not want an enumerator
4022 whose value is 0 to count as a null pointer constant. */
4023 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
4024 rhs = TREE_OPERAND (rhs, 0);
4026 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
4027 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
4028 rhs = default_conversion (rhs);
4029 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
4030 rhs = decl_constant_value (rhs);
4032 rhstype = TREE_TYPE (rhs);
4033 coder = TREE_CODE (rhstype);
4035 if (coder == ERROR_MARK)
4036 return error_mark_node;
4038 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
4040 overflow_warning (rhs);
4041 /* Check for Objective-C protocols. This will issue a warning if
4042 there are protocol violations. No need to use the return value. */
4043 maybe_objc_comptypes (type, rhstype, 0);
4047 if (coder == VOID_TYPE)
4049 error ("void value not ignored as it ought to be");
4050 return error_mark_node;
4052 /* A type converts to a reference to it.
4053 This code doesn't fully support references, it's just for the
4054 special case of va_start and va_copy. */
4055 if (codel == REFERENCE_TYPE
4056 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
4058 if (mark_addressable (rhs) == 0)
4059 return error_mark_node;
4060 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
4062 /* We already know that these two types are compatible, but they
4063 may not be exactly identical. In fact, `TREE_TYPE (type)' is
4064 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
4065 likely to be va_list, a typedef to __builtin_va_list, which
4066 is different enough that it will cause problems later. */
4067 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
4068 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
4070 rhs = build1 (NOP_EXPR, type, rhs);
4073 /* Arithmetic types all interconvert, and enum is treated like int. */
4074 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
4075 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE)
4076 && (coder == INTEGER_TYPE || coder == REAL_TYPE
4077 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE))
4078 return convert_and_check (type, rhs);
4080 /* Conversion to a transparent union from its member types.
4081 This applies only to function arguments. */
4082 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && ! errtype)
4085 tree marginal_memb_type = 0;
4087 for (memb_types = TYPE_FIELDS (type); memb_types;
4088 memb_types = TREE_CHAIN (memb_types))
4090 tree memb_type = TREE_TYPE (memb_types);
4092 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
4093 TYPE_MAIN_VARIANT (rhstype)))
4096 if (TREE_CODE (memb_type) != POINTER_TYPE)
4099 if (coder == POINTER_TYPE)
4101 register tree ttl = TREE_TYPE (memb_type);
4102 register tree ttr = TREE_TYPE (rhstype);
4104 /* Any non-function converts to a [const][volatile] void *
4105 and vice versa; otherwise, targets must be the same.
4106 Meanwhile, the lhs target must have all the qualifiers of
4108 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4109 || comp_target_types (memb_type, rhstype))
4111 /* If this type won't generate any warnings, use it. */
4112 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
4113 || ((TREE_CODE (ttr) == FUNCTION_TYPE
4114 && TREE_CODE (ttl) == FUNCTION_TYPE)
4115 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4116 == TYPE_QUALS (ttr))
4117 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4118 == TYPE_QUALS (ttl))))
4121 /* Keep looking for a better type, but remember this one. */
4122 if (! marginal_memb_type)
4123 marginal_memb_type = memb_type;
4127 /* Can convert integer zero to any pointer type. */
4128 if (integer_zerop (rhs)
4129 || (TREE_CODE (rhs) == NOP_EXPR
4130 && integer_zerop (TREE_OPERAND (rhs, 0))))
4132 rhs = null_pointer_node;
4137 if (memb_types || marginal_memb_type)
4141 /* We have only a marginally acceptable member type;
4142 it needs a warning. */
4143 register tree ttl = TREE_TYPE (marginal_memb_type);
4144 register tree ttr = TREE_TYPE (rhstype);
4146 /* Const and volatile mean something different for function
4147 types, so the usual warnings are not appropriate. */
4148 if (TREE_CODE (ttr) == FUNCTION_TYPE
4149 && TREE_CODE (ttl) == FUNCTION_TYPE)
4151 /* Because const and volatile on functions are
4152 restrictions that say the function will not do
4153 certain things, it is okay to use a const or volatile
4154 function where an ordinary one is wanted, but not
4156 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4157 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4158 errtype, funname, parmnum);
4160 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4161 warn_for_assignment ("%s discards qualifiers from pointer target type",
4166 if (pedantic && ! DECL_IN_SYSTEM_HEADER (fundecl))
4167 pedwarn ("ISO C prohibits argument conversion to union type");
4169 return build1 (NOP_EXPR, type, rhs);
4173 /* Conversions among pointers */
4174 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4175 && (coder == POINTER_TYPE || coder == REFERENCE_TYPE))
4177 register tree ttl = TREE_TYPE (type);
4178 register tree ttr = TREE_TYPE (rhstype);
4180 /* Any non-function converts to a [const][volatile] void *
4181 and vice versa; otherwise, targets must be the same.
4182 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
4183 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4184 || comp_target_types (type, rhstype)
4185 || (unsigned_type (TYPE_MAIN_VARIANT (ttl))
4186 == unsigned_type (TYPE_MAIN_VARIANT (ttr))))
4189 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
4192 /* Check TREE_CODE to catch cases like (void *) (char *) 0
4193 which are not ANSI null ptr constants. */
4194 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
4195 && TREE_CODE (ttl) == FUNCTION_TYPE)))
4196 warn_for_assignment ("ISO C forbids %s between function pointer and `void *'",
4197 errtype, funname, parmnum);
4198 /* Const and volatile mean something different for function types,
4199 so the usual warnings are not appropriate. */
4200 else if (TREE_CODE (ttr) != FUNCTION_TYPE
4201 && TREE_CODE (ttl) != FUNCTION_TYPE)
4203 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4204 warn_for_assignment ("%s discards qualifiers from pointer target type",
4205 errtype, funname, parmnum);
4206 /* If this is not a case of ignoring a mismatch in signedness,
4208 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4209 || comp_target_types (type, rhstype))
4211 /* If there is a mismatch, do warn. */
4213 warn_for_assignment ("pointer targets in %s differ in signedness",
4214 errtype, funname, parmnum);
4216 else if (TREE_CODE (ttl) == FUNCTION_TYPE
4217 && TREE_CODE (ttr) == FUNCTION_TYPE)
4219 /* Because const and volatile on functions are restrictions
4220 that say the function will not do certain things,
4221 it is okay to use a const or volatile function
4222 where an ordinary one is wanted, but not vice-versa. */
4223 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4224 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4225 errtype, funname, parmnum);
4229 warn_for_assignment ("%s from incompatible pointer type",
4230 errtype, funname, parmnum);
4231 return convert (type, rhs);
4233 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
4235 /* An explicit constant 0 can convert to a pointer,
4236 or one that results from arithmetic, even including
4237 a cast to integer type. */
4238 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
4240 ! (TREE_CODE (rhs) == NOP_EXPR
4241 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
4242 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
4243 && integer_zerop (TREE_OPERAND (rhs, 0))))
4245 warn_for_assignment ("%s makes pointer from integer without a cast",
4246 errtype, funname, parmnum);
4247 return convert (type, rhs);
4249 return null_pointer_node;
4251 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
4253 warn_for_assignment ("%s makes integer from pointer without a cast",
4254 errtype, funname, parmnum);
4255 return convert (type, rhs);
4262 tree selector = maybe_building_objc_message_expr ();
4264 if (selector && parmnum > 2)
4265 error ("incompatible type for argument %d of `%s'",
4266 parmnum - 2, IDENTIFIER_POINTER (selector));
4268 error ("incompatible type for argument %d of `%s'",
4269 parmnum, IDENTIFIER_POINTER (funname));
4272 error ("incompatible type for argument %d of indirect function call",
4276 error ("incompatible types in %s", errtype);
4278 return error_mark_node;
4281 /* Print a warning using MSGID.
4282 It gets OPNAME as its one parameter.
4283 If OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
4284 FUNCTION and ARGNUM are handled specially if we are building an
4285 Objective-C selector. */
4288 warn_for_assignment (msgid, opname, function, argnum)
4296 tree selector = maybe_building_objc_message_expr ();
4299 if (selector && argnum > 2)
4301 function = selector;
4306 /* Function name is known; supply it. */
4307 const char *argstring = _("passing arg %d of `%s'");
4308 new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4309 + strlen (argstring) + 1 + 25
4311 sprintf (new_opname, argstring, argnum,
4312 IDENTIFIER_POINTER (function));
4316 /* Function name unknown (call through ptr); just give arg number.*/
4317 const char *argnofun = _("passing arg %d of pointer to function");
4318 new_opname = (char *) alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1);
4319 sprintf (new_opname, argnofun, argnum);
4321 opname = new_opname;
4323 pedwarn (msgid, opname);
4326 /* If VALUE is a compound expr all of whose expressions are constant, then
4327 return its value. Otherwise, return error_mark_node.
4329 This is for handling COMPOUND_EXPRs as initializer elements
4330 which is allowed with a warning when -pedantic is specified. */
4333 valid_compound_expr_initializer (value, endtype)
4337 if (TREE_CODE (value) == COMPOUND_EXPR)
4339 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4341 return error_mark_node;
4342 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4345 else if (! TREE_CONSTANT (value)
4346 && ! initializer_constant_valid_p (value, endtype))
4347 return error_mark_node;
4352 /* Perform appropriate conversions on the initial value of a variable,
4353 store it in the declaration DECL,
4354 and print any error messages that are appropriate.
4355 If the init is invalid, store an ERROR_MARK. */
4358 store_init_value (decl, init)
4361 register tree value, type;
4363 /* If variable's type was invalidly declared, just ignore it. */
4365 type = TREE_TYPE (decl);
4366 if (TREE_CODE (type) == ERROR_MARK)
4369 /* Digest the specified initializer into an expression. */
4371 value = digest_init (type, init, TREE_STATIC (decl),
4372 TREE_STATIC (decl) || pedantic);
4374 /* Store the expression if valid; else report error. */
4377 /* Note that this is the only place we can detect the error
4378 in a case such as struct foo bar = (struct foo) { x, y };
4379 where there is one initial value which is a constructor expression. */
4380 if (value == error_mark_node)
4382 else if (TREE_STATIC (decl) && ! TREE_CONSTANT (value))
4384 error ("initializer for static variable is not constant");
4385 value = error_mark_node;
4387 else if (TREE_STATIC (decl)
4388 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
4390 error ("initializer for static variable uses complicated arithmetic");
4391 value = error_mark_node;
4395 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
4397 if (! TREE_CONSTANT (value))
4398 pedwarn ("aggregate initializer is not constant");
4399 else if (! TREE_STATIC (value))
4400 pedwarn ("aggregate initializer uses complicated arithmetic");
4405 if (warn_traditional
4406 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && ! TREE_STATIC (decl))
4407 warning ("traditional C rejects automatic aggregate initialization");
4409 DECL_INITIAL (decl) = value;
4411 /* ANSI wants warnings about out-of-range constant initializers. */
4412 STRIP_TYPE_NOPS (value);
4413 constant_expression_warning (value);
4416 /* Methods for storing and printing names for error messages. */
4418 /* Implement a spelling stack that allows components of a name to be pushed
4419 and popped. Each element on the stack is this structure. */
4431 #define SPELLING_STRING 1
4432 #define SPELLING_MEMBER 2
4433 #define SPELLING_BOUNDS 3
4435 static struct spelling *spelling; /* Next stack element (unused). */
4436 static struct spelling *spelling_base; /* Spelling stack base. */
4437 static int spelling_size; /* Size of the spelling stack. */
4439 /* Macros to save and restore the spelling stack around push_... functions.
4440 Alternative to SAVE_SPELLING_STACK. */
4442 #define SPELLING_DEPTH() (spelling - spelling_base)
4443 #define RESTORE_SPELLING_DEPTH(depth) (spelling = spelling_base + depth)
4445 /* Save and restore the spelling stack around arbitrary C code. */
4447 #define SAVE_SPELLING_DEPTH(code) \
4449 int __depth = SPELLING_DEPTH (); \
4451 RESTORE_SPELLING_DEPTH (__depth); \
4454 /* Push an element on the spelling stack with type KIND and assign VALUE
4457 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4459 int depth = SPELLING_DEPTH (); \
4461 if (depth >= spelling_size) \
4463 spelling_size += 10; \
4464 if (spelling_base == 0) \
4466 = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \
4469 = (struct spelling *) xrealloc (spelling_base, \
4470 spelling_size * sizeof (struct spelling)); \
4471 RESTORE_SPELLING_DEPTH (depth); \
4474 spelling->kind = (KIND); \
4475 spelling->MEMBER = (VALUE); \
4479 /* Push STRING on the stack. Printed literally. */
4482 push_string (string)
4485 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4488 /* Push a member name on the stack. Printed as '.' STRING. */
4491 push_member_name (decl)
4496 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4497 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4500 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4503 push_array_bounds (bounds)
4506 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4509 /* Compute the maximum size in bytes of the printed spelling. */
4514 register int size = 0;
4515 register struct spelling *p;
4517 for (p = spelling_base; p < spelling; p++)
4519 if (p->kind == SPELLING_BOUNDS)
4522 size += strlen (p->u.s) + 1;
4528 /* Print the spelling to BUFFER and return it. */
4531 print_spelling (buffer)
4532 register char *buffer;
4534 register char *d = buffer;
4535 register struct spelling *p;
4537 for (p = spelling_base; p < spelling; p++)
4538 if (p->kind == SPELLING_BOUNDS)
4540 sprintf (d, "[%d]", p->u.i);
4545 register const char *s;
4546 if (p->kind == SPELLING_MEMBER)
4548 for (s = p->u.s; (*d = *s++); d++)
4555 /* Issue an error message for a bad initializer component.
4556 MSGID identifies the message.
4557 The component name is taken from the spelling stack. */
4565 error ("%s", msgid);
4566 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4568 error ("(near initialization for `%s')", ofwhat);
4571 /* Issue a pedantic warning for a bad initializer component.
4572 MSGID identifies the message.
4573 The component name is taken from the spelling stack. */
4576 pedwarn_init (msgid)
4581 pedwarn ("%s", msgid);
4582 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4584 pedwarn ("(near initialization for `%s')", ofwhat);
4587 /* Issue a warning for a bad initializer component.
4588 MSGID identifies the message.
4589 The component name is taken from the spelling stack. */
4592 warning_init (msgid)
4597 warning ("%s", msgid);
4598 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4600 warning ("(near initialization for `%s')", ofwhat);
4603 /* Digest the parser output INIT as an initializer for type TYPE.
4604 Return a C expression of type TYPE to represent the initial value.
4606 The arguments REQUIRE_CONSTANT and CONSTRUCTOR_CONSTANT request errors
4607 if non-constant initializers or elements are seen. CONSTRUCTOR_CONSTANT
4608 applies only to elements of constructors. */
4611 digest_init (type, init, require_constant, constructor_constant)
4613 int require_constant, constructor_constant;
4615 enum tree_code code = TREE_CODE (type);
4616 tree inside_init = init;
4618 if (type == error_mark_node
4619 || init == error_mark_node
4620 || TREE_TYPE (init) == error_mark_node)
4621 return error_mark_node;
4623 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4624 /* Do not use STRIP_NOPS here. We do not want an enumerator
4625 whose value is 0 to count as a null pointer constant. */
4626 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4627 inside_init = TREE_OPERAND (init, 0);
4629 /* Initialization of an array of chars from a string constant
4630 optionally enclosed in braces. */
4632 if (code == ARRAY_TYPE)
4634 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4635 if ((typ1 == char_type_node
4636 || typ1 == signed_char_type_node
4637 || typ1 == unsigned_char_type_node
4638 || typ1 == unsigned_wchar_type_node
4639 || typ1 == signed_wchar_type_node)
4640 && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
4642 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4643 TYPE_MAIN_VARIANT (type)))
4646 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4648 && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
4650 error_init ("char-array initialized from wide string");
4651 return error_mark_node;
4653 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4655 && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
4657 error_init ("int-array initialized from non-wide string");
4658 return error_mark_node;
4661 TREE_TYPE (inside_init) = type;
4662 if (TYPE_DOMAIN (type) != 0
4663 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4664 /* Subtract 1 (or sizeof (wchar_t))
4665 because it's ok to ignore the terminating null char
4666 that is counted in the length of the constant. */
4667 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4668 TREE_STRING_LENGTH (inside_init)
4669 - ((TYPE_PRECISION (typ1)
4670 != TYPE_PRECISION (char_type_node))
4671 ? (TYPE_PRECISION (wchar_type_node)
4674 pedwarn_init ("initializer-string for array of chars is too long");
4680 /* Any type can be initialized
4681 from an expression of the same type, optionally with braces. */
4683 if (inside_init && TREE_TYPE (inside_init) != 0
4684 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4685 TYPE_MAIN_VARIANT (type))
4686 || (code == ARRAY_TYPE
4687 && comptypes (TREE_TYPE (inside_init), type))
4688 || (code == POINTER_TYPE
4689 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4690 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)
4691 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4692 TREE_TYPE (type)))))
4694 if (code == POINTER_TYPE
4695 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4696 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE))
4697 inside_init = default_conversion (inside_init);
4698 else if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4699 && TREE_CODE (inside_init) != CONSTRUCTOR)
4701 error_init ("array initialized from non-constant array expression");
4702 return error_mark_node;
4705 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4706 inside_init = decl_constant_value (inside_init);
4708 /* Compound expressions can only occur here if -pedantic or
4709 -pedantic-errors is specified. In the later case, we always want
4710 an error. In the former case, we simply want a warning. */
4711 if (require_constant && pedantic
4712 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4715 = valid_compound_expr_initializer (inside_init,
4716 TREE_TYPE (inside_init));
4717 if (inside_init == error_mark_node)
4718 error_init ("initializer element is not constant");
4720 pedwarn_init ("initializer element is not constant");
4721 if (flag_pedantic_errors)
4722 inside_init = error_mark_node;
4724 else if (require_constant && ! TREE_CONSTANT (inside_init))
4726 error_init ("initializer element is not constant");
4727 inside_init = error_mark_node;
4729 else if (require_constant
4730 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4732 error_init ("initializer element is not computable at load time");
4733 inside_init = error_mark_node;
4739 /* Handle scalar types, including conversions. */
4741 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4742 || code == ENUMERAL_TYPE || code == COMPLEX_TYPE)
4744 /* Note that convert_for_assignment calls default_conversion
4745 for arrays and functions. We must not call it in the
4746 case where inside_init is a null pointer constant. */
4748 = convert_for_assignment (type, init, _("initialization"),
4749 NULL_TREE, NULL_TREE, 0);
4751 if (require_constant && ! TREE_CONSTANT (inside_init))
4753 error_init ("initializer element is not constant");
4754 inside_init = error_mark_node;
4756 else if (require_constant
4757 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4759 error_init ("initializer element is not computable at load time");
4760 inside_init = error_mark_node;
4766 /* Come here only for records and arrays. */
4768 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4770 error_init ("variable-sized object may not be initialized");
4771 return error_mark_node;
4774 /* Traditionally, you can write struct foo x = 0;
4775 and it initializes the first element of x to 0. */
4776 if (flag_traditional)
4778 tree top = 0, prev = 0, otype = type;
4779 while (TREE_CODE (type) == RECORD_TYPE
4780 || TREE_CODE (type) == ARRAY_TYPE
4781 || TREE_CODE (type) == QUAL_UNION_TYPE
4782 || TREE_CODE (type) == UNION_TYPE)
4784 tree temp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
4788 TREE_OPERAND (prev, 1) = build_tree_list (NULL_TREE, temp);
4790 if (TREE_CODE (type) == ARRAY_TYPE)
4791 type = TREE_TYPE (type);
4792 else if (TYPE_FIELDS (type))
4793 type = TREE_TYPE (TYPE_FIELDS (type));
4796 error_init ("invalid initializer");
4797 return error_mark_node;
4803 TREE_OPERAND (prev, 1)
4804 = build_tree_list (NULL_TREE,
4805 digest_init (type, init, require_constant,
4806 constructor_constant));
4810 return error_mark_node;
4812 error_init ("invalid initializer");
4813 return error_mark_node;
4816 /* Handle initializers that use braces. */
4818 /* Type of object we are accumulating a constructor for.
4819 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4820 static tree constructor_type;
4822 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4824 static tree constructor_fields;
4826 /* For an ARRAY_TYPE, this is the specified index
4827 at which to store the next element we get. */
4828 static tree constructor_index;
4830 /* For an ARRAY_TYPE, this is the end index of the range
4831 to initialize with the next element, or NULL in the ordinary case
4832 where the element is used just once. */
4833 static tree constructor_range_end;
4835 /* For an ARRAY_TYPE, this is the maximum index. */
4836 static tree constructor_max_index;
4838 /* For a RECORD_TYPE, this is the first field not yet written out. */
4839 static tree constructor_unfilled_fields;
4841 /* For an ARRAY_TYPE, this is the index of the first element
4842 not yet written out. */
4843 static tree constructor_unfilled_index;
4845 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4846 This is so we can generate gaps between fields, when appropriate. */
4847 static tree constructor_bit_index;
4849 /* If we are saving up the elements rather than allocating them,
4850 this is the list of elements so far (in reverse order,
4851 most recent first). */
4852 static tree constructor_elements;
4854 /* 1 if so far this constructor's elements are all compile-time constants. */
4855 static int constructor_constant;
4857 /* 1 if so far this constructor's elements are all valid address constants. */
4858 static int constructor_simple;
4860 /* 1 if this constructor is erroneous so far. */
4861 static int constructor_erroneous;
4863 /* 1 if have called defer_addressed_constants. */
4864 static int constructor_subconstants_deferred;
4866 /* Structure for managing pending initializer elements, organized as an
4871 struct init_node *left, *right;
4872 struct init_node *parent;
4878 /* Tree of pending elements at this constructor level.
4879 These are elements encountered out of order
4880 which belong at places we haven't reached yet in actually
4882 Will never hold tree nodes across GC runs. */
4883 static struct init_node *constructor_pending_elts;
4885 /* The SPELLING_DEPTH of this constructor. */
4886 static int constructor_depth;
4888 /* 0 if implicitly pushing constructor levels is allowed. */
4889 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4891 static int require_constant_value;
4892 static int require_constant_elements;
4894 /* 1 if it is ok to output this constructor as we read it.
4895 0 means must accumulate a CONSTRUCTOR expression. */
4896 static int constructor_incremental;
4898 /* DECL node for which an initializer is being read.
4899 0 means we are reading a constructor expression
4900 such as (struct foo) {...}. */
4901 static tree constructor_decl;
4903 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4904 static char *constructor_asmspec;
4906 /* Nonzero if this is an initializer for a top-level decl. */
4907 static int constructor_top_level;
4910 /* This stack has a level for each implicit or explicit level of
4911 structuring in the initializer, including the outermost one. It
4912 saves the values of most of the variables above. */
4914 struct constructor_stack
4916 struct constructor_stack *next;
4922 tree unfilled_index;
4923 tree unfilled_fields;
4927 struct init_node *pending_elts;
4929 /* If nonzero, this value should replace the entire
4930 constructor at this level. */
4931 tree replacement_value;
4940 struct constructor_stack *constructor_stack;
4942 /* This stack records separate initializers that are nested.
4943 Nested initializers can't happen in ANSI C, but GNU C allows them
4944 in cases like { ... (struct foo) { ... } ... }. */
4946 struct initializer_stack
4948 struct initializer_stack *next;
4951 struct constructor_stack *constructor_stack;
4953 struct spelling *spelling;
4954 struct spelling *spelling_base;
4958 char require_constant_value;
4959 char require_constant_elements;
4963 struct initializer_stack *initializer_stack;
4965 /* Prepare to parse and output the initializer for variable DECL. */
4968 start_init (decl, asmspec_tree, top_level)
4974 struct initializer_stack *p
4975 = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack));
4979 asmspec = TREE_STRING_POINTER (asmspec_tree);
4981 p->decl = constructor_decl;
4982 p->asmspec = constructor_asmspec;
4983 p->incremental = constructor_incremental;
4984 p->require_constant_value = require_constant_value;
4985 p->require_constant_elements = require_constant_elements;
4986 p->constructor_stack = constructor_stack;
4987 p->elements = constructor_elements;
4988 p->spelling = spelling;
4989 p->spelling_base = spelling_base;
4990 p->spelling_size = spelling_size;
4991 p->deferred = constructor_subconstants_deferred;
4992 p->top_level = constructor_top_level;
4993 p->next = initializer_stack;
4994 initializer_stack = p;
4996 constructor_decl = decl;
4997 constructor_incremental = top_level;
4998 constructor_asmspec = asmspec;
4999 constructor_subconstants_deferred = 0;
5000 constructor_top_level = top_level;
5004 require_constant_value = TREE_STATIC (decl);
5005 require_constant_elements
5006 = ((TREE_STATIC (decl) || pedantic)
5007 /* For a scalar, you can always use any value to initialize,
5008 even within braces. */
5009 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
5010 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5011 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
5012 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
5013 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
5014 constructor_incremental |= TREE_STATIC (decl);
5018 require_constant_value = 0;
5019 require_constant_elements = 0;
5020 locus = "(anonymous)";
5023 constructor_stack = 0;
5025 missing_braces_mentioned = 0;
5029 RESTORE_SPELLING_DEPTH (0);
5032 push_string (locus);
5038 struct initializer_stack *p = initializer_stack;
5040 /* Output subconstants (string constants, usually)
5041 that were referenced within this initializer and saved up.
5042 Must do this if and only if we called defer_addressed_constants. */
5043 if (constructor_subconstants_deferred)
5044 output_deferred_addressed_constants ();
5046 /* Free the whole constructor stack of this initializer. */
5047 while (constructor_stack)
5049 struct constructor_stack *q = constructor_stack;
5050 constructor_stack = q->next;
5054 /* Pop back to the data of the outer initializer (if any). */
5055 constructor_decl = p->decl;
5056 constructor_asmspec = p->asmspec;
5057 constructor_incremental = p->incremental;
5058 require_constant_value = p->require_constant_value;
5059 require_constant_elements = p->require_constant_elements;
5060 constructor_stack = p->constructor_stack;
5061 constructor_elements = p->elements;
5062 spelling = p->spelling;
5063 spelling_base = p->spelling_base;
5064 spelling_size = p->spelling_size;
5065 constructor_subconstants_deferred = p->deferred;
5066 constructor_top_level = p->top_level;
5067 initializer_stack = p->next;
5071 /* Call here when we see the initializer is surrounded by braces.
5072 This is instead of a call to push_init_level;
5073 it is matched by a call to pop_init_level.
5075 TYPE is the type to initialize, for a constructor expression.
5076 For an initializer for a decl, TYPE is zero. */
5079 really_start_incremental_init (type)
5082 struct constructor_stack *p
5083 = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5086 type = TREE_TYPE (constructor_decl);
5088 /* Turn off constructor_incremental if type is a struct with bitfields.
5089 Do this before the first push, so that the corrected value
5090 is available in finish_init. */
5091 check_init_type_bitfields (type);
5093 p->type = constructor_type;
5094 p->fields = constructor_fields;
5095 p->index = constructor_index;
5096 p->range_end = constructor_range_end;
5097 p->max_index = constructor_max_index;
5098 p->unfilled_index = constructor_unfilled_index;
5099 p->unfilled_fields = constructor_unfilled_fields;
5100 p->bit_index = constructor_bit_index;
5101 p->elements = constructor_elements;
5102 p->constant = constructor_constant;
5103 p->simple = constructor_simple;
5104 p->erroneous = constructor_erroneous;
5105 p->pending_elts = constructor_pending_elts;
5106 p->depth = constructor_depth;
5107 p->replacement_value = 0;
5109 p->incremental = constructor_incremental;
5112 constructor_stack = p;
5114 constructor_constant = 1;
5115 constructor_simple = 1;
5116 constructor_depth = SPELLING_DEPTH ();
5117 constructor_elements = 0;
5118 constructor_pending_elts = 0;
5119 constructor_type = type;
5121 if (TREE_CODE (constructor_type) == RECORD_TYPE
5122 || TREE_CODE (constructor_type) == UNION_TYPE)
5124 constructor_fields = TYPE_FIELDS (constructor_type);
5125 /* Skip any nameless bit fields at the beginning. */
5126 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5127 && DECL_NAME (constructor_fields) == 0)
5128 constructor_fields = TREE_CHAIN (constructor_fields);
5130 constructor_unfilled_fields = constructor_fields;
5131 constructor_bit_index = bitsize_zero_node;
5133 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5135 constructor_range_end = 0;
5136 if (TYPE_DOMAIN (constructor_type))
5138 constructor_max_index
5139 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5141 = convert (bitsizetype,
5142 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5145 constructor_index = bitsize_zero_node;
5147 constructor_unfilled_index = constructor_index;
5151 /* Handle the case of int x = {5}; */
5152 constructor_fields = constructor_type;
5153 constructor_unfilled_fields = constructor_type;
5156 if (constructor_incremental)
5158 make_decl_rtl (constructor_decl, constructor_asmspec,
5159 constructor_top_level);
5160 assemble_variable (constructor_decl, constructor_top_level, 0, 1);
5162 defer_addressed_constants ();
5163 constructor_subconstants_deferred = 1;
5167 /* Push down into a subobject, for initialization.
5168 If this is for an explicit set of braces, IMPLICIT is 0.
5169 If it is because the next element belongs at a lower level,
5173 push_init_level (implicit)
5176 struct constructor_stack *p;
5178 /* If we've exhausted any levels that didn't have braces,
5180 while (constructor_stack->implicit)
5182 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5183 || TREE_CODE (constructor_type) == UNION_TYPE)
5184 && constructor_fields == 0)
5185 process_init_element (pop_init_level (1));
5186 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5187 && tree_int_cst_lt (constructor_max_index, constructor_index))
5188 process_init_element (pop_init_level (1));
5193 /* Structure elements may require alignment. Do this now if necessary
5194 for the subaggregate, and if it comes next in sequence. Don't do
5195 this for subaggregates that will go on the pending list. */
5196 if (constructor_incremental && constructor_type != 0
5197 && TREE_CODE (constructor_type) == RECORD_TYPE && constructor_fields
5198 && constructor_fields == constructor_unfilled_fields)
5200 /* Advance to offset of this element. */
5201 if (! tree_int_cst_equal (constructor_bit_index,
5202 bit_position (constructor_fields)))
5205 (size_binop (TRUNC_DIV_EXPR,
5206 size_binop (MINUS_EXPR,
5207 bit_position (constructor_fields),
5208 constructor_bit_index),
5212 /* Indicate that we have now filled the structure up to the current
5214 constructor_unfilled_fields = constructor_fields;
5217 p = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5218 p->type = constructor_type;
5219 p->fields = constructor_fields;
5220 p->index = constructor_index;
5221 p->range_end = constructor_range_end;
5222 p->max_index = constructor_max_index;
5223 p->unfilled_index = constructor_unfilled_index;
5224 p->unfilled_fields = constructor_unfilled_fields;
5225 p->bit_index = constructor_bit_index;
5226 p->elements = constructor_elements;
5227 p->constant = constructor_constant;
5228 p->simple = constructor_simple;
5229 p->erroneous = constructor_erroneous;
5230 p->pending_elts = constructor_pending_elts;
5231 p->depth = constructor_depth;
5232 p->replacement_value = 0;
5233 p->implicit = implicit;
5234 p->incremental = constructor_incremental;
5236 p->next = constructor_stack;
5237 constructor_stack = p;
5239 constructor_constant = 1;
5240 constructor_simple = 1;
5241 constructor_depth = SPELLING_DEPTH ();
5242 constructor_elements = 0;
5243 constructor_pending_elts = 0;
5245 /* Don't die if an entire brace-pair level is superfluous
5246 in the containing level. */
5247 if (constructor_type == 0)
5249 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5250 || TREE_CODE (constructor_type) == UNION_TYPE)
5252 /* Don't die if there are extra init elts at the end. */
5253 if (constructor_fields == 0)
5254 constructor_type = 0;
5257 constructor_type = TREE_TYPE (constructor_fields);
5258 push_member_name (constructor_fields);
5259 constructor_depth++;
5260 if (constructor_fields != constructor_unfilled_fields)
5261 constructor_incremental = 0;
5264 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5266 constructor_type = TREE_TYPE (constructor_type);
5267 push_array_bounds (tree_low_cst (constructor_index, 0));
5268 constructor_depth++;
5269 if (! tree_int_cst_equal (constructor_index, constructor_unfilled_index)
5270 || constructor_range_end != 0)
5271 constructor_incremental = 0;
5274 if (constructor_type == 0)
5276 error_init ("extra brace group at end of initializer");
5277 constructor_fields = 0;
5278 constructor_unfilled_fields = 0;
5282 /* Turn off constructor_incremental if type is a struct with bitfields. */
5283 check_init_type_bitfields (constructor_type);
5285 if (implicit && warn_missing_braces && !missing_braces_mentioned)
5287 missing_braces_mentioned = 1;
5288 warning_init ("missing braces around initializer");
5291 if (TREE_CODE (constructor_type) == RECORD_TYPE
5292 || TREE_CODE (constructor_type) == UNION_TYPE)
5294 constructor_fields = TYPE_FIELDS (constructor_type);
5295 /* Skip any nameless bit fields at the beginning. */
5296 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5297 && DECL_NAME (constructor_fields) == 0)
5298 constructor_fields = TREE_CHAIN (constructor_fields);
5300 constructor_unfilled_fields = constructor_fields;
5301 constructor_bit_index = bitsize_zero_node;
5303 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5305 constructor_range_end = 0;
5306 if (TYPE_DOMAIN (constructor_type))
5308 constructor_max_index
5309 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5311 = convert (bitsizetype,
5313 (TYPE_DOMAIN (constructor_type)));
5316 constructor_index = bitsize_zero_node;
5318 constructor_unfilled_index = constructor_index;
5322 warning_init ("braces around scalar initializer");
5323 constructor_fields = constructor_type;
5324 constructor_unfilled_fields = constructor_type;
5328 /* Don't read a struct incrementally if it has any bitfields,
5329 because the incremental reading code doesn't know how to
5330 handle bitfields yet. */
5333 check_init_type_bitfields (type)
5336 if (TREE_CODE (type) == RECORD_TYPE)
5339 for (tail = TYPE_FIELDS (type); tail;
5340 tail = TREE_CHAIN (tail))
5342 if (DECL_C_BIT_FIELD (tail))
5344 constructor_incremental = 0;
5348 check_init_type_bitfields (TREE_TYPE (tail));
5352 else if (TREE_CODE (type) == UNION_TYPE)
5354 tree tail = TYPE_FIELDS (type);
5355 if (tail && DECL_C_BIT_FIELD (tail))
5356 /* We also use the nonincremental algorithm for initiliazation
5357 of unions whose first member is a bitfield, becuase the
5358 incremental algorithm has no code for dealing with
5360 constructor_incremental = 0;
5363 else if (TREE_CODE (type) == ARRAY_TYPE)
5364 check_init_type_bitfields (TREE_TYPE (type));
5367 /* At the end of an implicit or explicit brace level,
5368 finish up that level of constructor.
5369 If we were outputting the elements as they are read, return 0
5370 from inner levels (process_init_element ignores that),
5371 but return error_mark_node from the outermost level
5372 (that's what we want to put in DECL_INITIAL).
5373 Otherwise, return a CONSTRUCTOR expression. */
5376 pop_init_level (implicit)
5379 struct constructor_stack *p;
5380 HOST_WIDE_INT size = 0;
5381 tree constructor = 0;
5385 /* When we come to an explicit close brace,
5386 pop any inner levels that didn't have explicit braces. */
5387 while (constructor_stack->implicit)
5388 process_init_element (pop_init_level (1));
5391 p = constructor_stack;
5393 if (constructor_type != 0)
5394 size = int_size_in_bytes (constructor_type);
5396 /* Warn when some struct elements are implicitly initialized to zero. */
5399 && TREE_CODE (constructor_type) == RECORD_TYPE
5400 && constructor_unfilled_fields)
5402 push_member_name (constructor_unfilled_fields);
5403 warning_init ("missing initializer");
5404 RESTORE_SPELLING_DEPTH (constructor_depth);
5407 /* Now output all pending elements. */
5408 output_pending_init_elements (1);
5410 #if 0 /* c-parse.in warns about {}. */
5411 /* In ANSI, each brace level must have at least one element. */
5412 if (! implicit && pedantic
5413 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5414 ? integer_zerop (constructor_unfilled_index)
5415 : constructor_unfilled_fields == TYPE_FIELDS (constructor_type)))
5416 pedwarn_init ("empty braces in initializer");
5419 /* Pad out the end of the structure. */
5421 if (p->replacement_value)
5423 /* If this closes a superfluous brace pair,
5424 just pass out the element between them. */
5425 constructor = p->replacement_value;
5426 /* If this is the top level thing within the initializer,
5427 and it's for a variable, then since we already called
5428 assemble_variable, we must output the value now. */
5429 if (p->next == 0 && constructor_decl != 0
5430 && constructor_incremental)
5432 constructor = digest_init (constructor_type, constructor,
5433 require_constant_value,
5434 require_constant_elements);
5436 /* If initializing an array of unknown size,
5437 determine the size now. */
5438 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5439 && TYPE_DOMAIN (constructor_type) == 0)
5441 /* We shouldn't have an incomplete array type within
5443 if (constructor_stack->next)
5446 if (complete_array_type (constructor_type, constructor, 0))
5449 size = int_size_in_bytes (constructor_type);
5452 output_constant (constructor, size);
5455 else if (constructor_type == 0)
5457 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5458 && TREE_CODE (constructor_type) != UNION_TYPE
5459 && TREE_CODE (constructor_type) != ARRAY_TYPE
5460 && ! constructor_incremental)
5462 /* A nonincremental scalar initializer--just return
5463 the element, after verifying there is just one. */
5464 if (constructor_elements == 0)
5466 error_init ("empty scalar initializer");
5467 constructor = error_mark_node;
5469 else if (TREE_CHAIN (constructor_elements) != 0)
5471 error_init ("extra elements in scalar initializer");
5472 constructor = TREE_VALUE (constructor_elements);
5475 constructor = TREE_VALUE (constructor_elements);
5477 else if (! constructor_incremental)
5479 if (constructor_erroneous)
5480 constructor = error_mark_node;
5483 constructor = build (CONSTRUCTOR, constructor_type, NULL_TREE,
5484 nreverse (constructor_elements));
5485 if (constructor_constant)
5486 TREE_CONSTANT (constructor) = 1;
5487 if (constructor_constant && constructor_simple)
5488 TREE_STATIC (constructor) = 1;
5495 if (TREE_CODE (constructor_type) == RECORD_TYPE
5496 || TREE_CODE (constructor_type) == UNION_TYPE)
5497 /* Find the offset of the end of that field. */
5498 filled = size_binop (CEIL_DIV_EXPR, constructor_bit_index,
5501 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5503 /* If initializing an array of unknown size,
5504 determine the size now. */
5505 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5506 && TYPE_DOMAIN (constructor_type) == 0)
5509 = copy_node (size_diffop (constructor_unfilled_index,
5512 TYPE_DOMAIN (constructor_type) = build_index_type (maxindex);
5513 TREE_TYPE (maxindex) = TYPE_DOMAIN (constructor_type);
5515 /* TYPE_MAX_VALUE is always one less than the number of elements
5516 in the array, because we start counting at zero. Therefore,
5517 warn only if the value is less than zero. */
5519 && (tree_int_cst_sgn
5520 (TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5522 error_with_decl (constructor_decl,
5523 "zero or negative array size `%s'");
5525 layout_type (constructor_type);
5526 size = int_size_in_bytes (constructor_type);
5530 = size_binop (MULT_EXPR, constructor_unfilled_index,
5531 convert (bitsizetype,
5533 (TREE_TYPE (constructor_type))));
5539 assemble_zeros (size - tree_low_cst (filled, 1));
5543 constructor_type = p->type;
5544 constructor_fields = p->fields;
5545 constructor_index = p->index;
5546 constructor_range_end = p->range_end;
5547 constructor_max_index = p->max_index;
5548 constructor_unfilled_index = p->unfilled_index;
5549 constructor_unfilled_fields = p->unfilled_fields;
5550 constructor_bit_index = p->bit_index;
5551 constructor_elements = p->elements;
5552 constructor_constant = p->constant;
5553 constructor_simple = p->simple;
5554 constructor_erroneous = p->erroneous;
5555 constructor_pending_elts = p->pending_elts;
5556 constructor_depth = p->depth;
5557 constructor_incremental = p->incremental;
5558 RESTORE_SPELLING_DEPTH (constructor_depth);
5560 constructor_stack = p->next;
5563 if (constructor == 0)
5565 if (constructor_stack == 0)
5566 return error_mark_node;
5572 /* Within an array initializer, specify the next index to be initialized.
5573 FIRST is that index. If LAST is nonzero, then initialize a range
5574 of indices, running from FIRST through LAST. */
5577 set_init_index (first, last)
5580 while ((TREE_CODE (first) == NOP_EXPR
5581 || TREE_CODE (first) == CONVERT_EXPR
5582 || TREE_CODE (first) == NON_LVALUE_EXPR)
5583 && (TYPE_MODE (TREE_TYPE (first))
5584 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5585 first = TREE_OPERAND (first, 0);
5588 while ((TREE_CODE (last) == NOP_EXPR
5589 || TREE_CODE (last) == CONVERT_EXPR
5590 || TREE_CODE (last) == NON_LVALUE_EXPR)
5591 && (TYPE_MODE (TREE_TYPE (last))
5592 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5593 last = TREE_OPERAND (last, 0);
5595 if (TREE_CODE (first) != INTEGER_CST)
5596 error_init ("nonconstant array index in initializer");
5597 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5598 error_init ("nonconstant array index in initializer");
5599 else if (! constructor_unfilled_index)
5600 error_init ("array index in non-array initializer");
5601 else if (tree_int_cst_lt (first, constructor_unfilled_index))
5602 error_init ("duplicate array index in initializer");
5605 constructor_index = convert (bitsizetype, first);
5607 if (last != 0 && tree_int_cst_lt (last, first))
5608 error_init ("empty index range in initializer");
5612 pedwarn ("ISO C89 forbids specifying element to initialize");
5614 constructor_range_end = last ? convert (bitsizetype, last) : 0;
5619 /* Within a struct initializer, specify the next field to be initialized. */
5622 set_init_label (fieldname)
5628 /* Don't die if an entire brace-pair level is superfluous
5629 in the containing level. */
5630 if (constructor_type == 0)
5633 for (tail = TYPE_FIELDS (constructor_type); tail;
5634 tail = TREE_CHAIN (tail))
5636 if (tail == constructor_unfilled_fields)
5638 if (DECL_NAME (tail) == fieldname)
5643 error ("unknown field `%s' specified in initializer",
5644 IDENTIFIER_POINTER (fieldname));
5646 error ("field `%s' already initialized",
5647 IDENTIFIER_POINTER (fieldname));
5650 constructor_fields = tail;
5652 pedwarn ("ISO C89 forbids specifying structure member to initialize");
5656 /* Add a new initializer to the tree of pending initializers. PURPOSE
5657 indentifies the initializer, either array index or field in a structure.
5658 VALUE is the value of that index or field. */
5661 add_pending_init (purpose, value)
5662 tree purpose, value;
5664 struct init_node *p, **q, *r;
5666 q = &constructor_pending_elts;
5669 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5674 if (tree_int_cst_lt (purpose, p->purpose))
5676 else if (p->purpose != purpose)
5687 if (tree_int_cst_lt (bit_position (purpose),
5688 bit_position (p->purpose)))
5690 else if (p->purpose != purpose)
5697 r = (struct init_node *) ggc_alloc (sizeof (struct init_node));
5698 r->purpose = purpose;
5709 struct init_node *s;
5713 if (p->balance == 0)
5715 else if (p->balance < 0)
5722 p->left->parent = p;
5739 constructor_pending_elts = r;
5744 struct init_node *t = r->right;
5748 r->right->parent = r;
5753 p->left->parent = p;
5756 p->balance = t->balance < 0;
5757 r->balance = -(t->balance > 0);
5772 constructor_pending_elts = t;
5778 /* p->balance == +1; growth of left side balances the node. */
5783 else /* r == p->right */
5785 if (p->balance == 0)
5786 /* Growth propagation from right side. */
5788 else if (p->balance > 0)
5795 p->right->parent = p;
5812 constructor_pending_elts = r;
5814 else /* r->balance == -1 */
5817 struct init_node *t = r->left;
5821 r->left->parent = r;
5826 p->right->parent = p;
5829 r->balance = (t->balance < 0);
5830 p->balance = -(t->balance > 0);
5845 constructor_pending_elts = t;
5851 /* p->balance == -1; growth of right side balances the node. */
5862 /* Return nonzero if FIELD is equal to the index of a pending initializer. */
5865 pending_init_member (field)
5868 struct init_node *p;
5870 p = constructor_pending_elts;
5871 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5875 if (field == p->purpose)
5877 else if (tree_int_cst_lt (field, p->purpose))
5887 if (field == p->purpose)
5889 else if (tree_int_cst_lt (bit_position (field),
5890 bit_position (p->purpose)))
5900 /* "Output" the next constructor element.
5901 At top level, really output it to assembler code now.
5902 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5903 TYPE is the data type that the containing data type wants here.
5904 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5906 PENDING if non-nil means output pending elements that belong
5907 right after this element. (PENDING is normally 1;
5908 it is 0 while outputting pending elements, to avoid recursion.) */
5911 output_init_element (value, type, field, pending)
5912 tree value, type, field;
5917 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5918 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5919 && !(TREE_CODE (value) == STRING_CST
5920 && TREE_CODE (type) == ARRAY_TYPE
5921 && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
5922 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5923 TYPE_MAIN_VARIANT (type))))
5924 value = default_conversion (value);
5926 if (value == error_mark_node)
5927 constructor_erroneous = 1;
5928 else if (!TREE_CONSTANT (value))
5929 constructor_constant = 0;
5930 else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0
5931 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5932 || TREE_CODE (constructor_type) == UNION_TYPE)
5933 && DECL_C_BIT_FIELD (field)
5934 && TREE_CODE (value) != INTEGER_CST))
5935 constructor_simple = 0;
5937 if (require_constant_value && ! TREE_CONSTANT (value))
5939 error_init ("initializer element is not constant");
5940 value = error_mark_node;
5942 else if (require_constant_elements
5943 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
5945 error_init ("initializer element is not computable at load time");
5946 value = error_mark_node;
5949 /* If this element duplicates one on constructor_pending_elts,
5950 print a message and ignore it. Don't do this when we're
5951 processing elements taken off constructor_pending_elts,
5952 because we'd always get spurious errors. */
5955 if (TREE_CODE (constructor_type) == RECORD_TYPE
5956 || TREE_CODE (constructor_type) == UNION_TYPE
5957 || TREE_CODE (constructor_type) == ARRAY_TYPE)
5959 if (pending_init_member (field))
5961 error_init ("duplicate initializer");
5967 /* If this element doesn't come next in sequence,
5968 put it on constructor_pending_elts. */
5969 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5970 && ! tree_int_cst_equal (field, constructor_unfilled_index))
5973 add_pending_init (field,
5974 digest_init (type, value, require_constant_value,
5975 require_constant_elements));
5977 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5978 && field != constructor_unfilled_fields)
5980 /* We do this for records but not for unions. In a union,
5981 no matter which field is specified, it can be initialized
5982 right away since it starts at the beginning of the union. */
5984 add_pending_init (field,
5985 digest_init (type, value, require_constant_value,
5986 require_constant_elements));
5990 /* Otherwise, output this element either to
5991 constructor_elements or to the assembler file. */
5995 if (! constructor_incremental)
5997 if (field && TREE_CODE (field) == INTEGER_CST)
5998 field = copy_node (field);
5999 constructor_elements
6000 = tree_cons (field, digest_init (type, value,
6001 require_constant_value,
6002 require_constant_elements),
6003 constructor_elements);
6007 /* Structure elements may require alignment.
6008 Do this, if necessary. */
6009 if (TREE_CODE (constructor_type) == RECORD_TYPE
6010 && ! tree_int_cst_equal (constructor_bit_index,
6011 bit_position (field)))
6012 /* Advance to offset of this element. */
6015 (size_binop (TRUNC_DIV_EXPR,
6016 size_binop (MINUS_EXPR, bit_position (field),
6017 constructor_bit_index),
6021 output_constant (digest_init (type, value,
6022 require_constant_value,
6023 require_constant_elements),
6024 int_size_in_bytes (type));
6026 /* For a record or union,
6027 keep track of end position of last field. */
6028 if (TREE_CODE (constructor_type) == RECORD_TYPE
6029 || TREE_CODE (constructor_type) == UNION_TYPE)
6030 constructor_bit_index
6031 = size_binop (PLUS_EXPR, bit_position (field),
6036 /* Advance the variable that indicates sequential elements output. */
6037 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6038 constructor_unfilled_index
6039 = size_binop (PLUS_EXPR, constructor_unfilled_index,
6041 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6043 constructor_unfilled_fields
6044 = TREE_CHAIN (constructor_unfilled_fields);
6046 /* Skip any nameless bit fields. */
6047 while (constructor_unfilled_fields != 0
6048 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6049 && DECL_NAME (constructor_unfilled_fields) == 0)
6050 constructor_unfilled_fields =
6051 TREE_CHAIN (constructor_unfilled_fields);
6053 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6054 constructor_unfilled_fields = 0;
6056 /* Now output any pending elements which have become next. */
6058 output_pending_init_elements (0);
6062 /* Output any pending elements which have become next.
6063 As we output elements, constructor_unfilled_{fields,index}
6064 advances, which may cause other elements to become next;
6065 if so, they too are output.
6067 If ALL is 0, we return when there are
6068 no more pending elements to output now.
6070 If ALL is 1, we output space as necessary so that
6071 we can output all the pending elements. */
6074 output_pending_init_elements (all)
6077 struct init_node *elt = constructor_pending_elts;
6082 /* Look thru the whole pending tree.
6083 If we find an element that should be output now,
6084 output it. Otherwise, set NEXT to the element
6085 that comes first among those still pending. */
6090 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6092 if (tree_int_cst_equal (elt->purpose,
6093 constructor_unfilled_index))
6094 output_init_element (elt->value,
6095 TREE_TYPE (constructor_type),
6096 constructor_unfilled_index, 0);
6097 else if (tree_int_cst_lt (constructor_unfilled_index,
6100 /* Advance to the next smaller node. */
6105 /* We have reached the smallest node bigger than the
6106 current unfilled index. Fill the space first. */
6107 next = elt->purpose;
6113 /* Advance to the next bigger node. */
6118 /* We have reached the biggest node in a subtree. Find
6119 the parent of it, which is the next bigger node. */
6120 while (elt->parent && elt->parent->right == elt)
6123 if (elt && tree_int_cst_lt (constructor_unfilled_index,
6126 next = elt->purpose;
6132 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6133 || TREE_CODE (constructor_type) == UNION_TYPE)
6135 /* If the current record is complete we are done. */
6136 if (constructor_unfilled_fields == 0)
6138 if (elt->purpose == constructor_unfilled_fields)
6140 output_init_element (elt->value,
6141 TREE_TYPE (constructor_unfilled_fields),
6142 constructor_unfilled_fields,
6145 else if (tree_int_cst_lt (bit_position (constructor_unfilled_fields),
6146 bit_position (elt->purpose)))
6148 /* Advance to the next smaller node. */
6153 /* We have reached the smallest node bigger than the
6154 current unfilled field. Fill the space first. */
6155 next = elt->purpose;
6161 /* Advance to the next bigger node. */
6166 /* We have reached the biggest node in a subtree. Find
6167 the parent of it, which is the next bigger node. */
6168 while (elt->parent && elt->parent->right == elt)
6173 (bit_position (constructor_unfilled_fields),
6174 bit_position (elt->purpose))))
6176 next = elt->purpose;
6184 /* Ordinarily return, but not if we want to output all
6185 and there are elements left. */
6186 if (! (all && next != 0))
6189 /* Generate space up to the position of NEXT. */
6190 if (constructor_incremental)
6193 tree nextpos_tree = bitsize_zero_node;
6195 if (TREE_CODE (constructor_type) == RECORD_TYPE
6196 || TREE_CODE (constructor_type) == UNION_TYPE)
6200 /* Find the last field written out, if any. */
6201 for (tail = TYPE_FIELDS (constructor_type); tail;
6202 tail = TREE_CHAIN (tail))
6203 if (TREE_CHAIN (tail) == constructor_unfilled_fields)
6207 /* Find the offset of the end of that field. */
6208 filled = size_binop (CEIL_DIV_EXPR,
6209 size_binop (PLUS_EXPR, bit_position (tail),
6213 filled = bitsize_zero_node;
6215 nextpos_tree = convert (bitsizetype, byte_position (next));
6216 constructor_bit_index = bit_position (next);
6217 constructor_unfilled_fields = next;
6219 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6222 = size_binop (MULT_EXPR, constructor_unfilled_index,
6223 convert (bitsizetype,
6225 (TREE_TYPE (constructor_type))));
6227 = size_binop (MULT_EXPR, next,
6228 convert (bitsizetype, TYPE_SIZE_UNIT
6229 (TREE_TYPE (constructor_type))));
6230 constructor_unfilled_index = next;
6236 assemble_zeros (tree_low_cst (size_diffop (nextpos_tree, filled), 1));
6240 /* If it's not incremental, just skip over the gap,
6241 so that after jumping to retry we will output the next
6242 successive element. */
6243 if (TREE_CODE (constructor_type) == RECORD_TYPE
6244 || TREE_CODE (constructor_type) == UNION_TYPE)
6245 constructor_unfilled_fields = next;
6246 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6247 constructor_unfilled_index = next;
6250 /* ELT now points to the node in the pending tree with the next
6251 initializer to output. */
6255 /* Add one non-braced element to the current constructor level.
6256 This adjusts the current position within the constructor's type.
6257 This may also start or terminate implicit levels
6258 to handle a partly-braced initializer.
6260 Once this has found the correct level for the new element,
6261 it calls output_init_element.
6263 Note: if we are incrementally outputting this constructor,
6264 this function may be called with a null argument
6265 representing a sub-constructor that was already incrementally output.
6266 When that happens, we output nothing, but we do the bookkeeping
6267 to skip past that element of the current constructor. */
6270 process_init_element (value)
6273 tree orig_value = value;
6274 int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
6276 /* Handle superfluous braces around string cst as in
6277 char x[] = {"foo"}; */
6280 && TREE_CODE (constructor_type) == ARRAY_TYPE
6281 && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
6282 && integer_zerop (constructor_unfilled_index))
6284 if (constructor_stack->replacement_value)
6285 error_init ("excess elements in char array initializer");
6286 constructor_stack->replacement_value = value;
6290 if (constructor_stack->replacement_value != 0)
6292 error_init ("excess elements in struct initializer");
6296 /* Ignore elements of a brace group if it is entirely superfluous
6297 and has already been diagnosed. */
6298 if (constructor_type == 0)
6301 /* If we've exhausted any levels that didn't have braces,
6303 while (constructor_stack->implicit)
6305 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6306 || TREE_CODE (constructor_type) == UNION_TYPE)
6307 && constructor_fields == 0)
6308 process_init_element (pop_init_level (1));
6309 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6310 && (constructor_max_index == 0
6311 || tree_int_cst_lt (constructor_max_index,
6312 constructor_index)))
6313 process_init_element (pop_init_level (1));
6320 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6323 enum tree_code fieldcode;
6325 if (constructor_fields == 0)
6327 pedwarn_init ("excess elements in struct initializer");
6331 fieldtype = TREE_TYPE (constructor_fields);
6332 if (fieldtype != error_mark_node)
6333 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6334 fieldcode = TREE_CODE (fieldtype);
6336 /* Accept a string constant to initialize a subarray. */
6338 && fieldcode == ARRAY_TYPE
6339 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6342 /* Otherwise, if we have come to a subaggregate,
6343 and we don't have an element of its type, push into it. */
6344 else if (value != 0 && !constructor_no_implicit
6345 && value != error_mark_node
6346 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6347 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6348 || fieldcode == UNION_TYPE))
6350 push_init_level (1);
6356 push_member_name (constructor_fields);
6357 output_init_element (value, fieldtype, constructor_fields, 1);
6358 RESTORE_SPELLING_DEPTH (constructor_depth);
6361 /* Do the bookkeeping for an element that was
6362 directly output as a constructor. */
6364 /* For a record, keep track of end position of last field. */
6365 constructor_bit_index
6366 = size_binop (PLUS_EXPR,
6367 bit_position (constructor_fields),
6368 DECL_SIZE (constructor_fields));
6370 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6371 /* Skip any nameless bit fields. */
6372 while (constructor_unfilled_fields != 0
6373 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6374 && DECL_NAME (constructor_unfilled_fields) == 0)
6375 constructor_unfilled_fields =
6376 TREE_CHAIN (constructor_unfilled_fields);
6379 constructor_fields = TREE_CHAIN (constructor_fields);
6380 /* Skip any nameless bit fields at the beginning. */
6381 while (constructor_fields != 0
6382 && DECL_C_BIT_FIELD (constructor_fields)
6383 && DECL_NAME (constructor_fields) == 0)
6384 constructor_fields = TREE_CHAIN (constructor_fields);
6387 if (TREE_CODE (constructor_type) == UNION_TYPE)
6390 enum tree_code fieldcode;
6392 if (constructor_fields == 0)
6394 pedwarn_init ("excess elements in union initializer");
6398 fieldtype = TREE_TYPE (constructor_fields);
6399 if (fieldtype != error_mark_node)
6400 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6401 fieldcode = TREE_CODE (fieldtype);
6403 /* Warn that traditional C rejects initialization of unions.
6404 We skip the warning if the value is zero. This is done
6405 under the assumption that the zero initializer in user
6406 code appears conditioned on e.g. __STDC__ to avoid
6407 "missing initializer" warnings and relies on default
6408 initialization to zero in the traditional C case. */
6409 if (warn_traditional && !integer_zerop (value))
6410 warning ("traditional C rejects initialization of unions");
6412 /* Accept a string constant to initialize a subarray. */
6414 && fieldcode == ARRAY_TYPE
6415 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6418 /* Otherwise, if we have come to a subaggregate,
6419 and we don't have an element of its type, push into it. */
6420 else if (value != 0 && !constructor_no_implicit
6421 && value != error_mark_node
6422 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6423 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6424 || fieldcode == UNION_TYPE))
6426 push_init_level (1);
6432 push_member_name (constructor_fields);
6433 output_init_element (value, fieldtype, constructor_fields, 1);
6434 RESTORE_SPELLING_DEPTH (constructor_depth);
6437 /* Do the bookkeeping for an element that was
6438 directly output as a constructor. */
6440 constructor_bit_index = DECL_SIZE (constructor_fields);
6441 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6444 constructor_fields = 0;
6447 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6449 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6450 enum tree_code eltcode = TREE_CODE (elttype);
6452 /* Accept a string constant to initialize a subarray. */
6454 && eltcode == ARRAY_TYPE
6455 && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
6458 /* Otherwise, if we have come to a subaggregate,
6459 and we don't have an element of its type, push into it. */
6460 else if (value != 0 && !constructor_no_implicit
6461 && value != error_mark_node
6462 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
6463 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6464 || eltcode == UNION_TYPE))
6466 push_init_level (1);
6470 if (constructor_max_index != 0
6471 && tree_int_cst_lt (constructor_max_index, constructor_index))
6473 pedwarn_init ("excess elements in array initializer");
6477 /* In the case of [LO .. HI] = VALUE, only evaluate VALUE once. */
6478 if (constructor_range_end)
6480 if (constructor_max_index != 0
6481 && tree_int_cst_lt (constructor_max_index,
6482 constructor_range_end))
6484 pedwarn_init ("excess elements in array initializer");
6485 constructor_range_end = constructor_max_index;
6488 value = save_expr (value);
6491 /* Now output the actual element.
6492 Ordinarily, output once.
6493 If there is a range, repeat it till we advance past the range. */
6498 push_array_bounds (tree_low_cst (constructor_index, 0));
6499 output_init_element (value, elttype, constructor_index, 1);
6500 RESTORE_SPELLING_DEPTH (constructor_depth);
6504 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6507 /* If we are doing the bookkeeping for an element that was
6508 directly output as a constructor, we must update
6509 constructor_unfilled_index. */
6510 constructor_unfilled_index = constructor_index;
6512 while (! (constructor_range_end == 0
6513 || tree_int_cst_lt (constructor_range_end,
6514 constructor_index)));
6519 /* Handle the sole element allowed in a braced initializer
6520 for a scalar variable. */
6521 if (constructor_fields == 0)
6523 pedwarn_init ("excess elements in scalar initializer");
6528 output_init_element (value, constructor_type, NULL_TREE, 1);
6529 constructor_fields = 0;
6534 /* Expand an ASM statement with operands, handling output operands
6535 that are not variables or INDIRECT_REFS by transforming such
6536 cases into cases that expand_asm_operands can handle.
6538 Arguments are same as for expand_asm_operands. */
6541 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
6542 tree string, outputs, inputs, clobbers;
6544 const char *filename;
6547 int noutputs = list_length (outputs);
6549 /* o[I] is the place that output number I should be written. */
6550 register tree *o = (tree *) alloca (noutputs * sizeof (tree));
6553 if (TREE_CODE (string) == ADDR_EXPR)
6554 string = TREE_OPERAND (string, 0);
6555 if (TREE_CODE (string) != STRING_CST)
6557 error ("asm template is not a string constant");
6561 /* Record the contents of OUTPUTS before it is modified. */
6562 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6564 tree output = TREE_VALUE (tail);
6566 /* We can remove conversions that just change the type, not the mode. */
6567 STRIP_NOPS (output);
6570 /* Allow conversions as LHS here. build_modify_expr as called below
6571 will do the right thing with them. */
6572 while (TREE_CODE (output) == NOP_EXPR
6573 || TREE_CODE (output) == CONVERT_EXPR
6574 || TREE_CODE (output) == FLOAT_EXPR
6575 || TREE_CODE (output) == FIX_TRUNC_EXPR
6576 || TREE_CODE (output) == FIX_FLOOR_EXPR
6577 || TREE_CODE (output) == FIX_ROUND_EXPR
6578 || TREE_CODE (output) == FIX_CEIL_EXPR)
6579 output = TREE_OPERAND (output, 0);
6581 lvalue_or_else (o[i], "invalid lvalue in asm statement");
6584 /* Perform default conversions on array and function inputs. */
6585 /* Don't do this for other types--
6586 it would screw up operands expected to be in memory. */
6587 for (i = 0, tail = inputs; tail; tail = TREE_CHAIN (tail), i++)
6588 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == ARRAY_TYPE
6589 || TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == FUNCTION_TYPE)
6590 TREE_VALUE (tail) = default_conversion (TREE_VALUE (tail));
6592 /* Generate the ASM_OPERANDS insn;
6593 store into the TREE_VALUEs of OUTPUTS some trees for
6594 where the values were actually stored. */
6595 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
6597 /* Copy all the intermediate outputs into the specified outputs. */
6598 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6600 if (o[i] != TREE_VALUE (tail))
6602 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
6603 NULL_RTX, VOIDmode, EXPAND_NORMAL);
6606 /* Detect modification of read-only values.
6607 (Otherwise done by build_modify_expr.) */
6610 tree type = TREE_TYPE (o[i]);
6611 if (TREE_READONLY (o[i])
6612 || TYPE_READONLY (type)
6613 || ((TREE_CODE (type) == RECORD_TYPE
6614 || TREE_CODE (type) == UNION_TYPE)
6615 && C_TYPE_FIELDS_READONLY (type)))
6616 readonly_warning (o[i], "modification by `asm'");
6620 /* Those MODIFY_EXPRs could do autoincrements. */
6624 /* Expand a C `return' statement.
6625 RETVAL is the expression for what to return,
6626 or a null pointer for `return;' with no value. */
6629 c_expand_return (retval)
6632 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6634 if (TREE_THIS_VOLATILE (current_function_decl))
6635 warning ("function declared `noreturn' has a `return' statement");
6639 current_function_returns_null = 1;
6640 if ((warn_return_type || flag_isoc99)
6641 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6642 pedwarn_c99 ("`return' with no value, in function returning non-void");
6643 expand_null_return ();
6645 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6647 current_function_returns_null = 1;
6648 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6649 pedwarn ("`return' with a value, in function returning void");
6650 expand_return (retval);
6654 tree t = convert_for_assignment (valtype, retval, _("return"),
6655 NULL_TREE, NULL_TREE, 0);
6656 tree res = DECL_RESULT (current_function_decl);
6659 if (t == error_mark_node)
6662 inner = t = convert (TREE_TYPE (res), t);
6664 /* Strip any conversions, additions, and subtractions, and see if
6665 we are returning the address of a local variable. Warn if so. */
6668 switch (TREE_CODE (inner))
6670 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6672 inner = TREE_OPERAND (inner, 0);
6676 /* If the second operand of the MINUS_EXPR has a pointer
6677 type (or is converted from it), this may be valid, so
6678 don't give a warning. */
6680 tree op1 = TREE_OPERAND (inner, 1);
6682 while (! POINTER_TYPE_P (TREE_TYPE (op1))
6683 && (TREE_CODE (op1) == NOP_EXPR
6684 || TREE_CODE (op1) == NON_LVALUE_EXPR
6685 || TREE_CODE (op1) == CONVERT_EXPR))
6686 op1 = TREE_OPERAND (op1, 0);
6688 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6691 inner = TREE_OPERAND (inner, 0);
6696 inner = TREE_OPERAND (inner, 0);
6698 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
6699 inner = TREE_OPERAND (inner, 0);
6701 if (TREE_CODE (inner) == VAR_DECL
6702 && ! DECL_EXTERNAL (inner)
6703 && ! TREE_STATIC (inner)
6704 && DECL_CONTEXT (inner) == current_function_decl)
6705 warning ("function returns address of local variable");
6715 t = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
6716 TREE_SIDE_EFFECTS (t) = 1;
6718 current_function_returns_value = 1;
6722 /* Start a C switch statement, testing expression EXP.
6723 Return EXP if it is valid, an error node otherwise. */
6726 c_expand_start_case (exp)
6729 register enum tree_code code;
6732 if (TREE_CODE (exp) == ERROR_MARK)
6735 code = TREE_CODE (TREE_TYPE (exp));
6736 type = TREE_TYPE (exp);
6738 if (code != INTEGER_TYPE && code != ENUMERAL_TYPE && code != ERROR_MARK)
6740 error ("switch quantity not an integer");
6741 exp = error_mark_node;
6746 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6748 if (warn_traditional
6749 && ! in_system_header
6750 && (type == long_integer_type_node
6751 || type == long_unsigned_type_node))
6752 warning ("`long' switch expression not converted to `int' in ISO C");
6754 exp = default_conversion (exp);
6755 type = TREE_TYPE (exp);
6756 index = get_unwidened (exp, NULL_TREE);
6757 /* We can't strip a conversion from a signed type to an unsigned,
6758 because if we did, int_fits_type_p would do the wrong thing
6759 when checking case values for being in range,
6760 and it's too hard to do the right thing. */
6761 if (TREE_UNSIGNED (TREE_TYPE (exp))
6762 == TREE_UNSIGNED (TREE_TYPE (index)))
6766 expand_start_case (1, exp, type, "switch statement");