1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 88, 91, 92, 93, 1994 Free Software Foundation, Inc.
4 This file is part of GNU CC.
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
21 /* This file is part of the C front end.
22 It contains routines to build C expressions given their operands,
23 including computing the types of the result, C-specific error checks,
24 and some optimization.
26 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
27 and to process initializations in declarations (since they work
28 like a strange sort of assignment). */
36 /* Nonzero if we've already printed a "missing braces around initializer"
37 message within this initializer. */
38 static int missing_braces_mentioned;
40 extern char *index ();
41 extern char *rindex ();
43 static tree quality_type PROTO((tree, tree));
44 static int comp_target_types PROTO((tree, tree));
45 static int function_types_compatible_p PROTO((tree, tree));
46 static int type_lists_compatible_p PROTO((tree, tree));
47 static int self_promoting_type_p PROTO((tree));
48 static tree decl_constant_value PROTO((tree));
49 static tree lookup_field PROTO((tree, tree, tree *));
50 static tree convert_arguments PROTO((tree, tree, tree, tree));
51 static tree pointer_int_sum PROTO((enum tree_code, tree, tree));
52 static tree pointer_diff PROTO((tree, tree));
53 static tree unary_complex_lvalue PROTO((enum tree_code, tree));
54 static void pedantic_lvalue_warning PROTO((enum tree_code));
55 static tree internal_build_compound_expr PROTO((tree, int));
56 static tree convert_for_assignment PROTO((tree, tree, char *, tree,
58 static void warn_for_assignment PROTO((char *, char *, tree, int));
59 static tree valid_compound_expr_initializer PROTO((tree, tree));
60 static void push_string PROTO((char *));
61 static void push_member_name PROTO((tree));
62 static void push_array_bounds PROTO((int));
63 static int spelling_length PROTO((void));
64 static char *print_spelling PROTO((char *));
65 static char *get_spelling PROTO((char *));
66 static void warning_init PROTO((char *, char *,
68 static tree digest_init PROTO((tree, tree, int, int));
69 static void check_init_type_bitfields PROTO((tree));
70 static void output_init_element PROTO((tree, tree, tree, int));
71 static void output_pending_init_elements PROTO((int));
73 /* Do `exp = require_complete_type (exp);' to make sure exp
74 does not have an incomplete type. (That includes void types.) */
77 require_complete_type (value)
80 tree type = TREE_TYPE (value);
82 /* First, detect a valid value with a complete type. */
83 if (TYPE_SIZE (type) != 0
84 && type != void_type_node)
87 incomplete_type_error (value, type);
88 return error_mark_node;
91 /* Print an error message for invalid use of an incomplete type.
92 VALUE is the expression that was used (or 0 if that isn't known)
93 and TYPE is the type that was invalid. */
96 incomplete_type_error (value, type)
102 /* Avoid duplicate error message. */
103 if (TREE_CODE (type) == ERROR_MARK)
106 if (value != 0 && (TREE_CODE (value) == VAR_DECL
107 || TREE_CODE (value) == PARM_DECL))
108 error ("`%s' has an incomplete type",
109 IDENTIFIER_POINTER (DECL_NAME (value)));
113 /* We must print an error message. Be clever about what it says. */
115 switch (TREE_CODE (type))
118 errmsg = "invalid use of undefined type `struct %s'";
122 errmsg = "invalid use of undefined type `union %s'";
126 errmsg = "invalid use of undefined type `enum %s'";
130 error ("invalid use of void expression");
134 if (TYPE_DOMAIN (type))
136 type = TREE_TYPE (type);
139 error ("invalid use of array with unspecified bounds");
146 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
147 error (errmsg, IDENTIFIER_POINTER (TYPE_NAME (type)));
149 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
150 error ("invalid use of incomplete typedef `%s'",
151 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
155 /* Return a variant of TYPE which has all the type qualifiers of LIKE
156 as well as those of TYPE. */
159 qualify_type (type, like)
162 int constflag = TYPE_READONLY (type) || TYPE_READONLY (like);
163 int volflag = TYPE_VOLATILE (type) || TYPE_VOLATILE (like);
164 return c_build_type_variant (type, constflag, volflag);
167 /* Return the common type of two types.
168 We assume that comptypes has already been done and returned 1;
169 if that isn't so, this may crash. In particular, we assume that qualifiers
172 This is the type for the result of most arithmetic operations
173 if the operands have the given two types. */
179 register enum tree_code code1;
180 register enum tree_code code2;
183 /* Save time if the two types are the same. */
185 if (t1 == t2) return t1;
187 /* If one type is nonsense, use the other. */
188 if (t1 == error_mark_node)
190 if (t2 == error_mark_node)
193 /* Merge the attributes */
195 { register tree a1, a2;
196 a1 = TYPE_ATTRIBUTES (t1);
197 a2 = TYPE_ATTRIBUTES (t2);
199 /* Either one unset? Take the set one. */
201 if (!(attributes = a1))
204 /* One that completely contains the other? Take it. */
206 else if (a2 && !attribute_list_contained (a1, a2))
207 if (attribute_list_contained (a2, a1))
211 /* Pick the longest list, and hang on the other
214 if (list_length (a1) < list_length (a2))
215 attributes = a2, a2 = a1;
217 for (; a2; a2 = TREE_CHAIN (a2))
218 if (!value_member (attributes, a2))
221 TREE_CHAIN (a1) = attributes;
227 /* Treat an enum type as the unsigned integer type of the same width. */
229 if (TREE_CODE (t1) == ENUMERAL_TYPE)
230 t1 = type_for_size (TYPE_PRECISION (t1), 1);
231 if (TREE_CODE (t2) == ENUMERAL_TYPE)
232 t2 = type_for_size (TYPE_PRECISION (t2), 1);
234 code1 = TREE_CODE (t1);
235 code2 = TREE_CODE (t2);
237 /* If one type is complex, form the common type of the non-complex
238 components, then make that complex. Use T1 or T2 if it is the
240 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
242 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
243 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
244 tree subtype = common_type (subtype1, subtype2);
246 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
247 return build_type_attribute_variant (t1, attributes);
248 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
249 return build_type_attribute_variant (t2, attributes);
251 return build_type_attribute_variant (build_complex_type (subtype),
259 /* If only one is real, use it as the result. */
261 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
262 return build_type_attribute_variant (t1, attributes);
264 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
265 return build_type_attribute_variant (t2, attributes);
267 /* Both real or both integers; use the one with greater precision. */
269 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
270 return build_type_attribute_variant (t1, attributes);
271 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
272 return build_type_attribute_variant (t2, attributes);
274 /* Same precision. Prefer longs to ints even when same size. */
276 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
277 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
278 return build_type_attribute_variant (long_unsigned_type_node,
281 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
282 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
284 /* But preserve unsignedness from the other type,
285 since long cannot hold all the values of an unsigned int. */
286 if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
287 t1 = long_unsigned_type_node;
289 t1 = long_integer_type_node;
290 return build_type_attribute_variant (t1, attributes);
293 /* Otherwise prefer the unsigned one. */
295 if (TREE_UNSIGNED (t1))
296 return build_type_attribute_variant (t1, attributes);
298 return build_type_attribute_variant (t2, attributes);
301 /* For two pointers, do this recursively on the target type,
302 and combine the qualifiers of the two types' targets. */
303 /* This code was turned off; I don't know why.
304 But ANSI C specifies doing this with the qualifiers.
305 So I turned it on again. */
307 tree target = common_type (TYPE_MAIN_VARIANT (TREE_TYPE (t1)),
308 TYPE_MAIN_VARIANT (TREE_TYPE (t2)));
310 = TYPE_READONLY (TREE_TYPE (t1)) || TYPE_READONLY (TREE_TYPE (t2));
312 = TYPE_VOLATILE (TREE_TYPE (t1)) || TYPE_VOLATILE (TREE_TYPE (t2));
313 t1 = build_pointer_type (c_build_type_variant (target, constp,
315 return build_type_attribute_variant (t1, attributes);
318 t1 = build_pointer_type (common_type (TREE_TYPE (t1), TREE_TYPE (t2)));
319 return build_type_attribute_variant (t1, attributes);
324 tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
325 /* Save space: see if the result is identical to one of the args. */
326 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
327 return build_type_attribute_variant (t1, attributes);
328 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
329 return build_type_attribute_variant (t2, attributes);
330 /* Merge the element types, and have a size if either arg has one. */
331 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
332 return build_type_attribute_variant (t1, attributes);
336 /* Function types: prefer the one that specified arg types.
337 If both do, merge the arg types. Also merge the return types. */
339 tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
340 tree p1 = TYPE_ARG_TYPES (t1);
341 tree p2 = TYPE_ARG_TYPES (t2);
346 /* Save space: see if the result is identical to one of the args. */
347 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
348 return build_type_attribute_variant (t1, attributes);
349 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
350 return build_type_attribute_variant (t2, attributes);
352 /* Simple way if one arg fails to specify argument types. */
353 if (TYPE_ARG_TYPES (t1) == 0)
355 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
356 return build_type_attribute_variant (t1, attributes);
358 if (TYPE_ARG_TYPES (t2) == 0)
360 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
361 return build_type_attribute_variant (t1, attributes);
364 /* If both args specify argument types, we must merge the two
365 lists, argument by argument. */
367 len = list_length (p1);
370 for (i = 0; i < len; i++)
371 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
376 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
378 /* A null type means arg type is not specified.
379 Take whatever the other function type has. */
380 if (TREE_VALUE (p1) == 0)
382 TREE_VALUE (n) = TREE_VALUE (p2);
385 if (TREE_VALUE (p2) == 0)
387 TREE_VALUE (n) = TREE_VALUE (p1);
391 /* Given wait (union {union wait *u; int *i} *)
392 and wait (union wait *),
393 prefer union wait * as type of parm. */
394 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
395 && TREE_VALUE (p1) != TREE_VALUE (p2))
398 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
399 memb; memb = TREE_CHAIN (memb))
400 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
402 TREE_VALUE (n) = TREE_VALUE (p2);
404 pedwarn ("function types not truly compatible in ANSI C");
408 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
409 && TREE_VALUE (p2) != TREE_VALUE (p1))
412 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
413 memb; memb = TREE_CHAIN (memb))
414 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
416 TREE_VALUE (n) = TREE_VALUE (p1);
418 pedwarn ("function types not truly compatible in ANSI C");
422 TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
426 t1 = build_function_type (valtype, newargs);
427 /* ... falls through ... */
431 return build_type_attribute_variant (t1, attributes);
436 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
437 or various other operations. Return 2 if they are compatible
438 but a warning may be needed if you use them together. */
441 comptypes (type1, type2)
444 register tree t1 = type1;
445 register tree t2 = type2;
448 /* Suppress errors caused by previously reported errors. */
450 if (t1 == t2 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
453 /* Treat an enum type as the integer type of the same width and
456 if (TREE_CODE (t1) == ENUMERAL_TYPE)
457 t1 = type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
458 if (TREE_CODE (t2) == ENUMERAL_TYPE)
459 t2 = type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
464 /* Different classes of types can't be compatible. */
466 if (TREE_CODE (t1) != TREE_CODE (t2)) return 0;
468 /* Qualifiers must match. */
470 if (TYPE_READONLY (t1) != TYPE_READONLY (t2))
472 if (TYPE_VOLATILE (t1) != TYPE_VOLATILE (t2))
475 /* Allow for two different type nodes which have essentially the same
476 definition. Note that we already checked for equality of the type
477 type qualifiers (just above). */
479 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
482 #ifndef COMP_TYPE_ATTRIBUTES
483 #define COMP_TYPE_ATTRIBUTES(t1,t2) 1
486 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
487 if (! (attrval = COMP_TYPE_ATTRIBUTES (t1, t2)))
490 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
493 switch (TREE_CODE (t1))
496 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
497 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
501 val = function_types_compatible_p (t1, t2);
506 tree d1 = TYPE_DOMAIN (t1);
507 tree d2 = TYPE_DOMAIN (t2);
510 /* Target types must match incl. qualifiers. */
511 if (TREE_TYPE (t1) != TREE_TYPE (t2)
512 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
515 /* Sizes must match unless one is missing or variable. */
516 if (d1 == 0 || d2 == 0 || d1 == d2
517 || TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
518 || TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
519 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST
520 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST)
523 if (! ((TREE_INT_CST_LOW (TYPE_MIN_VALUE (d1))
524 == TREE_INT_CST_LOW (TYPE_MIN_VALUE (d2)))
525 && (TREE_INT_CST_HIGH (TYPE_MIN_VALUE (d1))
526 == TREE_INT_CST_HIGH (TYPE_MIN_VALUE (d2)))
527 && (TREE_INT_CST_LOW (TYPE_MAX_VALUE (d1))
528 == TREE_INT_CST_LOW (TYPE_MAX_VALUE (d2)))
529 && (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (d1))
530 == TREE_INT_CST_HIGH (TYPE_MAX_VALUE (d2)))))
536 if (maybe_objc_comptypes (t1, t2, 0) == 1)
540 return attrval == 2 && val == 1 ? 2 : val;
543 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
544 ignoring their qualifiers. */
547 comp_target_types (ttl, ttr)
552 /* Give maybe_objc_comptypes a crack at letting these types through. */
553 if (val = maybe_objc_comptypes (ttl, ttr, 1) >= 0)
556 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
557 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
559 if (val == 2 && pedantic)
560 pedwarn ("types are not quite compatible");
564 /* Subroutines of `comptypes'. */
566 /* Return 1 if two function types F1 and F2 are compatible.
567 If either type specifies no argument types,
568 the other must specify a fixed number of self-promoting arg types.
569 Otherwise, if one type specifies only the number of arguments,
570 the other must specify that number of self-promoting arg types.
571 Otherwise, the argument types must match. */
574 function_types_compatible_p (f1, f2)
578 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
582 if (!(TREE_TYPE (f1) == TREE_TYPE (f2)
583 || (val = comptypes (TREE_TYPE (f1), TREE_TYPE (f2)))))
586 args1 = TYPE_ARG_TYPES (f1);
587 args2 = TYPE_ARG_TYPES (f2);
589 /* An unspecified parmlist matches any specified parmlist
590 whose argument types don't need default promotions. */
594 if (!self_promoting_args_p (args2))
596 /* If one of these types comes from a non-prototype fn definition,
597 compare that with the other type's arglist.
598 If they don't match, ask for a warning (but no error). */
599 if (TYPE_ACTUAL_ARG_TYPES (f1)
600 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
606 if (!self_promoting_args_p (args1))
608 if (TYPE_ACTUAL_ARG_TYPES (f2)
609 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
614 /* Both types have argument lists: compare them and propagate results. */
615 val1 = type_lists_compatible_p (args1, args2);
616 return val1 != 1 ? val1 : val;
619 /* Check two lists of types for compatibility,
620 returning 0 for incompatible, 1 for compatible,
621 or 2 for compatible with warning. */
624 type_lists_compatible_p (args1, args2)
627 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
633 if (args1 == 0 && args2 == 0)
635 /* If one list is shorter than the other,
636 they fail to match. */
637 if (args1 == 0 || args2 == 0)
639 /* A null pointer instead of a type
640 means there is supposed to be an argument
641 but nothing is specified about what type it has.
642 So match anything that self-promotes. */
643 if (TREE_VALUE (args1) == 0)
645 if (! self_promoting_type_p (TREE_VALUE (args2)))
648 else if (TREE_VALUE (args2) == 0)
650 if (! self_promoting_type_p (TREE_VALUE (args1)))
653 else if (! (newval = comptypes (TREE_VALUE (args1), TREE_VALUE (args2))))
655 /* Allow wait (union {union wait *u; int *i} *)
656 and wait (union wait *) to be compatible. */
657 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
658 && TYPE_NAME (TREE_VALUE (args1)) == 0
659 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
660 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
661 TYPE_SIZE (TREE_VALUE (args2))))
664 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
665 memb; memb = TREE_CHAIN (memb))
666 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
671 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
672 && TYPE_NAME (TREE_VALUE (args2)) == 0
673 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
674 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
675 TYPE_SIZE (TREE_VALUE (args1))))
678 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
679 memb; memb = TREE_CHAIN (memb))
680 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
689 /* comptypes said ok, but record if it said to warn. */
693 args1 = TREE_CHAIN (args1);
694 args2 = TREE_CHAIN (args2);
698 /* Return 1 if PARMS specifies a fixed number of parameters
699 and none of their types is affected by default promotions. */
702 self_promoting_args_p (parms)
706 for (t = parms; t; t = TREE_CHAIN (t))
708 register tree type = TREE_VALUE (t);
710 if (TREE_CHAIN (t) == 0 && type != void_type_node)
716 if (TYPE_MAIN_VARIANT (type) == float_type_node)
719 if (C_PROMOTING_INTEGER_TYPE_P (type))
725 /* Return 1 if TYPE is not affected by default promotions. */
728 self_promoting_type_p (type)
731 if (TYPE_MAIN_VARIANT (type) == float_type_node)
734 if (C_PROMOTING_INTEGER_TYPE_P (type))
740 /* Return an unsigned type the same as TYPE in other respects. */
746 tree type1 = TYPE_MAIN_VARIANT (type);
747 if (type1 == signed_char_type_node || type1 == char_type_node)
748 return unsigned_char_type_node;
749 if (type1 == integer_type_node)
750 return unsigned_type_node;
751 if (type1 == short_integer_type_node)
752 return short_unsigned_type_node;
753 if (type1 == long_integer_type_node)
754 return long_unsigned_type_node;
755 if (type1 == long_long_integer_type_node)
756 return long_long_unsigned_type_node;
760 /* Return a signed type the same as TYPE in other respects. */
766 tree type1 = TYPE_MAIN_VARIANT (type);
767 if (type1 == unsigned_char_type_node || type1 == char_type_node)
768 return signed_char_type_node;
769 if (type1 == unsigned_type_node)
770 return integer_type_node;
771 if (type1 == short_unsigned_type_node)
772 return short_integer_type_node;
773 if (type1 == long_unsigned_type_node)
774 return long_integer_type_node;
775 if (type1 == long_long_unsigned_type_node)
776 return long_long_integer_type_node;
780 /* Return a type the same as TYPE except unsigned or
781 signed according to UNSIGNEDP. */
784 signed_or_unsigned_type (unsignedp, type)
788 if (! INTEGRAL_TYPE_P (type))
790 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
791 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
792 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
793 return unsignedp ? unsigned_type_node : integer_type_node;
794 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
795 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
796 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
797 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
798 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
799 return (unsignedp ? long_long_unsigned_type_node
800 : long_long_integer_type_node);
804 /* Compute the value of the `sizeof' operator. */
810 enum tree_code code = TREE_CODE (type);
813 if (code == FUNCTION_TYPE)
815 if (pedantic || warn_pointer_arith)
816 pedwarn ("sizeof applied to a function type");
819 if (code == VOID_TYPE)
821 if (pedantic || warn_pointer_arith)
822 pedwarn ("sizeof applied to a void type");
825 if (code == ERROR_MARK)
827 if (TYPE_SIZE (type) == 0)
829 error ("sizeof applied to an incomplete type");
833 /* Convert in case a char is more than one unit. */
834 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
835 size_int (TYPE_PRECISION (char_type_node)));
836 /* size_binop does not put the constant in range, so do it now. */
837 if (TREE_CODE (t) == INTEGER_CST && force_fit_type (t, 0))
838 TREE_CONSTANT_OVERFLOW (t) = TREE_OVERFLOW (t) = 1;
843 c_sizeof_nowarn (type)
846 enum tree_code code = TREE_CODE (type);
849 if (code == FUNCTION_TYPE
851 || code == ERROR_MARK)
853 if (TYPE_SIZE (type) == 0)
856 /* Convert in case a char is more than one unit. */
857 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
858 size_int (TYPE_PRECISION (char_type_node)));
859 force_fit_type (t, 0);
863 /* Compute the size to increment a pointer by. */
866 c_size_in_bytes (type)
869 enum tree_code code = TREE_CODE (type);
872 if (code == FUNCTION_TYPE)
874 if (code == VOID_TYPE)
876 if (code == ERROR_MARK)
878 if (TYPE_SIZE (type) == 0)
880 error ("arithmetic on pointer to an incomplete type");
884 /* Convert in case a char is more than one unit. */
885 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
886 size_int (BITS_PER_UNIT));
887 force_fit_type (t, 0);
891 /* Implement the __alignof keyword: Return the minimum required
892 alignment of TYPE, measured in bytes. */
898 enum tree_code code = TREE_CODE (type);
900 if (code == FUNCTION_TYPE)
901 return size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
903 if (code == VOID_TYPE || code == ERROR_MARK)
906 return size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
909 /* Implement the __alignof keyword: Return the minimum required
910 alignment of EXPR, measured in bytes. For VAR_DECL's and
911 FIELD_DECL's return DECL_ALIGN (which can be set from an
912 "aligned" __attribute__ specification). */
915 c_alignof_expr (expr)
918 if (TREE_CODE (expr) == VAR_DECL)
919 return size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
921 if (TREE_CODE (expr) == COMPONENT_REF
922 && DECL_BIT_FIELD (TREE_OPERAND (expr, 1)))
924 error ("`__alignof' applied to a bit-field");
927 else if (TREE_CODE (expr) == COMPONENT_REF
928 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
929 return size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
931 if (TREE_CODE (expr) == INDIRECT_REF)
933 tree t = TREE_OPERAND (expr, 0);
935 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
937 while (TREE_CODE (t) == NOP_EXPR
938 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
942 t = TREE_OPERAND (t, 0);
943 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
944 if (thisalign > bestalign)
945 best = t, bestalign = thisalign;
947 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
950 return c_alignof (TREE_TYPE (expr));
952 /* Return either DECL or its known constant value (if it has one). */
955 decl_constant_value (decl)
958 if (! TREE_PUBLIC (decl)
959 /* Don't change a variable array bound or initial value to a constant
960 in a place where a variable is invalid. */
961 && current_function_decl != 0
963 && ! TREE_THIS_VOLATILE (decl)
964 && TREE_READONLY (decl) && ! ITERATOR_P (decl)
965 && DECL_INITIAL (decl) != 0
966 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
967 /* This is invalid if initial value is not constant.
968 If it has either a function call, a memory reference,
969 or a variable, then re-evaluating it could give different results. */
970 && TREE_CONSTANT (DECL_INITIAL (decl))
971 /* Check for cases where this is sub-optimal, even though valid. */
972 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR
973 && DECL_MODE (decl) != BLKmode)
974 return DECL_INITIAL (decl);
978 /* Perform default promotions for C data used in expressions.
979 Arrays and functions are converted to pointers;
980 enumeral types or short or char, to int.
981 In addition, manifest constants symbols are replaced by their values. */
984 default_conversion (exp)
987 register tree type = TREE_TYPE (exp);
988 register enum tree_code code = TREE_CODE (type);
990 /* Constants can be used directly unless they're not loadable. */
991 if (TREE_CODE (exp) == CONST_DECL)
992 exp = DECL_INITIAL (exp);
993 /* Replace a nonvolatile const static variable with its value. */
994 else if (optimize && TREE_CODE (exp) == VAR_DECL)
996 exp = decl_constant_value (exp);
997 type = TREE_TYPE (exp);
1000 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
1002 /* Do not use STRIP_NOPS here! It will remove conversions from pointer
1003 to integer and cause infinite recursion. */
1004 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1005 || (TREE_CODE (exp) == NOP_EXPR
1006 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1007 exp = TREE_OPERAND (exp, 0);
1009 /* Normally convert enums to int,
1010 but convert wide enums to something wider. */
1011 if (code == ENUMERAL_TYPE)
1013 type = type_for_size (MAX (TYPE_PRECISION (type),
1014 TYPE_PRECISION (integer_type_node)),
1016 || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node))
1017 && TREE_UNSIGNED (type)));
1018 return convert (type, exp);
1021 if (C_PROMOTING_INTEGER_TYPE_P (type))
1023 /* Traditionally, unsignedness is preserved in default promotions.
1024 Also preserve unsignedness if not really getting any wider. */
1025 if (TREE_UNSIGNED (type)
1026 && (flag_traditional
1027 || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
1028 return convert (unsigned_type_node, exp);
1029 return convert (integer_type_node, exp);
1031 if (flag_traditional && !flag_allow_single_precision
1032 && TYPE_MAIN_VARIANT (type) == float_type_node)
1033 return convert (double_type_node, exp);
1034 if (code == VOID_TYPE)
1036 error ("void value not ignored as it ought to be");
1037 return error_mark_node;
1039 if (code == FUNCTION_TYPE)
1041 return build_unary_op (ADDR_EXPR, exp, 0);
1043 if (code == ARRAY_TYPE)
1046 tree restype = TREE_TYPE (type);
1051 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r'
1052 || TREE_CODE_CLASS (TREE_CODE (exp)) == 'd')
1054 constp = TREE_READONLY (exp);
1055 volatilep = TREE_THIS_VOLATILE (exp);
1058 if (TYPE_READONLY (type) || TYPE_VOLATILE (type)
1059 || constp || volatilep)
1060 restype = c_build_type_variant (restype,
1061 TYPE_READONLY (type) || constp,
1062 TYPE_VOLATILE (type) || volatilep);
1064 if (TREE_CODE (exp) == INDIRECT_REF)
1065 return convert (TYPE_POINTER_TO (restype),
1066 TREE_OPERAND (exp, 0));
1068 if (TREE_CODE (exp) == COMPOUND_EXPR)
1070 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
1071 return build (COMPOUND_EXPR, TREE_TYPE (op1),
1072 TREE_OPERAND (exp, 0), op1);
1076 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1078 error ("invalid use of non-lvalue array");
1079 return error_mark_node;
1082 ptrtype = build_pointer_type (restype);
1084 if (TREE_CODE (exp) == VAR_DECL)
1086 /* ??? This is not really quite correct
1087 in that the type of the operand of ADDR_EXPR
1088 is not the target type of the type of the ADDR_EXPR itself.
1089 Question is, can this lossage be avoided? */
1090 adr = build1 (ADDR_EXPR, ptrtype, exp);
1091 if (mark_addressable (exp) == 0)
1092 return error_mark_node;
1093 TREE_CONSTANT (adr) = staticp (exp);
1094 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1097 /* This way is better for a COMPONENT_REF since it can
1098 simplify the offset for a component. */
1099 adr = build_unary_op (ADDR_EXPR, exp, 1);
1100 return convert (ptrtype, adr);
1105 /* Look up component name in the structure type definition.
1107 If this component name is found indirectly within an anonymous union,
1108 store in *INDIRECT the component which directly contains
1109 that anonymous union. Otherwise, set *INDIRECT to 0. */
1112 lookup_field (type, component, indirect)
1113 tree type, component;
1118 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1119 to the field elements. Use a binary search on this array to quickly
1120 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1121 will always be set for structures which have many elements. */
1123 if (TYPE_LANG_SPECIFIC (type))
1126 tree *field_array = &TYPE_LANG_SPECIFIC (type)->elts[0];
1128 field = TYPE_FIELDS (type);
1130 top = TYPE_LANG_SPECIFIC (type)->len;
1131 while (top - bot > 1)
1135 half = (top - bot + 1) >> 1;
1136 field = field_array[bot+half];
1138 if (DECL_NAME (field) == NULL_TREE)
1140 /* Step through all anon unions in linear fashion. */
1141 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1145 field = field_array[bot++];
1146 anon = lookup_field (TREE_TYPE (field), component, &junk);
1147 if (anon != NULL_TREE)
1154 /* Entire record is only anon unions. */
1158 /* Restart the binary search, with new lower bound. */
1162 cmp = (HOST_WIDE_INT) DECL_NAME (field) - (HOST_WIDE_INT) component;
1171 if (DECL_NAME (field_array[bot]) == component)
1172 field = field_array[bot];
1173 else if (DECL_NAME (field) != component)
1178 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1180 if (DECL_NAME (field) == NULL_TREE)
1183 tree anon = lookup_field (TREE_TYPE (field), component, &junk);
1184 if (anon != NULL_TREE)
1191 if (DECL_NAME (field) == component)
1196 *indirect = NULL_TREE;
1200 /* Make an expression to refer to the COMPONENT field of
1201 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1204 build_component_ref (datum, component)
1205 tree datum, component;
1207 register tree type = TREE_TYPE (datum);
1208 register enum tree_code code = TREE_CODE (type);
1209 register tree field = NULL;
1212 /* If DATUM is a COMPOUND_EXPR or COND_EXPR, move our reference inside it
1213 unless we are not to support things not strictly ANSI. */
1214 switch (TREE_CODE (datum))
1218 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
1219 return build (COMPOUND_EXPR, TREE_TYPE (value),
1220 TREE_OPERAND (datum, 0), value);
1223 return build_conditional_expr
1224 (TREE_OPERAND (datum, 0),
1225 build_component_ref (TREE_OPERAND (datum, 1), component),
1226 build_component_ref (TREE_OPERAND (datum, 2), component));
1229 /* See if there is a field or component with name COMPONENT. */
1231 if (code == RECORD_TYPE || code == UNION_TYPE)
1235 if (TYPE_SIZE (type) == 0)
1237 incomplete_type_error (NULL_TREE, type);
1238 return error_mark_node;
1241 field = lookup_field (type, component, &indirect);
1245 error (code == RECORD_TYPE
1246 ? "structure has no member named `%s'"
1247 : "union has no member named `%s'",
1248 IDENTIFIER_POINTER (component));
1249 return error_mark_node;
1251 if (TREE_TYPE (field) == error_mark_node)
1252 return error_mark_node;
1254 /* If FIELD was found buried within an anonymous union,
1255 make one COMPONENT_REF to get that anonymous union,
1256 then fall thru to make a second COMPONENT_REF to get FIELD. */
1259 ref = build (COMPONENT_REF, TREE_TYPE (indirect), datum, indirect);
1260 if (TREE_READONLY (datum) || TREE_READONLY (indirect))
1261 TREE_READONLY (ref) = 1;
1262 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (indirect))
1263 TREE_THIS_VOLATILE (ref) = 1;
1267 ref = build (COMPONENT_REF, TREE_TYPE (field), datum, field);
1269 if (TREE_READONLY (datum) || TREE_READONLY (field))
1270 TREE_READONLY (ref) = 1;
1271 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (field))
1272 TREE_THIS_VOLATILE (ref) = 1;
1276 else if (code != ERROR_MARK)
1277 error ("request for member `%s' in something not a structure or union",
1278 IDENTIFIER_POINTER (component));
1280 return error_mark_node;
1283 /* Given an expression PTR for a pointer, return an expression
1284 for the value pointed to.
1285 ERRORSTRING is the name of the operator to appear in error messages. */
1288 build_indirect_ref (ptr, errorstring)
1292 register tree pointer = default_conversion (ptr);
1293 register tree type = TREE_TYPE (pointer);
1295 if (TREE_CODE (type) == POINTER_TYPE)
1297 if (TREE_CODE (pointer) == ADDR_EXPR
1299 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1300 == TREE_TYPE (type)))
1301 return TREE_OPERAND (pointer, 0);
1304 tree t = TREE_TYPE (type);
1305 register tree ref = build1 (INDIRECT_REF,
1306 TYPE_MAIN_VARIANT (t), pointer);
1308 if (TYPE_SIZE (t) == 0 && TREE_CODE (t) != ARRAY_TYPE)
1310 error ("dereferencing pointer to incomplete type");
1311 return error_mark_node;
1313 if (TREE_CODE (t) == VOID_TYPE)
1314 warning ("dereferencing `void *' pointer");
1316 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1317 so that we get the proper error message if the result is used
1318 to assign to. Also, &* is supposed to be a no-op.
1319 And ANSI C seems to specify that the type of the result
1320 should be the const type. */
1321 /* A de-reference of a pointer to const is not a const. It is valid
1322 to change it via some other pointer. */
1323 TREE_READONLY (ref) = TYPE_READONLY (t);
1324 TREE_SIDE_EFFECTS (ref)
1325 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer) || flag_volatile;
1326 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1330 else if (TREE_CODE (pointer) != ERROR_MARK)
1331 error ("invalid type argument of `%s'", errorstring);
1332 return error_mark_node;
1335 /* This handles expressions of the form "a[i]", which denotes
1338 This is logically equivalent in C to *(a+i), but we may do it differently.
1339 If A is a variable or a member, we generate a primitive ARRAY_REF.
1340 This avoids forcing the array out of registers, and can work on
1341 arrays that are not lvalues (for example, members of structures returned
1345 build_array_ref (array, index)
1350 error ("subscript missing in array reference");
1351 return error_mark_node;
1354 if (TREE_TYPE (array) == error_mark_node
1355 || TREE_TYPE (index) == error_mark_node)
1356 return error_mark_node;
1358 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
1359 && TREE_CODE (array) != INDIRECT_REF)
1363 /* Subscripting with type char is likely to lose
1364 on a machine where chars are signed.
1365 So warn on any machine, but optionally.
1366 Don't warn for unsigned char since that type is safe.
1367 Don't warn for signed char because anyone who uses that
1368 must have done so deliberately. */
1369 if (warn_char_subscripts
1370 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1371 warning ("array subscript has type `char'");
1373 /* Apply default promotions *after* noticing character types. */
1374 index = default_conversion (index);
1376 /* Require integer *after* promotion, for sake of enums. */
1377 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1379 error ("array subscript is not an integer");
1380 return error_mark_node;
1383 /* An array that is indexed by a non-constant
1384 cannot be stored in a register; we must be able to do
1385 address arithmetic on its address.
1386 Likewise an array of elements of variable size. */
1387 if (TREE_CODE (index) != INTEGER_CST
1388 || (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))) != 0
1389 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1391 if (mark_addressable (array) == 0)
1392 return error_mark_node;
1394 /* An array that is indexed by a constant value which is not within
1395 the array bounds cannot be stored in a register either; because we
1396 would get a crash in store_bit_field/extract_bit_field when trying
1397 to access a non-existent part of the register. */
1398 if (TREE_CODE (index) == INTEGER_CST
1399 && TYPE_VALUES (TREE_TYPE (array))
1400 && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
1402 if (mark_addressable (array) == 0)
1403 return error_mark_node;
1406 if (pedantic && !lvalue_p (array))
1408 if (DECL_REGISTER (array))
1409 pedwarn ("ANSI C forbids subscripting `register' array");
1411 pedwarn ("ANSI C forbids subscripting non-lvalue array");
1417 while (TREE_CODE (foo) == COMPONENT_REF)
1418 foo = TREE_OPERAND (foo, 0);
1419 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
1420 pedwarn ("ANSI C forbids subscripting non-lvalue array");
1423 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1424 rval = build (ARRAY_REF, type, array, index);
1425 /* Array ref is const/volatile if the array elements are
1426 or if the array is. */
1427 TREE_READONLY (rval)
1428 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1429 | TREE_READONLY (array));
1430 TREE_SIDE_EFFECTS (rval)
1431 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1432 | TREE_SIDE_EFFECTS (array));
1433 TREE_THIS_VOLATILE (rval)
1434 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1435 /* This was added by rms on 16 Nov 91.
1436 It fixes vol struct foo *a; a->elts[1]
1437 in an inline function.
1438 Hope it doesn't break something else. */
1439 | TREE_THIS_VOLATILE (array));
1440 return require_complete_type (fold (rval));
1444 tree ar = default_conversion (array);
1445 tree ind = default_conversion (index);
1447 /* Put the integer in IND to simplify error checking. */
1448 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1455 if (ar == error_mark_node)
1458 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE)
1460 error ("subscripted value is neither array nor pointer");
1461 return error_mark_node;
1463 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1465 error ("array subscript is not an integer");
1466 return error_mark_node;
1469 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1474 /* Build a function call to function FUNCTION with parameters PARAMS.
1475 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1476 TREE_VALUE of each node is a parameter-expression.
1477 FUNCTION's data type may be a function type or a pointer-to-function. */
1480 build_function_call (function, params)
1481 tree function, params;
1483 register tree fntype, fundecl = 0;
1484 register tree coerced_params;
1485 tree name = NULL_TREE, assembler_name = NULL_TREE;
1487 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1488 STRIP_TYPE_NOPS (function);
1490 /* Convert anything with function type to a pointer-to-function. */
1491 if (TREE_CODE (function) == FUNCTION_DECL)
1493 name = DECL_NAME (function);
1494 assembler_name = DECL_ASSEMBLER_NAME (function);
1496 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1497 (because calling an inline function does not mean the function
1498 needs to be separately compiled). */
1499 fntype = build_type_variant (TREE_TYPE (function),
1500 TREE_READONLY (function),
1501 TREE_THIS_VOLATILE (function));
1503 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1506 function = default_conversion (function);
1508 fntype = TREE_TYPE (function);
1510 if (TREE_CODE (fntype) == ERROR_MARK)
1511 return error_mark_node;
1513 if (!(TREE_CODE (fntype) == POINTER_TYPE
1514 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1516 error ("called object is not a function");
1517 return error_mark_node;
1520 /* fntype now gets the type of function pointed to. */
1521 fntype = TREE_TYPE (fntype);
1523 /* Convert the parameters to the types declared in the
1524 function prototype, or apply default promotions. */
1527 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
1529 /* Check for errors in format strings. */
1531 if (warn_format && (name || assembler_name))
1532 check_function_format (name, assembler_name, coerced_params);
1534 /* Recognize certain built-in functions so we can make tree-codes
1535 other than CALL_EXPR. We do this when it enables fold-const.c
1536 to do something useful. */
1538 if (TREE_CODE (function) == ADDR_EXPR
1539 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1540 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
1541 switch (DECL_FUNCTION_CODE (TREE_OPERAND (function, 0)))
1546 if (coerced_params == 0)
1547 return integer_zero_node;
1548 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
1552 register tree result
1553 = build (CALL_EXPR, TREE_TYPE (fntype),
1554 function, coerced_params, NULL_TREE);
1556 TREE_SIDE_EFFECTS (result) = 1;
1557 if (TREE_TYPE (result) == void_type_node)
1559 return require_complete_type (result);
1563 /* Convert the argument expressions in the list VALUES
1564 to the types in the list TYPELIST. The result is a list of converted
1565 argument expressions.
1567 If TYPELIST is exhausted, or when an element has NULL as its type,
1568 perform the default conversions.
1570 PARMLIST is the chain of parm decls for the function being called.
1571 It may be 0, if that info is not available.
1572 It is used only for generating error messages.
1574 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1576 This is also where warnings about wrong number of args are generated.
1578 Both VALUES and the returned value are chains of TREE_LIST nodes
1579 with the elements of the list in the TREE_VALUE slots of those nodes. */
1582 convert_arguments (typelist, values, name, fundecl)
1583 tree typelist, values, name, fundecl;
1585 register tree typetail, valtail;
1586 register tree result = NULL;
1589 /* Scan the given expressions and types, producing individual
1590 converted arguments and pushing them on RESULT in reverse order. */
1592 for (valtail = values, typetail = typelist, parmnum = 0;
1594 valtail = TREE_CHAIN (valtail), parmnum++)
1596 register tree type = typetail ? TREE_VALUE (typetail) : 0;
1597 register tree val = TREE_VALUE (valtail);
1599 if (type == void_type_node)
1602 error ("too many arguments to function `%s'",
1603 IDENTIFIER_POINTER (name));
1605 error ("too many arguments to function");
1609 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1610 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1611 to convert automatically to a pointer. */
1612 if (TREE_CODE (val) == NON_LVALUE_EXPR)
1613 val = TREE_OPERAND (val, 0);
1615 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
1616 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE)
1617 val = default_conversion (val);
1619 val = require_complete_type (val);
1623 /* Formal parm type is specified by a function prototype. */
1626 if (TYPE_SIZE (type) == 0)
1628 error ("type of formal parameter %d is incomplete", parmnum + 1);
1633 #if 0 /* This turns out not to win--there's no way to write a prototype
1634 for a function whose arg type is a union with no tag. */
1635 /* Nameless union automatically casts the types it contains. */
1636 if (TREE_CODE (type) == UNION_TYPE && TYPE_NAME (type) == 0)
1640 for (field = TYPE_FIELDS (type); field;
1641 field = TREE_CHAIN (field))
1642 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
1643 TYPE_MAIN_VARIANT (TREE_TYPE (val))))
1647 val = build1 (CONVERT_EXPR, type, val);
1651 /* Optionally warn about conversions that
1652 differ from the default conversions. */
1653 if (warn_conversion)
1655 int formal_prec = TYPE_PRECISION (type);
1657 if (TREE_CODE (type) != REAL_TYPE
1658 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1659 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1660 else if (TREE_CODE (type) == REAL_TYPE
1661 && TREE_CODE (TREE_TYPE (val)) != REAL_TYPE)
1662 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1663 else if (TREE_CODE (type) == REAL_TYPE
1664 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1666 /* Warn if any argument is passed as `float',
1667 since without a prototype it would be `double'. */
1668 if (formal_prec == TYPE_PRECISION (float_type_node))
1669 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
1671 /* Detect integer changing in width or signedness. */
1672 else if ((TREE_CODE (type) == INTEGER_TYPE
1673 || TREE_CODE (type) == ENUMERAL_TYPE)
1674 && (TREE_CODE (TREE_TYPE (val)) == INTEGER_TYPE
1675 || TREE_CODE (TREE_TYPE (val)) == ENUMERAL_TYPE))
1677 tree would_have_been = default_conversion (val);
1678 tree type1 = TREE_TYPE (would_have_been);
1680 if (TREE_CODE (type) == ENUMERAL_TYPE
1681 && type == TREE_TYPE (val))
1682 /* No warning if function asks for enum
1683 and the actual arg is that enum type. */
1685 else if (formal_prec != TYPE_PRECISION (type1))
1686 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
1687 else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
1689 /* Don't complain if the formal parameter type
1690 is an enum, because we can't tell now whether
1691 the value was an enum--even the same enum. */
1692 else if (TREE_CODE (type) == ENUMERAL_TYPE)
1694 else if (TREE_CODE (val) == INTEGER_CST
1695 && int_fits_type_p (val, type))
1696 /* Change in signedness doesn't matter
1697 if a constant value is unaffected. */
1699 /* Likewise for a constant in a NOP_EXPR. */
1700 else if (TREE_CODE (val) == NOP_EXPR
1701 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
1702 && int_fits_type_p (TREE_OPERAND (val, 0), type))
1704 #if 0 /* We never get such tree structure here. */
1705 else if (TREE_CODE (TREE_TYPE (val)) == ENUMERAL_TYPE
1706 && int_fits_type_p (TYPE_MIN_VALUE (TREE_TYPE (val)), type)
1707 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (val)), type))
1708 /* Change in signedness doesn't matter
1709 if an enum value is unaffected. */
1712 /* If the value is extended from a narrower
1713 unsigned type, it doesn't matter whether we
1714 pass it as signed or unsigned; the value
1715 certainly is the same either way. */
1716 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
1717 && TREE_UNSIGNED (TREE_TYPE (val)))
1719 else if (TREE_UNSIGNED (type))
1720 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
1722 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
1726 parmval = convert_for_assignment (type, val,
1727 (char *)0, /* arg passing */
1728 fundecl, name, parmnum + 1);
1730 #ifdef PROMOTE_PROTOTYPES
1731 if ((TREE_CODE (type) == INTEGER_TYPE
1732 || TREE_CODE (type) == ENUMERAL_TYPE)
1733 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
1734 parmval = default_conversion (parmval);
1737 result = tree_cons (NULL_TREE, parmval, result);
1739 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
1740 && (TYPE_PRECISION (TREE_TYPE (val))
1741 < TYPE_PRECISION (double_type_node)))
1742 /* Convert `float' to `double'. */
1743 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
1745 /* Convert `short' and `char' to full-size `int'. */
1746 result = tree_cons (NULL_TREE, default_conversion (val), result);
1749 typetail = TREE_CHAIN (typetail);
1752 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
1755 error ("too few arguments to function `%s'",
1756 IDENTIFIER_POINTER (name));
1758 error ("too few arguments to function");
1761 return nreverse (result);
1764 /* This is the entry point used by the parser
1765 for binary operators in the input.
1766 In addition to constructing the expression,
1767 we check for operands that were written with other binary operators
1768 in a way that is likely to confuse the user. */
1771 parser_build_binary_op (code, arg1, arg2)
1772 enum tree_code code;
1775 tree result = build_binary_op (code, arg1, arg2, 1);
1778 char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
1779 char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
1780 enum tree_code code1 = ERROR_MARK;
1781 enum tree_code code2 = ERROR_MARK;
1783 if (class1 == 'e' || class1 == '1'
1784 || class1 == '2' || class1 == '<')
1785 code1 = C_EXP_ORIGINAL_CODE (arg1);
1786 if (class2 == 'e' || class2 == '1'
1787 || class2 == '2' || class2 == '<')
1788 code2 = C_EXP_ORIGINAL_CODE (arg2);
1790 /* Check for cases such as x+y<<z which users are likely
1791 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1792 is cleared to prevent these warnings. */
1793 if (warn_parentheses)
1795 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
1797 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1798 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1799 warning ("suggest parentheses around + or - inside shift");
1802 if (code == TRUTH_ORIF_EXPR)
1804 if (code1 == TRUTH_ANDIF_EXPR
1805 || code2 == TRUTH_ANDIF_EXPR)
1806 warning ("suggest parentheses around && within ||");
1809 if (code == BIT_IOR_EXPR)
1811 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
1812 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1813 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
1814 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1815 warning ("suggest parentheses around arithmetic in operand of |");
1818 if (code == BIT_XOR_EXPR)
1820 if (code1 == BIT_AND_EXPR
1821 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1822 || code2 == BIT_AND_EXPR
1823 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1824 warning ("suggest parentheses around arithmetic in operand of ^");
1827 if (code == BIT_AND_EXPR)
1829 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1830 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1831 warning ("suggest parentheses around + or - in operand of &");
1835 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
1836 if (TREE_CODE_CLASS (code) == '<' && extra_warnings
1837 && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
1838 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1840 unsigned_conversion_warning (result, arg1);
1841 unsigned_conversion_warning (result, arg2);
1842 overflow_warning (result);
1844 class = TREE_CODE_CLASS (TREE_CODE (result));
1846 /* Record the code that was specified in the source,
1847 for the sake of warnings about confusing nesting. */
1848 if (class == 'e' || class == '1'
1849 || class == '2' || class == '<')
1850 C_SET_EXP_ORIGINAL_CODE (result, code);
1853 int flag = TREE_CONSTANT (result);
1854 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
1855 so that convert_for_assignment wouldn't strip it.
1856 That way, we got warnings for things like p = (1 - 1).
1857 But it turns out we should not get those warnings. */
1858 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
1859 C_SET_EXP_ORIGINAL_CODE (result, code);
1860 TREE_CONSTANT (result) = flag;
1866 /* Build a binary-operation expression without default conversions.
1867 CODE is the kind of expression to build.
1868 This function differs from `build' in several ways:
1869 the data type of the result is computed and recorded in it,
1870 warnings are generated if arg data types are invalid,
1871 special handling for addition and subtraction of pointers is known,
1872 and some optimization is done (operations on narrow ints
1873 are done in the narrower type when that gives the same result).
1874 Constant folding is also done before the result is returned.
1876 Note that the operands will never have enumeral types, or function
1877 or array types, because either they will have the default conversions
1878 performed or they have both just been converted to some other type in which
1879 the arithmetic is to be done. */
1882 build_binary_op (code, orig_op0, orig_op1, convert_p)
1883 enum tree_code code;
1884 tree orig_op0, orig_op1;
1888 register enum tree_code code0, code1;
1891 /* Expression code to give to the expression when it is built.
1892 Normally this is CODE, which is what the caller asked for,
1893 but in some special cases we change it. */
1894 register enum tree_code resultcode = code;
1896 /* Data type in which the computation is to be performed.
1897 In the simplest cases this is the common type of the arguments. */
1898 register tree result_type = NULL;
1900 /* Nonzero means operands have already been type-converted
1901 in whatever way is necessary.
1902 Zero means they need to be converted to RESULT_TYPE. */
1905 /* Nonzero means after finally constructing the expression
1906 give it this type. Otherwise, give it type RESULT_TYPE. */
1907 tree final_type = 0;
1909 /* Nonzero if this is an operation like MIN or MAX which can
1910 safely be computed in short if both args are promoted shorts.
1911 Also implies COMMON.
1912 -1 indicates a bitwise operation; this makes a difference
1913 in the exact conditions for when it is safe to do the operation
1914 in a narrower mode. */
1917 /* Nonzero if this is a comparison operation;
1918 if both args are promoted shorts, compare the original shorts.
1919 Also implies COMMON. */
1920 int short_compare = 0;
1922 /* Nonzero if this is a right-shift operation, which can be computed on the
1923 original short and then promoted if the operand is a promoted short. */
1924 int short_shift = 0;
1926 /* Nonzero means set RESULT_TYPE to the common type of the args. */
1931 op0 = default_conversion (orig_op0);
1932 op1 = default_conversion (orig_op1);
1940 type0 = TREE_TYPE (op0);
1941 type1 = TREE_TYPE (op1);
1943 /* The expression codes of the data types of the arguments tell us
1944 whether the arguments are integers, floating, pointers, etc. */
1945 code0 = TREE_CODE (type0);
1946 code1 = TREE_CODE (type1);
1948 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1949 STRIP_TYPE_NOPS (op0);
1950 STRIP_TYPE_NOPS (op1);
1952 /* If an error was already reported for one of the arguments,
1953 avoid reporting another error. */
1955 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
1956 return error_mark_node;
1961 /* Handle the pointer + int case. */
1962 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1963 return pointer_int_sum (PLUS_EXPR, op0, op1);
1964 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
1965 return pointer_int_sum (PLUS_EXPR, op1, op0);
1971 /* Subtraction of two similar pointers.
1972 We must subtract them as integers, then divide by object size. */
1973 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
1974 && comp_target_types (type0, type1))
1975 return pointer_diff (op0, op1);
1976 /* Handle pointer minus int. Just like pointer plus int. */
1977 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1978 return pointer_int_sum (MINUS_EXPR, op0, op1);
1987 case TRUNC_DIV_EXPR:
1989 case FLOOR_DIV_EXPR:
1990 case ROUND_DIV_EXPR:
1991 case EXACT_DIV_EXPR:
1992 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
1993 || code0 == COMPLEX_TYPE)
1994 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
1995 || code1 == COMPLEX_TYPE))
1997 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
1998 resultcode = RDIV_EXPR;
2001 /* Although it would be tempting to shorten always here, that
2002 loses on some targets, since the modulo instruction is
2003 undefined if the quotient can't be represented in the
2004 computation mode. We shorten only if unsigned or if
2005 dividing by something we know != -1. */
2006 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2007 || (TREE_CODE (op1) == INTEGER_CST
2008 && (TREE_INT_CST_LOW (op1) != -1
2009 || TREE_INT_CST_HIGH (op1) != -1)));
2016 case BIT_ANDTC_EXPR:
2019 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2021 /* If one operand is a constant, and the other is a short type
2022 that has been converted to an int,
2023 really do the work in the short type and then convert the
2024 result to int. If we are lucky, the constant will be 0 or 1
2025 in the short type, making the entire operation go away. */
2026 if (TREE_CODE (op0) == INTEGER_CST
2027 && TREE_CODE (op1) == NOP_EXPR
2028 && TYPE_PRECISION (type1) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1, 0)))
2029 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op1, 0))))
2031 final_type = result_type;
2032 op1 = TREE_OPERAND (op1, 0);
2033 result_type = TREE_TYPE (op1);
2035 if (TREE_CODE (op1) == INTEGER_CST
2036 && TREE_CODE (op0) == NOP_EXPR
2037 && TYPE_PRECISION (type0) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0)))
2038 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
2040 final_type = result_type;
2041 op0 = TREE_OPERAND (op0, 0);
2042 result_type = TREE_TYPE (op0);
2046 case TRUNC_MOD_EXPR:
2047 case FLOOR_MOD_EXPR:
2048 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2050 /* Although it would be tempting to shorten always here, that loses
2051 on some targets, since the modulo instruction is undefined if the
2052 quotient can't be represented in the computation mode. We shorten
2053 only if unsigned or if dividing by something we know != -1. */
2054 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2055 || (TREE_CODE (op1) == INTEGER_CST
2056 && (TREE_INT_CST_LOW (op1) != -1
2057 || TREE_INT_CST_HIGH (op1) != -1)));
2062 case TRUTH_ANDIF_EXPR:
2063 case TRUTH_ORIF_EXPR:
2064 case TRUTH_AND_EXPR:
2066 case TRUTH_XOR_EXPR:
2067 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
2068 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2069 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
2070 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2072 /* Result of these operations is always an int,
2073 but that does not mean the operands should be
2074 converted to ints! */
2075 result_type = integer_type_node;
2076 op0 = truthvalue_conversion (op0);
2077 op1 = truthvalue_conversion (op1);
2082 /* Shift operations: result has same type as first operand;
2083 always convert second operand to int.
2084 Also set SHORT_SHIFT if shifting rightward. */
2087 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2089 if (TREE_CODE (op1) == INTEGER_CST)
2091 if (tree_int_cst_sgn (op1) < 0)
2092 warning ("right shift count is negative");
2095 if (TREE_INT_CST_LOW (op1) | TREE_INT_CST_HIGH (op1))
2097 if (TREE_INT_CST_HIGH (op1) != 0
2098 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2099 >= TYPE_PRECISION (type0)))
2100 warning ("right shift count >= width of type");
2103 /* Use the type of the value to be shifted.
2104 This is what most traditional C compilers do. */
2105 result_type = type0;
2106 /* Unless traditional, convert the shift-count to an integer,
2107 regardless of size of value being shifted. */
2108 if (! flag_traditional)
2110 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2111 op1 = convert (integer_type_node, op1);
2112 /* Avoid converting op1 to result_type later. */
2119 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2121 if (TREE_CODE (op1) == INTEGER_CST)
2123 if (tree_int_cst_sgn (op1) < 0)
2124 warning ("left shift count is negative");
2125 else if (TREE_INT_CST_HIGH (op1) != 0
2126 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2127 >= TYPE_PRECISION (type0)))
2128 warning ("left shift count >= width of type");
2130 /* Use the type of the value to be shifted.
2131 This is what most traditional C compilers do. */
2132 result_type = type0;
2133 /* Unless traditional, convert the shift-count to an integer,
2134 regardless of size of value being shifted. */
2135 if (! flag_traditional)
2137 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2138 op1 = convert (integer_type_node, op1);
2139 /* Avoid converting op1 to result_type later. */
2147 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2149 if (TREE_CODE (op1) == INTEGER_CST)
2151 if (tree_int_cst_sgn (op1) < 0)
2152 warning ("shift count is negative");
2153 else if (TREE_INT_CST_HIGH (op1) != 0
2154 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2155 >= TYPE_PRECISION (type0)))
2156 warning ("shift count >= width of type");
2158 /* Use the type of the value to be shifted.
2159 This is what most traditional C compilers do. */
2160 result_type = type0;
2161 /* Unless traditional, convert the shift-count to an integer,
2162 regardless of size of value being shifted. */
2163 if (! flag_traditional)
2165 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2166 op1 = convert (integer_type_node, op1);
2167 /* Avoid converting op1 to result_type later. */
2175 /* Result of comparison is always int,
2176 but don't convert the args to int! */
2177 result_type = integer_type_node;
2179 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2180 || code0 == COMPLEX_TYPE)
2181 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2182 || code1 == COMPLEX_TYPE))
2184 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2186 register tree tt0 = TREE_TYPE (type0);
2187 register tree tt1 = TREE_TYPE (type1);
2188 /* Anything compares with void *. void * compares with anything.
2189 Otherwise, the targets must be compatible
2190 and both must be object or both incomplete. */
2191 if (comp_target_types (type0, type1))
2193 else if (TYPE_MAIN_VARIANT (tt0) == void_type_node)
2195 /* op0 != orig_op0 detects the case of something
2196 whose value is 0 but which isn't a valid null ptr const. */
2197 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
2198 && TREE_CODE (tt1) == FUNCTION_TYPE)
2199 pedwarn ("ANSI C forbids comparison of `void *' with function pointer");
2201 else if (TYPE_MAIN_VARIANT (tt1) == void_type_node)
2203 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
2204 && TREE_CODE (tt0) == FUNCTION_TYPE)
2205 pedwarn ("ANSI C forbids comparison of `void *' with function pointer");
2208 pedwarn ("comparison of distinct pointer types lacks a cast");
2210 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2211 && integer_zerop (op1))
2212 op1 = null_pointer_node;
2213 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2214 && integer_zerop (op0))
2215 op0 = null_pointer_node;
2216 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2218 if (! flag_traditional)
2219 pedwarn ("comparison between pointer and integer");
2220 op1 = convert (TREE_TYPE (op0), op1);
2222 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2224 if (! flag_traditional)
2225 pedwarn ("comparison between pointer and integer");
2226 op0 = convert (TREE_TYPE (op1), op0);
2229 /* If args are not valid, clear out RESULT_TYPE
2230 to cause an error message later. */
2236 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2237 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2239 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2241 if (! comp_target_types (type0, type1))
2242 pedwarn ("comparison of distinct pointer types lacks a cast");
2244 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2245 pedwarn ("ANSI C forbids ordered comparisons of pointers to functions");
2246 result_type = common_type (type0, type1);
2254 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2255 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2257 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2259 if (! comp_target_types (type0, type1))
2260 pedwarn ("comparison of distinct pointer types lacks a cast");
2261 else if ((TYPE_SIZE (TREE_TYPE (type0)) != 0)
2262 != (TYPE_SIZE (TREE_TYPE (type1)) != 0))
2263 pedwarn ("comparison of complete and incomplete pointers");
2265 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2266 pedwarn ("ANSI C forbids ordered comparisons of pointers to functions");
2267 result_type = integer_type_node;
2269 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2270 && integer_zerop (op1))
2272 result_type = integer_type_node;
2273 op1 = null_pointer_node;
2275 pedwarn ("ordered comparison of pointer with integer zero");
2277 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2278 && integer_zerop (op0))
2280 result_type = integer_type_node;
2281 op0 = null_pointer_node;
2283 pedwarn ("ordered comparison of pointer with integer zero");
2285 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2287 result_type = integer_type_node;
2288 if (! flag_traditional)
2289 pedwarn ("comparison between pointer and integer");
2290 op1 = convert (TREE_TYPE (op0), op1);
2292 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2294 result_type = integer_type_node;
2295 if (! flag_traditional)
2296 pedwarn ("comparison between pointer and integer");
2297 op0 = convert (TREE_TYPE (op1), op0);
2303 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2305 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2307 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
2309 if (shorten || common || short_compare)
2310 result_type = common_type (type0, type1);
2312 /* For certain operations (which identify themselves by shorten != 0)
2313 if both args were extended from the same smaller type,
2314 do the arithmetic in that type and then extend.
2316 shorten !=0 and !=1 indicates a bitwise operation.
2317 For them, this optimization is safe only if
2318 both args are zero-extended or both are sign-extended.
2319 Otherwise, we might change the result.
2320 Eg, (short)-1 | (unsigned short)-1 is (int)-1
2321 but calculated in (unsigned short) it would be (unsigned short)-1. */
2323 if (shorten && none_complex)
2325 int unsigned0, unsigned1;
2326 tree arg0 = get_narrower (op0, &unsigned0);
2327 tree arg1 = get_narrower (op1, &unsigned1);
2328 /* UNS is 1 if the operation to be done is an unsigned one. */
2329 int uns = TREE_UNSIGNED (result_type);
2332 final_type = result_type;
2334 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
2335 but it *requires* conversion to FINAL_TYPE. */
2337 if ((TYPE_PRECISION (TREE_TYPE (op0))
2338 == TYPE_PRECISION (TREE_TYPE (arg0)))
2339 && TREE_TYPE (op0) != final_type)
2340 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
2341 if ((TYPE_PRECISION (TREE_TYPE (op1))
2342 == TYPE_PRECISION (TREE_TYPE (arg1)))
2343 && TREE_TYPE (op1) != final_type)
2344 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
2346 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
2348 /* For bitwise operations, signedness of nominal type
2349 does not matter. Consider only how operands were extended. */
2353 /* Note that in all three cases below we refrain from optimizing
2354 an unsigned operation on sign-extended args.
2355 That would not be valid. */
2357 /* Both args variable: if both extended in same way
2358 from same width, do it in that width.
2359 Do it unsigned if args were zero-extended. */
2360 if ((TYPE_PRECISION (TREE_TYPE (arg0))
2361 < TYPE_PRECISION (result_type))
2362 && (TYPE_PRECISION (TREE_TYPE (arg1))
2363 == TYPE_PRECISION (TREE_TYPE (arg0)))
2364 && unsigned0 == unsigned1
2365 && (unsigned0 || !uns))
2367 = signed_or_unsigned_type (unsigned0,
2368 common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
2369 else if (TREE_CODE (arg0) == INTEGER_CST
2370 && (unsigned1 || !uns)
2371 && (TYPE_PRECISION (TREE_TYPE (arg1))
2372 < TYPE_PRECISION (result_type))
2373 && (type = signed_or_unsigned_type (unsigned1,
2375 int_fits_type_p (arg0, type)))
2377 else if (TREE_CODE (arg1) == INTEGER_CST
2378 && (unsigned0 || !uns)
2379 && (TYPE_PRECISION (TREE_TYPE (arg0))
2380 < TYPE_PRECISION (result_type))
2381 && (type = signed_or_unsigned_type (unsigned0,
2383 int_fits_type_p (arg1, type)))
2387 /* Shifts can be shortened if shifting right. */
2392 tree arg0 = get_narrower (op0, &unsigned_arg);
2394 final_type = result_type;
2396 if (arg0 == op0 && final_type == TREE_TYPE (op0))
2397 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
2399 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
2400 /* If arg is sign-extended and then unsigned-shifted,
2401 we can simulate this with a signed shift in arg's type
2402 only if the extended result is at least twice as wide
2403 as the arg. Otherwise, the shift could use up all the
2404 ones made by sign-extension and bring in zeros.
2405 We can't optimize that case at all, but in most machines
2406 it never happens because available widths are 2**N. */
2407 && (!TREE_UNSIGNED (final_type)
2409 || 2 * TYPE_PRECISION (TREE_TYPE (arg0)) <= TYPE_PRECISION (result_type)))
2411 /* Do an unsigned shift if the operand was zero-extended. */
2413 = signed_or_unsigned_type (unsigned_arg,
2415 /* Convert value-to-be-shifted to that type. */
2416 if (TREE_TYPE (op0) != result_type)
2417 op0 = convert (result_type, op0);
2422 /* Comparison operations are shortened too but differently.
2423 They identify themselves by setting short_compare = 1. */
2427 /* Don't write &op0, etc., because that would prevent op0
2428 from being kept in a register.
2429 Instead, make copies of the our local variables and
2430 pass the copies by reference, then copy them back afterward. */
2431 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
2432 enum tree_code xresultcode = resultcode;
2434 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
2437 op0 = xop0, op1 = xop1, result_type = xresult_type;
2438 resultcode = xresultcode;
2442 tree op0_type = TREE_TYPE (orig_op0);
2443 tree op1_type = TREE_TYPE (orig_op1);
2444 int op0_unsigned = TREE_UNSIGNED (op0_type);
2445 int op1_unsigned = TREE_UNSIGNED (op1_type);
2447 /* Give warnings for comparisons between signed and unsigned
2448 quantities that will fail. Do not warn if the signed quantity
2449 is an unsuffixed integer literal (or some static constant
2450 expression involving such literals) and it is positive.
2451 Do not warn if the width of the unsigned quantity is less
2452 than that of the signed quantity, since in this case all
2453 values of the unsigned quantity fit in the signed quantity.
2454 Do not warn if the signed type is the same size as the
2455 result_type since sign extension does not cause trouble in
2457 /* Do the checking based on the original operand trees, so that
2458 casts will be considered, but default promotions won't be. */
2459 if (op0_unsigned != op1_unsigned
2461 && TYPE_PRECISION (op0_type) >= TYPE_PRECISION (op1_type)
2462 && TYPE_PRECISION (op0_type) < TYPE_PRECISION (result_type)
2463 && (TREE_CODE (op1) != INTEGER_CST
2464 || (TREE_CODE (op1) == INTEGER_CST
2465 && INT_CST_LT (op1, integer_zero_node))))
2468 && TYPE_PRECISION (op1_type) >= TYPE_PRECISION (op0_type)
2469 && TYPE_PRECISION (op1_type) < TYPE_PRECISION (result_type)
2470 && (TREE_CODE (op0) != INTEGER_CST
2471 || (TREE_CODE (op0) == INTEGER_CST
2472 && INT_CST_LT (op0, integer_zero_node))))))
2473 warning ("comparison between signed and unsigned");
2478 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
2479 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
2480 Then the expression will be built.
2481 It will be given type FINAL_TYPE if that is nonzero;
2482 otherwise, it will be given type RESULT_TYPE. */
2486 binary_op_error (code);
2487 return error_mark_node;
2492 if (TREE_TYPE (op0) != result_type)
2493 op0 = convert (result_type, op0);
2494 if (TREE_TYPE (op1) != result_type)
2495 op1 = convert (result_type, op1);
2499 register tree result = build (resultcode, result_type, op0, op1);
2500 register tree folded;
2502 folded = fold (result);
2503 if (folded == result)
2504 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2505 if (final_type != 0)
2506 return convert (final_type, folded);
2511 /* Return a tree for the sum or difference (RESULTCODE says which)
2512 of pointer PTROP and integer INTOP. */
2515 pointer_int_sum (resultcode, ptrop, intop)
2516 enum tree_code resultcode;
2517 register tree ptrop, intop;
2521 register tree result;
2522 register tree folded;
2524 /* The result is a pointer of the same type that is being added. */
2526 register tree result_type = TREE_TYPE (ptrop);
2528 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2530 if (pedantic || warn_pointer_arith)
2531 pedwarn ("pointer of type `void *' used in arithmetic");
2532 size_exp = integer_one_node;
2534 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2536 if (pedantic || warn_pointer_arith)
2537 pedwarn ("pointer to a function used in arithmetic");
2538 size_exp = integer_one_node;
2541 size_exp = c_size_in_bytes (TREE_TYPE (result_type));
2543 /* If what we are about to multiply by the size of the elements
2544 contains a constant term, apply distributive law
2545 and multiply that constant term separately.
2546 This helps produce common subexpressions. */
2548 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2549 && ! TREE_CONSTANT (intop)
2550 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2551 && TREE_CONSTANT (size_exp)
2552 /* If the constant comes from pointer subtraction,
2553 skip this optimization--it would cause an error. */
2554 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE)
2556 enum tree_code subcode = resultcode;
2557 tree int_type = TREE_TYPE (intop);
2558 if (TREE_CODE (intop) == MINUS_EXPR)
2559 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2560 /* Convert both subexpression types to the type of intop,
2561 because weird cases involving pointer arithmetic
2562 can result in a sum or difference with different type args. */
2563 ptrop = build_binary_op (subcode, ptrop,
2564 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2565 intop = convert (int_type, TREE_OPERAND (intop, 0));
2568 /* Convert the integer argument to a type the same size as a pointer
2569 so the multiply won't overflow spuriously. */
2571 if (TYPE_PRECISION (TREE_TYPE (intop)) != POINTER_SIZE)
2572 intop = convert (type_for_size (POINTER_SIZE, 0), intop);
2574 /* Replace the integer argument with a suitable product by the object size.
2575 Do this multiplication as signed, then convert to the appropriate
2576 pointer type (actually unsigned integral). */
2578 intop = convert (result_type,
2579 build_binary_op (MULT_EXPR, intop,
2580 convert (TREE_TYPE (intop), size_exp), 1));
2582 /* Create the sum or difference. */
2584 result = build (resultcode, result_type, ptrop, intop);
2586 folded = fold (result);
2587 if (folded == result)
2588 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2592 /* Return a tree for the difference of pointers OP0 and OP1.
2593 The resulting tree has type int. */
2596 pointer_diff (op0, op1)
2597 register tree op0, op1;
2599 register tree result, folded;
2600 tree restype = ptrdiff_type_node;
2602 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2604 if (pedantic || warn_pointer_arith)
2606 if (TREE_CODE (target_type) == VOID_TYPE)
2607 pedwarn ("pointer of type `void *' used in subtraction");
2608 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2609 pedwarn ("pointer to a function used in subtraction");
2612 /* First do the subtraction as integers;
2613 then drop through to build the divide operator. */
2615 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2616 convert (restype, op1), 1);
2617 /* This generates an error if op1 is pointer to incomplete type. */
2618 if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (op1))) == 0)
2619 error ("arithmetic on pointer to an incomplete type");
2621 /* This generates an error if op0 is pointer to incomplete type. */
2622 op1 = c_size_in_bytes (target_type);
2624 /* Divide by the size, in easiest possible way. */
2626 result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2628 folded = fold (result);
2629 if (folded == result)
2630 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2634 /* Construct and perhaps optimize a tree representation
2635 for a unary operation. CODE, a tree_code, specifies the operation
2636 and XARG is the operand. NOCONVERT nonzero suppresses
2637 the default promotions (such as from short to int). */
2640 build_unary_op (code, xarg, noconvert)
2641 enum tree_code code;
2645 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2646 register tree arg = xarg;
2647 register tree argtype = 0;
2648 register enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2649 char *errstring = NULL;
2652 if (typecode == ERROR_MARK)
2653 return error_mark_node;
2654 if (typecode == ENUMERAL_TYPE)
2655 typecode = INTEGER_TYPE;
2660 /* This is used for unary plus, because a CONVERT_EXPR
2661 is enough to prevent anybody from looking inside for
2662 associativity, but won't generate any code. */
2663 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2664 || typecode == COMPLEX_TYPE))
2665 errstring = "wrong type argument to unary plus";
2666 else if (!noconvert)
2667 arg = default_conversion (arg);
2671 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2672 || typecode == COMPLEX_TYPE))
2673 errstring = "wrong type argument to unary minus";
2674 else if (!noconvert)
2675 arg = default_conversion (arg);
2679 if (typecode == COMPLEX_TYPE)
2683 arg = default_conversion (arg);
2685 else if (typecode != INTEGER_TYPE)
2686 errstring = "wrong type argument to bit-complement";
2687 else if (!noconvert)
2688 arg = default_conversion (arg);
2692 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2693 || typecode == COMPLEX_TYPE))
2694 errstring = "wrong type argument to abs";
2695 else if (!noconvert)
2696 arg = default_conversion (arg);
2700 /* Conjugating a real value is a no-op, but allow it anyway. */
2701 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2702 || typecode == COMPLEX_TYPE))
2703 errstring = "wrong type argument to conjugation";
2704 else if (!noconvert)
2705 arg = default_conversion (arg);
2708 case TRUTH_NOT_EXPR:
2709 if (typecode != INTEGER_TYPE
2710 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2711 && typecode != COMPLEX_TYPE
2712 /* These will convert to a pointer. */
2713 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2715 errstring = "wrong type argument to unary exclamation mark";
2718 arg = truthvalue_conversion (arg);
2719 return invert_truthvalue (arg);
2725 if (TREE_CODE (arg) == COMPLEX_CST)
2726 return TREE_REALPART (arg);
2727 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2728 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2733 if (TREE_CODE (arg) == COMPLEX_CST)
2734 return TREE_IMAGPART (arg);
2735 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2736 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2738 return convert (TREE_TYPE (arg), integer_zero_node);
2740 case PREINCREMENT_EXPR:
2741 case POSTINCREMENT_EXPR:
2742 case PREDECREMENT_EXPR:
2743 case POSTDECREMENT_EXPR:
2744 /* Handle complex lvalues (when permitted)
2745 by reduction to simpler cases. */
2747 val = unary_complex_lvalue (code, arg);
2751 /* Increment or decrement the real part of the value,
2752 and don't change the imaginary part. */
2753 if (typecode == COMPLEX_TYPE)
2757 arg = stabilize_reference (arg);
2758 real = build_unary_op (REALPART_EXPR, arg, 1);
2759 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2760 return build (COMPLEX_EXPR, TREE_TYPE (arg),
2761 build_unary_op (code, real, 1), imag);
2764 /* Report invalid types. */
2766 if (typecode != POINTER_TYPE
2767 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2769 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2770 errstring ="wrong type argument to increment";
2772 errstring ="wrong type argument to decrement";
2778 tree result_type = TREE_TYPE (arg);
2780 arg = get_unwidened (arg, 0);
2781 argtype = TREE_TYPE (arg);
2783 /* Compute the increment. */
2785 if (typecode == POINTER_TYPE)
2787 /* If pointer target is an undefined struct,
2788 we just cannot know how to do the arithmetic. */
2789 if (TYPE_SIZE (TREE_TYPE (result_type)) == 0)
2790 error ("%s of pointer to unknown structure",
2791 ((code == PREINCREMENT_EXPR
2792 || code == POSTINCREMENT_EXPR)
2793 ? "increment" : "decrement"));
2794 else if ((pedantic || warn_pointer_arith)
2795 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2796 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2797 pedwarn ("wrong type argument to %s",
2798 ((code == PREINCREMENT_EXPR
2799 || code == POSTINCREMENT_EXPR)
2800 ? "increment" : "decrement"));
2801 inc = c_sizeof_nowarn (TREE_TYPE (result_type));
2804 inc = integer_one_node;
2806 inc = convert (argtype, inc);
2808 /* Handle incrementing a cast-expression. */
2811 switch (TREE_CODE (arg))
2816 case FIX_TRUNC_EXPR:
2817 case FIX_FLOOR_EXPR:
2818 case FIX_ROUND_EXPR:
2820 pedantic_lvalue_warning (CONVERT_EXPR);
2821 /* If the real type has the same machine representation
2822 as the type it is cast to, we can make better output
2823 by adding directly to the inside of the cast. */
2824 if ((TREE_CODE (TREE_TYPE (arg))
2825 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
2826 && (TYPE_MODE (TREE_TYPE (arg))
2827 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
2828 arg = TREE_OPERAND (arg, 0);
2831 tree incremented, modify, value;
2832 arg = stabilize_reference (arg);
2833 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
2836 value = save_expr (arg);
2837 incremented = build (((code == PREINCREMENT_EXPR
2838 || code == POSTINCREMENT_EXPR)
2839 ? PLUS_EXPR : MINUS_EXPR),
2840 argtype, value, inc);
2841 TREE_SIDE_EFFECTS (incremented) = 1;
2842 modify = build_modify_expr (arg, NOP_EXPR, incremented);
2843 value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
2844 TREE_USED (value) = 1;
2854 /* Complain about anything else that is not a true lvalue. */
2855 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2856 || code == POSTINCREMENT_EXPR)
2857 ? "increment" : "decrement")))
2858 return error_mark_node;
2860 /* Report a read-only lvalue. */
2861 if (TREE_READONLY (arg))
2862 readonly_warning (arg,
2863 ((code == PREINCREMENT_EXPR
2864 || code == POSTINCREMENT_EXPR)
2865 ? "increment" : "decrement"));
2867 val = build (code, TREE_TYPE (arg), arg, inc);
2868 TREE_SIDE_EFFECTS (val) = 1;
2869 val = convert (result_type, val);
2870 if (TREE_CODE (val) != code)
2871 TREE_NO_UNUSED_WARNING (val) = 1;
2876 /* Note that this operation never does default_conversion
2877 regardless of NOCONVERT. */
2879 /* Let &* cancel out to simplify resulting code. */
2880 if (TREE_CODE (arg) == INDIRECT_REF)
2882 /* Don't let this be an lvalue. */
2883 if (lvalue_p (TREE_OPERAND (arg, 0)))
2884 return non_lvalue (TREE_OPERAND (arg, 0));
2885 return TREE_OPERAND (arg, 0);
2888 /* For &x[y], return x+y */
2889 if (TREE_CODE (arg) == ARRAY_REF)
2891 if (mark_addressable (TREE_OPERAND (arg, 0)) == 0)
2892 return error_mark_node;
2893 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
2894 TREE_OPERAND (arg, 1), 1);
2897 /* Handle complex lvalues (when permitted)
2898 by reduction to simpler cases. */
2899 val = unary_complex_lvalue (code, arg);
2903 #if 0 /* Turned off because inconsistent;
2904 float f; *&(int)f = 3.4 stores in int format
2905 whereas (int)f = 3.4 stores in float format. */
2906 /* Address of a cast is just a cast of the address
2907 of the operand of the cast. */
2908 switch (TREE_CODE (arg))
2913 case FIX_TRUNC_EXPR:
2914 case FIX_FLOOR_EXPR:
2915 case FIX_ROUND_EXPR:
2918 pedwarn ("ANSI C forbids the address of a cast expression");
2919 return convert (build_pointer_type (TREE_TYPE (arg)),
2920 build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0),
2925 /* Allow the address of a constructor if all the elements
2927 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_CONSTANT (arg))
2929 /* Anything not already handled and not a true memory reference
2931 else if (typecode != FUNCTION_TYPE && !lvalue_or_else (arg, "unary `&'"))
2932 return error_mark_node;
2934 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2935 argtype = TREE_TYPE (arg);
2936 /* If the lvalue is const or volatile,
2937 merge that into the type that the address will point to. */
2938 if (TREE_CODE_CLASS (TREE_CODE (arg)) == 'd'
2939 || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
2941 if (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg))
2942 argtype = c_build_type_variant (argtype,
2943 TREE_READONLY (arg),
2944 TREE_THIS_VOLATILE (arg));
2947 argtype = build_pointer_type (argtype);
2949 if (mark_addressable (arg) == 0)
2950 return error_mark_node;
2955 if (TREE_CODE (arg) == COMPONENT_REF)
2957 tree field = TREE_OPERAND (arg, 1);
2959 addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
2961 if (DECL_BIT_FIELD (field))
2963 error ("attempt to take address of bit-field structure member `%s'",
2964 IDENTIFIER_POINTER (DECL_NAME (field)));
2965 return error_mark_node;
2968 addr = convert (argtype, addr);
2970 if (! integer_zerop (DECL_FIELD_BITPOS (field)))
2973 = size_binop (EASY_DIV_EXPR, DECL_FIELD_BITPOS (field),
2974 size_int (BITS_PER_UNIT));
2975 int flag = TREE_CONSTANT (addr);
2976 addr = fold (build (PLUS_EXPR, argtype,
2977 addr, convert (argtype, offset)));
2978 TREE_CONSTANT (addr) = flag;
2982 addr = build1 (code, argtype, arg);
2984 /* Address of a static or external variable or
2985 file-scope function counts as a constant. */
2987 && ! (TREE_CODE (arg) == FUNCTION_DECL
2988 && DECL_CONTEXT (arg) != 0))
2989 TREE_CONSTANT (addr) = 1;
2997 argtype = TREE_TYPE (arg);
2998 return fold (build1 (code, argtype, arg));
3002 return error_mark_node;
3006 /* If CONVERSIONS is a conversion expression or a nested sequence of such,
3007 convert ARG with the same conversions in the same order
3008 and return the result. */
3011 convert_sequence (conversions, arg)
3015 switch (TREE_CODE (conversions))
3020 case FIX_TRUNC_EXPR:
3021 case FIX_FLOOR_EXPR:
3022 case FIX_ROUND_EXPR:
3024 return convert (TREE_TYPE (conversions),
3025 convert_sequence (TREE_OPERAND (conversions, 0),
3034 /* Return nonzero if REF is an lvalue valid for this language.
3035 Lvalues can be assigned, unless their type has TYPE_READONLY.
3036 Lvalues can have their address taken, unless they have DECL_REGISTER. */
3042 register enum tree_code code = TREE_CODE (ref);
3049 return lvalue_p (TREE_OPERAND (ref, 0));
3060 if (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3061 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
3068 /* Return nonzero if REF is an lvalue valid for this language;
3069 otherwise, print an error message and return zero. */
3072 lvalue_or_else (ref, string)
3076 int win = lvalue_p (ref);
3078 error ("invalid lvalue in %s", string);
3082 /* Apply unary lvalue-demanding operator CODE to the expression ARG
3083 for certain kinds of expressions which are not really lvalues
3084 but which we can accept as lvalues.
3086 If ARG is not a kind of expression we can handle, return zero. */
3089 unary_complex_lvalue (code, arg)
3090 enum tree_code code;
3093 /* Handle (a, b) used as an "lvalue". */
3094 if (TREE_CODE (arg) == COMPOUND_EXPR)
3096 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
3097 pedantic_lvalue_warning (COMPOUND_EXPR);
3098 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
3099 TREE_OPERAND (arg, 0), real_result);
3102 /* Handle (a ? b : c) used as an "lvalue". */
3103 if (TREE_CODE (arg) == COND_EXPR)
3105 pedantic_lvalue_warning (COND_EXPR);
3106 return (build_conditional_expr
3107 (TREE_OPERAND (arg, 0),
3108 build_unary_op (code, TREE_OPERAND (arg, 1), 0),
3109 build_unary_op (code, TREE_OPERAND (arg, 2), 0)));
3115 /* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
3116 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
3119 pedantic_lvalue_warning (code)
3120 enum tree_code code;
3123 pedwarn ("ANSI C forbids use of %s expressions as lvalues",
3124 code == COND_EXPR ? "conditional"
3125 : code == COMPOUND_EXPR ? "compound" : "cast");
3128 /* Warn about storing in something that is `const'. */
3131 readonly_warning (arg, string)
3136 strcpy (buf, string);
3138 /* Forbid assignments to iterators. */
3139 if (TREE_CODE (arg) == VAR_DECL && ITERATOR_P (arg))
3141 strcat (buf, " of iterator `%s'");
3142 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (arg)));
3145 if (TREE_CODE (arg) == COMPONENT_REF)
3147 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3148 readonly_warning (TREE_OPERAND (arg, 0), string);
3151 strcat (buf, " of read-only member `%s'");
3152 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
3155 else if (TREE_CODE (arg) == VAR_DECL)
3157 strcat (buf, " of read-only variable `%s'");
3158 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (arg)));
3162 pedwarn ("%s of read-only location", buf);
3166 /* Mark EXP saying that we need to be able to take the
3167 address of it; it should not be allocated in a register.
3168 Value is 1 if successful. */
3171 mark_addressable (exp)
3174 register tree x = exp;
3176 switch (TREE_CODE (x))
3183 x = TREE_OPERAND (x, 0);
3187 TREE_ADDRESSABLE (x) = 1;
3194 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
3195 && DECL_NONLOCAL (x))
3197 if (TREE_PUBLIC (x))
3199 error ("global register variable `%s' used in nested function",
3200 IDENTIFIER_POINTER (DECL_NAME (x)));
3203 pedwarn ("register variable `%s' used in nested function",
3204 IDENTIFIER_POINTER (DECL_NAME (x)));
3206 else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
3208 if (TREE_PUBLIC (x))
3210 error ("address of global register variable `%s' requested",
3211 IDENTIFIER_POINTER (DECL_NAME (x)));
3214 pedwarn ("address of register variable `%s' requested",
3215 IDENTIFIER_POINTER (DECL_NAME (x)));
3217 put_var_into_stack (x);
3221 TREE_ADDRESSABLE (x) = 1;
3222 #if 0 /* poplevel deals with this now. */
3223 if (DECL_CONTEXT (x) == 0)
3224 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
3232 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
3235 build_conditional_expr (ifexp, op1, op2)
3236 tree ifexp, op1, op2;
3238 register tree type1;
3239 register tree type2;
3240 register enum tree_code code1;
3241 register enum tree_code code2;
3242 register tree result_type = NULL;
3243 tree orig_op1 = op1, orig_op2 = op2;
3245 /* If second operand is omitted, it is the same as the first one;
3246 make sure it is calculated only once. */
3250 pedwarn ("ANSI C forbids omitting the middle term of a ?: expression");
3251 ifexp = op1 = save_expr (ifexp);
3254 ifexp = truthvalue_conversion (default_conversion (ifexp));
3256 #if 0 /* Produces wrong result if within sizeof. */
3257 /* Don't promote the operands separately if they promote
3258 the same way. Return the unpromoted type and let the combined
3259 value get promoted if necessary. */
3261 if (TREE_TYPE (op1) == TREE_TYPE (op2)
3262 && TREE_CODE (TREE_TYPE (op1)) != ARRAY_TYPE
3263 && TREE_CODE (TREE_TYPE (op1)) != ENUMERAL_TYPE
3264 && TREE_CODE (TREE_TYPE (op1)) != FUNCTION_TYPE)
3266 if (TREE_CODE (ifexp) == INTEGER_CST)
3267 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3269 return fold (build (COND_EXPR, TREE_TYPE (op1), ifexp, op1, op2));
3273 /* Promote both alternatives. */
3275 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3276 op1 = default_conversion (op1);
3277 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3278 op2 = default_conversion (op2);
3280 if (TREE_CODE (ifexp) == ERROR_MARK
3281 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3282 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3283 return error_mark_node;
3285 type1 = TREE_TYPE (op1);
3286 code1 = TREE_CODE (type1);
3287 type2 = TREE_TYPE (op2);
3288 code2 = TREE_CODE (type2);
3290 /* Quickly detect the usual case where op1 and op2 have the same type
3292 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3295 result_type = type1;
3297 result_type = TYPE_MAIN_VARIANT (type1);
3299 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE)
3300 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE))
3302 result_type = common_type (type1, type2);
3304 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3306 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3307 pedwarn ("ANSI C forbids conditional expr with only one void side");
3308 result_type = void_type_node;
3310 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3312 if (comp_target_types (type1, type2))
3313 result_type = common_type (type1, type2);
3314 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3315 && TREE_CODE (orig_op1) != NOP_EXPR)
3316 result_type = qualify_type (type2, type1);
3317 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3318 && TREE_CODE (orig_op2) != NOP_EXPR)
3319 result_type = qualify_type (type1, type2);
3320 else if (TYPE_MAIN_VARIANT (TREE_TYPE (type1)) == void_type_node)
3322 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3323 pedwarn ("ANSI C forbids conditional expr between `void *' and function pointer");
3324 result_type = qualify_type (type1, type2);
3326 else if (TYPE_MAIN_VARIANT (TREE_TYPE (type2)) == void_type_node)
3328 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3329 pedwarn ("ANSI C forbids conditional expr between `void *' and function pointer");
3330 result_type = qualify_type (type2, type1);
3334 pedwarn ("pointer type mismatch in conditional expression");
3335 result_type = build_pointer_type (void_type_node);
3338 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3340 if (! integer_zerop (op2))
3341 pedwarn ("pointer/integer type mismatch in conditional expression");
3344 op2 = null_pointer_node;
3345 #if 0 /* The spec seems to say this is permitted. */
3346 if (pedantic && TREE_CODE (type1) == FUNCTION_TYPE)
3347 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3350 result_type = type1;
3352 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3354 if (!integer_zerop (op1))
3355 pedwarn ("pointer/integer type mismatch in conditional expression");
3358 op1 = null_pointer_node;
3359 #if 0 /* The spec seems to say this is permitted. */
3360 if (pedantic && TREE_CODE (type2) == FUNCTION_TYPE)
3361 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3364 result_type = type2;
3369 if (flag_cond_mismatch)
3370 result_type = void_type_node;
3373 error ("type mismatch in conditional expression");
3374 return error_mark_node;
3378 /* Merge const and volatile flags of the incoming types. */
3380 = build_type_variant (result_type,
3381 TREE_READONLY (op1) || TREE_READONLY (op2),
3382 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3384 if (result_type != TREE_TYPE (op1))
3385 op1 = convert_and_check (result_type, op1);
3386 if (result_type != TREE_TYPE (op2))
3387 op2 = convert_and_check (result_type, op2);
3390 if (code1 == RECORD_TYPE || code1 == UNION_TYPE)
3392 result_type = TREE_TYPE (op1);
3393 if (TREE_CONSTANT (ifexp))
3394 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3396 if (TYPE_MODE (result_type) == BLKmode)
3398 register tree tempvar
3399 = build_decl (VAR_DECL, NULL_TREE, result_type);
3400 register tree xop1 = build_modify_expr (tempvar, op1);
3401 register tree xop2 = build_modify_expr (tempvar, op2);
3402 register tree result = fold (build (COND_EXPR, result_type,
3403 ifexp, xop1, xop2));
3405 layout_decl (tempvar, TYPE_ALIGN (result_type));
3406 /* No way to handle variable-sized objects here.
3407 I fear that the entire handling of BLKmode conditional exprs
3408 needs to be redone. */
3409 if (TREE_CODE (DECL_SIZE (tempvar)) != INTEGER_CST)
3412 = assign_stack_local (DECL_MODE (tempvar),
3413 (TREE_INT_CST_LOW (DECL_SIZE (tempvar))
3414 + BITS_PER_UNIT - 1)
3418 TREE_SIDE_EFFECTS (result)
3419 = TREE_SIDE_EFFECTS (ifexp) | TREE_SIDE_EFFECTS (op1)
3420 | TREE_SIDE_EFFECTS (op2);
3421 return build (COMPOUND_EXPR, result_type, result, tempvar);
3426 if (TREE_CODE (ifexp) == INTEGER_CST)
3427 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3429 return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
3432 /* Given a list of expressions, return a compound expression
3433 that performs them all and returns the value of the last of them. */
3436 build_compound_expr (list)
3439 return internal_build_compound_expr (list, TRUE);
3443 internal_build_compound_expr (list, first_p)
3449 if (TREE_CHAIN (list) == 0)
3451 #if 0 /* If something inside inhibited lvalueness, we should not override. */
3452 /* Consider (x, y+0), which is not an lvalue since y+0 is not. */
3454 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3455 if (TREE_CODE (list) == NON_LVALUE_EXPR)
3456 list = TREE_OPERAND (list, 0);
3459 /* Don't let (0, 0) be null pointer constant. */
3460 if (!first_p && integer_zerop (TREE_VALUE (list)))
3461 return non_lvalue (TREE_VALUE (list));
3462 return TREE_VALUE (list);
3465 if (TREE_CHAIN (list) != 0 && TREE_CHAIN (TREE_CHAIN (list)) == 0)
3467 /* Convert arrays to pointers when there really is a comma operator. */
3468 if (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (list)))) == ARRAY_TYPE)
3469 TREE_VALUE (TREE_CHAIN (list))
3470 = default_conversion (TREE_VALUE (TREE_CHAIN (list)));
3473 rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
3475 /* When pedantic, a compound expression can be neither an lvalue
3476 nor an integer constant expression. */
3477 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)) && ! pedantic)
3480 return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
3483 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3486 build_c_cast (type, expr)
3490 register tree value = expr;
3492 if (type == error_mark_node || expr == error_mark_node)
3493 return error_mark_node;
3494 type = TYPE_MAIN_VARIANT (type);
3497 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3498 if (TREE_CODE (value) == NON_LVALUE_EXPR)
3499 value = TREE_OPERAND (value, 0);
3502 if (TREE_CODE (type) == ARRAY_TYPE)
3504 error ("cast specifies array type");
3505 return error_mark_node;
3508 if (TREE_CODE (type) == FUNCTION_TYPE)
3510 error ("cast specifies function type");
3511 return error_mark_node;
3514 if (type == TREE_TYPE (value))
3518 if (TREE_CODE (type) == RECORD_TYPE
3519 || TREE_CODE (type) == UNION_TYPE)
3520 pedwarn ("ANSI C forbids casting nonscalar to the same type");
3523 else if (TREE_CODE (type) == UNION_TYPE)
3526 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
3527 || TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE)
3528 value = default_conversion (value);
3530 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3531 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3532 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3541 pedwarn ("ANSI C forbids casts to union type");
3542 if (TYPE_NAME (type) != 0)
3544 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
3545 name = IDENTIFIER_POINTER (TYPE_NAME (type));
3547 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
3551 t = digest_init (type, build (CONSTRUCTOR, type, NULL_TREE,
3552 build_tree_list (field, value)),
3554 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3557 error ("cast to union type from type not present in union");
3558 return error_mark_node;
3564 /* If casting to void, avoid the error that would come
3565 from default_conversion in the case of a non-lvalue array. */
3566 if (type == void_type_node)
3567 return build1 (CONVERT_EXPR, type, value);
3569 /* Convert functions and arrays to pointers,
3570 but don't convert any other types. */
3571 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
3572 || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE)
3573 value = default_conversion (value);
3574 otype = TREE_TYPE (value);
3576 /* Optionally warn about potentially worrisome casts. */
3579 && TREE_CODE (type) == POINTER_TYPE
3580 && TREE_CODE (otype) == POINTER_TYPE)
3582 if (TYPE_VOLATILE (TREE_TYPE (otype))
3583 && ! TYPE_VOLATILE (TREE_TYPE (type)))
3584 pedwarn ("cast discards `volatile' from pointer target type");
3585 if (TYPE_READONLY (TREE_TYPE (otype))
3586 && ! TYPE_READONLY (TREE_TYPE (type)))
3587 pedwarn ("cast discards `const' from pointer target type");
3590 /* Warn about possible alignment problems. */
3591 if (STRICT_ALIGNMENT && warn_cast_align
3592 && TREE_CODE (type) == POINTER_TYPE
3593 && TREE_CODE (otype) == POINTER_TYPE
3594 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3595 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3596 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3597 warning ("cast increases required alignment of target type");
3599 if (TREE_CODE (type) == INTEGER_TYPE
3600 && TREE_CODE (otype) == POINTER_TYPE
3601 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3602 && !TREE_CONSTANT (value))
3603 warning ("cast from pointer to integer of different size");
3605 if (warn_bad_function_cast
3606 && TREE_CODE (value) == CALL_EXPR
3607 && TREE_CODE (type) != TREE_CODE (otype))
3608 warning ("cast does not match function type");
3610 if (TREE_CODE (type) == POINTER_TYPE
3611 && TREE_CODE (otype) == INTEGER_TYPE
3612 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3614 /* Don't warn about converting 0 to pointer,
3615 provided the 0 was explicit--not cast or made by folding. */
3616 && !(TREE_CODE (value) == INTEGER_CST && integer_zerop (value))
3618 /* Don't warn about converting any constant. */
3619 && !TREE_CONSTANT (value))
3620 warning ("cast to pointer from integer of different size");
3623 value = convert (type, value);
3625 /* Ignore any integer overflow caused by the cast. */
3626 if (TREE_CODE (value) == INTEGER_CST)
3628 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3629 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3633 /* Pedantically, don't ley (void *) (FOO *) 0 be a null pointer constant. */
3634 if (pedantic && TREE_CODE (value) == INTEGER_CST
3635 && TREE_CODE (expr) == INTEGER_CST
3636 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3637 value = non_lvalue (value);
3639 /* If pedantic, don't let a cast be an lvalue. */
3640 if (value == expr && pedantic)
3641 value = non_lvalue (value);
3646 /* Build an assignment expression of lvalue LHS from value RHS.
3647 MODIFYCODE is the code for a binary operator that we use
3648 to combine the old value of LHS with RHS to get the new value.
3649 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3652 build_modify_expr (lhs, modifycode, rhs)
3654 enum tree_code modifycode;
3656 register tree result;
3658 tree lhstype = TREE_TYPE (lhs);
3659 tree olhstype = lhstype;
3661 /* Types that aren't fully specified cannot be used in assignments. */
3662 lhs = require_complete_type (lhs);
3664 /* Avoid duplicate error messages from operands that had errors. */
3665 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3666 return error_mark_node;
3668 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3669 /* Do not use STRIP_NOPS here. We do not want an enumerator
3670 whose value is 0 to count as a null pointer constant. */
3671 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3672 rhs = TREE_OPERAND (rhs, 0);
3676 /* Handle control structure constructs used as "lvalues". */
3678 switch (TREE_CODE (lhs))
3680 /* Handle (a, b) used as an "lvalue". */
3682 pedantic_lvalue_warning (COMPOUND_EXPR);
3683 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
3685 if (TREE_CODE (newrhs) == ERROR_MARK)
3686 return error_mark_node;
3687 return build (COMPOUND_EXPR, lhstype,
3688 TREE_OPERAND (lhs, 0), newrhs);
3690 /* Handle (a ? b : c) used as an "lvalue". */
3692 pedantic_lvalue_warning (COND_EXPR);
3693 rhs = save_expr (rhs);
3695 /* Produce (a ? (b = rhs) : (c = rhs))
3696 except that the RHS goes through a save-expr
3697 so the code to compute it is only emitted once. */
3699 = build_conditional_expr (TREE_OPERAND (lhs, 0),
3700 build_modify_expr (TREE_OPERAND (lhs, 1),
3702 build_modify_expr (TREE_OPERAND (lhs, 2),
3704 if (TREE_CODE (cond) == ERROR_MARK)
3706 /* Make sure the code to compute the rhs comes out
3707 before the split. */
3708 return build (COMPOUND_EXPR, TREE_TYPE (lhs),
3709 /* But cast it to void to avoid an "unused" error. */
3710 convert (void_type_node, rhs), cond);
3714 /* If a binary op has been requested, combine the old LHS value with the RHS
3715 producing the value we should actually store into the LHS. */
3717 if (modifycode != NOP_EXPR)
3719 lhs = stabilize_reference (lhs);
3720 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3723 /* Handle a cast used as an "lvalue".
3724 We have already performed any binary operator using the value as cast.
3725 Now convert the result to the cast type of the lhs,
3726 and then true type of the lhs and store it there;
3727 then convert result back to the cast type to be the value
3728 of the assignment. */
3730 switch (TREE_CODE (lhs))
3735 case FIX_TRUNC_EXPR:
3736 case FIX_FLOOR_EXPR:
3737 case FIX_ROUND_EXPR:
3739 if (TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
3740 || TREE_CODE (TREE_TYPE (newrhs)) == FUNCTION_TYPE)
3741 newrhs = default_conversion (newrhs);
3743 tree inner_lhs = TREE_OPERAND (lhs, 0);
3745 result = build_modify_expr (inner_lhs, NOP_EXPR,
3746 convert (TREE_TYPE (inner_lhs),
3747 convert (lhstype, newrhs)));
3748 if (TREE_CODE (result) == ERROR_MARK)
3750 pedantic_lvalue_warning (CONVERT_EXPR);
3751 return convert (TREE_TYPE (lhs), result);
3755 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3756 Reject anything strange now. */
3758 if (!lvalue_or_else (lhs, "assignment"))
3759 return error_mark_node;
3761 /* Warn about storing in something that is `const'. */
3763 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3764 || ((TREE_CODE (lhstype) == RECORD_TYPE
3765 || TREE_CODE (lhstype) == UNION_TYPE)
3766 && C_TYPE_FIELDS_READONLY (lhstype)))
3767 readonly_warning (lhs, "assignment");
3769 /* If storing into a structure or union member,
3770 it has probably been given type `int'.
3771 Compute the type that would go with
3772 the actual amount of storage the member occupies. */
3774 if (TREE_CODE (lhs) == COMPONENT_REF
3775 && (TREE_CODE (lhstype) == INTEGER_TYPE
3776 || TREE_CODE (lhstype) == REAL_TYPE
3777 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3778 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3780 /* If storing in a field that is in actuality a short or narrower than one,
3781 we must store in the field in its actual type. */
3783 if (lhstype != TREE_TYPE (lhs))
3785 lhs = copy_node (lhs);
3786 TREE_TYPE (lhs) = lhstype;
3789 /* Convert new value to destination type. */
3791 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
3792 NULL_TREE, NULL_TREE, 0);
3793 if (TREE_CODE (newrhs) == ERROR_MARK)
3794 return error_mark_node;
3796 result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
3797 TREE_SIDE_EFFECTS (result) = 1;
3799 /* If we got the LHS in a different type for storing in,
3800 convert the result back to the nominal type of LHS
3801 so that the value we return always has the same type
3802 as the LHS argument. */
3804 if (olhstype == TREE_TYPE (result))
3806 return convert_for_assignment (olhstype, result, "assignment",
3807 NULL_TREE, NULL_TREE, 0);
3810 /* Convert value RHS to type TYPE as preparation for an assignment
3811 to an lvalue of type TYPE.
3812 The real work of conversion is done by `convert'.
3813 The purpose of this function is to generate error messages
3814 for assignments that are not allowed in C.
3815 ERRTYPE is a string to use in error messages:
3816 "assignment", "return", etc. If it is null, this is parameter passing
3817 for a function call (and different error messages are output). Otherwise,
3818 it may be a name stored in the spelling stack and interpreted by
3821 FUNNAME is the name of the function being called,
3822 as an IDENTIFIER_NODE, or null.
3823 PARMNUM is the number of the argument, for printing in error messages. */
3826 convert_for_assignment (type, rhs, errtype, fundecl, funname, parmnum)
3829 tree fundecl, funname;
3832 register enum tree_code codel = TREE_CODE (type);
3833 register tree rhstype;
3834 register enum tree_code coder;
3836 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3837 /* Do not use STRIP_NOPS here. We do not want an enumerator
3838 whose value is 0 to count as a null pointer constant. */
3839 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3840 rhs = TREE_OPERAND (rhs, 0);
3842 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3843 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3844 rhs = default_conversion (rhs);
3845 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3846 rhs = decl_constant_value (rhs);
3848 rhstype = TREE_TYPE (rhs);
3849 coder = TREE_CODE (rhstype);
3851 if (coder == ERROR_MARK)
3852 return error_mark_node;
3854 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3856 overflow_warning (rhs);
3857 /* Check for Objective-C protocols. This will issue a warning if
3858 there are protocol violations. No need to use the return value. */
3859 maybe_objc_comptypes (type, rhstype, 0);
3863 if (coder == VOID_TYPE)
3865 error ("void value not ignored as it ought to be");
3866 return error_mark_node;
3868 /* Arithmetic types all interconvert, and enum is treated like int. */
3869 if ((codel == INTEGER_TYPE || codel == REAL_TYPE || codel == ENUMERAL_TYPE
3870 || codel == COMPLEX_TYPE)
3872 (coder == INTEGER_TYPE || coder == REAL_TYPE || coder == ENUMERAL_TYPE
3873 || coder == COMPLEX_TYPE))
3874 return convert_and_check (type, rhs);
3875 /* Conversion to a union from its member types. */
3876 else if (codel == UNION_TYPE)
3879 for (memb_types = TYPE_FIELDS (type); memb_types;
3880 memb_types = TREE_CHAIN (memb_types))
3882 if (comptypes (TREE_TYPE (memb_types), TREE_TYPE (rhs)))
3885 && !(fundecl != 0 && DECL_IN_SYSTEM_HEADER (fundecl)))
3886 pedwarn ("ANSI C prohibits argument conversion to union type");
3887 return build1 (NOP_EXPR, type, rhs);
3889 else if (coder == POINTER_TYPE
3890 && TREE_CODE (TREE_TYPE (memb_types)) == POINTER_TYPE)
3892 tree memb_type = TREE_TYPE (memb_types);
3893 register tree ttl = TREE_TYPE (memb_type);
3894 register tree ttr = TREE_TYPE (rhstype);
3896 /* Any non-function converts to a [const][volatile] void *
3897 and vice versa; otherwise, targets must be the same.
3898 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3899 if (TYPE_MAIN_VARIANT (ttl) == void_type_node
3900 || TYPE_MAIN_VARIANT (ttr) == void_type_node
3901 || comp_target_types (memb_type, rhstype))
3903 /* Const and volatile mean something different for function types,
3904 so the usual warnings are not appropriate. */
3905 if (TREE_CODE (ttr) != FUNCTION_TYPE
3906 || TREE_CODE (ttl) != FUNCTION_TYPE)
3908 if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
3909 warn_for_assignment ("%s discards `const' from pointer target type",
3910 get_spelling (errtype), funname, parmnum);
3911 if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
3912 warn_for_assignment ("%s discards `volatile' from pointer target type",
3913 get_spelling (errtype), funname, parmnum);
3917 /* Because const and volatile on functions are restrictions
3918 that say the function will not do certain things,
3919 it is okay to use a const or volatile function
3920 where an ordinary one is wanted, but not vice-versa. */
3921 if (TYPE_READONLY (ttl) && ! TYPE_READONLY (ttr))
3922 warn_for_assignment ("%s makes `const *' function pointer from non-const",
3923 get_spelling (errtype), funname, parmnum);
3924 if (TYPE_VOLATILE (ttl) && ! TYPE_VOLATILE (ttr))
3925 warn_for_assignment ("%s makes `volatile *' function pointer from non-volatile",
3926 get_spelling (errtype), funname, parmnum);
3929 && !(fundecl != 0 && DECL_IN_SYSTEM_HEADER (fundecl)))
3930 pedwarn ("ANSI C prohibits argument conversion to union type");
3931 return build1 (NOP_EXPR, type, rhs);
3936 /* Conversions among pointers */
3937 else if (codel == POINTER_TYPE && coder == POINTER_TYPE)
3939 register tree ttl = TREE_TYPE (type);
3940 register tree ttr = TREE_TYPE (rhstype);
3942 /* Any non-function converts to a [const][volatile] void *
3943 and vice versa; otherwise, targets must be the same.
3944 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3945 if (TYPE_MAIN_VARIANT (ttl) == void_type_node
3946 || TYPE_MAIN_VARIANT (ttr) == void_type_node
3947 || comp_target_types (type, rhstype)
3948 || (unsigned_type (TYPE_MAIN_VARIANT (ttl))
3949 == unsigned_type (TYPE_MAIN_VARIANT (ttr))))
3952 && ((TYPE_MAIN_VARIANT (ttl) == void_type_node
3953 && TREE_CODE (ttr) == FUNCTION_TYPE)
3955 (TYPE_MAIN_VARIANT (ttr) == void_type_node
3956 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3957 which are not ANSI null ptr constants. */
3958 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3959 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3960 warn_for_assignment ("ANSI forbids %s between function pointer and `void *'",
3961 get_spelling (errtype), funname, parmnum);
3962 /* Const and volatile mean something different for function types,
3963 so the usual warnings are not appropriate. */
3964 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3965 || TREE_CODE (ttl) != FUNCTION_TYPE)
3967 if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
3968 warn_for_assignment ("%s discards `const' from pointer target type",
3969 get_spelling (errtype), funname, parmnum);
3970 else if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
3971 warn_for_assignment ("%s discards `volatile' from pointer target type",
3972 get_spelling (errtype), funname, parmnum);
3973 /* If this is not a case of ignoring a mismatch in signedness,
3975 else if (TYPE_MAIN_VARIANT (ttl) == void_type_node
3976 || TYPE_MAIN_VARIANT (ttr) == void_type_node
3977 || comp_target_types (type, rhstype))
3979 /* If there is a mismatch, do warn. */
3981 warn_for_assignment ("pointer targets in %s differ in signedness",
3982 get_spelling (errtype), funname, parmnum);
3986 /* Because const and volatile on functions are restrictions
3987 that say the function will not do certain things,
3988 it is okay to use a const or volatile function
3989 where an ordinary one is wanted, but not vice-versa. */
3990 if (TYPE_READONLY (ttl) && ! TYPE_READONLY (ttr))
3991 warn_for_assignment ("%s makes `const *' function pointer from non-const",
3992 get_spelling (errtype), funname, parmnum);
3993 if (TYPE_VOLATILE (ttl) && ! TYPE_VOLATILE (ttr))
3994 warn_for_assignment ("%s makes `volatile *' function pointer from non-volatile",
3995 get_spelling (errtype), funname, parmnum);
3999 warn_for_assignment ("%s from incompatible pointer type",
4000 get_spelling (errtype), funname, parmnum);
4001 return convert (type, rhs);
4003 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
4005 /* An explicit constant 0 can convert to a pointer,
4006 or one that results from arithmetic, even including
4007 a cast to integer type. */
4008 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
4010 ! (TREE_CODE (rhs) == NOP_EXPR
4011 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
4012 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
4013 && integer_zerop (TREE_OPERAND (rhs, 0))))
4015 warn_for_assignment ("%s makes pointer from integer without a cast",
4016 get_spelling (errtype), funname, parmnum);
4017 return convert (type, rhs);
4019 return null_pointer_node;
4021 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
4023 warn_for_assignment ("%s makes integer from pointer without a cast",
4024 get_spelling (errtype), funname, parmnum);
4025 return convert (type, rhs);
4032 tree selector = maybe_building_objc_message_expr ();
4034 if (selector && parmnum > 2)
4035 error ("incompatible type for argument %d of `%s'",
4036 parmnum - 2, IDENTIFIER_POINTER (selector));
4038 error ("incompatible type for argument %d of `%s'",
4039 parmnum, IDENTIFIER_POINTER (funname));
4042 error ("incompatible type for argument %d of indirect function call",
4046 error ("incompatible types in %s", get_spelling (errtype));
4048 return error_mark_node;
4051 /* Print a warning using MSG.
4052 It gets OPNAME as its one parameter.
4053 If OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
4054 FUNCTION and ARGNUM are handled specially if we are building an
4055 Objective-C selector. */
4058 warn_for_assignment (msg, opname, function, argnum)
4064 static char argstring[] = "passing arg %d of `%s'";
4065 static char argnofun[] = "passing arg %d";
4069 tree selector = maybe_building_objc_message_expr ();
4071 if (selector && argnum > 2)
4073 function = selector;
4078 /* Function name is known; supply it. */
4079 opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4080 + sizeof (argstring) + 25 /*%d*/ + 1);
4081 sprintf (opname, argstring, argnum, IDENTIFIER_POINTER (function));
4085 /* Function name unknown (call through ptr); just give arg number. */
4086 opname = (char *) alloca (sizeof (argnofun) + 25 /*%d*/ + 1);
4087 sprintf (opname, argnofun, argnum);
4090 pedwarn (msg, opname);
4093 /* Return nonzero if VALUE is a valid constant-valued expression
4094 for use in initializing a static variable; one that can be an
4095 element of a "constant" initializer.
4097 Return null_pointer_node if the value is absolute;
4098 if it is relocatable, return the variable that determines the relocation.
4099 We assume that VALUE has been folded as much as possible;
4100 therefore, we do not need to check for such things as
4101 arithmetic-combinations of integers. */
4104 initializer_constant_valid_p (value, endtype)
4108 switch (TREE_CODE (value))
4111 if (TREE_CODE (TREE_TYPE (value)) == UNION_TYPE
4112 && TREE_CONSTANT (value))
4114 initializer_constant_valid_p (TREE_VALUE (CONSTRUCTOR_ELTS (value)),
4117 return TREE_STATIC (value) ? null_pointer_node : 0;
4123 return null_pointer_node;
4126 return TREE_OPERAND (value, 0);
4128 case NON_LVALUE_EXPR:
4129 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4133 /* Allow conversions between pointer types. */
4134 if (TREE_CODE (TREE_TYPE (value)) == POINTER_TYPE
4135 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == POINTER_TYPE)
4136 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4138 /* Allow conversions between real types. */
4139 if (TREE_CODE (TREE_TYPE (value)) == REAL_TYPE
4140 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == REAL_TYPE)
4141 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4143 /* Allow length-preserving conversions between integer types. */
4144 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4145 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE
4146 && (TYPE_PRECISION (TREE_TYPE (value))
4147 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4148 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4150 /* Allow conversions between other integer types only if
4152 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4153 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE)
4155 tree inner = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4157 if (inner == null_pointer_node)
4158 return null_pointer_node;
4162 /* Allow (int) &foo provided int is as wide as a pointer. */
4163 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4164 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == POINTER_TYPE
4165 && (TYPE_PRECISION (TREE_TYPE (value))
4166 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4167 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4170 /* Likewise conversions from int to pointers. */
4171 if (TREE_CODE (TREE_TYPE (value)) == POINTER_TYPE
4172 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE
4173 && (TYPE_PRECISION (TREE_TYPE (value))
4174 <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4175 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4178 /* Allow conversions to union types if the value inside is okay. */
4179 if (TREE_CODE (TREE_TYPE (value)) == UNION_TYPE)
4180 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4185 if (TREE_CODE (endtype) == INTEGER_TYPE
4186 && TYPE_PRECISION (endtype) < POINTER_SIZE)
4189 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4191 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4193 /* If either term is absolute, use the other terms relocation. */
4194 if (valid0 == null_pointer_node)
4196 if (valid1 == null_pointer_node)
4202 if (TREE_CODE (endtype) == INTEGER_TYPE
4203 && TYPE_PRECISION (endtype) < POINTER_SIZE)
4206 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4208 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4210 /* Win if second argument is absolute. */
4211 if (valid1 == null_pointer_node)
4213 /* Win if both arguments have the same relocation.
4214 Then the value is absolute. */
4215 if (valid0 == valid1)
4216 return null_pointer_node;
4224 /* If VALUE is a compound expr all of whose expressions are constant, then
4225 return its value. Otherwise, return error_mark_node.
4227 This is for handling COMPOUND_EXPRs as initializer elements
4228 which is allowed with a warning when -pedantic is specified. */
4231 valid_compound_expr_initializer (value, endtype)
4235 if (TREE_CODE (value) == COMPOUND_EXPR)
4237 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4239 return error_mark_node;
4240 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4243 else if (! TREE_CONSTANT (value)
4244 && ! initializer_constant_valid_p (value, endtype))
4245 return error_mark_node;
4250 /* Perform appropriate conversions on the initial value of a variable,
4251 store it in the declaration DECL,
4252 and print any error messages that are appropriate.
4253 If the init is invalid, store an ERROR_MARK. */
4256 store_init_value (decl, init)
4259 register tree value, type;
4261 /* If variable's type was invalidly declared, just ignore it. */
4263 type = TREE_TYPE (decl);
4264 if (TREE_CODE (type) == ERROR_MARK)
4267 /* Digest the specified initializer into an expression. */
4269 value = digest_init (type, init, TREE_STATIC (decl),
4270 TREE_STATIC (decl) || pedantic);
4272 /* Store the expression if valid; else report error. */
4275 /* Note that this is the only place we can detect the error
4276 in a case such as struct foo bar = (struct foo) { x, y };
4277 where there is one initial value which is a constructor expression. */
4278 if (value == error_mark_node)
4280 else if (TREE_STATIC (decl) && ! TREE_CONSTANT (value))
4282 error ("initializer for static variable is not constant");
4283 value = error_mark_node;
4285 else if (TREE_STATIC (decl)
4286 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
4288 error ("initializer for static variable uses complicated arithmetic");
4289 value = error_mark_node;
4293 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
4295 if (! TREE_CONSTANT (value))
4296 pedwarn ("aggregate initializer is not constant");
4297 else if (! TREE_STATIC (value))
4298 pedwarn ("aggregate initializer uses complicated arithmetic");
4303 DECL_INITIAL (decl) = value;
4305 /* ANSI wants warnings about out-of-range constant initializers. */
4306 STRIP_TYPE_NOPS (value);
4307 constant_expression_warning (value);
4310 /* Methods for storing and printing names for error messages. */
4312 /* Implement a spelling stack that allows components of a name to be pushed
4313 and popped. Each element on the stack is this structure. */
4325 #define SPELLING_STRING 1
4326 #define SPELLING_MEMBER 2
4327 #define SPELLING_BOUNDS 3
4329 static struct spelling *spelling; /* Next stack element (unused). */
4330 static struct spelling *spelling_base; /* Spelling stack base. */
4331 static int spelling_size; /* Size of the spelling stack. */
4333 /* Macros to save and restore the spelling stack around push_... functions.
4334 Alternative to SAVE_SPELLING_STACK. */
4336 #define SPELLING_DEPTH() (spelling - spelling_base)
4337 #define RESTORE_SPELLING_DEPTH(depth) (spelling = spelling_base + depth)
4339 /* Save and restore the spelling stack around arbitrary C code. */
4341 #define SAVE_SPELLING_DEPTH(code) \
4343 int __depth = SPELLING_DEPTH (); \
4345 RESTORE_SPELLING_DEPTH (__depth); \
4348 /* Push an element on the spelling stack with type KIND and assign VALUE
4351 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4353 int depth = SPELLING_DEPTH (); \
4355 if (depth >= spelling_size) \
4357 spelling_size += 10; \
4358 if (spelling_base == 0) \
4360 = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \
4363 = (struct spelling *) xrealloc (spelling_base, \
4364 spelling_size * sizeof (struct spelling)); \
4365 RESTORE_SPELLING_DEPTH (depth); \
4368 spelling->kind = (KIND); \
4369 spelling->MEMBER = (VALUE); \
4373 /* Push STRING on the stack. Printed literally. */
4376 push_string (string)
4379 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4382 /* Push a member name on the stack. Printed as '.' STRING. */
4385 push_member_name (decl)
4390 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4391 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4394 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4397 push_array_bounds (bounds)
4400 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4403 /* Compute the maximum size in bytes of the printed spelling. */
4408 register int size = 0;
4409 register struct spelling *p;
4411 for (p = spelling_base; p < spelling; p++)
4413 if (p->kind == SPELLING_BOUNDS)
4416 size += strlen (p->u.s) + 1;
4422 /* Print the spelling to BUFFER and return it. */
4425 print_spelling (buffer)
4426 register char *buffer;
4428 register char *d = buffer;
4430 register struct spelling *p;
4432 for (p = spelling_base; p < spelling; p++)
4433 if (p->kind == SPELLING_BOUNDS)
4435 sprintf (d, "[%d]", p->u.i);
4440 if (p->kind == SPELLING_MEMBER)
4442 for (s = p->u.s; *d = *s++; d++)
4449 /* Provide a means to pass component names derived from the spelling stack. */
4451 char initialization_message;
4453 /* Interpret the spelling of the given ERRTYPE message. */
4456 get_spelling (errtype)
4459 static char *buffer;
4460 static int size = -1;
4462 if (errtype == &initialization_message)
4464 /* Avoid counting chars */
4465 static char message[] = "initialization of `%s'";
4466 register int needed = sizeof (message) + spelling_length () + 1;
4470 buffer = (char *) xmalloc (size = needed);
4472 buffer = (char *) xrealloc (buffer, size = needed);
4474 temp = (char *) alloca (needed);
4475 sprintf (buffer, message, print_spelling (temp));
4482 /* Issue an error message for a bad initializer component.
4483 FORMAT describes the message. OFWHAT is the name for the component.
4484 LOCAL is a format string for formatting the insertion of the name
4487 If OFWHAT is null, the component name is stored on the spelling stack.
4488 If the component name is a null string, then LOCAL is omitted entirely. */
4491 error_init (format, local, ofwhat)
4492 char *format, *local, *ofwhat;
4497 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4498 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4501 sprintf (buffer, local, ofwhat);
4505 error (format, buffer);
4508 /* Issue a pedantic warning for a bad initializer component.
4509 FORMAT describes the message. OFWHAT is the name for the component.
4510 LOCAL is a format string for formatting the insertion of the name
4513 If OFWHAT is null, the component name is stored on the spelling stack.
4514 If the component name is a null string, then LOCAL is omitted entirely. */
4517 pedwarn_init (format, local, ofwhat)
4518 char *format, *local, *ofwhat;
4523 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4524 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4527 sprintf (buffer, local, ofwhat);
4531 pedwarn (format, buffer);
4534 /* Issue a warning for a bad initializer component.
4535 FORMAT describes the message. OFWHAT is the name for the component.
4536 LOCAL is a format string for formatting the insertion of the name
4539 If OFWHAT is null, the component name is stored on the spelling stack.
4540 If the component name is a null string, then LOCAL is omitted entirely. */
4543 warning_init (format, local, ofwhat)
4544 char *format, *local, *ofwhat;
4549 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4550 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4553 sprintf (buffer, local, ofwhat);
4557 warning (format, buffer);
4560 /* Digest the parser output INIT as an initializer for type TYPE.
4561 Return a C expression of type TYPE to represent the initial value.
4563 The arguments REQUIRE_CONSTANT and CONSTRUCTOR_CONSTANT request errors
4564 if non-constant initializers or elements are seen. CONSTRUCTOR_CONSTANT
4565 applies only to elements of constructors. */
4568 digest_init (type, init, require_constant, constructor_constant)
4570 int require_constant, constructor_constant;
4572 enum tree_code code = TREE_CODE (type);
4573 tree inside_init = init;
4575 if (init == error_mark_node)
4578 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4579 /* Do not use STRIP_NOPS here. We do not want an enumerator
4580 whose value is 0 to count as a null pointer constant. */
4581 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4582 inside_init = TREE_OPERAND (init, 0);
4584 /* Initialization of an array of chars from a string constant
4585 optionally enclosed in braces. */
4587 if (code == ARRAY_TYPE)
4589 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4590 if ((typ1 == char_type_node
4591 || typ1 == signed_char_type_node
4592 || typ1 == unsigned_char_type_node
4593 || typ1 == unsigned_wchar_type_node
4594 || typ1 == signed_wchar_type_node)
4595 && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
4597 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4598 TYPE_MAIN_VARIANT (type)))
4601 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4603 && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
4605 error_init ("char-array%s initialized from wide string",
4607 return error_mark_node;
4609 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4611 && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
4613 error_init ("int-array%s initialized from non-wide string",
4615 return error_mark_node;
4618 TREE_TYPE (inside_init) = type;
4619 if (TYPE_DOMAIN (type) != 0
4620 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
4622 register int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
4623 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
4624 /* Subtract 1 (or sizeof (wchar_t))
4625 because it's ok to ignore the terminating null char
4626 that is counted in the length of the constant. */
4627 if (size < TREE_STRING_LENGTH (inside_init)
4628 - (TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node)
4629 ? TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT
4632 "initializer-string for array of chars%s is too long",
4639 /* Any type can be initialized
4640 from an expression of the same type, optionally with braces. */
4642 if (inside_init && TREE_TYPE (inside_init) != 0
4643 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4644 TYPE_MAIN_VARIANT (type))
4645 || (code == ARRAY_TYPE
4646 && comptypes (TREE_TYPE (inside_init), type))
4647 || (code == POINTER_TYPE
4648 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4649 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)
4650 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4651 TREE_TYPE (type)))))
4653 if (code == POINTER_TYPE
4654 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4655 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE))
4656 inside_init = default_conversion (inside_init);
4657 else if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4658 && TREE_CODE (inside_init) != CONSTRUCTOR)
4660 error_init ("array%s initialized from non-constant array expression",
4662 return error_mark_node;
4665 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4666 inside_init = decl_constant_value (inside_init);
4668 /* Compound expressions can only occur here if -pedantic or
4669 -pedantic-errors is specified. In the later case, we always want
4670 an error. In the former case, we simply want a warning. */
4671 if (require_constant && pedantic
4672 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4675 = valid_compound_expr_initializer (inside_init,
4676 TREE_TYPE (inside_init));
4677 if (inside_init == error_mark_node)
4678 error_init ("initializer element%s is not constant",
4681 pedwarn_init ("initializer element%s is not constant",
4683 if (flag_pedantic_errors)
4684 inside_init = error_mark_node;
4686 else if (require_constant && ! TREE_CONSTANT (inside_init))
4688 error_init ("initializer element%s is not constant",
4690 inside_init = error_mark_node;
4692 else if (require_constant
4693 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4695 error_init ("initializer element%s is not computable at load time",
4697 inside_init = error_mark_node;
4703 /* Handle scalar types, including conversions. */
4705 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4706 || code == ENUMERAL_TYPE || code == COMPLEX_TYPE)
4708 /* Note that convert_for_assignment calls default_conversion
4709 for arrays and functions. We must not call it in the
4710 case where inside_init is a null pointer constant. */
4712 = convert_for_assignment (type, init, "initialization",
4713 NULL_TREE, NULL_TREE, 0);
4715 if (require_constant && ! TREE_CONSTANT (inside_init))
4717 error_init ("initializer element%s is not constant",
4719 inside_init = error_mark_node;
4721 else if (require_constant
4722 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4724 error_init ("initializer element%s is not computable at load time",
4726 inside_init = error_mark_node;
4732 /* Come here only for records and arrays. */
4734 if (TYPE_SIZE (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4736 error_init ("variable-sized object%s may not be initialized",
4738 return error_mark_node;
4741 /* Traditionally, you can write struct foo x = 0;
4742 and it initializes the first element of x to 0. */
4743 if (flag_traditional)
4745 tree top = 0, prev = 0;
4746 while (TREE_CODE (type) == RECORD_TYPE
4747 || TREE_CODE (type) == ARRAY_TYPE
4748 || TREE_CODE (type) == QUAL_UNION_TYPE
4749 || TREE_CODE (type) == UNION_TYPE)
4751 tree temp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
4755 TREE_OPERAND (prev, 1) = build_tree_list (NULL_TREE, temp);
4757 if (TREE_CODE (type) == ARRAY_TYPE)
4758 type = TREE_TYPE (type);
4759 else if (TYPE_FIELDS (type))
4760 type = TREE_TYPE (TYPE_FIELDS (type));
4763 error_init ("invalid initializer%s", " for `%s'", NULL);
4764 return error_mark_node;
4767 TREE_OPERAND (prev, 1)
4768 = build_tree_list (NULL_TREE,
4769 digest_init (type, init, require_constant,
4770 constructor_constant));
4773 error_init ("invalid initializer%s", " for `%s'", NULL);
4774 return error_mark_node;
4777 /* Handle initializers that use braces. */
4779 /* Type of object we are accumulating a constructor for.
4780 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4781 static tree constructor_type;
4783 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4785 static tree constructor_fields;
4787 /* For an ARRAY_TYPE, this is the specified index
4788 at which to store the next element we get.
4789 This is a special INTEGER_CST node that we modify in place. */
4790 static tree constructor_index;
4792 /* For an ARRAY_TYPE, this is the end index of the range
4793 to intitialize with the next element, or NULL in the ordinary case
4794 where the element is used just once. */
4795 static tree constructor_range_end;
4797 /* For an ARRAY_TYPE, this is the maximum index. */
4798 static tree constructor_max_index;
4800 /* For a RECORD_TYPE, this is the first field not yet written out. */
4801 static tree constructor_unfilled_fields;
4803 /* For an ARRAY_TYPE, this is the index of the first element
4804 not yet written out.
4805 This is a special INTEGER_CST node that we modify in place. */
4806 static tree constructor_unfilled_index;
4808 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4809 This is so we can generate gaps between fields, when appropriate.
4810 This is a special INTEGER_CST node that we modify in place. */
4811 static tree constructor_bit_index;
4813 /* If we are saving up the elements rather than allocating them,
4814 this is the list of elements so far (in reverse order,
4815 most recent first). */
4816 static tree constructor_elements;
4818 /* 1 if so far this constructor's elements are all compile-time constants. */
4819 static int constructor_constant;
4821 /* 1 if so far this constructor's elements are all valid address constants. */
4822 static int constructor_simple;
4824 /* 1 if this constructor is erroneous so far. */
4825 static int constructor_erroneous;
4827 /* 1 if have called defer_addressed_constants. */
4828 static int constructor_subconstants_deferred;
4830 /* List of pending elements at this constructor level.
4831 These are elements encountered out of order
4832 which belong at places we haven't reached yet in actually
4833 writing the output. */
4834 static tree constructor_pending_elts;
4836 /* The SPELLING_DEPTH of this constructor. */
4837 static int constructor_depth;
4839 /* 0 if implicitly pushing constructor levels is allowed. */
4840 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4842 /* 1 if this constructor level was entered implicitly. */
4843 static int constructor_implicit;
4845 static int require_constant_value;
4846 static int require_constant_elements;
4848 /* 1 if it is ok to output this constructor as we read it.
4849 0 means must accumulate a CONSTRUCTOR expression. */
4850 static int constructor_incremental;
4852 /* DECL node for which an initializer is being read.
4853 0 means we are reading a constructor expression
4854 such as (struct foo) {...}. */
4855 static tree constructor_decl;
4857 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4858 static char *constructor_asmspec;
4860 /* Nonzero if this is an initializer for a top-level decl. */
4861 static int constructor_top_level;
4863 /* When we finish reading a constructor expression
4864 (constructor_decl is 0), the CONSTRUCTOR goes here. */
4865 static tree constructor_result;
4867 /* This stack has a level for each implicit or explicit level of
4868 structuring in the initializer, including the outermost one. It
4869 saves the values of most of the variables above. */
4871 struct constructor_stack
4873 struct constructor_stack *next;
4879 tree unfilled_index;
4880 tree unfilled_fields;
4886 /* If nonzero, this value should replace the entire
4887 constructor at this level. */
4888 tree replacement_value;
4897 struct constructor_stack *constructor_stack;
4899 /* This stack records separate initializers that are nested.
4900 Nested initializers can't happen in ANSI C, but GNU C allows them
4901 in cases like { ... (struct foo) { ... } ... }. */
4903 struct initializer_stack
4905 struct initializer_stack *next;
4908 struct constructor_stack *constructor_stack;
4910 struct spelling *spelling;
4911 struct spelling *spelling_base;
4915 char require_constant_value;
4916 char require_constant_elements;
4920 struct initializer_stack *initializer_stack;
4922 /* Prepare to parse and output the initializer for variable DECL. */
4925 start_init (decl, asmspec_tree, top_level)
4931 struct initializer_stack *p
4932 = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack));
4936 asmspec = TREE_STRING_POINTER (asmspec_tree);
4938 p->decl = constructor_decl;
4939 p->asmspec = constructor_asmspec;
4940 p->incremental = constructor_incremental;
4941 p->require_constant_value = require_constant_value;
4942 p->require_constant_elements = require_constant_elements;
4943 p->constructor_stack = constructor_stack;
4944 p->elements = constructor_elements;
4945 p->spelling = spelling;
4946 p->spelling_base = spelling_base;
4947 p->spelling_size = spelling_size;
4948 p->deferred = constructor_subconstants_deferred;
4949 p->top_level = constructor_top_level;
4950 p->next = initializer_stack;
4951 initializer_stack = p;
4953 constructor_decl = decl;
4954 constructor_incremental = top_level;
4955 constructor_asmspec = asmspec;
4956 constructor_subconstants_deferred = 0;
4957 constructor_top_level = top_level;
4961 require_constant_value = TREE_STATIC (decl);
4962 require_constant_elements
4963 = ((TREE_STATIC (decl) || pedantic)
4964 /* For a scalar, you can always use any value to initialize,
4965 even within braces. */
4966 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4967 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4968 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4969 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4970 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4971 constructor_incremental |= TREE_STATIC (decl);
4975 require_constant_value = 0;
4976 require_constant_elements = 0;
4977 locus = "(anonymous)";
4980 constructor_stack = 0;
4982 missing_braces_mentioned = 0;
4986 RESTORE_SPELLING_DEPTH (0);
4989 push_string (locus);
4995 struct initializer_stack *p = initializer_stack;
4997 /* Output subconstants (string constants, usually)
4998 that were referenced within this initializer and saved up.
4999 Must do this if and only if we called defer_addressed_constants. */
5000 if (constructor_subconstants_deferred)
5001 output_deferred_addressed_constants ();
5003 /* Free the whole constructor stack of this initializer. */
5004 while (constructor_stack)
5006 struct constructor_stack *q = constructor_stack;
5007 constructor_stack = q->next;
5011 /* Pop back to the data of the outer initializer (if any). */
5012 constructor_decl = p->decl;
5013 constructor_asmspec = p->asmspec;
5014 constructor_incremental = p->incremental;
5015 require_constant_value = p->require_constant_value;
5016 require_constant_elements = p->require_constant_elements;
5017 constructor_stack = p->constructor_stack;
5018 constructor_elements = p->elements;
5019 spelling = p->spelling;
5020 spelling_base = p->spelling_base;
5021 spelling_size = p->spelling_size;
5022 constructor_subconstants_deferred = p->deferred;
5023 constructor_top_level = p->top_level;
5024 initializer_stack = p->next;
5028 /* Call here when we see the initializer is surrounded by braces.
5029 This is instead of a call to push_init_level;
5030 it is matched by a call to pop_init_level.
5032 TYPE is the type to initialize, for a constructor expression.
5033 For an initializer for a decl, TYPE is zero. */
5036 really_start_incremental_init (type)
5039 struct constructor_stack *p
5040 = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5043 type = TREE_TYPE (constructor_decl);
5045 /* Turn off constructor_incremental if type is a struct with bitfields.
5046 Do this before the first push, so that the corrected value
5047 is available in finish_init. */
5048 check_init_type_bitfields (type);
5050 p->type = constructor_type;
5051 p->fields = constructor_fields;
5052 p->index = constructor_index;
5053 p->range_end = constructor_range_end;
5054 p->max_index = constructor_max_index;
5055 p->unfilled_index = constructor_unfilled_index;
5056 p->unfilled_fields = constructor_unfilled_fields;
5057 p->bit_index = constructor_bit_index;
5058 p->elements = constructor_elements;
5059 p->constant = constructor_constant;
5060 p->simple = constructor_simple;
5061 p->erroneous = constructor_erroneous;
5062 p->pending_elts = constructor_pending_elts;
5063 p->depth = constructor_depth;
5064 p->replacement_value = 0;
5066 p->incremental = constructor_incremental;
5069 constructor_stack = p;
5071 constructor_constant = 1;
5072 constructor_simple = 1;
5073 constructor_depth = SPELLING_DEPTH ();
5074 constructor_elements = 0;
5075 constructor_pending_elts = 0;
5076 constructor_type = type;
5078 if (TREE_CODE (constructor_type) == RECORD_TYPE
5079 || TREE_CODE (constructor_type) == UNION_TYPE)
5081 constructor_fields = TYPE_FIELDS (constructor_type);
5082 /* Skip any nameless bit fields atthe beginning. */
5083 while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
5084 && DECL_NAME (constructor_fields) == 0)
5085 constructor_fields = TREE_CHAIN (constructor_fields);
5086 constructor_unfilled_fields = constructor_fields;
5087 constructor_bit_index = copy_node (integer_zero_node);
5089 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5091 constructor_range_end = 0;
5092 if (TYPE_DOMAIN (constructor_type))
5094 constructor_max_index
5095 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5097 = copy_node (TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5100 constructor_index = copy_node (integer_zero_node);
5101 constructor_unfilled_index = copy_node (constructor_index);
5105 /* Handle the case of int x = {5}; */
5106 constructor_fields = constructor_type;
5107 constructor_unfilled_fields = constructor_type;
5110 if (constructor_incremental)
5112 int momentary = suspend_momentary ();
5113 push_obstacks_nochange ();
5114 if (TREE_PERMANENT (constructor_decl))
5115 end_temporary_allocation ();
5116 make_decl_rtl (constructor_decl, constructor_asmspec,
5117 constructor_top_level);
5118 assemble_variable (constructor_decl, constructor_top_level, 0, 1);
5120 resume_momentary (momentary);
5123 if (constructor_incremental)
5125 defer_addressed_constants ();
5126 constructor_subconstants_deferred = 1;
5130 /* Push down into a subobject, for initialization.
5131 If this is for an explicit set of braces, IMPLICIT is 0.
5132 If it is because the next element belongs at a lower level,
5136 push_init_level (implicit)
5139 struct constructor_stack *p;
5141 /* If we've exhausted any levels that didn't have braces,
5143 while (constructor_stack->implicit)
5145 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5146 || TREE_CODE (constructor_type) == UNION_TYPE)
5147 && constructor_fields == 0)
5148 process_init_element (pop_init_level (1));
5149 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5150 && tree_int_cst_lt (constructor_max_index, constructor_index))
5151 process_init_element (pop_init_level (1));
5156 /* Structure elements may require alignment. Do this now
5157 if necessary for the subaggregate. */
5158 if (constructor_incremental && TREE_CODE (constructor_type) == RECORD_TYPE
5159 && constructor_fields)
5161 /* Advance to offset of this element. */
5162 if (! tree_int_cst_equal (constructor_bit_index,
5163 DECL_FIELD_BITPOS (constructor_fields)))
5165 int next = (TREE_INT_CST_LOW
5166 (DECL_FIELD_BITPOS (constructor_fields))
5168 int here = (TREE_INT_CST_LOW (constructor_bit_index)
5171 assemble_zeros (next - here);
5175 p = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5176 p->type = constructor_type;
5177 p->fields = constructor_fields;
5178 p->index = constructor_index;
5179 p->range_end = constructor_range_end;
5180 p->max_index = constructor_max_index;
5181 p->unfilled_index = constructor_unfilled_index;
5182 p->unfilled_fields = constructor_unfilled_fields;
5183 p->bit_index = constructor_bit_index;
5184 p->elements = constructor_elements;
5185 p->constant = constructor_constant;
5186 p->simple = constructor_simple;
5187 p->erroneous = constructor_erroneous;
5188 p->pending_elts = constructor_pending_elts;
5189 p->depth = constructor_depth;
5190 p->replacement_value = 0;
5191 p->implicit = implicit;
5192 p->incremental = constructor_incremental;
5194 p->next = constructor_stack;
5195 constructor_stack = p;
5197 constructor_constant = 1;
5198 constructor_simple = 1;
5199 constructor_depth = SPELLING_DEPTH ();
5200 constructor_elements = 0;
5201 constructor_pending_elts = 0;
5203 /* Don't die if an entire brace-pair level is superfluous
5204 in the containing level. */
5205 if (constructor_type == 0)
5207 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5208 || TREE_CODE (constructor_type) == UNION_TYPE)
5210 /* Don't die if there are extra init elts at the end. */
5211 if (constructor_fields == 0)
5212 constructor_type = 0;
5215 constructor_type = TREE_TYPE (constructor_fields);
5216 push_member_name (constructor_fields);
5219 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5221 constructor_type = TREE_TYPE (constructor_type);
5222 push_array_bounds (TREE_INT_CST_LOW (constructor_index));
5225 if (constructor_type == 0)
5227 error_init ("extra brace group at end of initializer%s",
5229 constructor_fields = 0;
5230 constructor_unfilled_fields = 0;
5234 /* Turn off constructor_incremental if type is a struct with bitfields. */
5235 check_init_type_bitfields (constructor_type);
5237 if (implicit && warn_missing_braces && !missing_braces_mentioned)
5239 missing_braces_mentioned = 1;
5240 warning_init ("missing braces around initializer%s", " for `%s'", NULL);
5243 if (TREE_CODE (constructor_type) == RECORD_TYPE
5244 || TREE_CODE (constructor_type) == UNION_TYPE)
5246 constructor_fields = TYPE_FIELDS (constructor_type);
5247 /* Skip any nameless bit fields atthe beginning. */
5248 while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
5249 && DECL_NAME (constructor_fields) == 0)
5250 constructor_fields = TREE_CHAIN (constructor_fields);
5251 constructor_unfilled_fields = constructor_fields;
5252 constructor_bit_index = copy_node (integer_zero_node);
5254 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5256 constructor_range_end = 0;
5257 if (TYPE_DOMAIN (constructor_type))
5259 constructor_max_index
5260 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5262 = copy_node (TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5265 constructor_index = copy_node (integer_zero_node);
5266 constructor_unfilled_index = copy_node (constructor_index);
5270 warning_init ("braces around scalar initializer%s", " for `%s'", NULL);
5271 constructor_fields = constructor_type;
5272 constructor_unfilled_fields = constructor_type;
5276 /* Don't read a struct incrementally if it has any bitfields,
5277 because the incremental reading code doesn't know how to
5278 handle bitfields yet. */
5281 check_init_type_bitfields (type)
5284 if (TREE_CODE (type) == RECORD_TYPE)
5287 for (tail = TYPE_FIELDS (type); tail;
5288 tail = TREE_CHAIN (tail))
5290 if (DECL_BIT_FIELD (tail)
5291 /* This catches cases like `int foo : 8;'. */
5292 || DECL_MODE (tail) != TYPE_MODE (TREE_TYPE (tail)))
5294 constructor_incremental = 0;
5298 check_init_type_bitfields (TREE_TYPE (tail));
5302 else if (TREE_CODE (type) == ARRAY_TYPE)
5303 check_init_type_bitfields (TREE_TYPE (type));
5306 /* At the end of an implicit or explicit brace level,
5307 finish up that level of constructor.
5308 If we were outputting the elements as they are read, return 0
5309 from inner levels (process_init_element ignores that),
5310 but return error_mark_node from the outermost level
5311 (that's what we want to put in DECL_INITIAL).
5312 Otherwise, return a CONSTRUCTOR expression. */
5315 pop_init_level (implicit)
5318 struct constructor_stack *p;
5320 tree constructor = 0;
5324 /* When we come to an explicit close brace,
5325 pop any inner levels that didn't have explicit braces. */
5326 while (constructor_stack->implicit)
5327 process_init_element (pop_init_level (1));
5330 p = constructor_stack;
5332 if (constructor_type != 0)
5333 size = int_size_in_bytes (constructor_type);
5335 /* Now output all pending elements. */
5336 output_pending_init_elements (1);
5338 #if 0 /* c-parse.in warns about {}. */
5339 /* In ANSI, each brace level must have at least one element. */
5340 if (! implicit && pedantic
5341 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5342 ? integer_zerop (constructor_unfilled_index)
5343 : constructor_unfilled_fields == TYPE_FIELDS (constructor_type)))
5344 pedwarn_init ("empty braces in initializer%s", " for `%s'", NULL);
5347 /* Pad out the end of the structure. */
5349 if (p->replacement_value)
5351 /* If this closes a superfluous brace pair,
5352 just pass out the element between them. */
5353 constructor = p->replacement_value;
5354 /* If this is the top level thing within the initializer,
5355 and it's for a variable, then since we already called
5356 assemble_variable, we must output the value now. */
5357 if (p->next == 0 && constructor_decl != 0
5358 && constructor_incremental)
5360 constructor = digest_init (constructor_type, constructor,
5363 /* If initializing an array of unknown size,
5364 determine the size now. */
5365 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5366 && TYPE_DOMAIN (constructor_type) == 0)
5371 push_obstacks_nochange ();
5372 if (TREE_PERMANENT (constructor_type))
5373 end_temporary_allocation ();
5375 momentary_p = suspend_momentary ();
5377 /* We shouldn't have an incomplete array type within
5379 if (constructor_stack->next)
5383 = complete_array_type (constructor_type,
5388 size = int_size_in_bytes (constructor_type);
5389 resume_momentary (momentary_p);
5393 output_constant (constructor, size);
5396 else if (constructor_type == 0)
5398 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5399 && TREE_CODE (constructor_type) != UNION_TYPE
5400 && TREE_CODE (constructor_type) != ARRAY_TYPE
5401 && ! constructor_incremental)
5403 /* A nonincremental scalar initializer--just return
5404 the element, after verifying there is just one. */
5405 if (constructor_elements == 0)
5407 error_init ("empty scalar initializer%s",
5409 constructor = error_mark_node;
5411 else if (TREE_CHAIN (constructor_elements) != 0)
5413 error_init ("extra elements in scalar initializer%s",
5415 constructor = TREE_VALUE (constructor_elements);
5418 constructor = TREE_VALUE (constructor_elements);
5420 else if (! constructor_incremental)
5422 if (constructor_erroneous)
5423 constructor = error_mark_node;
5426 int momentary = suspend_momentary ();
5428 constructor = build (CONSTRUCTOR, constructor_type, NULL_TREE,
5429 nreverse (constructor_elements));
5430 if (constructor_constant)
5431 TREE_CONSTANT (constructor) = 1;
5432 if (constructor_constant && constructor_simple)
5433 TREE_STATIC (constructor) = 1;
5435 resume_momentary (momentary);
5441 int momentary = suspend_momentary ();
5443 if (TREE_CODE (constructor_type) == RECORD_TYPE
5444 || TREE_CODE (constructor_type) == UNION_TYPE)
5446 /* Find the offset of the end of that field. */
5447 filled = size_binop (CEIL_DIV_EXPR,
5448 constructor_bit_index,
5449 size_int (BITS_PER_UNIT));
5451 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5453 /* If initializing an array of unknown size,
5454 determine the size now. */
5455 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5456 && TYPE_DOMAIN (constructor_type) == 0)
5459 = size_binop (MINUS_EXPR,
5460 constructor_unfilled_index,
5463 push_obstacks_nochange ();
5464 if (TREE_PERMANENT (constructor_type))
5465 end_temporary_allocation ();
5466 maxindex = copy_node (maxindex);
5467 TYPE_DOMAIN (constructor_type) = build_index_type (maxindex);
5468 TREE_TYPE (maxindex) = TYPE_DOMAIN (constructor_type);
5470 /* TYPE_MAX_VALUE is always one less than the number of elements
5471 in the array, because we start counting at zero. Therefore,
5472 warn only if the value is less than zero. */
5474 && (tree_int_cst_sgn (TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5476 error_with_decl (constructor_decl,
5477 "zero or negative array size `%s'");
5478 layout_type (constructor_type);
5479 size = int_size_in_bytes (constructor_type);
5483 filled = size_binop (MULT_EXPR, constructor_unfilled_index,
5484 size_in_bytes (TREE_TYPE (constructor_type)));
5490 assemble_zeros (size - TREE_INT_CST_LOW (filled));
5492 resume_momentary (momentary);
5496 constructor_type = p->type;
5497 constructor_fields = p->fields;
5498 constructor_index = p->index;
5499 constructor_range_end = p->range_end;
5500 constructor_max_index = p->max_index;
5501 constructor_unfilled_index = p->unfilled_index;
5502 constructor_unfilled_fields = p->unfilled_fields;
5503 constructor_bit_index = p->bit_index;
5504 constructor_elements = p->elements;
5505 constructor_constant = p->constant;
5506 constructor_simple = p->simple;
5507 constructor_erroneous = p->erroneous;
5508 constructor_pending_elts = p->pending_elts;
5509 constructor_depth = p->depth;
5510 constructor_incremental = p->incremental;
5511 RESTORE_SPELLING_DEPTH (constructor_depth);
5513 constructor_stack = p->next;
5516 if (constructor == 0)
5518 if (constructor_stack == 0)
5519 return error_mark_node;
5525 /* Within an array initializer, specify the next index to be initialized.
5526 FIRST is that index. If LAST is nonzero, then initialize a range
5527 of indices, running from FIRST through LAST. */
5530 set_init_index (first, last)
5533 while ((TREE_CODE (first) == NOP_EXPR
5534 || TREE_CODE (first) == CONVERT_EXPR
5535 || TREE_CODE (first) == NON_LVALUE_EXPR)
5536 && (TYPE_MODE (TREE_TYPE (first))
5537 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5538 (first) = TREE_OPERAND (first, 0);
5540 while ((TREE_CODE (last) == NOP_EXPR
5541 || TREE_CODE (last) == CONVERT_EXPR
5542 || TREE_CODE (last) == NON_LVALUE_EXPR)
5543 && (TYPE_MODE (TREE_TYPE (last))
5544 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5545 (last) = TREE_OPERAND (last, 0);
5547 if (TREE_CODE (first) != INTEGER_CST)
5548 error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
5549 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5550 error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
5551 else if (tree_int_cst_lt (first, constructor_unfilled_index))
5552 error_init ("duplicate array index in initializer%s", " for `%s'", NULL);
5555 TREE_INT_CST_LOW (constructor_index)
5556 = TREE_INT_CST_LOW (first);
5557 TREE_INT_CST_HIGH (constructor_index)
5558 = TREE_INT_CST_HIGH (first);
5560 if (last != 0 && tree_int_cst_lt (last, first))
5561 error_init ("empty index range in initializer%s", " for `%s'", NULL);
5565 pedwarn ("ANSI C forbids specifying element to initialize");
5566 constructor_range_end = last;
5571 /* Within a struct initializer, specify the next field to be initialized. */
5574 set_init_label (fieldname)
5580 for (tail = TYPE_FIELDS (constructor_type); tail;
5581 tail = TREE_CHAIN (tail))
5583 if (tail == constructor_unfilled_fields)
5585 if (DECL_NAME (tail) == fieldname)
5590 error ("unknown field `%s' specified in initializer",
5591 IDENTIFIER_POINTER (fieldname));
5593 error ("field `%s' already initialized",
5594 IDENTIFIER_POINTER (fieldname));
5597 constructor_fields = tail;
5599 pedwarn ("ANSI C forbids specifying structure member to initialize");
5603 /* "Output" the next constructor element.
5604 At top level, really output it to assembler code now.
5605 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5606 TYPE is the data type that the containing data type wants here.
5607 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5609 PENDING if non-nil means output pending elements that belong
5610 right after this element. (PENDING is normally 1;
5611 it is 0 while outputting pending elements, to avoid recursion.) */
5614 output_init_element (value, type, field, pending)
5615 tree value, type, field;
5620 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5621 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5622 && !(TREE_CODE (value) == STRING_CST
5623 && TREE_CODE (type) == ARRAY_TYPE
5624 && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
5625 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5626 TYPE_MAIN_VARIANT (type))))
5627 value = default_conversion (value);
5629 if (value == error_mark_node)
5630 constructor_erroneous = 1;
5631 else if (!TREE_CONSTANT (value))
5632 constructor_constant = 0;
5633 else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
5634 constructor_simple = 0;
5636 if (require_constant_value && ! TREE_CONSTANT (value))
5638 error_init ("initializer element%s is not constant",
5640 value = error_mark_node;
5642 else if (require_constant_elements
5643 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
5645 error_init ("initializer element%s is not computable at load time",
5647 value = error_mark_node;
5650 /* If this element duplicates one on constructor_pending_elts,
5651 print a message and ignore it. Don't do this when we're
5652 processing elements taken off constructor_pending_elts,
5653 because we'd always get spurious errors. */
5656 if (TREE_CODE (constructor_type) == RECORD_TYPE
5657 || TREE_CODE (constructor_type) == UNION_TYPE)
5659 if (purpose_member (field, constructor_pending_elts))
5661 error_init ("duplicate initializer%s", " for `%s'", NULL);
5665 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5668 for (tail = constructor_pending_elts; tail;
5669 tail = TREE_CHAIN (tail))
5670 if (TREE_PURPOSE (tail) != 0
5671 && TREE_CODE (TREE_PURPOSE (tail)) == INTEGER_CST
5672 && tree_int_cst_equal (TREE_PURPOSE (tail), constructor_index))
5677 error_init ("duplicate initializer%s", " for `%s'", NULL);
5683 /* If this element doesn't come next in sequence,
5684 put it on constructor_pending_elts. */
5685 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5686 && !tree_int_cst_equal (field, constructor_unfilled_index))
5689 /* The copy_node is needed in case field is actually
5690 constructor_index, which is modified in place. */
5691 constructor_pending_elts
5692 = tree_cons (copy_node (field),
5693 digest_init (type, value, 0, 0),
5694 constructor_pending_elts);
5696 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5697 && field != constructor_unfilled_fields)
5699 /* We do this for records but not for unions. In a union,
5700 no matter which field is specified, it can be initialized
5701 right away since it starts at the beginning of the union. */
5703 constructor_pending_elts
5705 digest_init (type, value, 0, 0),
5706 constructor_pending_elts);
5710 /* Otherwise, output this element either to
5711 constructor_elements or to the assembler file. */
5715 if (! constructor_incremental)
5717 if (field && TREE_CODE (field) == INTEGER_CST)
5718 field = copy_node (field);
5719 constructor_elements
5720 = tree_cons (field, digest_init (type, value, 0, 0),
5721 constructor_elements);
5725 /* Structure elements may require alignment.
5726 Do this, if necessary. */
5727 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5729 /* Advance to offset of this element. */
5730 if (! tree_int_cst_equal (constructor_bit_index,
5731 DECL_FIELD_BITPOS (field)))
5733 int next = (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field))
5735 int here = (TREE_INT_CST_LOW (constructor_bit_index)
5738 assemble_zeros (next - here);
5741 output_constant (digest_init (type, value, 0, 0),
5742 int_size_in_bytes (type));
5744 /* For a record or union,
5745 keep track of end position of last field. */
5746 if (TREE_CODE (constructor_type) == RECORD_TYPE
5747 || TREE_CODE (constructor_type) == UNION_TYPE)
5749 tree temp = size_binop (PLUS_EXPR, DECL_FIELD_BITPOS (field),
5751 TREE_INT_CST_LOW (constructor_bit_index)
5752 = TREE_INT_CST_LOW (temp);
5753 TREE_INT_CST_HIGH (constructor_bit_index)
5754 = TREE_INT_CST_HIGH (temp);
5759 /* Advance the variable that indicates sequential elements output. */
5760 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5762 tree tem = size_binop (PLUS_EXPR, constructor_unfilled_index,
5764 TREE_INT_CST_LOW (constructor_unfilled_index)
5765 = TREE_INT_CST_LOW (tem);
5766 TREE_INT_CST_HIGH (constructor_unfilled_index)
5767 = TREE_INT_CST_HIGH (tem);
5769 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5770 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5771 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5772 constructor_unfilled_fields = 0;
5774 /* Now output any pending elements which have become next. */
5776 output_pending_init_elements (0);
5780 /* Output any pending elements which have become next.
5781 As we output elements, constructor_unfilled_{fields,index}
5782 advances, which may cause other elements to become next;
5783 if so, they too are output.
5785 If ALL is 0, we return when there are
5786 no more pending elements to output now.
5788 If ALL is 1, we output space as necessary so that
5789 we can output all the pending elements. */
5792 output_pending_init_elements (all)
5800 /* Look thru the whole pending list.
5801 If we find an element that should be output now,
5802 output it. Otherwise, set NEXT to the element
5803 that comes first among those still pending. */
5806 for (tail = constructor_pending_elts; tail;
5807 tail = TREE_CHAIN (tail))
5809 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5811 if (tree_int_cst_equal (TREE_PURPOSE (tail),
5812 constructor_unfilled_index))
5814 output_init_element (TREE_VALUE (tail),
5815 TREE_TYPE (constructor_type),
5816 constructor_unfilled_index, 0);
5819 else if (tree_int_cst_lt (TREE_PURPOSE (tail),
5820 constructor_unfilled_index))
5823 || tree_int_cst_lt (TREE_PURPOSE (tail), next))
5824 next = TREE_PURPOSE (tail);
5826 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5827 || TREE_CODE (constructor_type) == UNION_TYPE)
5829 if (TREE_PURPOSE (tail) == constructor_unfilled_fields)
5831 output_init_element (TREE_VALUE (tail),
5832 TREE_TYPE (constructor_unfilled_fields),
5833 constructor_unfilled_fields,
5837 else if (constructor_unfilled_fields == 0
5838 || tree_int_cst_lt (DECL_FIELD_BITPOS (TREE_PURPOSE (tail)),
5839 DECL_FIELD_BITPOS (constructor_unfilled_fields)))
5842 || tree_int_cst_lt (DECL_FIELD_BITPOS (TREE_PURPOSE (tail)),
5843 DECL_FIELD_BITPOS (next)))
5844 next = TREE_PURPOSE (tail);
5848 /* Ordinarily return, but not if we want to output all
5849 and there are elements left. */
5850 if (! (all && next != 0))
5853 /* Generate space up to the position of NEXT. */
5854 if (constructor_incremental)
5857 tree nextpos_tree = size_int (0);
5859 if (TREE_CODE (constructor_type) == RECORD_TYPE
5860 || TREE_CODE (constructor_type) == UNION_TYPE)
5862 /* Find the last field written out, if any. */
5863 for (tail = TYPE_FIELDS (constructor_type); tail;
5864 tail = TREE_CHAIN (tail))
5865 if (TREE_CHAIN (tail) == constructor_unfilled_fields)
5869 /* Find the offset of the end of that field. */
5870 filled = size_binop (CEIL_DIV_EXPR,
5871 size_binop (PLUS_EXPR,
5872 DECL_FIELD_BITPOS (tail),
5874 size_int (BITS_PER_UNIT));
5876 filled = size_int (0);
5878 nextpos_tree = size_binop (CEIL_DIV_EXPR,
5879 DECL_FIELD_BITPOS (next),
5880 size_int (BITS_PER_UNIT));
5882 TREE_INT_CST_HIGH (constructor_bit_index)
5883 = TREE_INT_CST_HIGH (DECL_FIELD_BITPOS (next));
5884 TREE_INT_CST_LOW (constructor_bit_index)
5885 = TREE_INT_CST_LOW (DECL_FIELD_BITPOS (next));
5886 constructor_unfilled_fields = next;
5888 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5890 filled = size_binop (MULT_EXPR, constructor_unfilled_index,
5891 size_in_bytes (TREE_TYPE (constructor_type)));
5893 = size_binop (MULT_EXPR, next,
5894 size_in_bytes (TREE_TYPE (constructor_type)));
5895 TREE_INT_CST_LOW (constructor_unfilled_index)
5896 = TREE_INT_CST_LOW (next);
5897 TREE_INT_CST_HIGH (constructor_unfilled_index)
5898 = TREE_INT_CST_HIGH (next);
5905 int nextpos = TREE_INT_CST_LOW (nextpos_tree);
5907 assemble_zeros (nextpos - TREE_INT_CST_LOW (filled));
5912 /* If it's not incremental, just skip over the gap,
5913 so that after jumping to retry we will output the next
5914 successive element. */
5915 if (TREE_CODE (constructor_type) == RECORD_TYPE
5916 || TREE_CODE (constructor_type) == UNION_TYPE)
5917 constructor_unfilled_fields = next;
5918 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5920 TREE_INT_CST_LOW (constructor_unfilled_index)
5921 = TREE_INT_CST_LOW (next);
5922 TREE_INT_CST_HIGH (constructor_unfilled_index)
5923 = TREE_INT_CST_HIGH (next);
5930 /* Add one non-braced element to the current constructor level.
5931 This adjusts the current position within the constructor's type.
5932 This may also start or terminate implicit levels
5933 to handle a partly-braced initializer.
5935 Once this has found the correct level for the new element,
5936 it calls output_init_element.
5938 Note: if we are incrementally outputting this constructor,
5939 this function may be called with a null argument
5940 representing a sub-constructor that was already incrementally output.
5941 When that happens, we output nothing, but we do the bookkeeping
5942 to skip past that element of the current constructor. */
5945 process_init_element (value)
5948 tree orig_value = value;
5949 int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
5951 /* Handle superfluous braces around string cst as in
5952 char x[] = {"foo"}; */
5955 && TREE_CODE (constructor_type) == ARRAY_TYPE
5956 && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
5957 && integer_zerop (constructor_unfilled_index))
5959 constructor_stack->replacement_value = value;
5963 if (constructor_stack->replacement_value != 0)
5965 error_init ("excess elements in struct initializer%s",
5966 " after `%s'", NULL_PTR);
5970 /* Ignore elements of a brace group if it is entirely superfluous
5971 and has already been diagnosed. */
5972 if (constructor_type == 0)
5975 /* If we've exhausted any levels that didn't have braces,
5977 while (constructor_stack->implicit)
5979 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5980 || TREE_CODE (constructor_type) == UNION_TYPE)
5981 && constructor_fields == 0)
5982 process_init_element (pop_init_level (1));
5983 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5984 && tree_int_cst_lt (constructor_max_index, constructor_index))
5985 process_init_element (pop_init_level (1));
5992 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5995 enum tree_code fieldcode;
5997 if (constructor_fields == 0)
5999 pedwarn_init ("excess elements in struct initializer%s",
6000 " after `%s'", NULL_PTR);
6004 fieldtype = TREE_TYPE (constructor_fields);
6005 if (fieldtype != error_mark_node)
6006 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6007 fieldcode = TREE_CODE (fieldtype);
6009 /* Accept a string constant to initialize a subarray. */
6011 && fieldcode == ARRAY_TYPE
6012 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6015 /* Otherwise, if we have come to a subaggregate,
6016 and we don't have an element of its type, push into it. */
6017 else if (value != 0 && !constructor_no_implicit
6018 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6019 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6020 || fieldcode == UNION_TYPE))
6022 push_init_level (1);
6028 push_member_name (constructor_fields);
6029 output_init_element (value, fieldtype, constructor_fields, 1);
6030 RESTORE_SPELLING_DEPTH (constructor_depth);
6033 /* Do the bookkeeping for an element that was
6034 directly output as a constructor. */
6036 /* For a record, keep track of end position of last field. */
6037 tree temp = size_binop (PLUS_EXPR,
6038 DECL_FIELD_BITPOS (constructor_fields),
6039 DECL_SIZE (constructor_fields));
6040 TREE_INT_CST_LOW (constructor_bit_index)
6041 = TREE_INT_CST_LOW (temp);
6042 TREE_INT_CST_HIGH (constructor_bit_index)
6043 = TREE_INT_CST_HIGH (temp);
6045 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6048 constructor_fields = TREE_CHAIN (constructor_fields);
6049 /* Skip any nameless bit fields atthe beginning. */
6050 while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
6051 && DECL_NAME (constructor_fields) == 0)
6052 constructor_fields = TREE_CHAIN (constructor_fields);
6055 if (TREE_CODE (constructor_type) == UNION_TYPE)
6058 enum tree_code fieldcode;
6060 if (constructor_fields == 0)
6062 pedwarn_init ("excess elements in union initializer%s",
6063 " after `%s'", NULL_PTR);
6067 fieldtype = TREE_TYPE (constructor_fields);
6068 if (fieldtype != error_mark_node)
6069 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6070 fieldcode = TREE_CODE (fieldtype);
6072 /* Accept a string constant to initialize a subarray. */
6074 && fieldcode == ARRAY_TYPE
6075 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6078 /* Otherwise, if we have come to a subaggregate,
6079 and we don't have an element of its type, push into it. */
6080 else if (value != 0 && !constructor_no_implicit
6081 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6082 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6083 || fieldcode == UNION_TYPE))
6085 push_init_level (1);
6091 push_member_name (constructor_fields);
6092 output_init_element (value, fieldtype, constructor_fields, 1);
6093 RESTORE_SPELLING_DEPTH (constructor_depth);
6096 /* Do the bookkeeping for an element that was
6097 directly output as a constructor. */
6099 TREE_INT_CST_LOW (constructor_bit_index)
6100 = TREE_INT_CST_LOW (DECL_SIZE (constructor_fields));
6101 TREE_INT_CST_HIGH (constructor_bit_index)
6102 = TREE_INT_CST_HIGH (DECL_SIZE (constructor_fields));
6104 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6107 constructor_fields = 0;
6110 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6112 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6113 enum tree_code eltcode = TREE_CODE (elttype);
6115 /* Accept a string constant to initialize a subarray. */
6117 && eltcode == ARRAY_TYPE
6118 && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
6121 /* Otherwise, if we have come to a subaggregate,
6122 and we don't have an element of its type, push into it. */
6123 else if (value != 0 && !constructor_no_implicit
6124 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
6125 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6126 || eltcode == UNION_TYPE))
6128 push_init_level (1);
6132 if (constructor_max_index != 0
6133 && tree_int_cst_lt (constructor_max_index, constructor_index))
6135 pedwarn_init ("excess elements in array initializer%s",
6136 " after `%s'", NULL_PTR);
6140 /* Now output the actual element.
6141 Ordinarily, output once.
6142 If there is a range, repeat it till we advance past the range. */
6149 push_array_bounds (TREE_INT_CST_LOW (constructor_index));
6150 output_init_element (value, elttype, constructor_index, 1);
6151 RESTORE_SPELLING_DEPTH (constructor_depth);
6154 tem = size_binop (PLUS_EXPR, constructor_index,
6156 TREE_INT_CST_LOW (constructor_index)
6157 = TREE_INT_CST_LOW (tem);
6158 TREE_INT_CST_HIGH (constructor_index)
6159 = TREE_INT_CST_HIGH (tem);
6162 /* If we are doing the bookkeeping for an element that was
6163 directly output as a constructor,
6164 we must update constructor_unfilled_index. */
6166 TREE_INT_CST_LOW (constructor_unfilled_index)
6167 = TREE_INT_CST_LOW (constructor_index);
6168 TREE_INT_CST_HIGH (constructor_unfilled_index)
6169 = TREE_INT_CST_HIGH (constructor_index);
6172 while (! (constructor_range_end == 0
6173 || tree_int_cst_lt (constructor_range_end,
6174 constructor_index)));
6179 /* Handle the sole element allowed in a braced initializer
6180 for a scalar variable. */
6181 if (constructor_fields == 0)
6183 pedwarn_init ("excess elements in scalar initializer%s",
6184 " after `%s'", NULL_PTR);
6189 output_init_element (value, constructor_type, NULL_TREE, 1);
6190 constructor_fields = 0;
6194 /* If the (lexically) previous elments are not now saved,
6195 we can discard the storage for them. */
6196 if (constructor_incremental && constructor_pending_elts == 0 && value != 0)
6200 /* Expand an ASM statement with operands, handling output operands
6201 that are not variables or INDIRECT_REFS by transforming such
6202 cases into cases that expand_asm_operands can handle.
6204 Arguments are same as for expand_asm_operands. */
6207 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
6208 tree string, outputs, inputs, clobbers;
6213 int noutputs = list_length (outputs);
6215 /* o[I] is the place that output number I should be written. */
6216 register tree *o = (tree *) alloca (noutputs * sizeof (tree));
6219 if (TREE_CODE (string) == ADDR_EXPR)
6220 string = TREE_OPERAND (string, 0);
6221 if (TREE_CODE (string) != STRING_CST)
6223 error ("asm template is not a string constant");
6227 /* Record the contents of OUTPUTS before it is modified. */
6228 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6229 o[i] = TREE_VALUE (tail);
6231 /* Perform default conversions on array and function inputs. */
6232 /* Don't do this for other types--
6233 it would screw up operands expected to be in memory. */
6234 for (i = 0, tail = inputs; tail; tail = TREE_CHAIN (tail), i++)
6235 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == ARRAY_TYPE
6236 || TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == FUNCTION_TYPE)
6237 TREE_VALUE (tail) = default_conversion (TREE_VALUE (tail));
6239 /* Generate the ASM_OPERANDS insn;
6240 store into the TREE_VALUEs of OUTPUTS some trees for
6241 where the values were actually stored. */
6242 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
6244 /* Copy all the intermediate outputs into the specified outputs. */
6245 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6247 if (o[i] != TREE_VALUE (tail))
6249 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
6253 /* Detect modification of read-only values.
6254 (Otherwise done by build_modify_expr.) */
6257 tree type = TREE_TYPE (o[i]);
6258 if (TYPE_READONLY (type)
6259 || ((TREE_CODE (type) == RECORD_TYPE
6260 || TREE_CODE (type) == UNION_TYPE)
6261 && C_TYPE_FIELDS_READONLY (type)))
6262 readonly_warning (o[i], "modification by `asm'");
6266 /* Those MODIFY_EXPRs could do autoincrements. */
6270 /* Expand a C `return' statement.
6271 RETVAL is the expression for what to return,
6272 or a null pointer for `return;' with no value. */
6275 c_expand_return (retval)
6278 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6280 if (TREE_THIS_VOLATILE (current_function_decl))
6281 warning ("function declared `noreturn' has a `return' statement");
6285 current_function_returns_null = 1;
6286 if (warn_return_type && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6287 warning ("`return' with no value, in function returning non-void");
6288 expand_null_return ();
6290 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6292 current_function_returns_null = 1;
6293 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6294 pedwarn ("`return' with a value, in function returning void");
6295 expand_return (retval);
6299 tree t = convert_for_assignment (valtype, retval, "return",
6300 NULL_TREE, NULL_TREE, 0);
6301 tree res = DECL_RESULT (current_function_decl);
6304 if (t == error_mark_node)
6307 inner = t = convert (TREE_TYPE (res), t);
6309 /* Strip any conversions, additions, and subtractions, and see if
6310 we are returning the address of a local variable. Warn if so. */
6311 while (TREE_CODE (inner) == NOP_EXPR
6312 || TREE_CODE (inner) == NON_LVALUE_EXPR
6313 || TREE_CODE (inner) == CONVERT_EXPR
6314 || TREE_CODE (inner) == PLUS_EXPR
6315 || TREE_CODE (inner) == MINUS_EXPR)
6316 inner = TREE_OPERAND (inner, 0);
6318 if (TREE_CODE (inner) == ADDR_EXPR)
6320 inner = TREE_OPERAND (inner, 0);
6322 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
6323 inner = TREE_OPERAND (inner, 0);
6325 if (TREE_CODE (inner) == VAR_DECL
6326 && ! DECL_EXTERNAL (inner)
6327 && ! TREE_STATIC (inner)
6328 && DECL_CONTEXT (inner) == current_function_decl)
6329 warning ("function returns address of local variable");
6332 t = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
6333 TREE_SIDE_EFFECTS (t) = 1;
6335 current_function_returns_value = 1;
6339 /* Start a C switch statement, testing expression EXP.
6340 Return EXP if it is valid, an error node otherwise. */
6343 c_expand_start_case (exp)
6346 register enum tree_code code = TREE_CODE (TREE_TYPE (exp));
6347 tree type = TREE_TYPE (exp);
6349 if (code != INTEGER_TYPE && code != ENUMERAL_TYPE && code != ERROR_MARK)
6351 error ("switch quantity not an integer");
6352 exp = error_mark_node;
6357 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6359 if (warn_traditional
6360 && (type == long_integer_type_node
6361 || type == long_unsigned_type_node))
6362 pedwarn ("`long' switch expression not converted to `int' in ANSI C");
6364 exp = default_conversion (exp);
6365 type = TREE_TYPE (exp);
6366 index = get_unwidened (exp, NULL_TREE);
6367 /* We can't strip a conversion from a signed type to an unsigned,
6368 because if we did, int_fits_type_p would do the wrong thing
6369 when checking case values for being in range,
6370 and it's too hard to do the right thing. */
6371 if (TREE_UNSIGNED (TREE_TYPE (exp))
6372 == TREE_UNSIGNED (TREE_TYPE (index)))
6376 expand_start_case (1, exp, type, "switch statement");