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, 2004 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. */
30 #include "coretypes.h"
34 #include "langhooks.h"
44 #include "tree-iterator.h"
45 #include "tree-gimple.h"
47 /* The level of nesting inside "__alignof__". */
50 /* The level of nesting inside "sizeof". */
53 /* The level of nesting inside "typeof". */
56 /* Nonzero if we've already printed a "missing braces around initializer"
57 message within this initializer. */
58 static int missing_braces_mentioned;
60 static int require_constant_value;
61 static int require_constant_elements;
63 static tree qualify_type (tree, tree);
64 static int tagged_types_tu_compatible_p (tree, tree);
65 static int comp_target_types (tree, tree, int);
66 static int function_types_compatible_p (tree, tree);
67 static int type_lists_compatible_p (tree, tree);
68 static tree decl_constant_value_for_broken_optimization (tree);
69 static tree default_function_array_conversion (tree);
70 static tree lookup_field (tree, tree);
71 static tree convert_arguments (tree, tree, tree, tree);
72 static tree pointer_diff (tree, tree);
73 static tree convert_for_assignment (tree, tree, const char *, tree, tree,
75 static void warn_for_assignment (const char *, const char *, tree, int);
76 static tree valid_compound_expr_initializer (tree, tree);
77 static void push_string (const char *);
78 static void push_member_name (tree);
79 static void push_array_bounds (int);
80 static int spelling_length (void);
81 static char *print_spelling (char *);
82 static void warning_init (const char *);
83 static tree digest_init (tree, tree, bool, int);
84 static void output_init_element (tree, bool, tree, tree, int);
85 static void output_pending_init_elements (int);
86 static int set_designator (int);
87 static void push_range_stack (tree);
88 static void add_pending_init (tree, tree);
89 static void set_nonincremental_init (void);
90 static void set_nonincremental_init_from_string (tree);
91 static tree find_init_member (tree);
92 static int lvalue_or_else (tree, const char *);
94 /* Do `exp = require_complete_type (exp);' to make sure exp
95 does not have an incomplete type. (That includes void types.) */
98 require_complete_type (tree value)
100 tree type = TREE_TYPE (value);
102 if (value == error_mark_node || type == error_mark_node)
103 return error_mark_node;
105 /* First, detect a valid value with a complete type. */
106 if (COMPLETE_TYPE_P (type))
109 c_incomplete_type_error (value, type);
110 return error_mark_node;
113 /* Print an error message for invalid use of an incomplete type.
114 VALUE is the expression that was used (or 0 if that isn't known)
115 and TYPE is the type that was invalid. */
118 c_incomplete_type_error (tree value, tree type)
120 const char *type_code_string;
122 /* Avoid duplicate error message. */
123 if (TREE_CODE (type) == ERROR_MARK)
126 if (value != 0 && (TREE_CODE (value) == VAR_DECL
127 || TREE_CODE (value) == PARM_DECL))
128 error ("`%s' has an incomplete type",
129 IDENTIFIER_POINTER (DECL_NAME (value)));
133 /* We must print an error message. Be clever about what it says. */
135 switch (TREE_CODE (type))
138 type_code_string = "struct";
142 type_code_string = "union";
146 type_code_string = "enum";
150 error ("invalid use of void expression");
154 if (TYPE_DOMAIN (type))
156 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
158 error ("invalid use of flexible array member");
161 type = TREE_TYPE (type);
164 error ("invalid use of array with unspecified bounds");
171 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
172 error ("invalid use of undefined type `%s %s'",
173 type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
175 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
176 error ("invalid use of incomplete typedef `%s'",
177 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
181 /* Given a type, apply default promotions wrt unnamed function
182 arguments and return the new type. */
185 c_type_promotes_to (tree type)
187 if (TYPE_MAIN_VARIANT (type) == float_type_node)
188 return double_type_node;
190 if (c_promoting_integer_type_p (type))
192 /* Preserve unsignedness if not really getting any wider. */
193 if (TYPE_UNSIGNED (type)
194 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
195 return unsigned_type_node;
196 return integer_type_node;
202 /* Return a variant of TYPE which has all the type qualifiers of LIKE
203 as well as those of TYPE. */
206 qualify_type (tree type, tree like)
208 return c_build_qualified_type (type,
209 TYPE_QUALS (type) | TYPE_QUALS (like));
212 /* Return the composite type of two compatible types.
214 We assume that comptypes has already been done and returned
215 nonzero; if that isn't so, this may crash. In particular, we
216 assume that qualifiers match. */
219 composite_type (tree t1, tree t2)
221 enum tree_code code1;
222 enum tree_code code2;
225 /* Save time if the two types are the same. */
227 if (t1 == t2) return t1;
229 /* If one type is nonsense, use the other. */
230 if (t1 == error_mark_node)
232 if (t2 == error_mark_node)
235 code1 = TREE_CODE (t1);
236 code2 = TREE_CODE (t2);
238 /* Merge the attributes. */
239 attributes = targetm.merge_type_attributes (t1, t2);
241 /* If one is an enumerated type and the other is the compatible
242 integer type, the composite type might be either of the two
243 (DR#013 question 3). For consistency, use the enumerated type as
244 the composite type. */
246 if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
248 if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
251 gcc_assert (code1 == code2);
256 /* For two pointers, do this recursively on the target type. */
258 tree pointed_to_1 = TREE_TYPE (t1);
259 tree pointed_to_2 = TREE_TYPE (t2);
260 tree target = composite_type (pointed_to_1, pointed_to_2);
261 t1 = build_pointer_type (target);
262 t1 = build_type_attribute_variant (t1, attributes);
263 return qualify_type (t1, t2);
268 tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
270 /* We should not have any type quals on arrays at all. */
271 gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
273 /* Save space: see if the result is identical to one of the args. */
274 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
275 return build_type_attribute_variant (t1, attributes);
276 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
277 return build_type_attribute_variant (t2, attributes);
279 if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
280 return build_type_attribute_variant (t1, attributes);
281 if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
282 return build_type_attribute_variant (t2, attributes);
284 /* Merge the element types, and have a size if either arg has one. */
285 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
286 return build_type_attribute_variant (t1, attributes);
290 /* Function types: prefer the one that specified arg types.
291 If both do, merge the arg types. Also merge the return types. */
293 tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
294 tree p1 = TYPE_ARG_TYPES (t1);
295 tree p2 = TYPE_ARG_TYPES (t2);
300 /* Save space: see if the result is identical to one of the args. */
301 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
302 return build_type_attribute_variant (t1, attributes);
303 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
304 return build_type_attribute_variant (t2, attributes);
306 /* Simple way if one arg fails to specify argument types. */
307 if (TYPE_ARG_TYPES (t1) == 0)
309 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
310 t1 = build_type_attribute_variant (t1, attributes);
311 return qualify_type (t1, t2);
313 if (TYPE_ARG_TYPES (t2) == 0)
315 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
316 t1 = build_type_attribute_variant (t1, attributes);
317 return qualify_type (t1, t2);
320 /* If both args specify argument types, we must merge the two
321 lists, argument by argument. */
322 /* Tell global_bindings_p to return false so that variable_size
323 doesn't abort on VLAs in parameter types. */
324 c_override_global_bindings_to_false = true;
326 len = list_length (p1);
329 for (i = 0; i < len; i++)
330 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
335 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
337 /* A null type means arg type is not specified.
338 Take whatever the other function type has. */
339 if (TREE_VALUE (p1) == 0)
341 TREE_VALUE (n) = TREE_VALUE (p2);
344 if (TREE_VALUE (p2) == 0)
346 TREE_VALUE (n) = TREE_VALUE (p1);
350 /* Given wait (union {union wait *u; int *i} *)
351 and wait (union wait *),
352 prefer union wait * as type of parm. */
353 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
354 && TREE_VALUE (p1) != TREE_VALUE (p2))
357 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
358 memb; memb = TREE_CHAIN (memb))
359 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
361 TREE_VALUE (n) = TREE_VALUE (p2);
363 pedwarn ("function types not truly compatible in ISO C");
367 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
368 && TREE_VALUE (p2) != TREE_VALUE (p1))
371 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
372 memb; memb = TREE_CHAIN (memb))
373 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
375 TREE_VALUE (n) = TREE_VALUE (p1);
377 pedwarn ("function types not truly compatible in ISO C");
381 TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
385 c_override_global_bindings_to_false = false;
386 t1 = build_function_type (valtype, newargs);
387 t1 = qualify_type (t1, t2);
388 /* ... falls through ... */
392 return build_type_attribute_variant (t1, attributes);
397 /* Return the type of a conditional expression between pointers to
398 possibly differently qualified versions of compatible types.
400 We assume that comp_target_types has already been done and returned
401 nonzero; if that isn't so, this may crash. */
404 common_pointer_type (tree t1, tree t2)
411 /* Save time if the two types are the same. */
413 if (t1 == t2) return t1;
415 /* If one type is nonsense, use the other. */
416 if (t1 == error_mark_node)
418 if (t2 == error_mark_node)
421 gcc_assert (TREE_CODE (t1) == POINTER_TYPE
422 && TREE_CODE (t2) == POINTER_TYPE);
424 /* Merge the attributes. */
425 attributes = targetm.merge_type_attributes (t1, t2);
427 /* Find the composite type of the target types, and combine the
428 qualifiers of the two types' targets. */
429 pointed_to_1 = TREE_TYPE (t1);
430 pointed_to_2 = TREE_TYPE (t2);
431 target = composite_type (TYPE_MAIN_VARIANT (pointed_to_1),
432 TYPE_MAIN_VARIANT (pointed_to_2));
433 t1 = build_pointer_type (c_build_qualified_type
435 TYPE_QUALS (pointed_to_1) |
436 TYPE_QUALS (pointed_to_2)));
437 return build_type_attribute_variant (t1, attributes);
440 /* Return the common type for two arithmetic types under the usual
441 arithmetic conversions. The default conversions have already been
442 applied, and enumerated types converted to their compatible integer
443 types. The resulting type is unqualified and has no attributes.
445 This is the type for the result of most arithmetic operations
446 if the operands have the given two types. */
449 common_type (tree t1, tree t2)
451 enum tree_code code1;
452 enum tree_code code2;
454 /* If one type is nonsense, use the other. */
455 if (t1 == error_mark_node)
457 if (t2 == error_mark_node)
460 if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
461 t1 = TYPE_MAIN_VARIANT (t1);
463 if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
464 t2 = TYPE_MAIN_VARIANT (t2);
466 if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
467 t1 = build_type_attribute_variant (t1, NULL_TREE);
469 if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
470 t2 = build_type_attribute_variant (t2, NULL_TREE);
472 /* Save time if the two types are the same. */
474 if (t1 == t2) return t1;
476 code1 = TREE_CODE (t1);
477 code2 = TREE_CODE (t2);
479 gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
480 || code1 == REAL_TYPE || code1 == INTEGER_TYPE);
481 gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
482 || code2 == REAL_TYPE || code2 == INTEGER_TYPE);
484 /* If one type is a vector type, return that type. (How the usual
485 arithmetic conversions apply to the vector types extension is not
486 precisely specified.) */
487 if (code1 == VECTOR_TYPE)
490 if (code2 == VECTOR_TYPE)
493 /* If one type is complex, form the common type of the non-complex
494 components, then make that complex. Use T1 or T2 if it is the
496 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
498 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
499 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
500 tree subtype = common_type (subtype1, subtype2);
502 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
504 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
507 return build_complex_type (subtype);
510 /* If only one is real, use it as the result. */
512 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
515 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
518 /* Both real or both integers; use the one with greater precision. */
520 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
522 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
525 /* Same precision. Prefer long longs to longs to ints when the
526 same precision, following the C99 rules on integer type rank
527 (which are equivalent to the C90 rules for C90 types). */
529 if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
530 || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
531 return long_long_unsigned_type_node;
533 if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
534 || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
536 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
537 return long_long_unsigned_type_node;
539 return long_long_integer_type_node;
542 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
543 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
544 return long_unsigned_type_node;
546 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
547 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
549 /* But preserve unsignedness from the other type,
550 since long cannot hold all the values of an unsigned int. */
551 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
552 return long_unsigned_type_node;
554 return long_integer_type_node;
557 /* Likewise, prefer long double to double even if same size. */
558 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
559 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
560 return long_double_type_node;
562 /* Otherwise prefer the unsigned one. */
564 if (TYPE_UNSIGNED (t1))
570 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
571 or various other operations. Return 2 if they are compatible
572 but a warning may be needed if you use them together. */
575 comptypes (tree type1, tree type2)
581 /* Suppress errors caused by previously reported errors. */
583 if (t1 == t2 || !t1 || !t2
584 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
587 /* If either type is the internal version of sizetype, return the
589 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
590 && TYPE_ORIG_SIZE_TYPE (t1))
591 t1 = TYPE_ORIG_SIZE_TYPE (t1);
593 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
594 && TYPE_ORIG_SIZE_TYPE (t2))
595 t2 = TYPE_ORIG_SIZE_TYPE (t2);
598 /* Enumerated types are compatible with integer types, but this is
599 not transitive: two enumerated types in the same translation unit
600 are compatible with each other only if they are the same type. */
602 if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
603 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
604 else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
605 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
610 /* Different classes of types can't be compatible. */
612 if (TREE_CODE (t1) != TREE_CODE (t2))
615 /* Qualifiers must match. C99 6.7.3p9 */
617 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
620 /* Allow for two different type nodes which have essentially the same
621 definition. Note that we already checked for equality of the type
622 qualifiers (just above). */
624 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
627 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
628 if (! (attrval = targetm.comp_type_attributes (t1, t2)))
631 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
634 switch (TREE_CODE (t1))
637 /* We must give ObjC the first crack at comparing pointers, since
638 protocol qualifiers may be involved. */
639 if (c_dialect_objc () && (val = objc_comptypes (t1, t2, 0)) >= 0)
641 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
642 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
646 val = function_types_compatible_p (t1, t2);
651 tree d1 = TYPE_DOMAIN (t1);
652 tree d2 = TYPE_DOMAIN (t2);
653 bool d1_variable, d2_variable;
654 bool d1_zero, d2_zero;
657 /* Target types must match incl. qualifiers. */
658 if (TREE_TYPE (t1) != TREE_TYPE (t2)
659 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
662 /* Sizes must match unless one is missing or variable. */
663 if (d1 == 0 || d2 == 0 || d1 == d2)
666 d1_zero = ! TYPE_MAX_VALUE (d1);
667 d2_zero = ! TYPE_MAX_VALUE (d2);
669 d1_variable = (! d1_zero
670 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
671 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
672 d2_variable = (! d2_zero
673 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
674 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
676 if (d1_variable || d2_variable)
678 if (d1_zero && d2_zero)
680 if (d1_zero || d2_zero
681 || ! tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
682 || ! tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
689 /* We are dealing with two distinct structs. In assorted Objective-C
690 corner cases, however, these can still be deemed equivalent. */
691 if (c_dialect_objc () && objc_comptypes (t1, t2, 0) == 1)
696 if (val != 1 && !same_translation_unit_p (t1, t2))
697 val = tagged_types_tu_compatible_p (t1, t2);
701 val = TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
702 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2));
708 return attrval == 2 && val == 1 ? 2 : val;
711 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
712 ignoring their qualifiers. REFLEXIVE is only used by ObjC - set it
713 to 1 or 0 depending if the check of the pointer types is meant to
714 be reflexive or not (typically, assignments are not reflexive,
715 while comparisons are reflexive).
719 comp_target_types (tree ttl, tree ttr, int reflexive)
723 /* Give objc_comptypes a crack at letting these types through. */
724 if ((val = objc_comptypes (ttl, ttr, reflexive)) >= 0)
727 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
728 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
730 if (val == 2 && pedantic)
731 pedwarn ("types are not quite compatible");
735 /* Subroutines of `comptypes'. */
737 /* Determine whether two trees derive from the same translation unit.
738 If the CONTEXT chain ends in a null, that tree's context is still
739 being parsed, so if two trees have context chains ending in null,
740 they're in the same translation unit. */
742 same_translation_unit_p (tree t1, tree t2)
744 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
745 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
747 case 'd': t1 = DECL_CONTEXT (t1); break;
748 case 't': t1 = TYPE_CONTEXT (t1); break;
749 case 'x': t1 = BLOCK_SUPERCONTEXT (t1); break; /* assume block */
750 default: gcc_unreachable ();
753 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
754 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
756 case 'd': t2 = DECL_CONTEXT (t2); break;
757 case 't': t2 = TYPE_CONTEXT (t2); break;
758 case 'x': t2 = BLOCK_SUPERCONTEXT (t2); break; /* assume block */
759 default: gcc_unreachable ();
765 /* The C standard says that two structures in different translation
766 units are compatible with each other only if the types of their
767 fields are compatible (among other things). So, consider two copies
768 of this structure: */
770 struct tagged_tu_seen {
771 const struct tagged_tu_seen * next;
776 /* Can they be compatible with each other? We choose to break the
777 recursion by allowing those types to be compatible. */
779 static const struct tagged_tu_seen * tagged_tu_seen_base;
781 /* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
782 compatible. If the two types are not the same (which has been
783 checked earlier), this can only happen when multiple translation
784 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
788 tagged_types_tu_compatible_p (tree t1, tree t2)
791 bool needs_warning = false;
793 /* We have to verify that the tags of the types are the same. This
794 is harder than it looks because this may be a typedef, so we have
795 to go look at the original type. It may even be a typedef of a
797 In the case of compiler-created builtin structs the TYPE_DECL
798 may be a dummy, with no DECL_ORIGINAL_TYPE. Don't fault. */
799 while (TYPE_NAME (t1)
800 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
801 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
802 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
804 while (TYPE_NAME (t2)
805 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL
806 && DECL_ORIGINAL_TYPE (TYPE_NAME (t2)))
807 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
809 /* C90 didn't have the requirement that the two tags be the same. */
810 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
813 /* C90 didn't say what happened if one or both of the types were
814 incomplete; we choose to follow C99 rules here, which is that they
816 if (TYPE_SIZE (t1) == NULL
817 || TYPE_SIZE (t2) == NULL)
821 const struct tagged_tu_seen * tts_i;
822 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
823 if (tts_i->t1 == t1 && tts_i->t2 == t2)
827 switch (TREE_CODE (t1))
832 /* Speed up the case where the type values are in the same order. */
833 tree tv1 = TYPE_VALUES (t1);
834 tree tv2 = TYPE_VALUES (t2);
839 for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
841 if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
843 if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
847 if (tv1 == NULL_TREE && tv2 == NULL_TREE)
849 if (tv1 == NULL_TREE || tv2 == NULL_TREE)
852 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
855 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
857 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
859 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
867 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
870 for (s1 = TYPE_FIELDS (t1); s1; s1 = TREE_CHAIN (s1))
873 struct tagged_tu_seen tts;
875 tts.next = tagged_tu_seen_base;
878 tagged_tu_seen_base = &tts;
880 if (DECL_NAME (s1) != NULL)
881 for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
882 if (DECL_NAME (s1) == DECL_NAME (s2))
885 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
889 needs_warning = true;
891 if (TREE_CODE (s1) == FIELD_DECL
892 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
893 DECL_FIELD_BIT_OFFSET (s2)) != 1)
899 tagged_tu_seen_base = tts.next;
903 return needs_warning ? 2 : 1;
908 struct tagged_tu_seen tts;
910 tts.next = tagged_tu_seen_base;
913 tagged_tu_seen_base = &tts;
915 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
917 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
920 if (TREE_CODE (s1) != TREE_CODE (s2)
921 || DECL_NAME (s1) != DECL_NAME (s2))
923 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
927 needs_warning = true;
929 if (TREE_CODE (s1) == FIELD_DECL
930 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
931 DECL_FIELD_BIT_OFFSET (s2)) != 1)
934 tagged_tu_seen_base = tts.next;
937 return needs_warning ? 2 : 1;
945 /* Return 1 if two function types F1 and F2 are compatible.
946 If either type specifies no argument types,
947 the other must specify a fixed number of self-promoting arg types.
948 Otherwise, if one type specifies only the number of arguments,
949 the other must specify that number of self-promoting arg types.
950 Otherwise, the argument types must match. */
953 function_types_compatible_p (tree f1, tree f2)
956 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
961 ret1 = TREE_TYPE (f1);
962 ret2 = TREE_TYPE (f2);
964 /* 'volatile' qualifiers on a function's return type used to mean
965 the function is noreturn. */
966 if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
967 pedwarn ("function return types not compatible due to `volatile'");
968 if (TYPE_VOLATILE (ret1))
969 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
970 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
971 if (TYPE_VOLATILE (ret2))
972 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
973 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
974 val = comptypes (ret1, ret2);
978 args1 = TYPE_ARG_TYPES (f1);
979 args2 = TYPE_ARG_TYPES (f2);
981 /* An unspecified parmlist matches any specified parmlist
982 whose argument types don't need default promotions. */
986 if (!self_promoting_args_p (args2))
988 /* If one of these types comes from a non-prototype fn definition,
989 compare that with the other type's arglist.
990 If they don't match, ask for a warning (but no error). */
991 if (TYPE_ACTUAL_ARG_TYPES (f1)
992 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
998 if (!self_promoting_args_p (args1))
1000 if (TYPE_ACTUAL_ARG_TYPES (f2)
1001 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
1006 /* Both types have argument lists: compare them and propagate results. */
1007 val1 = type_lists_compatible_p (args1, args2);
1008 return val1 != 1 ? val1 : val;
1011 /* Check two lists of types for compatibility,
1012 returning 0 for incompatible, 1 for compatible,
1013 or 2 for compatible with warning. */
1016 type_lists_compatible_p (tree args1, tree args2)
1018 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1024 if (args1 == 0 && args2 == 0)
1026 /* If one list is shorter than the other,
1027 they fail to match. */
1028 if (args1 == 0 || args2 == 0)
1030 /* A null pointer instead of a type
1031 means there is supposed to be an argument
1032 but nothing is specified about what type it has.
1033 So match anything that self-promotes. */
1034 if (TREE_VALUE (args1) == 0)
1036 if (c_type_promotes_to (TREE_VALUE (args2)) != TREE_VALUE (args2))
1039 else if (TREE_VALUE (args2) == 0)
1041 if (c_type_promotes_to (TREE_VALUE (args1)) != TREE_VALUE (args1))
1044 /* If one of the lists has an error marker, ignore this arg. */
1045 else if (TREE_CODE (TREE_VALUE (args1)) == ERROR_MARK
1046 || TREE_CODE (TREE_VALUE (args2)) == ERROR_MARK)
1048 else if (! (newval = comptypes (TYPE_MAIN_VARIANT (TREE_VALUE (args1)),
1049 TYPE_MAIN_VARIANT (TREE_VALUE (args2)))))
1051 /* Allow wait (union {union wait *u; int *i} *)
1052 and wait (union wait *) to be compatible. */
1053 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
1054 && (TYPE_NAME (TREE_VALUE (args1)) == 0
1055 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
1056 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
1057 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
1058 TYPE_SIZE (TREE_VALUE (args2))))
1061 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
1062 memb; memb = TREE_CHAIN (memb))
1063 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
1068 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
1069 && (TYPE_NAME (TREE_VALUE (args2)) == 0
1070 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
1071 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
1072 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
1073 TYPE_SIZE (TREE_VALUE (args1))))
1076 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
1077 memb; memb = TREE_CHAIN (memb))
1078 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
1087 /* comptypes said ok, but record if it said to warn. */
1091 args1 = TREE_CHAIN (args1);
1092 args2 = TREE_CHAIN (args2);
1096 /* Compute the size to increment a pointer by. */
1099 c_size_in_bytes (tree type)
1101 enum tree_code code = TREE_CODE (type);
1103 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
1104 return size_one_node;
1106 if (!COMPLETE_OR_VOID_TYPE_P (type))
1108 error ("arithmetic on pointer to an incomplete type");
1109 return size_one_node;
1112 /* Convert in case a char is more than one unit. */
1113 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
1114 size_int (TYPE_PRECISION (char_type_node)
1118 /* Return either DECL or its known constant value (if it has one). */
1121 decl_constant_value (tree decl)
1123 if (/* Don't change a variable array bound or initial value to a constant
1124 in a place where a variable is invalid. Note that DECL_INITIAL
1125 isn't valid for a PARM_DECL. */
1126 current_function_decl != 0
1127 && TREE_CODE (decl) != PARM_DECL
1128 && ! TREE_THIS_VOLATILE (decl)
1129 && TREE_READONLY (decl)
1130 && DECL_INITIAL (decl) != 0
1131 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
1132 /* This is invalid if initial value is not constant.
1133 If it has either a function call, a memory reference,
1134 or a variable, then re-evaluating it could give different results. */
1135 && TREE_CONSTANT (DECL_INITIAL (decl))
1136 /* Check for cases where this is sub-optimal, even though valid. */
1137 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
1138 return DECL_INITIAL (decl);
1142 /* Return either DECL or its known constant value (if it has one), but
1143 return DECL if pedantic or DECL has mode BLKmode. This is for
1144 bug-compatibility with the old behavior of decl_constant_value
1145 (before GCC 3.0); every use of this function is a bug and it should
1146 be removed before GCC 3.1. It is not appropriate to use pedantic
1147 in a way that affects optimization, and BLKmode is probably not the
1148 right test for avoiding misoptimizations either. */
1151 decl_constant_value_for_broken_optimization (tree decl)
1153 if (pedantic || DECL_MODE (decl) == BLKmode)
1156 return decl_constant_value (decl);
1160 /* Perform the default conversion of arrays and functions to pointers.
1161 Return the result of converting EXP. For any other expression, just
1165 default_function_array_conversion (tree exp)
1168 tree type = TREE_TYPE (exp);
1169 enum tree_code code = TREE_CODE (type);
1172 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
1175 Do not use STRIP_NOPS here! It will remove conversions from pointer
1176 to integer and cause infinite recursion. */
1178 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1179 || (TREE_CODE (exp) == NOP_EXPR
1180 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1182 if (TREE_CODE (exp) == NON_LVALUE_EXPR)
1184 exp = TREE_OPERAND (exp, 0);
1187 if (TREE_NO_WARNING (orig_exp))
1188 TREE_NO_WARNING (exp) = 1;
1190 if (code == FUNCTION_TYPE)
1192 return build_unary_op (ADDR_EXPR, exp, 0);
1194 if (code == ARRAY_TYPE)
1197 tree restype = TREE_TYPE (type);
1203 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp))
1205 constp = TREE_READONLY (exp);
1206 volatilep = TREE_THIS_VOLATILE (exp);
1209 if (TYPE_QUALS (type) || constp || volatilep)
1211 = c_build_qualified_type (restype,
1213 | (constp * TYPE_QUAL_CONST)
1214 | (volatilep * TYPE_QUAL_VOLATILE));
1216 if (TREE_CODE (exp) == INDIRECT_REF)
1217 return convert (build_pointer_type (restype),
1218 TREE_OPERAND (exp, 0));
1220 if (TREE_CODE (exp) == COMPOUND_EXPR)
1222 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
1223 return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1224 TREE_OPERAND (exp, 0), op1);
1227 lvalue_array_p = !not_lvalue && lvalue_p (exp);
1228 if (!flag_isoc99 && !lvalue_array_p)
1230 /* Before C99, non-lvalue arrays do not decay to pointers.
1231 Normally, using such an array would be invalid; but it can
1232 be used correctly inside sizeof or as a statement expression.
1233 Thus, do not give an error here; an error will result later. */
1237 ptrtype = build_pointer_type (restype);
1239 if (TREE_CODE (exp) == VAR_DECL)
1241 /* We are making an ADDR_EXPR of ptrtype. This is a valid
1242 ADDR_EXPR because it's the best way of representing what
1243 happens in C when we take the address of an array and place
1244 it in a pointer to the element type. */
1245 adr = build1 (ADDR_EXPR, ptrtype, exp);
1246 if (!c_mark_addressable (exp))
1247 return error_mark_node;
1248 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1251 /* This way is better for a COMPONENT_REF since it can
1252 simplify the offset for a component. */
1253 adr = build_unary_op (ADDR_EXPR, exp, 1);
1254 return convert (ptrtype, adr);
1259 /* Perform default promotions for C data used in expressions.
1260 Arrays and functions are converted to pointers;
1261 enumeral types or short or char, to int.
1262 In addition, manifest constants symbols are replaced by their values. */
1265 default_conversion (tree exp)
1268 tree type = TREE_TYPE (exp);
1269 enum tree_code code = TREE_CODE (type);
1271 if (code == FUNCTION_TYPE || code == ARRAY_TYPE)
1272 return default_function_array_conversion (exp);
1274 /* Constants can be used directly unless they're not loadable. */
1275 if (TREE_CODE (exp) == CONST_DECL)
1276 exp = DECL_INITIAL (exp);
1278 /* Replace a nonvolatile const static variable with its value unless
1279 it is an array, in which case we must be sure that taking the
1280 address of the array produces consistent results. */
1281 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
1283 exp = decl_constant_value_for_broken_optimization (exp);
1284 type = TREE_TYPE (exp);
1287 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
1290 Do not use STRIP_NOPS here! It will remove conversions from pointer
1291 to integer and cause infinite recursion. */
1293 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1294 || (TREE_CODE (exp) == NOP_EXPR
1295 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1296 exp = TREE_OPERAND (exp, 0);
1298 if (TREE_NO_WARNING (orig_exp))
1299 TREE_NO_WARNING (exp) = 1;
1301 /* Normally convert enums to int,
1302 but convert wide enums to something wider. */
1303 if (code == ENUMERAL_TYPE)
1305 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
1306 TYPE_PRECISION (integer_type_node)),
1307 ((TYPE_PRECISION (type)
1308 >= TYPE_PRECISION (integer_type_node))
1309 && TYPE_UNSIGNED (type)));
1311 return convert (type, exp);
1314 if (TREE_CODE (exp) == COMPONENT_REF
1315 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
1316 /* If it's thinner than an int, promote it like a
1317 c_promoting_integer_type_p, otherwise leave it alone. */
1318 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
1319 TYPE_PRECISION (integer_type_node)))
1320 return convert (integer_type_node, exp);
1322 if (c_promoting_integer_type_p (type))
1324 /* Preserve unsignedness if not really getting any wider. */
1325 if (TYPE_UNSIGNED (type)
1326 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1327 return convert (unsigned_type_node, exp);
1329 return convert (integer_type_node, exp);
1332 if (code == VOID_TYPE)
1334 error ("void value not ignored as it ought to be");
1335 return error_mark_node;
1340 /* Look up COMPONENT in a structure or union DECL.
1342 If the component name is not found, returns NULL_TREE. Otherwise,
1343 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1344 stepping down the chain to the component, which is in the last
1345 TREE_VALUE of the list. Normally the list is of length one, but if
1346 the component is embedded within (nested) anonymous structures or
1347 unions, the list steps down the chain to the component. */
1350 lookup_field (tree decl, tree component)
1352 tree type = TREE_TYPE (decl);
1355 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1356 to the field elements. Use a binary search on this array to quickly
1357 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1358 will always be set for structures which have many elements. */
1360 if (TYPE_LANG_SPECIFIC (type))
1363 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
1365 field = TYPE_FIELDS (type);
1367 top = TYPE_LANG_SPECIFIC (type)->s->len;
1368 while (top - bot > 1)
1370 half = (top - bot + 1) >> 1;
1371 field = field_array[bot+half];
1373 if (DECL_NAME (field) == NULL_TREE)
1375 /* Step through all anon unions in linear fashion. */
1376 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1378 field = field_array[bot++];
1379 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1380 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1382 tree anon = lookup_field (field, component);
1385 return tree_cons (NULL_TREE, field, anon);
1389 /* Entire record is only anon unions. */
1393 /* Restart the binary search, with new lower bound. */
1397 if (DECL_NAME (field) == component)
1399 if (DECL_NAME (field) < component)
1405 if (DECL_NAME (field_array[bot]) == component)
1406 field = field_array[bot];
1407 else if (DECL_NAME (field) != component)
1412 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1414 if (DECL_NAME (field) == NULL_TREE
1415 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1416 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1418 tree anon = lookup_field (field, component);
1421 return tree_cons (NULL_TREE, field, anon);
1424 if (DECL_NAME (field) == component)
1428 if (field == NULL_TREE)
1432 return tree_cons (NULL_TREE, field, NULL_TREE);
1435 /* Make an expression to refer to the COMPONENT field of
1436 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1439 build_component_ref (tree datum, tree component)
1441 tree type = TREE_TYPE (datum);
1442 enum tree_code code = TREE_CODE (type);
1446 if (!objc_is_public (datum, component))
1447 return error_mark_node;
1449 /* If DATUM is a COMPOUND_EXPR, move our reference inside it.
1450 Ensure that the arguments are not lvalues; otherwise,
1451 if the component is an array, it would wrongly decay to a pointer in
1453 We cannot do this with a COND_EXPR, because in a conditional expression
1454 the default promotions are applied to both sides, and this would yield
1455 the wrong type of the result; for example, if the components have
1457 switch (TREE_CODE (datum))
1461 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
1462 return build2 (COMPOUND_EXPR, TREE_TYPE (value),
1463 TREE_OPERAND (datum, 0), non_lvalue (value));
1469 /* See if there is a field or component with name COMPONENT. */
1471 if (code == RECORD_TYPE || code == UNION_TYPE)
1473 if (!COMPLETE_TYPE_P (type))
1475 c_incomplete_type_error (NULL_TREE, type);
1476 return error_mark_node;
1479 field = lookup_field (datum, component);
1483 error ("%s has no member named `%s'",
1484 code == RECORD_TYPE ? "structure" : "union",
1485 IDENTIFIER_POINTER (component));
1486 return error_mark_node;
1489 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1490 This might be better solved in future the way the C++ front
1491 end does it - by giving the anonymous entities each a
1492 separate name and type, and then have build_component_ref
1493 recursively call itself. We can't do that here. */
1496 tree subdatum = TREE_VALUE (field);
1498 if (TREE_TYPE (subdatum) == error_mark_node)
1499 return error_mark_node;
1501 ref = build3 (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum,
1503 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
1504 TREE_READONLY (ref) = 1;
1505 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
1506 TREE_THIS_VOLATILE (ref) = 1;
1508 if (TREE_DEPRECATED (subdatum))
1509 warn_deprecated_use (subdatum);
1513 field = TREE_CHAIN (field);
1519 else if (code != ERROR_MARK)
1520 error ("request for member `%s' in something not a structure or union",
1521 IDENTIFIER_POINTER (component));
1523 return error_mark_node;
1526 /* Given an expression PTR for a pointer, return an expression
1527 for the value pointed to.
1528 ERRORSTRING is the name of the operator to appear in error messages. */
1531 build_indirect_ref (tree ptr, const char *errorstring)
1533 tree pointer = default_conversion (ptr);
1534 tree type = TREE_TYPE (pointer);
1536 if (TREE_CODE (type) == POINTER_TYPE)
1538 if (TREE_CODE (pointer) == ADDR_EXPR
1539 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1540 == TREE_TYPE (type)))
1541 return TREE_OPERAND (pointer, 0);
1544 tree t = TREE_TYPE (type);
1545 tree ref = build1 (INDIRECT_REF, TYPE_MAIN_VARIANT (t), pointer);
1547 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1549 error ("dereferencing pointer to incomplete type");
1550 return error_mark_node;
1552 if (VOID_TYPE_P (t) && skip_evaluation == 0)
1553 warning ("dereferencing `void *' pointer");
1555 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1556 so that we get the proper error message if the result is used
1557 to assign to. Also, &* is supposed to be a no-op.
1558 And ANSI C seems to specify that the type of the result
1559 should be the const type. */
1560 /* A de-reference of a pointer to const is not a const. It is valid
1561 to change it via some other pointer. */
1562 TREE_READONLY (ref) = TYPE_READONLY (t);
1563 TREE_SIDE_EFFECTS (ref)
1564 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
1565 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1569 else if (TREE_CODE (pointer) != ERROR_MARK)
1570 error ("invalid type argument of `%s'", errorstring);
1571 return error_mark_node;
1574 /* This handles expressions of the form "a[i]", which denotes
1577 This is logically equivalent in C to *(a+i), but we may do it differently.
1578 If A is a variable or a member, we generate a primitive ARRAY_REF.
1579 This avoids forcing the array out of registers, and can work on
1580 arrays that are not lvalues (for example, members of structures returned
1584 build_array_ref (tree array, tree index)
1588 error ("subscript missing in array reference");
1589 return error_mark_node;
1592 if (TREE_TYPE (array) == error_mark_node
1593 || TREE_TYPE (index) == error_mark_node)
1594 return error_mark_node;
1596 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
1600 /* Subscripting with type char is likely to lose
1601 on a machine where chars are signed.
1602 So warn on any machine, but optionally.
1603 Don't warn for unsigned char since that type is safe.
1604 Don't warn for signed char because anyone who uses that
1605 must have done so deliberately. */
1606 if (warn_char_subscripts
1607 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1608 warning ("array subscript has type `char'");
1610 /* Apply default promotions *after* noticing character types. */
1611 index = default_conversion (index);
1613 /* Require integer *after* promotion, for sake of enums. */
1614 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1616 error ("array subscript is not an integer");
1617 return error_mark_node;
1620 /* An array that is indexed by a non-constant
1621 cannot be stored in a register; we must be able to do
1622 address arithmetic on its address.
1623 Likewise an array of elements of variable size. */
1624 if (TREE_CODE (index) != INTEGER_CST
1625 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1626 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1628 if (!c_mark_addressable (array))
1629 return error_mark_node;
1631 /* An array that is indexed by a constant value which is not within
1632 the array bounds cannot be stored in a register either; because we
1633 would get a crash in store_bit_field/extract_bit_field when trying
1634 to access a non-existent part of the register. */
1635 if (TREE_CODE (index) == INTEGER_CST
1636 && TYPE_DOMAIN (TREE_TYPE (array))
1637 && ! int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
1639 if (!c_mark_addressable (array))
1640 return error_mark_node;
1646 while (TREE_CODE (foo) == COMPONENT_REF)
1647 foo = TREE_OPERAND (foo, 0);
1648 if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
1649 pedwarn ("ISO C forbids subscripting `register' array");
1650 else if (! flag_isoc99 && ! lvalue_p (foo))
1651 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
1654 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1655 rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
1656 /* Array ref is const/volatile if the array elements are
1657 or if the array is. */
1658 TREE_READONLY (rval)
1659 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1660 | TREE_READONLY (array));
1661 TREE_SIDE_EFFECTS (rval)
1662 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1663 | TREE_SIDE_EFFECTS (array));
1664 TREE_THIS_VOLATILE (rval)
1665 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1666 /* This was added by rms on 16 Nov 91.
1667 It fixes vol struct foo *a; a->elts[1]
1668 in an inline function.
1669 Hope it doesn't break something else. */
1670 | TREE_THIS_VOLATILE (array));
1671 return require_complete_type (fold (rval));
1675 tree ar = default_conversion (array);
1676 tree ind = default_conversion (index);
1678 /* Do the same warning check as above, but only on the part that's
1679 syntactically the index and only if it is also semantically
1681 if (warn_char_subscripts
1682 && TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
1683 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1684 warning ("subscript has type `char'");
1686 /* Put the integer in IND to simplify error checking. */
1687 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1694 if (ar == error_mark_node)
1697 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
1698 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
1700 error ("subscripted value is neither array nor pointer");
1701 return error_mark_node;
1703 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1705 error ("array subscript is not an integer");
1706 return error_mark_node;
1709 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1714 /* Build an external reference to identifier ID. FUN indicates
1715 whether this will be used for a function call. */
1717 build_external_ref (tree id, int fun)
1720 tree decl = lookup_name (id);
1721 tree objc_ivar = objc_lookup_ivar (id);
1723 if (decl && decl != error_mark_node)
1725 /* Properly declared variable or function reference. */
1728 else if (decl != objc_ivar && !DECL_FILE_SCOPE_P (decl))
1730 warning ("local declaration of `%s' hides instance variable",
1731 IDENTIFIER_POINTER (id));
1740 /* Implicit function declaration. */
1741 ref = implicitly_declare (id);
1742 else if (decl == error_mark_node)
1743 /* Don't complain about something that's already been
1744 complained about. */
1745 return error_mark_node;
1748 undeclared_variable (id);
1749 return error_mark_node;
1752 if (TREE_TYPE (ref) == error_mark_node)
1753 return error_mark_node;
1755 if (TREE_DEPRECATED (ref))
1756 warn_deprecated_use (ref);
1758 if (!skip_evaluation)
1759 assemble_external (ref);
1760 TREE_USED (ref) = 1;
1762 if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
1764 if (!in_sizeof && !in_typeof)
1765 C_DECL_USED (ref) = 1;
1766 else if (DECL_INITIAL (ref) == 0
1767 && DECL_EXTERNAL (ref)
1768 && !TREE_PUBLIC (ref))
1769 record_maybe_used_decl (ref);
1772 if (TREE_CODE (ref) == CONST_DECL)
1774 ref = DECL_INITIAL (ref);
1775 TREE_CONSTANT (ref) = 1;
1776 TREE_INVARIANT (ref) = 1;
1778 else if (current_function_decl != 0
1779 && !DECL_FILE_SCOPE_P (current_function_decl)
1780 && (TREE_CODE (ref) == VAR_DECL
1781 || TREE_CODE (ref) == PARM_DECL
1782 || TREE_CODE (ref) == FUNCTION_DECL))
1784 tree context = decl_function_context (ref);
1786 if (context != 0 && context != current_function_decl)
1787 DECL_NONLOCAL (ref) = 1;
1793 /* Record details of decls possibly used inside sizeof or typeof. */
1794 struct maybe_used_decl
1798 /* The level seen at (in_sizeof + in_typeof). */
1800 /* The next one at this level or above, or NULL. */
1801 struct maybe_used_decl *next;
1804 static struct maybe_used_decl *maybe_used_decls;
1806 /* Record that DECL, an undefined static function reference seen
1807 inside sizeof or typeof, might be used if the operand of sizeof is
1808 a VLA type or the operand of typeof is a variably modified
1812 record_maybe_used_decl (tree decl)
1814 struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
1816 t->level = in_sizeof + in_typeof;
1817 t->next = maybe_used_decls;
1818 maybe_used_decls = t;
1821 /* Pop the stack of decls possibly used inside sizeof or typeof. If
1822 USED is false, just discard them. If it is true, mark them used
1823 (if no longer inside sizeof or typeof) or move them to the next
1824 level up (if still inside sizeof or typeof). */
1827 pop_maybe_used (bool used)
1829 struct maybe_used_decl *p = maybe_used_decls;
1830 int cur_level = in_sizeof + in_typeof;
1831 while (p && p->level > cur_level)
1836 C_DECL_USED (p->decl) = 1;
1838 p->level = cur_level;
1842 if (!used || cur_level == 0)
1843 maybe_used_decls = p;
1846 /* Return the result of sizeof applied to EXPR. */
1849 c_expr_sizeof_expr (struct c_expr expr)
1852 ret.value = c_sizeof (TREE_TYPE (expr.value));
1853 ret.original_code = ERROR_MARK;
1854 pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
1858 /* Return the result of sizeof applied to T, a structure for the type
1859 name passed to sizeof (rather than the type itself). */
1862 c_expr_sizeof_type (struct c_type_name *t)
1866 type = groktypename (t);
1867 ret.value = c_sizeof (type);
1868 ret.original_code = ERROR_MARK;
1869 pop_maybe_used (C_TYPE_VARIABLE_SIZE (type));
1873 /* Build a function call to function FUNCTION with parameters PARAMS.
1874 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1875 TREE_VALUE of each node is a parameter-expression.
1876 FUNCTION's data type may be a function type or a pointer-to-function. */
1879 build_function_call (tree function, tree params)
1881 tree fntype, fundecl = 0;
1882 tree coerced_params;
1883 tree name = NULL_TREE, result;
1886 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1887 STRIP_TYPE_NOPS (function);
1889 /* Convert anything with function type to a pointer-to-function. */
1890 if (TREE_CODE (function) == FUNCTION_DECL)
1892 name = DECL_NAME (function);
1894 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1895 (because calling an inline function does not mean the function
1896 needs to be separately compiled). */
1897 fntype = build_type_variant (TREE_TYPE (function),
1898 TREE_READONLY (function),
1899 TREE_THIS_VOLATILE (function));
1901 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1904 function = default_conversion (function);
1906 fntype = TREE_TYPE (function);
1908 if (TREE_CODE (fntype) == ERROR_MARK)
1909 return error_mark_node;
1911 if (!(TREE_CODE (fntype) == POINTER_TYPE
1912 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1914 error ("called object is not a function");
1915 return error_mark_node;
1918 if (fundecl && TREE_THIS_VOLATILE (fundecl))
1919 current_function_returns_abnormally = 1;
1921 /* fntype now gets the type of function pointed to. */
1922 fntype = TREE_TYPE (fntype);
1924 /* Check that the function is called through a compatible prototype.
1925 If it is not, replace the call by a trap, wrapped up in a compound
1926 expression if necessary. This has the nice side-effect to prevent
1927 the tree-inliner from generating invalid assignment trees which may
1928 blow up in the RTL expander later.
1930 ??? This doesn't work for Objective-C because objc_comptypes
1931 refuses to compare function prototypes, yet the compiler appears
1932 to build calls that are flagged as invalid by C's comptypes. */
1933 if (! c_dialect_objc ()
1934 && TREE_CODE (function) == NOP_EXPR
1935 && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
1936 && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
1937 && ! comptypes (fntype, TREE_TYPE (tem)))
1939 tree return_type = TREE_TYPE (fntype);
1940 tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
1943 /* This situation leads to run-time undefined behavior. We can't,
1944 therefore, simply error unless we can prove that all possible
1945 executions of the program must execute the code. */
1946 warning ("function called through a non-compatible type");
1948 /* We can, however, treat "undefined" any way we please.
1949 Call abort to encourage the user to fix the program. */
1950 inform ("if this code is reached, the program will abort");
1952 if (VOID_TYPE_P (return_type))
1958 if (AGGREGATE_TYPE_P (return_type))
1959 rhs = build_compound_literal (return_type,
1960 build_constructor (return_type,
1963 rhs = fold (build1 (NOP_EXPR, return_type, integer_zero_node));
1965 return build2 (COMPOUND_EXPR, return_type, trap, rhs);
1969 /* Convert the parameters to the types declared in the
1970 function prototype, or apply default promotions. */
1973 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
1975 /* Check that the arguments to the function are valid. */
1977 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
1979 result = build3 (CALL_EXPR, TREE_TYPE (fntype),
1980 function, coerced_params, NULL_TREE);
1981 TREE_SIDE_EFFECTS (result) = 1;
1983 if (require_constant_value)
1985 result = fold_initializer (result);
1987 if (TREE_CONSTANT (result)
1988 && (name == NULL_TREE
1989 || strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10) != 0))
1990 pedwarn_init ("initializer element is not constant");
1993 result = fold (result);
1995 if (VOID_TYPE_P (TREE_TYPE (result)))
1997 return require_complete_type (result);
2000 /* Convert the argument expressions in the list VALUES
2001 to the types in the list TYPELIST. The result is a list of converted
2002 argument expressions.
2004 If TYPELIST is exhausted, or when an element has NULL as its type,
2005 perform the default conversions.
2007 PARMLIST is the chain of parm decls for the function being called.
2008 It may be 0, if that info is not available.
2009 It is used only for generating error messages.
2011 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
2013 This is also where warnings about wrong number of args are generated.
2015 Both VALUES and the returned value are chains of TREE_LIST nodes
2016 with the elements of the list in the TREE_VALUE slots of those nodes. */
2019 convert_arguments (tree typelist, tree values, tree name, tree fundecl)
2021 tree typetail, valtail;
2025 /* Scan the given expressions and types, producing individual
2026 converted arguments and pushing them on RESULT in reverse order. */
2028 for (valtail = values, typetail = typelist, parmnum = 0;
2030 valtail = TREE_CHAIN (valtail), parmnum++)
2032 tree type = typetail ? TREE_VALUE (typetail) : 0;
2033 tree val = TREE_VALUE (valtail);
2035 if (type == void_type_node)
2038 error ("too many arguments to function `%s'",
2039 IDENTIFIER_POINTER (name));
2041 error ("too many arguments to function");
2045 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
2046 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
2047 to convert automatically to a pointer. */
2048 if (TREE_CODE (val) == NON_LVALUE_EXPR)
2049 val = TREE_OPERAND (val, 0);
2051 val = default_function_array_conversion (val);
2053 val = require_complete_type (val);
2057 /* Formal parm type is specified by a function prototype. */
2060 if (!COMPLETE_TYPE_P (type))
2062 error ("type of formal parameter %d is incomplete", parmnum + 1);
2067 /* Optionally warn about conversions that
2068 differ from the default conversions. */
2069 if (warn_conversion || warn_traditional)
2071 unsigned int formal_prec = TYPE_PRECISION (type);
2073 if (INTEGRAL_TYPE_P (type)
2074 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2075 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
2076 if (INTEGRAL_TYPE_P (type)
2077 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2078 warn_for_assignment ("%s as integer rather than complex due to prototype", (char *) 0, name, parmnum + 1);
2079 else if (TREE_CODE (type) == COMPLEX_TYPE
2080 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2081 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
2082 else if (TREE_CODE (type) == REAL_TYPE
2083 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2084 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
2085 else if (TREE_CODE (type) == COMPLEX_TYPE
2086 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2087 warn_for_assignment ("%s as complex rather than integer due to prototype", (char *) 0, name, parmnum + 1);
2088 else if (TREE_CODE (type) == REAL_TYPE
2089 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2090 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
2091 /* ??? At some point, messages should be written about
2092 conversions between complex types, but that's too messy
2094 else if (TREE_CODE (type) == REAL_TYPE
2095 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2097 /* Warn if any argument is passed as `float',
2098 since without a prototype it would be `double'. */
2099 if (formal_prec == TYPE_PRECISION (float_type_node))
2100 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
2102 /* Detect integer changing in width or signedness.
2103 These warnings are only activated with
2104 -Wconversion, not with -Wtraditional. */
2105 else if (warn_conversion && INTEGRAL_TYPE_P (type)
2106 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2108 tree would_have_been = default_conversion (val);
2109 tree type1 = TREE_TYPE (would_have_been);
2111 if (TREE_CODE (type) == ENUMERAL_TYPE
2112 && (TYPE_MAIN_VARIANT (type)
2113 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
2114 /* No warning if function asks for enum
2115 and the actual arg is that enum type. */
2117 else if (formal_prec != TYPE_PRECISION (type1))
2118 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
2119 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
2121 /* Don't complain if the formal parameter type
2122 is an enum, because we can't tell now whether
2123 the value was an enum--even the same enum. */
2124 else if (TREE_CODE (type) == ENUMERAL_TYPE)
2126 else if (TREE_CODE (val) == INTEGER_CST
2127 && int_fits_type_p (val, type))
2128 /* Change in signedness doesn't matter
2129 if a constant value is unaffected. */
2131 /* Likewise for a constant in a NOP_EXPR. */
2132 else if (TREE_CODE (val) == NOP_EXPR
2133 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
2134 && int_fits_type_p (TREE_OPERAND (val, 0), type))
2136 /* If the value is extended from a narrower
2137 unsigned type, it doesn't matter whether we
2138 pass it as signed or unsigned; the value
2139 certainly is the same either way. */
2140 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
2141 && TYPE_UNSIGNED (TREE_TYPE (val)))
2143 else if (TYPE_UNSIGNED (type))
2144 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
2146 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
2150 parmval = convert_for_assignment (type, val,
2151 (char *) 0, /* arg passing */
2152 fundecl, name, parmnum + 1);
2154 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
2155 && INTEGRAL_TYPE_P (type)
2156 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
2157 parmval = default_conversion (parmval);
2159 result = tree_cons (NULL_TREE, parmval, result);
2161 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
2162 && (TYPE_PRECISION (TREE_TYPE (val))
2163 < TYPE_PRECISION (double_type_node)))
2164 /* Convert `float' to `double'. */
2165 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
2167 /* Convert `short' and `char' to full-size `int'. */
2168 result = tree_cons (NULL_TREE, default_conversion (val), result);
2171 typetail = TREE_CHAIN (typetail);
2174 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
2177 error ("too few arguments to function `%s'",
2178 IDENTIFIER_POINTER (name));
2180 error ("too few arguments to function");
2183 return nreverse (result);
2186 /* This is the entry point used by the parser
2187 for binary operators in the input.
2188 In addition to constructing the expression,
2189 we check for operands that were written with other binary operators
2190 in a way that is likely to confuse the user. */
2193 parser_build_binary_op (enum tree_code code, struct c_expr arg1,
2196 struct c_expr result;
2198 enum tree_code code1 = arg1.original_code;
2199 enum tree_code code2 = arg2.original_code;
2201 result.value = build_binary_op (code, arg1.value, arg2.value, 1);
2202 result.original_code = code;
2204 if (TREE_CODE (result.value) == ERROR_MARK)
2207 /* Check for cases such as x+y<<z which users are likely
2209 if (warn_parentheses)
2211 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
2213 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2214 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2215 warning ("suggest parentheses around + or - inside shift");
2218 if (code == TRUTH_ORIF_EXPR)
2220 if (code1 == TRUTH_ANDIF_EXPR
2221 || code2 == TRUTH_ANDIF_EXPR)
2222 warning ("suggest parentheses around && within ||");
2225 if (code == BIT_IOR_EXPR)
2227 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
2228 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2229 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
2230 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2231 warning ("suggest parentheses around arithmetic in operand of |");
2232 /* Check cases like x|y==z */
2233 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
2234 warning ("suggest parentheses around comparison in operand of |");
2237 if (code == BIT_XOR_EXPR)
2239 if (code1 == BIT_AND_EXPR
2240 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2241 || code2 == BIT_AND_EXPR
2242 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2243 warning ("suggest parentheses around arithmetic in operand of ^");
2244 /* Check cases like x^y==z */
2245 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
2246 warning ("suggest parentheses around comparison in operand of ^");
2249 if (code == BIT_AND_EXPR)
2251 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2252 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2253 warning ("suggest parentheses around + or - in operand of &");
2254 /* Check cases like x&y==z */
2255 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
2256 warning ("suggest parentheses around comparison in operand of &");
2258 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
2259 if (TREE_CODE_CLASS (code) == '<'
2260 && (TREE_CODE_CLASS (code1) == '<'
2261 || TREE_CODE_CLASS (code2) == '<'))
2262 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
2266 unsigned_conversion_warning (result.value, arg1.value);
2267 unsigned_conversion_warning (result.value, arg2.value);
2268 overflow_warning (result.value);
2273 /* Return a tree for the difference of pointers OP0 and OP1.
2274 The resulting tree has type int. */
2277 pointer_diff (tree op0, tree op1)
2279 tree restype = ptrdiff_type_node;
2281 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2282 tree con0, con1, lit0, lit1;
2283 tree orig_op1 = op1;
2285 if (pedantic || warn_pointer_arith)
2287 if (TREE_CODE (target_type) == VOID_TYPE)
2288 pedwarn ("pointer of type `void *' used in subtraction");
2289 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2290 pedwarn ("pointer to a function used in subtraction");
2293 /* If the conversion to ptrdiff_type does anything like widening or
2294 converting a partial to an integral mode, we get a convert_expression
2295 that is in the way to do any simplifications.
2296 (fold-const.c doesn't know that the extra bits won't be needed.
2297 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2298 different mode in place.)
2299 So first try to find a common term here 'by hand'; we want to cover
2300 at least the cases that occur in legal static initializers. */
2301 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2302 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
2304 if (TREE_CODE (con0) == PLUS_EXPR)
2306 lit0 = TREE_OPERAND (con0, 1);
2307 con0 = TREE_OPERAND (con0, 0);
2310 lit0 = integer_zero_node;
2312 if (TREE_CODE (con1) == PLUS_EXPR)
2314 lit1 = TREE_OPERAND (con1, 1);
2315 con1 = TREE_OPERAND (con1, 0);
2318 lit1 = integer_zero_node;
2320 if (operand_equal_p (con0, con1, 0))
2327 /* First do the subtraction as integers;
2328 then drop through to build the divide operator.
2329 Do not do default conversions on the minus operator
2330 in case restype is a short type. */
2332 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2333 convert (restype, op1), 0);
2334 /* This generates an error if op1 is pointer to incomplete type. */
2335 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2336 error ("arithmetic on pointer to an incomplete type");
2338 /* This generates an error if op0 is pointer to incomplete type. */
2339 op1 = c_size_in_bytes (target_type);
2341 /* Divide by the size, in easiest possible way. */
2342 return fold (build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1)));
2345 /* Construct and perhaps optimize a tree representation
2346 for a unary operation. CODE, a tree_code, specifies the operation
2347 and XARG is the operand.
2348 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2349 the default promotions (such as from short to int).
2350 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2351 allows non-lvalues; this is only used to handle conversion of non-lvalue
2352 arrays to pointers in C99. */
2355 build_unary_op (enum tree_code code, tree xarg, int flag)
2357 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2360 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2362 int noconvert = flag;
2364 if (typecode == ERROR_MARK)
2365 return error_mark_node;
2366 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2367 typecode = INTEGER_TYPE;
2372 /* This is used for unary plus, because a CONVERT_EXPR
2373 is enough to prevent anybody from looking inside for
2374 associativity, but won't generate any code. */
2375 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2376 || typecode == COMPLEX_TYPE
2377 || typecode == VECTOR_TYPE))
2379 error ("wrong type argument to unary plus");
2380 return error_mark_node;
2382 else if (!noconvert)
2383 arg = default_conversion (arg);
2384 arg = non_lvalue (arg);
2388 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2389 || typecode == COMPLEX_TYPE
2390 || typecode == VECTOR_TYPE))
2392 error ("wrong type argument to unary minus");
2393 return error_mark_node;
2395 else if (!noconvert)
2396 arg = default_conversion (arg);
2400 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
2403 arg = default_conversion (arg);
2405 else if (typecode == COMPLEX_TYPE)
2409 pedwarn ("ISO C does not support `~' for complex conjugation");
2411 arg = default_conversion (arg);
2415 error ("wrong type argument to bit-complement");
2416 return error_mark_node;
2421 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
2423 error ("wrong type argument to abs");
2424 return error_mark_node;
2426 else if (!noconvert)
2427 arg = default_conversion (arg);
2431 /* Conjugating a real value is a no-op, but allow it anyway. */
2432 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2433 || typecode == COMPLEX_TYPE))
2435 error ("wrong type argument to conjugation");
2436 return error_mark_node;
2438 else if (!noconvert)
2439 arg = default_conversion (arg);
2442 case TRUTH_NOT_EXPR:
2443 if (typecode != INTEGER_TYPE
2444 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2445 && typecode != COMPLEX_TYPE
2446 /* These will convert to a pointer. */
2447 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2449 error ("wrong type argument to unary exclamation mark");
2450 return error_mark_node;
2452 arg = lang_hooks.truthvalue_conversion (arg);
2453 return invert_truthvalue (arg);
2459 if (TREE_CODE (arg) == COMPLEX_CST)
2460 return TREE_REALPART (arg);
2461 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2462 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2467 if (TREE_CODE (arg) == COMPLEX_CST)
2468 return TREE_IMAGPART (arg);
2469 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2470 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2472 return convert (TREE_TYPE (arg), integer_zero_node);
2474 case PREINCREMENT_EXPR:
2475 case POSTINCREMENT_EXPR:
2476 case PREDECREMENT_EXPR:
2477 case POSTDECREMENT_EXPR:
2479 /* Increment or decrement the real part of the value,
2480 and don't change the imaginary part. */
2481 if (typecode == COMPLEX_TYPE)
2486 pedwarn ("ISO C does not support `++' and `--' on complex types");
2488 arg = stabilize_reference (arg);
2489 real = build_unary_op (REALPART_EXPR, arg, 1);
2490 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2491 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
2492 build_unary_op (code, real, 1), imag);
2495 /* Report invalid types. */
2497 if (typecode != POINTER_TYPE
2498 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2500 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2501 error ("wrong type argument to increment");
2503 error ("wrong type argument to decrement");
2505 return error_mark_node;
2510 tree result_type = TREE_TYPE (arg);
2512 arg = get_unwidened (arg, 0);
2513 argtype = TREE_TYPE (arg);
2515 /* Compute the increment. */
2517 if (typecode == POINTER_TYPE)
2519 /* If pointer target is an undefined struct,
2520 we just cannot know how to do the arithmetic. */
2521 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2523 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2524 error ("increment of pointer to unknown structure");
2526 error ("decrement of pointer to unknown structure");
2528 else if ((pedantic || warn_pointer_arith)
2529 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2530 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2532 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2533 pedwarn ("wrong type argument to increment");
2535 pedwarn ("wrong type argument to decrement");
2538 inc = c_size_in_bytes (TREE_TYPE (result_type));
2541 inc = integer_one_node;
2543 inc = convert (argtype, inc);
2545 /* Complain about anything else that is not a true lvalue. */
2546 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2547 || code == POSTINCREMENT_EXPR)
2548 ? "invalid lvalue in increment"
2549 : "invalid lvalue in decrement")))
2550 return error_mark_node;
2552 /* Report a read-only lvalue. */
2553 if (TREE_READONLY (arg))
2554 readonly_error (arg,
2555 ((code == PREINCREMENT_EXPR
2556 || code == POSTINCREMENT_EXPR)
2557 ? "increment" : "decrement"));
2559 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2560 val = boolean_increment (code, arg);
2562 val = build2 (code, TREE_TYPE (arg), arg, inc);
2563 TREE_SIDE_EFFECTS (val) = 1;
2564 val = convert (result_type, val);
2565 if (TREE_CODE (val) != code)
2566 TREE_NO_WARNING (val) = 1;
2571 /* Note that this operation never does default_conversion. */
2573 /* Let &* cancel out to simplify resulting code. */
2574 if (TREE_CODE (arg) == INDIRECT_REF)
2576 /* Don't let this be an lvalue. */
2577 if (lvalue_p (TREE_OPERAND (arg, 0)))
2578 return non_lvalue (TREE_OPERAND (arg, 0));
2579 return TREE_OPERAND (arg, 0);
2582 /* For &x[y], return x+y */
2583 if (TREE_CODE (arg) == ARRAY_REF)
2585 if (!c_mark_addressable (TREE_OPERAND (arg, 0)))
2586 return error_mark_node;
2587 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
2588 TREE_OPERAND (arg, 1), 1);
2591 /* Anything not already handled and not a true memory reference
2592 or a non-lvalue array is an error. */
2593 else if (typecode != FUNCTION_TYPE && !flag
2594 && !lvalue_or_else (arg, "invalid lvalue in unary `&'"))
2595 return error_mark_node;
2597 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2598 argtype = TREE_TYPE (arg);
2600 /* If the lvalue is const or volatile, merge that into the type
2601 to which the address will point. Note that you can't get a
2602 restricted pointer by taking the address of something, so we
2603 only have to deal with `const' and `volatile' here. */
2604 if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
2605 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
2606 argtype = c_build_type_variant (argtype,
2607 TREE_READONLY (arg),
2608 TREE_THIS_VOLATILE (arg));
2610 if (!c_mark_addressable (arg))
2611 return error_mark_node;
2613 if (TREE_CODE (arg) == COMPONENT_REF
2614 && DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
2616 error ("attempt to take address of bit-field structure member `%D'",
2617 TREE_OPERAND (arg, 1));
2618 return error_mark_node;
2621 argtype = build_pointer_type (argtype);
2622 val = build1 (ADDR_EXPR, argtype, arg);
2624 if (TREE_CODE (arg) == COMPOUND_LITERAL_EXPR)
2625 TREE_INVARIANT (val) = TREE_CONSTANT (val) = 1;
2634 argtype = TREE_TYPE (arg);
2635 val = build1 (code, argtype, arg);
2636 return require_constant_value ? fold_initializer (val) : fold (val);
2639 /* Return nonzero if REF is an lvalue valid for this language.
2640 Lvalues can be assigned, unless their type has TYPE_READONLY.
2641 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
2646 enum tree_code code = TREE_CODE (ref);
2653 return lvalue_p (TREE_OPERAND (ref, 0));
2655 case COMPOUND_LITERAL_EXPR:
2665 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
2666 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
2669 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
2676 /* Return nonzero if REF is an lvalue valid for this language;
2677 otherwise, print an error message and return zero. */
2680 lvalue_or_else (tree ref, const char *msgid)
2682 int win = lvalue_p (ref);
2685 error ("%s", msgid);
2691 /* Warn about storing in something that is `const'. */
2694 readonly_error (tree arg, const char *msgid)
2696 if (TREE_CODE (arg) == COMPONENT_REF)
2698 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
2699 readonly_error (TREE_OPERAND (arg, 0), msgid);
2701 error ("%s of read-only member `%s'", _(msgid),
2702 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
2704 else if (TREE_CODE (arg) == VAR_DECL)
2705 error ("%s of read-only variable `%s'", _(msgid),
2706 IDENTIFIER_POINTER (DECL_NAME (arg)));
2708 error ("%s of read-only location", _(msgid));
2711 /* Mark EXP saying that we need to be able to take the
2712 address of it; it should not be allocated in a register.
2713 Returns true if successful. */
2716 c_mark_addressable (tree exp)
2721 switch (TREE_CODE (x))
2724 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
2726 error ("cannot take address of bit-field `%s'",
2727 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
2731 /* ... fall through ... */
2737 x = TREE_OPERAND (x, 0);
2740 case COMPOUND_LITERAL_EXPR:
2742 TREE_ADDRESSABLE (x) = 1;
2749 if (C_DECL_REGISTER (x)
2750 && DECL_NONLOCAL (x))
2752 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2754 error ("global register variable `%s' used in nested function",
2755 IDENTIFIER_POINTER (DECL_NAME (x)));
2758 pedwarn ("register variable `%s' used in nested function",
2759 IDENTIFIER_POINTER (DECL_NAME (x)));
2761 else if (C_DECL_REGISTER (x))
2763 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2765 error ("address of global register variable `%s' requested",
2766 IDENTIFIER_POINTER (DECL_NAME (x)));
2770 pedwarn ("address of register variable `%s' requested",
2771 IDENTIFIER_POINTER (DECL_NAME (x)));
2776 TREE_ADDRESSABLE (x) = 1;
2783 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
2786 build_conditional_expr (tree ifexp, tree op1, tree op2)
2790 enum tree_code code1;
2791 enum tree_code code2;
2792 tree result_type = NULL;
2793 tree orig_op1 = op1, orig_op2 = op2;
2795 ifexp = lang_hooks.truthvalue_conversion (default_conversion (ifexp));
2797 /* Promote both alternatives. */
2799 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
2800 op1 = default_conversion (op1);
2801 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
2802 op2 = default_conversion (op2);
2804 if (TREE_CODE (ifexp) == ERROR_MARK
2805 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
2806 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
2807 return error_mark_node;
2809 type1 = TREE_TYPE (op1);
2810 code1 = TREE_CODE (type1);
2811 type2 = TREE_TYPE (op2);
2812 code2 = TREE_CODE (type2);
2814 /* C90 does not permit non-lvalue arrays in conditional expressions.
2815 In C99 they will be pointers by now. */
2816 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
2818 error ("non-lvalue array in conditional expression");
2819 return error_mark_node;
2822 /* Quickly detect the usual case where op1 and op2 have the same type
2824 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
2827 result_type = type1;
2829 result_type = TYPE_MAIN_VARIANT (type1);
2831 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
2832 || code1 == COMPLEX_TYPE)
2833 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
2834 || code2 == COMPLEX_TYPE))
2836 result_type = common_type (type1, type2);
2838 /* If -Wsign-compare, warn here if type1 and type2 have
2839 different signedness. We'll promote the signed to unsigned
2840 and later code won't know it used to be different.
2841 Do this check on the original types, so that explicit casts
2842 will be considered, but default promotions won't. */
2843 if (warn_sign_compare && !skip_evaluation)
2845 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
2846 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
2848 if (unsigned_op1 ^ unsigned_op2)
2850 /* Do not warn if the result type is signed, since the
2851 signed type will only be chosen if it can represent
2852 all the values of the unsigned type. */
2853 if (! TYPE_UNSIGNED (result_type))
2855 /* Do not warn if the signed quantity is an unsuffixed
2856 integer literal (or some static constant expression
2857 involving such literals) and it is non-negative. */
2858 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
2859 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
2862 warning ("signed and unsigned type in conditional expression");
2866 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
2868 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
2869 pedwarn ("ISO C forbids conditional expr with only one void side");
2870 result_type = void_type_node;
2872 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
2874 if (comp_target_types (type1, type2, 1))
2875 result_type = common_pointer_type (type1, type2);
2876 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
2877 && TREE_CODE (orig_op1) != NOP_EXPR)
2878 result_type = qualify_type (type2, type1);
2879 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
2880 && TREE_CODE (orig_op2) != NOP_EXPR)
2881 result_type = qualify_type (type1, type2);
2882 else if (VOID_TYPE_P (TREE_TYPE (type1)))
2884 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
2885 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
2886 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
2887 TREE_TYPE (type2)));
2889 else if (VOID_TYPE_P (TREE_TYPE (type2)))
2891 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
2892 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
2893 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
2894 TREE_TYPE (type1)));
2898 pedwarn ("pointer type mismatch in conditional expression");
2899 result_type = build_pointer_type (void_type_node);
2902 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
2904 if (! integer_zerop (op2))
2905 pedwarn ("pointer/integer type mismatch in conditional expression");
2908 op2 = null_pointer_node;
2910 result_type = type1;
2912 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
2914 if (!integer_zerop (op1))
2915 pedwarn ("pointer/integer type mismatch in conditional expression");
2918 op1 = null_pointer_node;
2920 result_type = type2;
2925 if (flag_cond_mismatch)
2926 result_type = void_type_node;
2929 error ("type mismatch in conditional expression");
2930 return error_mark_node;
2934 /* Merge const and volatile flags of the incoming types. */
2936 = build_type_variant (result_type,
2937 TREE_READONLY (op1) || TREE_READONLY (op2),
2938 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
2940 if (result_type != TREE_TYPE (op1))
2941 op1 = convert_and_check (result_type, op1);
2942 if (result_type != TREE_TYPE (op2))
2943 op2 = convert_and_check (result_type, op2);
2945 if (TREE_CODE (ifexp) == INTEGER_CST)
2946 return non_lvalue (integer_zerop (ifexp) ? op2 : op1);
2948 return fold (build3 (COND_EXPR, result_type, ifexp, op1, op2));
2951 /* Return a compound expression that performs two expressions and
2952 returns the value of the second of them. */
2955 build_compound_expr (tree expr1, tree expr2)
2957 /* Convert arrays and functions to pointers. */
2958 expr2 = default_function_array_conversion (expr2);
2960 /* Don't let (0, 0) be null pointer constant. */
2961 if (integer_zerop (expr2))
2962 expr2 = non_lvalue (expr2);
2964 if (! TREE_SIDE_EFFECTS (expr1))
2966 /* The left-hand operand of a comma expression is like an expression
2967 statement: with -Wextra or -Wunused, we should warn if it doesn't have
2968 any side-effects, unless it was explicitly cast to (void). */
2969 if (warn_unused_value
2970 && ! (TREE_CODE (expr1) == CONVERT_EXPR
2971 && VOID_TYPE_P (TREE_TYPE (expr1))))
2972 warning ("left-hand operand of comma expression has no effect");
2975 /* With -Wunused, we should also warn if the left-hand operand does have
2976 side-effects, but computes a value which is not used. For example, in
2977 `foo() + bar(), baz()' the result of the `+' operator is not used,
2978 so we should issue a warning. */
2979 else if (warn_unused_value)
2980 warn_if_unused_value (expr1, input_location);
2982 return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
2985 /* Build an expression representing a cast to type TYPE of expression EXPR. */
2988 build_c_cast (tree type, tree expr)
2992 if (type == error_mark_node || expr == error_mark_node)
2993 return error_mark_node;
2995 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
2996 only in <protocol> qualifications. But when constructing cast expressions,
2997 the protocols do matter and must be kept around. */
2998 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
2999 return build1 (NOP_EXPR, type, expr);
3001 type = TYPE_MAIN_VARIANT (type);
3003 if (TREE_CODE (type) == ARRAY_TYPE)
3005 error ("cast specifies array type");
3006 return error_mark_node;
3009 if (TREE_CODE (type) == FUNCTION_TYPE)
3011 error ("cast specifies function type");
3012 return error_mark_node;
3015 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3019 if (TREE_CODE (type) == RECORD_TYPE
3020 || TREE_CODE (type) == UNION_TYPE)
3021 pedwarn ("ISO C forbids casting nonscalar to the same type");
3024 else if (TREE_CODE (type) == UNION_TYPE)
3027 value = default_function_array_conversion (value);
3029 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3030 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3031 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3039 pedwarn ("ISO C forbids casts to union type");
3040 t = digest_init (type,
3041 build_constructor (type,
3042 build_tree_list (field, value)),
3044 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3045 TREE_INVARIANT (t) = TREE_INVARIANT (value);
3048 error ("cast to union type from type not present in union");
3049 return error_mark_node;
3055 /* If casting to void, avoid the error that would come
3056 from default_conversion in the case of a non-lvalue array. */
3057 if (type == void_type_node)
3058 return build1 (CONVERT_EXPR, type, value);
3060 /* Convert functions and arrays to pointers,
3061 but don't convert any other types. */
3062 value = default_function_array_conversion (value);
3063 otype = TREE_TYPE (value);
3065 /* Optionally warn about potentially worrisome casts. */
3068 && TREE_CODE (type) == POINTER_TYPE
3069 && TREE_CODE (otype) == POINTER_TYPE)
3071 tree in_type = type;
3072 tree in_otype = otype;
3076 /* Check that the qualifiers on IN_TYPE are a superset of
3077 the qualifiers of IN_OTYPE. The outermost level of
3078 POINTER_TYPE nodes is uninteresting and we stop as soon
3079 as we hit a non-POINTER_TYPE node on either type. */
3082 in_otype = TREE_TYPE (in_otype);
3083 in_type = TREE_TYPE (in_type);
3085 /* GNU C allows cv-qualified function types. 'const'
3086 means the function is very pure, 'volatile' means it
3087 can't return. We need to warn when such qualifiers
3088 are added, not when they're taken away. */
3089 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3090 && TREE_CODE (in_type) == FUNCTION_TYPE)
3091 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3093 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3095 while (TREE_CODE (in_type) == POINTER_TYPE
3096 && TREE_CODE (in_otype) == POINTER_TYPE);
3099 warning ("cast adds new qualifiers to function type");
3102 /* There are qualifiers present in IN_OTYPE that are not
3103 present in IN_TYPE. */
3104 warning ("cast discards qualifiers from pointer target type");
3107 /* Warn about possible alignment problems. */
3108 if (STRICT_ALIGNMENT && warn_cast_align
3109 && TREE_CODE (type) == POINTER_TYPE
3110 && TREE_CODE (otype) == POINTER_TYPE
3111 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3112 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3113 /* Don't warn about opaque types, where the actual alignment
3114 restriction is unknown. */
3115 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3116 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3117 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3118 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3119 warning ("cast increases required alignment of target type");
3121 if (TREE_CODE (type) == INTEGER_TYPE
3122 && TREE_CODE (otype) == POINTER_TYPE
3123 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3124 && !TREE_CONSTANT (value))
3125 warning ("cast from pointer to integer of different size");
3127 if (warn_bad_function_cast
3128 && TREE_CODE (value) == CALL_EXPR
3129 && TREE_CODE (type) != TREE_CODE (otype))
3130 warning ("cast does not match function type");
3132 if (TREE_CODE (type) == POINTER_TYPE
3133 && TREE_CODE (otype) == INTEGER_TYPE
3134 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3135 /* Don't warn about converting any constant. */
3136 && !TREE_CONSTANT (value))
3137 warning ("cast to pointer from integer of different size");
3139 if (TREE_CODE (type) == POINTER_TYPE
3140 && TREE_CODE (otype) == POINTER_TYPE
3141 && TREE_CODE (expr) == ADDR_EXPR
3142 && DECL_P (TREE_OPERAND (expr, 0))
3143 && flag_strict_aliasing && warn_strict_aliasing
3144 && !VOID_TYPE_P (TREE_TYPE (type)))
3146 /* Casting the address of a decl to non void pointer. Warn
3147 if the cast breaks type based aliasing. */
3148 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3149 warning ("type-punning to incomplete type might break strict-aliasing rules");
3152 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
3153 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
3155 if (!alias_sets_conflict_p (set1, set2))
3156 warning ("dereferencing type-punned pointer will break strict-aliasing rules");
3157 else if (warn_strict_aliasing > 1
3158 && !alias_sets_might_conflict_p (set1, set2))
3159 warning ("dereferencing type-punned pointer might break strict-aliasing rules");
3163 /* If pedantic, warn for conversions between function and object
3164 pointer types, except for converting a null pointer constant
3165 to function pointer type. */
3167 && TREE_CODE (type) == POINTER_TYPE
3168 && TREE_CODE (otype) == POINTER_TYPE
3169 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3170 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3171 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3174 && TREE_CODE (type) == POINTER_TYPE
3175 && TREE_CODE (otype) == POINTER_TYPE
3176 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3177 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3178 && !(integer_zerop (value) && TREE_TYPE (otype) == void_type_node
3179 && TREE_CODE (expr) != NOP_EXPR))
3180 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3183 /* Replace a nonvolatile const static variable with its value. */
3184 if (optimize && TREE_CODE (value) == VAR_DECL)
3185 value = decl_constant_value (value);
3186 value = convert (type, value);
3188 /* Ignore any integer overflow caused by the cast. */
3189 if (TREE_CODE (value) == INTEGER_CST)
3191 if (EXPR_P (ovalue))
3192 /* If OVALUE had overflow set, then so will VALUE, so it
3193 is safe to overwrite. */
3194 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3196 TREE_OVERFLOW (value) = 0;
3198 if (TREE_CODE_CLASS (TREE_CODE (ovalue)) == 'c')
3199 /* Similarly, constant_overflow cannot have become
3201 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3205 /* Don't let (void *) (FOO *) 0 be a null pointer constant. */
3206 if (TREE_CODE (value) == INTEGER_CST
3207 && TREE_CODE (expr) == INTEGER_CST
3208 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3209 value = non_lvalue (value);
3211 /* Don't let a cast be an lvalue. */
3213 value = non_lvalue (value);
3218 /* Interpret a cast of expression EXPR to type TYPE. */
3220 c_cast_expr (struct c_type_name *type_name, tree expr)
3223 int saved_wsp = warn_strict_prototypes;
3225 /* This avoids warnings about unprototyped casts on
3226 integers. E.g. "#define SIG_DFL (void(*)())0". */
3227 if (TREE_CODE (expr) == INTEGER_CST)
3228 warn_strict_prototypes = 0;
3229 type = groktypename (type_name);
3230 warn_strict_prototypes = saved_wsp;
3232 return build_c_cast (type, expr);
3236 /* Build an assignment expression of lvalue LHS from value RHS.
3237 MODIFYCODE is the code for a binary operator that we use
3238 to combine the old value of LHS with RHS to get the new value.
3239 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3242 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3246 tree lhstype = TREE_TYPE (lhs);
3247 tree olhstype = lhstype;
3249 /* Types that aren't fully specified cannot be used in assignments. */
3250 lhs = require_complete_type (lhs);
3252 /* Avoid duplicate error messages from operands that had errors. */
3253 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3254 return error_mark_node;
3256 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3257 /* Do not use STRIP_NOPS here. We do not want an enumerator
3258 whose value is 0 to count as a null pointer constant. */
3259 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3260 rhs = TREE_OPERAND (rhs, 0);
3264 /* If a binary op has been requested, combine the old LHS value with the RHS
3265 producing the value we should actually store into the LHS. */
3267 if (modifycode != NOP_EXPR)
3269 lhs = stabilize_reference (lhs);
3270 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3273 if (!lvalue_or_else (lhs, "invalid lvalue in assignment"))
3274 return error_mark_node;
3276 /* Warn about storing in something that is `const'. */
3278 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3279 || ((TREE_CODE (lhstype) == RECORD_TYPE
3280 || TREE_CODE (lhstype) == UNION_TYPE)
3281 && C_TYPE_FIELDS_READONLY (lhstype)))
3282 readonly_error (lhs, "assignment");
3284 /* If storing into a structure or union member,
3285 it has probably been given type `int'.
3286 Compute the type that would go with
3287 the actual amount of storage the member occupies. */
3289 if (TREE_CODE (lhs) == COMPONENT_REF
3290 && (TREE_CODE (lhstype) == INTEGER_TYPE
3291 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3292 || TREE_CODE (lhstype) == REAL_TYPE
3293 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3294 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3296 /* If storing in a field that is in actuality a short or narrower than one,
3297 we must store in the field in its actual type. */
3299 if (lhstype != TREE_TYPE (lhs))
3301 lhs = copy_node (lhs);
3302 TREE_TYPE (lhs) = lhstype;
3305 /* Convert new value to destination type. */
3307 newrhs = convert_for_assignment (lhstype, newrhs, _("assignment"),
3308 NULL_TREE, NULL_TREE, 0);
3309 if (TREE_CODE (newrhs) == ERROR_MARK)
3310 return error_mark_node;
3314 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3315 TREE_SIDE_EFFECTS (result) = 1;
3317 /* If we got the LHS in a different type for storing in,
3318 convert the result back to the nominal type of LHS
3319 so that the value we return always has the same type
3320 as the LHS argument. */
3322 if (olhstype == TREE_TYPE (result))
3324 return convert_for_assignment (olhstype, result, _("assignment"),
3325 NULL_TREE, NULL_TREE, 0);
3328 /* Convert value RHS to type TYPE as preparation for an assignment
3329 to an lvalue of type TYPE.
3330 The real work of conversion is done by `convert'.
3331 The purpose of this function is to generate error messages
3332 for assignments that are not allowed in C.
3333 ERRTYPE is a string to use in error messages:
3334 "assignment", "return", etc. If it is null, this is parameter passing
3335 for a function call (and different error messages are output).
3337 FUNNAME is the name of the function being called,
3338 as an IDENTIFIER_NODE, or null.
3339 PARMNUM is the number of the argument, for printing in error messages. */
3342 convert_for_assignment (tree type, tree rhs, const char *errtype,
3343 tree fundecl, tree funname, int parmnum)
3345 enum tree_code codel = TREE_CODE (type);
3347 enum tree_code coder;
3349 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3350 /* Do not use STRIP_NOPS here. We do not want an enumerator
3351 whose value is 0 to count as a null pointer constant. */
3352 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3353 rhs = TREE_OPERAND (rhs, 0);
3355 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3356 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3357 rhs = default_conversion (rhs);
3358 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3359 rhs = decl_constant_value_for_broken_optimization (rhs);
3361 rhstype = TREE_TYPE (rhs);
3362 coder = TREE_CODE (rhstype);
3364 if (coder == ERROR_MARK)
3365 return error_mark_node;
3367 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3369 overflow_warning (rhs);
3370 /* Check for Objective-C protocols. This will automatically
3371 issue a warning if there are protocol violations. No need to
3372 use the return value. */
3373 if (c_dialect_objc ())
3374 objc_comptypes (type, rhstype, 0);
3378 if (coder == VOID_TYPE)
3380 error ("void value not ignored as it ought to be");
3381 return error_mark_node;
3383 /* A type converts to a reference to it.
3384 This code doesn't fully support references, it's just for the
3385 special case of va_start and va_copy. */
3386 if (codel == REFERENCE_TYPE
3387 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3389 if (!lvalue_p (rhs))
3391 error ("cannot pass rvalue to reference parameter");
3392 return error_mark_node;
3394 if (!c_mark_addressable (rhs))
3395 return error_mark_node;
3396 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3398 /* We already know that these two types are compatible, but they
3399 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3400 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3401 likely to be va_list, a typedef to __builtin_va_list, which
3402 is different enough that it will cause problems later. */
3403 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3404 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3406 rhs = build1 (NOP_EXPR, type, rhs);
3409 /* Some types can interconvert without explicit casts. */
3410 else if (codel == VECTOR_TYPE
3411 && vector_types_convertible_p (type, TREE_TYPE (rhs)))
3412 return convert (type, rhs);
3413 /* Arithmetic types all interconvert, and enum is treated like int. */
3414 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3415 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3416 || codel == BOOLEAN_TYPE)
3417 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3418 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3419 || coder == BOOLEAN_TYPE))
3420 return convert_and_check (type, rhs);
3422 /* Conversion to a transparent union from its member types.
3423 This applies only to function arguments. */
3424 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && ! errtype)
3427 tree marginal_memb_type = 0;
3429 for (memb_types = TYPE_FIELDS (type); memb_types;
3430 memb_types = TREE_CHAIN (memb_types))
3432 tree memb_type = TREE_TYPE (memb_types);
3434 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3435 TYPE_MAIN_VARIANT (rhstype)))
3438 if (TREE_CODE (memb_type) != POINTER_TYPE)
3441 if (coder == POINTER_TYPE)
3443 tree ttl = TREE_TYPE (memb_type);
3444 tree ttr = TREE_TYPE (rhstype);
3446 /* Any non-function converts to a [const][volatile] void *
3447 and vice versa; otherwise, targets must be the same.
3448 Meanwhile, the lhs target must have all the qualifiers of
3450 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3451 || comp_target_types (memb_type, rhstype, 0))
3453 /* If this type won't generate any warnings, use it. */
3454 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3455 || ((TREE_CODE (ttr) == FUNCTION_TYPE
3456 && TREE_CODE (ttl) == FUNCTION_TYPE)
3457 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3458 == TYPE_QUALS (ttr))
3459 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3460 == TYPE_QUALS (ttl))))
3463 /* Keep looking for a better type, but remember this one. */
3464 if (! marginal_memb_type)
3465 marginal_memb_type = memb_type;
3469 /* Can convert integer zero to any pointer type. */
3470 if (integer_zerop (rhs)
3471 || (TREE_CODE (rhs) == NOP_EXPR
3472 && integer_zerop (TREE_OPERAND (rhs, 0))))
3474 rhs = null_pointer_node;
3479 if (memb_types || marginal_memb_type)
3483 /* We have only a marginally acceptable member type;
3484 it needs a warning. */
3485 tree ttl = TREE_TYPE (marginal_memb_type);
3486 tree ttr = TREE_TYPE (rhstype);
3488 /* Const and volatile mean something different for function
3489 types, so the usual warnings are not appropriate. */
3490 if (TREE_CODE (ttr) == FUNCTION_TYPE
3491 && TREE_CODE (ttl) == FUNCTION_TYPE)
3493 /* Because const and volatile on functions are
3494 restrictions that say the function will not do
3495 certain things, it is okay to use a const or volatile
3496 function where an ordinary one is wanted, but not
3498 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3499 warn_for_assignment ("%s makes qualified function pointer from unqualified",
3500 errtype, funname, parmnum);
3502 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3503 warn_for_assignment ("%s discards qualifiers from pointer target type",
3508 if (pedantic && ! DECL_IN_SYSTEM_HEADER (fundecl))
3509 pedwarn ("ISO C prohibits argument conversion to union type");
3511 return build1 (NOP_EXPR, type, rhs);
3515 /* Conversions among pointers */
3516 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3517 && (coder == codel))
3519 tree ttl = TREE_TYPE (type);
3520 tree ttr = TREE_TYPE (rhstype);
3521 bool is_opaque_pointer;
3522 int target_cmp = 0; /* Cache comp_target_types () result. */
3524 /* Opaque pointers are treated like void pointers. */
3525 is_opaque_pointer = (targetm.vector_opaque_p (type)
3526 || targetm.vector_opaque_p (rhstype))
3527 && TREE_CODE (ttl) == VECTOR_TYPE
3528 && TREE_CODE (ttr) == VECTOR_TYPE;
3530 /* Any non-function converts to a [const][volatile] void *
3531 and vice versa; otherwise, targets must be the same.
3532 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3533 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3534 || (target_cmp = comp_target_types (type, rhstype, 0))
3535 || is_opaque_pointer
3536 || (c_common_unsigned_type (TYPE_MAIN_VARIANT (ttl))
3537 == c_common_unsigned_type (TYPE_MAIN_VARIANT (ttr))))
3540 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3543 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3544 which are not ANSI null ptr constants. */
3545 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3546 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3547 warn_for_assignment ("ISO C forbids %s between function pointer and `void *'",
3548 errtype, funname, parmnum);
3549 /* Const and volatile mean something different for function types,
3550 so the usual warnings are not appropriate. */
3551 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3552 && TREE_CODE (ttl) != FUNCTION_TYPE)
3554 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3555 warn_for_assignment ("%s discards qualifiers from pointer target type",
3556 errtype, funname, parmnum);
3557 /* If this is not a case of ignoring a mismatch in signedness,
3559 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3562 /* If there is a mismatch, do warn. */
3564 warn_for_assignment ("pointer targets in %s differ in signedness",
3565 errtype, funname, parmnum);
3567 else if (TREE_CODE (ttl) == FUNCTION_TYPE
3568 && TREE_CODE (ttr) == FUNCTION_TYPE)
3570 /* Because const and volatile on functions are restrictions
3571 that say the function will not do certain things,
3572 it is okay to use a const or volatile function
3573 where an ordinary one is wanted, but not vice-versa. */
3574 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3575 warn_for_assignment ("%s makes qualified function pointer from unqualified",
3576 errtype, funname, parmnum);
3580 warn_for_assignment ("%s from incompatible pointer type",
3581 errtype, funname, parmnum);
3582 return convert (type, rhs);
3584 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
3586 error ("invalid use of non-lvalue array");
3587 return error_mark_node;
3589 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
3591 /* An explicit constant 0 can convert to a pointer,
3592 or one that results from arithmetic, even including
3593 a cast to integer type. */
3594 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3596 ! (TREE_CODE (rhs) == NOP_EXPR
3597 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3598 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3599 && integer_zerop (TREE_OPERAND (rhs, 0))))
3600 warn_for_assignment ("%s makes pointer from integer without a cast",
3601 errtype, funname, parmnum);
3603 return convert (type, rhs);
3605 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
3607 warn_for_assignment ("%s makes integer from pointer without a cast",
3608 errtype, funname, parmnum);
3609 return convert (type, rhs);
3611 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3612 return convert (type, rhs);
3618 tree selector = objc_message_selector ();
3620 if (selector && parmnum > 2)
3621 error ("incompatible type for argument %d of `%s'",
3622 parmnum - 2, IDENTIFIER_POINTER (selector));
3624 error ("incompatible type for argument %d of `%s'",
3625 parmnum, IDENTIFIER_POINTER (funname));
3628 error ("incompatible type for argument %d of indirect function call",
3632 error ("incompatible types in %s", errtype);
3634 return error_mark_node;
3637 /* Convert VALUE for assignment into inlined parameter PARM. ARGNUM
3638 is used for error and waring reporting and indicates which argument
3639 is being processed. */
3642 c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
3646 /* If FN was prototyped, the value has been converted already
3647 in convert_arguments. */
3648 if (! value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
3651 type = TREE_TYPE (parm);
3652 ret = convert_for_assignment (type, value,
3653 (char *) 0 /* arg passing */, fn,
3654 DECL_NAME (fn), argnum);
3655 if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
3656 && INTEGRAL_TYPE_P (type)
3657 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
3658 ret = default_conversion (ret);
3662 /* Print a warning using MSGID.
3663 It gets OPNAME as its one parameter.
3664 if OPNAME is null and ARGNUM is 0, it is replaced by "passing arg of `FUNCTION'".
3665 Otherwise if OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
3666 FUNCTION and ARGNUM are handled specially if we are building an
3667 Objective-C selector. */
3670 warn_for_assignment (const char *msgid, const char *opname, tree function,
3675 tree selector = objc_message_selector ();
3678 if (selector && argnum > 2)
3680 function = selector;
3687 /* Function name is known; supply it. */
3688 const char *const argstring = _("passing arg of `%s'");
3689 new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
3690 + strlen (argstring) + 1 + 1);
3691 sprintf (new_opname, argstring,
3692 IDENTIFIER_POINTER (function));
3696 /* Function name unknown (call through ptr). */
3697 const char *const argnofun = _("passing arg of pointer to function");
3698 new_opname = (char *) alloca (strlen (argnofun) + 1 + 1);
3699 sprintf (new_opname, argnofun);
3704 /* Function name is known; supply it. */
3705 const char *const argstring = _("passing arg %d of `%s'");
3706 new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
3707 + strlen (argstring) + 1 + 25 /*%d*/ + 1);
3708 sprintf (new_opname, argstring, argnum,
3709 IDENTIFIER_POINTER (function));
3713 /* Function name unknown (call through ptr); just give arg number. */
3714 const char *const argnofun = _("passing arg %d of pointer to function");
3715 new_opname = (char *) alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1);
3716 sprintf (new_opname, argnofun, argnum);
3718 opname = new_opname;
3720 pedwarn (msgid, opname);
3723 /* If VALUE is a compound expr all of whose expressions are constant, then
3724 return its value. Otherwise, return error_mark_node.
3726 This is for handling COMPOUND_EXPRs as initializer elements
3727 which is allowed with a warning when -pedantic is specified. */
3730 valid_compound_expr_initializer (tree value, tree endtype)
3732 if (TREE_CODE (value) == COMPOUND_EXPR)
3734 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
3736 return error_mark_node;
3737 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
3740 else if (!initializer_constant_valid_p (value, endtype))
3741 return error_mark_node;
3746 /* Perform appropriate conversions on the initial value of a variable,
3747 store it in the declaration DECL,
3748 and print any error messages that are appropriate.
3749 If the init is invalid, store an ERROR_MARK. */
3752 store_init_value (tree decl, tree init)
3756 /* If variable's type was invalidly declared, just ignore it. */
3758 type = TREE_TYPE (decl);
3759 if (TREE_CODE (type) == ERROR_MARK)
3762 /* Digest the specified initializer into an expression. */
3764 value = digest_init (type, init, true, TREE_STATIC (decl));
3766 /* Store the expression if valid; else report error. */
3768 if (warn_traditional && !in_system_header
3769 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && ! TREE_STATIC (decl))
3770 warning ("traditional C rejects automatic aggregate initialization");
3772 DECL_INITIAL (decl) = value;
3774 /* ANSI wants warnings about out-of-range constant initializers. */
3775 STRIP_TYPE_NOPS (value);
3776 constant_expression_warning (value);
3778 /* Check if we need to set array size from compound literal size. */
3779 if (TREE_CODE (type) == ARRAY_TYPE
3780 && TYPE_DOMAIN (type) == 0
3781 && value != error_mark_node)
3783 tree inside_init = init;
3785 if (TREE_CODE (init) == NON_LVALUE_EXPR)
3786 inside_init = TREE_OPERAND (init, 0);
3787 inside_init = fold (inside_init);
3789 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
3791 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
3793 if (TYPE_DOMAIN (TREE_TYPE (decl)))
3795 /* For int foo[] = (int [3]){1}; we need to set array size
3796 now since later on array initializer will be just the
3797 brace enclosed list of the compound literal. */
3798 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
3800 layout_decl (decl, 0);
3806 /* Methods for storing and printing names for error messages. */
3808 /* Implement a spelling stack that allows components of a name to be pushed
3809 and popped. Each element on the stack is this structure. */
3821 #define SPELLING_STRING 1
3822 #define SPELLING_MEMBER 2
3823 #define SPELLING_BOUNDS 3
3825 static struct spelling *spelling; /* Next stack element (unused). */
3826 static struct spelling *spelling_base; /* Spelling stack base. */
3827 static int spelling_size; /* Size of the spelling stack. */
3829 /* Macros to save and restore the spelling stack around push_... functions.
3830 Alternative to SAVE_SPELLING_STACK. */
3832 #define SPELLING_DEPTH() (spelling - spelling_base)
3833 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
3835 /* Push an element on the spelling stack with type KIND and assign VALUE
3838 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
3840 int depth = SPELLING_DEPTH (); \
3842 if (depth >= spelling_size) \
3844 spelling_size += 10; \
3845 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
3847 RESTORE_SPELLING_DEPTH (depth); \
3850 spelling->kind = (KIND); \
3851 spelling->MEMBER = (VALUE); \
3855 /* Push STRING on the stack. Printed literally. */
3858 push_string (const char *string)
3860 PUSH_SPELLING (SPELLING_STRING, string, u.s);
3863 /* Push a member name on the stack. Printed as '.' STRING. */
3866 push_member_name (tree decl)
3868 const char *const string
3869 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
3870 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
3873 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
3876 push_array_bounds (int bounds)
3878 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
3881 /* Compute the maximum size in bytes of the printed spelling. */
3884 spelling_length (void)
3889 for (p = spelling_base; p < spelling; p++)
3891 if (p->kind == SPELLING_BOUNDS)
3894 size += strlen (p->u.s) + 1;
3900 /* Print the spelling to BUFFER and return it. */
3903 print_spelling (char *buffer)
3908 for (p = spelling_base; p < spelling; p++)
3909 if (p->kind == SPELLING_BOUNDS)
3911 sprintf (d, "[%d]", p->u.i);
3917 if (p->kind == SPELLING_MEMBER)
3919 for (s = p->u.s; (*d = *s++); d++)
3926 /* Issue an error message for a bad initializer component.
3927 MSGID identifies the message.
3928 The component name is taken from the spelling stack. */
3931 error_init (const char *msgid)
3935 error ("%s", _(msgid));
3936 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
3938 error ("(near initialization for `%s')", ofwhat);
3941 /* Issue a pedantic warning for a bad initializer component.
3942 MSGID identifies the message.
3943 The component name is taken from the spelling stack. */
3946 pedwarn_init (const char *msgid)
3950 pedwarn ("%s", _(msgid));
3951 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
3953 pedwarn ("(near initialization for `%s')", ofwhat);
3956 /* Issue a warning for a bad initializer component.
3957 MSGID identifies the message.
3958 The component name is taken from the spelling stack. */
3961 warning_init (const char *msgid)
3965 warning ("%s", _(msgid));
3966 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
3968 warning ("(near initialization for `%s')", ofwhat);
3971 /* If TYPE is an array type and EXPR is a parenthesized string
3972 constant, warn if pedantic that EXPR is being used to initialize an
3973 object of type TYPE. */
3976 maybe_warn_string_init (tree type, struct c_expr expr)
3979 && TREE_CODE (type) == ARRAY_TYPE
3980 && TREE_CODE (expr.value) == STRING_CST
3981 && expr.original_code != STRING_CST)
3982 pedwarn_init ("array initialized from parenthesized string constant");
3985 /* Digest the parser output INIT as an initializer for type TYPE.
3986 Return a C expression of type TYPE to represent the initial value.
3988 If INIT is a string constant, STRICT_STRING is true if it is
3989 unparenthesized or we should not warn here for it being parenthesized.
3990 For other types of INIT, STRICT_STRING is not used.
3992 REQUIRE_CONSTANT requests an error if non-constant initializers or
3993 elements are seen. */
3996 digest_init (tree type, tree init, bool strict_string, int require_constant)
3998 enum tree_code code = TREE_CODE (type);
3999 tree inside_init = init;
4001 if (type == error_mark_node
4002 || init == error_mark_node
4003 || TREE_TYPE (init) == error_mark_node)
4004 return error_mark_node;
4006 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4007 /* Do not use STRIP_NOPS here. We do not want an enumerator
4008 whose value is 0 to count as a null pointer constant. */
4009 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4010 inside_init = TREE_OPERAND (init, 0);
4012 inside_init = fold (inside_init);
4014 /* Initialization of an array of chars from a string constant
4015 optionally enclosed in braces. */
4017 if (code == ARRAY_TYPE && inside_init
4018 && TREE_CODE (inside_init) == STRING_CST)
4020 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4021 /* Note that an array could be both an array of character type
4022 and an array of wchar_t if wchar_t is signed char or unsigned
4024 bool char_array = (typ1 == char_type_node
4025 || typ1 == signed_char_type_node
4026 || typ1 == unsigned_char_type_node);
4027 bool wchar_array = !!comptypes (typ1, wchar_type_node);
4028 if (char_array || wchar_array)
4032 expr.value = inside_init;
4033 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4034 maybe_warn_string_init (type, expr);
4037 = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4040 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4041 TYPE_MAIN_VARIANT (type)))
4044 if (!wchar_array && !char_string)
4046 error_init ("char-array initialized from wide string");
4047 return error_mark_node;
4049 if (char_string && !char_array)
4051 error_init ("wchar_t-array initialized from non-wide string");
4052 return error_mark_node;
4055 TREE_TYPE (inside_init) = type;
4056 if (TYPE_DOMAIN (type) != 0
4057 && TYPE_SIZE (type) != 0
4058 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4059 /* Subtract 1 (or sizeof (wchar_t))
4060 because it's ok to ignore the terminating null char
4061 that is counted in the length of the constant. */
4062 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4063 TREE_STRING_LENGTH (inside_init)
4064 - ((TYPE_PRECISION (typ1)
4065 != TYPE_PRECISION (char_type_node))
4066 ? (TYPE_PRECISION (wchar_type_node)
4069 pedwarn_init ("initializer-string for array of chars is too long");
4073 else if (INTEGRAL_TYPE_P (typ1))
4075 error_init ("array of inappropriate type initialized "
4076 "from string constant");
4077 return error_mark_node;
4081 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4082 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4083 below and handle as a constructor. */
4084 if (code == VECTOR_TYPE
4085 && vector_types_convertible_p (TREE_TYPE (inside_init), type)
4086 && TREE_CONSTANT (inside_init))
4088 if (TREE_CODE (inside_init) == VECTOR_CST
4089 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4090 TYPE_MAIN_VARIANT (type)))
4093 return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
4096 /* Any type can be initialized
4097 from an expression of the same type, optionally with braces. */
4099 if (inside_init && TREE_TYPE (inside_init) != 0
4100 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4101 TYPE_MAIN_VARIANT (type))
4102 || (code == ARRAY_TYPE
4103 && comptypes (TREE_TYPE (inside_init), type))
4104 || (code == VECTOR_TYPE
4105 && comptypes (TREE_TYPE (inside_init), type))
4106 || (code == POINTER_TYPE
4107 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4108 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4110 || (code == POINTER_TYPE
4111 && TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE
4112 && comptypes (TREE_TYPE (inside_init),
4113 TREE_TYPE (type)))))
4115 if (code == POINTER_TYPE)
4117 inside_init = default_function_array_conversion (inside_init);
4119 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4121 error_init ("invalid use of non-lvalue array");
4122 return error_mark_node;
4126 if (code == VECTOR_TYPE)
4127 /* Although the types are compatible, we may require a
4129 inside_init = convert (type, inside_init);
4131 if (require_constant && !flag_isoc99
4132 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4134 /* As an extension, allow initializing objects with static storage
4135 duration with compound literals (which are then treated just as
4136 the brace enclosed list they contain). */
4137 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4138 inside_init = DECL_INITIAL (decl);
4141 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4142 && TREE_CODE (inside_init) != CONSTRUCTOR)
4144 error_init ("array initialized from non-constant array expression");
4145 return error_mark_node;
4148 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4149 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4151 /* Compound expressions can only occur here if -pedantic or
4152 -pedantic-errors is specified. In the later case, we always want
4153 an error. In the former case, we simply want a warning. */
4154 if (require_constant && pedantic
4155 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4158 = valid_compound_expr_initializer (inside_init,
4159 TREE_TYPE (inside_init));
4160 if (inside_init == error_mark_node)
4161 error_init ("initializer element is not constant");
4163 pedwarn_init ("initializer element is not constant");
4164 if (flag_pedantic_errors)
4165 inside_init = error_mark_node;
4167 else if (require_constant
4168 && !initializer_constant_valid_p (inside_init,
4169 TREE_TYPE (inside_init)))
4171 error_init ("initializer element is not constant");
4172 inside_init = error_mark_node;
4178 /* Handle scalar types, including conversions. */
4180 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4181 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
4182 || code == VECTOR_TYPE)
4184 /* Note that convert_for_assignment calls default_conversion
4185 for arrays and functions. We must not call it in the
4186 case where inside_init is a null pointer constant. */
4188 = convert_for_assignment (type, init, _("initialization"),
4189 NULL_TREE, NULL_TREE, 0);
4191 if (require_constant && ! TREE_CONSTANT (inside_init))
4193 error_init ("initializer element is not constant");
4194 inside_init = error_mark_node;
4196 else if (require_constant
4197 && !initializer_constant_valid_p (inside_init,
4198 TREE_TYPE (inside_init)))
4200 error_init ("initializer element is not computable at load time");
4201 inside_init = error_mark_node;
4207 /* Come here only for records and arrays. */
4209 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4211 error_init ("variable-sized object may not be initialized");
4212 return error_mark_node;
4215 error_init ("invalid initializer");
4216 return error_mark_node;
4219 /* Handle initializers that use braces. */
4221 /* Type of object we are accumulating a constructor for.
4222 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4223 static tree constructor_type;
4225 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4227 static tree constructor_fields;
4229 /* For an ARRAY_TYPE, this is the specified index
4230 at which to store the next element we get. */
4231 static tree constructor_index;
4233 /* For an ARRAY_TYPE, this is the maximum index. */
4234 static tree constructor_max_index;
4236 /* For a RECORD_TYPE, this is the first field not yet written out. */
4237 static tree constructor_unfilled_fields;
4239 /* For an ARRAY_TYPE, this is the index of the first element
4240 not yet written out. */
4241 static tree constructor_unfilled_index;
4243 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4244 This is so we can generate gaps between fields, when appropriate. */
4245 static tree constructor_bit_index;
4247 /* If we are saving up the elements rather than allocating them,
4248 this is the list of elements so far (in reverse order,
4249 most recent first). */
4250 static tree constructor_elements;
4252 /* 1 if constructor should be incrementally stored into a constructor chain,
4253 0 if all the elements should be kept in AVL tree. */
4254 static int constructor_incremental;
4256 /* 1 if so far this constructor's elements are all compile-time constants. */
4257 static int constructor_constant;
4259 /* 1 if so far this constructor's elements are all valid address constants. */
4260 static int constructor_simple;
4262 /* 1 if this constructor is erroneous so far. */
4263 static int constructor_erroneous;
4265 /* Structure for managing pending initializer elements, organized as an
4270 struct init_node *left, *right;
4271 struct init_node *parent;
4277 /* Tree of pending elements at this constructor level.
4278 These are elements encountered out of order
4279 which belong at places we haven't reached yet in actually
4281 Will never hold tree nodes across GC runs. */
4282 static struct init_node *constructor_pending_elts;
4284 /* The SPELLING_DEPTH of this constructor. */
4285 static int constructor_depth;
4287 /* 0 if implicitly pushing constructor levels is allowed. */
4288 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4290 /* DECL node for which an initializer is being read.
4291 0 means we are reading a constructor expression
4292 such as (struct foo) {...}. */
4293 static tree constructor_decl;
4295 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4296 static const char *constructor_asmspec;
4298 /* Nonzero if this is an initializer for a top-level decl. */
4299 static int constructor_top_level;
4301 /* Nonzero if there were any member designators in this initializer. */
4302 static int constructor_designated;
4304 /* Nesting depth of designator list. */
4305 static int designator_depth;
4307 /* Nonzero if there were diagnosed errors in this designator list. */
4308 static int designator_errorneous;
4311 /* This stack has a level for each implicit or explicit level of
4312 structuring in the initializer, including the outermost one. It
4313 saves the values of most of the variables above. */
4315 struct constructor_range_stack;
4317 struct constructor_stack
4319 struct constructor_stack *next;
4324 tree unfilled_index;
4325 tree unfilled_fields;
4328 struct init_node *pending_elts;
4331 /* If value nonzero, this value should replace the entire
4332 constructor at this level. */
4333 struct c_expr replacement_value;
4334 struct constructor_range_stack *range_stack;
4344 struct constructor_stack *constructor_stack;
4346 /* This stack represents designators from some range designator up to
4347 the last designator in the list. */
4349 struct constructor_range_stack
4351 struct constructor_range_stack *next, *prev;
4352 struct constructor_stack *stack;
4359 struct constructor_range_stack *constructor_range_stack;
4361 /* This stack records separate initializers that are nested.
4362 Nested initializers can't happen in ANSI C, but GNU C allows them
4363 in cases like { ... (struct foo) { ... } ... }. */
4365 struct initializer_stack
4367 struct initializer_stack *next;
4369 const char *asmspec;
4370 struct constructor_stack *constructor_stack;
4371 struct constructor_range_stack *constructor_range_stack;
4373 struct spelling *spelling;
4374 struct spelling *spelling_base;
4377 char require_constant_value;
4378 char require_constant_elements;
4381 struct initializer_stack *initializer_stack;
4383 /* Prepare to parse and output the initializer for variable DECL. */
4386 start_init (tree decl, tree asmspec_tree, int top_level)
4389 struct initializer_stack *p = XNEW (struct initializer_stack);
4390 const char *asmspec = 0;
4393 asmspec = TREE_STRING_POINTER (asmspec_tree);
4395 p->decl = constructor_decl;
4396 p->asmspec = constructor_asmspec;
4397 p->require_constant_value = require_constant_value;
4398 p->require_constant_elements = require_constant_elements;
4399 p->constructor_stack = constructor_stack;
4400 p->constructor_range_stack = constructor_range_stack;
4401 p->elements = constructor_elements;
4402 p->spelling = spelling;
4403 p->spelling_base = spelling_base;
4404 p->spelling_size = spelling_size;
4405 p->top_level = constructor_top_level;
4406 p->next = initializer_stack;
4407 initializer_stack = p;
4409 constructor_decl = decl;
4410 constructor_asmspec = asmspec;
4411 constructor_designated = 0;
4412 constructor_top_level = top_level;
4416 require_constant_value = TREE_STATIC (decl);
4417 require_constant_elements
4418 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4419 /* For a scalar, you can always use any value to initialize,
4420 even within braces. */
4421 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4422 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4423 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4424 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4425 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4429 require_constant_value = 0;
4430 require_constant_elements = 0;
4431 locus = "(anonymous)";
4434 constructor_stack = 0;
4435 constructor_range_stack = 0;
4437 missing_braces_mentioned = 0;
4441 RESTORE_SPELLING_DEPTH (0);
4444 push_string (locus);
4450 struct initializer_stack *p = initializer_stack;
4452 /* Free the whole constructor stack of this initializer. */
4453 while (constructor_stack)
4455 struct constructor_stack *q = constructor_stack;
4456 constructor_stack = q->next;
4460 gcc_assert (!constructor_range_stack);
4462 /* Pop back to the data of the outer initializer (if any). */
4463 free (spelling_base);
4465 constructor_decl = p->decl;
4466 constructor_asmspec = p->asmspec;
4467 require_constant_value = p->require_constant_value;
4468 require_constant_elements = p->require_constant_elements;
4469 constructor_stack = p->constructor_stack;
4470 constructor_range_stack = p->constructor_range_stack;
4471 constructor_elements = p->elements;
4472 spelling = p->spelling;
4473 spelling_base = p->spelling_base;
4474 spelling_size = p->spelling_size;
4475 constructor_top_level = p->top_level;
4476 initializer_stack = p->next;
4480 /* Call here when we see the initializer is surrounded by braces.
4481 This is instead of a call to push_init_level;
4482 it is matched by a call to pop_init_level.
4484 TYPE is the type to initialize, for a constructor expression.
4485 For an initializer for a decl, TYPE is zero. */
4488 really_start_incremental_init (tree type)
4490 struct constructor_stack *p = XNEW (struct constructor_stack);
4493 type = TREE_TYPE (constructor_decl);
4495 if (targetm.vector_opaque_p (type))
4496 error ("opaque vector types cannot be initialized");
4498 p->type = constructor_type;
4499 p->fields = constructor_fields;
4500 p->index = constructor_index;
4501 p->max_index = constructor_max_index;
4502 p->unfilled_index = constructor_unfilled_index;
4503 p->unfilled_fields = constructor_unfilled_fields;
4504 p->bit_index = constructor_bit_index;
4505 p->elements = constructor_elements;
4506 p->constant = constructor_constant;
4507 p->simple = constructor_simple;
4508 p->erroneous = constructor_erroneous;
4509 p->pending_elts = constructor_pending_elts;
4510 p->depth = constructor_depth;
4511 p->replacement_value.value = 0;
4512 p->replacement_value.original_code = ERROR_MARK;
4516 p->incremental = constructor_incremental;
4517 p->designated = constructor_designated;
4519 constructor_stack = p;
4521 constructor_constant = 1;
4522 constructor_simple = 1;
4523 constructor_depth = SPELLING_DEPTH ();
4524 constructor_elements = 0;
4525 constructor_pending_elts = 0;
4526 constructor_type = type;
4527 constructor_incremental = 1;
4528 constructor_designated = 0;
4529 designator_depth = 0;
4530 designator_errorneous = 0;
4532 if (TREE_CODE (constructor_type) == RECORD_TYPE
4533 || TREE_CODE (constructor_type) == UNION_TYPE)
4535 constructor_fields = TYPE_FIELDS (constructor_type);
4536 /* Skip any nameless bit fields at the beginning. */
4537 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4538 && DECL_NAME (constructor_fields) == 0)
4539 constructor_fields = TREE_CHAIN (constructor_fields);
4541 constructor_unfilled_fields = constructor_fields;
4542 constructor_bit_index = bitsize_zero_node;
4544 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4546 if (TYPE_DOMAIN (constructor_type))
4548 constructor_max_index
4549 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4551 /* Detect non-empty initializations of zero-length arrays. */
4552 if (constructor_max_index == NULL_TREE
4553 && TYPE_SIZE (constructor_type))
4554 constructor_max_index = build_int_cst (NULL_TREE, -1);
4556 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4557 to initialize VLAs will cause a proper error; avoid tree
4558 checking errors as well by setting a safe value. */
4559 if (constructor_max_index
4560 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4561 constructor_max_index = build_int_cst (NULL_TREE, -1);
4564 = convert (bitsizetype,
4565 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4568 constructor_index = bitsize_zero_node;
4570 constructor_unfilled_index = constructor_index;
4572 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4574 /* Vectors are like simple fixed-size arrays. */
4575 constructor_max_index =
4576 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4577 constructor_index = convert (bitsizetype, bitsize_zero_node);
4578 constructor_unfilled_index = constructor_index;
4582 /* Handle the case of int x = {5}; */
4583 constructor_fields = constructor_type;
4584 constructor_unfilled_fields = constructor_type;
4588 /* Push down into a subobject, for initialization.
4589 If this is for an explicit set of braces, IMPLICIT is 0.
4590 If it is because the next element belongs at a lower level,
4591 IMPLICIT is 1 (or 2 if the push is because of designator list). */
4594 push_init_level (int implicit)
4596 struct constructor_stack *p;
4597 tree value = NULL_TREE;
4599 /* If we've exhausted any levels that didn't have braces,
4601 while (constructor_stack->implicit)
4603 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4604 || TREE_CODE (constructor_type) == UNION_TYPE)
4605 && constructor_fields == 0)
4606 process_init_element (pop_init_level (1));
4607 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4608 && constructor_max_index
4609 && tree_int_cst_lt (constructor_max_index, constructor_index))
4610 process_init_element (pop_init_level (1));
4615 /* Unless this is an explicit brace, we need to preserve previous
4619 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4620 || TREE_CODE (constructor_type) == UNION_TYPE)
4621 && constructor_fields)
4622 value = find_init_member (constructor_fields);
4623 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4624 value = find_init_member (constructor_index);
4627 p = XNEW (struct constructor_stack);
4628 p->type = constructor_type;
4629 p->fields = constructor_fields;
4630 p->index = constructor_index;
4631 p->max_index = constructor_max_index;
4632 p->unfilled_index = constructor_unfilled_index;
4633 p->unfilled_fields = constructor_unfilled_fields;
4634 p->bit_index = constructor_bit_index;
4635 p->elements = constructor_elements;
4636 p->constant = constructor_constant;
4637 p->simple = constructor_simple;
4638 p->erroneous = constructor_erroneous;
4639 p->pending_elts = constructor_pending_elts;
4640 p->depth = constructor_depth;
4641 p->replacement_value.value = 0;
4642 p->replacement_value.original_code = ERROR_MARK;
4643 p->implicit = implicit;
4645 p->incremental = constructor_incremental;
4646 p->designated = constructor_designated;
4647 p->next = constructor_stack;
4649 constructor_stack = p;
4651 constructor_constant = 1;
4652 constructor_simple = 1;
4653 constructor_depth = SPELLING_DEPTH ();
4654 constructor_elements = 0;
4655 constructor_incremental = 1;
4656 constructor_designated = 0;
4657 constructor_pending_elts = 0;
4660 p->range_stack = constructor_range_stack;
4661 constructor_range_stack = 0;
4662 designator_depth = 0;
4663 designator_errorneous = 0;
4666 /* Don't die if an entire brace-pair level is superfluous
4667 in the containing level. */
4668 if (constructor_type == 0)
4670 else if (TREE_CODE (constructor_type) == RECORD_TYPE
4671 || TREE_CODE (constructor_type) == UNION_TYPE)
4673 /* Don't die if there are extra init elts at the end. */
4674 if (constructor_fields == 0)
4675 constructor_type = 0;
4678 constructor_type = TREE_TYPE (constructor_fields);
4679 push_member_name (constructor_fields);
4680 constructor_depth++;
4683 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4685 constructor_type = TREE_TYPE (constructor_type);
4686 push_array_bounds (tree_low_cst (constructor_index, 0));
4687 constructor_depth++;
4690 if (constructor_type == 0)
4692 error_init ("extra brace group at end of initializer");
4693 constructor_fields = 0;
4694 constructor_unfilled_fields = 0;
4698 if (value && TREE_CODE (value) == CONSTRUCTOR)
4700 constructor_constant = TREE_CONSTANT (value);
4701 constructor_simple = TREE_STATIC (value);
4702 constructor_elements = CONSTRUCTOR_ELTS (value);
4703 if (constructor_elements
4704 && (TREE_CODE (constructor_type) == RECORD_TYPE
4705 || TREE_CODE (constructor_type) == ARRAY_TYPE))
4706 set_nonincremental_init ();
4709 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
4711 missing_braces_mentioned = 1;
4712 warning_init ("missing braces around initializer");
4715 if (TREE_CODE (constructor_type) == RECORD_TYPE
4716 || TREE_CODE (constructor_type) == UNION_TYPE)
4718 constructor_fields = TYPE_FIELDS (constructor_type);
4719 /* Skip any nameless bit fields at the beginning. */
4720 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4721 && DECL_NAME (constructor_fields) == 0)
4722 constructor_fields = TREE_CHAIN (constructor_fields);
4724 constructor_unfilled_fields = constructor_fields;
4725 constructor_bit_index = bitsize_zero_node;
4727 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4729 /* Vectors are like simple fixed-size arrays. */
4730 constructor_max_index =
4731 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4732 constructor_index = convert (bitsizetype, integer_zero_node);
4733 constructor_unfilled_index = constructor_index;
4735 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4737 if (TYPE_DOMAIN (constructor_type))
4739 constructor_max_index
4740 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4742 /* Detect non-empty initializations of zero-length arrays. */
4743 if (constructor_max_index == NULL_TREE
4744 && TYPE_SIZE (constructor_type))
4745 constructor_max_index = build_int_cst (NULL_TREE, -1);
4747 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4748 to initialize VLAs will cause a proper error; avoid tree
4749 checking errors as well by setting a safe value. */
4750 if (constructor_max_index
4751 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4752 constructor_max_index = build_int_cst (NULL_TREE, -1);
4755 = convert (bitsizetype,
4756 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4759 constructor_index = bitsize_zero_node;
4761 constructor_unfilled_index = constructor_index;
4762 if (value && TREE_CODE (value) == STRING_CST)
4764 /* We need to split the char/wchar array into individual
4765 characters, so that we don't have to special case it
4767 set_nonincremental_init_from_string (value);
4772 warning_init ("braces around scalar initializer");
4773 constructor_fields = constructor_type;
4774 constructor_unfilled_fields = constructor_type;
4778 /* At the end of an implicit or explicit brace level,
4779 finish up that level of constructor. If a single expression
4780 with redundant braces initialized that level, return the
4781 c_expr structure for that expression. Otherwise, the original_code
4782 element is set to ERROR_MARK.
4783 If we were outputting the elements as they are read, return 0 as the value
4784 from inner levels (process_init_element ignores that),
4785 but return error_mark_node as the value from the outermost level
4786 (that's what we want to put in DECL_INITIAL).
4787 Otherwise, return a CONSTRUCTOR expression as the value. */
4790 pop_init_level (int implicit)
4792 struct constructor_stack *p;
4795 ret.original_code = ERROR_MARK;
4799 /* When we come to an explicit close brace,
4800 pop any inner levels that didn't have explicit braces. */
4801 while (constructor_stack->implicit)
4802 process_init_element (pop_init_level (1));
4804 gcc_assert (!constructor_range_stack);
4807 /* Now output all pending elements. */
4808 constructor_incremental = 1;
4809 output_pending_init_elements (1);
4811 p = constructor_stack;
4813 /* Error for initializing a flexible array member, or a zero-length
4814 array member in an inappropriate context. */
4815 if (constructor_type && constructor_fields
4816 && TREE_CODE (constructor_type) == ARRAY_TYPE
4817 && TYPE_DOMAIN (constructor_type)
4818 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
4820 /* Silently discard empty initializations. The parser will
4821 already have pedwarned for empty brackets. */
4822 if (integer_zerop (constructor_unfilled_index))
4823 constructor_type = NULL_TREE;
4826 gcc_assert (!TYPE_SIZE (constructor_type));
4828 if (constructor_depth > 2)
4829 error_init ("initialization of flexible array member in a nested context");
4831 pedwarn_init ("initialization of a flexible array member");
4833 /* We have already issued an error message for the existence
4834 of a flexible array member not at the end of the structure.
4835 Discard the initializer so that we do not abort later. */
4836 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
4837 constructor_type = NULL_TREE;
4841 /* Warn when some struct elements are implicitly initialized to zero. */
4842 if (warn_missing_field_initializers
4844 && TREE_CODE (constructor_type) == RECORD_TYPE
4845 && constructor_unfilled_fields)
4847 /* Do not warn for flexible array members or zero-length arrays. */
4848 while (constructor_unfilled_fields
4849 && (! DECL_SIZE (constructor_unfilled_fields)
4850 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
4851 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
4853 /* Do not warn if this level of the initializer uses member
4854 designators; it is likely to be deliberate. */
4855 if (constructor_unfilled_fields && !constructor_designated)
4857 push_member_name (constructor_unfilled_fields);
4858 warning_init ("missing initializer");
4859 RESTORE_SPELLING_DEPTH (constructor_depth);
4863 /* Pad out the end of the structure. */
4864 if (p->replacement_value.value)
4865 /* If this closes a superfluous brace pair,
4866 just pass out the element between them. */
4867 ret = p->replacement_value;
4868 else if (constructor_type == 0)
4870 else if (TREE_CODE (constructor_type) != RECORD_TYPE
4871 && TREE_CODE (constructor_type) != UNION_TYPE
4872 && TREE_CODE (constructor_type) != ARRAY_TYPE
4873 && TREE_CODE (constructor_type) != VECTOR_TYPE)
4875 /* A nonincremental scalar initializer--just return
4876 the element, after verifying there is just one. */
4877 if (constructor_elements == 0)
4879 if (!constructor_erroneous)
4880 error_init ("empty scalar initializer");
4881 ret.value = error_mark_node;
4883 else if (TREE_CHAIN (constructor_elements) != 0)
4885 error_init ("extra elements in scalar initializer");
4886 ret.value = TREE_VALUE (constructor_elements);
4889 ret.value = TREE_VALUE (constructor_elements);
4893 if (constructor_erroneous)
4894 ret.value = error_mark_node;
4897 ret.value = build_constructor (constructor_type,
4898 nreverse (constructor_elements));
4899 if (constructor_constant)
4900 TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
4901 if (constructor_constant && constructor_simple)
4902 TREE_STATIC (ret.value) = 1;
4906 constructor_type = p->type;
4907 constructor_fields = p->fields;
4908 constructor_index = p->index;
4909 constructor_max_index = p->max_index;
4910 constructor_unfilled_index = p->unfilled_index;
4911 constructor_unfilled_fields = p->unfilled_fields;
4912 constructor_bit_index = p->bit_index;
4913 constructor_elements = p->elements;
4914 constructor_constant = p->constant;
4915 constructor_simple = p->simple;
4916 constructor_erroneous = p->erroneous;
4917 constructor_incremental = p->incremental;
4918 constructor_designated = p->designated;
4919 constructor_pending_elts = p->pending_elts;
4920 constructor_depth = p->depth;
4922 constructor_range_stack = p->range_stack;
4923 RESTORE_SPELLING_DEPTH (constructor_depth);
4925 constructor_stack = p->next;
4930 if (constructor_stack == 0)
4932 ret.value = error_mark_node;
4940 /* Common handling for both array range and field name designators.
4941 ARRAY argument is nonzero for array ranges. Returns zero for success. */
4944 set_designator (int array)
4947 enum tree_code subcode;
4949 /* Don't die if an entire brace-pair level is superfluous
4950 in the containing level. */
4951 if (constructor_type == 0)
4954 /* If there were errors in this designator list already, bail out
4956 if (designator_errorneous)
4959 if (!designator_depth)
4961 gcc_assert (!constructor_range_stack);
4963 /* Designator list starts at the level of closest explicit
4965 while (constructor_stack->implicit)
4966 process_init_element (pop_init_level (1));
4967 constructor_designated = 1;
4971 if (constructor_no_implicit)
4973 error_init ("initialization designators may not nest");
4977 switch (TREE_CODE (constructor_type))
4981 subtype = TREE_TYPE (constructor_fields);
4982 if (subtype != error_mark_node)
4983 subtype = TYPE_MAIN_VARIANT (subtype);
4986 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
4992 subcode = TREE_CODE (subtype);
4993 if (array && subcode != ARRAY_TYPE)
4995 error_init ("array index in non-array initializer");
4998 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5000 error_init ("field name not in record or union initializer");
5004 constructor_designated = 1;
5005 push_init_level (2);
5009 /* If there are range designators in designator list, push a new designator
5010 to constructor_range_stack. RANGE_END is end of such stack range or
5011 NULL_TREE if there is no range designator at this level. */
5014 push_range_stack (tree range_end)
5016 struct constructor_range_stack *p;
5018 p = GGC_NEW (struct constructor_range_stack);
5019 p->prev = constructor_range_stack;
5021 p->fields = constructor_fields;
5022 p->range_start = constructor_index;
5023 p->index = constructor_index;
5024 p->stack = constructor_stack;
5025 p->range_end = range_end;
5026 if (constructor_range_stack)
5027 constructor_range_stack->next = p;
5028 constructor_range_stack = p;
5031 /* Within an array initializer, specify the next index to be initialized.
5032 FIRST is that index. If LAST is nonzero, then initialize a range
5033 of indices, running from FIRST through LAST. */
5036 set_init_index (tree first, tree last)
5038 if (set_designator (1))
5041 designator_errorneous = 1;
5043 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5044 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5046 error_init ("array index in initializer not of integer type");
5050 while ((TREE_CODE (first) == NOP_EXPR
5051 || TREE_CODE (first) == CONVERT_EXPR
5052 || TREE_CODE (first) == NON_LVALUE_EXPR)
5053 && (TYPE_MODE (TREE_TYPE (first))
5054 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5055 first = TREE_OPERAND (first, 0);
5058 while ((TREE_CODE (last) == NOP_EXPR
5059 || TREE_CODE (last) == CONVERT_EXPR
5060 || TREE_CODE (last) == NON_LVALUE_EXPR)
5061 && (TYPE_MODE (TREE_TYPE (last))
5062 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5063 last = TREE_OPERAND (last, 0);
5065 if (TREE_CODE (first) != INTEGER_CST)
5066 error_init ("nonconstant array index in initializer");
5067 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5068 error_init ("nonconstant array index in initializer");
5069 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5070 error_init ("array index in non-array initializer");
5071 else if (tree_int_cst_sgn (first) == -1)
5072 error_init ("array index in initializer exceeds array bounds");
5073 else if (constructor_max_index
5074 && tree_int_cst_lt (constructor_max_index, first))
5075 error_init ("array index in initializer exceeds array bounds");
5078 constructor_index = convert (bitsizetype, first);
5082 if (tree_int_cst_equal (first, last))
5084 else if (tree_int_cst_lt (last, first))
5086 error_init ("empty index range in initializer");
5091 last = convert (bitsizetype, last);
5092 if (constructor_max_index != 0
5093 && tree_int_cst_lt (constructor_max_index, last))
5095 error_init ("array index range in initializer exceeds array bounds");
5102 designator_errorneous = 0;
5103 if (constructor_range_stack || last)
5104 push_range_stack (last);
5108 /* Within a struct initializer, specify the next field to be initialized. */
5111 set_init_label (tree fieldname)
5115 if (set_designator (0))
5118 designator_errorneous = 1;
5120 if (TREE_CODE (constructor_type) != RECORD_TYPE
5121 && TREE_CODE (constructor_type) != UNION_TYPE)
5123 error_init ("field name not in record or union initializer");
5127 for (tail = TYPE_FIELDS (constructor_type); tail;
5128 tail = TREE_CHAIN (tail))
5130 if (DECL_NAME (tail) == fieldname)
5135 error ("unknown field `%s' specified in initializer",
5136 IDENTIFIER_POINTER (fieldname));
5139 constructor_fields = tail;
5141 designator_errorneous = 0;
5142 if (constructor_range_stack)
5143 push_range_stack (NULL_TREE);
5147 /* Add a new initializer to the tree of pending initializers. PURPOSE
5148 identifies the initializer, either array index or field in a structure.
5149 VALUE is the value of that index or field. */
5152 add_pending_init (tree purpose, tree value)
5154 struct init_node *p, **q, *r;
5156 q = &constructor_pending_elts;
5159 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5164 if (tree_int_cst_lt (purpose, p->purpose))
5166 else if (tree_int_cst_lt (p->purpose, purpose))
5170 if (TREE_SIDE_EFFECTS (p->value))
5171 warning_init ("initialized field with side-effects overwritten");
5181 bitpos = bit_position (purpose);
5185 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5187 else if (p->purpose != purpose)
5191 if (TREE_SIDE_EFFECTS (p->value))
5192 warning_init ("initialized field with side-effects overwritten");
5199 r = GGC_NEW (struct init_node);
5200 r->purpose = purpose;
5211 struct init_node *s;
5215 if (p->balance == 0)
5217 else if (p->balance < 0)
5224 p->left->parent = p;
5241 constructor_pending_elts = r;
5246 struct init_node *t = r->right;
5250 r->right->parent = r;
5255 p->left->parent = p;
5258 p->balance = t->balance < 0;
5259 r->balance = -(t->balance > 0);
5274 constructor_pending_elts = t;
5280 /* p->balance == +1; growth of left side balances the node. */
5285 else /* r == p->right */
5287 if (p->balance == 0)
5288 /* Growth propagation from right side. */
5290 else if (p->balance > 0)
5297 p->right->parent = p;
5314 constructor_pending_elts = r;
5316 else /* r->balance == -1 */
5319 struct init_node *t = r->left;
5323 r->left->parent = r;
5328 p->right->parent = p;
5331 r->balance = (t->balance < 0);
5332 p->balance = -(t->balance > 0);
5347 constructor_pending_elts = t;
5353 /* p->balance == -1; growth of right side balances the node. */
5364 /* Build AVL tree from a sorted chain. */
5367 set_nonincremental_init (void)
5371 if (TREE_CODE (constructor_type) != RECORD_TYPE
5372 && TREE_CODE (constructor_type) != ARRAY_TYPE)
5375 for (chain = constructor_elements; chain; chain = TREE_CHAIN (chain))
5376 add_pending_init (TREE_PURPOSE (chain), TREE_VALUE (chain));
5377 constructor_elements = 0;
5378 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5380 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5381 /* Skip any nameless bit fields at the beginning. */
5382 while (constructor_unfilled_fields != 0
5383 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5384 && DECL_NAME (constructor_unfilled_fields) == 0)
5385 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5388 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5390 if (TYPE_DOMAIN (constructor_type))
5391 constructor_unfilled_index
5392 = convert (bitsizetype,
5393 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5395 constructor_unfilled_index = bitsize_zero_node;
5397 constructor_incremental = 0;
5400 /* Build AVL tree from a string constant. */
5403 set_nonincremental_init_from_string (tree str)
5405 tree value, purpose, type;
5406 HOST_WIDE_INT val[2];
5407 const char *p, *end;
5408 int byte, wchar_bytes, charwidth, bitpos;
5410 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
5412 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5413 == TYPE_PRECISION (char_type_node))
5417 gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5418 == TYPE_PRECISION (wchar_type_node));
5419 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5421 charwidth = TYPE_PRECISION (char_type_node);
5422 type = TREE_TYPE (constructor_type);
5423 p = TREE_STRING_POINTER (str);
5424 end = p + TREE_STRING_LENGTH (str);
5426 for (purpose = bitsize_zero_node;
5427 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5428 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
5430 if (wchar_bytes == 1)
5432 val[1] = (unsigned char) *p++;
5439 for (byte = 0; byte < wchar_bytes; byte++)
5441 if (BYTES_BIG_ENDIAN)
5442 bitpos = (wchar_bytes - byte - 1) * charwidth;
5444 bitpos = byte * charwidth;
5445 val[bitpos < HOST_BITS_PER_WIDE_INT]
5446 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5447 << (bitpos % HOST_BITS_PER_WIDE_INT);
5451 if (!TYPE_UNSIGNED (type))
5453 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5454 if (bitpos < HOST_BITS_PER_WIDE_INT)
5456 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5458 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5462 else if (bitpos == HOST_BITS_PER_WIDE_INT)
5467 else if (val[0] & (((HOST_WIDE_INT) 1)
5468 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5469 val[0] |= ((HOST_WIDE_INT) -1)
5470 << (bitpos - HOST_BITS_PER_WIDE_INT);
5473 value = build_int_cst_wide (type, val[1], val[0]);
5474 add_pending_init (purpose, value);
5477 constructor_incremental = 0;
5480 /* Return value of FIELD in pending initializer or zero if the field was
5481 not initialized yet. */
5484 find_init_member (tree field)
5486 struct init_node *p;
5488 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5490 if (constructor_incremental
5491 && tree_int_cst_lt (field, constructor_unfilled_index))
5492 set_nonincremental_init ();
5494 p = constructor_pending_elts;
5497 if (tree_int_cst_lt (field, p->purpose))
5499 else if (tree_int_cst_lt (p->purpose, field))
5505 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5507 tree bitpos = bit_position (field);
5509 if (constructor_incremental
5510 && (!constructor_unfilled_fields
5511 || tree_int_cst_lt (bitpos,
5512 bit_position (constructor_unfilled_fields))))
5513 set_nonincremental_init ();
5515 p = constructor_pending_elts;
5518 if (field == p->purpose)
5520 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5526 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5528 if (constructor_elements
5529 && TREE_PURPOSE (constructor_elements) == field)
5530 return TREE_VALUE (constructor_elements);
5535 /* "Output" the next constructor element.
5536 At top level, really output it to assembler code now.
5537 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5538 TYPE is the data type that the containing data type wants here.
5539 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5540 If VALUE is a string constant, STRICT_STRING is true if it is
5541 unparenthesized or we should not warn here for it being parenthesized.
5542 For other types of VALUE, STRICT_STRING is not used.
5544 PENDING if non-nil means output pending elements that belong
5545 right after this element. (PENDING is normally 1;
5546 it is 0 while outputting pending elements, to avoid recursion.) */
5549 output_init_element (tree value, bool strict_string, tree type, tree field,
5552 if (type == error_mark_node)
5554 constructor_erroneous = 1;
5557 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5558 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5559 && !(TREE_CODE (value) == STRING_CST
5560 && TREE_CODE (type) == ARRAY_TYPE
5561 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
5562 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5563 TYPE_MAIN_VARIANT (type))))
5564 value = default_conversion (value);
5566 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5567 && require_constant_value && !flag_isoc99 && pending)
5569 /* As an extension, allow initializing objects with static storage
5570 duration with compound literals (which are then treated just as
5571 the brace enclosed list they contain). */
5572 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5573 value = DECL_INITIAL (decl);
5576 if (value == error_mark_node)
5577 constructor_erroneous = 1;
5578 else if (!TREE_CONSTANT (value))
5579 constructor_constant = 0;
5580 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
5581 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5582 || TREE_CODE (constructor_type) == UNION_TYPE)
5583 && DECL_C_BIT_FIELD (field)
5584 && TREE_CODE (value) != INTEGER_CST))
5585 constructor_simple = 0;
5587 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
5589 if (require_constant_value)
5591 error_init ("initializer element is not constant");
5592 value = error_mark_node;
5594 else if (require_constant_elements)
5595 pedwarn ("initializer element is not computable at load time");
5598 /* If this field is empty (and not at the end of structure),
5599 don't do anything other than checking the initializer. */
5601 && (TREE_TYPE (field) == error_mark_node
5602 || (COMPLETE_TYPE_P (TREE_TYPE (field))
5603 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5604 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5605 || TREE_CHAIN (field)))))
5608 value = digest_init (type, value, strict_string, require_constant_value);
5609 if (value == error_mark_node)
5611 constructor_erroneous = 1;
5615 /* If this element doesn't come next in sequence,
5616 put it on constructor_pending_elts. */
5617 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5618 && (!constructor_incremental
5619 || !tree_int_cst_equal (field, constructor_unfilled_index)))
5621 if (constructor_incremental
5622 && tree_int_cst_lt (field, constructor_unfilled_index))
5623 set_nonincremental_init ();
5625 add_pending_init (field, value);
5628 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5629 && (!constructor_incremental
5630 || field != constructor_unfilled_fields))
5632 /* We do this for records but not for unions. In a union,
5633 no matter which field is specified, it can be initialized
5634 right away since it starts at the beginning of the union. */
5635 if (constructor_incremental)
5637 if (!constructor_unfilled_fields)
5638 set_nonincremental_init ();
5641 tree bitpos, unfillpos;
5643 bitpos = bit_position (field);
5644 unfillpos = bit_position (constructor_unfilled_fields);
5646 if (tree_int_cst_lt (bitpos, unfillpos))
5647 set_nonincremental_init ();
5651 add_pending_init (field, value);
5654 else if (TREE_CODE (constructor_type) == UNION_TYPE
5655 && constructor_elements)
5657 if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements)))
5658 warning_init ("initialized field with side-effects overwritten");
5660 /* We can have just one union field set. */
5661 constructor_elements = 0;
5664 /* Otherwise, output this element either to
5665 constructor_elements or to the assembler file. */
5667 if (field && TREE_CODE (field) == INTEGER_CST)
5668 field = copy_node (field);
5669 constructor_elements
5670 = tree_cons (field, value, constructor_elements);
5672 /* Advance the variable that indicates sequential elements output. */
5673 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5674 constructor_unfilled_index
5675 = size_binop (PLUS_EXPR, constructor_unfilled_index,
5677 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5679 constructor_unfilled_fields
5680 = TREE_CHAIN (constructor_unfilled_fields);
5682 /* Skip any nameless bit fields. */
5683 while (constructor_unfilled_fields != 0
5684 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5685 && DECL_NAME (constructor_unfilled_fields) == 0)
5686 constructor_unfilled_fields =
5687 TREE_CHAIN (constructor_unfilled_fields);
5689 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5690 constructor_unfilled_fields = 0;
5692 /* Now output any pending elements which have become next. */
5694 output_pending_init_elements (0);
5697 /* Output any pending elements which have become next.
5698 As we output elements, constructor_unfilled_{fields,index}
5699 advances, which may cause other elements to become next;
5700 if so, they too are output.
5702 If ALL is 0, we return when there are
5703 no more pending elements to output now.
5705 If ALL is 1, we output space as necessary so that
5706 we can output all the pending elements. */
5709 output_pending_init_elements (int all)
5711 struct init_node *elt = constructor_pending_elts;
5716 /* Look through the whole pending tree.
5717 If we find an element that should be output now,
5718 output it. Otherwise, set NEXT to the element
5719 that comes first among those still pending. */
5724 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5726 if (tree_int_cst_equal (elt->purpose,
5727 constructor_unfilled_index))
5728 output_init_element (elt->value, true,
5729 TREE_TYPE (constructor_type),
5730 constructor_unfilled_index, 0);
5731 else if (tree_int_cst_lt (constructor_unfilled_index,
5734 /* Advance to the next smaller node. */
5739 /* We have reached the smallest node bigger than the
5740 current unfilled index. Fill the space first. */
5741 next = elt->purpose;
5747 /* Advance to the next bigger node. */
5752 /* We have reached the biggest node in a subtree. Find
5753 the parent of it, which is the next bigger node. */
5754 while (elt->parent && elt->parent->right == elt)
5757 if (elt && tree_int_cst_lt (constructor_unfilled_index,
5760 next = elt->purpose;
5766 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5767 || TREE_CODE (constructor_type) == UNION_TYPE)
5769 tree ctor_unfilled_bitpos, elt_bitpos;
5771 /* If the current record is complete we are done. */
5772 if (constructor_unfilled_fields == 0)
5775 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
5776 elt_bitpos = bit_position (elt->purpose);
5777 /* We can't compare fields here because there might be empty
5778 fields in between. */
5779 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
5781 constructor_unfilled_fields = elt->purpose;
5782 output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
5785 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
5787 /* Advance to the next smaller node. */
5792 /* We have reached the smallest node bigger than the
5793 current unfilled field. Fill the space first. */
5794 next = elt->purpose;
5800 /* Advance to the next bigger node. */
5805 /* We have reached the biggest node in a subtree. Find
5806 the parent of it, which is the next bigger node. */
5807 while (elt->parent && elt->parent->right == elt)
5811 && (tree_int_cst_lt (ctor_unfilled_bitpos,
5812 bit_position (elt->purpose))))
5814 next = elt->purpose;
5822 /* Ordinarily return, but not if we want to output all
5823 and there are elements left. */
5824 if (! (all && next != 0))
5827 /* If it's not incremental, just skip over the gap, so that after
5828 jumping to retry we will output the next successive element. */
5829 if (TREE_CODE (constructor_type) == RECORD_TYPE
5830 || TREE_CODE (constructor_type) == UNION_TYPE)
5831 constructor_unfilled_fields = next;
5832 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5833 constructor_unfilled_index = next;
5835 /* ELT now points to the node in the pending tree with the next
5836 initializer to output. */
5840 /* Add one non-braced element to the current constructor level.
5841 This adjusts the current position within the constructor's type.
5842 This may also start or terminate implicit levels
5843 to handle a partly-braced initializer.
5845 Once this has found the correct level for the new element,
5846 it calls output_init_element. */
5849 process_init_element (struct c_expr value)
5851 tree orig_value = value.value;
5852 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
5853 bool strict_string = value.original_code == STRING_CST;
5855 designator_depth = 0;
5856 designator_errorneous = 0;
5858 /* Handle superfluous braces around string cst as in
5859 char x[] = {"foo"}; */
5862 && TREE_CODE (constructor_type) == ARRAY_TYPE
5863 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
5864 && integer_zerop (constructor_unfilled_index))
5866 if (constructor_stack->replacement_value.value)
5867 error_init ("excess elements in char array initializer");
5868 constructor_stack->replacement_value = value;
5872 if (constructor_stack->replacement_value.value != 0)
5874 error_init ("excess elements in struct initializer");
5878 /* Ignore elements of a brace group if it is entirely superfluous
5879 and has already been diagnosed. */
5880 if (constructor_type == 0)
5883 /* If we've exhausted any levels that didn't have braces,
5885 while (constructor_stack->implicit)
5887 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5888 || TREE_CODE (constructor_type) == UNION_TYPE)
5889 && constructor_fields == 0)
5890 process_init_element (pop_init_level (1));
5891 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5892 && (constructor_max_index == 0
5893 || tree_int_cst_lt (constructor_max_index,
5894 constructor_index)))
5895 process_init_element (pop_init_level (1));
5900 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
5901 if (constructor_range_stack)
5903 /* If value is a compound literal and we'll be just using its
5904 content, don't put it into a SAVE_EXPR. */
5905 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
5906 || !require_constant_value
5908 value.value = save_expr (value.value);
5913 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5916 enum tree_code fieldcode;
5918 if (constructor_fields == 0)
5920 pedwarn_init ("excess elements in struct initializer");
5924 fieldtype = TREE_TYPE (constructor_fields);
5925 if (fieldtype != error_mark_node)
5926 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
5927 fieldcode = TREE_CODE (fieldtype);
5929 /* Error for non-static initialization of a flexible array member. */
5930 if (fieldcode == ARRAY_TYPE
5931 && !require_constant_value
5932 && TYPE_SIZE (fieldtype) == NULL_TREE
5933 && TREE_CHAIN (constructor_fields) == NULL_TREE)
5935 error_init ("non-static initialization of a flexible array member");
5939 /* Accept a string constant to initialize a subarray. */
5940 if (value.value != 0
5941 && fieldcode == ARRAY_TYPE
5942 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
5944 value.value = orig_value;
5945 /* Otherwise, if we have come to a subaggregate,
5946 and we don't have an element of its type, push into it. */
5947 else if (value.value != 0 && !constructor_no_implicit
5948 && value.value != error_mark_node
5949 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
5950 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
5951 || fieldcode == UNION_TYPE))
5953 push_init_level (1);
5959 push_member_name (constructor_fields);
5960 output_init_element (value.value, strict_string,
5961 fieldtype, constructor_fields, 1);
5962 RESTORE_SPELLING_DEPTH (constructor_depth);
5965 /* Do the bookkeeping for an element that was
5966 directly output as a constructor. */
5968 /* For a record, keep track of end position of last field. */
5969 if (DECL_SIZE (constructor_fields))
5970 constructor_bit_index
5971 = size_binop (PLUS_EXPR,
5972 bit_position (constructor_fields),
5973 DECL_SIZE (constructor_fields));
5975 /* If the current field was the first one not yet written out,
5976 it isn't now, so update. */
5977 if (constructor_unfilled_fields == constructor_fields)
5979 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
5980 /* Skip any nameless bit fields. */
5981 while (constructor_unfilled_fields != 0
5982 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5983 && DECL_NAME (constructor_unfilled_fields) == 0)
5984 constructor_unfilled_fields =
5985 TREE_CHAIN (constructor_unfilled_fields);
5989 constructor_fields = TREE_CHAIN (constructor_fields);
5990 /* Skip any nameless bit fields at the beginning. */
5991 while (constructor_fields != 0
5992 && DECL_C_BIT_FIELD (constructor_fields)
5993 && DECL_NAME (constructor_fields) == 0)
5994 constructor_fields = TREE_CHAIN (constructor_fields);
5996 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5999 enum tree_code fieldcode;
6001 if (constructor_fields == 0)
6003 pedwarn_init ("excess elements in union initializer");
6007 fieldtype = TREE_TYPE (constructor_fields);
6008 if (fieldtype != error_mark_node)
6009 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6010 fieldcode = TREE_CODE (fieldtype);
6012 /* Warn that traditional C rejects initialization of unions.
6013 We skip the warning if the value is zero. This is done
6014 under the assumption that the zero initializer in user
6015 code appears conditioned on e.g. __STDC__ to avoid
6016 "missing initializer" warnings and relies on default
6017 initialization to zero in the traditional C case.
6018 We also skip the warning if the initializer is designated,
6019 again on the assumption that this must be conditional on
6020 __STDC__ anyway (and we've already complained about the
6021 member-designator already). */
6022 if (warn_traditional && !in_system_header && !constructor_designated
6023 && !(value.value && (integer_zerop (value.value)
6024 || real_zerop (value.value))))
6025 warning ("traditional C rejects initialization of unions");
6027 /* Accept a string constant to initialize a subarray. */
6028 if (value.value != 0
6029 && fieldcode == ARRAY_TYPE
6030 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6032 value.value = orig_value;
6033 /* Otherwise, if we have come to a subaggregate,
6034 and we don't have an element of its type, push into it. */
6035 else if (value.value != 0 && !constructor_no_implicit
6036 && value.value != error_mark_node
6037 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6038 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6039 || fieldcode == UNION_TYPE))
6041 push_init_level (1);
6047 push_member_name (constructor_fields);
6048 output_init_element (value.value, strict_string,
6049 fieldtype, constructor_fields, 1);
6050 RESTORE_SPELLING_DEPTH (constructor_depth);
6053 /* Do the bookkeeping for an element that was
6054 directly output as a constructor. */
6056 constructor_bit_index = DECL_SIZE (constructor_fields);
6057 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6060 constructor_fields = 0;
6062 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6064 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6065 enum tree_code eltcode = TREE_CODE (elttype);
6067 /* Accept a string constant to initialize a subarray. */
6068 if (value.value != 0
6069 && eltcode == ARRAY_TYPE
6070 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6072 value.value = orig_value;
6073 /* Otherwise, if we have come to a subaggregate,
6074 and we don't have an element of its type, push into it. */
6075 else if (value.value != 0 && !constructor_no_implicit
6076 && value.value != error_mark_node
6077 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6078 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6079 || eltcode == UNION_TYPE))
6081 push_init_level (1);
6085 if (constructor_max_index != 0
6086 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6087 || integer_all_onesp (constructor_max_index)))
6089 pedwarn_init ("excess elements in array initializer");
6093 /* Now output the actual element. */
6096 push_array_bounds (tree_low_cst (constructor_index, 0));
6097 output_init_element (value.value, strict_string,
6098 elttype, constructor_index, 1);
6099 RESTORE_SPELLING_DEPTH (constructor_depth);
6103 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6106 /* If we are doing the bookkeeping for an element that was
6107 directly output as a constructor, we must update
6108 constructor_unfilled_index. */
6109 constructor_unfilled_index = constructor_index;
6111 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6113 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6115 /* Do a basic check of initializer size. Note that vectors
6116 always have a fixed size derived from their type. */
6117 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6119 pedwarn_init ("excess elements in vector initializer");
6123 /* Now output the actual element. */
6125 output_init_element (value.value, strict_string,
6126 elttype, constructor_index, 1);
6129 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6132 /* If we are doing the bookkeeping for an element that was
6133 directly output as a constructor, we must update
6134 constructor_unfilled_index. */
6135 constructor_unfilled_index = constructor_index;
6138 /* Handle the sole element allowed in a braced initializer
6139 for a scalar variable. */
6140 else if (constructor_fields == 0)
6142 pedwarn_init ("excess elements in scalar initializer");
6148 output_init_element (value.value, strict_string,
6149 constructor_type, NULL_TREE, 1);
6150 constructor_fields = 0;
6153 /* Handle range initializers either at this level or anywhere higher
6154 in the designator stack. */
6155 if (constructor_range_stack)
6157 struct constructor_range_stack *p, *range_stack;
6160 range_stack = constructor_range_stack;
6161 constructor_range_stack = 0;
6162 while (constructor_stack != range_stack->stack)
6164 gcc_assert (constructor_stack->implicit);
6165 process_init_element (pop_init_level (1));
6167 for (p = range_stack;
6168 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6171 gcc_assert (constructor_stack->implicit);
6172 process_init_element (pop_init_level (1));
6175 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6176 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6181 constructor_index = p->index;
6182 constructor_fields = p->fields;
6183 if (finish && p->range_end && p->index == p->range_start)
6191 push_init_level (2);
6192 p->stack = constructor_stack;
6193 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6194 p->index = p->range_start;
6198 constructor_range_stack = range_stack;
6205 constructor_range_stack = 0;
6208 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6209 (guaranteed to be 'volatile' or null) and ARGS (represented using
6210 an ASM_EXPR node). */
6212 build_asm_stmt (tree cv_qualifier, tree args)
6214 if (!ASM_VOLATILE_P (args) && cv_qualifier)
6215 ASM_VOLATILE_P (args) = 1;
6216 return add_stmt (args);
6219 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6220 some INPUTS, and some CLOBBERS. The latter three may be NULL.
6221 SIMPLE indicates whether there was anything at all after the
6222 string in the asm expression -- asm("blah") and asm("blah" : )
6223 are subtly different. We use a ASM_EXPR node to represent this. */
6225 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6231 const char *constraint;
6232 bool allows_mem, allows_reg, is_inout;
6236 ninputs = list_length (inputs);
6237 noutputs = list_length (outputs);
6239 /* Remove output conversions that change the type but not the mode. */
6240 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6242 tree output = TREE_VALUE (tail);
6243 STRIP_NOPS (output);
6244 TREE_VALUE (tail) = output;
6245 lvalue_or_else (output, "invalid lvalue in asm statement");
6247 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6249 if (!parse_output_constraint (&constraint, i, ninputs, noutputs,
6250 &allows_mem, &allows_reg, &is_inout))
6252 /* By marking this operand as erroneous, we will not try
6253 to process this operand again in expand_asm_operands. */
6254 TREE_VALUE (tail) = error_mark_node;
6258 /* If the operand is a DECL that is going to end up in
6259 memory, assume it is addressable. This is a bit more
6260 conservative than it would ideally be; the exact test is
6261 buried deep in expand_asm_operands and depends on the
6262 DECL_RTL for the OPERAND -- which we don't have at this
6264 if (!allows_reg && DECL_P (output))
6265 c_mark_addressable (output);
6268 /* Perform default conversions on array and function inputs.
6269 Don't do this for other types as it would screw up operands
6270 expected to be in memory. */
6271 for (tail = inputs; tail; tail = TREE_CHAIN (tail))
6272 TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail));
6274 args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6276 /* Simple asm statements are treated as volatile. */
6279 ASM_VOLATILE_P (args) = 1;
6280 ASM_INPUT_P (args) = 1;
6285 /* Generate a goto statement to LABEL. */
6288 c_finish_goto_label (tree label)
6290 tree decl = lookup_label (label);
6294 TREE_USED (decl) = 1;
6295 return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
6298 /* Generate a computed goto statement to EXPR. */
6301 c_finish_goto_ptr (tree expr)
6304 pedwarn ("ISO C forbids `goto *expr;'");
6305 expr = convert (ptr_type_node, expr);
6306 return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
6309 /* Generate a C `return' statement. RETVAL is the expression for what
6310 to return, or a null pointer for `return;' with no value. */
6313 c_finish_return (tree retval)
6315 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6317 if (TREE_THIS_VOLATILE (current_function_decl))
6318 warning ("function declared `noreturn' has a `return' statement");
6322 current_function_returns_null = 1;
6323 if ((warn_return_type || flag_isoc99)
6324 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6325 pedwarn_c99 ("`return' with no value, in function returning non-void");
6327 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6329 current_function_returns_null = 1;
6330 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6331 pedwarn ("`return' with a value, in function returning void");
6335 tree t = convert_for_assignment (valtype, retval, _("return"),
6336 NULL_TREE, NULL_TREE, 0);
6337 tree res = DECL_RESULT (current_function_decl);
6340 current_function_returns_value = 1;
6341 if (t == error_mark_node)
6344 inner = t = convert (TREE_TYPE (res), t);
6346 /* Strip any conversions, additions, and subtractions, and see if
6347 we are returning the address of a local variable. Warn if so. */
6350 switch (TREE_CODE (inner))
6352 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6354 inner = TREE_OPERAND (inner, 0);
6358 /* If the second operand of the MINUS_EXPR has a pointer
6359 type (or is converted from it), this may be valid, so
6360 don't give a warning. */
6362 tree op1 = TREE_OPERAND (inner, 1);
6364 while (! POINTER_TYPE_P (TREE_TYPE (op1))
6365 && (TREE_CODE (op1) == NOP_EXPR
6366 || TREE_CODE (op1) == NON_LVALUE_EXPR
6367 || TREE_CODE (op1) == CONVERT_EXPR))
6368 op1 = TREE_OPERAND (op1, 0);
6370 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6373 inner = TREE_OPERAND (inner, 0);
6378 inner = TREE_OPERAND (inner, 0);
6380 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r'
6381 && TREE_CODE (inner) != INDIRECT_REF)
6382 inner = TREE_OPERAND (inner, 0);
6385 && ! DECL_EXTERNAL (inner)
6386 && ! TREE_STATIC (inner)
6387 && DECL_CONTEXT (inner) == current_function_decl)
6388 warning ("function returns address of local variable");
6398 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
6401 return add_stmt (build_stmt (RETURN_EXPR, retval));
6405 /* The SWITCH_STMT being built. */
6408 /* The original type of the testing expression, ie. before the
6409 default conversion is applied. */
6412 /* A splay-tree mapping the low element of a case range to the high
6413 element, or NULL_TREE if there is no high element. Used to
6414 determine whether or not a new case label duplicates an old case
6415 label. We need a tree, rather than simply a hash table, because
6416 of the GNU case range extension. */
6419 /* The next node on the stack. */
6420 struct c_switch *next;
6423 /* A stack of the currently active switch statements. The innermost
6424 switch statement is on the top of the stack. There is no need to
6425 mark the stack for garbage collection because it is only active
6426 during the processing of the body of a function, and we never
6427 collect at that point. */
6429 struct c_switch *c_switch_stack;
6431 /* Start a C switch statement, testing expression EXP. Return the new
6435 c_start_case (tree exp)
6437 enum tree_code code;
6438 tree type, orig_type = error_mark_node;
6439 struct c_switch *cs;
6441 if (exp != error_mark_node)
6443 code = TREE_CODE (TREE_TYPE (exp));
6444 orig_type = TREE_TYPE (exp);
6446 if (! INTEGRAL_TYPE_P (orig_type)
6447 && code != ERROR_MARK)
6449 error ("switch quantity not an integer");
6450 exp = integer_zero_node;
6454 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6456 if (warn_traditional && !in_system_header
6457 && (type == long_integer_type_node
6458 || type == long_unsigned_type_node))
6459 warning ("`long' switch expression not converted to `int' in ISO C");
6461 exp = default_conversion (exp);
6462 type = TREE_TYPE (exp);
6466 /* Add this new SWITCH_STMT to the stack. */
6467 cs = XNEW (struct c_switch);
6468 cs->switch_stmt = build_stmt ((enum tree_code) SWITCH_STMT, exp, NULL_TREE,
6470 cs->orig_type = orig_type;
6471 cs->cases = splay_tree_new (case_compare, NULL, NULL);
6472 cs->next = c_switch_stack;
6473 c_switch_stack = cs;
6475 return add_stmt (cs->switch_stmt);
6478 /* Process a case label. */
6481 do_case (tree low_value, tree high_value)
6483 tree label = NULL_TREE;
6487 label = c_add_case_label (c_switch_stack->cases,
6488 SWITCH_COND (c_switch_stack->switch_stmt),
6489 c_switch_stack->orig_type,
6490 low_value, high_value);
6491 if (label == error_mark_node)
6495 error ("case label not within a switch statement");
6497 error ("`default' label not within a switch statement");
6502 /* Finish the switch statement. */
6505 c_finish_case (tree body)
6507 struct c_switch *cs = c_switch_stack;
6509 SWITCH_BODY (cs->switch_stmt) = body;
6511 /* Emit warnings as needed. */
6512 c_do_switch_warnings (cs->cases, cs->switch_stmt);
6514 /* Pop the stack. */
6515 c_switch_stack = cs->next;
6516 splay_tree_delete (cs->cases);
6520 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
6521 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
6522 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
6523 statement, and was not surrounded with parenthesis. */
6526 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
6527 tree else_block, bool nested_if)
6531 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
6532 if (warn_parentheses && nested_if && else_block == NULL)
6534 tree inner_if = then_block;
6536 /* We know from the grammar productions that there is an IF nested
6537 within THEN_BLOCK. Due to labels and c99 conditional declarations,
6538 it might not be exactly THEN_BLOCK, but should be the last
6539 non-container statement within. */
6541 switch (TREE_CODE (inner_if))
6546 inner_if = BIND_EXPR_BODY (inner_if);
6548 case STATEMENT_LIST:
6549 inner_if = expr_last (then_block);
6551 case TRY_FINALLY_EXPR:
6552 case TRY_CATCH_EXPR:
6553 inner_if = TREE_OPERAND (inner_if, 0);
6560 if (COND_EXPR_ELSE (inner_if))
6561 warning ("%Hsuggest explicit braces to avoid ambiguous `else'",
6565 /* Diagnose ";" via the special empty statement node that we create. */
6568 if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
6571 warning ("%Hempty body in an if-statement",
6572 EXPR_LOCUS (then_block));
6573 then_block = alloc_stmt_list ();
6576 && TREE_CODE (else_block) == NOP_EXPR
6577 && !TREE_TYPE (else_block))
6579 warning ("%Hempty body in an else-statement",
6580 EXPR_LOCUS (else_block));
6581 else_block = alloc_stmt_list ();
6585 stmt = build3 (COND_EXPR, NULL_TREE, cond, then_block, else_block);
6586 SET_EXPR_LOCATION (stmt, if_locus);
6590 /* Emit a general-purpose loop construct. START_LOCUS is the location of
6591 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
6592 is false for DO loops. INCR is the FOR increment expression. BODY is
6593 the statement controlled by the loop. BLAB is the break label. CLAB is
6594 the continue label. Everything is allowed to be NULL. */
6597 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
6598 tree blab, tree clab, bool cond_is_first)
6600 tree entry = NULL, exit = NULL, t;
6602 /* Detect do { ... } while (0) and don't generate loop construct. */
6603 if (cond && !cond_is_first && integer_zerop (cond))
6605 if (cond_is_first || cond)
6607 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6609 /* If we have an exit condition, then we build an IF with gotos either
6610 out of the loop, or to the top of it. If there's no exit condition,
6611 then we just build a jump back to the top. */
6612 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
6616 /* Canonicalize the loop condition to the end. This means
6617 generating a branch to the loop condition. Reuse the
6618 continue label, if possible. */
6623 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6624 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
6627 t = build1 (GOTO_EXPR, void_type_node, clab);
6628 SET_EXPR_LOCATION (t, start_locus);
6632 t = build_and_jump (&blab);
6633 exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
6636 SET_EXPR_LOCATION (exit, start_locus);
6638 SET_EXPR_LOCATION (exit, input_location);
6647 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
6655 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
6659 c_finish_bc_stmt (tree *label_p, bool is_break)
6661 tree label = *label_p;
6664 *label_p = label = create_artificial_label ();
6665 else if (TREE_CODE (label) != LABEL_DECL)
6668 error ("break statement not within loop or switch");
6670 error ("continue statement not within a loop");
6674 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
6677 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
6680 emit_side_effect_warnings (tree expr)
6682 if (expr == error_mark_node)
6684 else if (!TREE_SIDE_EFFECTS (expr))
6686 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
6687 warning ("%Hstatement with no effect",
6688 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
6690 else if (warn_unused_value)
6691 warn_if_unused_value (expr, input_location);
6694 /* Process an expression as if it were a complete statement. Emit
6695 diagnostics, but do not call ADD_STMT. */
6698 c_process_expr_stmt (tree expr)
6703 /* Do default conversion if safe and possibly important,
6704 in case within ({...}). */
6705 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
6706 && (flag_isoc99 || lvalue_p (expr)))
6707 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
6708 expr = default_conversion (expr);
6710 if (warn_sequence_point)
6711 verify_sequence_points (expr);
6713 if (TREE_TYPE (expr) != error_mark_node
6714 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
6715 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
6716 error ("expression statement has incomplete type");
6718 /* If we're not processing a statement expression, warn about unused values.
6719 Warnings for statement expressions will be emitted later, once we figure
6720 out which is the result. */
6721 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
6722 && (extra_warnings || warn_unused_value))
6723 emit_side_effect_warnings (expr);
6725 /* If the expression is not of a type to which we cannot assign a line
6726 number, wrap the thing in a no-op NOP_EXPR. */
6727 if (DECL_P (expr) || TREE_CODE_CLASS (TREE_CODE (expr)) == 'c')
6728 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
6731 SET_EXPR_LOCATION (expr, input_location);
6736 /* Emit an expression as a statement. */
6739 c_finish_expr_stmt (tree expr)
6742 return add_stmt (c_process_expr_stmt (expr));
6747 /* Do the opposite and emit a statement as an expression. To begin,
6748 create a new binding level and return it. */
6751 c_begin_stmt_expr (void)
6755 /* We must force a BLOCK for this level so that, if it is not expanded
6756 later, there is a way to turn off the entire subtree of blocks that
6757 are contained in it. */
6759 ret = c_begin_compound_stmt (true);
6761 /* Mark the current statement list as belonging to a statement list. */
6762 STATEMENT_LIST_STMT_EXPR (ret) = 1;
6768 c_finish_stmt_expr (tree body)
6770 tree last, type, tmp, val;
6773 body = c_end_compound_stmt (body, true);
6775 /* Locate the last statement in BODY. See c_end_compound_stmt
6776 about always returning a BIND_EXPR. */
6777 last_p = &BIND_EXPR_BODY (body);
6778 last = BIND_EXPR_BODY (body);
6781 if (TREE_CODE (last) == STATEMENT_LIST)
6783 tree_stmt_iterator i;
6785 /* This can happen with degenerate cases like ({ }). No value. */
6786 if (!TREE_SIDE_EFFECTS (last))
6789 /* If we're supposed to generate side effects warnings, process
6790 all of the statements except the last. */
6791 if (extra_warnings || warn_unused_value)
6793 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
6794 emit_side_effect_warnings (tsi_stmt (i));
6797 i = tsi_last (last);
6798 last_p = tsi_stmt_ptr (i);
6802 /* If the end of the list is exception related, then the list was split
6803 by a call to push_cleanup. Continue searching. */
6804 if (TREE_CODE (last) == TRY_FINALLY_EXPR
6805 || TREE_CODE (last) == TRY_CATCH_EXPR)
6807 last_p = &TREE_OPERAND (last, 0);
6809 goto continue_searching;
6812 /* In the case that the BIND_EXPR is not necessary, return the
6813 expression out from inside it. */
6814 if (last == error_mark_node
6815 || (last == BIND_EXPR_BODY (body)
6816 && BIND_EXPR_VARS (body) == NULL))
6819 /* Extract the type of said expression. */
6820 type = TREE_TYPE (last);
6822 /* If we're not returning a value at all, then the BIND_EXPR that
6823 we already have is a fine expression to return. */
6824 if (!type || VOID_TYPE_P (type))
6827 /* Now that we've located the expression containing the value, it seems
6828 silly to make voidify_wrapper_expr repeat the process. Create a
6829 temporary of the appropriate type and stick it in a TARGET_EXPR. */
6830 tmp = create_tmp_var_raw (type, NULL);
6832 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
6833 tree_expr_nonnegative_p giving up immediately. */
6835 if (TREE_CODE (val) == NOP_EXPR
6836 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
6837 val = TREE_OPERAND (val, 0);
6839 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
6840 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
6842 return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
6845 /* Begin and end compound statements. This is as simple as pushing
6846 and popping new statement lists from the tree. */
6849 c_begin_compound_stmt (bool do_scope)
6851 tree stmt = push_stmt_list ();
6858 c_end_compound_stmt (tree stmt, bool do_scope)
6864 if (c_dialect_objc ())
6865 objc_clear_super_receiver ();
6866 block = pop_scope ();
6869 stmt = pop_stmt_list (stmt);
6870 stmt = c_build_bind_expr (block, stmt);
6872 /* If this compound statement is nested immediately inside a statement
6873 expression, then force a BIND_EXPR to be created. Otherwise we'll
6874 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
6875 STATEMENT_LISTs merge, and thus we can lose track of what statement
6878 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
6879 && TREE_CODE (stmt) != BIND_EXPR)
6881 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
6882 TREE_SIDE_EFFECTS (stmt) = 1;
6888 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
6889 when the current scope is exited. EH_ONLY is true when this is not
6890 meant to apply to normal control flow transfer. */
6893 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
6895 enum tree_code code;
6899 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
6900 stmt = build_stmt (code, NULL, cleanup);
6902 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
6903 list = push_stmt_list ();
6904 TREE_OPERAND (stmt, 0) = list;
6905 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
6908 /* Build a binary-operation expression without default conversions.
6909 CODE is the kind of expression to build.
6910 This function differs from `build' in several ways:
6911 the data type of the result is computed and recorded in it,
6912 warnings are generated if arg data types are invalid,
6913 special handling for addition and subtraction of pointers is known,
6914 and some optimization is done (operations on narrow ints
6915 are done in the narrower type when that gives the same result).
6916 Constant folding is also done before the result is returned.
6918 Note that the operands will never have enumeral types, or function
6919 or array types, because either they will have the default conversions
6920 performed or they have both just been converted to some other type in which
6921 the arithmetic is to be done. */
6924 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
6928 enum tree_code code0, code1;
6931 /* Expression code to give to the expression when it is built.
6932 Normally this is CODE, which is what the caller asked for,
6933 but in some special cases we change it. */
6934 enum tree_code resultcode = code;
6936 /* Data type in which the computation is to be performed.
6937 In the simplest cases this is the common type of the arguments. */
6938 tree result_type = NULL;
6940 /* Nonzero means operands have already been type-converted
6941 in whatever way is necessary.
6942 Zero means they need to be converted to RESULT_TYPE. */
6945 /* Nonzero means create the expression with this type, rather than
6947 tree build_type = 0;
6949 /* Nonzero means after finally constructing the expression
6950 convert it to this type. */
6951 tree final_type = 0;
6953 /* Nonzero if this is an operation like MIN or MAX which can
6954 safely be computed in short if both args are promoted shorts.
6955 Also implies COMMON.
6956 -1 indicates a bitwise operation; this makes a difference
6957 in the exact conditions for when it is safe to do the operation
6958 in a narrower mode. */
6961 /* Nonzero if this is a comparison operation;
6962 if both args are promoted shorts, compare the original shorts.
6963 Also implies COMMON. */
6964 int short_compare = 0;
6966 /* Nonzero if this is a right-shift operation, which can be computed on the
6967 original short and then promoted if the operand is a promoted short. */
6968 int short_shift = 0;
6970 /* Nonzero means set RESULT_TYPE to the common type of the args. */
6975 op0 = default_conversion (orig_op0);
6976 op1 = default_conversion (orig_op1);
6984 type0 = TREE_TYPE (op0);
6985 type1 = TREE_TYPE (op1);
6987 /* The expression codes of the data types of the arguments tell us
6988 whether the arguments are integers, floating, pointers, etc. */
6989 code0 = TREE_CODE (type0);
6990 code1 = TREE_CODE (type1);
6992 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
6993 STRIP_TYPE_NOPS (op0);
6994 STRIP_TYPE_NOPS (op1);
6996 /* If an error was already reported for one of the arguments,
6997 avoid reporting another error. */
6999 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7000 return error_mark_node;
7005 /* Handle the pointer + int case. */
7006 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7007 return pointer_int_sum (PLUS_EXPR, op0, op1);
7008 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7009 return pointer_int_sum (PLUS_EXPR, op1, op0);
7015 /* Subtraction of two similar pointers.
7016 We must subtract them as integers, then divide by object size. */
7017 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7018 && comp_target_types (type0, type1, 1))
7019 return pointer_diff (op0, op1);
7020 /* Handle pointer minus int. Just like pointer plus int. */
7021 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7022 return pointer_int_sum (MINUS_EXPR, op0, op1);
7031 case TRUNC_DIV_EXPR:
7033 case FLOOR_DIV_EXPR:
7034 case ROUND_DIV_EXPR:
7035 case EXACT_DIV_EXPR:
7036 /* Floating point division by zero is a legitimate way to obtain
7037 infinities and NaNs. */
7038 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7039 warning ("division by zero");
7041 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7042 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7043 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7044 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7046 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7047 code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
7048 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
7049 code1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
7051 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
7052 resultcode = RDIV_EXPR;
7054 /* Although it would be tempting to shorten always here, that
7055 loses on some targets, since the modulo instruction is
7056 undefined if the quotient can't be represented in the
7057 computation mode. We shorten only if unsigned or if
7058 dividing by something we know != -1. */
7059 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7060 || (TREE_CODE (op1) == INTEGER_CST
7061 && ! integer_all_onesp (op1)));
7069 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7071 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
7075 case TRUNC_MOD_EXPR:
7076 case FLOOR_MOD_EXPR:
7077 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7078 warning ("division by zero");
7080 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7082 /* Although it would be tempting to shorten always here, that loses
7083 on some targets, since the modulo instruction is undefined if the
7084 quotient can't be represented in the computation mode. We shorten
7085 only if unsigned or if dividing by something we know != -1. */
7086 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7087 || (TREE_CODE (op1) == INTEGER_CST
7088 && ! integer_all_onesp (op1)));
7093 case TRUTH_ANDIF_EXPR:
7094 case TRUTH_ORIF_EXPR:
7095 case TRUTH_AND_EXPR:
7097 case TRUTH_XOR_EXPR:
7098 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
7099 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
7100 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
7101 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
7103 /* Result of these operations is always an int,
7104 but that does not mean the operands should be
7105 converted to ints! */
7106 result_type = integer_type_node;
7107 op0 = lang_hooks.truthvalue_conversion (op0);
7108 op1 = lang_hooks.truthvalue_conversion (op1);
7113 /* Shift operations: result has same type as first operand;
7114 always convert second operand to int.
7115 Also set SHORT_SHIFT if shifting rightward. */
7118 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7120 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7122 if (tree_int_cst_sgn (op1) < 0)
7123 warning ("right shift count is negative");
7126 if (! integer_zerop (op1))
7129 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7130 warning ("right shift count >= width of type");
7134 /* Use the type of the value to be shifted. */
7135 result_type = type0;
7136 /* Convert the shift-count to an integer, regardless of size
7137 of value being shifted. */
7138 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7139 op1 = convert (integer_type_node, op1);
7140 /* Avoid converting op1 to result_type later. */
7146 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7148 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7150 if (tree_int_cst_sgn (op1) < 0)
7151 warning ("left shift count is negative");
7153 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7154 warning ("left shift count >= width of type");
7157 /* Use the type of the value to be shifted. */
7158 result_type = type0;
7159 /* Convert the shift-count to an integer, regardless of size
7160 of value being shifted. */
7161 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7162 op1 = convert (integer_type_node, op1);
7163 /* Avoid converting op1 to result_type later. */
7170 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7172 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7174 if (tree_int_cst_sgn (op1) < 0)
7175 warning ("shift count is negative");
7176 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7177 warning ("shift count >= width of type");
7180 /* Use the type of the value to be shifted. */
7181 result_type = type0;
7182 /* Convert the shift-count to an integer, regardless of size
7183 of value being shifted. */
7184 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7185 op1 = convert (integer_type_node, op1);
7186 /* Avoid converting op1 to result_type later. */
7193 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
7194 warning ("comparing floating point with == or != is unsafe");
7195 /* Result of comparison is always int,
7196 but don't convert the args to int! */
7197 build_type = integer_type_node;
7198 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7199 || code0 == COMPLEX_TYPE)
7200 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7201 || code1 == COMPLEX_TYPE))
7203 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7205 tree tt0 = TREE_TYPE (type0);
7206 tree tt1 = TREE_TYPE (type1);
7207 /* Anything compares with void *. void * compares with anything.
7208 Otherwise, the targets must be compatible
7209 and both must be object or both incomplete. */
7210 if (comp_target_types (type0, type1, 1))
7211 result_type = common_pointer_type (type0, type1);
7212 else if (VOID_TYPE_P (tt0))
7214 /* op0 != orig_op0 detects the case of something
7215 whose value is 0 but which isn't a valid null ptr const. */
7216 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
7217 && TREE_CODE (tt1) == FUNCTION_TYPE)
7218 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
7220 else if (VOID_TYPE_P (tt1))
7222 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
7223 && TREE_CODE (tt0) == FUNCTION_TYPE)
7224 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
7227 pedwarn ("comparison of distinct pointer types lacks a cast");
7229 if (result_type == NULL_TREE)
7230 result_type = ptr_type_node;
7232 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7233 && integer_zerop (op1))
7234 result_type = type0;
7235 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7236 && integer_zerop (op0))
7237 result_type = type1;
7238 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7240 result_type = type0;
7241 pedwarn ("comparison between pointer and integer");
7243 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7245 result_type = type1;
7246 pedwarn ("comparison between pointer and integer");
7252 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7253 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7255 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7257 if (comp_target_types (type0, type1, 1))
7259 result_type = common_pointer_type (type0, type1);
7261 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7262 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7266 result_type = ptr_type_node;
7267 pedwarn ("comparison of distinct pointer types lacks a cast");
7276 build_type = integer_type_node;
7277 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7278 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7280 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7282 if (comp_target_types (type0, type1, 1))
7284 result_type = common_pointer_type (type0, type1);
7285 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
7286 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
7287 pedwarn ("comparison of complete and incomplete pointers");
7289 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7290 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7294 result_type = ptr_type_node;
7295 pedwarn ("comparison of distinct pointer types lacks a cast");
7298 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7299 && integer_zerop (op1))
7301 result_type = type0;
7302 if (pedantic || extra_warnings)
7303 pedwarn ("ordered comparison of pointer with integer zero");
7305 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7306 && integer_zerop (op0))
7308 result_type = type1;
7310 pedwarn ("ordered comparison of pointer with integer zero");
7312 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7314 result_type = type0;
7315 pedwarn ("comparison between pointer and integer");
7317 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7319 result_type = type1;
7320 pedwarn ("comparison between pointer and integer");
7324 case UNORDERED_EXPR:
7332 build_type = integer_type_node;
7333 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
7335 error ("unordered comparison on non-floating point argument");
7336 return error_mark_node;
7345 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7346 return error_mark_node;
7348 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
7349 || code0 == VECTOR_TYPE)
7351 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
7352 || code1 == VECTOR_TYPE))
7354 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
7356 if (shorten || common || short_compare)
7357 result_type = common_type (type0, type1);
7359 /* For certain operations (which identify themselves by shorten != 0)
7360 if both args were extended from the same smaller type,
7361 do the arithmetic in that type and then extend.
7363 shorten !=0 and !=1 indicates a bitwise operation.
7364 For them, this optimization is safe only if
7365 both args are zero-extended or both are sign-extended.
7366 Otherwise, we might change the result.
7367 Eg, (short)-1 | (unsigned short)-1 is (int)-1
7368 but calculated in (unsigned short) it would be (unsigned short)-1. */
7370 if (shorten && none_complex)
7372 int unsigned0, unsigned1;
7373 tree arg0 = get_narrower (op0, &unsigned0);
7374 tree arg1 = get_narrower (op1, &unsigned1);
7375 /* UNS is 1 if the operation to be done is an unsigned one. */
7376 int uns = TYPE_UNSIGNED (result_type);
7379 final_type = result_type;
7381 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
7382 but it *requires* conversion to FINAL_TYPE. */
7384 if ((TYPE_PRECISION (TREE_TYPE (op0))
7385 == TYPE_PRECISION (TREE_TYPE (arg0)))
7386 && TREE_TYPE (op0) != final_type)
7387 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
7388 if ((TYPE_PRECISION (TREE_TYPE (op1))
7389 == TYPE_PRECISION (TREE_TYPE (arg1)))
7390 && TREE_TYPE (op1) != final_type)
7391 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
7393 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
7395 /* For bitwise operations, signedness of nominal type
7396 does not matter. Consider only how operands were extended. */
7400 /* Note that in all three cases below we refrain from optimizing
7401 an unsigned operation on sign-extended args.
7402 That would not be valid. */
7404 /* Both args variable: if both extended in same way
7405 from same width, do it in that width.
7406 Do it unsigned if args were zero-extended. */
7407 if ((TYPE_PRECISION (TREE_TYPE (arg0))
7408 < TYPE_PRECISION (result_type))
7409 && (TYPE_PRECISION (TREE_TYPE (arg1))
7410 == TYPE_PRECISION (TREE_TYPE (arg0)))
7411 && unsigned0 == unsigned1
7412 && (unsigned0 || !uns))
7414 = c_common_signed_or_unsigned_type
7415 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
7416 else if (TREE_CODE (arg0) == INTEGER_CST
7417 && (unsigned1 || !uns)
7418 && (TYPE_PRECISION (TREE_TYPE (arg1))
7419 < TYPE_PRECISION (result_type))
7421 = c_common_signed_or_unsigned_type (unsigned1,
7423 int_fits_type_p (arg0, type)))
7425 else if (TREE_CODE (arg1) == INTEGER_CST
7426 && (unsigned0 || !uns)
7427 && (TYPE_PRECISION (TREE_TYPE (arg0))
7428 < TYPE_PRECISION (result_type))
7430 = c_common_signed_or_unsigned_type (unsigned0,
7432 int_fits_type_p (arg1, type)))
7436 /* Shifts can be shortened if shifting right. */
7441 tree arg0 = get_narrower (op0, &unsigned_arg);
7443 final_type = result_type;
7445 if (arg0 == op0 && final_type == TREE_TYPE (op0))
7446 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
7448 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7449 /* We can shorten only if the shift count is less than the
7450 number of bits in the smaller type size. */
7451 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7452 /* We cannot drop an unsigned shift after sign-extension. */
7453 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
7455 /* Do an unsigned shift if the operand was zero-extended. */
7457 = c_common_signed_or_unsigned_type (unsigned_arg,
7459 /* Convert value-to-be-shifted to that type. */
7460 if (TREE_TYPE (op0) != result_type)
7461 op0 = convert (result_type, op0);
7466 /* Comparison operations are shortened too but differently.
7467 They identify themselves by setting short_compare = 1. */
7471 /* Don't write &op0, etc., because that would prevent op0
7472 from being kept in a register.
7473 Instead, make copies of the our local variables and
7474 pass the copies by reference, then copy them back afterward. */
7475 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
7476 enum tree_code xresultcode = resultcode;
7478 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
7483 op0 = xop0, op1 = xop1;
7485 resultcode = xresultcode;
7487 if (warn_sign_compare && skip_evaluation == 0)
7489 int op0_signed = ! TYPE_UNSIGNED (TREE_TYPE (orig_op0));
7490 int op1_signed = ! TYPE_UNSIGNED (TREE_TYPE (orig_op1));
7491 int unsignedp0, unsignedp1;
7492 tree primop0 = get_narrower (op0, &unsignedp0);
7493 tree primop1 = get_narrower (op1, &unsignedp1);
7497 STRIP_TYPE_NOPS (xop0);
7498 STRIP_TYPE_NOPS (xop1);
7500 /* Give warnings for comparisons between signed and unsigned
7501 quantities that may fail.
7503 Do the checking based on the original operand trees, so that
7504 casts will be considered, but default promotions won't be.
7506 Do not warn if the comparison is being done in a signed type,
7507 since the signed type will only be chosen if it can represent
7508 all the values of the unsigned type. */
7509 if (! TYPE_UNSIGNED (result_type))
7511 /* Do not warn if both operands are the same signedness. */
7512 else if (op0_signed == op1_signed)
7519 sop = xop0, uop = xop1;
7521 sop = xop1, uop = xop0;
7523 /* Do not warn if the signed quantity is an
7524 unsuffixed integer literal (or some static
7525 constant expression involving such literals or a
7526 conditional expression involving such literals)
7527 and it is non-negative. */
7528 if (tree_expr_nonnegative_p (sop))
7530 /* Do not warn if the comparison is an equality operation,
7531 the unsigned quantity is an integral constant, and it
7532 would fit in the result if the result were signed. */
7533 else if (TREE_CODE (uop) == INTEGER_CST
7534 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
7536 (uop, c_common_signed_type (result_type)))
7538 /* Do not warn if the unsigned quantity is an enumeration
7539 constant and its maximum value would fit in the result
7540 if the result were signed. */
7541 else if (TREE_CODE (uop) == INTEGER_CST
7542 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
7544 (TYPE_MAX_VALUE (TREE_TYPE(uop)),
7545 c_common_signed_type (result_type)))
7548 warning ("comparison between signed and unsigned");
7551 /* Warn if two unsigned values are being compared in a size
7552 larger than their original size, and one (and only one) is the
7553 result of a `~' operator. This comparison will always fail.
7555 Also warn if one operand is a constant, and the constant
7556 does not have all bits set that are set in the ~ operand
7557 when it is extended. */
7559 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
7560 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
7562 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
7563 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
7566 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
7569 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
7572 HOST_WIDE_INT constant, mask;
7573 int unsignedp, bits;
7575 if (host_integerp (primop0, 0))
7578 unsignedp = unsignedp1;
7579 constant = tree_low_cst (primop0, 0);
7584 unsignedp = unsignedp0;
7585 constant = tree_low_cst (primop1, 0);
7588 bits = TYPE_PRECISION (TREE_TYPE (primop));
7589 if (bits < TYPE_PRECISION (result_type)
7590 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
7592 mask = (~ (HOST_WIDE_INT) 0) << bits;
7593 if ((mask & constant) != mask)
7594 warning ("comparison of promoted ~unsigned with constant");
7597 else if (unsignedp0 && unsignedp1
7598 && (TYPE_PRECISION (TREE_TYPE (primop0))
7599 < TYPE_PRECISION (result_type))
7600 && (TYPE_PRECISION (TREE_TYPE (primop1))
7601 < TYPE_PRECISION (result_type)))
7602 warning ("comparison of promoted ~unsigned with unsigned");
7608 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
7609 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
7610 Then the expression will be built.
7611 It will be given type FINAL_TYPE if that is nonzero;
7612 otherwise, it will be given type RESULT_TYPE. */
7616 binary_op_error (code);
7617 return error_mark_node;
7622 if (TREE_TYPE (op0) != result_type)
7623 op0 = convert (result_type, op0);
7624 if (TREE_TYPE (op1) != result_type)
7625 op1 = convert (result_type, op1);
7627 /* This can happen if one operand has a vector type, and the other
7628 has a different type. */
7629 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
7630 return error_mark_node;
7633 if (build_type == NULL_TREE)
7634 build_type = result_type;
7637 tree result = build2 (resultcode, build_type, op0, op1);
7639 /* Treat expressions in initializers specially as they can't trap. */
7640 result = require_constant_value ? fold_initializer (result)
7643 if (final_type != 0)
7644 result = convert (final_type, result);