1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 /* This file is part of the C front end.
24 It contains routines to build C expressions given their operands,
25 including computing the types of the result, C-specific error checks,
26 and some optimization.
28 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
29 and to process initializations in declarations (since they work
30 like a strange sort of assignment). */
34 #include "coretypes.h"
48 /* Nonzero if we've already printed a "missing braces around initializer"
49 message within this initializer. */
50 static int missing_braces_mentioned;
52 /* 1 if we explained undeclared var errors. */
53 static int undeclared_variable_notice;
55 static tree qualify_type PARAMS ((tree, tree));
56 static int comp_target_types PARAMS ((tree, tree, int));
57 static int function_types_compatible_p PARAMS ((tree, tree));
58 static int type_lists_compatible_p PARAMS ((tree, tree));
59 static tree decl_constant_value_for_broken_optimization PARAMS ((tree));
60 static tree default_function_array_conversion PARAMS ((tree));
61 static tree lookup_field PARAMS ((tree, tree));
62 static void undeclared_variable PARAMS ((tree));
63 static tree convert_arguments PARAMS ((tree, tree, tree, tree));
64 static tree pointer_diff PARAMS ((tree, tree));
65 static tree unary_complex_lvalue PARAMS ((enum tree_code, tree, int));
66 static void pedantic_lvalue_warning PARAMS ((enum tree_code));
67 static tree internal_build_compound_expr PARAMS ((tree, int));
68 static tree convert_for_assignment PARAMS ((tree, tree, const char *,
70 static void warn_for_assignment PARAMS ((const char *, const char *,
72 static tree valid_compound_expr_initializer PARAMS ((tree, tree));
73 static void push_string PARAMS ((const char *));
74 static void push_member_name PARAMS ((tree));
75 static void push_array_bounds PARAMS ((int));
76 static int spelling_length PARAMS ((void));
77 static char *print_spelling PARAMS ((char *));
78 static void warning_init PARAMS ((const char *));
79 static tree digest_init PARAMS ((tree, tree, int));
80 static void output_init_element PARAMS ((tree, tree, tree, int));
81 static void output_pending_init_elements PARAMS ((int));
82 static int set_designator PARAMS ((int));
83 static void push_range_stack PARAMS ((tree));
84 static void add_pending_init PARAMS ((tree, tree));
85 static void set_nonincremental_init PARAMS ((void));
86 static void set_nonincremental_init_from_string PARAMS ((tree));
87 static tree find_init_member PARAMS ((tree));
89 /* Do `exp = require_complete_type (exp);' to make sure exp
90 does not have an incomplete type. (That includes void types.) */
93 require_complete_type (value)
96 tree type = TREE_TYPE (value);
98 if (value == error_mark_node || type == error_mark_node)
99 return error_mark_node;
101 /* First, detect a valid value with a complete type. */
102 if (COMPLETE_TYPE_P (type))
105 c_incomplete_type_error (value, type);
106 return error_mark_node;
109 /* Print an error message for invalid use of an incomplete type.
110 VALUE is the expression that was used (or 0 if that isn't known)
111 and TYPE is the type that was invalid. */
114 c_incomplete_type_error (value, type)
118 const char *type_code_string;
120 /* Avoid duplicate error message. */
121 if (TREE_CODE (type) == ERROR_MARK)
124 if (value != 0 && (TREE_CODE (value) == VAR_DECL
125 || TREE_CODE (value) == PARM_DECL))
126 error ("`%s' has an incomplete type",
127 IDENTIFIER_POINTER (DECL_NAME (value)));
131 /* We must print an error message. Be clever about what it says. */
133 switch (TREE_CODE (type))
136 type_code_string = "struct";
140 type_code_string = "union";
144 type_code_string = "enum";
148 error ("invalid use of void expression");
152 if (TYPE_DOMAIN (type))
154 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
156 error ("invalid use of flexible array member");
159 type = TREE_TYPE (type);
162 error ("invalid use of array with unspecified bounds");
169 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
170 error ("invalid use of undefined type `%s %s'",
171 type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
173 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
174 error ("invalid use of incomplete typedef `%s'",
175 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
179 /* Given a type, apply default promotions wrt unnamed function
180 arguments and return the new type. */
183 c_type_promotes_to (type)
186 if (TYPE_MAIN_VARIANT (type) == float_type_node)
187 return double_type_node;
189 if (c_promoting_integer_type_p (type))
191 /* Preserve unsignedness if not really getting any wider. */
192 if (TREE_UNSIGNED (type)
193 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
194 return unsigned_type_node;
195 return integer_type_node;
201 /* Return a variant of TYPE which has all the type qualifiers of LIKE
202 as well as those of TYPE. */
205 qualify_type (type, like)
208 return c_build_qualified_type (type,
209 TYPE_QUALS (type) | TYPE_QUALS (like));
212 /* Return the common type of two types.
213 We assume that comptypes has already been done and returned 1;
214 if that isn't so, this may crash. In particular, we assume that qualifiers
217 This is the type for the result of most arithmetic operations
218 if the operands have the given two types. */
224 enum tree_code code1;
225 enum tree_code code2;
228 /* Save time if the two types are the same. */
230 if (t1 == t2) return t1;
232 /* If one type is nonsense, use the other. */
233 if (t1 == error_mark_node)
235 if (t2 == error_mark_node)
238 /* Merge the attributes. */
239 attributes = (*targetm.merge_type_attributes) (t1, t2);
241 /* Treat an enum type as the unsigned integer type of the same width. */
243 if (TREE_CODE (t1) == ENUMERAL_TYPE)
244 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
245 if (TREE_CODE (t2) == ENUMERAL_TYPE)
246 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
248 code1 = TREE_CODE (t1);
249 code2 = TREE_CODE (t2);
251 /* If one type is complex, form the common type of the non-complex
252 components, then make that complex. Use T1 or T2 if it is the
254 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
256 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
257 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
258 tree subtype = common_type (subtype1, subtype2);
260 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
261 return build_type_attribute_variant (t1, attributes);
262 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
263 return build_type_attribute_variant (t2, attributes);
265 return build_type_attribute_variant (build_complex_type (subtype),
273 /* If only one is real, use it as the result. */
275 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
276 return build_type_attribute_variant (t1, attributes);
278 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
279 return build_type_attribute_variant (t2, attributes);
281 /* Both real or both integers; use the one with greater precision. */
283 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
284 return build_type_attribute_variant (t1, attributes);
285 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
286 return build_type_attribute_variant (t2, attributes);
288 /* Same precision. Prefer longs to ints even when same size. */
290 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
291 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
292 return build_type_attribute_variant (long_unsigned_type_node,
295 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
296 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
298 /* But preserve unsignedness from the other type,
299 since long cannot hold all the values of an unsigned int. */
300 if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
301 t1 = long_unsigned_type_node;
303 t1 = long_integer_type_node;
304 return build_type_attribute_variant (t1, attributes);
307 /* Likewise, prefer long double to double even if same size. */
308 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
309 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
310 return build_type_attribute_variant (long_double_type_node,
313 /* Otherwise prefer the unsigned one. */
315 if (TREE_UNSIGNED (t1))
316 return build_type_attribute_variant (t1, attributes);
318 return build_type_attribute_variant (t2, attributes);
321 /* For two pointers, do this recursively on the target type,
322 and combine the qualifiers of the two types' targets. */
323 /* This code was turned off; I don't know why.
324 But ANSI C specifies doing this with the qualifiers.
325 So I turned it on again. */
327 tree pointed_to_1 = TREE_TYPE (t1);
328 tree pointed_to_2 = TREE_TYPE (t2);
329 tree target = common_type (TYPE_MAIN_VARIANT (pointed_to_1),
330 TYPE_MAIN_VARIANT (pointed_to_2));
331 t1 = build_pointer_type (c_build_qualified_type
333 TYPE_QUALS (pointed_to_1) |
334 TYPE_QUALS (pointed_to_2)));
335 return build_type_attribute_variant (t1, attributes);
338 t1 = build_pointer_type (common_type (TREE_TYPE (t1), TREE_TYPE (t2)));
339 return build_type_attribute_variant (t1, attributes);
344 tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
345 /* Save space: see if the result is identical to one of the args. */
346 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
347 return build_type_attribute_variant (t1, attributes);
348 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
349 return build_type_attribute_variant (t2, attributes);
350 /* Merge the element types, and have a size if either arg has one. */
351 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
352 return build_type_attribute_variant (t1, attributes);
356 /* Function types: prefer the one that specified arg types.
357 If both do, merge the arg types. Also merge the return types. */
359 tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
360 tree p1 = TYPE_ARG_TYPES (t1);
361 tree p2 = TYPE_ARG_TYPES (t2);
366 /* Save space: see if the result is identical to one of the args. */
367 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
368 return build_type_attribute_variant (t1, attributes);
369 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
370 return build_type_attribute_variant (t2, attributes);
372 /* Simple way if one arg fails to specify argument types. */
373 if (TYPE_ARG_TYPES (t1) == 0)
375 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
376 return build_type_attribute_variant (t1, attributes);
378 if (TYPE_ARG_TYPES (t2) == 0)
380 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
381 return build_type_attribute_variant (t1, attributes);
384 /* If both args specify argument types, we must merge the two
385 lists, argument by argument. */
388 declare_parm_level (1);
390 len = list_length (p1);
393 for (i = 0; i < len; i++)
394 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
399 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
401 /* A null type means arg type is not specified.
402 Take whatever the other function type has. */
403 if (TREE_VALUE (p1) == 0)
405 TREE_VALUE (n) = TREE_VALUE (p2);
408 if (TREE_VALUE (p2) == 0)
410 TREE_VALUE (n) = TREE_VALUE (p1);
414 /* Given wait (union {union wait *u; int *i} *)
415 and wait (union wait *),
416 prefer union wait * as type of parm. */
417 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
418 && TREE_VALUE (p1) != TREE_VALUE (p2))
421 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
422 memb; memb = TREE_CHAIN (memb))
423 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
425 TREE_VALUE (n) = TREE_VALUE (p2);
427 pedwarn ("function types not truly compatible in ISO C");
431 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
432 && TREE_VALUE (p2) != TREE_VALUE (p1))
435 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
436 memb; memb = TREE_CHAIN (memb))
437 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
439 TREE_VALUE (n) = TREE_VALUE (p1);
441 pedwarn ("function types not truly compatible in ISO C");
445 TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
451 t1 = build_function_type (valtype, newargs);
452 /* ... falls through ... */
456 return build_type_attribute_variant (t1, attributes);
461 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
462 or various other operations. Return 2 if they are compatible
463 but a warning may be needed if you use them together. */
466 comptypes (type1, type2)
473 /* Suppress errors caused by previously reported errors. */
475 if (t1 == t2 || !t1 || !t2
476 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
479 /* If either type is the internal version of sizetype, return the
481 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
482 && TYPE_DOMAIN (t1) != 0)
483 t1 = TYPE_DOMAIN (t1);
485 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
486 && TYPE_DOMAIN (t2) != 0)
487 t2 = TYPE_DOMAIN (t2);
489 /* Treat an enum type as the integer type of the same width and
492 if (TREE_CODE (t1) == ENUMERAL_TYPE)
493 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
494 if (TREE_CODE (t2) == ENUMERAL_TYPE)
495 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
500 /* Different classes of types can't be compatible. */
502 if (TREE_CODE (t1) != TREE_CODE (t2)) return 0;
504 /* Qualifiers must match. */
506 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
509 /* Allow for two different type nodes which have essentially the same
510 definition. Note that we already checked for equality of the type
511 qualifiers (just above). */
513 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
516 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
517 if (! (attrval = (*targetm.comp_type_attributes) (t1, t2)))
520 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
523 switch (TREE_CODE (t1))
526 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
527 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
531 val = function_types_compatible_p (t1, t2);
536 tree d1 = TYPE_DOMAIN (t1);
537 tree d2 = TYPE_DOMAIN (t2);
538 bool d1_variable, d2_variable;
539 bool d1_zero, d2_zero;
542 /* Target types must match incl. qualifiers. */
543 if (TREE_TYPE (t1) != TREE_TYPE (t2)
544 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
547 /* Sizes must match unless one is missing or variable. */
548 if (d1 == 0 || d2 == 0 || d1 == d2)
551 d1_zero = ! TYPE_MAX_VALUE (d1);
552 d2_zero = ! TYPE_MAX_VALUE (d2);
554 d1_variable = (! d1_zero
555 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
556 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
557 d2_variable = (! d2_zero
558 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
559 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
561 if (d1_variable || d2_variable)
563 if (d1_zero && d2_zero)
565 if (d1_zero || d2_zero
566 || ! tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
567 || ! tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
574 if (flag_objc && objc_comptypes (t1, t2, 0) == 1)
579 /* The target might allow certain vector types to be compatible. */
580 val = (*targetm.vector_opaque_p) (t1)
581 || (*targetm.vector_opaque_p) (t2);
587 return attrval == 2 && val == 1 ? 2 : val;
590 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
591 ignoring their qualifiers. REFLEXIVE is only used by ObjC - set it
592 to 1 or 0 depending if the check of the pointer types is meant to
593 be reflexive or not (typically, assignments are not reflexive,
594 while comparisons are reflexive).
598 comp_target_types (ttl, ttr, reflexive)
604 /* Give objc_comptypes a crack at letting these types through. */
605 if ((val = objc_comptypes (ttl, ttr, reflexive)) >= 0)
608 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
609 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
611 if (val == 2 && pedantic)
612 pedwarn ("types are not quite compatible");
616 /* Subroutines of `comptypes'. */
618 /* Return 1 if two function types F1 and F2 are compatible.
619 If either type specifies no argument types,
620 the other must specify a fixed number of self-promoting arg types.
621 Otherwise, if one type specifies only the number of arguments,
622 the other must specify that number of self-promoting arg types.
623 Otherwise, the argument types must match. */
626 function_types_compatible_p (f1, f2)
630 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
634 if (!(TREE_TYPE (f1) == TREE_TYPE (f2)
635 || (val = comptypes (TREE_TYPE (f1), TREE_TYPE (f2)))))
638 args1 = TYPE_ARG_TYPES (f1);
639 args2 = TYPE_ARG_TYPES (f2);
641 /* An unspecified parmlist matches any specified parmlist
642 whose argument types don't need default promotions. */
646 if (!self_promoting_args_p (args2))
648 /* If one of these types comes from a non-prototype fn definition,
649 compare that with the other type's arglist.
650 If they don't match, ask for a warning (but no error). */
651 if (TYPE_ACTUAL_ARG_TYPES (f1)
652 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
658 if (!self_promoting_args_p (args1))
660 if (TYPE_ACTUAL_ARG_TYPES (f2)
661 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
666 /* Both types have argument lists: compare them and propagate results. */
667 val1 = type_lists_compatible_p (args1, args2);
668 return val1 != 1 ? val1 : val;
671 /* Check two lists of types for compatibility,
672 returning 0 for incompatible, 1 for compatible,
673 or 2 for compatible with warning. */
676 type_lists_compatible_p (args1, args2)
679 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
685 if (args1 == 0 && args2 == 0)
687 /* If one list is shorter than the other,
688 they fail to match. */
689 if (args1 == 0 || args2 == 0)
691 /* A null pointer instead of a type
692 means there is supposed to be an argument
693 but nothing is specified about what type it has.
694 So match anything that self-promotes. */
695 if (TREE_VALUE (args1) == 0)
697 if (c_type_promotes_to (TREE_VALUE (args2)) != TREE_VALUE (args2))
700 else if (TREE_VALUE (args2) == 0)
702 if (c_type_promotes_to (TREE_VALUE (args1)) != TREE_VALUE (args1))
705 else if (! (newval = comptypes (TYPE_MAIN_VARIANT (TREE_VALUE (args1)),
706 TYPE_MAIN_VARIANT (TREE_VALUE (args2)))))
708 /* Allow wait (union {union wait *u; int *i} *)
709 and wait (union wait *) to be compatible. */
710 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
711 && (TYPE_NAME (TREE_VALUE (args1)) == 0
712 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
713 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
714 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
715 TYPE_SIZE (TREE_VALUE (args2))))
718 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
719 memb; memb = TREE_CHAIN (memb))
720 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
725 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
726 && (TYPE_NAME (TREE_VALUE (args2)) == 0
727 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
728 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
729 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
730 TYPE_SIZE (TREE_VALUE (args1))))
733 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
734 memb; memb = TREE_CHAIN (memb))
735 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
744 /* comptypes said ok, but record if it said to warn. */
748 args1 = TREE_CHAIN (args1);
749 args2 = TREE_CHAIN (args2);
753 /* Compute the size to increment a pointer by. */
756 c_size_in_bytes (type)
759 enum tree_code code = TREE_CODE (type);
761 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
762 return size_one_node;
764 if (!COMPLETE_OR_VOID_TYPE_P (type))
766 error ("arithmetic on pointer to an incomplete type");
767 return size_one_node;
770 /* Convert in case a char is more than one unit. */
771 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
772 size_int (TYPE_PRECISION (char_type_node)
776 /* Return either DECL or its known constant value (if it has one). */
779 decl_constant_value (decl)
782 if (/* Don't change a variable array bound or initial value to a constant
783 in a place where a variable is invalid. */
784 current_function_decl != 0
785 && ! TREE_THIS_VOLATILE (decl)
786 && TREE_READONLY (decl)
787 && DECL_INITIAL (decl) != 0
788 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
789 /* This is invalid if initial value is not constant.
790 If it has either a function call, a memory reference,
791 or a variable, then re-evaluating it could give different results. */
792 && TREE_CONSTANT (DECL_INITIAL (decl))
793 /* Check for cases where this is sub-optimal, even though valid. */
794 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
795 return DECL_INITIAL (decl);
799 /* Return either DECL or its known constant value (if it has one), but
800 return DECL if pedantic or DECL has mode BLKmode. This is for
801 bug-compatibility with the old behavior of decl_constant_value
802 (before GCC 3.0); every use of this function is a bug and it should
803 be removed before GCC 3.1. It is not appropriate to use pedantic
804 in a way that affects optimization, and BLKmode is probably not the
805 right test for avoiding misoptimizations either. */
808 decl_constant_value_for_broken_optimization (decl)
811 if (pedantic || DECL_MODE (decl) == BLKmode)
814 return decl_constant_value (decl);
818 /* Perform the default conversion of arrays and functions to pointers.
819 Return the result of converting EXP. For any other expression, just
823 default_function_array_conversion (exp)
827 tree type = TREE_TYPE (exp);
828 enum tree_code code = TREE_CODE (type);
831 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
834 Do not use STRIP_NOPS here! It will remove conversions from pointer
835 to integer and cause infinite recursion. */
837 while (TREE_CODE (exp) == NON_LVALUE_EXPR
838 || (TREE_CODE (exp) == NOP_EXPR
839 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
841 if (TREE_CODE (exp) == NON_LVALUE_EXPR)
843 exp = TREE_OPERAND (exp, 0);
846 /* Preserve the original expression code. */
847 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))))
848 C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp));
850 if (code == FUNCTION_TYPE)
852 return build_unary_op (ADDR_EXPR, exp, 0);
854 if (code == ARRAY_TYPE)
857 tree restype = TREE_TYPE (type);
863 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp))
865 constp = TREE_READONLY (exp);
866 volatilep = TREE_THIS_VOLATILE (exp);
869 if (TYPE_QUALS (type) || constp || volatilep)
871 = c_build_qualified_type (restype,
873 | (constp * TYPE_QUAL_CONST)
874 | (volatilep * TYPE_QUAL_VOLATILE));
876 if (TREE_CODE (exp) == INDIRECT_REF)
877 return convert (TYPE_POINTER_TO (restype),
878 TREE_OPERAND (exp, 0));
880 if (TREE_CODE (exp) == COMPOUND_EXPR)
882 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
883 return build (COMPOUND_EXPR, TREE_TYPE (op1),
884 TREE_OPERAND (exp, 0), op1);
887 lvalue_array_p = !not_lvalue && lvalue_p (exp);
888 if (!flag_isoc99 && !lvalue_array_p)
890 /* Before C99, non-lvalue arrays do not decay to pointers.
891 Normally, using such an array would be invalid; but it can
892 be used correctly inside sizeof or as a statement expression.
893 Thus, do not give an error here; an error will result later. */
897 ptrtype = build_pointer_type (restype);
899 if (TREE_CODE (exp) == VAR_DECL)
901 /* ??? This is not really quite correct
902 in that the type of the operand of ADDR_EXPR
903 is not the target type of the type of the ADDR_EXPR itself.
904 Question is, can this lossage be avoided? */
905 adr = build1 (ADDR_EXPR, ptrtype, exp);
906 if (!c_mark_addressable (exp))
907 return error_mark_node;
908 TREE_CONSTANT (adr) = staticp (exp);
909 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
912 /* This way is better for a COMPONENT_REF since it can
913 simplify the offset for a component. */
914 adr = build_unary_op (ADDR_EXPR, exp, 1);
915 return convert (ptrtype, adr);
920 /* Perform default promotions for C data used in expressions.
921 Arrays and functions are converted to pointers;
922 enumeral types or short or char, to int.
923 In addition, manifest constants symbols are replaced by their values. */
926 default_conversion (exp)
930 tree type = TREE_TYPE (exp);
931 enum tree_code code = TREE_CODE (type);
933 if (code == FUNCTION_TYPE || code == ARRAY_TYPE)
934 return default_function_array_conversion (exp);
936 /* Constants can be used directly unless they're not loadable. */
937 if (TREE_CODE (exp) == CONST_DECL)
938 exp = DECL_INITIAL (exp);
940 /* Replace a nonvolatile const static variable with its value unless
941 it is an array, in which case we must be sure that taking the
942 address of the array produces consistent results. */
943 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
945 exp = decl_constant_value_for_broken_optimization (exp);
946 type = TREE_TYPE (exp);
949 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
952 Do not use STRIP_NOPS here! It will remove conversions from pointer
953 to integer and cause infinite recursion. */
955 while (TREE_CODE (exp) == NON_LVALUE_EXPR
956 || (TREE_CODE (exp) == NOP_EXPR
957 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
958 exp = TREE_OPERAND (exp, 0);
960 /* Preserve the original expression code. */
961 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))))
962 C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp));
964 /* Normally convert enums to int,
965 but convert wide enums to something wider. */
966 if (code == ENUMERAL_TYPE)
968 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
969 TYPE_PRECISION (integer_type_node)),
970 ((TYPE_PRECISION (type)
971 >= TYPE_PRECISION (integer_type_node))
972 && TREE_UNSIGNED (type)));
974 return convert (type, exp);
977 if (TREE_CODE (exp) == COMPONENT_REF
978 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
979 /* If it's thinner than an int, promote it like a
980 c_promoting_integer_type_p, otherwise leave it alone. */
981 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
982 TYPE_PRECISION (integer_type_node)))
983 return convert (integer_type_node, exp);
985 if (c_promoting_integer_type_p (type))
987 /* Preserve unsignedness if not really getting any wider. */
988 if (TREE_UNSIGNED (type)
989 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
990 return convert (unsigned_type_node, exp);
992 return convert (integer_type_node, exp);
995 if (code == VOID_TYPE)
997 error ("void value not ignored as it ought to be");
998 return error_mark_node;
1003 /* Look up COMPONENT in a structure or union DECL.
1005 If the component name is not found, returns NULL_TREE. Otherwise,
1006 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1007 stepping down the chain to the component, which is in the last
1008 TREE_VALUE of the list. Normally the list is of length one, but if
1009 the component is embedded within (nested) anonymous structures or
1010 unions, the list steps down the chain to the component. */
1013 lookup_field (decl, component)
1014 tree decl, component;
1016 tree type = TREE_TYPE (decl);
1019 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1020 to the field elements. Use a binary search on this array to quickly
1021 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1022 will always be set for structures which have many elements. */
1024 if (TYPE_LANG_SPECIFIC (type))
1027 tree *field_array = &TYPE_LANG_SPECIFIC (type)->elts[0];
1029 field = TYPE_FIELDS (type);
1031 top = TYPE_LANG_SPECIFIC (type)->len;
1032 while (top - bot > 1)
1034 half = (top - bot + 1) >> 1;
1035 field = field_array[bot+half];
1037 if (DECL_NAME (field) == NULL_TREE)
1039 /* Step through all anon unions in linear fashion. */
1040 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1042 field = field_array[bot++];
1043 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1044 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1046 tree anon = lookup_field (field, component);
1049 return tree_cons (NULL_TREE, field, anon);
1053 /* Entire record is only anon unions. */
1057 /* Restart the binary search, with new lower bound. */
1061 if (DECL_NAME (field) == component)
1063 if (DECL_NAME (field) < component)
1069 if (DECL_NAME (field_array[bot]) == component)
1070 field = field_array[bot];
1071 else if (DECL_NAME (field) != component)
1076 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1078 if (DECL_NAME (field) == NULL_TREE
1079 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1080 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1082 tree anon = lookup_field (field, component);
1085 return tree_cons (NULL_TREE, field, anon);
1088 if (DECL_NAME (field) == component)
1092 if (field == NULL_TREE)
1096 return tree_cons (NULL_TREE, field, NULL_TREE);
1099 /* Make an expression to refer to the COMPONENT field of
1100 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1103 build_component_ref (datum, component)
1104 tree datum, component;
1106 tree type = TREE_TYPE (datum);
1107 enum tree_code code = TREE_CODE (type);
1111 /* If DATUM is a COMPOUND_EXPR, move our reference inside it.
1112 If pedantic ensure that the arguments are not lvalues; otherwise,
1113 if the component is an array, it would wrongly decay to a pointer in
1115 We cannot do this with a COND_EXPR, because in a conditional expression
1116 the default promotions are applied to both sides, and this would yield
1117 the wrong type of the result; for example, if the components have
1119 switch (TREE_CODE (datum))
1123 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
1124 return build (COMPOUND_EXPR, TREE_TYPE (value),
1125 TREE_OPERAND (datum, 0), pedantic_non_lvalue (value));
1131 /* See if there is a field or component with name COMPONENT. */
1133 if (code == RECORD_TYPE || code == UNION_TYPE)
1135 if (!COMPLETE_TYPE_P (type))
1137 c_incomplete_type_error (NULL_TREE, type);
1138 return error_mark_node;
1141 field = lookup_field (datum, component);
1145 error ("%s has no member named `%s'",
1146 code == RECORD_TYPE ? "structure" : "union",
1147 IDENTIFIER_POINTER (component));
1148 return error_mark_node;
1151 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1152 This might be better solved in future the way the C++ front
1153 end does it - by giving the anonymous entities each a
1154 separate name and type, and then have build_component_ref
1155 recursively call itself. We can't do that here. */
1158 tree subdatum = TREE_VALUE (field);
1160 if (TREE_TYPE (subdatum) == error_mark_node)
1161 return error_mark_node;
1163 ref = build (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum);
1164 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
1165 TREE_READONLY (ref) = 1;
1166 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
1167 TREE_THIS_VOLATILE (ref) = 1;
1169 if (TREE_DEPRECATED (subdatum))
1170 warn_deprecated_use (subdatum);
1174 field = TREE_CHAIN (field);
1180 else if (code != ERROR_MARK)
1181 error ("request for member `%s' in something not a structure or union",
1182 IDENTIFIER_POINTER (component));
1184 return error_mark_node;
1187 /* Given an expression PTR for a pointer, return an expression
1188 for the value pointed to.
1189 ERRORSTRING is the name of the operator to appear in error messages. */
1192 build_indirect_ref (ptr, errorstring)
1194 const char *errorstring;
1196 tree pointer = default_conversion (ptr);
1197 tree type = TREE_TYPE (pointer);
1199 if (TREE_CODE (type) == POINTER_TYPE)
1201 if (TREE_CODE (pointer) == ADDR_EXPR
1202 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1203 == TREE_TYPE (type)))
1204 return TREE_OPERAND (pointer, 0);
1207 tree t = TREE_TYPE (type);
1208 tree ref = build1 (INDIRECT_REF, TYPE_MAIN_VARIANT (t), pointer);
1210 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1212 error ("dereferencing pointer to incomplete type");
1213 return error_mark_node;
1215 if (VOID_TYPE_P (t) && skip_evaluation == 0)
1216 warning ("dereferencing `void *' pointer");
1218 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1219 so that we get the proper error message if the result is used
1220 to assign to. Also, &* is supposed to be a no-op.
1221 And ANSI C seems to specify that the type of the result
1222 should be the const type. */
1223 /* A de-reference of a pointer to const is not a const. It is valid
1224 to change it via some other pointer. */
1225 TREE_READONLY (ref) = TYPE_READONLY (t);
1226 TREE_SIDE_EFFECTS (ref)
1227 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
1228 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1232 else if (TREE_CODE (pointer) != ERROR_MARK)
1233 error ("invalid type argument of `%s'", errorstring);
1234 return error_mark_node;
1237 /* This handles expressions of the form "a[i]", which denotes
1240 This is logically equivalent in C to *(a+i), but we may do it differently.
1241 If A is a variable or a member, we generate a primitive ARRAY_REF.
1242 This avoids forcing the array out of registers, and can work on
1243 arrays that are not lvalues (for example, members of structures returned
1247 build_array_ref (array, index)
1252 error ("subscript missing in array reference");
1253 return error_mark_node;
1256 if (TREE_TYPE (array) == error_mark_node
1257 || TREE_TYPE (index) == error_mark_node)
1258 return error_mark_node;
1260 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
1261 && TREE_CODE (array) != INDIRECT_REF)
1265 /* Subscripting with type char is likely to lose
1266 on a machine where chars are signed.
1267 So warn on any machine, but optionally.
1268 Don't warn for unsigned char since that type is safe.
1269 Don't warn for signed char because anyone who uses that
1270 must have done so deliberately. */
1271 if (warn_char_subscripts
1272 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1273 warning ("array subscript has type `char'");
1275 /* Apply default promotions *after* noticing character types. */
1276 index = default_conversion (index);
1278 /* Require integer *after* promotion, for sake of enums. */
1279 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1281 error ("array subscript is not an integer");
1282 return error_mark_node;
1285 /* An array that is indexed by a non-constant
1286 cannot be stored in a register; we must be able to do
1287 address arithmetic on its address.
1288 Likewise an array of elements of variable size. */
1289 if (TREE_CODE (index) != INTEGER_CST
1290 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1291 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1293 if (!c_mark_addressable (array))
1294 return error_mark_node;
1296 /* An array that is indexed by a constant value which is not within
1297 the array bounds cannot be stored in a register either; because we
1298 would get a crash in store_bit_field/extract_bit_field when trying
1299 to access a non-existent part of the register. */
1300 if (TREE_CODE (index) == INTEGER_CST
1301 && TYPE_VALUES (TREE_TYPE (array))
1302 && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
1304 if (!c_mark_addressable (array))
1305 return error_mark_node;
1311 while (TREE_CODE (foo) == COMPONENT_REF)
1312 foo = TREE_OPERAND (foo, 0);
1313 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
1314 pedwarn ("ISO C forbids subscripting `register' array");
1315 else if (! flag_isoc99 && ! lvalue_p (foo))
1316 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
1319 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1320 rval = build (ARRAY_REF, type, array, index);
1321 /* Array ref is const/volatile if the array elements are
1322 or if the array is. */
1323 TREE_READONLY (rval)
1324 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1325 | TREE_READONLY (array));
1326 TREE_SIDE_EFFECTS (rval)
1327 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1328 | TREE_SIDE_EFFECTS (array));
1329 TREE_THIS_VOLATILE (rval)
1330 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1331 /* This was added by rms on 16 Nov 91.
1332 It fixes vol struct foo *a; a->elts[1]
1333 in an inline function.
1334 Hope it doesn't break something else. */
1335 | TREE_THIS_VOLATILE (array));
1336 return require_complete_type (fold (rval));
1340 tree ar = default_conversion (array);
1341 tree ind = default_conversion (index);
1343 /* Do the same warning check as above, but only on the part that's
1344 syntactically the index and only if it is also semantically
1346 if (warn_char_subscripts
1347 && TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
1348 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1349 warning ("subscript has type `char'");
1351 /* Put the integer in IND to simplify error checking. */
1352 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1359 if (ar == error_mark_node)
1362 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
1363 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
1365 error ("subscripted value is neither array nor pointer");
1366 return error_mark_node;
1368 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1370 error ("array subscript is not an integer");
1371 return error_mark_node;
1374 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1379 /* Issue an error message for a reference to an undeclared variable ID,
1380 including a reference to a builtin outside of function-call context.
1381 Arrange to suppress further errors for the same identifier. */
1383 undeclared_variable (id)
1386 if (current_function_decl == 0)
1388 error ("`%s' undeclared here (not in a function)",
1389 IDENTIFIER_POINTER (id));
1390 IDENTIFIER_SYMBOL_VALUE (id) = error_mark_node;
1394 error ("`%s' undeclared (first use in this function)",
1395 IDENTIFIER_POINTER (id));
1397 if (! undeclared_variable_notice)
1399 error ("(Each undeclared identifier is reported only once");
1400 error ("for each function it appears in.)");
1401 undeclared_variable_notice = 1;
1404 /* Set IDENTIFIER_SYMBOL_VALUE (id) to error_mark_node
1405 at function scope. This suppresses further warnings
1406 about this undeclared identifier in this function. */
1407 pushdecl_function_level (error_mark_node, id);
1411 /* Build an external reference to identifier ID. FUN indicates
1412 whether this will be used for a function call. */
1414 build_external_ref (id, fun)
1419 tree decl = lookup_name (id);
1420 tree objc_ivar = lookup_objc_ivar (id);
1422 if (decl && decl != error_mark_node)
1424 /* Properly declared variable or function reference. */
1427 else if (decl != objc_ivar && DECL_CONTEXT (decl) != 0)
1429 warning ("local declaration of `%s' hides instance variable",
1430 IDENTIFIER_POINTER (id));
1439 /* Implicit function declaration. */
1440 ref = implicitly_declare (id);
1441 else if (decl == error_mark_node)
1442 /* Don't complain about something that's already been
1443 complained about. */
1444 return error_mark_node;
1447 undeclared_variable (id);
1448 return error_mark_node;
1451 if (TREE_TYPE (ref) == error_mark_node)
1452 return error_mark_node;
1454 if (TREE_DEPRECATED (ref))
1455 warn_deprecated_use (ref);
1457 if (!skip_evaluation)
1458 assemble_external (ref);
1459 TREE_USED (ref) = 1;
1461 if (TREE_CODE (ref) == CONST_DECL)
1463 ref = DECL_INITIAL (ref);
1464 TREE_CONSTANT (ref) = 1;
1470 /* Build a function call to function FUNCTION with parameters PARAMS.
1471 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1472 TREE_VALUE of each node is a parameter-expression.
1473 FUNCTION's data type may be a function type or a pointer-to-function. */
1476 build_function_call (function, params)
1477 tree function, params;
1479 tree fntype, fundecl = 0;
1480 tree coerced_params;
1481 tree name = NULL_TREE, result;
1483 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1484 STRIP_TYPE_NOPS (function);
1486 /* Convert anything with function type to a pointer-to-function. */
1487 if (TREE_CODE (function) == FUNCTION_DECL)
1489 name = DECL_NAME (function);
1491 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1492 (because calling an inline function does not mean the function
1493 needs to be separately compiled). */
1494 fntype = build_type_variant (TREE_TYPE (function),
1495 TREE_READONLY (function),
1496 TREE_THIS_VOLATILE (function));
1498 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1501 function = default_conversion (function);
1503 fntype = TREE_TYPE (function);
1505 if (TREE_CODE (fntype) == ERROR_MARK)
1506 return error_mark_node;
1508 if (!(TREE_CODE (fntype) == POINTER_TYPE
1509 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1511 error ("called object is not a function");
1512 return error_mark_node;
1515 if (fundecl && TREE_THIS_VOLATILE (fundecl))
1516 current_function_returns_abnormally = 1;
1518 /* fntype now gets the type of function pointed to. */
1519 fntype = TREE_TYPE (fntype);
1521 /* Convert the parameters to the types declared in the
1522 function prototype, or apply default promotions. */
1525 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
1527 /* Check that the arguments to the function are valid. */
1529 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
1531 /* Recognize certain built-in functions so we can make tree-codes
1532 other than CALL_EXPR. We do this when it enables fold-const.c
1533 to do something useful. */
1535 if (TREE_CODE (function) == ADDR_EXPR
1536 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1537 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
1539 result = expand_tree_builtin (TREE_OPERAND (function, 0),
1540 params, coerced_params);
1545 result = build (CALL_EXPR, TREE_TYPE (fntype),
1546 function, coerced_params, NULL_TREE);
1547 TREE_SIDE_EFFECTS (result) = 1;
1548 result = fold (result);
1550 if (VOID_TYPE_P (TREE_TYPE (result)))
1552 return require_complete_type (result);
1555 /* Convert the argument expressions in the list VALUES
1556 to the types in the list TYPELIST. The result is a list of converted
1557 argument expressions.
1559 If TYPELIST is exhausted, or when an element has NULL as its type,
1560 perform the default conversions.
1562 PARMLIST is the chain of parm decls for the function being called.
1563 It may be 0, if that info is not available.
1564 It is used only for generating error messages.
1566 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1568 This is also where warnings about wrong number of args are generated.
1570 Both VALUES and the returned value are chains of TREE_LIST nodes
1571 with the elements of the list in the TREE_VALUE slots of those nodes. */
1574 convert_arguments (typelist, values, name, fundecl)
1575 tree typelist, values, name, fundecl;
1577 tree typetail, valtail;
1581 /* Scan the given expressions and types, producing individual
1582 converted arguments and pushing them on RESULT in reverse order. */
1584 for (valtail = values, typetail = typelist, parmnum = 0;
1586 valtail = TREE_CHAIN (valtail), parmnum++)
1588 tree type = typetail ? TREE_VALUE (typetail) : 0;
1589 tree val = TREE_VALUE (valtail);
1591 if (type == void_type_node)
1594 error ("too many arguments to function `%s'",
1595 IDENTIFIER_POINTER (name));
1597 error ("too many arguments to function");
1601 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1602 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1603 to convert automatically to a pointer. */
1604 if (TREE_CODE (val) == NON_LVALUE_EXPR)
1605 val = TREE_OPERAND (val, 0);
1607 val = default_function_array_conversion (val);
1609 val = require_complete_type (val);
1613 /* Formal parm type is specified by a function prototype. */
1616 if (!COMPLETE_TYPE_P (type))
1618 error ("type of formal parameter %d is incomplete", parmnum + 1);
1623 /* Optionally warn about conversions that
1624 differ from the default conversions. */
1625 if (warn_conversion || warn_traditional)
1627 int formal_prec = TYPE_PRECISION (type);
1629 if (INTEGRAL_TYPE_P (type)
1630 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1631 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1632 if (INTEGRAL_TYPE_P (type)
1633 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1634 warn_for_assignment ("%s as integer rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1635 else if (TREE_CODE (type) == COMPLEX_TYPE
1636 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1637 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1638 else if (TREE_CODE (type) == REAL_TYPE
1639 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1640 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1641 else if (TREE_CODE (type) == COMPLEX_TYPE
1642 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1643 warn_for_assignment ("%s as complex rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1644 else if (TREE_CODE (type) == REAL_TYPE
1645 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1646 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1647 /* ??? At some point, messages should be written about
1648 conversions between complex types, but that's too messy
1650 else if (TREE_CODE (type) == REAL_TYPE
1651 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1653 /* Warn if any argument is passed as `float',
1654 since without a prototype it would be `double'. */
1655 if (formal_prec == TYPE_PRECISION (float_type_node))
1656 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
1658 /* Detect integer changing in width or signedness.
1659 These warnings are only activated with
1660 -Wconversion, not with -Wtraditional. */
1661 else if (warn_conversion && INTEGRAL_TYPE_P (type)
1662 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1664 tree would_have_been = default_conversion (val);
1665 tree type1 = TREE_TYPE (would_have_been);
1667 if (TREE_CODE (type) == ENUMERAL_TYPE
1668 && (TYPE_MAIN_VARIANT (type)
1669 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
1670 /* No warning if function asks for enum
1671 and the actual arg is that enum type. */
1673 else if (formal_prec != TYPE_PRECISION (type1))
1674 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
1675 else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
1677 /* Don't complain if the formal parameter type
1678 is an enum, because we can't tell now whether
1679 the value was an enum--even the same enum. */
1680 else if (TREE_CODE (type) == ENUMERAL_TYPE)
1682 else if (TREE_CODE (val) == INTEGER_CST
1683 && int_fits_type_p (val, type))
1684 /* Change in signedness doesn't matter
1685 if a constant value is unaffected. */
1687 /* Likewise for a constant in a NOP_EXPR. */
1688 else if (TREE_CODE (val) == NOP_EXPR
1689 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
1690 && int_fits_type_p (TREE_OPERAND (val, 0), type))
1692 #if 0 /* We never get such tree structure here. */
1693 else if (TREE_CODE (TREE_TYPE (val)) == ENUMERAL_TYPE
1694 && int_fits_type_p (TYPE_MIN_VALUE (TREE_TYPE (val)), type)
1695 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (val)), type))
1696 /* Change in signedness doesn't matter
1697 if an enum value is unaffected. */
1700 /* If the value is extended from a narrower
1701 unsigned type, it doesn't matter whether we
1702 pass it as signed or unsigned; the value
1703 certainly is the same either way. */
1704 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
1705 && TREE_UNSIGNED (TREE_TYPE (val)))
1707 else if (TREE_UNSIGNED (type))
1708 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
1710 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
1714 parmval = convert_for_assignment (type, val,
1715 (char *) 0, /* arg passing */
1716 fundecl, name, parmnum + 1);
1718 if (PROMOTE_PROTOTYPES
1719 && INTEGRAL_TYPE_P (type)
1720 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
1721 parmval = default_conversion (parmval);
1723 result = tree_cons (NULL_TREE, parmval, result);
1725 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
1726 && (TYPE_PRECISION (TREE_TYPE (val))
1727 < TYPE_PRECISION (double_type_node)))
1728 /* Convert `float' to `double'. */
1729 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
1731 /* Convert `short' and `char' to full-size `int'. */
1732 result = tree_cons (NULL_TREE, default_conversion (val), result);
1735 typetail = TREE_CHAIN (typetail);
1738 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
1741 error ("too few arguments to function `%s'",
1742 IDENTIFIER_POINTER (name));
1744 error ("too few arguments to function");
1747 return nreverse (result);
1750 /* This is the entry point used by the parser
1751 for binary operators in the input.
1752 In addition to constructing the expression,
1753 we check for operands that were written with other binary operators
1754 in a way that is likely to confuse the user. */
1757 parser_build_binary_op (code, arg1, arg2)
1758 enum tree_code code;
1761 tree result = build_binary_op (code, arg1, arg2, 1);
1764 char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
1765 char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
1766 enum tree_code code1 = ERROR_MARK;
1767 enum tree_code code2 = ERROR_MARK;
1769 if (TREE_CODE (result) == ERROR_MARK)
1770 return error_mark_node;
1772 if (IS_EXPR_CODE_CLASS (class1))
1773 code1 = C_EXP_ORIGINAL_CODE (arg1);
1774 if (IS_EXPR_CODE_CLASS (class2))
1775 code2 = C_EXP_ORIGINAL_CODE (arg2);
1777 /* Check for cases such as x+y<<z which users are likely
1778 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1779 is cleared to prevent these warnings. */
1780 if (warn_parentheses)
1782 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
1784 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1785 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1786 warning ("suggest parentheses around + or - inside shift");
1789 if (code == TRUTH_ORIF_EXPR)
1791 if (code1 == TRUTH_ANDIF_EXPR
1792 || code2 == TRUTH_ANDIF_EXPR)
1793 warning ("suggest parentheses around && within ||");
1796 if (code == BIT_IOR_EXPR)
1798 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
1799 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1800 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
1801 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1802 warning ("suggest parentheses around arithmetic in operand of |");
1803 /* Check cases like x|y==z */
1804 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1805 warning ("suggest parentheses around comparison in operand of |");
1808 if (code == BIT_XOR_EXPR)
1810 if (code1 == BIT_AND_EXPR
1811 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1812 || code2 == BIT_AND_EXPR
1813 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1814 warning ("suggest parentheses around arithmetic in operand of ^");
1815 /* Check cases like x^y==z */
1816 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1817 warning ("suggest parentheses around comparison in operand of ^");
1820 if (code == BIT_AND_EXPR)
1822 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1823 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1824 warning ("suggest parentheses around + or - in operand of &");
1825 /* Check cases like x&y==z */
1826 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1827 warning ("suggest parentheses around comparison in operand of &");
1831 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
1832 if (TREE_CODE_CLASS (code) == '<' && extra_warnings
1833 && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
1834 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1836 unsigned_conversion_warning (result, arg1);
1837 unsigned_conversion_warning (result, arg2);
1838 overflow_warning (result);
1840 class = TREE_CODE_CLASS (TREE_CODE (result));
1842 /* Record the code that was specified in the source,
1843 for the sake of warnings about confusing nesting. */
1844 if (IS_EXPR_CODE_CLASS (class))
1845 C_SET_EXP_ORIGINAL_CODE (result, code);
1848 int flag = TREE_CONSTANT (result);
1849 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
1850 so that convert_for_assignment wouldn't strip it.
1851 That way, we got warnings for things like p = (1 - 1).
1852 But it turns out we should not get those warnings. */
1853 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
1854 C_SET_EXP_ORIGINAL_CODE (result, code);
1855 TREE_CONSTANT (result) = flag;
1861 /* Build a binary-operation expression without default conversions.
1862 CODE is the kind of expression to build.
1863 This function differs from `build' in several ways:
1864 the data type of the result is computed and recorded in it,
1865 warnings are generated if arg data types are invalid,
1866 special handling for addition and subtraction of pointers is known,
1867 and some optimization is done (operations on narrow ints
1868 are done in the narrower type when that gives the same result).
1869 Constant folding is also done before the result is returned.
1871 Note that the operands will never have enumeral types, or function
1872 or array types, because either they will have the default conversions
1873 performed or they have both just been converted to some other type in which
1874 the arithmetic is to be done. */
1877 build_binary_op (code, orig_op0, orig_op1, convert_p)
1878 enum tree_code code;
1879 tree orig_op0, orig_op1;
1883 enum tree_code code0, code1;
1886 /* Expression code to give to the expression when it is built.
1887 Normally this is CODE, which is what the caller asked for,
1888 but in some special cases we change it. */
1889 enum tree_code resultcode = code;
1891 /* Data type in which the computation is to be performed.
1892 In the simplest cases this is the common type of the arguments. */
1893 tree result_type = NULL;
1895 /* Nonzero means operands have already been type-converted
1896 in whatever way is necessary.
1897 Zero means they need to be converted to RESULT_TYPE. */
1900 /* Nonzero means create the expression with this type, rather than
1902 tree build_type = 0;
1904 /* Nonzero means after finally constructing the expression
1905 convert it to this type. */
1906 tree final_type = 0;
1908 /* Nonzero if this is an operation like MIN or MAX which can
1909 safely be computed in short if both args are promoted shorts.
1910 Also implies COMMON.
1911 -1 indicates a bitwise operation; this makes a difference
1912 in the exact conditions for when it is safe to do the operation
1913 in a narrower mode. */
1916 /* Nonzero if this is a comparison operation;
1917 if both args are promoted shorts, compare the original shorts.
1918 Also implies COMMON. */
1919 int short_compare = 0;
1921 /* Nonzero if this is a right-shift operation, which can be computed on the
1922 original short and then promoted if the operand is a promoted short. */
1923 int short_shift = 0;
1925 /* Nonzero means set RESULT_TYPE to the common type of the args. */
1930 op0 = default_conversion (orig_op0);
1931 op1 = default_conversion (orig_op1);
1939 type0 = TREE_TYPE (op0);
1940 type1 = TREE_TYPE (op1);
1942 /* The expression codes of the data types of the arguments tell us
1943 whether the arguments are integers, floating, pointers, etc. */
1944 code0 = TREE_CODE (type0);
1945 code1 = TREE_CODE (type1);
1947 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1948 STRIP_TYPE_NOPS (op0);
1949 STRIP_TYPE_NOPS (op1);
1951 /* If an error was already reported for one of the arguments,
1952 avoid reporting another error. */
1954 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
1955 return error_mark_node;
1960 /* Handle the pointer + int case. */
1961 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1962 return pointer_int_sum (PLUS_EXPR, op0, op1);
1963 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
1964 return pointer_int_sum (PLUS_EXPR, op1, op0);
1970 /* Subtraction of two similar pointers.
1971 We must subtract them as integers, then divide by object size. */
1972 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
1973 && comp_target_types (type0, type1, 1))
1974 return pointer_diff (op0, op1);
1975 /* Handle pointer minus int. Just like pointer plus int. */
1976 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1977 return pointer_int_sum (MINUS_EXPR, op0, op1);
1986 case TRUNC_DIV_EXPR:
1988 case FLOOR_DIV_EXPR:
1989 case ROUND_DIV_EXPR:
1990 case EXACT_DIV_EXPR:
1991 /* Floating point division by zero is a legitimate way to obtain
1992 infinities and NaNs. */
1993 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
1994 warning ("division by zero");
1996 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
1997 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
1998 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
1999 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
2001 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
2002 resultcode = RDIV_EXPR;
2004 /* Although it would be tempting to shorten always here, that
2005 loses on some targets, since the modulo instruction is
2006 undefined if the quotient can't be represented in the
2007 computation mode. We shorten only if unsigned or if
2008 dividing by something we know != -1. */
2009 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2010 || (TREE_CODE (op1) == INTEGER_CST
2011 && ! integer_all_onesp (op1)));
2017 case BIT_ANDTC_EXPR:
2020 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2022 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
2026 case TRUNC_MOD_EXPR:
2027 case FLOOR_MOD_EXPR:
2028 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
2029 warning ("division by zero");
2031 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2033 /* Although it would be tempting to shorten always here, that loses
2034 on some targets, since the modulo instruction is undefined if the
2035 quotient can't be represented in the computation mode. We shorten
2036 only if unsigned or if dividing by something we know != -1. */
2037 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2038 || (TREE_CODE (op1) == INTEGER_CST
2039 && ! integer_all_onesp (op1)));
2044 case TRUTH_ANDIF_EXPR:
2045 case TRUTH_ORIF_EXPR:
2046 case TRUTH_AND_EXPR:
2048 case TRUTH_XOR_EXPR:
2049 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
2050 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2051 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
2052 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2054 /* Result of these operations is always an int,
2055 but that does not mean the operands should be
2056 converted to ints! */
2057 result_type = integer_type_node;
2058 op0 = c_common_truthvalue_conversion (op0);
2059 op1 = c_common_truthvalue_conversion (op1);
2064 /* Shift operations: result has same type as first operand;
2065 always convert second operand to int.
2066 Also set SHORT_SHIFT if shifting rightward. */
2069 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2071 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2073 if (tree_int_cst_sgn (op1) < 0)
2074 warning ("right shift count is negative");
2077 if (! integer_zerop (op1))
2080 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2081 warning ("right shift count >= width of type");
2085 /* Use the type of the value to be shifted. */
2086 result_type = type0;
2087 /* Convert the shift-count to an integer, regardless of size
2088 of value being shifted. */
2089 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2090 op1 = convert (integer_type_node, op1);
2091 /* Avoid converting op1 to result_type later. */
2097 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2099 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2101 if (tree_int_cst_sgn (op1) < 0)
2102 warning ("left shift count is negative");
2104 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2105 warning ("left shift count >= width of type");
2108 /* Use the type of the value to be shifted. */
2109 result_type = type0;
2110 /* Convert the shift-count to an integer, regardless of size
2111 of value being shifted. */
2112 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2113 op1 = convert (integer_type_node, op1);
2114 /* Avoid converting op1 to result_type later. */
2121 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2123 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2125 if (tree_int_cst_sgn (op1) < 0)
2126 warning ("shift count is negative");
2127 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2128 warning ("shift count >= width of type");
2131 /* Use the type of the value to be shifted. */
2132 result_type = type0;
2133 /* Convert the shift-count to an integer, regardless of size
2134 of value being shifted. */
2135 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2136 op1 = convert (integer_type_node, op1);
2137 /* Avoid converting op1 to result_type later. */
2144 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
2145 warning ("comparing floating point with == or != is unsafe");
2146 /* Result of comparison is always int,
2147 but don't convert the args to int! */
2148 build_type = integer_type_node;
2149 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2150 || code0 == COMPLEX_TYPE
2151 || code0 == VECTOR_TYPE)
2152 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2153 || code1 == COMPLEX_TYPE
2154 || code1 == VECTOR_TYPE))
2156 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2158 tree tt0 = TREE_TYPE (type0);
2159 tree tt1 = TREE_TYPE (type1);
2160 /* Anything compares with void *. void * compares with anything.
2161 Otherwise, the targets must be compatible
2162 and both must be object or both incomplete. */
2163 if (comp_target_types (type0, type1, 1))
2164 result_type = common_type (type0, type1);
2165 else if (VOID_TYPE_P (tt0))
2167 /* op0 != orig_op0 detects the case of something
2168 whose value is 0 but which isn't a valid null ptr const. */
2169 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
2170 && TREE_CODE (tt1) == FUNCTION_TYPE)
2171 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
2173 else if (VOID_TYPE_P (tt1))
2175 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
2176 && TREE_CODE (tt0) == FUNCTION_TYPE)
2177 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
2180 pedwarn ("comparison of distinct pointer types lacks a cast");
2182 if (result_type == NULL_TREE)
2183 result_type = ptr_type_node;
2185 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2186 && integer_zerop (op1))
2187 result_type = type0;
2188 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2189 && integer_zerop (op0))
2190 result_type = type1;
2191 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2193 result_type = type0;
2194 pedwarn ("comparison between pointer and integer");
2196 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2198 result_type = type1;
2199 pedwarn ("comparison between pointer and integer");
2205 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2206 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2208 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2210 if (comp_target_types (type0, type1, 1))
2212 result_type = common_type (type0, type1);
2214 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2215 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
2219 result_type = ptr_type_node;
2220 pedwarn ("comparison of distinct pointer types lacks a cast");
2229 build_type = integer_type_node;
2230 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2231 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2233 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2235 if (comp_target_types (type0, type1, 1))
2237 result_type = common_type (type0, type1);
2238 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
2239 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
2240 pedwarn ("comparison of complete and incomplete pointers");
2242 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2243 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
2247 result_type = ptr_type_node;
2248 pedwarn ("comparison of distinct pointer types lacks a cast");
2251 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2252 && integer_zerop (op1))
2254 result_type = type0;
2255 if (pedantic || extra_warnings)
2256 pedwarn ("ordered comparison of pointer with integer zero");
2258 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2259 && integer_zerop (op0))
2261 result_type = type1;
2263 pedwarn ("ordered comparison of pointer with integer zero");
2265 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2267 result_type = type0;
2268 pedwarn ("comparison between pointer and integer");
2270 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2272 result_type = type1;
2273 pedwarn ("comparison between pointer and integer");
2277 case UNORDERED_EXPR:
2284 build_type = integer_type_node;
2285 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
2287 error ("unordered comparison on non-floating point argument");
2288 return error_mark_node;
2297 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
2298 || code0 == VECTOR_TYPE)
2300 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
2301 || code1 == VECTOR_TYPE))
2303 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
2305 if (shorten || common || short_compare)
2306 result_type = common_type (type0, type1);
2308 /* For certain operations (which identify themselves by shorten != 0)
2309 if both args were extended from the same smaller type,
2310 do the arithmetic in that type and then extend.
2312 shorten !=0 and !=1 indicates a bitwise operation.
2313 For them, this optimization is safe only if
2314 both args are zero-extended or both are sign-extended.
2315 Otherwise, we might change the result.
2316 Eg, (short)-1 | (unsigned short)-1 is (int)-1
2317 but calculated in (unsigned short) it would be (unsigned short)-1. */
2319 if (shorten && none_complex)
2321 int unsigned0, unsigned1;
2322 tree arg0 = get_narrower (op0, &unsigned0);
2323 tree arg1 = get_narrower (op1, &unsigned1);
2324 /* UNS is 1 if the operation to be done is an unsigned one. */
2325 int uns = TREE_UNSIGNED (result_type);
2328 final_type = result_type;
2330 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
2331 but it *requires* conversion to FINAL_TYPE. */
2333 if ((TYPE_PRECISION (TREE_TYPE (op0))
2334 == TYPE_PRECISION (TREE_TYPE (arg0)))
2335 && TREE_TYPE (op0) != final_type)
2336 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
2337 if ((TYPE_PRECISION (TREE_TYPE (op1))
2338 == TYPE_PRECISION (TREE_TYPE (arg1)))
2339 && TREE_TYPE (op1) != final_type)
2340 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
2342 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
2344 /* For bitwise operations, signedness of nominal type
2345 does not matter. Consider only how operands were extended. */
2349 /* Note that in all three cases below we refrain from optimizing
2350 an unsigned operation on sign-extended args.
2351 That would not be valid. */
2353 /* Both args variable: if both extended in same way
2354 from same width, do it in that width.
2355 Do it unsigned if args were zero-extended. */
2356 if ((TYPE_PRECISION (TREE_TYPE (arg0))
2357 < TYPE_PRECISION (result_type))
2358 && (TYPE_PRECISION (TREE_TYPE (arg1))
2359 == TYPE_PRECISION (TREE_TYPE (arg0)))
2360 && unsigned0 == unsigned1
2361 && (unsigned0 || !uns))
2363 = c_common_signed_or_unsigned_type
2364 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
2365 else if (TREE_CODE (arg0) == INTEGER_CST
2366 && (unsigned1 || !uns)
2367 && (TYPE_PRECISION (TREE_TYPE (arg1))
2368 < TYPE_PRECISION (result_type))
2370 = c_common_signed_or_unsigned_type (unsigned1,
2372 int_fits_type_p (arg0, type)))
2374 else if (TREE_CODE (arg1) == INTEGER_CST
2375 && (unsigned0 || !uns)
2376 && (TYPE_PRECISION (TREE_TYPE (arg0))
2377 < TYPE_PRECISION (result_type))
2379 = c_common_signed_or_unsigned_type (unsigned0,
2381 int_fits_type_p (arg1, type)))
2385 /* Shifts can be shortened if shifting right. */
2390 tree arg0 = get_narrower (op0, &unsigned_arg);
2392 final_type = result_type;
2394 if (arg0 == op0 && final_type == TREE_TYPE (op0))
2395 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
2397 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
2398 /* We can shorten only if the shift count is less than the
2399 number of bits in the smaller type size. */
2400 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
2401 /* We cannot drop an unsigned shift after sign-extension. */
2402 && (!TREE_UNSIGNED (final_type) || unsigned_arg))
2404 /* Do an unsigned shift if the operand was zero-extended. */
2406 = c_common_signed_or_unsigned_type (unsigned_arg,
2408 /* Convert value-to-be-shifted to that type. */
2409 if (TREE_TYPE (op0) != result_type)
2410 op0 = convert (result_type, op0);
2415 /* Comparison operations are shortened too but differently.
2416 They identify themselves by setting short_compare = 1. */
2420 /* Don't write &op0, etc., because that would prevent op0
2421 from being kept in a register.
2422 Instead, make copies of the our local variables and
2423 pass the copies by reference, then copy them back afterward. */
2424 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
2425 enum tree_code xresultcode = resultcode;
2427 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
2432 op0 = xop0, op1 = xop1;
2434 resultcode = xresultcode;
2436 if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare != 0)
2437 && skip_evaluation == 0)
2439 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
2440 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
2441 int unsignedp0, unsignedp1;
2442 tree primop0 = get_narrower (op0, &unsignedp0);
2443 tree primop1 = get_narrower (op1, &unsignedp1);
2447 STRIP_TYPE_NOPS (xop0);
2448 STRIP_TYPE_NOPS (xop1);
2450 /* Give warnings for comparisons between signed and unsigned
2451 quantities that may fail.
2453 Do the checking based on the original operand trees, so that
2454 casts will be considered, but default promotions won't be.
2456 Do not warn if the comparison is being done in a signed type,
2457 since the signed type will only be chosen if it can represent
2458 all the values of the unsigned type. */
2459 if (! TREE_UNSIGNED (result_type))
2461 /* Do not warn if both operands are the same signedness. */
2462 else if (op0_signed == op1_signed)
2469 sop = xop0, uop = xop1;
2471 sop = xop1, uop = xop0;
2473 /* Do not warn if the signed quantity is an
2474 unsuffixed integer literal (or some static
2475 constant expression involving such literals or a
2476 conditional expression involving such literals)
2477 and it is non-negative. */
2478 if (c_tree_expr_nonnegative_p (sop))
2480 /* Do not warn if the comparison is an equality operation,
2481 the unsigned quantity is an integral constant, and it
2482 would fit in the result if the result were signed. */
2483 else if (TREE_CODE (uop) == INTEGER_CST
2484 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
2486 (uop, c_common_signed_type (result_type)))
2488 /* Do not warn if the unsigned quantity is an enumeration
2489 constant and its maximum value would fit in the result
2490 if the result were signed. */
2491 else if (TREE_CODE (uop) == INTEGER_CST
2492 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
2494 (TYPE_MAX_VALUE (TREE_TYPE(uop)),
2495 c_common_signed_type (result_type)))
2498 warning ("comparison between signed and unsigned");
2501 /* Warn if two unsigned values are being compared in a size
2502 larger than their original size, and one (and only one) is the
2503 result of a `~' operator. This comparison will always fail.
2505 Also warn if one operand is a constant, and the constant
2506 does not have all bits set that are set in the ~ operand
2507 when it is extended. */
2509 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
2510 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
2512 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
2513 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
2516 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
2519 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
2522 HOST_WIDE_INT constant, mask;
2523 int unsignedp, bits;
2525 if (host_integerp (primop0, 0))
2528 unsignedp = unsignedp1;
2529 constant = tree_low_cst (primop0, 0);
2534 unsignedp = unsignedp0;
2535 constant = tree_low_cst (primop1, 0);
2538 bits = TYPE_PRECISION (TREE_TYPE (primop));
2539 if (bits < TYPE_PRECISION (result_type)
2540 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
2542 mask = (~ (HOST_WIDE_INT) 0) << bits;
2543 if ((mask & constant) != mask)
2544 warning ("comparison of promoted ~unsigned with constant");
2547 else if (unsignedp0 && unsignedp1
2548 && (TYPE_PRECISION (TREE_TYPE (primop0))
2549 < TYPE_PRECISION (result_type))
2550 && (TYPE_PRECISION (TREE_TYPE (primop1))
2551 < TYPE_PRECISION (result_type)))
2552 warning ("comparison of promoted ~unsigned with unsigned");
2558 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
2559 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
2560 Then the expression will be built.
2561 It will be given type FINAL_TYPE if that is nonzero;
2562 otherwise, it will be given type RESULT_TYPE. */
2566 binary_op_error (code);
2567 return error_mark_node;
2572 if (TREE_TYPE (op0) != result_type)
2573 op0 = convert (result_type, op0);
2574 if (TREE_TYPE (op1) != result_type)
2575 op1 = convert (result_type, op1);
2578 if (build_type == NULL_TREE)
2579 build_type = result_type;
2582 tree result = build (resultcode, build_type, op0, op1);
2585 folded = fold (result);
2586 if (folded == result)
2587 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2588 if (final_type != 0)
2589 return convert (final_type, folded);
2595 /* Return true if `t' is known to be non-negative. */
2598 c_tree_expr_nonnegative_p (t)
2601 if (TREE_CODE (t) == STMT_EXPR)
2603 t = COMPOUND_BODY (STMT_EXPR_STMT (t));
2605 /* Find the last statement in the chain, ignoring the final
2606 * scope statement */
2607 while (TREE_CHAIN (t) != NULL_TREE
2608 && TREE_CODE (TREE_CHAIN (t)) != SCOPE_STMT)
2610 return tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
2612 return tree_expr_nonnegative_p (t);
2615 /* Return a tree for the difference of pointers OP0 and OP1.
2616 The resulting tree has type int. */
2619 pointer_diff (op0, op1)
2622 tree result, folded;
2623 tree restype = ptrdiff_type_node;
2625 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2626 tree con0, con1, lit0, lit1;
2627 tree orig_op1 = op1;
2629 if (pedantic || warn_pointer_arith)
2631 if (TREE_CODE (target_type) == VOID_TYPE)
2632 pedwarn ("pointer of type `void *' used in subtraction");
2633 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2634 pedwarn ("pointer to a function used in subtraction");
2637 /* If the conversion to ptrdiff_type does anything like widening or
2638 converting a partial to an integral mode, we get a convert_expression
2639 that is in the way to do any simplifications.
2640 (fold-const.c doesn't know that the extra bits won't be needed.
2641 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2642 different mode in place.)
2643 So first try to find a common term here 'by hand'; we want to cover
2644 at least the cases that occur in legal static initializers. */
2645 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2646 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
2648 if (TREE_CODE (con0) == PLUS_EXPR)
2650 lit0 = TREE_OPERAND (con0, 1);
2651 con0 = TREE_OPERAND (con0, 0);
2654 lit0 = integer_zero_node;
2656 if (TREE_CODE (con1) == PLUS_EXPR)
2658 lit1 = TREE_OPERAND (con1, 1);
2659 con1 = TREE_OPERAND (con1, 0);
2662 lit1 = integer_zero_node;
2664 if (operand_equal_p (con0, con1, 0))
2671 /* First do the subtraction as integers;
2672 then drop through to build the divide operator.
2673 Do not do default conversions on the minus operator
2674 in case restype is a short type. */
2676 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2677 convert (restype, op1), 0);
2678 /* This generates an error if op1 is pointer to incomplete type. */
2679 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2680 error ("arithmetic on pointer to an incomplete type");
2682 /* This generates an error if op0 is pointer to incomplete type. */
2683 op1 = c_size_in_bytes (target_type);
2685 /* Divide by the size, in easiest possible way. */
2687 result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2689 folded = fold (result);
2690 if (folded == result)
2691 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2695 /* Construct and perhaps optimize a tree representation
2696 for a unary operation. CODE, a tree_code, specifies the operation
2697 and XARG is the operand.
2698 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2699 the default promotions (such as from short to int).
2700 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2701 allows non-lvalues; this is only used to handle conversion of non-lvalue
2702 arrays to pointers in C99. */
2705 build_unary_op (code, xarg, flag)
2706 enum tree_code code;
2710 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2713 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2715 int noconvert = flag;
2717 if (typecode == ERROR_MARK)
2718 return error_mark_node;
2719 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2720 typecode = INTEGER_TYPE;
2725 /* This is used for unary plus, because a CONVERT_EXPR
2726 is enough to prevent anybody from looking inside for
2727 associativity, but won't generate any code. */
2728 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2729 || typecode == COMPLEX_TYPE))
2731 error ("wrong type argument to unary plus");
2732 return error_mark_node;
2734 else if (!noconvert)
2735 arg = default_conversion (arg);
2736 arg = non_lvalue (arg);
2740 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2741 || typecode == COMPLEX_TYPE
2742 || typecode == VECTOR_TYPE))
2744 error ("wrong type argument to unary minus");
2745 return error_mark_node;
2747 else if (!noconvert)
2748 arg = default_conversion (arg);
2752 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
2755 arg = default_conversion (arg);
2757 else if (typecode == COMPLEX_TYPE)
2761 pedwarn ("ISO C does not support `~' for complex conjugation");
2763 arg = default_conversion (arg);
2767 error ("wrong type argument to bit-complement");
2768 return error_mark_node;
2773 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2774 || typecode == COMPLEX_TYPE))
2776 error ("wrong type argument to abs");
2777 return error_mark_node;
2779 else if (!noconvert)
2780 arg = default_conversion (arg);
2784 /* Conjugating a real value is a no-op, but allow it anyway. */
2785 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2786 || typecode == COMPLEX_TYPE))
2788 error ("wrong type argument to conjugation");
2789 return error_mark_node;
2791 else if (!noconvert)
2792 arg = default_conversion (arg);
2795 case TRUTH_NOT_EXPR:
2796 if (typecode != INTEGER_TYPE
2797 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2798 && typecode != COMPLEX_TYPE
2799 /* These will convert to a pointer. */
2800 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2802 error ("wrong type argument to unary exclamation mark");
2803 return error_mark_node;
2805 arg = c_common_truthvalue_conversion (arg);
2806 return invert_truthvalue (arg);
2812 if (TREE_CODE (arg) == COMPLEX_CST)
2813 return TREE_REALPART (arg);
2814 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2815 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2820 if (TREE_CODE (arg) == COMPLEX_CST)
2821 return TREE_IMAGPART (arg);
2822 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2823 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2825 return convert (TREE_TYPE (arg), integer_zero_node);
2827 case PREINCREMENT_EXPR:
2828 case POSTINCREMENT_EXPR:
2829 case PREDECREMENT_EXPR:
2830 case POSTDECREMENT_EXPR:
2831 /* Handle complex lvalues (when permitted)
2832 by reduction to simpler cases. */
2834 val = unary_complex_lvalue (code, arg, 0);
2838 /* Increment or decrement the real part of the value,
2839 and don't change the imaginary part. */
2840 if (typecode == COMPLEX_TYPE)
2845 pedwarn ("ISO C does not support `++' and `--' on complex types");
2847 arg = stabilize_reference (arg);
2848 real = build_unary_op (REALPART_EXPR, arg, 1);
2849 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2850 return build (COMPLEX_EXPR, TREE_TYPE (arg),
2851 build_unary_op (code, real, 1), imag);
2854 /* Report invalid types. */
2856 if (typecode != POINTER_TYPE
2857 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2859 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2860 error ("wrong type argument to increment");
2862 error ("wrong type argument to decrement");
2864 return error_mark_node;
2869 tree result_type = TREE_TYPE (arg);
2871 arg = get_unwidened (arg, 0);
2872 argtype = TREE_TYPE (arg);
2874 /* Compute the increment. */
2876 if (typecode == POINTER_TYPE)
2878 /* If pointer target is an undefined struct,
2879 we just cannot know how to do the arithmetic. */
2880 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2882 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2883 error ("increment of pointer to unknown structure");
2885 error ("decrement of pointer to unknown structure");
2887 else if ((pedantic || warn_pointer_arith)
2888 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2889 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2891 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2892 pedwarn ("wrong type argument to increment");
2894 pedwarn ("wrong type argument to decrement");
2897 inc = c_size_in_bytes (TREE_TYPE (result_type));
2900 inc = integer_one_node;
2902 inc = convert (argtype, inc);
2904 /* Handle incrementing a cast-expression. */
2907 switch (TREE_CODE (arg))
2912 case FIX_TRUNC_EXPR:
2913 case FIX_FLOOR_EXPR:
2914 case FIX_ROUND_EXPR:
2916 pedantic_lvalue_warning (CONVERT_EXPR);
2917 /* If the real type has the same machine representation
2918 as the type it is cast to, we can make better output
2919 by adding directly to the inside of the cast. */
2920 if ((TREE_CODE (TREE_TYPE (arg))
2921 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
2922 && (TYPE_MODE (TREE_TYPE (arg))
2923 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
2924 arg = TREE_OPERAND (arg, 0);
2927 tree incremented, modify, value;
2928 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2929 value = boolean_increment (code, arg);
2932 arg = stabilize_reference (arg);
2933 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
2936 value = save_expr (arg);
2937 incremented = build (((code == PREINCREMENT_EXPR
2938 || code == POSTINCREMENT_EXPR)
2939 ? PLUS_EXPR : MINUS_EXPR),
2940 argtype, value, inc);
2941 TREE_SIDE_EFFECTS (incremented) = 1;
2942 modify = build_modify_expr (arg, NOP_EXPR, incremented);
2943 value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
2945 TREE_USED (value) = 1;
2955 /* Complain about anything else that is not a true lvalue. */
2956 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2957 || code == POSTINCREMENT_EXPR)
2958 ? "invalid lvalue in increment"
2959 : "invalid lvalue in decrement")))
2960 return error_mark_node;
2962 /* Report a read-only lvalue. */
2963 if (TREE_READONLY (arg))
2964 readonly_warning (arg,
2965 ((code == PREINCREMENT_EXPR
2966 || code == POSTINCREMENT_EXPR)
2967 ? "increment" : "decrement"));
2969 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2970 val = boolean_increment (code, arg);
2972 val = build (code, TREE_TYPE (arg), arg, inc);
2973 TREE_SIDE_EFFECTS (val) = 1;
2974 val = convert (result_type, val);
2975 if (TREE_CODE (val) != code)
2976 TREE_NO_UNUSED_WARNING (val) = 1;
2981 /* Note that this operation never does default_conversion. */
2983 /* Let &* cancel out to simplify resulting code. */
2984 if (TREE_CODE (arg) == INDIRECT_REF)
2986 /* Don't let this be an lvalue. */
2987 if (lvalue_p (TREE_OPERAND (arg, 0)))
2988 return non_lvalue (TREE_OPERAND (arg, 0));
2989 return TREE_OPERAND (arg, 0);
2992 /* For &x[y], return x+y */
2993 if (TREE_CODE (arg) == ARRAY_REF)
2995 if (!c_mark_addressable (TREE_OPERAND (arg, 0)))
2996 return error_mark_node;
2997 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
2998 TREE_OPERAND (arg, 1), 1);
3001 /* Handle complex lvalues (when permitted)
3002 by reduction to simpler cases. */
3003 val = unary_complex_lvalue (code, arg, flag);
3007 #if 0 /* Turned off because inconsistent;
3008 float f; *&(int)f = 3.4 stores in int format
3009 whereas (int)f = 3.4 stores in float format. */
3010 /* Address of a cast is just a cast of the address
3011 of the operand of the cast. */
3012 switch (TREE_CODE (arg))
3017 case FIX_TRUNC_EXPR:
3018 case FIX_FLOOR_EXPR:
3019 case FIX_ROUND_EXPR:
3022 pedwarn ("ISO C forbids the address of a cast expression");
3023 return convert (build_pointer_type (TREE_TYPE (arg)),
3024 build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0),
3029 /* Anything not already handled and not a true memory reference
3030 or a non-lvalue array is an error. */
3031 else if (typecode != FUNCTION_TYPE && !flag
3032 && !lvalue_or_else (arg, "invalid lvalue in unary `&'"))
3033 return error_mark_node;
3035 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
3036 argtype = TREE_TYPE (arg);
3038 /* If the lvalue is const or volatile, merge that into the type
3039 to which the address will point. Note that you can't get a
3040 restricted pointer by taking the address of something, so we
3041 only have to deal with `const' and `volatile' here. */
3042 if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
3043 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
3044 argtype = c_build_type_variant (argtype,
3045 TREE_READONLY (arg),
3046 TREE_THIS_VOLATILE (arg));
3048 argtype = build_pointer_type (argtype);
3050 if (!c_mark_addressable (arg))
3051 return error_mark_node;
3056 if (TREE_CODE (arg) == COMPONENT_REF)
3058 tree field = TREE_OPERAND (arg, 1);
3060 addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), flag);
3062 if (DECL_C_BIT_FIELD (field))
3064 error ("attempt to take address of bit-field structure member `%s'",
3065 IDENTIFIER_POINTER (DECL_NAME (field)));
3066 return error_mark_node;
3069 addr = fold (build (PLUS_EXPR, argtype,
3070 convert (argtype, addr),
3071 convert (argtype, byte_position (field))));
3074 addr = build1 (code, argtype, arg);
3076 /* Address of a static or external variable or
3077 file-scope function counts as a constant. */
3079 && ! (TREE_CODE (arg) == FUNCTION_DECL
3080 && DECL_CONTEXT (arg) != 0))
3081 TREE_CONSTANT (addr) = 1;
3090 argtype = TREE_TYPE (arg);
3091 return fold (build1 (code, argtype, arg));
3095 /* If CONVERSIONS is a conversion expression or a nested sequence of such,
3096 convert ARG with the same conversions in the same order
3097 and return the result. */
3100 convert_sequence (conversions, arg)
3104 switch (TREE_CODE (conversions))
3109 case FIX_TRUNC_EXPR:
3110 case FIX_FLOOR_EXPR:
3111 case FIX_ROUND_EXPR:
3113 return convert (TREE_TYPE (conversions),
3114 convert_sequence (TREE_OPERAND (conversions, 0),
3123 /* Return nonzero if REF is an lvalue valid for this language.
3124 Lvalues can be assigned, unless their type has TYPE_READONLY.
3125 Lvalues can have their address taken, unless they have DECL_REGISTER. */
3131 enum tree_code code = TREE_CODE (ref);
3138 return lvalue_p (TREE_OPERAND (ref, 0));
3140 case COMPOUND_LITERAL_EXPR:
3150 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3151 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
3155 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
3162 /* Return nonzero if REF is an lvalue valid for this language;
3163 otherwise, print an error message and return zero. */
3166 lvalue_or_else (ref, msgid)
3170 int win = lvalue_p (ref);
3173 error ("%s", msgid);
3178 /* Apply unary lvalue-demanding operator CODE to the expression ARG
3179 for certain kinds of expressions which are not really lvalues
3180 but which we can accept as lvalues. If FLAG is nonzero, then
3181 non-lvalues are OK since we may be converting a non-lvalue array to
3184 If ARG is not a kind of expression we can handle, return zero. */
3187 unary_complex_lvalue (code, arg, flag)
3188 enum tree_code code;
3192 /* Handle (a, b) used as an "lvalue". */
3193 if (TREE_CODE (arg) == COMPOUND_EXPR)
3195 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
3197 /* If this returns a function type, it isn't really being used as
3198 an lvalue, so don't issue a warning about it. */
3199 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag)
3200 pedantic_lvalue_warning (COMPOUND_EXPR);
3202 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
3203 TREE_OPERAND (arg, 0), real_result);
3206 /* Handle (a ? b : c) used as an "lvalue". */
3207 if (TREE_CODE (arg) == COND_EXPR)
3210 pedantic_lvalue_warning (COND_EXPR);
3211 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag)
3212 pedantic_lvalue_warning (COMPOUND_EXPR);
3214 return (build_conditional_expr
3215 (TREE_OPERAND (arg, 0),
3216 build_unary_op (code, TREE_OPERAND (arg, 1), flag),
3217 build_unary_op (code, TREE_OPERAND (arg, 2), flag)));
3223 /* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
3224 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
3227 pedantic_lvalue_warning (code)
3228 enum tree_code code;
3234 pedwarn ("ISO C forbids use of conditional expressions as lvalues");
3237 pedwarn ("ISO C forbids use of compound expressions as lvalues");
3240 pedwarn ("ISO C forbids use of cast expressions as lvalues");
3245 /* Warn about storing in something that is `const'. */
3248 readonly_warning (arg, msgid)
3252 if (TREE_CODE (arg) == COMPONENT_REF)
3254 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3255 readonly_warning (TREE_OPERAND (arg, 0), msgid);
3257 pedwarn ("%s of read-only member `%s'", _(msgid),
3258 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
3260 else if (TREE_CODE (arg) == VAR_DECL)
3261 pedwarn ("%s of read-only variable `%s'", _(msgid),
3262 IDENTIFIER_POINTER (DECL_NAME (arg)));
3264 pedwarn ("%s of read-only location", _(msgid));
3267 /* Mark EXP saying that we need to be able to take the
3268 address of it; it should not be allocated in a register.
3269 Returns true if successful. */
3272 c_mark_addressable (exp)
3278 switch (TREE_CODE (x))
3281 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
3283 error ("cannot take address of bit-field `%s'",
3284 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
3288 /* ... fall through ... */
3294 x = TREE_OPERAND (x, 0);
3297 case COMPOUND_LITERAL_EXPR:
3299 TREE_ADDRESSABLE (x) = 1;
3306 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
3307 && DECL_NONLOCAL (x))
3309 if (TREE_PUBLIC (x))
3311 error ("global register variable `%s' used in nested function",
3312 IDENTIFIER_POINTER (DECL_NAME (x)));
3315 pedwarn ("register variable `%s' used in nested function",
3316 IDENTIFIER_POINTER (DECL_NAME (x)));
3318 else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
3320 if (TREE_PUBLIC (x))
3322 error ("address of global register variable `%s' requested",
3323 IDENTIFIER_POINTER (DECL_NAME (x)));
3327 /* If we are making this addressable due to its having
3328 volatile components, give a different error message. Also
3329 handle the case of an unnamed parameter by not trying
3330 to give the name. */
3332 else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x)))
3334 error ("cannot put object with volatile field into register");
3338 pedwarn ("address of register variable `%s' requested",
3339 IDENTIFIER_POINTER (DECL_NAME (x)));
3341 put_var_into_stack (x, /*rescan=*/true);
3345 TREE_ADDRESSABLE (x) = 1;
3346 #if 0 /* poplevel deals with this now. */
3347 if (DECL_CONTEXT (x) == 0)
3348 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
3356 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
3359 build_conditional_expr (ifexp, op1, op2)
3360 tree ifexp, op1, op2;
3364 enum tree_code code1;
3365 enum tree_code code2;
3366 tree result_type = NULL;
3367 tree orig_op1 = op1, orig_op2 = op2;
3369 ifexp = c_common_truthvalue_conversion (default_conversion (ifexp));
3371 #if 0 /* Produces wrong result if within sizeof. */
3372 /* Don't promote the operands separately if they promote
3373 the same way. Return the unpromoted type and let the combined
3374 value get promoted if necessary. */
3376 if (TREE_TYPE (op1) == TREE_TYPE (op2)
3377 && TREE_CODE (TREE_TYPE (op1)) != ARRAY_TYPE
3378 && TREE_CODE (TREE_TYPE (op1)) != ENUMERAL_TYPE
3379 && TREE_CODE (TREE_TYPE (op1)) != FUNCTION_TYPE)
3381 if (TREE_CODE (ifexp) == INTEGER_CST)
3382 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3384 return fold (build (COND_EXPR, TREE_TYPE (op1), ifexp, op1, op2));
3388 /* Promote both alternatives. */
3390 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3391 op1 = default_conversion (op1);
3392 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3393 op2 = default_conversion (op2);
3395 if (TREE_CODE (ifexp) == ERROR_MARK
3396 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3397 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3398 return error_mark_node;
3400 type1 = TREE_TYPE (op1);
3401 code1 = TREE_CODE (type1);
3402 type2 = TREE_TYPE (op2);
3403 code2 = TREE_CODE (type2);
3405 /* Quickly detect the usual case where op1 and op2 have the same type
3407 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3410 result_type = type1;
3412 result_type = TYPE_MAIN_VARIANT (type1);
3414 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
3415 || code1 == COMPLEX_TYPE)
3416 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3417 || code2 == COMPLEX_TYPE))
3419 result_type = common_type (type1, type2);
3421 /* If -Wsign-compare, warn here if type1 and type2 have
3422 different signedness. We'll promote the signed to unsigned
3423 and later code won't know it used to be different.
3424 Do this check on the original types, so that explicit casts
3425 will be considered, but default promotions won't. */
3426 if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare)
3427 && !skip_evaluation)
3429 int unsigned_op1 = TREE_UNSIGNED (TREE_TYPE (orig_op1));
3430 int unsigned_op2 = TREE_UNSIGNED (TREE_TYPE (orig_op2));
3432 if (unsigned_op1 ^ unsigned_op2)
3434 /* Do not warn if the result type is signed, since the
3435 signed type will only be chosen if it can represent
3436 all the values of the unsigned type. */
3437 if (! TREE_UNSIGNED (result_type))
3439 /* Do not warn if the signed quantity is an unsuffixed
3440 integer literal (or some static constant expression
3441 involving such literals) and it is non-negative. */
3442 else if ((unsigned_op2 && c_tree_expr_nonnegative_p (op1))
3443 || (unsigned_op1 && c_tree_expr_nonnegative_p (op2)))
3446 warning ("signed and unsigned type in conditional expression");
3450 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3452 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3453 pedwarn ("ISO C forbids conditional expr with only one void side");
3454 result_type = void_type_node;
3456 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3458 if (comp_target_types (type1, type2, 1))
3459 result_type = common_type (type1, type2);
3460 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3461 && TREE_CODE (orig_op1) != NOP_EXPR)
3462 result_type = qualify_type (type2, type1);
3463 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3464 && TREE_CODE (orig_op2) != NOP_EXPR)
3465 result_type = qualify_type (type1, type2);
3466 else if (VOID_TYPE_P (TREE_TYPE (type1)))
3468 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3469 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
3470 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
3471 TREE_TYPE (type2)));
3473 else if (VOID_TYPE_P (TREE_TYPE (type2)))
3475 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3476 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
3477 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
3478 TREE_TYPE (type1)));
3482 pedwarn ("pointer type mismatch in conditional expression");
3483 result_type = build_pointer_type (void_type_node);
3486 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3488 if (! integer_zerop (op2))
3489 pedwarn ("pointer/integer type mismatch in conditional expression");
3492 op2 = null_pointer_node;
3494 result_type = type1;
3496 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3498 if (!integer_zerop (op1))
3499 pedwarn ("pointer/integer type mismatch in conditional expression");
3502 op1 = null_pointer_node;
3504 result_type = type2;
3509 if (flag_cond_mismatch)
3510 result_type = void_type_node;
3513 error ("type mismatch in conditional expression");
3514 return error_mark_node;
3518 /* Merge const and volatile flags of the incoming types. */
3520 = build_type_variant (result_type,
3521 TREE_READONLY (op1) || TREE_READONLY (op2),
3522 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3524 if (result_type != TREE_TYPE (op1))
3525 op1 = convert_and_check (result_type, op1);
3526 if (result_type != TREE_TYPE (op2))
3527 op2 = convert_and_check (result_type, op2);
3529 if (TREE_CODE (ifexp) == INTEGER_CST)
3530 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3532 return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
3535 /* Given a list of expressions, return a compound expression
3536 that performs them all and returns the value of the last of them. */
3539 build_compound_expr (list)
3542 return internal_build_compound_expr (list, TRUE);
3546 internal_build_compound_expr (list, first_p)
3552 if (TREE_CHAIN (list) == 0)
3554 /* Convert arrays and functions to pointers when there
3555 really is a comma operator. */
3558 = default_function_array_conversion (TREE_VALUE (list));
3560 #if 0 /* If something inside inhibited lvalueness, we should not override. */
3561 /* Consider (x, y+0), which is not an lvalue since y+0 is not. */
3563 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3564 if (TREE_CODE (list) == NON_LVALUE_EXPR)
3565 list = TREE_OPERAND (list, 0);
3568 /* Don't let (0, 0) be null pointer constant. */
3569 if (!first_p && integer_zerop (TREE_VALUE (list)))
3570 return non_lvalue (TREE_VALUE (list));
3571 return TREE_VALUE (list);
3574 rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
3576 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
3578 /* The left-hand operand of a comma expression is like an expression
3579 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3580 any side-effects, unless it was explicitly cast to (void). */
3581 if ((extra_warnings || warn_unused_value)
3582 && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
3583 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE (list)))))
3584 warning ("left-hand operand of comma expression has no effect");
3586 /* When pedantic, a compound expression can be neither an lvalue
3587 nor an integer constant expression. */
3592 /* With -Wunused, we should also warn if the left-hand operand does have
3593 side-effects, but computes a value which is not used. For example, in
3594 `foo() + bar(), baz()' the result of the `+' operator is not used,
3595 so we should issue a warning. */
3596 else if (warn_unused_value)
3597 warn_if_unused_value (TREE_VALUE (list));
3599 return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
3602 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3605 build_c_cast (type, expr)
3611 if (type == error_mark_node || expr == error_mark_node)
3612 return error_mark_node;
3614 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3615 only in <protocol> qualifications. But when constructing cast expressions,
3616 the protocols do matter and must be kept around. */
3617 if (!flag_objc || !objc_is_id (type))
3618 type = TYPE_MAIN_VARIANT (type);
3621 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3622 if (TREE_CODE (value) == NON_LVALUE_EXPR)
3623 value = TREE_OPERAND (value, 0);
3626 if (TREE_CODE (type) == ARRAY_TYPE)
3628 error ("cast specifies array type");
3629 return error_mark_node;
3632 if (TREE_CODE (type) == FUNCTION_TYPE)
3634 error ("cast specifies function type");
3635 return error_mark_node;
3638 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3642 if (TREE_CODE (type) == RECORD_TYPE
3643 || TREE_CODE (type) == UNION_TYPE)
3644 pedwarn ("ISO C forbids casting nonscalar to the same type");
3647 else if (TREE_CODE (type) == UNION_TYPE)
3650 value = default_function_array_conversion (value);
3652 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3653 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3654 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3662 pedwarn ("ISO C forbids casts to union type");
3663 t = digest_init (type, build (CONSTRUCTOR, type, NULL_TREE,
3664 build_tree_list (field, value)), 0);
3665 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3668 error ("cast to union type from type not present in union");
3669 return error_mark_node;
3675 /* If casting to void, avoid the error that would come
3676 from default_conversion in the case of a non-lvalue array. */
3677 if (type == void_type_node)
3678 return build1 (CONVERT_EXPR, type, value);
3680 /* Convert functions and arrays to pointers,
3681 but don't convert any other types. */
3682 value = default_function_array_conversion (value);
3683 otype = TREE_TYPE (value);
3685 /* Optionally warn about potentially worrisome casts. */
3688 && TREE_CODE (type) == POINTER_TYPE
3689 && TREE_CODE (otype) == POINTER_TYPE)
3691 tree in_type = type;
3692 tree in_otype = otype;
3696 /* Check that the qualifiers on IN_TYPE are a superset of
3697 the qualifiers of IN_OTYPE. The outermost level of
3698 POINTER_TYPE nodes is uninteresting and we stop as soon
3699 as we hit a non-POINTER_TYPE node on either type. */
3702 in_otype = TREE_TYPE (in_otype);
3703 in_type = TREE_TYPE (in_type);
3705 /* GNU C allows cv-qualified function types. 'const'
3706 means the function is very pure, 'volatile' means it
3707 can't return. We need to warn when such qualifiers
3708 are added, not when they're taken away. */
3709 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3710 && TREE_CODE (in_type) == FUNCTION_TYPE)
3711 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3713 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3715 while (TREE_CODE (in_type) == POINTER_TYPE
3716 && TREE_CODE (in_otype) == POINTER_TYPE);
3719 warning ("cast adds new qualifiers to function type");
3722 /* There are qualifiers present in IN_OTYPE that are not
3723 present in IN_TYPE. */
3724 warning ("cast discards qualifiers from pointer target type");
3727 /* Warn about possible alignment problems. */
3728 if (STRICT_ALIGNMENT && warn_cast_align
3729 && TREE_CODE (type) == POINTER_TYPE
3730 && TREE_CODE (otype) == POINTER_TYPE
3731 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3732 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3733 /* Don't warn about opaque types, where the actual alignment
3734 restriction is unknown. */
3735 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3736 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3737 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3738 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3739 warning ("cast increases required alignment of target type");
3741 if (TREE_CODE (type) == INTEGER_TYPE
3742 && TREE_CODE (otype) == POINTER_TYPE
3743 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3744 && !TREE_CONSTANT (value))
3745 warning ("cast from pointer to integer of different size");
3747 if (warn_bad_function_cast
3748 && TREE_CODE (value) == CALL_EXPR
3749 && TREE_CODE (type) != TREE_CODE (otype))
3750 warning ("cast does not match function type");
3752 if (TREE_CODE (type) == POINTER_TYPE
3753 && TREE_CODE (otype) == INTEGER_TYPE
3754 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3755 /* Don't warn about converting any constant. */
3756 && !TREE_CONSTANT (value))
3757 warning ("cast to pointer from integer of different size");
3759 if (TREE_CODE (type) == POINTER_TYPE
3760 && TREE_CODE (otype) == POINTER_TYPE
3761 && TREE_CODE (expr) == ADDR_EXPR
3762 && DECL_P (TREE_OPERAND (expr, 0))
3763 && flag_strict_aliasing && warn_strict_aliasing
3764 && !VOID_TYPE_P (TREE_TYPE (type)))
3766 /* Casting the address of a decl to non void pointer. Warn
3767 if the cast breaks type based aliasing. */
3768 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3769 warning ("type-punning to incomplete type might break strict-aliasing rules");
3770 else if (!alias_sets_conflict_p
3771 (get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0))),
3772 get_alias_set (TREE_TYPE (type))))
3773 warning ("dereferencing type-punned pointer will break strict-aliasing rules");
3777 /* Replace a nonvolatile const static variable with its value. */
3778 if (optimize && TREE_CODE (value) == VAR_DECL)
3779 value = decl_constant_value (value);
3780 value = convert (type, value);
3782 /* Ignore any integer overflow caused by the cast. */
3783 if (TREE_CODE (value) == INTEGER_CST)
3785 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3786 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3790 /* Pedantically, don't let (void *) (FOO *) 0 be a null pointer constant. */
3791 if (pedantic && TREE_CODE (value) == INTEGER_CST
3792 && TREE_CODE (expr) == INTEGER_CST
3793 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3794 value = non_lvalue (value);
3796 /* If pedantic, don't let a cast be an lvalue. */
3797 if (value == expr && pedantic)
3798 value = non_lvalue (value);
3803 /* Interpret a cast of expression EXPR to type TYPE. */
3805 c_cast_expr (type, expr)
3808 int saved_wsp = warn_strict_prototypes;
3810 /* This avoids warnings about unprototyped casts on
3811 integers. E.g. "#define SIG_DFL (void(*)())0". */
3812 if (TREE_CODE (expr) == INTEGER_CST)
3813 warn_strict_prototypes = 0;
3814 type = groktypename (type);
3815 warn_strict_prototypes = saved_wsp;
3817 return build_c_cast (type, expr);
3821 /* Build an assignment expression of lvalue LHS from value RHS.
3822 MODIFYCODE is the code for a binary operator that we use
3823 to combine the old value of LHS with RHS to get the new value.
3824 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3827 build_modify_expr (lhs, modifycode, rhs)
3829 enum tree_code modifycode;
3833 tree lhstype = TREE_TYPE (lhs);
3834 tree olhstype = lhstype;
3836 /* Types that aren't fully specified cannot be used in assignments. */
3837 lhs = require_complete_type (lhs);
3839 /* Avoid duplicate error messages from operands that had errors. */
3840 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3841 return error_mark_node;
3843 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3844 /* Do not use STRIP_NOPS here. We do not want an enumerator
3845 whose value is 0 to count as a null pointer constant. */
3846 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3847 rhs = TREE_OPERAND (rhs, 0);
3851 /* Handle control structure constructs used as "lvalues". */
3853 switch (TREE_CODE (lhs))
3855 /* Handle (a, b) used as an "lvalue". */
3857 pedantic_lvalue_warning (COMPOUND_EXPR);
3858 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1), modifycode, rhs);
3859 if (TREE_CODE (newrhs) == ERROR_MARK)
3860 return error_mark_node;
3861 return build (COMPOUND_EXPR, lhstype,
3862 TREE_OPERAND (lhs, 0), newrhs);
3864 /* Handle (a ? b : c) used as an "lvalue". */
3866 pedantic_lvalue_warning (COND_EXPR);
3867 rhs = save_expr (rhs);
3869 /* Produce (a ? (b = rhs) : (c = rhs))
3870 except that the RHS goes through a save-expr
3871 so the code to compute it is only emitted once. */
3873 = build_conditional_expr (TREE_OPERAND (lhs, 0),
3874 build_modify_expr (TREE_OPERAND (lhs, 1),
3876 build_modify_expr (TREE_OPERAND (lhs, 2),
3878 if (TREE_CODE (cond) == ERROR_MARK)
3880 /* Make sure the code to compute the rhs comes out
3881 before the split. */
3882 return build (COMPOUND_EXPR, TREE_TYPE (lhs),
3883 /* But cast it to void to avoid an "unused" error. */
3884 convert (void_type_node, rhs), cond);
3890 /* If a binary op has been requested, combine the old LHS value with the RHS
3891 producing the value we should actually store into the LHS. */
3893 if (modifycode != NOP_EXPR)
3895 lhs = stabilize_reference (lhs);
3896 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3899 /* Handle a cast used as an "lvalue".
3900 We have already performed any binary operator using the value as cast.
3901 Now convert the result to the cast type of the lhs,
3902 and then true type of the lhs and store it there;
3903 then convert result back to the cast type to be the value
3904 of the assignment. */
3906 switch (TREE_CODE (lhs))
3911 case FIX_TRUNC_EXPR:
3912 case FIX_FLOOR_EXPR:
3913 case FIX_ROUND_EXPR:
3915 newrhs = default_function_array_conversion (newrhs);
3917 tree inner_lhs = TREE_OPERAND (lhs, 0);
3919 result = build_modify_expr (inner_lhs, NOP_EXPR,
3920 convert (TREE_TYPE (inner_lhs),
3921 convert (lhstype, newrhs)));
3922 if (TREE_CODE (result) == ERROR_MARK)
3924 pedantic_lvalue_warning (CONVERT_EXPR);
3925 return convert (TREE_TYPE (lhs), result);
3932 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3933 Reject anything strange now. */
3935 if (!lvalue_or_else (lhs, "invalid lvalue in assignment"))
3936 return error_mark_node;
3938 /* Warn about storing in something that is `const'. */
3940 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3941 || ((TREE_CODE (lhstype) == RECORD_TYPE
3942 || TREE_CODE (lhstype) == UNION_TYPE)
3943 && C_TYPE_FIELDS_READONLY (lhstype)))
3944 readonly_warning (lhs, "assignment");
3946 /* If storing into a structure or union member,
3947 it has probably been given type `int'.
3948 Compute the type that would go with
3949 the actual amount of storage the member occupies. */
3951 if (TREE_CODE (lhs) == COMPONENT_REF
3952 && (TREE_CODE (lhstype) == INTEGER_TYPE
3953 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3954 || TREE_CODE (lhstype) == REAL_TYPE
3955 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3956 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3958 /* If storing in a field that is in actuality a short or narrower than one,
3959 we must store in the field in its actual type. */
3961 if (lhstype != TREE_TYPE (lhs))
3963 lhs = copy_node (lhs);
3964 TREE_TYPE (lhs) = lhstype;
3967 /* Convert new value to destination type. */
3969 newrhs = convert_for_assignment (lhstype, newrhs, _("assignment"),
3970 NULL_TREE, NULL_TREE, 0);
3971 if (TREE_CODE (newrhs) == ERROR_MARK)
3972 return error_mark_node;
3976 result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
3977 TREE_SIDE_EFFECTS (result) = 1;
3979 /* If we got the LHS in a different type for storing in,
3980 convert the result back to the nominal type of LHS
3981 so that the value we return always has the same type
3982 as the LHS argument. */
3984 if (olhstype == TREE_TYPE (result))
3986 return convert_for_assignment (olhstype, result, _("assignment"),
3987 NULL_TREE, NULL_TREE, 0);
3990 /* Convert value RHS to type TYPE as preparation for an assignment
3991 to an lvalue of type TYPE.
3992 The real work of conversion is done by `convert'.
3993 The purpose of this function is to generate error messages
3994 for assignments that are not allowed in C.
3995 ERRTYPE is a string to use in error messages:
3996 "assignment", "return", etc. If it is null, this is parameter passing
3997 for a function call (and different error messages are output).
3999 FUNNAME is the name of the function being called,
4000 as an IDENTIFIER_NODE, or null.
4001 PARMNUM is the number of the argument, for printing in error messages. */
4004 convert_for_assignment (type, rhs, errtype, fundecl, funname, parmnum)
4006 const char *errtype;
4007 tree fundecl, funname;
4010 enum tree_code codel = TREE_CODE (type);
4012 enum tree_code coder;
4014 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4015 /* Do not use STRIP_NOPS here. We do not want an enumerator
4016 whose value is 0 to count as a null pointer constant. */
4017 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
4018 rhs = TREE_OPERAND (rhs, 0);
4020 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
4021 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
4022 rhs = default_conversion (rhs);
4023 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
4024 rhs = decl_constant_value_for_broken_optimization (rhs);
4026 rhstype = TREE_TYPE (rhs);
4027 coder = TREE_CODE (rhstype);
4029 if (coder == ERROR_MARK)
4030 return error_mark_node;
4032 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
4034 overflow_warning (rhs);
4035 /* Check for Objective-C protocols. This will automatically
4036 issue a warning if there are protocol violations. No need to
4037 use the return value. */
4039 objc_comptypes (type, rhstype, 0);
4043 if (coder == VOID_TYPE)
4045 error ("void value not ignored as it ought to be");
4046 return error_mark_node;
4048 /* A type converts to a reference to it.
4049 This code doesn't fully support references, it's just for the
4050 special case of va_start and va_copy. */
4051 if (codel == REFERENCE_TYPE
4052 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
4054 if (!lvalue_p (rhs))
4056 error ("cannot pass rvalue to reference parameter");
4057 return error_mark_node;
4059 if (!c_mark_addressable (rhs))
4060 return error_mark_node;
4061 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
4063 /* We already know that these two types are compatible, but they
4064 may not be exactly identical. In fact, `TREE_TYPE (type)' is
4065 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
4066 likely to be va_list, a typedef to __builtin_va_list, which
4067 is different enough that it will cause problems later. */
4068 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
4069 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
4071 rhs = build1 (NOP_EXPR, type, rhs);
4074 /* Some types can interconvert without explicit casts. */
4075 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
4076 && ((*targetm.vector_opaque_p) (type)
4077 || (*targetm.vector_opaque_p) (rhstype)))
4078 return convert (type, rhs);
4079 /* Arithmetic types all interconvert, and enum is treated like int. */
4080 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
4081 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
4082 || codel == BOOLEAN_TYPE)
4083 && (coder == INTEGER_TYPE || coder == REAL_TYPE
4084 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
4085 || coder == BOOLEAN_TYPE))
4086 return convert_and_check (type, rhs);
4088 /* Conversion to a transparent union from its member types.
4089 This applies only to function arguments. */
4090 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && ! errtype)
4093 tree marginal_memb_type = 0;
4095 for (memb_types = TYPE_FIELDS (type); memb_types;
4096 memb_types = TREE_CHAIN (memb_types))
4098 tree memb_type = TREE_TYPE (memb_types);
4100 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
4101 TYPE_MAIN_VARIANT (rhstype)))
4104 if (TREE_CODE (memb_type) != POINTER_TYPE)
4107 if (coder == POINTER_TYPE)
4109 tree ttl = TREE_TYPE (memb_type);
4110 tree ttr = TREE_TYPE (rhstype);
4112 /* Any non-function converts to a [const][volatile] void *
4113 and vice versa; otherwise, targets must be the same.
4114 Meanwhile, the lhs target must have all the qualifiers of
4116 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4117 || comp_target_types (memb_type, rhstype, 0))
4119 /* If this type won't generate any warnings, use it. */
4120 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
4121 || ((TREE_CODE (ttr) == FUNCTION_TYPE
4122 && TREE_CODE (ttl) == FUNCTION_TYPE)
4123 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4124 == TYPE_QUALS (ttr))
4125 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4126 == TYPE_QUALS (ttl))))
4129 /* Keep looking for a better type, but remember this one. */
4130 if (! marginal_memb_type)
4131 marginal_memb_type = memb_type;
4135 /* Can convert integer zero to any pointer type. */
4136 if (integer_zerop (rhs)
4137 || (TREE_CODE (rhs) == NOP_EXPR
4138 && integer_zerop (TREE_OPERAND (rhs, 0))))
4140 rhs = null_pointer_node;
4145 if (memb_types || marginal_memb_type)
4149 /* We have only a marginally acceptable member type;
4150 it needs a warning. */
4151 tree ttl = TREE_TYPE (marginal_memb_type);
4152 tree ttr = TREE_TYPE (rhstype);
4154 /* Const and volatile mean something different for function
4155 types, so the usual warnings are not appropriate. */
4156 if (TREE_CODE (ttr) == FUNCTION_TYPE
4157 && TREE_CODE (ttl) == FUNCTION_TYPE)
4159 /* Because const and volatile on functions are
4160 restrictions that say the function will not do
4161 certain things, it is okay to use a const or volatile
4162 function where an ordinary one is wanted, but not
4164 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4165 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4166 errtype, funname, parmnum);
4168 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4169 warn_for_assignment ("%s discards qualifiers from pointer target type",
4174 if (pedantic && ! DECL_IN_SYSTEM_HEADER (fundecl))
4175 pedwarn ("ISO C prohibits argument conversion to union type");
4177 return build1 (NOP_EXPR, type, rhs);
4181 /* Conversions among pointers */
4182 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4183 && (coder == codel))
4185 tree ttl = TREE_TYPE (type);
4186 tree ttr = TREE_TYPE (rhstype);
4188 /* Any non-function converts to a [const][volatile] void *
4189 and vice versa; otherwise, targets must be the same.
4190 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
4191 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4192 || comp_target_types (type, rhstype, 0)
4193 || (c_common_unsigned_type (TYPE_MAIN_VARIANT (ttl))
4194 == c_common_unsigned_type (TYPE_MAIN_VARIANT (ttr))))
4197 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
4200 /* Check TREE_CODE to catch cases like (void *) (char *) 0
4201 which are not ANSI null ptr constants. */
4202 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
4203 && TREE_CODE (ttl) == FUNCTION_TYPE)))
4204 warn_for_assignment ("ISO C forbids %s between function pointer and `void *'",
4205 errtype, funname, parmnum);
4206 /* Const and volatile mean something different for function types,
4207 so the usual warnings are not appropriate. */
4208 else if (TREE_CODE (ttr) != FUNCTION_TYPE
4209 && TREE_CODE (ttl) != FUNCTION_TYPE)
4211 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4212 warn_for_assignment ("%s discards qualifiers from pointer target type",
4213 errtype, funname, parmnum);
4214 /* If this is not a case of ignoring a mismatch in signedness,
4216 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4217 || comp_target_types (type, rhstype, 0))
4219 /* If there is a mismatch, do warn. */
4221 warn_for_assignment ("pointer targets in %s differ in signedness",
4222 errtype, funname, parmnum);
4224 else if (TREE_CODE (ttl) == FUNCTION_TYPE
4225 && TREE_CODE (ttr) == FUNCTION_TYPE)
4227 /* Because const and volatile on functions are restrictions
4228 that say the function will not do certain things,
4229 it is okay to use a const or volatile function
4230 where an ordinary one is wanted, but not vice-versa. */
4231 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4232 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4233 errtype, funname, parmnum);
4237 warn_for_assignment ("%s from incompatible pointer type",
4238 errtype, funname, parmnum);
4239 return convert (type, rhs);
4241 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
4243 /* An explicit constant 0 can convert to a pointer,
4244 or one that results from arithmetic, even including
4245 a cast to integer type. */
4246 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
4248 ! (TREE_CODE (rhs) == NOP_EXPR
4249 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
4250 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
4251 && integer_zerop (TREE_OPERAND (rhs, 0))))
4253 warn_for_assignment ("%s makes pointer from integer without a cast",
4254 errtype, funname, parmnum);
4255 return convert (type, rhs);
4257 return null_pointer_node;
4259 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
4261 warn_for_assignment ("%s makes integer from pointer without a cast",
4262 errtype, funname, parmnum);
4263 return convert (type, rhs);
4265 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
4266 return convert (type, rhs);
4272 tree selector = objc_message_selector ();
4274 if (selector && parmnum > 2)
4275 error ("incompatible type for argument %d of `%s'",
4276 parmnum - 2, IDENTIFIER_POINTER (selector));
4278 error ("incompatible type for argument %d of `%s'",
4279 parmnum, IDENTIFIER_POINTER (funname));
4282 error ("incompatible type for argument %d of indirect function call",
4286 error ("incompatible types in %s", errtype);
4288 return error_mark_node;
4291 /* Convert VALUE for assignment into inlined parameter PARM. */
4294 c_convert_parm_for_inlining (parm, value, fn)
4295 tree parm, value, fn;
4299 /* If FN was prototyped, the value has been converted already
4300 in convert_arguments. */
4301 if (! value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
4304 type = TREE_TYPE (parm);
4305 ret = convert_for_assignment (type, value,
4306 (char *) 0 /* arg passing */, fn,
4308 if (PROMOTE_PROTOTYPES
4309 && INTEGRAL_TYPE_P (type)
4310 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
4311 ret = default_conversion (ret);
4315 /* Print a warning using MSGID.
4316 It gets OPNAME as its one parameter.
4317 if OPNAME is null and ARGNUM is 0, it is replaced by "passing arg of `FUNCTION'".
4318 Otherwise if OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
4319 FUNCTION and ARGNUM are handled specially if we are building an
4320 Objective-C selector. */
4323 warn_for_assignment (msgid, opname, function, argnum)
4331 tree selector = objc_message_selector ();
4334 if (selector && argnum > 2)
4336 function = selector;
4343 /* Function name is known; supply it. */
4344 const char *const argstring = _("passing arg of `%s'");
4345 new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4346 + strlen (argstring) + 1
4348 sprintf (new_opname, argstring,
4349 IDENTIFIER_POINTER (function));
4353 /* Function name unknown (call through ptr). */
4354 const char *const argnofun = _("passing arg of pointer to function");
4355 new_opname = (char *) alloca (strlen (argnofun) + 1 + 1);
4356 sprintf (new_opname, argnofun);
4361 /* Function name is known; supply it. */
4362 const char *const argstring = _("passing arg %d of `%s'");
4363 new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4364 + strlen (argstring) + 1 + 25
4366 sprintf (new_opname, argstring, argnum,
4367 IDENTIFIER_POINTER (function));
4371 /* Function name unknown (call through ptr); just give arg number. */
4372 const char *const argnofun = _("passing arg %d of pointer to function");
4373 new_opname = (char *) alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1);
4374 sprintf (new_opname, argnofun, argnum);
4376 opname = new_opname;
4378 pedwarn (msgid, opname);
4381 /* If VALUE is a compound expr all of whose expressions are constant, then
4382 return its value. Otherwise, return error_mark_node.
4384 This is for handling COMPOUND_EXPRs as initializer elements
4385 which is allowed with a warning when -pedantic is specified. */
4388 valid_compound_expr_initializer (value, endtype)
4392 if (TREE_CODE (value) == COMPOUND_EXPR)
4394 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4396 return error_mark_node;
4397 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4400 else if (! TREE_CONSTANT (value)
4401 && ! initializer_constant_valid_p (value, endtype))
4402 return error_mark_node;
4407 /* Perform appropriate conversions on the initial value of a variable,
4408 store it in the declaration DECL,
4409 and print any error messages that are appropriate.
4410 If the init is invalid, store an ERROR_MARK. */
4413 store_init_value (decl, init)
4418 /* If variable's type was invalidly declared, just ignore it. */
4420 type = TREE_TYPE (decl);
4421 if (TREE_CODE (type) == ERROR_MARK)
4424 /* Digest the specified initializer into an expression. */
4426 value = digest_init (type, init, TREE_STATIC (decl));
4428 /* Store the expression if valid; else report error. */
4431 /* Note that this is the only place we can detect the error
4432 in a case such as struct foo bar = (struct foo) { x, y };
4433 where there is one initial value which is a constructor expression. */
4434 if (value == error_mark_node)
4436 else if (TREE_STATIC (decl) && ! TREE_CONSTANT (value))
4438 error ("initializer for static variable is not constant");
4439 value = error_mark_node;
4441 else if (TREE_STATIC (decl)
4442 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
4444 error ("initializer for static variable uses complicated arithmetic");
4445 value = error_mark_node;
4449 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
4451 if (! TREE_CONSTANT (value))
4452 pedwarn ("aggregate initializer is not constant");
4453 else if (! TREE_STATIC (value))
4454 pedwarn ("aggregate initializer uses complicated arithmetic");
4459 if (warn_traditional && !in_system_header
4460 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && ! TREE_STATIC (decl))
4461 warning ("traditional C rejects automatic aggregate initialization");
4463 DECL_INITIAL (decl) = value;
4465 /* ANSI wants warnings about out-of-range constant initializers. */
4466 STRIP_TYPE_NOPS (value);
4467 constant_expression_warning (value);
4469 /* Check if we need to set array size from compound literal size. */
4470 if (TREE_CODE (type) == ARRAY_TYPE
4471 && TYPE_DOMAIN (type) == 0
4472 && value != error_mark_node)
4474 tree inside_init = init;
4476 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4477 inside_init = TREE_OPERAND (init, 0);
4478 inside_init = fold (inside_init);
4480 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4482 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4484 if (TYPE_DOMAIN (TREE_TYPE (decl)))
4486 /* For int foo[] = (int [3]){1}; we need to set array size
4487 now since later on array initializer will be just the
4488 brace enclosed list of the compound literal. */
4489 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
4491 layout_decl (decl, 0);
4497 /* Methods for storing and printing names for error messages. */
4499 /* Implement a spelling stack that allows components of a name to be pushed
4500 and popped. Each element on the stack is this structure. */
4512 #define SPELLING_STRING 1
4513 #define SPELLING_MEMBER 2
4514 #define SPELLING_BOUNDS 3
4516 static struct spelling *spelling; /* Next stack element (unused). */
4517 static struct spelling *spelling_base; /* Spelling stack base. */
4518 static int spelling_size; /* Size of the spelling stack. */
4520 /* Macros to save and restore the spelling stack around push_... functions.
4521 Alternative to SAVE_SPELLING_STACK. */
4523 #define SPELLING_DEPTH() (spelling - spelling_base)
4524 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
4526 /* Push an element on the spelling stack with type KIND and assign VALUE
4529 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4531 int depth = SPELLING_DEPTH (); \
4533 if (depth >= spelling_size) \
4535 spelling_size += 10; \
4536 if (spelling_base == 0) \
4538 = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \
4541 = (struct spelling *) xrealloc (spelling_base, \
4542 spelling_size * sizeof (struct spelling)); \
4543 RESTORE_SPELLING_DEPTH (depth); \
4546 spelling->kind = (KIND); \
4547 spelling->MEMBER = (VALUE); \
4551 /* Push STRING on the stack. Printed literally. */
4554 push_string (string)
4557 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4560 /* Push a member name on the stack. Printed as '.' STRING. */
4563 push_member_name (decl)
4567 const char *const string
4568 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4569 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4572 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4575 push_array_bounds (bounds)
4578 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4581 /* Compute the maximum size in bytes of the printed spelling. */
4589 for (p = spelling_base; p < spelling; p++)
4591 if (p->kind == SPELLING_BOUNDS)
4594 size += strlen (p->u.s) + 1;
4600 /* Print the spelling to BUFFER and return it. */
4603 print_spelling (buffer)
4609 for (p = spelling_base; p < spelling; p++)
4610 if (p->kind == SPELLING_BOUNDS)
4612 sprintf (d, "[%d]", p->u.i);
4618 if (p->kind == SPELLING_MEMBER)
4620 for (s = p->u.s; (*d = *s++); d++)
4627 /* Issue an error message for a bad initializer component.
4628 MSGID identifies the message.
4629 The component name is taken from the spelling stack. */
4637 error ("%s", _(msgid));
4638 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4640 error ("(near initialization for `%s')", ofwhat);
4643 /* Issue a pedantic warning for a bad initializer component.
4644 MSGID identifies the message.
4645 The component name is taken from the spelling stack. */
4648 pedwarn_init (msgid)
4653 pedwarn ("%s", _(msgid));
4654 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4656 pedwarn ("(near initialization for `%s')", ofwhat);
4659 /* Issue a warning for a bad initializer component.
4660 MSGID identifies the message.
4661 The component name is taken from the spelling stack. */
4664 warning_init (msgid)
4669 warning ("%s", _(msgid));
4670 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4672 warning ("(near initialization for `%s')", ofwhat);
4675 /* Digest the parser output INIT as an initializer for type TYPE.
4676 Return a C expression of type TYPE to represent the initial value.
4678 REQUIRE_CONSTANT requests an error if non-constant initializers or
4679 elements are seen. */
4682 digest_init (type, init, require_constant)
4684 int require_constant;
4686 enum tree_code code = TREE_CODE (type);
4687 tree inside_init = init;
4689 if (type == error_mark_node
4690 || init == error_mark_node
4691 || TREE_TYPE (init) == error_mark_node)
4692 return error_mark_node;
4694 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4695 /* Do not use STRIP_NOPS here. We do not want an enumerator
4696 whose value is 0 to count as a null pointer constant. */
4697 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4698 inside_init = TREE_OPERAND (init, 0);
4700 inside_init = fold (inside_init);
4702 /* Initialization of an array of chars from a string constant
4703 optionally enclosed in braces. */
4705 if (code == ARRAY_TYPE)
4707 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4708 if ((typ1 == char_type_node
4709 || typ1 == signed_char_type_node
4710 || typ1 == unsigned_char_type_node
4711 || typ1 == unsigned_wchar_type_node
4712 || typ1 == signed_wchar_type_node)
4713 && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
4715 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4716 TYPE_MAIN_VARIANT (type)))
4719 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4721 && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
4723 error_init ("char-array initialized from wide string");
4724 return error_mark_node;
4726 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4728 && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
4730 error_init ("int-array initialized from non-wide string");
4731 return error_mark_node;
4734 TREE_TYPE (inside_init) = type;
4735 if (TYPE_DOMAIN (type) != 0
4736 && TYPE_SIZE (type) != 0
4737 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4738 /* Subtract 1 (or sizeof (wchar_t))
4739 because it's ok to ignore the terminating null char
4740 that is counted in the length of the constant. */
4741 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4742 TREE_STRING_LENGTH (inside_init)
4743 - ((TYPE_PRECISION (typ1)
4744 != TYPE_PRECISION (char_type_node))
4745 ? (TYPE_PRECISION (wchar_type_node)
4748 pedwarn_init ("initializer-string for array of chars is too long");
4754 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4755 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4756 below and handle as a constructor. */
4757 if (code == VECTOR_TYPE
4758 && comptypes (TREE_TYPE (inside_init), type)
4759 && TREE_CONSTANT (inside_init))
4760 return build_vector (type, TREE_OPERAND (inside_init, 1));
4762 /* Any type can be initialized
4763 from an expression of the same type, optionally with braces. */
4765 if (inside_init && TREE_TYPE (inside_init) != 0
4766 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4767 TYPE_MAIN_VARIANT (type))
4768 || (code == ARRAY_TYPE
4769 && comptypes (TREE_TYPE (inside_init), type))
4770 || (code == VECTOR_TYPE
4771 && comptypes (TREE_TYPE (inside_init), type))
4772 || (code == POINTER_TYPE
4773 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4774 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)
4775 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4776 TREE_TYPE (type)))))
4778 if (code == POINTER_TYPE)
4779 inside_init = default_function_array_conversion (inside_init);
4781 if (require_constant && !flag_isoc99
4782 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4784 /* As an extension, allow initializing objects with static storage
4785 duration with compound literals (which are then treated just as
4786 the brace enclosed list they contain). */
4787 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4788 inside_init = DECL_INITIAL (decl);
4791 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4792 && TREE_CODE (inside_init) != CONSTRUCTOR)
4794 error_init ("array initialized from non-constant array expression");
4795 return error_mark_node;
4798 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4799 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4801 /* Compound expressions can only occur here if -pedantic or
4802 -pedantic-errors is specified. In the later case, we always want
4803 an error. In the former case, we simply want a warning. */
4804 if (require_constant && pedantic
4805 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4808 = valid_compound_expr_initializer (inside_init,
4809 TREE_TYPE (inside_init));
4810 if (inside_init == error_mark_node)
4811 error_init ("initializer element is not constant");
4813 pedwarn_init ("initializer element is not constant");
4814 if (flag_pedantic_errors)
4815 inside_init = error_mark_node;
4817 else if (require_constant
4818 && (!TREE_CONSTANT (inside_init)
4819 /* This test catches things like `7 / 0' which
4820 result in an expression for which TREE_CONSTANT
4821 is true, but which is not actually something
4822 that is a legal constant. We really should not
4823 be using this function, because it is a part of
4824 the back-end. Instead, the expression should
4825 already have been turned into ERROR_MARK_NODE. */
4826 || !initializer_constant_valid_p (inside_init,
4827 TREE_TYPE (inside_init))))
4829 error_init ("initializer element is not constant");
4830 inside_init = error_mark_node;
4836 /* Handle scalar types, including conversions. */
4838 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4839 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE)
4841 /* Note that convert_for_assignment calls default_conversion
4842 for arrays and functions. We must not call it in the
4843 case where inside_init is a null pointer constant. */
4845 = convert_for_assignment (type, init, _("initialization"),
4846 NULL_TREE, NULL_TREE, 0);
4848 if (require_constant && ! TREE_CONSTANT (inside_init))
4850 error_init ("initializer element is not constant");
4851 inside_init = error_mark_node;
4853 else if (require_constant
4854 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4856 error_init ("initializer element is not computable at load time");
4857 inside_init = error_mark_node;
4863 /* Come here only for records and arrays. */
4865 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4867 error_init ("variable-sized object may not be initialized");
4868 return error_mark_node;
4871 error_init ("invalid initializer");
4872 return error_mark_node;
4875 /* Handle initializers that use braces. */
4877 /* Type of object we are accumulating a constructor for.
4878 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4879 static tree constructor_type;
4881 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4883 static tree constructor_fields;
4885 /* For an ARRAY_TYPE, this is the specified index
4886 at which to store the next element we get. */
4887 static tree constructor_index;
4889 /* For an ARRAY_TYPE, this is the maximum index. */
4890 static tree constructor_max_index;
4892 /* For a RECORD_TYPE, this is the first field not yet written out. */
4893 static tree constructor_unfilled_fields;
4895 /* For an ARRAY_TYPE, this is the index of the first element
4896 not yet written out. */
4897 static tree constructor_unfilled_index;
4899 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4900 This is so we can generate gaps between fields, when appropriate. */
4901 static tree constructor_bit_index;
4903 /* If we are saving up the elements rather than allocating them,
4904 this is the list of elements so far (in reverse order,
4905 most recent first). */
4906 static tree constructor_elements;
4908 /* 1 if constructor should be incrementally stored into a constructor chain,
4909 0 if all the elements should be kept in AVL tree. */
4910 static int constructor_incremental;
4912 /* 1 if so far this constructor's elements are all compile-time constants. */
4913 static int constructor_constant;
4915 /* 1 if so far this constructor's elements are all valid address constants. */
4916 static int constructor_simple;
4918 /* 1 if this constructor is erroneous so far. */
4919 static int constructor_erroneous;
4921 /* 1 if have called defer_addressed_constants. */
4922 static int constructor_subconstants_deferred;
4924 /* Structure for managing pending initializer elements, organized as an
4929 struct init_node *left, *right;
4930 struct init_node *parent;
4936 /* Tree of pending elements at this constructor level.
4937 These are elements encountered out of order
4938 which belong at places we haven't reached yet in actually
4940 Will never hold tree nodes across GC runs. */
4941 static struct init_node *constructor_pending_elts;
4943 /* The SPELLING_DEPTH of this constructor. */
4944 static int constructor_depth;
4946 /* 0 if implicitly pushing constructor levels is allowed. */
4947 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4949 static int require_constant_value;
4950 static int require_constant_elements;
4952 /* DECL node for which an initializer is being read.
4953 0 means we are reading a constructor expression
4954 such as (struct foo) {...}. */
4955 static tree constructor_decl;
4957 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4958 static const char *constructor_asmspec;
4960 /* Nonzero if this is an initializer for a top-level decl. */
4961 static int constructor_top_level;
4963 /* Nonzero if there were any member designators in this initializer. */
4964 static int constructor_designated;
4966 /* Nesting depth of designator list. */
4967 static int designator_depth;
4969 /* Nonzero if there were diagnosed errors in this designator list. */
4970 static int designator_errorneous;
4973 /* This stack has a level for each implicit or explicit level of
4974 structuring in the initializer, including the outermost one. It
4975 saves the values of most of the variables above. */
4977 struct constructor_range_stack;
4979 struct constructor_stack
4981 struct constructor_stack *next;
4986 tree unfilled_index;
4987 tree unfilled_fields;
4990 struct init_node *pending_elts;
4993 /* If nonzero, this value should replace the entire
4994 constructor at this level. */
4995 tree replacement_value;
4996 struct constructor_range_stack *range_stack;
5006 struct constructor_stack *constructor_stack;
5008 /* This stack represents designators from some range designator up to
5009 the last designator in the list. */
5011 struct constructor_range_stack
5013 struct constructor_range_stack *next, *prev;
5014 struct constructor_stack *stack;
5021 struct constructor_range_stack *constructor_range_stack;
5023 /* This stack records separate initializers that are nested.
5024 Nested initializers can't happen in ANSI C, but GNU C allows them
5025 in cases like { ... (struct foo) { ... } ... }. */
5027 struct initializer_stack
5029 struct initializer_stack *next;
5031 const char *asmspec;
5032 struct constructor_stack *constructor_stack;
5033 struct constructor_range_stack *constructor_range_stack;
5035 struct spelling *spelling;
5036 struct spelling *spelling_base;
5039 char require_constant_value;
5040 char require_constant_elements;
5044 struct initializer_stack *initializer_stack;
5046 /* Prepare to parse and output the initializer for variable DECL. */
5049 start_init (decl, asmspec_tree, top_level)
5055 struct initializer_stack *p
5056 = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack));
5057 const char *asmspec = 0;
5060 asmspec = TREE_STRING_POINTER (asmspec_tree);
5062 p->decl = constructor_decl;
5063 p->asmspec = constructor_asmspec;
5064 p->require_constant_value = require_constant_value;
5065 p->require_constant_elements = require_constant_elements;
5066 p->constructor_stack = constructor_stack;
5067 p->constructor_range_stack = constructor_range_stack;
5068 p->elements = constructor_elements;
5069 p->spelling = spelling;
5070 p->spelling_base = spelling_base;
5071 p->spelling_size = spelling_size;
5072 p->deferred = constructor_subconstants_deferred;
5073 p->top_level = constructor_top_level;
5074 p->next = initializer_stack;
5075 initializer_stack = p;
5077 constructor_decl = decl;
5078 constructor_asmspec = asmspec;
5079 constructor_subconstants_deferred = 0;
5080 constructor_designated = 0;
5081 constructor_top_level = top_level;
5085 require_constant_value = TREE_STATIC (decl);
5086 require_constant_elements
5087 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
5088 /* For a scalar, you can always use any value to initialize,
5089 even within braces. */
5090 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
5091 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5092 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
5093 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
5094 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
5098 require_constant_value = 0;
5099 require_constant_elements = 0;
5100 locus = "(anonymous)";
5103 constructor_stack = 0;
5104 constructor_range_stack = 0;
5106 missing_braces_mentioned = 0;
5110 RESTORE_SPELLING_DEPTH (0);
5113 push_string (locus);
5119 struct initializer_stack *p = initializer_stack;
5121 /* Output subconstants (string constants, usually)
5122 that were referenced within this initializer and saved up.
5123 Must do this if and only if we called defer_addressed_constants. */
5124 if (constructor_subconstants_deferred)
5125 output_deferred_addressed_constants ();
5127 /* Free the whole constructor stack of this initializer. */
5128 while (constructor_stack)
5130 struct constructor_stack *q = constructor_stack;
5131 constructor_stack = q->next;
5135 if (constructor_range_stack)
5138 /* Pop back to the data of the outer initializer (if any). */
5139 constructor_decl = p->decl;
5140 constructor_asmspec = p->asmspec;
5141 require_constant_value = p->require_constant_value;
5142 require_constant_elements = p->require_constant_elements;
5143 constructor_stack = p->constructor_stack;
5144 constructor_range_stack = p->constructor_range_stack;
5145 constructor_elements = p->elements;
5146 spelling = p->spelling;
5147 spelling_base = p->spelling_base;
5148 spelling_size = p->spelling_size;
5149 constructor_subconstants_deferred = p->deferred;
5150 constructor_top_level = p->top_level;
5151 initializer_stack = p->next;
5155 /* Call here when we see the initializer is surrounded by braces.
5156 This is instead of a call to push_init_level;
5157 it is matched by a call to pop_init_level.
5159 TYPE is the type to initialize, for a constructor expression.
5160 For an initializer for a decl, TYPE is zero. */
5163 really_start_incremental_init (type)
5166 struct constructor_stack *p
5167 = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5170 type = TREE_TYPE (constructor_decl);
5172 if ((*targetm.vector_opaque_p) (type))
5173 error ("opaque vector types cannot be initialized");
5175 p->type = constructor_type;
5176 p->fields = constructor_fields;
5177 p->index = constructor_index;
5178 p->max_index = constructor_max_index;
5179 p->unfilled_index = constructor_unfilled_index;
5180 p->unfilled_fields = constructor_unfilled_fields;
5181 p->bit_index = constructor_bit_index;
5182 p->elements = constructor_elements;
5183 p->constant = constructor_constant;
5184 p->simple = constructor_simple;
5185 p->erroneous = constructor_erroneous;
5186 p->pending_elts = constructor_pending_elts;
5187 p->depth = constructor_depth;
5188 p->replacement_value = 0;
5192 p->incremental = constructor_incremental;
5193 p->designated = constructor_designated;
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;
5202 constructor_type = type;
5203 constructor_incremental = 1;
5204 constructor_designated = 0;
5205 designator_depth = 0;
5206 designator_errorneous = 0;
5208 if (TREE_CODE (constructor_type) == RECORD_TYPE
5209 || TREE_CODE (constructor_type) == UNION_TYPE)
5211 constructor_fields = TYPE_FIELDS (constructor_type);
5212 /* Skip any nameless bit fields at the beginning. */
5213 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5214 && DECL_NAME (constructor_fields) == 0)
5215 constructor_fields = TREE_CHAIN (constructor_fields);
5217 constructor_unfilled_fields = constructor_fields;
5218 constructor_bit_index = bitsize_zero_node;
5220 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5222 if (TYPE_DOMAIN (constructor_type))
5224 constructor_max_index
5225 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5227 /* Detect non-empty initializations of zero-length arrays. */
5228 if (constructor_max_index == NULL_TREE
5229 && TYPE_SIZE (constructor_type))
5230 constructor_max_index = build_int_2 (-1, -1);
5232 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5233 to initialize VLAs will cause a proper error; avoid tree
5234 checking errors as well by setting a safe value. */
5235 if (constructor_max_index
5236 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5237 constructor_max_index = build_int_2 (-1, -1);
5240 = convert (bitsizetype,
5241 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5244 constructor_index = bitsize_zero_node;
5246 constructor_unfilled_index = constructor_index;
5248 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5250 /* Vectors are like simple fixed-size arrays. */
5251 constructor_max_index =
5252 build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0);
5253 constructor_index = convert (bitsizetype, bitsize_zero_node);
5254 constructor_unfilled_index = constructor_index;
5258 /* Handle the case of int x = {5}; */
5259 constructor_fields = constructor_type;
5260 constructor_unfilled_fields = constructor_type;
5264 /* Push down into a subobject, for initialization.
5265 If this is for an explicit set of braces, IMPLICIT is 0.
5266 If it is because the next element belongs at a lower level,
5267 IMPLICIT is 1 (or 2 if the push is because of designator list). */
5270 push_init_level (implicit)
5273 struct constructor_stack *p;
5274 tree value = NULL_TREE;
5276 /* If we've exhausted any levels that didn't have braces,
5278 while (constructor_stack->implicit)
5280 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5281 || TREE_CODE (constructor_type) == UNION_TYPE)
5282 && constructor_fields == 0)
5283 process_init_element (pop_init_level (1));
5284 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5285 && constructor_max_index
5286 && tree_int_cst_lt (constructor_max_index, constructor_index))
5287 process_init_element (pop_init_level (1));
5292 /* Unless this is an explicit brace, we need to preserve previous
5296 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5297 || TREE_CODE (constructor_type) == UNION_TYPE)
5298 && constructor_fields)
5299 value = find_init_member (constructor_fields);
5300 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5301 value = find_init_member (constructor_index);
5304 p = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5305 p->type = constructor_type;
5306 p->fields = constructor_fields;
5307 p->index = constructor_index;
5308 p->max_index = constructor_max_index;
5309 p->unfilled_index = constructor_unfilled_index;
5310 p->unfilled_fields = constructor_unfilled_fields;
5311 p->bit_index = constructor_bit_index;
5312 p->elements = constructor_elements;
5313 p->constant = constructor_constant;
5314 p->simple = constructor_simple;
5315 p->erroneous = constructor_erroneous;
5316 p->pending_elts = constructor_pending_elts;
5317 p->depth = constructor_depth;
5318 p->replacement_value = 0;
5319 p->implicit = implicit;
5321 p->incremental = constructor_incremental;
5322 p->designated = constructor_designated;
5323 p->next = constructor_stack;
5325 constructor_stack = p;
5327 constructor_constant = 1;
5328 constructor_simple = 1;
5329 constructor_depth = SPELLING_DEPTH ();
5330 constructor_elements = 0;
5331 constructor_incremental = 1;
5332 constructor_designated = 0;
5333 constructor_pending_elts = 0;
5336 p->range_stack = constructor_range_stack;
5337 constructor_range_stack = 0;
5338 designator_depth = 0;
5339 designator_errorneous = 0;
5342 /* Don't die if an entire brace-pair level is superfluous
5343 in the containing level. */
5344 if (constructor_type == 0)
5346 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5347 || TREE_CODE (constructor_type) == UNION_TYPE)
5349 /* Don't die if there are extra init elts at the end. */
5350 if (constructor_fields == 0)
5351 constructor_type = 0;
5354 constructor_type = TREE_TYPE (constructor_fields);
5355 push_member_name (constructor_fields);
5356 constructor_depth++;
5359 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5361 constructor_type = TREE_TYPE (constructor_type);
5362 push_array_bounds (tree_low_cst (constructor_index, 0));
5363 constructor_depth++;
5366 if (constructor_type == 0)
5368 error_init ("extra brace group at end of initializer");
5369 constructor_fields = 0;
5370 constructor_unfilled_fields = 0;
5374 if (value && TREE_CODE (value) == CONSTRUCTOR)
5376 constructor_constant = TREE_CONSTANT (value);
5377 constructor_simple = TREE_STATIC (value);
5378 constructor_elements = TREE_OPERAND (value, 1);
5379 if (constructor_elements
5380 && (TREE_CODE (constructor_type) == RECORD_TYPE
5381 || TREE_CODE (constructor_type) == ARRAY_TYPE))
5382 set_nonincremental_init ();
5385 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
5387 missing_braces_mentioned = 1;
5388 warning_init ("missing braces around initializer");
5391 if (TREE_CODE (constructor_type) == RECORD_TYPE
5392 || TREE_CODE (constructor_type) == UNION_TYPE)
5394 constructor_fields = TYPE_FIELDS (constructor_type);
5395 /* Skip any nameless bit fields at the beginning. */
5396 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5397 && DECL_NAME (constructor_fields) == 0)
5398 constructor_fields = TREE_CHAIN (constructor_fields);
5400 constructor_unfilled_fields = constructor_fields;
5401 constructor_bit_index = bitsize_zero_node;
5403 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5405 /* Vectors are like simple fixed-size arrays. */
5406 constructor_max_index =
5407 build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0);
5408 constructor_index = convert (bitsizetype, integer_zero_node);
5409 constructor_unfilled_index = constructor_index;
5411 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5413 if (TYPE_DOMAIN (constructor_type))
5415 constructor_max_index
5416 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5418 /* Detect non-empty initializations of zero-length arrays. */
5419 if (constructor_max_index == NULL_TREE
5420 && TYPE_SIZE (constructor_type))
5421 constructor_max_index = build_int_2 (-1, -1);
5423 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5424 to initialize VLAs will cause a proper error; avoid tree
5425 checking errors as well by setting a safe value. */
5426 if (constructor_max_index
5427 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5428 constructor_max_index = build_int_2 (-1, -1);
5431 = convert (bitsizetype,
5432 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5435 constructor_index = bitsize_zero_node;
5437 constructor_unfilled_index = constructor_index;
5438 if (value && TREE_CODE (value) == STRING_CST)
5440 /* We need to split the char/wchar array into individual
5441 characters, so that we don't have to special case it
5443 set_nonincremental_init_from_string (value);
5448 warning_init ("braces around scalar initializer");
5449 constructor_fields = constructor_type;
5450 constructor_unfilled_fields = constructor_type;
5454 /* At the end of an implicit or explicit brace level,
5455 finish up that level of constructor.
5456 If we were outputting the elements as they are read, return 0
5457 from inner levels (process_init_element ignores that),
5458 but return error_mark_node from the outermost level
5459 (that's what we want to put in DECL_INITIAL).
5460 Otherwise, return a CONSTRUCTOR expression. */
5463 pop_init_level (implicit)
5466 struct constructor_stack *p;
5467 tree constructor = 0;
5471 /* When we come to an explicit close brace,
5472 pop any inner levels that didn't have explicit braces. */
5473 while (constructor_stack->implicit)
5474 process_init_element (pop_init_level (1));
5476 if (constructor_range_stack)
5480 p = constructor_stack;
5482 /* Error for initializing a flexible array member, or a zero-length
5483 array member in an inappropriate context. */
5484 if (constructor_type && constructor_fields
5485 && TREE_CODE (constructor_type) == ARRAY_TYPE
5486 && TYPE_DOMAIN (constructor_type)
5487 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5489 /* Silently discard empty initializations. The parser will
5490 already have pedwarned for empty brackets. */
5491 if (integer_zerop (constructor_unfilled_index))
5492 constructor_type = NULL_TREE;
5493 else if (! TYPE_SIZE (constructor_type))
5495 if (constructor_depth > 2)
5496 error_init ("initialization of flexible array member in a nested context");
5498 pedwarn_init ("initialization of a flexible array member");
5500 /* We have already issued an error message for the existence
5501 of a flexible array member not at the end of the structure.
5502 Discard the initializer so that we do not abort later. */
5503 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
5504 constructor_type = NULL_TREE;
5507 /* Zero-length arrays are no longer special, so we should no longer
5512 /* Warn when some struct elements are implicitly initialized to zero. */
5515 && TREE_CODE (constructor_type) == RECORD_TYPE
5516 && constructor_unfilled_fields)
5518 /* Do not warn for flexible array members or zero-length arrays. */
5519 while (constructor_unfilled_fields
5520 && (! DECL_SIZE (constructor_unfilled_fields)
5521 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
5522 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5524 /* Do not warn if this level of the initializer uses member
5525 designators; it is likely to be deliberate. */
5526 if (constructor_unfilled_fields && !constructor_designated)
5528 push_member_name (constructor_unfilled_fields);
5529 warning_init ("missing initializer");
5530 RESTORE_SPELLING_DEPTH (constructor_depth);
5534 /* Now output all pending elements. */
5535 constructor_incremental = 1;
5536 output_pending_init_elements (1);
5538 /* Pad out the end of the structure. */
5539 if (p->replacement_value)
5540 /* If this closes a superfluous brace pair,
5541 just pass out the element between them. */
5542 constructor = p->replacement_value;
5543 else if (constructor_type == 0)
5545 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5546 && TREE_CODE (constructor_type) != UNION_TYPE
5547 && TREE_CODE (constructor_type) != ARRAY_TYPE
5548 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5550 /* A nonincremental scalar initializer--just return
5551 the element, after verifying there is just one. */
5552 if (constructor_elements == 0)
5554 if (!constructor_erroneous)
5555 error_init ("empty scalar initializer");
5556 constructor = error_mark_node;
5558 else if (TREE_CHAIN (constructor_elements) != 0)
5560 error_init ("extra elements in scalar initializer");
5561 constructor = TREE_VALUE (constructor_elements);
5564 constructor = TREE_VALUE (constructor_elements);
5568 if (constructor_erroneous)
5569 constructor = error_mark_node;
5572 constructor = build (CONSTRUCTOR, constructor_type, NULL_TREE,
5573 nreverse (constructor_elements));
5574 if (constructor_constant)
5575 TREE_CONSTANT (constructor) = 1;
5576 if (constructor_constant && constructor_simple)
5577 TREE_STATIC (constructor) = 1;
5581 constructor_type = p->type;
5582 constructor_fields = p->fields;
5583 constructor_index = p->index;
5584 constructor_max_index = p->max_index;
5585 constructor_unfilled_index = p->unfilled_index;
5586 constructor_unfilled_fields = p->unfilled_fields;
5587 constructor_bit_index = p->bit_index;
5588 constructor_elements = p->elements;
5589 constructor_constant = p->constant;
5590 constructor_simple = p->simple;
5591 constructor_erroneous = p->erroneous;
5592 constructor_incremental = p->incremental;
5593 constructor_designated = p->designated;
5594 constructor_pending_elts = p->pending_elts;
5595 constructor_depth = p->depth;
5597 constructor_range_stack = p->range_stack;
5598 RESTORE_SPELLING_DEPTH (constructor_depth);
5600 constructor_stack = p->next;
5603 if (constructor == 0)
5605 if (constructor_stack == 0)
5606 return error_mark_node;
5612 /* Common handling for both array range and field name designators.
5613 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5616 set_designator (array)
5620 enum tree_code subcode;
5622 /* Don't die if an entire brace-pair level is superfluous
5623 in the containing level. */
5624 if (constructor_type == 0)
5627 /* If there were errors in this designator list already, bail out silently. */
5628 if (designator_errorneous)
5631 if (!designator_depth)
5633 if (constructor_range_stack)
5636 /* Designator list starts at the level of closest explicit
5638 while (constructor_stack->implicit)
5639 process_init_element (pop_init_level (1));
5640 constructor_designated = 1;
5644 if (constructor_no_implicit)
5646 error_init ("initialization designators may not nest");
5650 if (TREE_CODE (constructor_type) == RECORD_TYPE
5651 || TREE_CODE (constructor_type) == UNION_TYPE)
5653 subtype = TREE_TYPE (constructor_fields);
5654 if (subtype != error_mark_node)
5655 subtype = TYPE_MAIN_VARIANT (subtype);
5657 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5659 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5664 subcode = TREE_CODE (subtype);
5665 if (array && subcode != ARRAY_TYPE)
5667 error_init ("array index in non-array initializer");
5670 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5672 error_init ("field name not in record or union initializer");
5676 constructor_designated = 1;
5677 push_init_level (2);
5681 /* If there are range designators in designator list, push a new designator
5682 to constructor_range_stack. RANGE_END is end of such stack range or
5683 NULL_TREE if there is no range designator at this level. */
5686 push_range_stack (range_end)
5689 struct constructor_range_stack *p;
5691 p = (struct constructor_range_stack *)
5692 ggc_alloc (sizeof (struct constructor_range_stack));
5693 p->prev = constructor_range_stack;
5695 p->fields = constructor_fields;
5696 p->range_start = constructor_index;
5697 p->index = constructor_index;
5698 p->stack = constructor_stack;
5699 p->range_end = range_end;
5700 if (constructor_range_stack)
5701 constructor_range_stack->next = p;
5702 constructor_range_stack = p;
5705 /* Within an array initializer, specify the next index to be initialized.
5706 FIRST is that index. If LAST is nonzero, then initialize a range
5707 of indices, running from FIRST through LAST. */
5710 set_init_index (first, last)
5713 if (set_designator (1))
5716 designator_errorneous = 1;
5718 while ((TREE_CODE (first) == NOP_EXPR
5719 || TREE_CODE (first) == CONVERT_EXPR
5720 || TREE_CODE (first) == NON_LVALUE_EXPR)
5721 && (TYPE_MODE (TREE_TYPE (first))
5722 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5723 first = TREE_OPERAND (first, 0);
5726 while ((TREE_CODE (last) == NOP_EXPR
5727 || TREE_CODE (last) == CONVERT_EXPR
5728 || TREE_CODE (last) == NON_LVALUE_EXPR)
5729 && (TYPE_MODE (TREE_TYPE (last))
5730 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5731 last = TREE_OPERAND (last, 0);
5733 if (TREE_CODE (first) != INTEGER_CST)
5734 error_init ("nonconstant array index in initializer");
5735 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5736 error_init ("nonconstant array index in initializer");
5737 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5738 error_init ("array index in non-array initializer");
5739 else if (constructor_max_index
5740 && tree_int_cst_lt (constructor_max_index, first))
5741 error_init ("array index in initializer exceeds array bounds");
5744 constructor_index = convert (bitsizetype, first);
5748 if (tree_int_cst_equal (first, last))
5750 else if (tree_int_cst_lt (last, first))
5752 error_init ("empty index range in initializer");
5757 last = convert (bitsizetype, last);
5758 if (constructor_max_index != 0
5759 && tree_int_cst_lt (constructor_max_index, last))
5761 error_init ("array index range in initializer exceeds array bounds");
5768 designator_errorneous = 0;
5769 if (constructor_range_stack || last)
5770 push_range_stack (last);
5774 /* Within a struct initializer, specify the next field to be initialized. */
5777 set_init_label (fieldname)
5782 if (set_designator (0))
5785 designator_errorneous = 1;
5787 if (TREE_CODE (constructor_type) != RECORD_TYPE
5788 && TREE_CODE (constructor_type) != UNION_TYPE)
5790 error_init ("field name not in record or union initializer");
5794 for (tail = TYPE_FIELDS (constructor_type); tail;
5795 tail = TREE_CHAIN (tail))
5797 if (DECL_NAME (tail) == fieldname)
5802 error ("unknown field `%s' specified in initializer",
5803 IDENTIFIER_POINTER (fieldname));
5806 constructor_fields = tail;
5808 designator_errorneous = 0;
5809 if (constructor_range_stack)
5810 push_range_stack (NULL_TREE);
5814 /* Add a new initializer to the tree of pending initializers. PURPOSE
5815 identifies the initializer, either array index or field in a structure.
5816 VALUE is the value of that index or field. */
5819 add_pending_init (purpose, value)
5820 tree purpose, value;
5822 struct init_node *p, **q, *r;
5824 q = &constructor_pending_elts;
5827 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5832 if (tree_int_cst_lt (purpose, p->purpose))
5834 else if (tree_int_cst_lt (p->purpose, purpose))
5838 if (TREE_SIDE_EFFECTS (p->value))
5839 warning_init ("initialized field with side-effects overwritten");
5849 bitpos = bit_position (purpose);
5853 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5855 else if (p->purpose != purpose)
5859 if (TREE_SIDE_EFFECTS (p->value))
5860 warning_init ("initialized field with side-effects overwritten");
5867 r = (struct init_node *) ggc_alloc (sizeof (struct init_node));
5868 r->purpose = purpose;
5879 struct init_node *s;
5883 if (p->balance == 0)
5885 else if (p->balance < 0)
5892 p->left->parent = p;
5909 constructor_pending_elts = r;
5914 struct init_node *t = r->right;
5918 r->right->parent = r;
5923 p->left->parent = p;
5926 p->balance = t->balance < 0;
5927 r->balance = -(t->balance > 0);
5942 constructor_pending_elts = t;
5948 /* p->balance == +1; growth of left side balances the node. */
5953 else /* r == p->right */
5955 if (p->balance == 0)
5956 /* Growth propagation from right side. */
5958 else if (p->balance > 0)
5965 p->right->parent = p;
5982 constructor_pending_elts = r;
5984 else /* r->balance == -1 */
5987 struct init_node *t = r->left;
5991 r->left->parent = r;
5996 p->right->parent = p;
5999 r->balance = (t->balance < 0);
6000 p->balance = -(t->balance > 0);
6015 constructor_pending_elts = t;
6021 /* p->balance == -1; growth of right side balances the node. */
6032 /* Build AVL tree from a sorted chain. */
6035 set_nonincremental_init ()
6039 if (TREE_CODE (constructor_type) != RECORD_TYPE
6040 && TREE_CODE (constructor_type) != ARRAY_TYPE)
6043 for (chain = constructor_elements; chain; chain = TREE_CHAIN (chain))
6044 add_pending_init (TREE_PURPOSE (chain), TREE_VALUE (chain));
6045 constructor_elements = 0;
6046 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6048 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
6049 /* Skip any nameless bit fields at the beginning. */
6050 while (constructor_unfilled_fields != 0
6051 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6052 && DECL_NAME (constructor_unfilled_fields) == 0)
6053 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
6056 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6058 if (TYPE_DOMAIN (constructor_type))
6059 constructor_unfilled_index
6060 = convert (bitsizetype,
6061 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
6063 constructor_unfilled_index = bitsize_zero_node;
6065 constructor_incremental = 0;
6068 /* Build AVL tree from a string constant. */
6071 set_nonincremental_init_from_string (str)
6074 tree value, purpose, type;
6075 HOST_WIDE_INT val[2];
6076 const char *p, *end;
6077 int byte, wchar_bytes, charwidth, bitpos;
6079 if (TREE_CODE (constructor_type) != ARRAY_TYPE)
6082 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
6083 == TYPE_PRECISION (char_type_node))
6085 else if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
6086 == TYPE_PRECISION (wchar_type_node))
6087 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
6091 charwidth = TYPE_PRECISION (char_type_node);
6092 type = TREE_TYPE (constructor_type);
6093 p = TREE_STRING_POINTER (str);
6094 end = p + TREE_STRING_LENGTH (str);
6096 for (purpose = bitsize_zero_node;
6097 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
6098 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
6100 if (wchar_bytes == 1)
6102 val[1] = (unsigned char) *p++;
6109 for (byte = 0; byte < wchar_bytes; byte++)
6111 if (BYTES_BIG_ENDIAN)
6112 bitpos = (wchar_bytes - byte - 1) * charwidth;
6114 bitpos = byte * charwidth;
6115 val[bitpos < HOST_BITS_PER_WIDE_INT]
6116 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
6117 << (bitpos % HOST_BITS_PER_WIDE_INT);
6121 if (!TREE_UNSIGNED (type))
6123 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
6124 if (bitpos < HOST_BITS_PER_WIDE_INT)
6126 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
6128 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
6132 else if (bitpos == HOST_BITS_PER_WIDE_INT)
6137 else if (val[0] & (((HOST_WIDE_INT) 1)
6138 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
6139 val[0] |= ((HOST_WIDE_INT) -1)
6140 << (bitpos - HOST_BITS_PER_WIDE_INT);
6143 value = build_int_2 (val[1], val[0]);
6144 TREE_TYPE (value) = type;
6145 add_pending_init (purpose, value);
6148 constructor_incremental = 0;
6151 /* Return value of FIELD in pending initializer or zero if the field was
6152 not initialized yet. */
6155 find_init_member (field)
6158 struct init_node *p;
6160 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6162 if (constructor_incremental
6163 && tree_int_cst_lt (field, constructor_unfilled_index))
6164 set_nonincremental_init ();
6166 p = constructor_pending_elts;
6169 if (tree_int_cst_lt (field, p->purpose))
6171 else if (tree_int_cst_lt (p->purpose, field))
6177 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6179 tree bitpos = bit_position (field);
6181 if (constructor_incremental
6182 && (!constructor_unfilled_fields
6183 || tree_int_cst_lt (bitpos,
6184 bit_position (constructor_unfilled_fields))))
6185 set_nonincremental_init ();
6187 p = constructor_pending_elts;
6190 if (field == p->purpose)
6192 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
6198 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6200 if (constructor_elements
6201 && TREE_PURPOSE (constructor_elements) == field)
6202 return TREE_VALUE (constructor_elements);
6207 /* "Output" the next constructor element.
6208 At top level, really output it to assembler code now.
6209 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
6210 TYPE is the data type that the containing data type wants here.
6211 FIELD is the field (a FIELD_DECL) or the index that this element fills.
6213 PENDING if non-nil means output pending elements that belong
6214 right after this element. (PENDING is normally 1;
6215 it is 0 while outputting pending elements, to avoid recursion.) */
6218 output_init_element (value, type, field, pending)
6219 tree value, type, field;
6222 if (type == error_mark_node)
6224 constructor_erroneous = 1;
6227 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
6228 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
6229 && !(TREE_CODE (value) == STRING_CST
6230 && TREE_CODE (type) == ARRAY_TYPE
6231 && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
6232 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
6233 TYPE_MAIN_VARIANT (type))))
6234 value = default_conversion (value);
6236 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
6237 && require_constant_value && !flag_isoc99 && pending)
6239 /* As an extension, allow initializing objects with static storage
6240 duration with compound literals (which are then treated just as
6241 the brace enclosed list they contain). */
6242 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
6243 value = DECL_INITIAL (decl);
6246 if (value == error_mark_node)
6247 constructor_erroneous = 1;
6248 else if (!TREE_CONSTANT (value))
6249 constructor_constant = 0;
6250 else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0
6251 || ((TREE_CODE (constructor_type) == RECORD_TYPE
6252 || TREE_CODE (constructor_type) == UNION_TYPE)
6253 && DECL_C_BIT_FIELD (field)
6254 && TREE_CODE (value) != INTEGER_CST))
6255 constructor_simple = 0;
6257 if (require_constant_value && ! TREE_CONSTANT (value))
6259 error_init ("initializer element is not constant");
6260 value = error_mark_node;
6262 else if (require_constant_elements
6263 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
6264 pedwarn ("initializer element is not computable at load time");
6266 /* If this field is empty (and not at the end of structure),
6267 don't do anything other than checking the initializer. */
6269 && (TREE_TYPE (field) == error_mark_node
6270 || (COMPLETE_TYPE_P (TREE_TYPE (field))
6271 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
6272 && (TREE_CODE (constructor_type) == ARRAY_TYPE
6273 || TREE_CHAIN (field)))))
6276 value = digest_init (type, value, require_constant_value);
6277 if (value == error_mark_node)
6279 constructor_erroneous = 1;
6283 /* If this element doesn't come next in sequence,
6284 put it on constructor_pending_elts. */
6285 if (TREE_CODE (constructor_type) == ARRAY_TYPE
6286 && (!constructor_incremental
6287 || !tree_int_cst_equal (field, constructor_unfilled_index)))
6289 if (constructor_incremental
6290 && tree_int_cst_lt (field, constructor_unfilled_index))
6291 set_nonincremental_init ();
6293 add_pending_init (field, value);
6296 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6297 && (!constructor_incremental
6298 || field != constructor_unfilled_fields))
6300 /* We do this for records but not for unions. In a union,
6301 no matter which field is specified, it can be initialized
6302 right away since it starts at the beginning of the union. */
6303 if (constructor_incremental)
6305 if (!constructor_unfilled_fields)
6306 set_nonincremental_init ();
6309 tree bitpos, unfillpos;
6311 bitpos = bit_position (field);
6312 unfillpos = bit_position (constructor_unfilled_fields);
6314 if (tree_int_cst_lt (bitpos, unfillpos))
6315 set_nonincremental_init ();
6319 add_pending_init (field, value);
6322 else if (TREE_CODE (constructor_type) == UNION_TYPE
6323 && constructor_elements)
6325 if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements)))
6326 warning_init ("initialized field with side-effects overwritten");
6328 /* We can have just one union field set. */
6329 constructor_elements = 0;
6332 /* Otherwise, output this element either to
6333 constructor_elements or to the assembler file. */
6335 if (field && TREE_CODE (field) == INTEGER_CST)
6336 field = copy_node (field);
6337 constructor_elements
6338 = tree_cons (field, value, constructor_elements);
6340 /* Advance the variable that indicates sequential elements output. */
6341 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6342 constructor_unfilled_index
6343 = size_binop (PLUS_EXPR, constructor_unfilled_index,
6345 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6347 constructor_unfilled_fields
6348 = TREE_CHAIN (constructor_unfilled_fields);
6350 /* Skip any nameless bit fields. */
6351 while (constructor_unfilled_fields != 0
6352 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6353 && DECL_NAME (constructor_unfilled_fields) == 0)
6354 constructor_unfilled_fields =
6355 TREE_CHAIN (constructor_unfilled_fields);
6357 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6358 constructor_unfilled_fields = 0;
6360 /* Now output any pending elements which have become next. */
6362 output_pending_init_elements (0);
6365 /* Output any pending elements which have become next.
6366 As we output elements, constructor_unfilled_{fields,index}
6367 advances, which may cause other elements to become next;
6368 if so, they too are output.
6370 If ALL is 0, we return when there are
6371 no more pending elements to output now.
6373 If ALL is 1, we output space as necessary so that
6374 we can output all the pending elements. */
6377 output_pending_init_elements (all)
6380 struct init_node *elt = constructor_pending_elts;
6385 /* Look thru the whole pending tree.
6386 If we find an element that should be output now,
6387 output it. Otherwise, set NEXT to the element
6388 that comes first among those still pending. */
6393 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6395 if (tree_int_cst_equal (elt->purpose,
6396 constructor_unfilled_index))
6397 output_init_element (elt->value,
6398 TREE_TYPE (constructor_type),
6399 constructor_unfilled_index, 0);
6400 else if (tree_int_cst_lt (constructor_unfilled_index,
6403 /* Advance to the next smaller node. */
6408 /* We have reached the smallest node bigger than the
6409 current unfilled index. Fill the space first. */
6410 next = elt->purpose;
6416 /* Advance to the next bigger node. */
6421 /* We have reached the biggest node in a subtree. Find
6422 the parent of it, which is the next bigger node. */
6423 while (elt->parent && elt->parent->right == elt)
6426 if (elt && tree_int_cst_lt (constructor_unfilled_index,
6429 next = elt->purpose;
6435 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6436 || TREE_CODE (constructor_type) == UNION_TYPE)
6438 tree ctor_unfilled_bitpos, elt_bitpos;
6440 /* If the current record is complete we are done. */
6441 if (constructor_unfilled_fields == 0)
6444 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
6445 elt_bitpos = bit_position (elt->purpose);
6446 /* We can't compare fields here because there might be empty
6447 fields in between. */
6448 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
6450 constructor_unfilled_fields = elt->purpose;
6451 output_init_element (elt->value, TREE_TYPE (elt->purpose),
6454 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
6456 /* Advance to the next smaller node. */
6461 /* We have reached the smallest node bigger than the
6462 current unfilled field. Fill the space first. */
6463 next = elt->purpose;
6469 /* Advance to the next bigger node. */
6474 /* We have reached the biggest node in a subtree. Find
6475 the parent of it, which is the next bigger node. */
6476 while (elt->parent && elt->parent->right == elt)
6480 && (tree_int_cst_lt (ctor_unfilled_bitpos,
6481 bit_position (elt->purpose))))
6483 next = elt->purpose;
6491 /* Ordinarily return, but not if we want to output all
6492 and there are elements left. */
6493 if (! (all && next != 0))
6496 /* If it's not incremental, just skip over the gap, so that after
6497 jumping to retry we will output the next successive element. */
6498 if (TREE_CODE (constructor_type) == RECORD_TYPE
6499 || TREE_CODE (constructor_type) == UNION_TYPE)
6500 constructor_unfilled_fields = next;
6501 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6502 constructor_unfilled_index = next;
6504 /* ELT now points to the node in the pending tree with the next
6505 initializer to output. */
6509 /* Add one non-braced element to the current constructor level.
6510 This adjusts the current position within the constructor's type.
6511 This may also start or terminate implicit levels
6512 to handle a partly-braced initializer.
6514 Once this has found the correct level for the new element,
6515 it calls output_init_element. */
6518 process_init_element (value)
6521 tree orig_value = value;
6522 int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
6524 designator_depth = 0;
6525 designator_errorneous = 0;
6527 /* Handle superfluous braces around string cst as in
6528 char x[] = {"foo"}; */
6531 && TREE_CODE (constructor_type) == ARRAY_TYPE
6532 && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
6533 && integer_zerop (constructor_unfilled_index))
6535 if (constructor_stack->replacement_value)
6536 error_init ("excess elements in char array initializer");
6537 constructor_stack->replacement_value = value;
6541 if (constructor_stack->replacement_value != 0)
6543 error_init ("excess elements in struct initializer");
6547 /* Ignore elements of a brace group if it is entirely superfluous
6548 and has already been diagnosed. */
6549 if (constructor_type == 0)
6552 /* If we've exhausted any levels that didn't have braces,
6554 while (constructor_stack->implicit)
6556 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6557 || TREE_CODE (constructor_type) == UNION_TYPE)
6558 && constructor_fields == 0)
6559 process_init_element (pop_init_level (1));
6560 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6561 && (constructor_max_index == 0
6562 || tree_int_cst_lt (constructor_max_index,
6563 constructor_index)))
6564 process_init_element (pop_init_level (1));
6569 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6570 if (constructor_range_stack)
6572 /* If value is a compound literal and we'll be just using its
6573 content, don't put it into a SAVE_EXPR. */
6574 if (TREE_CODE (value) != COMPOUND_LITERAL_EXPR
6575 || !require_constant_value
6577 value = save_expr (value);
6582 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6585 enum tree_code fieldcode;
6587 if (constructor_fields == 0)
6589 pedwarn_init ("excess elements in struct initializer");
6593 fieldtype = TREE_TYPE (constructor_fields);
6594 if (fieldtype != error_mark_node)
6595 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6596 fieldcode = TREE_CODE (fieldtype);
6598 /* Error for non-static initialization of a flexible array member. */
6599 if (fieldcode == ARRAY_TYPE
6600 && !require_constant_value
6601 && TYPE_SIZE (fieldtype) == NULL_TREE
6602 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6604 error_init ("non-static initialization of a flexible array member");
6608 /* Accept a string constant to initialize a subarray. */
6610 && fieldcode == ARRAY_TYPE
6611 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6614 /* Otherwise, if we have come to a subaggregate,
6615 and we don't have an element of its type, push into it. */
6616 else if (value != 0 && !constructor_no_implicit
6617 && value != error_mark_node
6618 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6619 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6620 || fieldcode == UNION_TYPE))
6622 push_init_level (1);
6628 push_member_name (constructor_fields);
6629 output_init_element (value, fieldtype, constructor_fields, 1);
6630 RESTORE_SPELLING_DEPTH (constructor_depth);
6633 /* Do the bookkeeping for an element that was
6634 directly output as a constructor. */
6636 /* For a record, keep track of end position of last field. */
6637 if (DECL_SIZE (constructor_fields))
6638 constructor_bit_index
6639 = size_binop (PLUS_EXPR,
6640 bit_position (constructor_fields),
6641 DECL_SIZE (constructor_fields));
6643 /* If the current field was the first one not yet written out,
6644 it isn't now, so update. */
6645 if (constructor_unfilled_fields == constructor_fields)
6647 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6648 /* Skip any nameless bit fields. */
6649 while (constructor_unfilled_fields != 0
6650 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6651 && DECL_NAME (constructor_unfilled_fields) == 0)
6652 constructor_unfilled_fields =
6653 TREE_CHAIN (constructor_unfilled_fields);
6657 constructor_fields = TREE_CHAIN (constructor_fields);
6658 /* Skip any nameless bit fields at the beginning. */
6659 while (constructor_fields != 0
6660 && DECL_C_BIT_FIELD (constructor_fields)
6661 && DECL_NAME (constructor_fields) == 0)
6662 constructor_fields = TREE_CHAIN (constructor_fields);
6664 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6667 enum tree_code fieldcode;
6669 if (constructor_fields == 0)
6671 pedwarn_init ("excess elements in union initializer");
6675 fieldtype = TREE_TYPE (constructor_fields);
6676 if (fieldtype != error_mark_node)
6677 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6678 fieldcode = TREE_CODE (fieldtype);
6680 /* Warn that traditional C rejects initialization of unions.
6681 We skip the warning if the value is zero. This is done
6682 under the assumption that the zero initializer in user
6683 code appears conditioned on e.g. __STDC__ to avoid
6684 "missing initializer" warnings and relies on default
6685 initialization to zero in the traditional C case.
6686 We also skip the warning if the initializer is designated,
6687 again on the assumption that this must be conditional on
6688 __STDC__ anyway (and we've already complained about the
6689 member-designator already). */
6690 if (warn_traditional && !in_system_header && !constructor_designated
6691 && !(value && (integer_zerop (value) || real_zerop (value))))
6692 warning ("traditional C rejects initialization of unions");
6694 /* Accept a string constant to initialize a subarray. */
6696 && fieldcode == ARRAY_TYPE
6697 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6700 /* Otherwise, if we have come to a subaggregate,
6701 and we don't have an element of its type, push into it. */
6702 else if (value != 0 && !constructor_no_implicit
6703 && value != error_mark_node
6704 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6705 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6706 || fieldcode == UNION_TYPE))
6708 push_init_level (1);
6714 push_member_name (constructor_fields);
6715 output_init_element (value, fieldtype, constructor_fields, 1);
6716 RESTORE_SPELLING_DEPTH (constructor_depth);
6719 /* Do the bookkeeping for an element that was
6720 directly output as a constructor. */
6722 constructor_bit_index = DECL_SIZE (constructor_fields);
6723 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6726 constructor_fields = 0;
6728 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6730 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6731 enum tree_code eltcode = TREE_CODE (elttype);
6733 /* Accept a string constant to initialize a subarray. */
6735 && eltcode == ARRAY_TYPE
6736 && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
6739 /* Otherwise, if we have come to a subaggregate,
6740 and we don't have an element of its type, push into it. */
6741 else if (value != 0 && !constructor_no_implicit
6742 && value != error_mark_node
6743 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
6744 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6745 || eltcode == UNION_TYPE))
6747 push_init_level (1);
6751 if (constructor_max_index != 0
6752 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6753 || integer_all_onesp (constructor_max_index)))
6755 pedwarn_init ("excess elements in array initializer");
6759 /* Now output the actual element. */
6762 push_array_bounds (tree_low_cst (constructor_index, 0));
6763 output_init_element (value, elttype, constructor_index, 1);
6764 RESTORE_SPELLING_DEPTH (constructor_depth);
6768 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6771 /* If we are doing the bookkeeping for an element that was
6772 directly output as a constructor, we must update
6773 constructor_unfilled_index. */
6774 constructor_unfilled_index = constructor_index;
6776 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6778 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6780 /* Do a basic check of initializer size. Note that vectors
6781 always have a fixed size derived from their type. */
6782 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6784 pedwarn_init ("excess elements in vector initializer");
6788 /* Now output the actual element. */
6790 output_init_element (value, elttype, constructor_index, 1);
6793 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6796 /* If we are doing the bookkeeping for an element that was
6797 directly output as a constructor, we must update
6798 constructor_unfilled_index. */
6799 constructor_unfilled_index = constructor_index;
6802 /* Handle the sole element allowed in a braced initializer
6803 for a scalar variable. */
6804 else if (constructor_fields == 0)
6806 pedwarn_init ("excess elements in scalar initializer");
6812 output_init_element (value, constructor_type, NULL_TREE, 1);
6813 constructor_fields = 0;
6816 /* Handle range initializers either at this level or anywhere higher
6817 in the designator stack. */
6818 if (constructor_range_stack)
6820 struct constructor_range_stack *p, *range_stack;
6823 range_stack = constructor_range_stack;
6824 constructor_range_stack = 0;
6825 while (constructor_stack != range_stack->stack)
6827 if (!constructor_stack->implicit)
6829 process_init_element (pop_init_level (1));
6831 for (p = range_stack;
6832 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6835 if (!constructor_stack->implicit)
6837 process_init_element (pop_init_level (1));
6840 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6841 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6846 constructor_index = p->index;
6847 constructor_fields = p->fields;
6848 if (finish && p->range_end && p->index == p->range_start)
6856 push_init_level (2);
6857 p->stack = constructor_stack;
6858 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6859 p->index = p->range_start;
6863 constructor_range_stack = range_stack;
6870 constructor_range_stack = 0;
6873 /* Build a simple asm-statement, from one string literal. */
6875 simple_asm_stmt (expr)
6880 if (TREE_CODE (expr) == ADDR_EXPR)
6881 expr = TREE_OPERAND (expr, 0);
6883 if (TREE_CODE (expr) == STRING_CST)
6887 /* Simple asm statements are treated as volatile. */
6888 stmt = add_stmt (build_stmt (ASM_STMT, ridpointers[(int) RID_VOLATILE],
6889 expr, NULL_TREE, NULL_TREE, NULL_TREE));
6890 ASM_INPUT_P (stmt) = 1;
6894 error ("argument of `asm' is not a constant string");
6898 /* Build an asm-statement, whose components are a CV_QUALIFIER, a
6899 STRING, some OUTPUTS, some INPUTS, and some CLOBBERS. */
6902 build_asm_stmt (cv_qualifier, string, outputs, inputs, clobbers)
6911 if (TREE_CODE (string) != STRING_CST)
6913 error ("asm template is not a string constant");
6917 if (cv_qualifier != NULL_TREE
6918 && cv_qualifier != ridpointers[(int) RID_VOLATILE])
6920 warning ("%s qualifier ignored on asm",
6921 IDENTIFIER_POINTER (cv_qualifier));
6922 cv_qualifier = NULL_TREE;
6925 /* We can remove output conversions that change the type,
6926 but not the mode. */
6927 for (tail = outputs; tail; tail = TREE_CHAIN (tail))
6929 tree output = TREE_VALUE (tail);
6931 STRIP_NOPS (output);
6932 TREE_VALUE (tail) = output;
6934 /* Allow conversions as LHS here. build_modify_expr as called below
6935 will do the right thing with them. */
6936 while (TREE_CODE (output) == NOP_EXPR
6937 || TREE_CODE (output) == CONVERT_EXPR
6938 || TREE_CODE (output) == FLOAT_EXPR
6939 || TREE_CODE (output) == FIX_TRUNC_EXPR
6940 || TREE_CODE (output) == FIX_FLOOR_EXPR
6941 || TREE_CODE (output) == FIX_ROUND_EXPR
6942 || TREE_CODE (output) == FIX_CEIL_EXPR)
6943 output = TREE_OPERAND (output, 0);
6945 lvalue_or_else (TREE_VALUE (tail), "invalid lvalue in asm statement");
6948 /* Remove output conversions that change the type but not the mode. */
6949 for (tail = outputs; tail; tail = TREE_CHAIN (tail))
6951 tree output = TREE_VALUE (tail);
6952 STRIP_NOPS (output);
6953 TREE_VALUE (tail) = output;
6956 /* Perform default conversions on array and function inputs.
6957 Don't do this for other types as it would screw up operands
6958 expected to be in memory. */
6959 for (tail = inputs; tail; tail = TREE_CHAIN (tail))
6960 TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail));
6962 return add_stmt (build_stmt (ASM_STMT, cv_qualifier, string,
6963 outputs, inputs, clobbers));
6966 /* Expand an ASM statement with operands, handling output operands
6967 that are not variables or INDIRECT_REFS by transforming such
6968 cases into cases that expand_asm_operands can handle.
6970 Arguments are same as for expand_asm_operands. */
6973 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
6974 tree string, outputs, inputs, clobbers;
6976 const char *filename;
6979 int noutputs = list_length (outputs);
6981 /* o[I] is the place that output number I should be written. */
6982 tree *o = (tree *) alloca (noutputs * sizeof (tree));
6985 /* Record the contents of OUTPUTS before it is modified. */
6986 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6988 o[i] = TREE_VALUE (tail);
6989 if (o[i] == error_mark_node)
6993 /* Generate the ASM_OPERANDS insn; store into the TREE_VALUEs of
6994 OUTPUTS some trees for where the values were actually stored. */
6995 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
6997 /* Copy all the intermediate outputs into the specified outputs. */
6998 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
7000 if (o[i] != TREE_VALUE (tail))
7002 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
7003 NULL_RTX, VOIDmode, EXPAND_NORMAL);
7006 /* Restore the original value so that it's correct the next
7007 time we expand this function. */
7008 TREE_VALUE (tail) = o[i];
7010 /* Detect modification of read-only values.
7011 (Otherwise done by build_modify_expr.) */
7014 tree type = TREE_TYPE (o[i]);
7015 if (TREE_READONLY (o[i])
7016 || TYPE_READONLY (type)
7017 || ((TREE_CODE (type) == RECORD_TYPE
7018 || TREE_CODE (type) == UNION_TYPE)
7019 && C_TYPE_FIELDS_READONLY (type)))
7020 readonly_warning (o[i], "modification by `asm'");
7024 /* Those MODIFY_EXPRs could do autoincrements. */
7028 /* Expand a C `return' statement.
7029 RETVAL is the expression for what to return,
7030 or a null pointer for `return;' with no value. */
7033 c_expand_return (retval)
7036 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
7038 if (TREE_THIS_VOLATILE (current_function_decl))
7039 warning ("function declared `noreturn' has a `return' statement");
7043 current_function_returns_null = 1;
7044 if ((warn_return_type || flag_isoc99)
7045 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
7046 pedwarn_c99 ("`return' with no value, in function returning non-void");
7048 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
7050 current_function_returns_null = 1;
7051 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
7052 pedwarn ("`return' with a value, in function returning void");
7056 tree t = convert_for_assignment (valtype, retval, _("return"),
7057 NULL_TREE, NULL_TREE, 0);
7058 tree res = DECL_RESULT (current_function_decl);
7061 current_function_returns_value = 1;
7062 if (t == error_mark_node)
7065 inner = t = convert (TREE_TYPE (res), t);
7067 /* Strip any conversions, additions, and subtractions, and see if
7068 we are returning the address of a local variable. Warn if so. */
7071 switch (TREE_CODE (inner))
7073 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
7075 inner = TREE_OPERAND (inner, 0);
7079 /* If the second operand of the MINUS_EXPR has a pointer
7080 type (or is converted from it), this may be valid, so
7081 don't give a warning. */
7083 tree op1 = TREE_OPERAND (inner, 1);
7085 while (! POINTER_TYPE_P (TREE_TYPE (op1))
7086 && (TREE_CODE (op1) == NOP_EXPR
7087 || TREE_CODE (op1) == NON_LVALUE_EXPR
7088 || TREE_CODE (op1) == CONVERT_EXPR))
7089 op1 = TREE_OPERAND (op1, 0);
7091 if (POINTER_TYPE_P (TREE_TYPE (op1)))
7094 inner = TREE_OPERAND (inner, 0);
7099 inner = TREE_OPERAND (inner, 0);
7101 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
7102 inner = TREE_OPERAND (inner, 0);
7104 if (TREE_CODE (inner) == VAR_DECL
7105 && ! DECL_EXTERNAL (inner)
7106 && ! TREE_STATIC (inner)
7107 && DECL_CONTEXT (inner) == current_function_decl)
7108 warning ("function returns address of local variable");
7118 retval = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
7121 return add_stmt (build_return_stmt (retval));
7125 /* The SWITCH_STMT being built. */
7127 /* A splay-tree mapping the low element of a case range to the high
7128 element, or NULL_TREE if there is no high element. Used to
7129 determine whether or not a new case label duplicates an old case
7130 label. We need a tree, rather than simply a hash table, because
7131 of the GNU case range extension. */
7133 /* The next node on the stack. */
7134 struct c_switch *next;
7137 /* A stack of the currently active switch statements. The innermost
7138 switch statement is on the top of the stack. There is no need to
7139 mark the stack for garbage collection because it is only active
7140 during the processing of the body of a function, and we never
7141 collect at that point. */
7143 static struct c_switch *switch_stack;
7145 /* Start a C switch statement, testing expression EXP. Return the new
7152 enum tree_code code;
7153 tree type, orig_type = error_mark_node;
7154 struct c_switch *cs;
7156 if (exp != error_mark_node)
7158 code = TREE_CODE (TREE_TYPE (exp));
7159 orig_type = TREE_TYPE (exp);
7161 if (! INTEGRAL_TYPE_P (orig_type)
7162 && code != ERROR_MARK)
7164 error ("switch quantity not an integer");
7165 exp = integer_zero_node;
7169 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
7171 if (warn_traditional && !in_system_header
7172 && (type == long_integer_type_node
7173 || type == long_unsigned_type_node))
7174 warning ("`long' switch expression not converted to `int' in ISO C");
7176 exp = default_conversion (exp);
7177 type = TREE_TYPE (exp);
7181 /* Add this new SWITCH_STMT to the stack. */
7182 cs = (struct c_switch *) xmalloc (sizeof (*cs));
7183 cs->switch_stmt = build_stmt (SWITCH_STMT, exp, NULL_TREE, orig_type);
7184 cs->cases = splay_tree_new (case_compare, NULL, NULL);
7185 cs->next = switch_stack;
7188 return add_stmt (switch_stack->switch_stmt);
7191 /* Process a case label. */
7194 do_case (low_value, high_value)
7198 tree label = NULL_TREE;
7202 bool switch_was_empty_p = (SWITCH_BODY (switch_stack->switch_stmt) == NULL_TREE);
7204 label = c_add_case_label (switch_stack->cases,
7205 SWITCH_COND (switch_stack->switch_stmt),
7206 low_value, high_value);
7207 if (label == error_mark_node)
7209 else if (switch_was_empty_p)
7211 /* Attach the first case label to the SWITCH_BODY. */
7212 SWITCH_BODY (switch_stack->switch_stmt) = TREE_CHAIN (switch_stack->switch_stmt);
7213 TREE_CHAIN (switch_stack->switch_stmt) = NULL_TREE;
7217 error ("case label not within a switch statement");
7219 error ("`default' label not within a switch statement");
7224 /* Finish the switch statement. */
7229 struct c_switch *cs = switch_stack;
7231 /* Rechain the next statements to the SWITCH_STMT. */
7232 last_tree = cs->switch_stmt;
7234 /* Pop the stack. */
7235 switch_stack = switch_stack->next;
7236 splay_tree_delete (cs->cases);