1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005 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, 51 Franklin Street, Fifth Floor, 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"
46 #include "tree-flow.h"
48 /* Possible cases of implicit bad conversions. Used to select
49 diagnostic messages in convert_for_assignment. */
58 /* The level of nesting inside "__alignof__". */
61 /* The level of nesting inside "sizeof". */
64 /* The level of nesting inside "typeof". */
67 struct c_label_context_se *label_context_stack_se;
68 struct c_label_context_vm *label_context_stack_vm;
70 /* Nonzero if we've already printed a "missing braces around initializer"
71 message within this initializer. */
72 static int missing_braces_mentioned;
74 static int require_constant_value;
75 static int require_constant_elements;
77 static tree qualify_type (tree, tree);
78 static int tagged_types_tu_compatible_p (tree, tree);
79 static int comp_target_types (tree, tree);
80 static int function_types_compatible_p (tree, tree);
81 static int type_lists_compatible_p (tree, tree);
82 static tree decl_constant_value_for_broken_optimization (tree);
83 static tree lookup_field (tree, tree);
84 static tree convert_arguments (tree, tree, tree, tree);
85 static tree pointer_diff (tree, tree);
86 static tree convert_for_assignment (tree, tree, enum impl_conv, tree, tree,
88 static tree valid_compound_expr_initializer (tree, tree);
89 static void push_string (const char *);
90 static void push_member_name (tree);
91 static void push_array_bounds (int);
92 static int spelling_length (void);
93 static char *print_spelling (char *);
94 static void warning_init (const char *);
95 static tree digest_init (tree, tree, bool, int);
96 static void output_init_element (tree, bool, tree, tree, int);
97 static void output_pending_init_elements (int);
98 static int set_designator (int);
99 static void push_range_stack (tree);
100 static void add_pending_init (tree, tree);
101 static void set_nonincremental_init (void);
102 static void set_nonincremental_init_from_string (tree);
103 static tree find_init_member (tree);
104 static void readonly_error (tree, enum lvalue_use);
105 static int lvalue_or_else (tree, enum lvalue_use);
106 static int lvalue_p (tree);
107 static void record_maybe_used_decl (tree);
109 /* Do `exp = require_complete_type (exp);' to make sure exp
110 does not have an incomplete type. (That includes void types.) */
113 require_complete_type (tree value)
115 tree type = TREE_TYPE (value);
117 if (value == error_mark_node || type == error_mark_node)
118 return error_mark_node;
120 /* First, detect a valid value with a complete type. */
121 if (COMPLETE_TYPE_P (type))
124 c_incomplete_type_error (value, type);
125 return error_mark_node;
128 /* Print an error message for invalid use of an incomplete type.
129 VALUE is the expression that was used (or 0 if that isn't known)
130 and TYPE is the type that was invalid. */
133 c_incomplete_type_error (tree value, tree type)
135 const char *type_code_string;
137 /* Avoid duplicate error message. */
138 if (TREE_CODE (type) == ERROR_MARK)
141 if (value != 0 && (TREE_CODE (value) == VAR_DECL
142 || TREE_CODE (value) == PARM_DECL))
143 error ("%qD has an incomplete type", value);
147 /* We must print an error message. Be clever about what it says. */
149 switch (TREE_CODE (type))
152 type_code_string = "struct";
156 type_code_string = "union";
160 type_code_string = "enum";
164 error ("invalid use of void expression");
168 if (TYPE_DOMAIN (type))
170 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
172 error ("invalid use of flexible array member");
175 type = TREE_TYPE (type);
178 error ("invalid use of array with unspecified bounds");
185 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
186 error ("invalid use of undefined type %<%s %E%>",
187 type_code_string, TYPE_NAME (type));
189 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
190 error ("invalid use of incomplete typedef %qD", TYPE_NAME (type));
194 /* Given a type, apply default promotions wrt unnamed function
195 arguments and return the new type. */
198 c_type_promotes_to (tree type)
200 if (TYPE_MAIN_VARIANT (type) == float_type_node)
201 return double_type_node;
203 if (c_promoting_integer_type_p (type))
205 /* Preserve unsignedness if not really getting any wider. */
206 if (TYPE_UNSIGNED (type)
207 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
208 return unsigned_type_node;
209 return integer_type_node;
215 /* Return a variant of TYPE which has all the type qualifiers of LIKE
216 as well as those of TYPE. */
219 qualify_type (tree type, tree like)
221 return c_build_qualified_type (type,
222 TYPE_QUALS (type) | TYPE_QUALS (like));
225 /* Return the composite type of two compatible types.
227 We assume that comptypes has already been done and returned
228 nonzero; if that isn't so, this may crash. In particular, we
229 assume that qualifiers match. */
232 composite_type (tree t1, tree t2)
234 enum tree_code code1;
235 enum tree_code code2;
238 /* Save time if the two types are the same. */
240 if (t1 == t2) return t1;
242 /* If one type is nonsense, use the other. */
243 if (t1 == error_mark_node)
245 if (t2 == error_mark_node)
248 code1 = TREE_CODE (t1);
249 code2 = TREE_CODE (t2);
251 /* Merge the attributes. */
252 attributes = targetm.merge_type_attributes (t1, t2);
254 /* If one is an enumerated type and the other is the compatible
255 integer type, the composite type might be either of the two
256 (DR#013 question 3). For consistency, use the enumerated type as
257 the composite type. */
259 if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
261 if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
264 gcc_assert (code1 == code2);
269 /* For two pointers, do this recursively on the target type. */
271 tree pointed_to_1 = TREE_TYPE (t1);
272 tree pointed_to_2 = TREE_TYPE (t2);
273 tree target = composite_type (pointed_to_1, pointed_to_2);
274 t1 = build_pointer_type (target);
275 t1 = build_type_attribute_variant (t1, attributes);
276 return qualify_type (t1, t2);
281 tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
284 tree d1 = TYPE_DOMAIN (t1);
285 tree d2 = TYPE_DOMAIN (t2);
286 bool d1_variable, d2_variable;
287 bool d1_zero, d2_zero;
289 /* We should not have any type quals on arrays at all. */
290 gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
292 d1_zero = d1 == 0 || !TYPE_MAX_VALUE (d1);
293 d2_zero = d2 == 0 || !TYPE_MAX_VALUE (d2);
295 d1_variable = (!d1_zero
296 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
297 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
298 d2_variable = (!d2_zero
299 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
300 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
302 /* Save space: see if the result is identical to one of the args. */
303 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1)
304 && (d2_variable || d2_zero || !d1_variable))
305 return build_type_attribute_variant (t1, attributes);
306 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2)
307 && (d1_variable || d1_zero || !d2_variable))
308 return build_type_attribute_variant (t2, attributes);
310 if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
311 return build_type_attribute_variant (t1, attributes);
312 if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
313 return build_type_attribute_variant (t2, attributes);
315 /* Merge the element types, and have a size if either arg has
316 one. We may have qualifiers on the element types. To set
317 up TYPE_MAIN_VARIANT correctly, we need to form the
318 composite of the unqualified types and add the qualifiers
320 quals = TYPE_QUALS (strip_array_types (elt));
321 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
322 t1 = build_array_type (unqual_elt,
323 TYPE_DOMAIN ((TYPE_DOMAIN (t1)
329 t1 = c_build_qualified_type (t1, quals);
330 return build_type_attribute_variant (t1, attributes);
334 /* Function types: prefer the one that specified arg types.
335 If both do, merge the arg types. Also merge the return types. */
337 tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
338 tree p1 = TYPE_ARG_TYPES (t1);
339 tree p2 = TYPE_ARG_TYPES (t2);
344 /* Save space: see if the result is identical to one of the args. */
345 if (valtype == TREE_TYPE (t1) && !TYPE_ARG_TYPES (t2))
346 return build_type_attribute_variant (t1, attributes);
347 if (valtype == TREE_TYPE (t2) && !TYPE_ARG_TYPES (t1))
348 return build_type_attribute_variant (t2, attributes);
350 /* Simple way if one arg fails to specify argument types. */
351 if (TYPE_ARG_TYPES (t1) == 0)
353 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
354 t1 = build_type_attribute_variant (t1, attributes);
355 return qualify_type (t1, t2);
357 if (TYPE_ARG_TYPES (t2) == 0)
359 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
360 t1 = build_type_attribute_variant (t1, attributes);
361 return qualify_type (t1, t2);
364 /* If both args specify argument types, we must merge the two
365 lists, argument by argument. */
366 /* Tell global_bindings_p to return false so that variable_size
367 doesn't die on VLAs in parameter types. */
368 c_override_global_bindings_to_false = true;
370 len = list_length (p1);
373 for (i = 0; i < len; i++)
374 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
379 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
381 /* A null type means arg type is not specified.
382 Take whatever the other function type has. */
383 if (TREE_VALUE (p1) == 0)
385 TREE_VALUE (n) = TREE_VALUE (p2);
388 if (TREE_VALUE (p2) == 0)
390 TREE_VALUE (n) = TREE_VALUE (p1);
394 /* Given wait (union {union wait *u; int *i} *)
395 and wait (union wait *),
396 prefer union wait * as type of parm. */
397 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
398 && TREE_VALUE (p1) != TREE_VALUE (p2))
401 tree mv2 = TREE_VALUE (p2);
402 if (mv2 && mv2 != error_mark_node
403 && TREE_CODE (mv2) != ARRAY_TYPE)
404 mv2 = TYPE_MAIN_VARIANT (mv2);
405 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
406 memb; memb = TREE_CHAIN (memb))
408 tree mv3 = TREE_TYPE (memb);
409 if (mv3 && mv3 != error_mark_node
410 && TREE_CODE (mv3) != ARRAY_TYPE)
411 mv3 = TYPE_MAIN_VARIANT (mv3);
412 if (comptypes (mv3, mv2))
414 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
417 pedwarn ("function types not truly compatible in ISO C");
422 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
423 && TREE_VALUE (p2) != TREE_VALUE (p1))
426 tree mv1 = TREE_VALUE (p1);
427 if (mv1 && mv1 != error_mark_node
428 && TREE_CODE (mv1) != ARRAY_TYPE)
429 mv1 = TYPE_MAIN_VARIANT (mv1);
430 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
431 memb; memb = TREE_CHAIN (memb))
433 tree mv3 = TREE_TYPE (memb);
434 if (mv3 && mv3 != error_mark_node
435 && TREE_CODE (mv3) != ARRAY_TYPE)
436 mv3 = TYPE_MAIN_VARIANT (mv3);
437 if (comptypes (mv3, mv1))
439 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
442 pedwarn ("function types not truly compatible in ISO C");
447 TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
451 c_override_global_bindings_to_false = false;
452 t1 = build_function_type (valtype, newargs);
453 t1 = qualify_type (t1, t2);
454 /* ... falls through ... */
458 return build_type_attribute_variant (t1, attributes);
463 /* Return the type of a conditional expression between pointers to
464 possibly differently qualified versions of compatible types.
466 We assume that comp_target_types has already been done and returned
467 nonzero; if that isn't so, this may crash. */
470 common_pointer_type (tree t1, tree t2)
473 tree pointed_to_1, mv1;
474 tree pointed_to_2, mv2;
477 /* Save time if the two types are the same. */
479 if (t1 == t2) return t1;
481 /* If one type is nonsense, use the other. */
482 if (t1 == error_mark_node)
484 if (t2 == error_mark_node)
487 gcc_assert (TREE_CODE (t1) == POINTER_TYPE
488 && TREE_CODE (t2) == POINTER_TYPE);
490 /* Merge the attributes. */
491 attributes = targetm.merge_type_attributes (t1, t2);
493 /* Find the composite type of the target types, and combine the
494 qualifiers of the two types' targets. Do not lose qualifiers on
495 array element types by taking the TYPE_MAIN_VARIANT. */
496 mv1 = pointed_to_1 = TREE_TYPE (t1);
497 mv2 = pointed_to_2 = TREE_TYPE (t2);
498 if (TREE_CODE (mv1) != ARRAY_TYPE)
499 mv1 = TYPE_MAIN_VARIANT (pointed_to_1);
500 if (TREE_CODE (mv2) != ARRAY_TYPE)
501 mv2 = TYPE_MAIN_VARIANT (pointed_to_2);
502 target = composite_type (mv1, mv2);
503 t1 = build_pointer_type (c_build_qualified_type
505 TYPE_QUALS (pointed_to_1) |
506 TYPE_QUALS (pointed_to_2)));
507 return build_type_attribute_variant (t1, attributes);
510 /* Return the common type for two arithmetic types under the usual
511 arithmetic conversions. The default conversions have already been
512 applied, and enumerated types converted to their compatible integer
513 types. The resulting type is unqualified and has no attributes.
515 This is the type for the result of most arithmetic operations
516 if the operands have the given two types. */
519 c_common_type (tree t1, tree t2)
521 enum tree_code code1;
522 enum tree_code code2;
524 /* If one type is nonsense, use the other. */
525 if (t1 == error_mark_node)
527 if (t2 == error_mark_node)
530 if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
531 t1 = TYPE_MAIN_VARIANT (t1);
533 if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
534 t2 = TYPE_MAIN_VARIANT (t2);
536 if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
537 t1 = build_type_attribute_variant (t1, NULL_TREE);
539 if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
540 t2 = build_type_attribute_variant (t2, NULL_TREE);
542 /* Save time if the two types are the same. */
544 if (t1 == t2) return t1;
546 code1 = TREE_CODE (t1);
547 code2 = TREE_CODE (t2);
549 gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
550 || code1 == REAL_TYPE || code1 == INTEGER_TYPE);
551 gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
552 || code2 == REAL_TYPE || code2 == INTEGER_TYPE);
554 /* If one type is a vector type, return that type. (How the usual
555 arithmetic conversions apply to the vector types extension is not
556 precisely specified.) */
557 if (code1 == VECTOR_TYPE)
560 if (code2 == VECTOR_TYPE)
563 /* If one type is complex, form the common type of the non-complex
564 components, then make that complex. Use T1 or T2 if it is the
566 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
568 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
569 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
570 tree subtype = c_common_type (subtype1, subtype2);
572 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
574 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
577 return build_complex_type (subtype);
580 /* If only one is real, use it as the result. */
582 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
585 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
588 /* Both real or both integers; use the one with greater precision. */
590 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
592 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
595 /* Same precision. Prefer long longs to longs to ints when the
596 same precision, following the C99 rules on integer type rank
597 (which are equivalent to the C90 rules for C90 types). */
599 if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
600 || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
601 return long_long_unsigned_type_node;
603 if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
604 || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
606 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
607 return long_long_unsigned_type_node;
609 return long_long_integer_type_node;
612 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
613 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
614 return long_unsigned_type_node;
616 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
617 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
619 /* But preserve unsignedness from the other type,
620 since long cannot hold all the values of an unsigned int. */
621 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
622 return long_unsigned_type_node;
624 return long_integer_type_node;
627 /* Likewise, prefer long double to double even if same size. */
628 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
629 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
630 return long_double_type_node;
632 /* Otherwise prefer the unsigned one. */
634 if (TYPE_UNSIGNED (t1))
640 /* Wrapper around c_common_type that is used by c-common.c. ENUMERAL_TYPEs
641 are allowed here and are converted to their compatible integer types.
642 BOOLEAN_TYPEs are allowed here and return either boolean_type_node or
643 preferably a non-Boolean type as the common type. */
645 common_type (tree t1, tree t2)
647 if (TREE_CODE (t1) == ENUMERAL_TYPE)
648 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
649 if (TREE_CODE (t2) == ENUMERAL_TYPE)
650 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
652 /* If both types are BOOLEAN_TYPE, then return boolean_type_node. */
653 if (TREE_CODE (t1) == BOOLEAN_TYPE
654 && TREE_CODE (t2) == BOOLEAN_TYPE)
655 return boolean_type_node;
657 /* If either type is BOOLEAN_TYPE, then return the other. */
658 if (TREE_CODE (t1) == BOOLEAN_TYPE)
660 if (TREE_CODE (t2) == BOOLEAN_TYPE)
663 return c_common_type (t1, t2);
666 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
667 or various other operations. Return 2 if they are compatible
668 but a warning may be needed if you use them together. */
671 comptypes (tree type1, tree type2)
677 /* Suppress errors caused by previously reported errors. */
679 if (t1 == t2 || !t1 || !t2
680 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
683 /* If either type is the internal version of sizetype, return the
685 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
686 && TYPE_ORIG_SIZE_TYPE (t1))
687 t1 = TYPE_ORIG_SIZE_TYPE (t1);
689 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
690 && TYPE_ORIG_SIZE_TYPE (t2))
691 t2 = TYPE_ORIG_SIZE_TYPE (t2);
694 /* Enumerated types are compatible with integer types, but this is
695 not transitive: two enumerated types in the same translation unit
696 are compatible with each other only if they are the same type. */
698 if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
699 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
700 else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
701 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
706 /* Different classes of types can't be compatible. */
708 if (TREE_CODE (t1) != TREE_CODE (t2))
711 /* Qualifiers must match. C99 6.7.3p9 */
713 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
716 /* Allow for two different type nodes which have essentially the same
717 definition. Note that we already checked for equality of the type
718 qualifiers (just above). */
720 if (TREE_CODE (t1) != ARRAY_TYPE
721 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
724 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
725 if (!(attrval = targetm.comp_type_attributes (t1, t2)))
728 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
731 switch (TREE_CODE (t1))
734 /* Do not remove mode or aliasing information. */
735 if (TYPE_MODE (t1) != TYPE_MODE (t2)
736 || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2))
738 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
739 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
743 val = function_types_compatible_p (t1, t2);
748 tree d1 = TYPE_DOMAIN (t1);
749 tree d2 = TYPE_DOMAIN (t2);
750 bool d1_variable, d2_variable;
751 bool d1_zero, d2_zero;
754 /* Target types must match incl. qualifiers. */
755 if (TREE_TYPE (t1) != TREE_TYPE (t2)
756 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
759 /* Sizes must match unless one is missing or variable. */
760 if (d1 == 0 || d2 == 0 || d1 == d2)
763 d1_zero = !TYPE_MAX_VALUE (d1);
764 d2_zero = !TYPE_MAX_VALUE (d2);
766 d1_variable = (!d1_zero
767 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
768 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
769 d2_variable = (!d2_zero
770 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
771 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
773 if (d1_variable || d2_variable)
775 if (d1_zero && d2_zero)
777 if (d1_zero || d2_zero
778 || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
779 || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
788 if (val != 1 && !same_translation_unit_p (t1, t2))
789 val = tagged_types_tu_compatible_p (t1, t2);
793 val = TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
794 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2));
800 return attrval == 2 && val == 1 ? 2 : val;
803 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
804 ignoring their qualifiers. */
807 comp_target_types (tree ttl, tree ttr)
812 /* Do not lose qualifiers on element types of array types that are
813 pointer targets by taking their TYPE_MAIN_VARIANT. */
814 mvl = TREE_TYPE (ttl);
815 mvr = TREE_TYPE (ttr);
816 if (TREE_CODE (mvl) != ARRAY_TYPE)
817 mvl = TYPE_MAIN_VARIANT (mvl);
818 if (TREE_CODE (mvr) != ARRAY_TYPE)
819 mvr = TYPE_MAIN_VARIANT (mvr);
820 val = comptypes (mvl, mvr);
822 if (val == 2 && pedantic)
823 pedwarn ("types are not quite compatible");
827 /* Subroutines of `comptypes'. */
829 /* Determine whether two trees derive from the same translation unit.
830 If the CONTEXT chain ends in a null, that tree's context is still
831 being parsed, so if two trees have context chains ending in null,
832 they're in the same translation unit. */
834 same_translation_unit_p (tree t1, tree t2)
836 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
837 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
839 case tcc_declaration:
840 t1 = DECL_CONTEXT (t1); break;
842 t1 = TYPE_CONTEXT (t1); break;
843 case tcc_exceptional:
844 t1 = BLOCK_SUPERCONTEXT (t1); break; /* assume block */
845 default: gcc_unreachable ();
848 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
849 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
851 case tcc_declaration:
852 t2 = DECL_CONTEXT (t2); break;
854 t2 = TYPE_CONTEXT (t2); break;
855 case tcc_exceptional:
856 t2 = BLOCK_SUPERCONTEXT (t2); break; /* assume block */
857 default: gcc_unreachable ();
863 /* The C standard says that two structures in different translation
864 units are compatible with each other only if the types of their
865 fields are compatible (among other things). So, consider two copies
866 of this structure: */
868 struct tagged_tu_seen {
869 const struct tagged_tu_seen * next;
874 /* Can they be compatible with each other? We choose to break the
875 recursion by allowing those types to be compatible. */
877 static const struct tagged_tu_seen * tagged_tu_seen_base;
879 /* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
880 compatible. If the two types are not the same (which has been
881 checked earlier), this can only happen when multiple translation
882 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
886 tagged_types_tu_compatible_p (tree t1, tree t2)
889 bool needs_warning = false;
891 /* We have to verify that the tags of the types are the same. This
892 is harder than it looks because this may be a typedef, so we have
893 to go look at the original type. It may even be a typedef of a
895 In the case of compiler-created builtin structs the TYPE_DECL
896 may be a dummy, with no DECL_ORIGINAL_TYPE. Don't fault. */
897 while (TYPE_NAME (t1)
898 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
899 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
900 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
902 while (TYPE_NAME (t2)
903 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL
904 && DECL_ORIGINAL_TYPE (TYPE_NAME (t2)))
905 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
907 /* C90 didn't have the requirement that the two tags be the same. */
908 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
911 /* C90 didn't say what happened if one or both of the types were
912 incomplete; we choose to follow C99 rules here, which is that they
914 if (TYPE_SIZE (t1) == NULL
915 || TYPE_SIZE (t2) == NULL)
919 const struct tagged_tu_seen * tts_i;
920 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
921 if (tts_i->t1 == t1 && tts_i->t2 == t2)
925 switch (TREE_CODE (t1))
930 /* Speed up the case where the type values are in the same order. */
931 tree tv1 = TYPE_VALUES (t1);
932 tree tv2 = TYPE_VALUES (t2);
937 for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
939 if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
941 if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
945 if (tv1 == NULL_TREE && tv2 == NULL_TREE)
947 if (tv1 == NULL_TREE || tv2 == NULL_TREE)
950 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
953 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
955 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
957 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
965 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
968 for (s1 = TYPE_FIELDS (t1); s1; s1 = TREE_CHAIN (s1))
971 struct tagged_tu_seen tts;
973 tts.next = tagged_tu_seen_base;
976 tagged_tu_seen_base = &tts;
978 if (DECL_NAME (s1) != NULL)
979 for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
980 if (DECL_NAME (s1) == DECL_NAME (s2))
983 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
987 needs_warning = true;
989 if (TREE_CODE (s1) == FIELD_DECL
990 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
991 DECL_FIELD_BIT_OFFSET (s2)) != 1)
997 tagged_tu_seen_base = tts.next;
1001 return needs_warning ? 2 : 1;
1006 struct tagged_tu_seen tts;
1008 tts.next = tagged_tu_seen_base;
1011 tagged_tu_seen_base = &tts;
1013 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
1015 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
1018 if (TREE_CODE (s1) != TREE_CODE (s2)
1019 || DECL_NAME (s1) != DECL_NAME (s2))
1021 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
1025 needs_warning = true;
1027 if (TREE_CODE (s1) == FIELD_DECL
1028 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1029 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1032 tagged_tu_seen_base = tts.next;
1035 return needs_warning ? 2 : 1;
1043 /* Return 1 if two function types F1 and F2 are compatible.
1044 If either type specifies no argument types,
1045 the other must specify a fixed number of self-promoting arg types.
1046 Otherwise, if one type specifies only the number of arguments,
1047 the other must specify that number of self-promoting arg types.
1048 Otherwise, the argument types must match. */
1051 function_types_compatible_p (tree f1, tree f2)
1054 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1059 ret1 = TREE_TYPE (f1);
1060 ret2 = TREE_TYPE (f2);
1062 /* 'volatile' qualifiers on a function's return type used to mean
1063 the function is noreturn. */
1064 if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
1065 pedwarn ("function return types not compatible due to %<volatile%>");
1066 if (TYPE_VOLATILE (ret1))
1067 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
1068 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
1069 if (TYPE_VOLATILE (ret2))
1070 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
1071 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
1072 val = comptypes (ret1, ret2);
1076 args1 = TYPE_ARG_TYPES (f1);
1077 args2 = TYPE_ARG_TYPES (f2);
1079 /* An unspecified parmlist matches any specified parmlist
1080 whose argument types don't need default promotions. */
1084 if (!self_promoting_args_p (args2))
1086 /* If one of these types comes from a non-prototype fn definition,
1087 compare that with the other type's arglist.
1088 If they don't match, ask for a warning (but no error). */
1089 if (TYPE_ACTUAL_ARG_TYPES (f1)
1090 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
1096 if (!self_promoting_args_p (args1))
1098 if (TYPE_ACTUAL_ARG_TYPES (f2)
1099 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
1104 /* Both types have argument lists: compare them and propagate results. */
1105 val1 = type_lists_compatible_p (args1, args2);
1106 return val1 != 1 ? val1 : val;
1109 /* Check two lists of types for compatibility,
1110 returning 0 for incompatible, 1 for compatible,
1111 or 2 for compatible with warning. */
1114 type_lists_compatible_p (tree args1, tree args2)
1116 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1122 tree a1, mv1, a2, mv2;
1123 if (args1 == 0 && args2 == 0)
1125 /* If one list is shorter than the other,
1126 they fail to match. */
1127 if (args1 == 0 || args2 == 0)
1129 mv1 = a1 = TREE_VALUE (args1);
1130 mv2 = a2 = TREE_VALUE (args2);
1131 if (mv1 && mv1 != error_mark_node && TREE_CODE (mv1) != ARRAY_TYPE)
1132 mv1 = TYPE_MAIN_VARIANT (mv1);
1133 if (mv2 && mv2 != error_mark_node && TREE_CODE (mv2) != ARRAY_TYPE)
1134 mv2 = TYPE_MAIN_VARIANT (mv2);
1135 /* A null pointer instead of a type
1136 means there is supposed to be an argument
1137 but nothing is specified about what type it has.
1138 So match anything that self-promotes. */
1141 if (c_type_promotes_to (a2) != a2)
1146 if (c_type_promotes_to (a1) != a1)
1149 /* If one of the lists has an error marker, ignore this arg. */
1150 else if (TREE_CODE (a1) == ERROR_MARK
1151 || TREE_CODE (a2) == ERROR_MARK)
1153 else if (!(newval = comptypes (mv1, mv2)))
1155 /* Allow wait (union {union wait *u; int *i} *)
1156 and wait (union wait *) to be compatible. */
1157 if (TREE_CODE (a1) == UNION_TYPE
1158 && (TYPE_NAME (a1) == 0
1159 || TYPE_TRANSPARENT_UNION (a1))
1160 && TREE_CODE (TYPE_SIZE (a1)) == INTEGER_CST
1161 && tree_int_cst_equal (TYPE_SIZE (a1),
1165 for (memb = TYPE_FIELDS (a1);
1166 memb; memb = TREE_CHAIN (memb))
1168 tree mv3 = TREE_TYPE (memb);
1169 if (mv3 && mv3 != error_mark_node
1170 && TREE_CODE (mv3) != ARRAY_TYPE)
1171 mv3 = TYPE_MAIN_VARIANT (mv3);
1172 if (comptypes (mv3, mv2))
1178 else if (TREE_CODE (a2) == UNION_TYPE
1179 && (TYPE_NAME (a2) == 0
1180 || TYPE_TRANSPARENT_UNION (a2))
1181 && TREE_CODE (TYPE_SIZE (a2)) == INTEGER_CST
1182 && tree_int_cst_equal (TYPE_SIZE (a2),
1186 for (memb = TYPE_FIELDS (a2);
1187 memb; memb = TREE_CHAIN (memb))
1189 tree mv3 = TREE_TYPE (memb);
1190 if (mv3 && mv3 != error_mark_node
1191 && TREE_CODE (mv3) != ARRAY_TYPE)
1192 mv3 = TYPE_MAIN_VARIANT (mv3);
1193 if (comptypes (mv3, mv1))
1203 /* comptypes said ok, but record if it said to warn. */
1207 args1 = TREE_CHAIN (args1);
1208 args2 = TREE_CHAIN (args2);
1212 /* Compute the size to increment a pointer by. */
1215 c_size_in_bytes (tree type)
1217 enum tree_code code = TREE_CODE (type);
1219 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
1220 return size_one_node;
1222 if (!COMPLETE_OR_VOID_TYPE_P (type))
1224 error ("arithmetic on pointer to an incomplete type");
1225 return size_one_node;
1228 /* Convert in case a char is more than one unit. */
1229 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
1230 size_int (TYPE_PRECISION (char_type_node)
1234 /* Return either DECL or its known constant value (if it has one). */
1237 decl_constant_value (tree decl)
1239 if (/* Don't change a variable array bound or initial value to a constant
1240 in a place where a variable is invalid. Note that DECL_INITIAL
1241 isn't valid for a PARM_DECL. */
1242 current_function_decl != 0
1243 && TREE_CODE (decl) != PARM_DECL
1244 && !TREE_THIS_VOLATILE (decl)
1245 && TREE_READONLY (decl)
1246 && DECL_INITIAL (decl) != 0
1247 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
1248 /* This is invalid if initial value is not constant.
1249 If it has either a function call, a memory reference,
1250 or a variable, then re-evaluating it could give different results. */
1251 && TREE_CONSTANT (DECL_INITIAL (decl))
1252 /* Check for cases where this is sub-optimal, even though valid. */
1253 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
1254 return DECL_INITIAL (decl);
1258 /* Return either DECL or its known constant value (if it has one), but
1259 return DECL if pedantic or DECL has mode BLKmode. This is for
1260 bug-compatibility with the old behavior of decl_constant_value
1261 (before GCC 3.0); every use of this function is a bug and it should
1262 be removed before GCC 3.1. It is not appropriate to use pedantic
1263 in a way that affects optimization, and BLKmode is probably not the
1264 right test for avoiding misoptimizations either. */
1267 decl_constant_value_for_broken_optimization (tree decl)
1271 if (pedantic || DECL_MODE (decl) == BLKmode)
1274 ret = decl_constant_value (decl);
1275 /* Avoid unwanted tree sharing between the initializer and current
1276 function's body where the tree can be modified e.g. by the
1278 if (ret != decl && TREE_STATIC (decl))
1279 ret = unshare_expr (ret);
1283 /* Convert the array expression EXP to a pointer. */
1285 array_to_pointer_conversion (tree exp)
1287 tree orig_exp = exp;
1288 tree type = TREE_TYPE (exp);
1290 tree restype = TREE_TYPE (type);
1293 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
1295 STRIP_TYPE_NOPS (exp);
1297 if (TREE_NO_WARNING (orig_exp))
1298 TREE_NO_WARNING (exp) = 1;
1300 ptrtype = build_pointer_type (restype);
1302 if (TREE_CODE (exp) == INDIRECT_REF)
1303 return convert (ptrtype, TREE_OPERAND (exp, 0));
1305 if (TREE_CODE (exp) == VAR_DECL)
1307 /* We are making an ADDR_EXPR of ptrtype. This is a valid
1308 ADDR_EXPR because it's the best way of representing what
1309 happens in C when we take the address of an array and place
1310 it in a pointer to the element type. */
1311 adr = build1 (ADDR_EXPR, ptrtype, exp);
1312 if (!c_mark_addressable (exp))
1313 return error_mark_node;
1314 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1318 /* This way is better for a COMPONENT_REF since it can
1319 simplify the offset for a component. */
1320 adr = build_unary_op (ADDR_EXPR, exp, 1);
1321 return convert (ptrtype, adr);
1324 /* Convert the function expression EXP to a pointer. */
1326 function_to_pointer_conversion (tree exp)
1328 tree orig_exp = exp;
1330 gcc_assert (TREE_CODE (TREE_TYPE (exp)) == FUNCTION_TYPE);
1332 STRIP_TYPE_NOPS (exp);
1334 if (TREE_NO_WARNING (orig_exp))
1335 TREE_NO_WARNING (exp) = 1;
1337 return build_unary_op (ADDR_EXPR, exp, 0);
1340 /* Perform the default conversion of arrays and functions to pointers.
1341 Return the result of converting EXP. For any other expression, just
1342 return EXP after removing NOPs. */
1345 default_function_array_conversion (struct c_expr exp)
1347 tree orig_exp = exp.value;
1348 tree type = TREE_TYPE (exp.value);
1349 enum tree_code code = TREE_CODE (type);
1355 bool not_lvalue = false;
1356 bool lvalue_array_p;
1358 while ((TREE_CODE (exp.value) == NON_LVALUE_EXPR
1359 || TREE_CODE (exp.value) == NOP_EXPR)
1360 && TREE_TYPE (TREE_OPERAND (exp.value, 0)) == type)
1362 if (TREE_CODE (exp.value) == NON_LVALUE_EXPR)
1364 exp.value = TREE_OPERAND (exp.value, 0);
1367 if (TREE_NO_WARNING (orig_exp))
1368 TREE_NO_WARNING (exp.value) = 1;
1370 lvalue_array_p = !not_lvalue && lvalue_p (exp.value);
1371 if (!flag_isoc99 && !lvalue_array_p)
1373 /* Before C99, non-lvalue arrays do not decay to pointers.
1374 Normally, using such an array would be invalid; but it can
1375 be used correctly inside sizeof or as a statement expression.
1376 Thus, do not give an error here; an error will result later. */
1380 exp.value = array_to_pointer_conversion (exp.value);
1384 exp.value = function_to_pointer_conversion (exp.value);
1387 STRIP_TYPE_NOPS (exp.value);
1388 if (TREE_NO_WARNING (orig_exp))
1389 TREE_NO_WARNING (exp.value) = 1;
1397 /* EXP is an expression of integer type. Apply the integer promotions
1398 to it and return the promoted value. */
1401 perform_integral_promotions (tree exp)
1403 tree type = TREE_TYPE (exp);
1404 enum tree_code code = TREE_CODE (type);
1406 gcc_assert (INTEGRAL_TYPE_P (type));
1408 /* Normally convert enums to int,
1409 but convert wide enums to something wider. */
1410 if (code == ENUMERAL_TYPE)
1412 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
1413 TYPE_PRECISION (integer_type_node)),
1414 ((TYPE_PRECISION (type)
1415 >= TYPE_PRECISION (integer_type_node))
1416 && TYPE_UNSIGNED (type)));
1418 return convert (type, exp);
1421 /* ??? This should no longer be needed now bit-fields have their
1423 if (TREE_CODE (exp) == COMPONENT_REF
1424 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
1425 /* If it's thinner than an int, promote it like a
1426 c_promoting_integer_type_p, otherwise leave it alone. */
1427 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
1428 TYPE_PRECISION (integer_type_node)))
1429 return convert (integer_type_node, exp);
1431 if (c_promoting_integer_type_p (type))
1433 /* Preserve unsignedness if not really getting any wider. */
1434 if (TYPE_UNSIGNED (type)
1435 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1436 return convert (unsigned_type_node, exp);
1438 return convert (integer_type_node, exp);
1445 /* Perform default promotions for C data used in expressions.
1446 Enumeral types or short or char are converted to int.
1447 In addition, manifest constants symbols are replaced by their values. */
1450 default_conversion (tree exp)
1453 tree type = TREE_TYPE (exp);
1454 enum tree_code code = TREE_CODE (type);
1456 /* Functions and arrays have been converted during parsing. */
1457 gcc_assert (code != FUNCTION_TYPE);
1458 if (code == ARRAY_TYPE)
1461 /* Constants can be used directly unless they're not loadable. */
1462 if (TREE_CODE (exp) == CONST_DECL)
1463 exp = DECL_INITIAL (exp);
1465 /* Replace a nonvolatile const static variable with its value unless
1466 it is an array, in which case we must be sure that taking the
1467 address of the array produces consistent results. */
1468 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
1470 exp = decl_constant_value_for_broken_optimization (exp);
1471 type = TREE_TYPE (exp);
1474 /* Strip no-op conversions. */
1476 STRIP_TYPE_NOPS (exp);
1478 if (TREE_NO_WARNING (orig_exp))
1479 TREE_NO_WARNING (exp) = 1;
1481 if (INTEGRAL_TYPE_P (type))
1482 return perform_integral_promotions (exp);
1484 if (code == VOID_TYPE)
1486 error ("void value not ignored as it ought to be");
1487 return error_mark_node;
1492 /* Look up COMPONENT in a structure or union DECL.
1494 If the component name is not found, returns NULL_TREE. Otherwise,
1495 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1496 stepping down the chain to the component, which is in the last
1497 TREE_VALUE of the list. Normally the list is of length one, but if
1498 the component is embedded within (nested) anonymous structures or
1499 unions, the list steps down the chain to the component. */
1502 lookup_field (tree decl, tree component)
1504 tree type = TREE_TYPE (decl);
1507 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1508 to the field elements. Use a binary search on this array to quickly
1509 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1510 will always be set for structures which have many elements. */
1512 if (TYPE_LANG_SPECIFIC (type) && TYPE_LANG_SPECIFIC (type)->s)
1515 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
1517 field = TYPE_FIELDS (type);
1519 top = TYPE_LANG_SPECIFIC (type)->s->len;
1520 while (top - bot > 1)
1522 half = (top - bot + 1) >> 1;
1523 field = field_array[bot+half];
1525 if (DECL_NAME (field) == NULL_TREE)
1527 /* Step through all anon unions in linear fashion. */
1528 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1530 field = field_array[bot++];
1531 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1532 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1534 tree anon = lookup_field (field, component);
1537 return tree_cons (NULL_TREE, field, anon);
1541 /* Entire record is only anon unions. */
1545 /* Restart the binary search, with new lower bound. */
1549 if (DECL_NAME (field) == component)
1551 if (DECL_NAME (field) < component)
1557 if (DECL_NAME (field_array[bot]) == component)
1558 field = field_array[bot];
1559 else if (DECL_NAME (field) != component)
1564 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1566 if (DECL_NAME (field) == NULL_TREE
1567 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1568 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1570 tree anon = lookup_field (field, component);
1573 return tree_cons (NULL_TREE, field, anon);
1576 if (DECL_NAME (field) == component)
1580 if (field == NULL_TREE)
1584 return tree_cons (NULL_TREE, field, NULL_TREE);
1587 /* Make an expression to refer to the COMPONENT field of
1588 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1591 build_component_ref (tree datum, tree component)
1593 tree type = TREE_TYPE (datum);
1594 enum tree_code code = TREE_CODE (type);
1598 if (!objc_is_public (datum, component))
1599 return error_mark_node;
1601 /* See if there is a field or component with name COMPONENT. */
1603 if (code == RECORD_TYPE || code == UNION_TYPE)
1605 if (!COMPLETE_TYPE_P (type))
1607 c_incomplete_type_error (NULL_TREE, type);
1608 return error_mark_node;
1611 field = lookup_field (datum, component);
1615 error ("%qT has no member named %qE", type, component);
1616 return error_mark_node;
1619 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1620 This might be better solved in future the way the C++ front
1621 end does it - by giving the anonymous entities each a
1622 separate name and type, and then have build_component_ref
1623 recursively call itself. We can't do that here. */
1626 tree subdatum = TREE_VALUE (field);
1628 if (TREE_TYPE (subdatum) == error_mark_node)
1629 return error_mark_node;
1631 ref = build3 (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum,
1633 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
1634 TREE_READONLY (ref) = 1;
1635 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
1636 TREE_THIS_VOLATILE (ref) = 1;
1638 if (TREE_DEPRECATED (subdatum))
1639 warn_deprecated_use (subdatum);
1643 field = TREE_CHAIN (field);
1649 else if (code != ERROR_MARK)
1650 error ("request for member %qE in something not a structure or union",
1653 return error_mark_node;
1656 /* Given an expression PTR for a pointer, return an expression
1657 for the value pointed to.
1658 ERRORSTRING is the name of the operator to appear in error messages. */
1661 build_indirect_ref (tree ptr, const char *errorstring)
1663 tree pointer = default_conversion (ptr);
1664 tree type = TREE_TYPE (pointer);
1666 if (TREE_CODE (type) == POINTER_TYPE)
1668 if (TREE_CODE (pointer) == ADDR_EXPR
1669 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1670 == TREE_TYPE (type)))
1671 return TREE_OPERAND (pointer, 0);
1674 tree t = TREE_TYPE (type);
1677 ref = build1 (INDIRECT_REF, t, pointer);
1679 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1681 error ("dereferencing pointer to incomplete type");
1682 return error_mark_node;
1684 if (VOID_TYPE_P (t) && skip_evaluation == 0)
1685 warning (0, "dereferencing %<void *%> pointer");
1687 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1688 so that we get the proper error message if the result is used
1689 to assign to. Also, &* is supposed to be a no-op.
1690 And ANSI C seems to specify that the type of the result
1691 should be the const type. */
1692 /* A de-reference of a pointer to const is not a const. It is valid
1693 to change it via some other pointer. */
1694 TREE_READONLY (ref) = TYPE_READONLY (t);
1695 TREE_SIDE_EFFECTS (ref)
1696 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
1697 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1701 else if (TREE_CODE (pointer) != ERROR_MARK)
1702 error ("invalid type argument of %qs", errorstring);
1703 return error_mark_node;
1706 /* This handles expressions of the form "a[i]", which denotes
1709 This is logically equivalent in C to *(a+i), but we may do it differently.
1710 If A is a variable or a member, we generate a primitive ARRAY_REF.
1711 This avoids forcing the array out of registers, and can work on
1712 arrays that are not lvalues (for example, members of structures returned
1716 build_array_ref (tree array, tree index)
1718 bool swapped = false;
1719 if (TREE_TYPE (array) == error_mark_node
1720 || TREE_TYPE (index) == error_mark_node)
1721 return error_mark_node;
1723 if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
1724 && TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE)
1727 if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
1728 && TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
1730 error ("subscripted value is neither array nor pointer");
1731 return error_mark_node;
1739 if (!INTEGRAL_TYPE_P (TREE_TYPE (index)))
1741 error ("array subscript is not an integer");
1742 return error_mark_node;
1745 if (TREE_CODE (TREE_TYPE (TREE_TYPE (array))) == FUNCTION_TYPE)
1747 error ("subscripted value is pointer to function");
1748 return error_mark_node;
1751 /* Subscripting with type char is likely to lose on a machine where
1752 chars are signed. So warn on any machine, but optionally. Don't
1753 warn for unsigned char since that type is safe. Don't warn for
1754 signed char because anyone who uses that must have done so
1755 deliberately. ??? Existing practice has also been to warn only
1756 when the char index is syntactically the index, not for
1759 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1760 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
1762 /* Apply default promotions *after* noticing character types. */
1763 index = default_conversion (index);
1765 gcc_assert (TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE);
1767 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
1771 /* An array that is indexed by a non-constant
1772 cannot be stored in a register; we must be able to do
1773 address arithmetic on its address.
1774 Likewise an array of elements of variable size. */
1775 if (TREE_CODE (index) != INTEGER_CST
1776 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1777 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1779 if (!c_mark_addressable (array))
1780 return error_mark_node;
1782 /* An array that is indexed by a constant value which is not within
1783 the array bounds cannot be stored in a register either; because we
1784 would get a crash in store_bit_field/extract_bit_field when trying
1785 to access a non-existent part of the register. */
1786 if (TREE_CODE (index) == INTEGER_CST
1787 && TYPE_DOMAIN (TREE_TYPE (array))
1788 && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
1790 if (!c_mark_addressable (array))
1791 return error_mark_node;
1797 while (TREE_CODE (foo) == COMPONENT_REF)
1798 foo = TREE_OPERAND (foo, 0);
1799 if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
1800 pedwarn ("ISO C forbids subscripting %<register%> array");
1801 else if (!flag_isoc99 && !lvalue_p (foo))
1802 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
1805 type = TREE_TYPE (TREE_TYPE (array));
1806 if (TREE_CODE (type) != ARRAY_TYPE)
1807 type = TYPE_MAIN_VARIANT (type);
1808 rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
1809 /* Array ref is const/volatile if the array elements are
1810 or if the array is. */
1811 TREE_READONLY (rval)
1812 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1813 | TREE_READONLY (array));
1814 TREE_SIDE_EFFECTS (rval)
1815 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1816 | TREE_SIDE_EFFECTS (array));
1817 TREE_THIS_VOLATILE (rval)
1818 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1819 /* This was added by rms on 16 Nov 91.
1820 It fixes vol struct foo *a; a->elts[1]
1821 in an inline function.
1822 Hope it doesn't break something else. */
1823 | TREE_THIS_VOLATILE (array));
1824 return require_complete_type (fold (rval));
1828 tree ar = default_conversion (array);
1830 if (ar == error_mark_node)
1833 gcc_assert (TREE_CODE (TREE_TYPE (ar)) == POINTER_TYPE);
1834 gcc_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) != FUNCTION_TYPE);
1836 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, index, 0),
1841 /* Build an external reference to identifier ID. FUN indicates
1842 whether this will be used for a function call. LOC is the source
1843 location of the identifier. */
1845 build_external_ref (tree id, int fun, location_t loc)
1848 tree decl = lookup_name (id);
1850 /* In Objective-C, an instance variable (ivar) may be preferred to
1851 whatever lookup_name() found. */
1852 decl = objc_lookup_ivar (decl, id);
1854 if (decl && decl != error_mark_node)
1857 /* Implicit function declaration. */
1858 ref = implicitly_declare (id);
1859 else if (decl == error_mark_node)
1860 /* Don't complain about something that's already been
1861 complained about. */
1862 return error_mark_node;
1865 undeclared_variable (id, loc);
1866 return error_mark_node;
1869 if (TREE_TYPE (ref) == error_mark_node)
1870 return error_mark_node;
1872 if (TREE_DEPRECATED (ref))
1873 warn_deprecated_use (ref);
1875 if (!skip_evaluation)
1876 assemble_external (ref);
1877 TREE_USED (ref) = 1;
1879 if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
1881 if (!in_sizeof && !in_typeof)
1882 C_DECL_USED (ref) = 1;
1883 else if (DECL_INITIAL (ref) == 0
1884 && DECL_EXTERNAL (ref)
1885 && !TREE_PUBLIC (ref))
1886 record_maybe_used_decl (ref);
1889 if (TREE_CODE (ref) == CONST_DECL)
1891 ref = DECL_INITIAL (ref);
1892 TREE_CONSTANT (ref) = 1;
1893 TREE_INVARIANT (ref) = 1;
1895 else if (current_function_decl != 0
1896 && !DECL_FILE_SCOPE_P (current_function_decl)
1897 && (TREE_CODE (ref) == VAR_DECL
1898 || TREE_CODE (ref) == PARM_DECL
1899 || TREE_CODE (ref) == FUNCTION_DECL))
1901 tree context = decl_function_context (ref);
1903 if (context != 0 && context != current_function_decl)
1904 DECL_NONLOCAL (ref) = 1;
1910 /* Record details of decls possibly used inside sizeof or typeof. */
1911 struct maybe_used_decl
1915 /* The level seen at (in_sizeof + in_typeof). */
1917 /* The next one at this level or above, or NULL. */
1918 struct maybe_used_decl *next;
1921 static struct maybe_used_decl *maybe_used_decls;
1923 /* Record that DECL, an undefined static function reference seen
1924 inside sizeof or typeof, might be used if the operand of sizeof is
1925 a VLA type or the operand of typeof is a variably modified
1929 record_maybe_used_decl (tree decl)
1931 struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
1933 t->level = in_sizeof + in_typeof;
1934 t->next = maybe_used_decls;
1935 maybe_used_decls = t;
1938 /* Pop the stack of decls possibly used inside sizeof or typeof. If
1939 USED is false, just discard them. If it is true, mark them used
1940 (if no longer inside sizeof or typeof) or move them to the next
1941 level up (if still inside sizeof or typeof). */
1944 pop_maybe_used (bool used)
1946 struct maybe_used_decl *p = maybe_used_decls;
1947 int cur_level = in_sizeof + in_typeof;
1948 while (p && p->level > cur_level)
1953 C_DECL_USED (p->decl) = 1;
1955 p->level = cur_level;
1959 if (!used || cur_level == 0)
1960 maybe_used_decls = p;
1963 /* Return the result of sizeof applied to EXPR. */
1966 c_expr_sizeof_expr (struct c_expr expr)
1969 if (expr.value == error_mark_node)
1971 ret.value = error_mark_node;
1972 ret.original_code = ERROR_MARK;
1973 pop_maybe_used (false);
1977 ret.value = c_sizeof (TREE_TYPE (expr.value));
1978 ret.original_code = ERROR_MARK;
1979 pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
1984 /* Return the result of sizeof applied to T, a structure for the type
1985 name passed to sizeof (rather than the type itself). */
1988 c_expr_sizeof_type (struct c_type_name *t)
1992 type = groktypename (t);
1993 ret.value = c_sizeof (type);
1994 ret.original_code = ERROR_MARK;
1995 pop_maybe_used (C_TYPE_VARIABLE_SIZE (type));
1999 /* Build a function call to function FUNCTION with parameters PARAMS.
2000 PARAMS is a list--a chain of TREE_LIST nodes--in which the
2001 TREE_VALUE of each node is a parameter-expression.
2002 FUNCTION's data type may be a function type or a pointer-to-function. */
2005 build_function_call (tree function, tree params)
2007 tree fntype, fundecl = 0;
2008 tree coerced_params;
2009 tree name = NULL_TREE, result;
2012 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
2013 STRIP_TYPE_NOPS (function);
2015 /* Convert anything with function type to a pointer-to-function. */
2016 if (TREE_CODE (function) == FUNCTION_DECL)
2018 /* Implement type-directed function overloading for builtins.
2019 resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
2020 handle all the type checking. The result is a complete expression
2021 that implements this function call. */
2022 tem = resolve_overloaded_builtin (function, params);
2026 name = DECL_NAME (function);
2029 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE)
2030 function = function_to_pointer_conversion (function);
2032 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2033 expressions, like those used for ObjC messenger dispatches. */
2034 function = objc_rewrite_function_call (function, params);
2036 fntype = TREE_TYPE (function);
2038 if (TREE_CODE (fntype) == ERROR_MARK)
2039 return error_mark_node;
2041 if (!(TREE_CODE (fntype) == POINTER_TYPE
2042 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
2044 error ("called object %qE is not a function", function);
2045 return error_mark_node;
2048 if (fundecl && TREE_THIS_VOLATILE (fundecl))
2049 current_function_returns_abnormally = 1;
2051 /* fntype now gets the type of function pointed to. */
2052 fntype = TREE_TYPE (fntype);
2054 /* Check that the function is called through a compatible prototype.
2055 If it is not, replace the call by a trap, wrapped up in a compound
2056 expression if necessary. This has the nice side-effect to prevent
2057 the tree-inliner from generating invalid assignment trees which may
2058 blow up in the RTL expander later. */
2059 if (TREE_CODE (function) == NOP_EXPR
2060 && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
2061 && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
2062 && !comptypes (fntype, TREE_TYPE (tem)))
2064 tree return_type = TREE_TYPE (fntype);
2065 tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
2068 /* This situation leads to run-time undefined behavior. We can't,
2069 therefore, simply error unless we can prove that all possible
2070 executions of the program must execute the code. */
2071 warning (0, "function called through a non-compatible type");
2073 /* We can, however, treat "undefined" any way we please.
2074 Call abort to encourage the user to fix the program. */
2075 inform ("if this code is reached, the program will abort");
2077 if (VOID_TYPE_P (return_type))
2083 if (AGGREGATE_TYPE_P (return_type))
2084 rhs = build_compound_literal (return_type,
2085 build_constructor (return_type, 0));
2087 rhs = fold_build1 (NOP_EXPR, return_type, integer_zero_node);
2089 return build2 (COMPOUND_EXPR, return_type, trap, rhs);
2093 /* Convert the parameters to the types declared in the
2094 function prototype, or apply default promotions. */
2097 = convert_arguments (TYPE_ARG_TYPES (fntype), params, function, fundecl);
2099 if (coerced_params == error_mark_node)
2100 return error_mark_node;
2102 /* Check that the arguments to the function are valid. */
2104 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
2105 TYPE_ARG_TYPES (fntype));
2107 result = build3 (CALL_EXPR, TREE_TYPE (fntype),
2108 function, coerced_params, NULL_TREE);
2109 TREE_SIDE_EFFECTS (result) = 1;
2111 if (require_constant_value)
2113 result = fold_initializer (result);
2115 if (TREE_CONSTANT (result)
2116 && (name == NULL_TREE
2117 || strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10) != 0))
2118 pedwarn_init ("initializer element is not constant");
2121 result = fold (result);
2123 if (VOID_TYPE_P (TREE_TYPE (result)))
2125 return require_complete_type (result);
2128 /* Convert the argument expressions in the list VALUES
2129 to the types in the list TYPELIST. The result is a list of converted
2130 argument expressions, unless there are too few arguments in which
2131 case it is error_mark_node.
2133 If TYPELIST is exhausted, or when an element has NULL as its type,
2134 perform the default conversions.
2136 PARMLIST is the chain of parm decls for the function being called.
2137 It may be 0, if that info is not available.
2138 It is used only for generating error messages.
2140 FUNCTION is a tree for the called function. It is used only for
2141 error messages, where it is formatted with %qE.
2143 This is also where warnings about wrong number of args are generated.
2145 Both VALUES and the returned value are chains of TREE_LIST nodes
2146 with the elements of the list in the TREE_VALUE slots of those nodes. */
2149 convert_arguments (tree typelist, tree values, tree function, tree fundecl)
2151 tree typetail, valtail;
2156 /* Change pointer to function to the function itself for
2158 if (TREE_CODE (function) == ADDR_EXPR
2159 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
2160 function = TREE_OPERAND (function, 0);
2162 /* Handle an ObjC selector specially for diagnostics. */
2163 selector = objc_message_selector ();
2165 /* Scan the given expressions and types, producing individual
2166 converted arguments and pushing them on RESULT in reverse order. */
2168 for (valtail = values, typetail = typelist, parmnum = 0;
2170 valtail = TREE_CHAIN (valtail), parmnum++)
2172 tree type = typetail ? TREE_VALUE (typetail) : 0;
2173 tree val = TREE_VALUE (valtail);
2174 tree rname = function;
2175 int argnum = parmnum + 1;
2176 const char *invalid_func_diag;
2178 if (type == void_type_node)
2180 error ("too many arguments to function %qE", function);
2184 if (selector && argnum > 2)
2190 STRIP_TYPE_NOPS (val);
2192 val = require_complete_type (val);
2196 /* Formal parm type is specified by a function prototype. */
2199 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
2201 error ("type of formal parameter %d is incomplete", parmnum + 1);
2206 /* Optionally warn about conversions that
2207 differ from the default conversions. */
2208 if (warn_conversion || warn_traditional)
2210 unsigned int formal_prec = TYPE_PRECISION (type);
2212 if (INTEGRAL_TYPE_P (type)
2213 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2214 warning (0, "passing argument %d of %qE as integer "
2215 "rather than floating due to prototype",
2217 if (INTEGRAL_TYPE_P (type)
2218 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2219 warning (0, "passing argument %d of %qE as integer "
2220 "rather than complex due to prototype",
2222 else if (TREE_CODE (type) == COMPLEX_TYPE
2223 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2224 warning (0, "passing argument %d of %qE as complex "
2225 "rather than floating due to prototype",
2227 else if (TREE_CODE (type) == REAL_TYPE
2228 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2229 warning (0, "passing argument %d of %qE as floating "
2230 "rather than integer due to prototype",
2232 else if (TREE_CODE (type) == COMPLEX_TYPE
2233 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2234 warning (0, "passing argument %d of %qE as complex "
2235 "rather than integer due to prototype",
2237 else if (TREE_CODE (type) == REAL_TYPE
2238 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2239 warning (0, "passing argument %d of %qE as floating "
2240 "rather than complex due to prototype",
2242 /* ??? At some point, messages should be written about
2243 conversions between complex types, but that's too messy
2245 else if (TREE_CODE (type) == REAL_TYPE
2246 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2248 /* Warn if any argument is passed as `float',
2249 since without a prototype it would be `double'. */
2250 if (formal_prec == TYPE_PRECISION (float_type_node))
2251 warning (0, "passing argument %d of %qE as %<float%> "
2252 "rather than %<double%> due to prototype",
2255 /* Detect integer changing in width or signedness.
2256 These warnings are only activated with
2257 -Wconversion, not with -Wtraditional. */
2258 else if (warn_conversion && INTEGRAL_TYPE_P (type)
2259 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2261 tree would_have_been = default_conversion (val);
2262 tree type1 = TREE_TYPE (would_have_been);
2264 if (TREE_CODE (type) == ENUMERAL_TYPE
2265 && (TYPE_MAIN_VARIANT (type)
2266 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
2267 /* No warning if function asks for enum
2268 and the actual arg is that enum type. */
2270 else if (formal_prec != TYPE_PRECISION (type1))
2271 warning (OPT_Wconversion, "passing argument %d of %qE "
2272 "with different width due to prototype",
2274 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
2276 /* Don't complain if the formal parameter type
2277 is an enum, because we can't tell now whether
2278 the value was an enum--even the same enum. */
2279 else if (TREE_CODE (type) == ENUMERAL_TYPE)
2281 else if (TREE_CODE (val) == INTEGER_CST
2282 && int_fits_type_p (val, type))
2283 /* Change in signedness doesn't matter
2284 if a constant value is unaffected. */
2286 /* If the value is extended from a narrower
2287 unsigned type, it doesn't matter whether we
2288 pass it as signed or unsigned; the value
2289 certainly is the same either way. */
2290 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
2291 && TYPE_UNSIGNED (TREE_TYPE (val)))
2293 else if (TYPE_UNSIGNED (type))
2294 warning (OPT_Wconversion, "passing argument %d of %qE "
2295 "as unsigned due to prototype",
2298 warning (OPT_Wconversion, "passing argument %d of %qE "
2299 "as signed due to prototype", argnum, rname);
2303 parmval = convert_for_assignment (type, val, ic_argpass,
2307 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
2308 && INTEGRAL_TYPE_P (type)
2309 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
2310 parmval = default_conversion (parmval);
2312 result = tree_cons (NULL_TREE, parmval, result);
2314 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
2315 && (TYPE_PRECISION (TREE_TYPE (val))
2316 < TYPE_PRECISION (double_type_node)))
2317 /* Convert `float' to `double'. */
2318 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
2319 else if ((invalid_func_diag =
2320 targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
2322 error (invalid_func_diag);
2323 return error_mark_node;
2326 /* Convert `short' and `char' to full-size `int'. */
2327 result = tree_cons (NULL_TREE, default_conversion (val), result);
2330 typetail = TREE_CHAIN (typetail);
2333 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
2335 error ("too few arguments to function %qE", function);
2336 return error_mark_node;
2339 return nreverse (result);
2342 /* This is the entry point used by the parser to build unary operators
2343 in the input. CODE, a tree_code, specifies the unary operator, and
2344 ARG is the operand. For unary plus, the C parser currently uses
2345 CONVERT_EXPR for code. */
2348 parser_build_unary_op (enum tree_code code, struct c_expr arg)
2350 struct c_expr result;
2352 result.original_code = ERROR_MARK;
2353 result.value = build_unary_op (code, arg.value, 0);
2354 overflow_warning (result.value);
2358 /* This is the entry point used by the parser to build binary operators
2359 in the input. CODE, a tree_code, specifies the binary operator, and
2360 ARG1 and ARG2 are the operands. In addition to constructing the
2361 expression, we check for operands that were written with other binary
2362 operators in a way that is likely to confuse the user. */
2365 parser_build_binary_op (enum tree_code code, struct c_expr arg1,
2368 struct c_expr result;
2370 enum tree_code code1 = arg1.original_code;
2371 enum tree_code code2 = arg2.original_code;
2373 result.value = build_binary_op (code, arg1.value, arg2.value, 1);
2374 result.original_code = code;
2376 if (TREE_CODE (result.value) == ERROR_MARK)
2379 /* Check for cases such as x+y<<z which users are likely
2381 if (warn_parentheses)
2383 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
2385 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2386 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2387 warning (OPT_Wparentheses,
2388 "suggest parentheses around + or - inside shift");
2391 if (code == TRUTH_ORIF_EXPR)
2393 if (code1 == TRUTH_ANDIF_EXPR
2394 || code2 == TRUTH_ANDIF_EXPR)
2395 warning (OPT_Wparentheses,
2396 "suggest parentheses around && within ||");
2399 if (code == BIT_IOR_EXPR)
2401 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
2402 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2403 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
2404 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2405 warning (OPT_Wparentheses,
2406 "suggest parentheses around arithmetic in operand of |");
2407 /* Check cases like x|y==z */
2408 if (TREE_CODE_CLASS (code1) == tcc_comparison
2409 || TREE_CODE_CLASS (code2) == tcc_comparison)
2410 warning (OPT_Wparentheses,
2411 "suggest parentheses around comparison in operand of |");
2414 if (code == BIT_XOR_EXPR)
2416 if (code1 == BIT_AND_EXPR
2417 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2418 || code2 == BIT_AND_EXPR
2419 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2420 warning (OPT_Wparentheses,
2421 "suggest parentheses around arithmetic in operand of ^");
2422 /* Check cases like x^y==z */
2423 if (TREE_CODE_CLASS (code1) == tcc_comparison
2424 || TREE_CODE_CLASS (code2) == tcc_comparison)
2425 warning (OPT_Wparentheses,
2426 "suggest parentheses around comparison in operand of ^");
2429 if (code == BIT_AND_EXPR)
2431 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2432 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2433 warning (OPT_Wparentheses,
2434 "suggest parentheses around + or - in operand of &");
2435 /* Check cases like x&y==z */
2436 if (TREE_CODE_CLASS (code1) == tcc_comparison
2437 || TREE_CODE_CLASS (code2) == tcc_comparison)
2438 warning (OPT_Wparentheses,
2439 "suggest parentheses around comparison in operand of &");
2441 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
2442 if (TREE_CODE_CLASS (code) == tcc_comparison
2443 && (TREE_CODE_CLASS (code1) == tcc_comparison
2444 || TREE_CODE_CLASS (code2) == tcc_comparison))
2445 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
2446 "have their mathematical meaning");
2450 unsigned_conversion_warning (result.value, arg1.value);
2451 unsigned_conversion_warning (result.value, arg2.value);
2452 overflow_warning (result.value);
2457 /* Return a tree for the difference of pointers OP0 and OP1.
2458 The resulting tree has type int. */
2461 pointer_diff (tree op0, tree op1)
2463 tree restype = ptrdiff_type_node;
2465 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2466 tree con0, con1, lit0, lit1;
2467 tree orig_op1 = op1;
2469 if (pedantic || warn_pointer_arith)
2471 if (TREE_CODE (target_type) == VOID_TYPE)
2472 pedwarn ("pointer of type %<void *%> used in subtraction");
2473 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2474 pedwarn ("pointer to a function used in subtraction");
2477 /* If the conversion to ptrdiff_type does anything like widening or
2478 converting a partial to an integral mode, we get a convert_expression
2479 that is in the way to do any simplifications.
2480 (fold-const.c doesn't know that the extra bits won't be needed.
2481 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2482 different mode in place.)
2483 So first try to find a common term here 'by hand'; we want to cover
2484 at least the cases that occur in legal static initializers. */
2485 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2486 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
2488 if (TREE_CODE (con0) == PLUS_EXPR)
2490 lit0 = TREE_OPERAND (con0, 1);
2491 con0 = TREE_OPERAND (con0, 0);
2494 lit0 = integer_zero_node;
2496 if (TREE_CODE (con1) == PLUS_EXPR)
2498 lit1 = TREE_OPERAND (con1, 1);
2499 con1 = TREE_OPERAND (con1, 0);
2502 lit1 = integer_zero_node;
2504 if (operand_equal_p (con0, con1, 0))
2511 /* First do the subtraction as integers;
2512 then drop through to build the divide operator.
2513 Do not do default conversions on the minus operator
2514 in case restype is a short type. */
2516 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2517 convert (restype, op1), 0);
2518 /* This generates an error if op1 is pointer to incomplete type. */
2519 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2520 error ("arithmetic on pointer to an incomplete type");
2522 /* This generates an error if op0 is pointer to incomplete type. */
2523 op1 = c_size_in_bytes (target_type);
2525 /* Divide by the size, in easiest possible way. */
2526 return fold_build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2529 /* Construct and perhaps optimize a tree representation
2530 for a unary operation. CODE, a tree_code, specifies the operation
2531 and XARG is the operand.
2532 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2533 the default promotions (such as from short to int).
2534 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2535 allows non-lvalues; this is only used to handle conversion of non-lvalue
2536 arrays to pointers in C99. */
2539 build_unary_op (enum tree_code code, tree xarg, int flag)
2541 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2544 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2546 int noconvert = flag;
2547 const char *invalid_op_diag;
2549 if (typecode == ERROR_MARK)
2550 return error_mark_node;
2551 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2552 typecode = INTEGER_TYPE;
2554 if ((invalid_op_diag
2555 = targetm.invalid_unary_op (code, TREE_TYPE (xarg))))
2557 error (invalid_op_diag);
2558 return error_mark_node;
2564 /* This is used for unary plus, because a CONVERT_EXPR
2565 is enough to prevent anybody from looking inside for
2566 associativity, but won't generate any code. */
2567 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2568 || typecode == COMPLEX_TYPE
2569 || typecode == VECTOR_TYPE))
2571 error ("wrong type argument to unary plus");
2572 return error_mark_node;
2574 else if (!noconvert)
2575 arg = default_conversion (arg);
2576 arg = non_lvalue (arg);
2580 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2581 || typecode == COMPLEX_TYPE
2582 || typecode == VECTOR_TYPE))
2584 error ("wrong type argument to unary minus");
2585 return error_mark_node;
2587 else if (!noconvert)
2588 arg = default_conversion (arg);
2592 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
2595 arg = default_conversion (arg);
2597 else if (typecode == COMPLEX_TYPE)
2601 pedwarn ("ISO C does not support %<~%> for complex conjugation");
2603 arg = default_conversion (arg);
2607 error ("wrong type argument to bit-complement");
2608 return error_mark_node;
2613 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
2615 error ("wrong type argument to abs");
2616 return error_mark_node;
2618 else if (!noconvert)
2619 arg = default_conversion (arg);
2623 /* Conjugating a real value is a no-op, but allow it anyway. */
2624 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2625 || typecode == COMPLEX_TYPE))
2627 error ("wrong type argument to conjugation");
2628 return error_mark_node;
2630 else if (!noconvert)
2631 arg = default_conversion (arg);
2634 case TRUTH_NOT_EXPR:
2635 if (typecode != INTEGER_TYPE
2636 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2637 && typecode != COMPLEX_TYPE)
2639 error ("wrong type argument to unary exclamation mark");
2640 return error_mark_node;
2642 arg = c_objc_common_truthvalue_conversion (arg);
2643 return invert_truthvalue (arg);
2649 if (TREE_CODE (arg) == COMPLEX_CST)
2650 return TREE_REALPART (arg);
2651 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2652 return fold_build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
2657 if (TREE_CODE (arg) == COMPLEX_CST)
2658 return TREE_IMAGPART (arg);
2659 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2660 return fold_build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
2662 return convert (TREE_TYPE (arg), integer_zero_node);
2664 case PREINCREMENT_EXPR:
2665 case POSTINCREMENT_EXPR:
2666 case PREDECREMENT_EXPR:
2667 case POSTDECREMENT_EXPR:
2669 /* Increment or decrement the real part of the value,
2670 and don't change the imaginary part. */
2671 if (typecode == COMPLEX_TYPE)
2676 pedwarn ("ISO C does not support %<++%> and %<--%>"
2677 " on complex types");
2679 arg = stabilize_reference (arg);
2680 real = build_unary_op (REALPART_EXPR, arg, 1);
2681 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2682 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
2683 build_unary_op (code, real, 1), imag);
2686 /* Report invalid types. */
2688 if (typecode != POINTER_TYPE
2689 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2691 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2692 error ("wrong type argument to increment");
2694 error ("wrong type argument to decrement");
2696 return error_mark_node;
2701 tree result_type = TREE_TYPE (arg);
2703 arg = get_unwidened (arg, 0);
2704 argtype = TREE_TYPE (arg);
2706 /* Compute the increment. */
2708 if (typecode == POINTER_TYPE)
2710 /* If pointer target is an undefined struct,
2711 we just cannot know how to do the arithmetic. */
2712 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2714 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2715 error ("increment of pointer to unknown structure");
2717 error ("decrement of pointer to unknown structure");
2719 else if ((pedantic || warn_pointer_arith)
2720 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2721 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2723 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2724 pedwarn ("wrong type argument to increment");
2726 pedwarn ("wrong type argument to decrement");
2729 inc = c_size_in_bytes (TREE_TYPE (result_type));
2732 inc = integer_one_node;
2734 inc = convert (argtype, inc);
2736 /* Complain about anything else that is not a true lvalue. */
2737 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2738 || code == POSTINCREMENT_EXPR)
2741 return error_mark_node;
2743 /* Report a read-only lvalue. */
2744 if (TREE_READONLY (arg))
2745 readonly_error (arg,
2746 ((code == PREINCREMENT_EXPR
2747 || code == POSTINCREMENT_EXPR)
2748 ? lv_increment : lv_decrement));
2750 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2751 val = boolean_increment (code, arg);
2753 val = build2 (code, TREE_TYPE (arg), arg, inc);
2754 TREE_SIDE_EFFECTS (val) = 1;
2755 val = convert (result_type, val);
2756 if (TREE_CODE (val) != code)
2757 TREE_NO_WARNING (val) = 1;
2762 /* Note that this operation never does default_conversion. */
2764 /* Let &* cancel out to simplify resulting code. */
2765 if (TREE_CODE (arg) == INDIRECT_REF)
2767 /* Don't let this be an lvalue. */
2768 if (lvalue_p (TREE_OPERAND (arg, 0)))
2769 return non_lvalue (TREE_OPERAND (arg, 0));
2770 return TREE_OPERAND (arg, 0);
2773 /* For &x[y], return x+y */
2774 if (TREE_CODE (arg) == ARRAY_REF)
2776 tree op0 = TREE_OPERAND (arg, 0);
2777 if (!c_mark_addressable (op0))
2778 return error_mark_node;
2779 return build_binary_op (PLUS_EXPR,
2780 (TREE_CODE (TREE_TYPE (op0)) == ARRAY_TYPE
2781 ? array_to_pointer_conversion (op0)
2783 TREE_OPERAND (arg, 1), 1);
2786 /* Anything not already handled and not a true memory reference
2787 or a non-lvalue array is an error. */
2788 else if (typecode != FUNCTION_TYPE && !flag
2789 && !lvalue_or_else (arg, lv_addressof))
2790 return error_mark_node;
2792 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2793 argtype = TREE_TYPE (arg);
2795 /* If the lvalue is const or volatile, merge that into the type
2796 to which the address will point. Note that you can't get a
2797 restricted pointer by taking the address of something, so we
2798 only have to deal with `const' and `volatile' here. */
2799 if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
2800 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
2801 argtype = c_build_type_variant (argtype,
2802 TREE_READONLY (arg),
2803 TREE_THIS_VOLATILE (arg));
2805 if (!c_mark_addressable (arg))
2806 return error_mark_node;
2808 gcc_assert (TREE_CODE (arg) != COMPONENT_REF
2809 || !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)));
2811 argtype = build_pointer_type (argtype);
2813 /* ??? Cope with user tricks that amount to offsetof. Delete this
2814 when we have proper support for integer constant expressions. */
2815 val = get_base_address (arg);
2816 if (val && TREE_CODE (val) == INDIRECT_REF
2817 && integer_zerop (TREE_OPERAND (val, 0)))
2818 return fold_convert (argtype, fold_offsetof (arg));
2820 val = build1 (ADDR_EXPR, argtype, arg);
2829 argtype = TREE_TYPE (arg);
2830 val = build1 (code, argtype, arg);
2831 return require_constant_value ? fold_initializer (val) : fold (val);
2834 /* Return nonzero if REF is an lvalue valid for this language.
2835 Lvalues can be assigned, unless their type has TYPE_READONLY.
2836 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
2841 enum tree_code code = TREE_CODE (ref);
2848 return lvalue_p (TREE_OPERAND (ref, 0));
2850 case COMPOUND_LITERAL_EXPR:
2860 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
2861 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
2864 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
2871 /* Give an error for storing in something that is 'const'. */
2874 readonly_error (tree arg, enum lvalue_use use)
2876 gcc_assert (use == lv_assign || use == lv_increment || use == lv_decrement);
2877 /* Using this macro rather than (for example) arrays of messages
2878 ensures that all the format strings are checked at compile
2880 #define READONLY_MSG(A, I, D) (use == lv_assign \
2882 : (use == lv_increment ? (I) : (D)))
2883 if (TREE_CODE (arg) == COMPONENT_REF)
2885 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
2886 readonly_error (TREE_OPERAND (arg, 0), use);
2888 error (READONLY_MSG (G_("assignment of read-only member %qD"),
2889 G_("increment of read-only member %qD"),
2890 G_("decrement of read-only member %qD")),
2891 TREE_OPERAND (arg, 1));
2893 else if (TREE_CODE (arg) == VAR_DECL)
2894 error (READONLY_MSG (G_("assignment of read-only variable %qD"),
2895 G_("increment of read-only variable %qD"),
2896 G_("decrement of read-only variable %qD")),
2899 error (READONLY_MSG (G_("assignment of read-only location"),
2900 G_("increment of read-only location"),
2901 G_("decrement of read-only location")));
2905 /* Return nonzero if REF is an lvalue valid for this language;
2906 otherwise, print an error message and return zero. USE says
2907 how the lvalue is being used and so selects the error message. */
2910 lvalue_or_else (tree ref, enum lvalue_use use)
2912 int win = lvalue_p (ref);
2920 /* Mark EXP saying that we need to be able to take the
2921 address of it; it should not be allocated in a register.
2922 Returns true if successful. */
2925 c_mark_addressable (tree exp)
2930 switch (TREE_CODE (x))
2933 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
2936 ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
2940 /* ... fall through ... */
2946 x = TREE_OPERAND (x, 0);
2949 case COMPOUND_LITERAL_EXPR:
2951 TREE_ADDRESSABLE (x) = 1;
2958 if (C_DECL_REGISTER (x)
2959 && DECL_NONLOCAL (x))
2961 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2964 ("global register variable %qD used in nested function", x);
2967 pedwarn ("register variable %qD used in nested function", x);
2969 else if (C_DECL_REGISTER (x))
2971 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2972 error ("address of global register variable %qD requested", x);
2974 error ("address of register variable %qD requested", x);
2980 TREE_ADDRESSABLE (x) = 1;
2987 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
2990 build_conditional_expr (tree ifexp, tree op1, tree op2)
2994 enum tree_code code1;
2995 enum tree_code code2;
2996 tree result_type = NULL;
2997 tree orig_op1 = op1, orig_op2 = op2;
2999 /* Promote both alternatives. */
3001 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3002 op1 = default_conversion (op1);
3003 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3004 op2 = default_conversion (op2);
3006 if (TREE_CODE (ifexp) == ERROR_MARK
3007 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3008 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3009 return error_mark_node;
3011 type1 = TREE_TYPE (op1);
3012 code1 = TREE_CODE (type1);
3013 type2 = TREE_TYPE (op2);
3014 code2 = TREE_CODE (type2);
3016 /* C90 does not permit non-lvalue arrays in conditional expressions.
3017 In C99 they will be pointers by now. */
3018 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
3020 error ("non-lvalue array in conditional expression");
3021 return error_mark_node;
3024 /* Quickly detect the usual case where op1 and op2 have the same type
3026 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3029 result_type = type1;
3031 result_type = TYPE_MAIN_VARIANT (type1);
3033 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
3034 || code1 == COMPLEX_TYPE)
3035 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3036 || code2 == COMPLEX_TYPE))
3038 result_type = c_common_type (type1, type2);
3040 /* If -Wsign-compare, warn here if type1 and type2 have
3041 different signedness. We'll promote the signed to unsigned
3042 and later code won't know it used to be different.
3043 Do this check on the original types, so that explicit casts
3044 will be considered, but default promotions won't. */
3045 if (warn_sign_compare && !skip_evaluation)
3047 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3048 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
3050 if (unsigned_op1 ^ unsigned_op2)
3052 /* Do not warn if the result type is signed, since the
3053 signed type will only be chosen if it can represent
3054 all the values of the unsigned type. */
3055 if (!TYPE_UNSIGNED (result_type))
3057 /* Do not warn if the signed quantity is an unsuffixed
3058 integer literal (or some static constant expression
3059 involving such literals) and it is non-negative. */
3060 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
3061 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
3064 warning (0, "signed and unsigned type in conditional expression");
3068 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3070 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3071 pedwarn ("ISO C forbids conditional expr with only one void side");
3072 result_type = void_type_node;
3074 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3076 if (comp_target_types (type1, type2))
3077 result_type = common_pointer_type (type1, type2);
3078 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3079 && TREE_CODE (orig_op1) != NOP_EXPR)
3080 result_type = qualify_type (type2, type1);
3081 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3082 && TREE_CODE (orig_op2) != NOP_EXPR)
3083 result_type = qualify_type (type1, type2);
3084 else if (VOID_TYPE_P (TREE_TYPE (type1)))
3086 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3087 pedwarn ("ISO C forbids conditional expr between "
3088 "%<void *%> and function pointer");
3089 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
3090 TREE_TYPE (type2)));
3092 else if (VOID_TYPE_P (TREE_TYPE (type2)))
3094 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3095 pedwarn ("ISO C forbids conditional expr between "
3096 "%<void *%> and function pointer");
3097 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
3098 TREE_TYPE (type1)));
3102 pedwarn ("pointer type mismatch in conditional expression");
3103 result_type = build_pointer_type (void_type_node);
3106 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3108 if (!integer_zerop (op2))
3109 pedwarn ("pointer/integer type mismatch in conditional expression");
3112 op2 = null_pointer_node;
3114 result_type = type1;
3116 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3118 if (!integer_zerop (op1))
3119 pedwarn ("pointer/integer type mismatch in conditional expression");
3122 op1 = null_pointer_node;
3124 result_type = type2;
3129 if (flag_cond_mismatch)
3130 result_type = void_type_node;
3133 error ("type mismatch in conditional expression");
3134 return error_mark_node;
3138 /* Merge const and volatile flags of the incoming types. */
3140 = build_type_variant (result_type,
3141 TREE_READONLY (op1) || TREE_READONLY (op2),
3142 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3144 if (result_type != TREE_TYPE (op1))
3145 op1 = convert_and_check (result_type, op1);
3146 if (result_type != TREE_TYPE (op2))
3147 op2 = convert_and_check (result_type, op2);
3149 return fold_build3 (COND_EXPR, result_type, ifexp, op1, op2);
3152 /* Return a compound expression that performs two expressions and
3153 returns the value of the second of them. */
3156 build_compound_expr (tree expr1, tree expr2)
3158 if (!TREE_SIDE_EFFECTS (expr1))
3160 /* The left-hand operand of a comma expression is like an expression
3161 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3162 any side-effects, unless it was explicitly cast to (void). */
3163 if (warn_unused_value)
3165 if (VOID_TYPE_P (TREE_TYPE (expr1))
3166 && TREE_CODE (expr1) == CONVERT_EXPR)
3168 else if (VOID_TYPE_P (TREE_TYPE (expr1))
3169 && TREE_CODE (expr1) == COMPOUND_EXPR
3170 && TREE_CODE (TREE_OPERAND (expr1, 1)) == CONVERT_EXPR)
3171 ; /* (void) a, (void) b, c */
3173 warning (0, "left-hand operand of comma expression has no effect");
3177 /* With -Wunused, we should also warn if the left-hand operand does have
3178 side-effects, but computes a value which is not used. For example, in
3179 `foo() + bar(), baz()' the result of the `+' operator is not used,
3180 so we should issue a warning. */
3181 else if (warn_unused_value)
3182 warn_if_unused_value (expr1, input_location);
3184 return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
3187 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3190 build_c_cast (tree type, tree expr)
3194 if (type == error_mark_node || expr == error_mark_node)
3195 return error_mark_node;
3197 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3198 only in <protocol> qualifications. But when constructing cast expressions,
3199 the protocols do matter and must be kept around. */
3200 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
3201 return build1 (NOP_EXPR, type, expr);
3203 type = TYPE_MAIN_VARIANT (type);
3205 if (TREE_CODE (type) == ARRAY_TYPE)
3207 error ("cast specifies array type");
3208 return error_mark_node;
3211 if (TREE_CODE (type) == FUNCTION_TYPE)
3213 error ("cast specifies function type");
3214 return error_mark_node;
3217 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3221 if (TREE_CODE (type) == RECORD_TYPE
3222 || TREE_CODE (type) == UNION_TYPE)
3223 pedwarn ("ISO C forbids casting nonscalar to the same type");
3226 else if (TREE_CODE (type) == UNION_TYPE)
3230 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3231 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3232 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3240 pedwarn ("ISO C forbids casts to union type");
3241 t = digest_init (type,
3242 build_constructor_single (type, field, value),
3244 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3245 TREE_INVARIANT (t) = TREE_INVARIANT (value);
3248 error ("cast to union type from type not present in union");
3249 return error_mark_node;
3255 if (type == void_type_node)
3256 return build1 (CONVERT_EXPR, type, value);
3258 otype = TREE_TYPE (value);
3260 /* Optionally warn about potentially worrisome casts. */
3263 && TREE_CODE (type) == POINTER_TYPE
3264 && TREE_CODE (otype) == POINTER_TYPE)
3266 tree in_type = type;
3267 tree in_otype = otype;
3271 /* Check that the qualifiers on IN_TYPE are a superset of
3272 the qualifiers of IN_OTYPE. The outermost level of
3273 POINTER_TYPE nodes is uninteresting and we stop as soon
3274 as we hit a non-POINTER_TYPE node on either type. */
3277 in_otype = TREE_TYPE (in_otype);
3278 in_type = TREE_TYPE (in_type);
3280 /* GNU C allows cv-qualified function types. 'const'
3281 means the function is very pure, 'volatile' means it
3282 can't return. We need to warn when such qualifiers
3283 are added, not when they're taken away. */
3284 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3285 && TREE_CODE (in_type) == FUNCTION_TYPE)
3286 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3288 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3290 while (TREE_CODE (in_type) == POINTER_TYPE
3291 && TREE_CODE (in_otype) == POINTER_TYPE);
3294 warning (0, "cast adds new qualifiers to function type");
3297 /* There are qualifiers present in IN_OTYPE that are not
3298 present in IN_TYPE. */
3299 warning (0, "cast discards qualifiers from pointer target type");
3302 /* Warn about possible alignment problems. */
3303 if (STRICT_ALIGNMENT
3304 && TREE_CODE (type) == POINTER_TYPE
3305 && TREE_CODE (otype) == POINTER_TYPE
3306 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3307 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3308 /* Don't warn about opaque types, where the actual alignment
3309 restriction is unknown. */
3310 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3311 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3312 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3313 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3314 warning (OPT_Wcast_align,
3315 "cast increases required alignment of target type");
3317 if (TREE_CODE (type) == INTEGER_TYPE
3318 && TREE_CODE (otype) == POINTER_TYPE
3319 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3320 && !TREE_CONSTANT (value))
3321 warning (OPT_Wpointer_to_int_cast,
3322 "cast from pointer to integer of different size");
3324 if (TREE_CODE (value) == CALL_EXPR
3325 && TREE_CODE (type) != TREE_CODE (otype))
3326 warning (OPT_Wbad_function_cast, "cast from function call of type %qT "
3327 "to non-matching type %qT", otype, type);
3329 if (TREE_CODE (type) == POINTER_TYPE
3330 && TREE_CODE (otype) == INTEGER_TYPE
3331 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3332 /* Don't warn about converting any constant. */
3333 && !TREE_CONSTANT (value))
3334 warning (OPT_Wint_to_pointer_cast, "cast to pointer from integer "
3335 "of different size");
3337 if (flag_strict_aliasing && warn_strict_aliasing
3338 && TREE_CODE (type) == POINTER_TYPE
3339 && TREE_CODE (otype) == POINTER_TYPE
3340 && TREE_CODE (expr) == ADDR_EXPR
3341 && (DECL_P (TREE_OPERAND (expr, 0))
3342 || TREE_CODE (TREE_OPERAND (expr, 0)) == COMPONENT_REF)
3343 && !VOID_TYPE_P (TREE_TYPE (type)))
3345 /* Casting the address of an object to non void pointer. Warn
3346 if the cast breaks type based aliasing. */
3347 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3348 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
3349 "might break strict-aliasing rules");
3352 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
3353 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
3355 if (!alias_sets_conflict_p (set1, set2))
3356 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
3357 "pointer will break strict-aliasing rules");
3358 else if (warn_strict_aliasing > 1
3359 && !alias_sets_might_conflict_p (set1, set2))
3360 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
3361 "pointer might break strict-aliasing rules");
3365 /* If pedantic, warn for conversions between function and object
3366 pointer types, except for converting a null pointer constant
3367 to function pointer type. */
3369 && TREE_CODE (type) == POINTER_TYPE
3370 && TREE_CODE (otype) == POINTER_TYPE
3371 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3372 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3373 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3376 && TREE_CODE (type) == POINTER_TYPE
3377 && TREE_CODE (otype) == POINTER_TYPE
3378 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3379 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3380 && !(integer_zerop (value) && TREE_TYPE (otype) == void_type_node
3381 && TREE_CODE (expr) != NOP_EXPR))
3382 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3385 value = convert (type, value);
3387 /* Ignore any integer overflow caused by the cast. */
3388 if (TREE_CODE (value) == INTEGER_CST)
3390 /* If OVALUE had overflow set, then so will VALUE, so it
3391 is safe to overwrite. */
3392 if (CONSTANT_CLASS_P (ovalue))
3394 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3395 /* Similarly, constant_overflow cannot have become cleared. */
3396 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3399 TREE_OVERFLOW (value) = 0;
3403 /* Don't let a cast be an lvalue. */
3405 value = non_lvalue (value);
3410 /* Interpret a cast of expression EXPR to type TYPE. */
3412 c_cast_expr (struct c_type_name *type_name, tree expr)
3415 int saved_wsp = warn_strict_prototypes;
3417 /* This avoids warnings about unprototyped casts on
3418 integers. E.g. "#define SIG_DFL (void(*)())0". */
3419 if (TREE_CODE (expr) == INTEGER_CST)
3420 warn_strict_prototypes = 0;
3421 type = groktypename (type_name);
3422 warn_strict_prototypes = saved_wsp;
3424 return build_c_cast (type, expr);
3428 /* Build an assignment expression of lvalue LHS from value RHS.
3429 MODIFYCODE is the code for a binary operator that we use
3430 to combine the old value of LHS with RHS to get the new value.
3431 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3434 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3438 tree lhstype = TREE_TYPE (lhs);
3439 tree olhstype = lhstype;
3441 /* Types that aren't fully specified cannot be used in assignments. */
3442 lhs = require_complete_type (lhs);
3444 /* Avoid duplicate error messages from operands that had errors. */
3445 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3446 return error_mark_node;
3448 STRIP_TYPE_NOPS (rhs);
3452 /* If a binary op has been requested, combine the old LHS value with the RHS
3453 producing the value we should actually store into the LHS. */
3455 if (modifycode != NOP_EXPR)
3457 lhs = stabilize_reference (lhs);
3458 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3461 if (!lvalue_or_else (lhs, lv_assign))
3462 return error_mark_node;
3464 /* Give an error for storing in something that is 'const'. */
3466 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3467 || ((TREE_CODE (lhstype) == RECORD_TYPE
3468 || TREE_CODE (lhstype) == UNION_TYPE)
3469 && C_TYPE_FIELDS_READONLY (lhstype)))
3470 readonly_error (lhs, lv_assign);
3472 /* If storing into a structure or union member,
3473 it has probably been given type `int'.
3474 Compute the type that would go with
3475 the actual amount of storage the member occupies. */
3477 if (TREE_CODE (lhs) == COMPONENT_REF
3478 && (TREE_CODE (lhstype) == INTEGER_TYPE
3479 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3480 || TREE_CODE (lhstype) == REAL_TYPE
3481 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3482 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3484 /* If storing in a field that is in actuality a short or narrower than one,
3485 we must store in the field in its actual type. */
3487 if (lhstype != TREE_TYPE (lhs))
3489 lhs = copy_node (lhs);
3490 TREE_TYPE (lhs) = lhstype;
3493 /* Convert new value to destination type. */
3495 newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
3496 NULL_TREE, NULL_TREE, 0);
3497 if (TREE_CODE (newrhs) == ERROR_MARK)
3498 return error_mark_node;
3500 /* Emit ObjC write barrier, if necessary. */
3501 if (c_dialect_objc () && flag_objc_gc)
3503 result = objc_generate_write_barrier (lhs, modifycode, newrhs);
3508 /* Scan operands. */
3510 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3511 TREE_SIDE_EFFECTS (result) = 1;
3513 /* If we got the LHS in a different type for storing in,
3514 convert the result back to the nominal type of LHS
3515 so that the value we return always has the same type
3516 as the LHS argument. */
3518 if (olhstype == TREE_TYPE (result))
3520 return convert_for_assignment (olhstype, result, ic_assign,
3521 NULL_TREE, NULL_TREE, 0);
3524 /* Convert value RHS to type TYPE as preparation for an assignment
3525 to an lvalue of type TYPE.
3526 The real work of conversion is done by `convert'.
3527 The purpose of this function is to generate error messages
3528 for assignments that are not allowed in C.
3529 ERRTYPE says whether it is argument passing, assignment,
3530 initialization or return.
3532 FUNCTION is a tree for the function being called.
3533 PARMNUM is the number of the argument, for printing in error messages. */
3536 convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
3537 tree fundecl, tree function, int parmnum)
3539 enum tree_code codel = TREE_CODE (type);
3541 enum tree_code coder;
3542 tree rname = NULL_TREE;
3543 bool objc_ok = false;
3545 if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
3548 /* Change pointer to function to the function itself for
3550 if (TREE_CODE (function) == ADDR_EXPR
3551 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3552 function = TREE_OPERAND (function, 0);
3554 /* Handle an ObjC selector specially for diagnostics. */
3555 selector = objc_message_selector ();
3557 if (selector && parmnum > 2)
3564 /* This macro is used to emit diagnostics to ensure that all format
3565 strings are complete sentences, visible to gettext and checked at
3567 #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE) \
3572 pedwarn (AR, parmnum, rname); \
3574 case ic_argpass_nonproto: \
3575 warning (0, AR, parmnum, rname); \
3587 gcc_unreachable (); \
3591 STRIP_TYPE_NOPS (rhs);
3593 if (optimize && TREE_CODE (rhs) == VAR_DECL
3594 && TREE_CODE (TREE_TYPE (rhs)) != ARRAY_TYPE)
3595 rhs = decl_constant_value_for_broken_optimization (rhs);
3597 rhstype = TREE_TYPE (rhs);
3598 coder = TREE_CODE (rhstype);
3600 if (coder == ERROR_MARK)
3601 return error_mark_node;
3603 if (c_dialect_objc ())
3626 objc_ok = objc_compare_types (type, rhstype, parmno, rname);
3629 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3631 overflow_warning (rhs);
3635 if (coder == VOID_TYPE)
3637 /* Except for passing an argument to an unprototyped function,
3638 this is a constraint violation. When passing an argument to
3639 an unprototyped function, it is compile-time undefined;
3640 making it a constraint in that case was rejected in
3642 error ("void value not ignored as it ought to be");
3643 return error_mark_node;
3645 /* A type converts to a reference to it.
3646 This code doesn't fully support references, it's just for the
3647 special case of va_start and va_copy. */
3648 if (codel == REFERENCE_TYPE
3649 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3651 if (!lvalue_p (rhs))
3653 error ("cannot pass rvalue to reference parameter");
3654 return error_mark_node;
3656 if (!c_mark_addressable (rhs))
3657 return error_mark_node;
3658 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3660 /* We already know that these two types are compatible, but they
3661 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3662 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3663 likely to be va_list, a typedef to __builtin_va_list, which
3664 is different enough that it will cause problems later. */
3665 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3666 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3668 rhs = build1 (NOP_EXPR, type, rhs);
3671 /* Some types can interconvert without explicit casts. */
3672 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
3673 && vector_types_convertible_p (type, TREE_TYPE (rhs)))
3674 return convert (type, rhs);
3675 /* Arithmetic types all interconvert, and enum is treated like int. */
3676 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3677 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3678 || codel == BOOLEAN_TYPE)
3679 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3680 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3681 || coder == BOOLEAN_TYPE))
3682 return convert_and_check (type, rhs);
3684 /* Conversion to a transparent union from its member types.
3685 This applies only to function arguments. */
3686 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
3687 && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
3690 tree marginal_memb_type = 0;
3692 for (memb_types = TYPE_FIELDS (type); memb_types;
3693 memb_types = TREE_CHAIN (memb_types))
3695 tree memb_type = TREE_TYPE (memb_types);
3697 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3698 TYPE_MAIN_VARIANT (rhstype)))
3701 if (TREE_CODE (memb_type) != POINTER_TYPE)
3704 if (coder == POINTER_TYPE)
3706 tree ttl = TREE_TYPE (memb_type);
3707 tree ttr = TREE_TYPE (rhstype);
3709 /* Any non-function converts to a [const][volatile] void *
3710 and vice versa; otherwise, targets must be the same.
3711 Meanwhile, the lhs target must have all the qualifiers of
3713 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3714 || comp_target_types (memb_type, rhstype))
3716 /* If this type won't generate any warnings, use it. */
3717 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3718 || ((TREE_CODE (ttr) == FUNCTION_TYPE
3719 && TREE_CODE (ttl) == FUNCTION_TYPE)
3720 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3721 == TYPE_QUALS (ttr))
3722 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3723 == TYPE_QUALS (ttl))))
3726 /* Keep looking for a better type, but remember this one. */
3727 if (!marginal_memb_type)
3728 marginal_memb_type = memb_type;
3732 /* Can convert integer zero to any pointer type. */
3733 if (integer_zerop (rhs)
3734 || (TREE_CODE (rhs) == NOP_EXPR
3735 && integer_zerop (TREE_OPERAND (rhs, 0))))
3737 rhs = null_pointer_node;
3742 if (memb_types || marginal_memb_type)
3746 /* We have only a marginally acceptable member type;
3747 it needs a warning. */
3748 tree ttl = TREE_TYPE (marginal_memb_type);
3749 tree ttr = TREE_TYPE (rhstype);
3751 /* Const and volatile mean something different for function
3752 types, so the usual warnings are not appropriate. */
3753 if (TREE_CODE (ttr) == FUNCTION_TYPE
3754 && TREE_CODE (ttl) == FUNCTION_TYPE)
3756 /* Because const and volatile on functions are
3757 restrictions that say the function will not do
3758 certain things, it is okay to use a const or volatile
3759 function where an ordinary one is wanted, but not
3761 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3762 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE "
3763 "makes qualified function "
3764 "pointer from unqualified"),
3765 G_("assignment makes qualified "
3766 "function pointer from "
3768 G_("initialization makes qualified "
3769 "function pointer from "
3771 G_("return makes qualified function "
3772 "pointer from unqualified"));
3774 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3775 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE discards "
3776 "qualifiers from pointer target type"),
3777 G_("assignment discards qualifiers "
3778 "from pointer target type"),
3779 G_("initialization discards qualifiers "
3780 "from pointer target type"),
3781 G_("return discards qualifiers from "
3782 "pointer target type"));
3785 if (pedantic && !DECL_IN_SYSTEM_HEADER (fundecl))
3786 pedwarn ("ISO C prohibits argument conversion to union type");
3788 return build1 (NOP_EXPR, type, rhs);
3792 /* Conversions among pointers */
3793 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3794 && (coder == codel))
3796 tree ttl = TREE_TYPE (type);
3797 tree ttr = TREE_TYPE (rhstype);
3800 bool is_opaque_pointer;
3801 int target_cmp = 0; /* Cache comp_target_types () result. */
3803 if (TREE_CODE (mvl) != ARRAY_TYPE)
3804 mvl = TYPE_MAIN_VARIANT (mvl);
3805 if (TREE_CODE (mvr) != ARRAY_TYPE)
3806 mvr = TYPE_MAIN_VARIANT (mvr);
3807 /* Opaque pointers are treated like void pointers. */
3808 is_opaque_pointer = (targetm.vector_opaque_p (type)
3809 || targetm.vector_opaque_p (rhstype))
3810 && TREE_CODE (ttl) == VECTOR_TYPE
3811 && TREE_CODE (ttr) == VECTOR_TYPE;
3813 /* C++ does not allow the implicit conversion void* -> T*. However,
3814 for the purpose of reducing the number of false positives, we
3815 tolerate the special case of
3819 where NULL is typically defined in C to be '(void *) 0'. */
3820 if (VOID_TYPE_P (ttr) && rhs != null_pointer_node && !VOID_TYPE_P (ttl))
3821 warning (OPT_Wc___compat, "request for implicit conversion from "
3822 "%qT to %qT not permitted in C++", rhstype, type);
3824 /* Check if the right-hand side has a format attribute but the
3825 left-hand side doesn't. */
3826 if (warn_missing_format_attribute
3827 && check_missing_format_attribute (type, rhstype))
3832 case ic_argpass_nonproto:
3833 warning (OPT_Wmissing_format_attribute,
3834 "argument %d of %qE might be "
3835 "a candidate for a format attribute",
3839 warning (OPT_Wmissing_format_attribute,
3840 "assignment left-hand side might be "
3841 "a candidate for a format attribute");
3844 warning (OPT_Wmissing_format_attribute,
3845 "initialization left-hand side might be "
3846 "a candidate for a format attribute");
3849 warning (OPT_Wmissing_format_attribute,
3850 "return type might be "
3851 "a candidate for a format attribute");
3858 /* Any non-function converts to a [const][volatile] void *
3859 and vice versa; otherwise, targets must be the same.
3860 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3861 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3862 || (target_cmp = comp_target_types (type, rhstype))
3863 || is_opaque_pointer
3864 || (c_common_unsigned_type (mvl)
3865 == c_common_unsigned_type (mvr)))
3868 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3871 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3872 which are not ANSI null ptr constants. */
3873 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3874 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3875 WARN_FOR_ASSIGNMENT (G_("ISO C forbids passing argument %d of "
3876 "%qE between function pointer "
3878 G_("ISO C forbids assignment between "
3879 "function pointer and %<void *%>"),
3880 G_("ISO C forbids initialization between "
3881 "function pointer and %<void *%>"),
3882 G_("ISO C forbids return between function "
3883 "pointer and %<void *%>"));
3884 /* Const and volatile mean something different for function types,
3885 so the usual warnings are not appropriate. */
3886 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3887 && TREE_CODE (ttl) != FUNCTION_TYPE)
3889 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3891 /* Types differing only by the presence of the 'volatile'
3892 qualifier are acceptable if the 'volatile' has been added
3893 in by the Objective-C EH machinery. */
3894 if (!objc_type_quals_match (ttl, ttr))
3895 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE discards "
3896 "qualifiers from pointer target type"),
3897 G_("assignment discards qualifiers "
3898 "from pointer target type"),
3899 G_("initialization discards qualifiers "
3900 "from pointer target type"),
3901 G_("return discards qualifiers from "
3902 "pointer target type"));
3904 /* If this is not a case of ignoring a mismatch in signedness,
3906 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3909 /* If there is a mismatch, do warn. */
3910 else if (warn_pointer_sign)
3911 WARN_FOR_ASSIGNMENT (G_("pointer targets in passing argument "
3912 "%d of %qE differ in signedness"),
3913 G_("pointer targets in assignment "
3914 "differ in signedness"),
3915 G_("pointer targets in initialization "
3916 "differ in signedness"),
3917 G_("pointer targets in return differ "
3920 else if (TREE_CODE (ttl) == FUNCTION_TYPE
3921 && TREE_CODE (ttr) == FUNCTION_TYPE)
3923 /* Because const and volatile on functions are restrictions
3924 that say the function will not do certain things,
3925 it is okay to use a const or volatile function
3926 where an ordinary one is wanted, but not vice-versa. */
3927 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3928 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes "
3929 "qualified function pointer "
3930 "from unqualified"),
3931 G_("assignment makes qualified function "
3932 "pointer from unqualified"),
3933 G_("initialization makes qualified "
3934 "function pointer from unqualified"),
3935 G_("return makes qualified function "
3936 "pointer from unqualified"));
3940 /* Avoid warning about the volatile ObjC EH puts on decls. */
3942 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE from "
3943 "incompatible pointer type"),
3944 G_("assignment from incompatible pointer type"),
3945 G_("initialization from incompatible "
3947 G_("return from incompatible pointer type"));
3949 return convert (type, rhs);
3951 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
3953 /* ??? This should not be an error when inlining calls to
3954 unprototyped functions. */
3955 error ("invalid use of non-lvalue array");
3956 return error_mark_node;
3958 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
3960 /* An explicit constant 0 can convert to a pointer,
3961 or one that results from arithmetic, even including
3962 a cast to integer type. */
3963 if (!(TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3965 !(TREE_CODE (rhs) == NOP_EXPR
3966 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3967 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3968 && integer_zerop (TREE_OPERAND (rhs, 0))))
3969 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes "
3970 "pointer from integer without a cast"),
3971 G_("assignment makes pointer from integer "
3973 G_("initialization makes pointer from "
3974 "integer without a cast"),
3975 G_("return makes pointer from integer "
3978 return convert (type, rhs);
3980 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
3982 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes integer "
3983 "from pointer without a cast"),
3984 G_("assignment makes integer from pointer "
3986 G_("initialization makes integer from pointer "
3988 G_("return makes integer from pointer "
3990 return convert (type, rhs);
3992 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3993 return convert (type, rhs);
3998 case ic_argpass_nonproto:
3999 /* ??? This should not be an error when inlining calls to
4000 unprototyped functions. */
4001 error ("incompatible type for argument %d of %qE", parmnum, rname);
4004 error ("incompatible types in assignment");
4007 error ("incompatible types in initialization");
4010 error ("incompatible types in return");
4016 return error_mark_node;
4019 /* Convert VALUE for assignment into inlined parameter PARM. ARGNUM
4020 is used for error and waring reporting and indicates which argument
4021 is being processed. */
4024 c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
4028 /* If FN was prototyped, the value has been converted already
4029 in convert_arguments. */
4030 if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
4033 type = TREE_TYPE (parm);
4034 ret = convert_for_assignment (type, value,
4035 ic_argpass_nonproto, fn,
4037 if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
4038 && INTEGRAL_TYPE_P (type)
4039 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
4040 ret = default_conversion (ret);
4044 /* If VALUE is a compound expr all of whose expressions are constant, then
4045 return its value. Otherwise, return error_mark_node.
4047 This is for handling COMPOUND_EXPRs as initializer elements
4048 which is allowed with a warning when -pedantic is specified. */
4051 valid_compound_expr_initializer (tree value, tree endtype)
4053 if (TREE_CODE (value) == COMPOUND_EXPR)
4055 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4057 return error_mark_node;
4058 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4061 else if (!initializer_constant_valid_p (value, endtype))
4062 return error_mark_node;
4067 /* Perform appropriate conversions on the initial value of a variable,
4068 store it in the declaration DECL,
4069 and print any error messages that are appropriate.
4070 If the init is invalid, store an ERROR_MARK. */
4073 store_init_value (tree decl, tree init)
4077 /* If variable's type was invalidly declared, just ignore it. */
4079 type = TREE_TYPE (decl);
4080 if (TREE_CODE (type) == ERROR_MARK)
4083 /* Digest the specified initializer into an expression. */
4085 value = digest_init (type, init, true, TREE_STATIC (decl));
4087 /* Store the expression if valid; else report error. */
4089 if (!in_system_header
4090 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
4091 warning (OPT_Wtraditional, "traditional C rejects automatic "
4092 "aggregate initialization");
4094 DECL_INITIAL (decl) = value;
4096 /* ANSI wants warnings about out-of-range constant initializers. */
4097 STRIP_TYPE_NOPS (value);
4098 constant_expression_warning (value);
4100 /* Check if we need to set array size from compound literal size. */
4101 if (TREE_CODE (type) == ARRAY_TYPE
4102 && TYPE_DOMAIN (type) == 0
4103 && value != error_mark_node)
4105 tree inside_init = init;
4107 STRIP_TYPE_NOPS (inside_init);
4108 inside_init = fold (inside_init);
4110 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4112 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4114 if (TYPE_DOMAIN (TREE_TYPE (decl)))
4116 /* For int foo[] = (int [3]){1}; we need to set array size
4117 now since later on array initializer will be just the
4118 brace enclosed list of the compound literal. */
4119 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
4121 layout_decl (decl, 0);
4127 /* Methods for storing and printing names for error messages. */
4129 /* Implement a spelling stack that allows components of a name to be pushed
4130 and popped. Each element on the stack is this structure. */
4142 #define SPELLING_STRING 1
4143 #define SPELLING_MEMBER 2
4144 #define SPELLING_BOUNDS 3
4146 static struct spelling *spelling; /* Next stack element (unused). */
4147 static struct spelling *spelling_base; /* Spelling stack base. */
4148 static int spelling_size; /* Size of the spelling stack. */
4150 /* Macros to save and restore the spelling stack around push_... functions.
4151 Alternative to SAVE_SPELLING_STACK. */
4153 #define SPELLING_DEPTH() (spelling - spelling_base)
4154 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
4156 /* Push an element on the spelling stack with type KIND and assign VALUE
4159 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4161 int depth = SPELLING_DEPTH (); \
4163 if (depth >= spelling_size) \
4165 spelling_size += 10; \
4166 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
4168 RESTORE_SPELLING_DEPTH (depth); \
4171 spelling->kind = (KIND); \
4172 spelling->MEMBER = (VALUE); \
4176 /* Push STRING on the stack. Printed literally. */
4179 push_string (const char *string)
4181 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4184 /* Push a member name on the stack. Printed as '.' STRING. */
4187 push_member_name (tree decl)
4189 const char *const string
4190 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4191 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4194 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4197 push_array_bounds (int bounds)
4199 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4202 /* Compute the maximum size in bytes of the printed spelling. */
4205 spelling_length (void)
4210 for (p = spelling_base; p < spelling; p++)
4212 if (p->kind == SPELLING_BOUNDS)
4215 size += strlen (p->u.s) + 1;
4221 /* Print the spelling to BUFFER and return it. */
4224 print_spelling (char *buffer)
4229 for (p = spelling_base; p < spelling; p++)
4230 if (p->kind == SPELLING_BOUNDS)
4232 sprintf (d, "[%d]", p->u.i);
4238 if (p->kind == SPELLING_MEMBER)
4240 for (s = p->u.s; (*d = *s++); d++)
4247 /* Issue an error message for a bad initializer component.
4248 MSGID identifies the message.
4249 The component name is taken from the spelling stack. */
4252 error_init (const char *msgid)
4256 error ("%s", _(msgid));
4257 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4259 error ("(near initialization for %qs)", ofwhat);
4262 /* Issue a pedantic warning for a bad initializer component.
4263 MSGID identifies the message.
4264 The component name is taken from the spelling stack. */
4267 pedwarn_init (const char *msgid)
4271 pedwarn ("%s", _(msgid));
4272 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4274 pedwarn ("(near initialization for %qs)", ofwhat);
4277 /* Issue a warning for a bad initializer component.
4278 MSGID identifies the message.
4279 The component name is taken from the spelling stack. */
4282 warning_init (const char *msgid)
4286 warning (0, "%s", _(msgid));
4287 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4289 warning (0, "(near initialization for %qs)", ofwhat);
4292 /* If TYPE is an array type and EXPR is a parenthesized string
4293 constant, warn if pedantic that EXPR is being used to initialize an
4294 object of type TYPE. */
4297 maybe_warn_string_init (tree type, struct c_expr expr)
4300 && TREE_CODE (type) == ARRAY_TYPE
4301 && TREE_CODE (expr.value) == STRING_CST
4302 && expr.original_code != STRING_CST)
4303 pedwarn_init ("array initialized from parenthesized string constant");
4306 /* Digest the parser output INIT as an initializer for type TYPE.
4307 Return a C expression of type TYPE to represent the initial value.
4309 If INIT is a string constant, STRICT_STRING is true if it is
4310 unparenthesized or we should not warn here for it being parenthesized.
4311 For other types of INIT, STRICT_STRING is not used.
4313 REQUIRE_CONSTANT requests an error if non-constant initializers or
4314 elements are seen. */
4317 digest_init (tree type, tree init, bool strict_string, int require_constant)
4319 enum tree_code code = TREE_CODE (type);
4320 tree inside_init = init;
4322 if (type == error_mark_node
4323 || init == error_mark_node
4324 || TREE_TYPE (init) == error_mark_node)
4325 return error_mark_node;
4327 STRIP_TYPE_NOPS (inside_init);
4329 inside_init = fold (inside_init);
4331 /* Initialization of an array of chars from a string constant
4332 optionally enclosed in braces. */
4334 if (code == ARRAY_TYPE && inside_init
4335 && TREE_CODE (inside_init) == STRING_CST)
4337 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4338 /* Note that an array could be both an array of character type
4339 and an array of wchar_t if wchar_t is signed char or unsigned
4341 bool char_array = (typ1 == char_type_node
4342 || typ1 == signed_char_type_node
4343 || typ1 == unsigned_char_type_node);
4344 bool wchar_array = !!comptypes (typ1, wchar_type_node);
4345 if (char_array || wchar_array)
4349 expr.value = inside_init;
4350 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4351 maybe_warn_string_init (type, expr);
4354 = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4357 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4358 TYPE_MAIN_VARIANT (type)))
4361 if (!wchar_array && !char_string)
4363 error_init ("char-array initialized from wide string");
4364 return error_mark_node;
4366 if (char_string && !char_array)
4368 error_init ("wchar_t-array initialized from non-wide string");
4369 return error_mark_node;
4372 TREE_TYPE (inside_init) = type;
4373 if (TYPE_DOMAIN (type) != 0
4374 && TYPE_SIZE (type) != 0
4375 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4376 /* Subtract 1 (or sizeof (wchar_t))
4377 because it's ok to ignore the terminating null char
4378 that is counted in the length of the constant. */
4379 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4380 TREE_STRING_LENGTH (inside_init)
4381 - ((TYPE_PRECISION (typ1)
4382 != TYPE_PRECISION (char_type_node))
4383 ? (TYPE_PRECISION (wchar_type_node)
4386 pedwarn_init ("initializer-string for array of chars is too long");
4390 else if (INTEGRAL_TYPE_P (typ1))
4392 error_init ("array of inappropriate type initialized "
4393 "from string constant");
4394 return error_mark_node;
4398 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4399 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4400 below and handle as a constructor. */
4401 if (code == VECTOR_TYPE
4402 && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
4403 && vector_types_convertible_p (TREE_TYPE (inside_init), type)
4404 && TREE_CONSTANT (inside_init))
4406 if (TREE_CODE (inside_init) == VECTOR_CST
4407 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4408 TYPE_MAIN_VARIANT (type)))
4411 if (TREE_CODE (inside_init) == CONSTRUCTOR)
4413 unsigned HOST_WIDE_INT ix;
4415 bool constant_p = true;
4417 /* Iterate through elements and check if all constructor
4418 elements are *_CSTs. */
4419 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (inside_init), ix, value)
4420 if (!CONSTANT_CLASS_P (value))
4427 return build_vector_from_ctor (type,
4428 CONSTRUCTOR_ELTS (inside_init));
4432 /* Any type can be initialized
4433 from an expression of the same type, optionally with braces. */
4435 if (inside_init && TREE_TYPE (inside_init) != 0
4436 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4437 TYPE_MAIN_VARIANT (type))
4438 || (code == ARRAY_TYPE
4439 && comptypes (TREE_TYPE (inside_init), type))
4440 || (code == VECTOR_TYPE
4441 && comptypes (TREE_TYPE (inside_init), type))
4442 || (code == POINTER_TYPE
4443 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4444 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4445 TREE_TYPE (type)))))
4447 if (code == POINTER_TYPE)
4449 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4451 if (TREE_CODE (inside_init) == STRING_CST
4452 || TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4453 inside_init = array_to_pointer_conversion (inside_init);
4456 error_init ("invalid use of non-lvalue array");
4457 return error_mark_node;
4462 if (code == VECTOR_TYPE)
4463 /* Although the types are compatible, we may require a
4465 inside_init = convert (type, inside_init);
4467 if (require_constant && !flag_isoc99
4468 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4470 /* As an extension, allow initializing objects with static storage
4471 duration with compound literals (which are then treated just as
4472 the brace enclosed list they contain). */
4473 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4474 inside_init = DECL_INITIAL (decl);
4477 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4478 && TREE_CODE (inside_init) != CONSTRUCTOR)
4480 error_init ("array initialized from non-constant array expression");
4481 return error_mark_node;
4484 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4485 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4487 /* Compound expressions can only occur here if -pedantic or
4488 -pedantic-errors is specified. In the later case, we always want
4489 an error. In the former case, we simply want a warning. */
4490 if (require_constant && pedantic
4491 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4494 = valid_compound_expr_initializer (inside_init,
4495 TREE_TYPE (inside_init));
4496 if (inside_init == error_mark_node)
4497 error_init ("initializer element is not constant");
4499 pedwarn_init ("initializer element is not constant");
4500 if (flag_pedantic_errors)
4501 inside_init = error_mark_node;
4503 else if (require_constant
4504 && !initializer_constant_valid_p (inside_init,
4505 TREE_TYPE (inside_init)))
4507 error_init ("initializer element is not constant");
4508 inside_init = error_mark_node;
4511 /* Added to enable additional -Wmissing-format-attribute warnings. */
4512 if (TREE_CODE (TREE_TYPE (inside_init)) == POINTER_TYPE)
4513 inside_init = convert_for_assignment (type, inside_init, ic_init, NULL_TREE,
4518 /* Handle scalar types, including conversions. */
4520 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4521 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
4522 || code == VECTOR_TYPE)
4524 if (TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE
4525 && (TREE_CODE (init) == STRING_CST
4526 || TREE_CODE (init) == COMPOUND_LITERAL_EXPR))
4527 init = array_to_pointer_conversion (init);
4529 = convert_for_assignment (type, init, ic_init,
4530 NULL_TREE, NULL_TREE, 0);
4532 /* Check to see if we have already given an error message. */
4533 if (inside_init == error_mark_node)
4535 else if (require_constant && !TREE_CONSTANT (inside_init))
4537 error_init ("initializer element is not constant");
4538 inside_init = error_mark_node;
4540 else if (require_constant
4541 && !initializer_constant_valid_p (inside_init,
4542 TREE_TYPE (inside_init)))
4544 error_init ("initializer element is not computable at load time");
4545 inside_init = error_mark_node;
4551 /* Come here only for records and arrays. */
4553 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4555 error_init ("variable-sized object may not be initialized");
4556 return error_mark_node;
4559 error_init ("invalid initializer");
4560 return error_mark_node;
4563 /* Handle initializers that use braces. */
4565 /* Type of object we are accumulating a constructor for.
4566 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4567 static tree constructor_type;
4569 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4571 static tree constructor_fields;
4573 /* For an ARRAY_TYPE, this is the specified index
4574 at which to store the next element we get. */
4575 static tree constructor_index;
4577 /* For an ARRAY_TYPE, this is the maximum index. */
4578 static tree constructor_max_index;
4580 /* For a RECORD_TYPE, this is the first field not yet written out. */
4581 static tree constructor_unfilled_fields;
4583 /* For an ARRAY_TYPE, this is the index of the first element
4584 not yet written out. */
4585 static tree constructor_unfilled_index;
4587 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4588 This is so we can generate gaps between fields, when appropriate. */
4589 static tree constructor_bit_index;
4591 /* If we are saving up the elements rather than allocating them,
4592 this is the list of elements so far (in reverse order,
4593 most recent first). */
4594 static VEC(constructor_elt,gc) *constructor_elements;
4596 /* 1 if constructor should be incrementally stored into a constructor chain,
4597 0 if all the elements should be kept in AVL tree. */
4598 static int constructor_incremental;
4600 /* 1 if so far this constructor's elements are all compile-time constants. */
4601 static int constructor_constant;
4603 /* 1 if so far this constructor's elements are all valid address constants. */
4604 static int constructor_simple;
4606 /* 1 if this constructor is erroneous so far. */
4607 static int constructor_erroneous;
4609 /* Structure for managing pending initializer elements, organized as an
4614 struct init_node *left, *right;
4615 struct init_node *parent;
4621 /* Tree of pending elements at this constructor level.
4622 These are elements encountered out of order
4623 which belong at places we haven't reached yet in actually
4625 Will never hold tree nodes across GC runs. */
4626 static struct init_node *constructor_pending_elts;
4628 /* The SPELLING_DEPTH of this constructor. */
4629 static int constructor_depth;
4631 /* DECL node for which an initializer is being read.
4632 0 means we are reading a constructor expression
4633 such as (struct foo) {...}. */
4634 static tree constructor_decl;
4636 /* Nonzero if this is an initializer for a top-level decl. */
4637 static int constructor_top_level;
4639 /* Nonzero if there were any member designators in this initializer. */
4640 static int constructor_designated;
4642 /* Nesting depth of designator list. */
4643 static int designator_depth;
4645 /* Nonzero if there were diagnosed errors in this designator list. */
4646 static int designator_errorneous;
4649 /* This stack has a level for each implicit or explicit level of
4650 structuring in the initializer, including the outermost one. It
4651 saves the values of most of the variables above. */
4653 struct constructor_range_stack;
4655 struct constructor_stack
4657 struct constructor_stack *next;
4662 tree unfilled_index;
4663 tree unfilled_fields;
4665 VEC(constructor_elt,gc) *elements;
4666 struct init_node *pending_elts;
4669 /* If value nonzero, this value should replace the entire
4670 constructor at this level. */
4671 struct c_expr replacement_value;
4672 struct constructor_range_stack *range_stack;
4682 static struct constructor_stack *constructor_stack;
4684 /* This stack represents designators from some range designator up to
4685 the last designator in the list. */
4687 struct constructor_range_stack
4689 struct constructor_range_stack *next, *prev;
4690 struct constructor_stack *stack;
4697 static struct constructor_range_stack *constructor_range_stack;
4699 /* This stack records separate initializers that are nested.
4700 Nested initializers can't happen in ANSI C, but GNU C allows them
4701 in cases like { ... (struct foo) { ... } ... }. */
4703 struct initializer_stack
4705 struct initializer_stack *next;
4707 struct constructor_stack *constructor_stack;
4708 struct constructor_range_stack *constructor_range_stack;
4709 VEC(constructor_elt,gc) *elements;
4710 struct spelling *spelling;
4711 struct spelling *spelling_base;
4714 char require_constant_value;
4715 char require_constant_elements;
4718 static struct initializer_stack *initializer_stack;
4720 /* Prepare to parse and output the initializer for variable DECL. */
4723 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
4726 struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
4728 p->decl = constructor_decl;
4729 p->require_constant_value = require_constant_value;
4730 p->require_constant_elements = require_constant_elements;
4731 p->constructor_stack = constructor_stack;
4732 p->constructor_range_stack = constructor_range_stack;
4733 p->elements = constructor_elements;
4734 p->spelling = spelling;
4735 p->spelling_base = spelling_base;
4736 p->spelling_size = spelling_size;
4737 p->top_level = constructor_top_level;
4738 p->next = initializer_stack;
4739 initializer_stack = p;
4741 constructor_decl = decl;
4742 constructor_designated = 0;
4743 constructor_top_level = top_level;
4745 if (decl != 0 && decl != error_mark_node)
4747 require_constant_value = TREE_STATIC (decl);
4748 require_constant_elements
4749 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4750 /* For a scalar, you can always use any value to initialize,
4751 even within braces. */
4752 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4753 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4754 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4755 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4756 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4760 require_constant_value = 0;
4761 require_constant_elements = 0;
4762 locus = "(anonymous)";
4765 constructor_stack = 0;
4766 constructor_range_stack = 0;
4768 missing_braces_mentioned = 0;
4772 RESTORE_SPELLING_DEPTH (0);
4775 push_string (locus);
4781 struct initializer_stack *p = initializer_stack;
4783 /* Free the whole constructor stack of this initializer. */
4784 while (constructor_stack)
4786 struct constructor_stack *q = constructor_stack;
4787 constructor_stack = q->next;
4791 gcc_assert (!constructor_range_stack);
4793 /* Pop back to the data of the outer initializer (if any). */
4794 free (spelling_base);
4796 constructor_decl = p->decl;
4797 require_constant_value = p->require_constant_value;
4798 require_constant_elements = p->require_constant_elements;
4799 constructor_stack = p->constructor_stack;
4800 constructor_range_stack = p->constructor_range_stack;
4801 constructor_elements = p->elements;
4802 spelling = p->spelling;
4803 spelling_base = p->spelling_base;
4804 spelling_size = p->spelling_size;
4805 constructor_top_level = p->top_level;
4806 initializer_stack = p->next;
4810 /* Call here when we see the initializer is surrounded by braces.
4811 This is instead of a call to push_init_level;
4812 it is matched by a call to pop_init_level.
4814 TYPE is the type to initialize, for a constructor expression.
4815 For an initializer for a decl, TYPE is zero. */
4818 really_start_incremental_init (tree type)
4820 struct constructor_stack *p = XNEW (struct constructor_stack);
4823 type = TREE_TYPE (constructor_decl);
4825 if (targetm.vector_opaque_p (type))
4826 error ("opaque vector types cannot be initialized");
4828 p->type = constructor_type;
4829 p->fields = constructor_fields;
4830 p->index = constructor_index;
4831 p->max_index = constructor_max_index;
4832 p->unfilled_index = constructor_unfilled_index;
4833 p->unfilled_fields = constructor_unfilled_fields;
4834 p->bit_index = constructor_bit_index;
4835 p->elements = constructor_elements;
4836 p->constant = constructor_constant;
4837 p->simple = constructor_simple;
4838 p->erroneous = constructor_erroneous;
4839 p->pending_elts = constructor_pending_elts;
4840 p->depth = constructor_depth;
4841 p->replacement_value.value = 0;
4842 p->replacement_value.original_code = ERROR_MARK;
4846 p->incremental = constructor_incremental;
4847 p->designated = constructor_designated;
4849 constructor_stack = p;
4851 constructor_constant = 1;
4852 constructor_simple = 1;
4853 constructor_depth = SPELLING_DEPTH ();
4854 constructor_elements = 0;
4855 constructor_pending_elts = 0;
4856 constructor_type = type;
4857 constructor_incremental = 1;
4858 constructor_designated = 0;
4859 designator_depth = 0;
4860 designator_errorneous = 0;
4862 if (TREE_CODE (constructor_type) == RECORD_TYPE
4863 || TREE_CODE (constructor_type) == UNION_TYPE)
4865 constructor_fields = TYPE_FIELDS (constructor_type);
4866 /* Skip any nameless bit fields at the beginning. */
4867 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4868 && DECL_NAME (constructor_fields) == 0)
4869 constructor_fields = TREE_CHAIN (constructor_fields);
4871 constructor_unfilled_fields = constructor_fields;
4872 constructor_bit_index = bitsize_zero_node;
4874 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4876 if (TYPE_DOMAIN (constructor_type))
4878 constructor_max_index
4879 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4881 /* Detect non-empty initializations of zero-length arrays. */
4882 if (constructor_max_index == NULL_TREE
4883 && TYPE_SIZE (constructor_type))
4884 constructor_max_index = build_int_cst (NULL_TREE, -1);
4886 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4887 to initialize VLAs will cause a proper error; avoid tree
4888 checking errors as well by setting a safe value. */
4889 if (constructor_max_index
4890 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4891 constructor_max_index = build_int_cst (NULL_TREE, -1);
4894 = convert (bitsizetype,
4895 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4899 constructor_index = bitsize_zero_node;
4900 constructor_max_index = NULL_TREE;
4903 constructor_unfilled_index = constructor_index;
4905 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4907 /* Vectors are like simple fixed-size arrays. */
4908 constructor_max_index =
4909 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4910 constructor_index = convert (bitsizetype, bitsize_zero_node);
4911 constructor_unfilled_index = constructor_index;
4915 /* Handle the case of int x = {5}; */
4916 constructor_fields = constructor_type;
4917 constructor_unfilled_fields = constructor_type;
4921 /* Push down into a subobject, for initialization.
4922 If this is for an explicit set of braces, IMPLICIT is 0.
4923 If it is because the next element belongs at a lower level,
4924 IMPLICIT is 1 (or 2 if the push is because of designator list). */
4927 push_init_level (int implicit)
4929 struct constructor_stack *p;
4930 tree value = NULL_TREE;
4932 /* If we've exhausted any levels that didn't have braces,
4933 pop them now. If implicit == 1, this will have been done in
4934 process_init_element; do not repeat it here because in the case
4935 of excess initializers for an empty aggregate this leads to an
4936 infinite cycle of popping a level and immediately recreating
4940 while (constructor_stack->implicit)
4942 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4943 || TREE_CODE (constructor_type) == UNION_TYPE)
4944 && constructor_fields == 0)
4945 process_init_element (pop_init_level (1));
4946 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4947 && constructor_max_index
4948 && tree_int_cst_lt (constructor_max_index,
4950 process_init_element (pop_init_level (1));
4956 /* Unless this is an explicit brace, we need to preserve previous
4960 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4961 || TREE_CODE (constructor_type) == UNION_TYPE)
4962 && constructor_fields)
4963 value = find_init_member (constructor_fields);
4964 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4965 value = find_init_member (constructor_index);
4968 p = XNEW (struct constructor_stack);
4969 p->type = constructor_type;
4970 p->fields = constructor_fields;
4971 p->index = constructor_index;
4972 p->max_index = constructor_max_index;
4973 p->unfilled_index = constructor_unfilled_index;
4974 p->unfilled_fields = constructor_unfilled_fields;
4975 p->bit_index = constructor_bit_index;
4976 p->elements = constructor_elements;
4977 p->constant = constructor_constant;
4978 p->simple = constructor_simple;
4979 p->erroneous = constructor_erroneous;
4980 p->pending_elts = constructor_pending_elts;
4981 p->depth = constructor_depth;
4982 p->replacement_value.value = 0;
4983 p->replacement_value.original_code = ERROR_MARK;
4984 p->implicit = implicit;
4986 p->incremental = constructor_incremental;
4987 p->designated = constructor_designated;
4988 p->next = constructor_stack;
4990 constructor_stack = p;
4992 constructor_constant = 1;
4993 constructor_simple = 1;
4994 constructor_depth = SPELLING_DEPTH ();
4995 constructor_elements = 0;
4996 constructor_incremental = 1;
4997 constructor_designated = 0;
4998 constructor_pending_elts = 0;
5001 p->range_stack = constructor_range_stack;
5002 constructor_range_stack = 0;
5003 designator_depth = 0;
5004 designator_errorneous = 0;
5007 /* Don't die if an entire brace-pair level is superfluous
5008 in the containing level. */
5009 if (constructor_type == 0)
5011 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5012 || TREE_CODE (constructor_type) == UNION_TYPE)
5014 /* Don't die if there are extra init elts at the end. */
5015 if (constructor_fields == 0)
5016 constructor_type = 0;
5019 constructor_type = TREE_TYPE (constructor_fields);
5020 push_member_name (constructor_fields);
5021 constructor_depth++;
5024 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5026 constructor_type = TREE_TYPE (constructor_type);
5027 push_array_bounds (tree_low_cst (constructor_index, 0));
5028 constructor_depth++;
5031 if (constructor_type == 0)
5033 error_init ("extra brace group at end of initializer");
5034 constructor_fields = 0;
5035 constructor_unfilled_fields = 0;
5039 if (value && TREE_CODE (value) == CONSTRUCTOR)
5041 constructor_constant = TREE_CONSTANT (value);
5042 constructor_simple = TREE_STATIC (value);
5043 constructor_elements = CONSTRUCTOR_ELTS (value);
5044 if (!VEC_empty (constructor_elt, constructor_elements)
5045 && (TREE_CODE (constructor_type) == RECORD_TYPE
5046 || TREE_CODE (constructor_type) == ARRAY_TYPE))
5047 set_nonincremental_init ();
5050 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
5052 missing_braces_mentioned = 1;
5053 warning_init ("missing braces around initializer");
5056 if (TREE_CODE (constructor_type) == RECORD_TYPE
5057 || TREE_CODE (constructor_type) == UNION_TYPE)
5059 constructor_fields = TYPE_FIELDS (constructor_type);
5060 /* Skip any nameless bit fields at the beginning. */
5061 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5062 && DECL_NAME (constructor_fields) == 0)
5063 constructor_fields = TREE_CHAIN (constructor_fields);
5065 constructor_unfilled_fields = constructor_fields;
5066 constructor_bit_index = bitsize_zero_node;
5068 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5070 /* Vectors are like simple fixed-size arrays. */
5071 constructor_max_index =
5072 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
5073 constructor_index = convert (bitsizetype, integer_zero_node);
5074 constructor_unfilled_index = constructor_index;
5076 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5078 if (TYPE_DOMAIN (constructor_type))
5080 constructor_max_index
5081 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5083 /* Detect non-empty initializations of zero-length arrays. */
5084 if (constructor_max_index == NULL_TREE
5085 && TYPE_SIZE (constructor_type))
5086 constructor_max_index = build_int_cst (NULL_TREE, -1);
5088 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5089 to initialize VLAs will cause a proper error; avoid tree
5090 checking errors as well by setting a safe value. */
5091 if (constructor_max_index
5092 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5093 constructor_max_index = build_int_cst (NULL_TREE, -1);
5096 = convert (bitsizetype,
5097 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5100 constructor_index = bitsize_zero_node;
5102 constructor_unfilled_index = constructor_index;
5103 if (value && TREE_CODE (value) == STRING_CST)
5105 /* We need to split the char/wchar array into individual
5106 characters, so that we don't have to special case it
5108 set_nonincremental_init_from_string (value);
5113 if (constructor_type != error_mark_node)
5114 warning_init ("braces around scalar initializer");
5115 constructor_fields = constructor_type;
5116 constructor_unfilled_fields = constructor_type;
5120 /* At the end of an implicit or explicit brace level,
5121 finish up that level of constructor. If a single expression
5122 with redundant braces initialized that level, return the
5123 c_expr structure for that expression. Otherwise, the original_code
5124 element is set to ERROR_MARK.
5125 If we were outputting the elements as they are read, return 0 as the value
5126 from inner levels (process_init_element ignores that),
5127 but return error_mark_node as the value from the outermost level
5128 (that's what we want to put in DECL_INITIAL).
5129 Otherwise, return a CONSTRUCTOR expression as the value. */
5132 pop_init_level (int implicit)
5134 struct constructor_stack *p;
5137 ret.original_code = ERROR_MARK;
5141 /* When we come to an explicit close brace,
5142 pop any inner levels that didn't have explicit braces. */
5143 while (constructor_stack->implicit)
5144 process_init_element (pop_init_level (1));
5146 gcc_assert (!constructor_range_stack);
5149 /* Now output all pending elements. */
5150 constructor_incremental = 1;
5151 output_pending_init_elements (1);
5153 p = constructor_stack;
5155 /* Error for initializing a flexible array member, or a zero-length
5156 array member in an inappropriate context. */
5157 if (constructor_type && constructor_fields
5158 && TREE_CODE (constructor_type) == ARRAY_TYPE
5159 && TYPE_DOMAIN (constructor_type)
5160 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5162 /* Silently discard empty initializations. The parser will
5163 already have pedwarned for empty brackets. */
5164 if (integer_zerop (constructor_unfilled_index))
5165 constructor_type = NULL_TREE;
5168 gcc_assert (!TYPE_SIZE (constructor_type));
5170 if (constructor_depth > 2)
5171 error_init ("initialization of flexible array member in a nested context");
5173 pedwarn_init ("initialization of a flexible array member");
5175 /* We have already issued an error message for the existence
5176 of a flexible array member not at the end of the structure.
5177 Discard the initializer so that we do not die later. */
5178 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
5179 constructor_type = NULL_TREE;
5183 /* Warn when some struct elements are implicitly initialized to zero. */
5184 if (warn_missing_field_initializers
5186 && TREE_CODE (constructor_type) == RECORD_TYPE
5187 && constructor_unfilled_fields)
5189 /* Do not warn for flexible array members or zero-length arrays. */
5190 while (constructor_unfilled_fields
5191 && (!DECL_SIZE (constructor_unfilled_fields)
5192 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
5193 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5195 /* Do not warn if this level of the initializer uses member
5196 designators; it is likely to be deliberate. */
5197 if (constructor_unfilled_fields && !constructor_designated)
5199 push_member_name (constructor_unfilled_fields);
5200 warning_init ("missing initializer");
5201 RESTORE_SPELLING_DEPTH (constructor_depth);
5205 /* Pad out the end of the structure. */
5206 if (p->replacement_value.value)
5207 /* If this closes a superfluous brace pair,
5208 just pass out the element between them. */
5209 ret = p->replacement_value;
5210 else if (constructor_type == 0)
5212 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5213 && TREE_CODE (constructor_type) != UNION_TYPE
5214 && TREE_CODE (constructor_type) != ARRAY_TYPE
5215 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5217 /* A nonincremental scalar initializer--just return
5218 the element, after verifying there is just one. */
5219 if (VEC_empty (constructor_elt,constructor_elements))
5221 if (!constructor_erroneous)
5222 error_init ("empty scalar initializer");
5223 ret.value = error_mark_node;
5225 else if (VEC_length (constructor_elt,constructor_elements) != 1)
5227 error_init ("extra elements in scalar initializer");
5228 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
5231 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
5235 if (constructor_erroneous)
5236 ret.value = error_mark_node;
5239 ret.value = build_constructor (constructor_type,
5240 constructor_elements);
5241 if (constructor_constant)
5242 TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
5243 if (constructor_constant && constructor_simple)
5244 TREE_STATIC (ret.value) = 1;
5248 constructor_type = p->type;
5249 constructor_fields = p->fields;
5250 constructor_index = p->index;
5251 constructor_max_index = p->max_index;
5252 constructor_unfilled_index = p->unfilled_index;
5253 constructor_unfilled_fields = p->unfilled_fields;
5254 constructor_bit_index = p->bit_index;
5255 constructor_elements = p->elements;
5256 constructor_constant = p->constant;
5257 constructor_simple = p->simple;
5258 constructor_erroneous = p->erroneous;
5259 constructor_incremental = p->incremental;
5260 constructor_designated = p->designated;
5261 constructor_pending_elts = p->pending_elts;
5262 constructor_depth = p->depth;
5264 constructor_range_stack = p->range_stack;
5265 RESTORE_SPELLING_DEPTH (constructor_depth);
5267 constructor_stack = p->next;
5272 if (constructor_stack == 0)
5274 ret.value = error_mark_node;
5282 /* Common handling for both array range and field name designators.
5283 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5286 set_designator (int array)
5289 enum tree_code subcode;
5291 /* Don't die if an entire brace-pair level is superfluous
5292 in the containing level. */
5293 if (constructor_type == 0)
5296 /* If there were errors in this designator list already, bail out
5298 if (designator_errorneous)
5301 if (!designator_depth)
5303 gcc_assert (!constructor_range_stack);
5305 /* Designator list starts at the level of closest explicit
5307 while (constructor_stack->implicit)
5308 process_init_element (pop_init_level (1));
5309 constructor_designated = 1;
5313 switch (TREE_CODE (constructor_type))
5317 subtype = TREE_TYPE (constructor_fields);
5318 if (subtype != error_mark_node)
5319 subtype = TYPE_MAIN_VARIANT (subtype);
5322 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5328 subcode = TREE_CODE (subtype);
5329 if (array && subcode != ARRAY_TYPE)
5331 error_init ("array index in non-array initializer");
5334 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5336 error_init ("field name not in record or union initializer");
5340 constructor_designated = 1;
5341 push_init_level (2);
5345 /* If there are range designators in designator list, push a new designator
5346 to constructor_range_stack. RANGE_END is end of such stack range or
5347 NULL_TREE if there is no range designator at this level. */
5350 push_range_stack (tree range_end)
5352 struct constructor_range_stack *p;
5354 p = GGC_NEW (struct constructor_range_stack);
5355 p->prev = constructor_range_stack;
5357 p->fields = constructor_fields;
5358 p->range_start = constructor_index;
5359 p->index = constructor_index;
5360 p->stack = constructor_stack;
5361 p->range_end = range_end;
5362 if (constructor_range_stack)
5363 constructor_range_stack->next = p;
5364 constructor_range_stack = p;
5367 /* Within an array initializer, specify the next index to be initialized.
5368 FIRST is that index. If LAST is nonzero, then initialize a range
5369 of indices, running from FIRST through LAST. */
5372 set_init_index (tree first, tree last)
5374 if (set_designator (1))
5377 designator_errorneous = 1;
5379 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5380 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5382 error_init ("array index in initializer not of integer type");
5386 if (TREE_CODE (first) != INTEGER_CST)
5387 error_init ("nonconstant array index in initializer");
5388 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5389 error_init ("nonconstant array index in initializer");
5390 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5391 error_init ("array index in non-array initializer");
5392 else if (tree_int_cst_sgn (first) == -1)
5393 error_init ("array index in initializer exceeds array bounds");
5394 else if (constructor_max_index
5395 && tree_int_cst_lt (constructor_max_index, first))
5396 error_init ("array index in initializer exceeds array bounds");
5399 constructor_index = convert (bitsizetype, first);
5403 if (tree_int_cst_equal (first, last))
5405 else if (tree_int_cst_lt (last, first))
5407 error_init ("empty index range in initializer");
5412 last = convert (bitsizetype, last);
5413 if (constructor_max_index != 0
5414 && tree_int_cst_lt (constructor_max_index, last))
5416 error_init ("array index range in initializer exceeds array bounds");
5423 designator_errorneous = 0;
5424 if (constructor_range_stack || last)
5425 push_range_stack (last);
5429 /* Within a struct initializer, specify the next field to be initialized. */
5432 set_init_label (tree fieldname)
5436 if (set_designator (0))
5439 designator_errorneous = 1;
5441 if (TREE_CODE (constructor_type) != RECORD_TYPE
5442 && TREE_CODE (constructor_type) != UNION_TYPE)
5444 error_init ("field name not in record or union initializer");
5448 for (tail = TYPE_FIELDS (constructor_type); tail;
5449 tail = TREE_CHAIN (tail))
5451 if (DECL_NAME (tail) == fieldname)
5456 error ("unknown field %qE specified in initializer", fieldname);
5459 constructor_fields = tail;
5461 designator_errorneous = 0;
5462 if (constructor_range_stack)
5463 push_range_stack (NULL_TREE);
5467 /* Add a new initializer to the tree of pending initializers. PURPOSE
5468 identifies the initializer, either array index or field in a structure.
5469 VALUE is the value of that index or field. */
5472 add_pending_init (tree purpose, tree value)
5474 struct init_node *p, **q, *r;
5476 q = &constructor_pending_elts;
5479 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5484 if (tree_int_cst_lt (purpose, p->purpose))
5486 else if (tree_int_cst_lt (p->purpose, purpose))
5490 if (TREE_SIDE_EFFECTS (p->value))
5491 warning_init ("initialized field with side-effects overwritten");
5501 bitpos = bit_position (purpose);
5505 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5507 else if (p->purpose != purpose)
5511 if (TREE_SIDE_EFFECTS (p->value))
5512 warning_init ("initialized field with side-effects overwritten");
5519 r = GGC_NEW (struct init_node);
5520 r->purpose = purpose;
5531 struct init_node *s;
5535 if (p->balance == 0)
5537 else if (p->balance < 0)
5544 p->left->parent = p;
5561 constructor_pending_elts = r;
5566 struct init_node *t = r->right;
5570 r->right->parent = r;
5575 p->left->parent = p;
5578 p->balance = t->balance < 0;
5579 r->balance = -(t->balance > 0);
5594 constructor_pending_elts = t;
5600 /* p->balance == +1; growth of left side balances the node. */
5605 else /* r == p->right */
5607 if (p->balance == 0)
5608 /* Growth propagation from right side. */
5610 else if (p->balance > 0)
5617 p->right->parent = p;
5634 constructor_pending_elts = r;
5636 else /* r->balance == -1 */
5639 struct init_node *t = r->left;
5643 r->left->parent = r;
5648 p->right->parent = p;
5651 r->balance = (t->balance < 0);
5652 p->balance = -(t->balance > 0);
5667 constructor_pending_elts = t;
5673 /* p->balance == -1; growth of right side balances the node. */
5684 /* Build AVL tree from a sorted chain. */
5687 set_nonincremental_init (void)
5689 unsigned HOST_WIDE_INT ix;
5692 if (TREE_CODE (constructor_type) != RECORD_TYPE
5693 && TREE_CODE (constructor_type) != ARRAY_TYPE)
5696 FOR_EACH_CONSTRUCTOR_ELT (constructor_elements, ix, index, value)
5697 add_pending_init (index, value);
5698 constructor_elements = 0;
5699 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5701 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5702 /* Skip any nameless bit fields at the beginning. */
5703 while (constructor_unfilled_fields != 0
5704 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5705 && DECL_NAME (constructor_unfilled_fields) == 0)
5706 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5709 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5711 if (TYPE_DOMAIN (constructor_type))
5712 constructor_unfilled_index
5713 = convert (bitsizetype,
5714 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5716 constructor_unfilled_index = bitsize_zero_node;
5718 constructor_incremental = 0;
5721 /* Build AVL tree from a string constant. */
5724 set_nonincremental_init_from_string (tree str)
5726 tree value, purpose, type;
5727 HOST_WIDE_INT val[2];
5728 const char *p, *end;
5729 int byte, wchar_bytes, charwidth, bitpos;
5731 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
5733 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5734 == TYPE_PRECISION (char_type_node))
5738 gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5739 == TYPE_PRECISION (wchar_type_node));
5740 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5742 charwidth = TYPE_PRECISION (char_type_node);
5743 type = TREE_TYPE (constructor_type);
5744 p = TREE_STRING_POINTER (str);
5745 end = p + TREE_STRING_LENGTH (str);
5747 for (purpose = bitsize_zero_node;
5748 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5749 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
5751 if (wchar_bytes == 1)
5753 val[1] = (unsigned char) *p++;
5760 for (byte = 0; byte < wchar_bytes; byte++)
5762 if (BYTES_BIG_ENDIAN)
5763 bitpos = (wchar_bytes - byte - 1) * charwidth;
5765 bitpos = byte * charwidth;
5766 val[bitpos < HOST_BITS_PER_WIDE_INT]
5767 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5768 << (bitpos % HOST_BITS_PER_WIDE_INT);
5772 if (!TYPE_UNSIGNED (type))
5774 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5775 if (bitpos < HOST_BITS_PER_WIDE_INT)
5777 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5779 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5783 else if (bitpos == HOST_BITS_PER_WIDE_INT)
5788 else if (val[0] & (((HOST_WIDE_INT) 1)
5789 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5790 val[0] |= ((HOST_WIDE_INT) -1)
5791 << (bitpos - HOST_BITS_PER_WIDE_INT);
5794 value = build_int_cst_wide (type, val[1], val[0]);
5795 add_pending_init (purpose, value);
5798 constructor_incremental = 0;
5801 /* Return value of FIELD in pending initializer or zero if the field was
5802 not initialized yet. */
5805 find_init_member (tree field)
5807 struct init_node *p;
5809 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5811 if (constructor_incremental
5812 && tree_int_cst_lt (field, constructor_unfilled_index))
5813 set_nonincremental_init ();
5815 p = constructor_pending_elts;
5818 if (tree_int_cst_lt (field, p->purpose))
5820 else if (tree_int_cst_lt (p->purpose, field))
5826 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5828 tree bitpos = bit_position (field);
5830 if (constructor_incremental
5831 && (!constructor_unfilled_fields
5832 || tree_int_cst_lt (bitpos,
5833 bit_position (constructor_unfilled_fields))))
5834 set_nonincremental_init ();
5836 p = constructor_pending_elts;
5839 if (field == p->purpose)
5841 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5847 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5849 if (!VEC_empty (constructor_elt, constructor_elements)
5850 && (VEC_last (constructor_elt, constructor_elements)->index
5852 return VEC_last (constructor_elt, constructor_elements)->value;
5857 /* "Output" the next constructor element.
5858 At top level, really output it to assembler code now.
5859 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5860 TYPE is the data type that the containing data type wants here.
5861 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5862 If VALUE is a string constant, STRICT_STRING is true if it is
5863 unparenthesized or we should not warn here for it being parenthesized.
5864 For other types of VALUE, STRICT_STRING is not used.
5866 PENDING if non-nil means output pending elements that belong
5867 right after this element. (PENDING is normally 1;
5868 it is 0 while outputting pending elements, to avoid recursion.) */
5871 output_init_element (tree value, bool strict_string, tree type, tree field,
5874 constructor_elt *celt;
5876 if (type == error_mark_node || value == error_mark_node)
5878 constructor_erroneous = 1;
5881 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5882 && (TREE_CODE (value) == STRING_CST
5883 || TREE_CODE (value) == COMPOUND_LITERAL_EXPR)
5884 && !(TREE_CODE (value) == STRING_CST
5885 && TREE_CODE (type) == ARRAY_TYPE
5886 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
5887 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5888 TYPE_MAIN_VARIANT (type)))
5889 value = array_to_pointer_conversion (value);
5891 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5892 && require_constant_value && !flag_isoc99 && pending)
5894 /* As an extension, allow initializing objects with static storage
5895 duration with compound literals (which are then treated just as
5896 the brace enclosed list they contain). */
5897 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5898 value = DECL_INITIAL (decl);
5901 if (value == error_mark_node)
5902 constructor_erroneous = 1;
5903 else if (!TREE_CONSTANT (value))
5904 constructor_constant = 0;
5905 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
5906 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5907 || TREE_CODE (constructor_type) == UNION_TYPE)
5908 && DECL_C_BIT_FIELD (field)
5909 && TREE_CODE (value) != INTEGER_CST))
5910 constructor_simple = 0;
5912 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
5914 if (require_constant_value)
5916 error_init ("initializer element is not constant");
5917 value = error_mark_node;
5919 else if (require_constant_elements)
5920 pedwarn ("initializer element is not computable at load time");
5923 /* If this field is empty (and not at the end of structure),
5924 don't do anything other than checking the initializer. */
5926 && (TREE_TYPE (field) == error_mark_node
5927 || (COMPLETE_TYPE_P (TREE_TYPE (field))
5928 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5929 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5930 || TREE_CHAIN (field)))))
5933 value = digest_init (type, value, strict_string, require_constant_value);
5934 if (value == error_mark_node)
5936 constructor_erroneous = 1;
5940 /* If this element doesn't come next in sequence,
5941 put it on constructor_pending_elts. */
5942 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5943 && (!constructor_incremental
5944 || !tree_int_cst_equal (field, constructor_unfilled_index)))
5946 if (constructor_incremental
5947 && tree_int_cst_lt (field, constructor_unfilled_index))
5948 set_nonincremental_init ();
5950 add_pending_init (field, value);
5953 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5954 && (!constructor_incremental
5955 || field != constructor_unfilled_fields))
5957 /* We do this for records but not for unions. In a union,
5958 no matter which field is specified, it can be initialized
5959 right away since it starts at the beginning of the union. */
5960 if (constructor_incremental)
5962 if (!constructor_unfilled_fields)
5963 set_nonincremental_init ();
5966 tree bitpos, unfillpos;
5968 bitpos = bit_position (field);
5969 unfillpos = bit_position (constructor_unfilled_fields);
5971 if (tree_int_cst_lt (bitpos, unfillpos))
5972 set_nonincremental_init ();
5976 add_pending_init (field, value);
5979 else if (TREE_CODE (constructor_type) == UNION_TYPE
5980 && !VEC_empty (constructor_elt, constructor_elements))
5982 if (TREE_SIDE_EFFECTS (VEC_last (constructor_elt,
5983 constructor_elements)->value))
5984 warning_init ("initialized field with side-effects overwritten");
5986 /* We can have just one union field set. */
5987 constructor_elements = 0;
5990 /* Otherwise, output this element either to
5991 constructor_elements or to the assembler file. */
5993 celt = VEC_safe_push (constructor_elt, gc, constructor_elements, NULL);
5994 celt->index = field;
5995 celt->value = value;
5997 /* Advance the variable that indicates sequential elements output. */
5998 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5999 constructor_unfilled_index
6000 = size_binop (PLUS_EXPR, constructor_unfilled_index,
6002 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6004 constructor_unfilled_fields
6005 = TREE_CHAIN (constructor_unfilled_fields);
6007 /* Skip any nameless bit fields. */
6008 while (constructor_unfilled_fields != 0
6009 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6010 && DECL_NAME (constructor_unfilled_fields) == 0)
6011 constructor_unfilled_fields =
6012 TREE_CHAIN (constructor_unfilled_fields);
6014 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6015 constructor_unfilled_fields = 0;
6017 /* Now output any pending elements which have become next. */
6019 output_pending_init_elements (0);
6022 /* Output any pending elements which have become next.
6023 As we output elements, constructor_unfilled_{fields,index}
6024 advances, which may cause other elements to become next;
6025 if so, they too are output.
6027 If ALL is 0, we return when there are
6028 no more pending elements to output now.
6030 If ALL is 1, we output space as necessary so that
6031 we can output all the pending elements. */
6034 output_pending_init_elements (int all)
6036 struct init_node *elt = constructor_pending_elts;
6041 /* Look through the whole pending tree.
6042 If we find an element that should be output now,
6043 output it. Otherwise, set NEXT to the element
6044 that comes first among those still pending. */
6049 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6051 if (tree_int_cst_equal (elt->purpose,
6052 constructor_unfilled_index))
6053 output_init_element (elt->value, true,
6054 TREE_TYPE (constructor_type),
6055 constructor_unfilled_index, 0);
6056 else if (tree_int_cst_lt (constructor_unfilled_index,
6059 /* Advance to the next smaller node. */
6064 /* We have reached the smallest node bigger than the
6065 current unfilled index. Fill the space first. */
6066 next = elt->purpose;
6072 /* Advance to the next bigger node. */
6077 /* We have reached the biggest node in a subtree. Find
6078 the parent of it, which is the next bigger node. */
6079 while (elt->parent && elt->parent->right == elt)
6082 if (elt && tree_int_cst_lt (constructor_unfilled_index,
6085 next = elt->purpose;
6091 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6092 || TREE_CODE (constructor_type) == UNION_TYPE)
6094 tree ctor_unfilled_bitpos, elt_bitpos;
6096 /* If the current record is complete we are done. */
6097 if (constructor_unfilled_fields == 0)
6100 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
6101 elt_bitpos = bit_position (elt->purpose);
6102 /* We can't compare fields here because there might be empty
6103 fields in between. */
6104 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
6106 constructor_unfilled_fields = elt->purpose;
6107 output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
6110 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
6112 /* Advance to the next smaller node. */
6117 /* We have reached the smallest node bigger than the
6118 current unfilled field. Fill the space first. */
6119 next = elt->purpose;
6125 /* Advance to the next bigger node. */
6130 /* We have reached the biggest node in a subtree. Find
6131 the parent of it, which is the next bigger node. */
6132 while (elt->parent && elt->parent->right == elt)
6136 && (tree_int_cst_lt (ctor_unfilled_bitpos,
6137 bit_position (elt->purpose))))
6139 next = elt->purpose;
6147 /* Ordinarily return, but not if we want to output all
6148 and there are elements left. */
6149 if (!(all && next != 0))
6152 /* If it's not incremental, just skip over the gap, so that after
6153 jumping to retry we will output the next successive element. */
6154 if (TREE_CODE (constructor_type) == RECORD_TYPE
6155 || TREE_CODE (constructor_type) == UNION_TYPE)
6156 constructor_unfilled_fields = next;
6157 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6158 constructor_unfilled_index = next;
6160 /* ELT now points to the node in the pending tree with the next
6161 initializer to output. */
6165 /* Add one non-braced element to the current constructor level.
6166 This adjusts the current position within the constructor's type.
6167 This may also start or terminate implicit levels
6168 to handle a partly-braced initializer.
6170 Once this has found the correct level for the new element,
6171 it calls output_init_element. */
6174 process_init_element (struct c_expr value)
6176 tree orig_value = value.value;
6177 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
6178 bool strict_string = value.original_code == STRING_CST;
6180 designator_depth = 0;
6181 designator_errorneous = 0;
6183 /* Handle superfluous braces around string cst as in
6184 char x[] = {"foo"}; */
6187 && TREE_CODE (constructor_type) == ARRAY_TYPE
6188 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
6189 && integer_zerop (constructor_unfilled_index))
6191 if (constructor_stack->replacement_value.value)
6192 error_init ("excess elements in char array initializer");
6193 constructor_stack->replacement_value = value;
6197 if (constructor_stack->replacement_value.value != 0)
6199 error_init ("excess elements in struct initializer");
6203 /* Ignore elements of a brace group if it is entirely superfluous
6204 and has already been diagnosed. */
6205 if (constructor_type == 0)
6208 /* If we've exhausted any levels that didn't have braces,
6210 while (constructor_stack->implicit)
6212 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6213 || TREE_CODE (constructor_type) == UNION_TYPE)
6214 && constructor_fields == 0)
6215 process_init_element (pop_init_level (1));
6216 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6217 && (constructor_max_index == 0
6218 || tree_int_cst_lt (constructor_max_index,
6219 constructor_index)))
6220 process_init_element (pop_init_level (1));
6225 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6226 if (constructor_range_stack)
6228 /* If value is a compound literal and we'll be just using its
6229 content, don't put it into a SAVE_EXPR. */
6230 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
6231 || !require_constant_value
6233 value.value = save_expr (value.value);
6238 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6241 enum tree_code fieldcode;
6243 if (constructor_fields == 0)
6245 pedwarn_init ("excess elements in struct initializer");
6249 fieldtype = TREE_TYPE (constructor_fields);
6250 if (fieldtype != error_mark_node)
6251 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6252 fieldcode = TREE_CODE (fieldtype);
6254 /* Error for non-static initialization of a flexible array member. */
6255 if (fieldcode == ARRAY_TYPE
6256 && !require_constant_value
6257 && TYPE_SIZE (fieldtype) == NULL_TREE
6258 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6260 error_init ("non-static initialization of a flexible array member");
6264 /* Accept a string constant to initialize a subarray. */
6265 if (value.value != 0
6266 && fieldcode == ARRAY_TYPE
6267 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6269 value.value = orig_value;
6270 /* Otherwise, if we have come to a subaggregate,
6271 and we don't have an element of its type, push into it. */
6272 else if (value.value != 0
6273 && value.value != error_mark_node
6274 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6275 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6276 || fieldcode == UNION_TYPE))
6278 push_init_level (1);
6284 push_member_name (constructor_fields);
6285 output_init_element (value.value, strict_string,
6286 fieldtype, constructor_fields, 1);
6287 RESTORE_SPELLING_DEPTH (constructor_depth);
6290 /* Do the bookkeeping for an element that was
6291 directly output as a constructor. */
6293 /* For a record, keep track of end position of last field. */
6294 if (DECL_SIZE (constructor_fields))
6295 constructor_bit_index
6296 = size_binop (PLUS_EXPR,
6297 bit_position (constructor_fields),
6298 DECL_SIZE (constructor_fields));
6300 /* If the current field was the first one not yet written out,
6301 it isn't now, so update. */
6302 if (constructor_unfilled_fields == constructor_fields)
6304 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6305 /* Skip any nameless bit fields. */
6306 while (constructor_unfilled_fields != 0
6307 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6308 && DECL_NAME (constructor_unfilled_fields) == 0)
6309 constructor_unfilled_fields =
6310 TREE_CHAIN (constructor_unfilled_fields);
6314 constructor_fields = TREE_CHAIN (constructor_fields);
6315 /* Skip any nameless bit fields at the beginning. */
6316 while (constructor_fields != 0
6317 && DECL_C_BIT_FIELD (constructor_fields)
6318 && DECL_NAME (constructor_fields) == 0)
6319 constructor_fields = TREE_CHAIN (constructor_fields);
6321 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6324 enum tree_code fieldcode;
6326 if (constructor_fields == 0)
6328 pedwarn_init ("excess elements in union initializer");
6332 fieldtype = TREE_TYPE (constructor_fields);
6333 if (fieldtype != error_mark_node)
6334 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6335 fieldcode = TREE_CODE (fieldtype);
6337 /* Warn that traditional C rejects initialization of unions.
6338 We skip the warning if the value is zero. This is done
6339 under the assumption that the zero initializer in user
6340 code appears conditioned on e.g. __STDC__ to avoid
6341 "missing initializer" warnings and relies on default
6342 initialization to zero in the traditional C case.
6343 We also skip the warning if the initializer is designated,
6344 again on the assumption that this must be conditional on
6345 __STDC__ anyway (and we've already complained about the
6346 member-designator already). */
6347 if (!in_system_header && !constructor_designated
6348 && !(value.value && (integer_zerop (value.value)
6349 || real_zerop (value.value))))
6350 warning (OPT_Wtraditional, "traditional C rejects initialization "
6353 /* Accept a string constant to initialize a subarray. */
6354 if (value.value != 0
6355 && fieldcode == ARRAY_TYPE
6356 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6358 value.value = orig_value;
6359 /* Otherwise, if we have come to a subaggregate,
6360 and we don't have an element of its type, push into it. */
6361 else if (value.value != 0
6362 && value.value != error_mark_node
6363 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6364 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6365 || fieldcode == UNION_TYPE))
6367 push_init_level (1);
6373 push_member_name (constructor_fields);
6374 output_init_element (value.value, strict_string,
6375 fieldtype, constructor_fields, 1);
6376 RESTORE_SPELLING_DEPTH (constructor_depth);
6379 /* Do the bookkeeping for an element that was
6380 directly output as a constructor. */
6382 constructor_bit_index = DECL_SIZE (constructor_fields);
6383 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6386 constructor_fields = 0;
6388 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6390 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6391 enum tree_code eltcode = TREE_CODE (elttype);
6393 /* Accept a string constant to initialize a subarray. */
6394 if (value.value != 0
6395 && eltcode == ARRAY_TYPE
6396 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6398 value.value = orig_value;
6399 /* Otherwise, if we have come to a subaggregate,
6400 and we don't have an element of its type, push into it. */
6401 else if (value.value != 0
6402 && value.value != error_mark_node
6403 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6404 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6405 || eltcode == UNION_TYPE))
6407 push_init_level (1);
6411 if (constructor_max_index != 0
6412 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6413 || integer_all_onesp (constructor_max_index)))
6415 pedwarn_init ("excess elements in array initializer");
6419 /* Now output the actual element. */
6422 push_array_bounds (tree_low_cst (constructor_index, 0));
6423 output_init_element (value.value, strict_string,
6424 elttype, constructor_index, 1);
6425 RESTORE_SPELLING_DEPTH (constructor_depth);
6429 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6432 /* If we are doing the bookkeeping for an element that was
6433 directly output as a constructor, we must update
6434 constructor_unfilled_index. */
6435 constructor_unfilled_index = constructor_index;
6437 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6439 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6441 /* Do a basic check of initializer size. Note that vectors
6442 always have a fixed size derived from their type. */
6443 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6445 pedwarn_init ("excess elements in vector initializer");
6449 /* Now output the actual element. */
6451 output_init_element (value.value, strict_string,
6452 elttype, constructor_index, 1);
6455 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6458 /* If we are doing the bookkeeping for an element that was
6459 directly output as a constructor, we must update
6460 constructor_unfilled_index. */
6461 constructor_unfilled_index = constructor_index;
6464 /* Handle the sole element allowed in a braced initializer
6465 for a scalar variable. */
6466 else if (constructor_type != error_mark_node
6467 && constructor_fields == 0)
6469 pedwarn_init ("excess elements in scalar initializer");
6475 output_init_element (value.value, strict_string,
6476 constructor_type, NULL_TREE, 1);
6477 constructor_fields = 0;
6480 /* Handle range initializers either at this level or anywhere higher
6481 in the designator stack. */
6482 if (constructor_range_stack)
6484 struct constructor_range_stack *p, *range_stack;
6487 range_stack = constructor_range_stack;
6488 constructor_range_stack = 0;
6489 while (constructor_stack != range_stack->stack)
6491 gcc_assert (constructor_stack->implicit);
6492 process_init_element (pop_init_level (1));
6494 for (p = range_stack;
6495 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6498 gcc_assert (constructor_stack->implicit);
6499 process_init_element (pop_init_level (1));
6502 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6503 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6508 constructor_index = p->index;
6509 constructor_fields = p->fields;
6510 if (finish && p->range_end && p->index == p->range_start)
6518 push_init_level (2);
6519 p->stack = constructor_stack;
6520 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6521 p->index = p->range_start;
6525 constructor_range_stack = range_stack;
6532 constructor_range_stack = 0;
6535 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6536 (guaranteed to be 'volatile' or null) and ARGS (represented using
6537 an ASM_EXPR node). */
6539 build_asm_stmt (tree cv_qualifier, tree args)
6541 if (!ASM_VOLATILE_P (args) && cv_qualifier)
6542 ASM_VOLATILE_P (args) = 1;
6543 return add_stmt (args);
6546 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6547 some INPUTS, and some CLOBBERS. The latter three may be NULL.
6548 SIMPLE indicates whether there was anything at all after the
6549 string in the asm expression -- asm("blah") and asm("blah" : )
6550 are subtly different. We use a ASM_EXPR node to represent this. */
6552 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6558 const char *constraint;
6559 const char **oconstraints;
6560 bool allows_mem, allows_reg, is_inout;
6561 int ninputs, noutputs;
6563 ninputs = list_length (inputs);
6564 noutputs = list_length (outputs);
6565 oconstraints = (const char **) alloca (noutputs * sizeof (const char *));
6567 string = resolve_asm_operand_names (string, outputs, inputs);
6569 /* Remove output conversions that change the type but not the mode. */
6570 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6572 tree output = TREE_VALUE (tail);
6574 /* ??? Really, this should not be here. Users should be using a
6575 proper lvalue, dammit. But there's a long history of using casts
6576 in the output operands. In cases like longlong.h, this becomes a
6577 primitive form of typechecking -- if the cast can be removed, then
6578 the output operand had a type of the proper width; otherwise we'll
6579 get an error. Gross, but ... */
6580 STRIP_NOPS (output);
6582 if (!lvalue_or_else (output, lv_asm))
6583 output = error_mark_node;
6585 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6586 oconstraints[i] = constraint;
6588 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
6589 &allows_mem, &allows_reg, &is_inout))
6591 /* If the operand is going to end up in memory,
6592 mark it addressable. */
6593 if (!allows_reg && !c_mark_addressable (output))
6594 output = error_mark_node;
6597 output = error_mark_node;
6599 TREE_VALUE (tail) = output;
6602 for (i = 0, tail = inputs; tail; ++i, tail = TREE_CHAIN (tail))
6606 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6607 input = TREE_VALUE (tail);
6609 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
6610 oconstraints, &allows_mem, &allows_reg))
6612 /* If the operand is going to end up in memory,
6613 mark it addressable. */
6614 if (!allows_reg && allows_mem)
6616 /* Strip the nops as we allow this case. FIXME, this really
6617 should be rejected or made deprecated. */
6619 if (!c_mark_addressable (input))
6620 input = error_mark_node;
6624 input = error_mark_node;
6626 TREE_VALUE (tail) = input;
6629 args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6631 /* Simple asm statements are treated as volatile. */
6634 ASM_VOLATILE_P (args) = 1;
6635 ASM_INPUT_P (args) = 1;
6641 /* Generate a goto statement to LABEL. */
6644 c_finish_goto_label (tree label)
6646 tree decl = lookup_label (label);
6650 if (C_DECL_UNJUMPABLE_STMT_EXPR (decl))
6652 error ("jump into statement expression");
6656 if (C_DECL_UNJUMPABLE_VM (decl))
6658 error ("jump into scope of identifier with variably modified type");
6662 if (!C_DECL_UNDEFINABLE_STMT_EXPR (decl))
6664 /* No jump from outside this statement expression context, so
6665 record that there is a jump from within this context. */
6666 struct c_label_list *nlist;
6667 nlist = XOBNEW (&parser_obstack, struct c_label_list);
6668 nlist->next = label_context_stack_se->labels_used;
6669 nlist->label = decl;
6670 label_context_stack_se->labels_used = nlist;
6673 if (!C_DECL_UNDEFINABLE_VM (decl))
6675 /* No jump from outside this context context of identifiers with
6676 variably modified type, so record that there is a jump from
6677 within this context. */
6678 struct c_label_list *nlist;
6679 nlist = XOBNEW (&parser_obstack, struct c_label_list);
6680 nlist->next = label_context_stack_vm->labels_used;
6681 nlist->label = decl;
6682 label_context_stack_vm->labels_used = nlist;
6685 TREE_USED (decl) = 1;
6686 return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
6689 /* Generate a computed goto statement to EXPR. */
6692 c_finish_goto_ptr (tree expr)
6695 pedwarn ("ISO C forbids %<goto *expr;%>");
6696 expr = convert (ptr_type_node, expr);
6697 return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
6700 /* Generate a C `return' statement. RETVAL is the expression for what
6701 to return, or a null pointer for `return;' with no value. */
6704 c_finish_return (tree retval)
6706 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6708 if (TREE_THIS_VOLATILE (current_function_decl))
6709 warning (0, "function declared %<noreturn%> has a %<return%> statement");
6713 current_function_returns_null = 1;
6714 if ((warn_return_type || flag_isoc99)
6715 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6716 pedwarn_c99 ("%<return%> with no value, in "
6717 "function returning non-void");
6719 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6721 current_function_returns_null = 1;
6722 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6723 pedwarn ("%<return%> with a value, in function returning void");
6727 tree t = convert_for_assignment (valtype, retval, ic_return,
6728 NULL_TREE, NULL_TREE, 0);
6729 tree res = DECL_RESULT (current_function_decl);
6732 current_function_returns_value = 1;
6733 if (t == error_mark_node)
6736 inner = t = convert (TREE_TYPE (res), t);
6738 /* Strip any conversions, additions, and subtractions, and see if
6739 we are returning the address of a local variable. Warn if so. */
6742 switch (TREE_CODE (inner))
6744 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6746 inner = TREE_OPERAND (inner, 0);
6750 /* If the second operand of the MINUS_EXPR has a pointer
6751 type (or is converted from it), this may be valid, so
6752 don't give a warning. */
6754 tree op1 = TREE_OPERAND (inner, 1);
6756 while (!POINTER_TYPE_P (TREE_TYPE (op1))
6757 && (TREE_CODE (op1) == NOP_EXPR
6758 || TREE_CODE (op1) == NON_LVALUE_EXPR
6759 || TREE_CODE (op1) == CONVERT_EXPR))
6760 op1 = TREE_OPERAND (op1, 0);
6762 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6765 inner = TREE_OPERAND (inner, 0);
6770 inner = TREE_OPERAND (inner, 0);
6772 while (REFERENCE_CLASS_P (inner)
6773 && TREE_CODE (inner) != INDIRECT_REF)
6774 inner = TREE_OPERAND (inner, 0);
6777 && !DECL_EXTERNAL (inner)
6778 && !TREE_STATIC (inner)
6779 && DECL_CONTEXT (inner) == current_function_decl)
6780 warning (0, "function returns address of local variable");
6790 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
6793 return add_stmt (build_stmt (RETURN_EXPR, retval));
6797 /* The SWITCH_EXPR being built. */
6800 /* The original type of the testing expression, i.e. before the
6801 default conversion is applied. */
6804 /* A splay-tree mapping the low element of a case range to the high
6805 element, or NULL_TREE if there is no high element. Used to
6806 determine whether or not a new case label duplicates an old case
6807 label. We need a tree, rather than simply a hash table, because
6808 of the GNU case range extension. */
6811 /* Number of nested statement expressions within this switch
6812 statement; if nonzero, case and default labels may not
6814 unsigned int blocked_stmt_expr;
6816 /* Scope of outermost declarations of identifiers with variably
6817 modified type within this switch statement; if nonzero, case and
6818 default labels may not appear. */
6819 unsigned int blocked_vm;
6821 /* The next node on the stack. */
6822 struct c_switch *next;
6825 /* A stack of the currently active switch statements. The innermost
6826 switch statement is on the top of the stack. There is no need to
6827 mark the stack for garbage collection because it is only active
6828 during the processing of the body of a function, and we never
6829 collect at that point. */
6831 struct c_switch *c_switch_stack;
6833 /* Start a C switch statement, testing expression EXP. Return the new
6837 c_start_case (tree exp)
6839 enum tree_code code;
6840 tree type, orig_type = error_mark_node;
6841 struct c_switch *cs;
6843 if (exp != error_mark_node)
6845 code = TREE_CODE (TREE_TYPE (exp));
6846 orig_type = TREE_TYPE (exp);
6848 if (!INTEGRAL_TYPE_P (orig_type)
6849 && code != ERROR_MARK)
6851 error ("switch quantity not an integer");
6852 exp = integer_zero_node;
6853 orig_type = error_mark_node;
6857 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6859 if (!in_system_header
6860 && (type == long_integer_type_node
6861 || type == long_unsigned_type_node))
6862 warning (OPT_Wtraditional, "%<long%> switch expression not "
6863 "converted to %<int%> in ISO C");
6865 exp = default_conversion (exp);
6866 type = TREE_TYPE (exp);
6870 /* Add this new SWITCH_EXPR to the stack. */
6871 cs = XNEW (struct c_switch);
6872 cs->switch_expr = build3 (SWITCH_EXPR, orig_type, exp, NULL_TREE, NULL_TREE);
6873 cs->orig_type = orig_type;
6874 cs->cases = splay_tree_new (case_compare, NULL, NULL);
6875 cs->blocked_stmt_expr = 0;
6877 cs->next = c_switch_stack;
6878 c_switch_stack = cs;
6880 return add_stmt (cs->switch_expr);
6883 /* Process a case label. */
6886 do_case (tree low_value, tree high_value)
6888 tree label = NULL_TREE;
6890 if (c_switch_stack && !c_switch_stack->blocked_stmt_expr
6891 && !c_switch_stack->blocked_vm)
6893 label = c_add_case_label (c_switch_stack->cases,
6894 SWITCH_COND (c_switch_stack->switch_expr),
6895 c_switch_stack->orig_type,
6896 low_value, high_value);
6897 if (label == error_mark_node)
6900 else if (c_switch_stack && c_switch_stack->blocked_stmt_expr)
6903 error ("case label in statement expression not containing "
6904 "enclosing switch statement");
6906 error ("%<default%> label in statement expression not containing "
6907 "enclosing switch statement");
6909 else if (c_switch_stack && c_switch_stack->blocked_vm)
6912 error ("case label in scope of identifier with variably modified "
6913 "type not containing enclosing switch statement");
6915 error ("%<default%> label in scope of identifier with variably "
6916 "modified type not containing enclosing switch statement");
6919 error ("case label not within a switch statement");
6921 error ("%<default%> label not within a switch statement");
6926 /* Finish the switch statement. */
6929 c_finish_case (tree body)
6931 struct c_switch *cs = c_switch_stack;
6932 location_t switch_location;
6934 SWITCH_BODY (cs->switch_expr) = body;
6936 /* We must not be within a statement expression nested in the switch
6937 at this point; we might, however, be within the scope of an
6938 identifier with variably modified type nested in the switch. */
6939 gcc_assert (!cs->blocked_stmt_expr);
6941 /* Emit warnings as needed. */
6942 if (EXPR_HAS_LOCATION (cs->switch_expr))
6943 switch_location = EXPR_LOCATION (cs->switch_expr);
6945 switch_location = input_location;
6946 c_do_switch_warnings (cs->cases, switch_location,
6947 TREE_TYPE (cs->switch_expr),
6948 SWITCH_COND (cs->switch_expr));
6950 /* Pop the stack. */
6951 c_switch_stack = cs->next;
6952 splay_tree_delete (cs->cases);
6956 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
6957 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
6958 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
6959 statement, and was not surrounded with parenthesis. */
6962 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
6963 tree else_block, bool nested_if)
6967 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
6968 if (warn_parentheses && nested_if && else_block == NULL)
6970 tree inner_if = then_block;
6972 /* We know from the grammar productions that there is an IF nested
6973 within THEN_BLOCK. Due to labels and c99 conditional declarations,
6974 it might not be exactly THEN_BLOCK, but should be the last
6975 non-container statement within. */
6977 switch (TREE_CODE (inner_if))
6982 inner_if = BIND_EXPR_BODY (inner_if);
6984 case STATEMENT_LIST:
6985 inner_if = expr_last (then_block);
6987 case TRY_FINALLY_EXPR:
6988 case TRY_CATCH_EXPR:
6989 inner_if = TREE_OPERAND (inner_if, 0);
6996 if (COND_EXPR_ELSE (inner_if))
6997 warning (OPT_Wparentheses,
6998 "%Hsuggest explicit braces to avoid ambiguous %<else%>",
7002 /* Diagnose ";" via the special empty statement node that we create. */
7005 if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
7008 warning (0, "%Hempty body in an if-statement",
7009 EXPR_LOCUS (then_block));
7010 then_block = alloc_stmt_list ();
7013 && TREE_CODE (else_block) == NOP_EXPR
7014 && !TREE_TYPE (else_block))
7016 warning (0, "%Hempty body in an else-statement",
7017 EXPR_LOCUS (else_block));
7018 else_block = alloc_stmt_list ();
7022 stmt = build3 (COND_EXPR, void_type_node, cond, then_block, else_block);
7023 SET_EXPR_LOCATION (stmt, if_locus);
7027 /* Emit a general-purpose loop construct. START_LOCUS is the location of
7028 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
7029 is false for DO loops. INCR is the FOR increment expression. BODY is
7030 the statement controlled by the loop. BLAB is the break label. CLAB is
7031 the continue label. Everything is allowed to be NULL. */
7034 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
7035 tree blab, tree clab, bool cond_is_first)
7037 tree entry = NULL, exit = NULL, t;
7039 /* If the condition is zero don't generate a loop construct. */
7040 if (cond && integer_zerop (cond))
7044 t = build_and_jump (&blab);
7045 SET_EXPR_LOCATION (t, start_locus);
7051 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
7053 /* If we have an exit condition, then we build an IF with gotos either
7054 out of the loop, or to the top of it. If there's no exit condition,
7055 then we just build a jump back to the top. */
7056 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
7058 if (cond && !integer_nonzerop (cond))
7060 /* Canonicalize the loop condition to the end. This means
7061 generating a branch to the loop condition. Reuse the
7062 continue label, if possible. */
7067 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
7068 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
7071 t = build1 (GOTO_EXPR, void_type_node, clab);
7072 SET_EXPR_LOCATION (t, start_locus);
7076 t = build_and_jump (&blab);
7077 exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
7080 SET_EXPR_LOCATION (exit, start_locus);
7082 SET_EXPR_LOCATION (exit, input_location);
7091 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
7099 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
7103 c_finish_bc_stmt (tree *label_p, bool is_break)
7106 tree label = *label_p;
7108 /* In switch statements break is sometimes stylistically used after
7109 a return statement. This can lead to spurious warnings about
7110 control reaching the end of a non-void function when it is
7111 inlined. Note that we are calling block_may_fallthru with
7112 language specific tree nodes; this works because
7113 block_may_fallthru returns true when given something it does not
7115 skip = !block_may_fallthru (cur_stmt_list);
7120 *label_p = label = create_artificial_label ();
7122 else if (TREE_CODE (label) != LABEL_DECL)
7125 error ("break statement not within loop or switch");
7127 error ("continue statement not within a loop");
7134 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
7137 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
7140 emit_side_effect_warnings (tree expr)
7142 if (expr == error_mark_node)
7144 else if (!TREE_SIDE_EFFECTS (expr))
7146 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
7147 warning (0, "%Hstatement with no effect",
7148 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
7150 else if (warn_unused_value)
7151 warn_if_unused_value (expr, input_location);
7154 /* Process an expression as if it were a complete statement. Emit
7155 diagnostics, but do not call ADD_STMT. */
7158 c_process_expr_stmt (tree expr)
7163 if (warn_sequence_point)
7164 verify_sequence_points (expr);
7166 if (TREE_TYPE (expr) != error_mark_node
7167 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
7168 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
7169 error ("expression statement has incomplete type");
7171 /* If we're not processing a statement expression, warn about unused values.
7172 Warnings for statement expressions will be emitted later, once we figure
7173 out which is the result. */
7174 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7175 && (extra_warnings || warn_unused_value))
7176 emit_side_effect_warnings (expr);
7178 /* If the expression is not of a type to which we cannot assign a line
7179 number, wrap the thing in a no-op NOP_EXPR. */
7180 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
7181 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
7184 SET_EXPR_LOCATION (expr, input_location);
7189 /* Emit an expression as a statement. */
7192 c_finish_expr_stmt (tree expr)
7195 return add_stmt (c_process_expr_stmt (expr));
7200 /* Do the opposite and emit a statement as an expression. To begin,
7201 create a new binding level and return it. */
7204 c_begin_stmt_expr (void)
7207 struct c_label_context_se *nstack;
7208 struct c_label_list *glist;
7210 /* We must force a BLOCK for this level so that, if it is not expanded
7211 later, there is a way to turn off the entire subtree of blocks that
7212 are contained in it. */
7214 ret = c_begin_compound_stmt (true);
7217 c_switch_stack->blocked_stmt_expr++;
7218 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7220 for (glist = label_context_stack_se->labels_used;
7222 glist = glist->next)
7224 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 1;
7226 nstack = XOBNEW (&parser_obstack, struct c_label_context_se);
7227 nstack->labels_def = NULL;
7228 nstack->labels_used = NULL;
7229 nstack->next = label_context_stack_se;
7230 label_context_stack_se = nstack;
7232 /* Mark the current statement list as belonging to a statement list. */
7233 STATEMENT_LIST_STMT_EXPR (ret) = 1;
7239 c_finish_stmt_expr (tree body)
7241 tree last, type, tmp, val;
7243 struct c_label_list *dlist, *glist, *glist_prev = NULL;
7245 body = c_end_compound_stmt (body, true);
7248 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7249 c_switch_stack->blocked_stmt_expr--;
7251 /* It is no longer possible to jump to labels defined within this
7252 statement expression. */
7253 for (dlist = label_context_stack_se->labels_def;
7255 dlist = dlist->next)
7257 C_DECL_UNJUMPABLE_STMT_EXPR (dlist->label) = 1;
7259 /* It is again possible to define labels with a goto just outside
7260 this statement expression. */
7261 for (glist = label_context_stack_se->next->labels_used;
7263 glist = glist->next)
7265 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 0;
7268 if (glist_prev != NULL)
7269 glist_prev->next = label_context_stack_se->labels_used;
7271 label_context_stack_se->next->labels_used
7272 = label_context_stack_se->labels_used;
7273 label_context_stack_se = label_context_stack_se->next;
7275 /* Locate the last statement in BODY. See c_end_compound_stmt
7276 about always returning a BIND_EXPR. */
7277 last_p = &BIND_EXPR_BODY (body);
7278 last = BIND_EXPR_BODY (body);
7281 if (TREE_CODE (last) == STATEMENT_LIST)
7283 tree_stmt_iterator i;
7285 /* This can happen with degenerate cases like ({ }). No value. */
7286 if (!TREE_SIDE_EFFECTS (last))
7289 /* If we're supposed to generate side effects warnings, process
7290 all of the statements except the last. */
7291 if (extra_warnings || warn_unused_value)
7293 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
7294 emit_side_effect_warnings (tsi_stmt (i));
7297 i = tsi_last (last);
7298 last_p = tsi_stmt_ptr (i);
7302 /* If the end of the list is exception related, then the list was split
7303 by a call to push_cleanup. Continue searching. */
7304 if (TREE_CODE (last) == TRY_FINALLY_EXPR
7305 || TREE_CODE (last) == TRY_CATCH_EXPR)
7307 last_p = &TREE_OPERAND (last, 0);
7309 goto continue_searching;
7312 /* In the case that the BIND_EXPR is not necessary, return the
7313 expression out from inside it. */
7314 if (last == error_mark_node
7315 || (last == BIND_EXPR_BODY (body)
7316 && BIND_EXPR_VARS (body) == NULL))
7319 /* Extract the type of said expression. */
7320 type = TREE_TYPE (last);
7322 /* If we're not returning a value at all, then the BIND_EXPR that
7323 we already have is a fine expression to return. */
7324 if (!type || VOID_TYPE_P (type))
7327 /* Now that we've located the expression containing the value, it seems
7328 silly to make voidify_wrapper_expr repeat the process. Create a
7329 temporary of the appropriate type and stick it in a TARGET_EXPR. */
7330 tmp = create_tmp_var_raw (type, NULL);
7332 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
7333 tree_expr_nonnegative_p giving up immediately. */
7335 if (TREE_CODE (val) == NOP_EXPR
7336 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
7337 val = TREE_OPERAND (val, 0);
7339 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
7340 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
7342 return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
7345 /* Begin the scope of an identifier of variably modified type, scope
7346 number SCOPE. Jumping from outside this scope to inside it is not
7350 c_begin_vm_scope (unsigned int scope)
7352 struct c_label_context_vm *nstack;
7353 struct c_label_list *glist;
7355 gcc_assert (scope > 0);
7356 if (c_switch_stack && !c_switch_stack->blocked_vm)
7357 c_switch_stack->blocked_vm = scope;
7358 for (glist = label_context_stack_vm->labels_used;
7360 glist = glist->next)
7362 C_DECL_UNDEFINABLE_VM (glist->label) = 1;
7364 nstack = XOBNEW (&parser_obstack, struct c_label_context_vm);
7365 nstack->labels_def = NULL;
7366 nstack->labels_used = NULL;
7367 nstack->scope = scope;
7368 nstack->next = label_context_stack_vm;
7369 label_context_stack_vm = nstack;
7372 /* End a scope which may contain identifiers of variably modified
7373 type, scope number SCOPE. */
7376 c_end_vm_scope (unsigned int scope)
7378 if (label_context_stack_vm == NULL)
7380 if (c_switch_stack && c_switch_stack->blocked_vm == scope)
7381 c_switch_stack->blocked_vm = 0;
7382 /* We may have a number of nested scopes of identifiers with
7383 variably modified type, all at this depth. Pop each in turn. */
7384 while (label_context_stack_vm->scope == scope)
7386 struct c_label_list *dlist, *glist, *glist_prev = NULL;
7388 /* It is no longer possible to jump to labels defined within this
7390 for (dlist = label_context_stack_vm->labels_def;
7392 dlist = dlist->next)
7394 C_DECL_UNJUMPABLE_VM (dlist->label) = 1;
7396 /* It is again possible to define labels with a goto just outside
7398 for (glist = label_context_stack_vm->next->labels_used;
7400 glist = glist->next)
7402 C_DECL_UNDEFINABLE_VM (glist->label) = 0;
7405 if (glist_prev != NULL)
7406 glist_prev->next = label_context_stack_vm->labels_used;
7408 label_context_stack_vm->next->labels_used
7409 = label_context_stack_vm->labels_used;
7410 label_context_stack_vm = label_context_stack_vm->next;
7414 /* Begin and end compound statements. This is as simple as pushing
7415 and popping new statement lists from the tree. */
7418 c_begin_compound_stmt (bool do_scope)
7420 tree stmt = push_stmt_list ();
7427 c_end_compound_stmt (tree stmt, bool do_scope)
7433 if (c_dialect_objc ())
7434 objc_clear_super_receiver ();
7435 block = pop_scope ();
7438 stmt = pop_stmt_list (stmt);
7439 stmt = c_build_bind_expr (block, stmt);
7441 /* If this compound statement is nested immediately inside a statement
7442 expression, then force a BIND_EXPR to be created. Otherwise we'll
7443 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
7444 STATEMENT_LISTs merge, and thus we can lose track of what statement
7447 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7448 && TREE_CODE (stmt) != BIND_EXPR)
7450 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
7451 TREE_SIDE_EFFECTS (stmt) = 1;
7457 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
7458 when the current scope is exited. EH_ONLY is true when this is not
7459 meant to apply to normal control flow transfer. */
7462 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
7464 enum tree_code code;
7468 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
7469 stmt = build_stmt (code, NULL, cleanup);
7471 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
7472 list = push_stmt_list ();
7473 TREE_OPERAND (stmt, 0) = list;
7474 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
7477 /* Build a binary-operation expression without default conversions.
7478 CODE is the kind of expression to build.
7479 This function differs from `build' in several ways:
7480 the data type of the result is computed and recorded in it,
7481 warnings are generated if arg data types are invalid,
7482 special handling for addition and subtraction of pointers is known,
7483 and some optimization is done (operations on narrow ints
7484 are done in the narrower type when that gives the same result).
7485 Constant folding is also done before the result is returned.
7487 Note that the operands will never have enumeral types, or function
7488 or array types, because either they will have the default conversions
7489 performed or they have both just been converted to some other type in which
7490 the arithmetic is to be done. */
7493 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
7497 enum tree_code code0, code1;
7499 const char *invalid_op_diag;
7501 /* Expression code to give to the expression when it is built.
7502 Normally this is CODE, which is what the caller asked for,
7503 but in some special cases we change it. */
7504 enum tree_code resultcode = code;
7506 /* Data type in which the computation is to be performed.
7507 In the simplest cases this is the common type of the arguments. */
7508 tree result_type = NULL;
7510 /* Nonzero means operands have already been type-converted
7511 in whatever way is necessary.
7512 Zero means they need to be converted to RESULT_TYPE. */
7515 /* Nonzero means create the expression with this type, rather than
7517 tree build_type = 0;
7519 /* Nonzero means after finally constructing the expression
7520 convert it to this type. */
7521 tree final_type = 0;
7523 /* Nonzero if this is an operation like MIN or MAX which can
7524 safely be computed in short if both args are promoted shorts.
7525 Also implies COMMON.
7526 -1 indicates a bitwise operation; this makes a difference
7527 in the exact conditions for when it is safe to do the operation
7528 in a narrower mode. */
7531 /* Nonzero if this is a comparison operation;
7532 if both args are promoted shorts, compare the original shorts.
7533 Also implies COMMON. */
7534 int short_compare = 0;
7536 /* Nonzero if this is a right-shift operation, which can be computed on the
7537 original short and then promoted if the operand is a promoted short. */
7538 int short_shift = 0;
7540 /* Nonzero means set RESULT_TYPE to the common type of the args. */
7543 /* True means types are compatible as far as ObjC is concerned. */
7548 op0 = default_conversion (orig_op0);
7549 op1 = default_conversion (orig_op1);
7557 type0 = TREE_TYPE (op0);
7558 type1 = TREE_TYPE (op1);
7560 /* The expression codes of the data types of the arguments tell us
7561 whether the arguments are integers, floating, pointers, etc. */
7562 code0 = TREE_CODE (type0);
7563 code1 = TREE_CODE (type1);
7565 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
7566 STRIP_TYPE_NOPS (op0);
7567 STRIP_TYPE_NOPS (op1);
7569 /* If an error was already reported for one of the arguments,
7570 avoid reporting another error. */
7572 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7573 return error_mark_node;
7575 if ((invalid_op_diag
7576 = targetm.invalid_binary_op (code, type0, type1)))
7578 error (invalid_op_diag);
7579 return error_mark_node;
7582 objc_ok = objc_compare_types (type0, type1, -3, NULL_TREE);
7587 /* Handle the pointer + int case. */
7588 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7589 return pointer_int_sum (PLUS_EXPR, op0, op1);
7590 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7591 return pointer_int_sum (PLUS_EXPR, op1, op0);
7597 /* Subtraction of two similar pointers.
7598 We must subtract them as integers, then divide by object size. */
7599 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7600 && comp_target_types (type0, type1))
7601 return pointer_diff (op0, op1);
7602 /* Handle pointer minus int. Just like pointer plus int. */
7603 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7604 return pointer_int_sum (MINUS_EXPR, op0, op1);
7613 case TRUNC_DIV_EXPR:
7615 case FLOOR_DIV_EXPR:
7616 case ROUND_DIV_EXPR:
7617 case EXACT_DIV_EXPR:
7618 /* Floating point division by zero is a legitimate way to obtain
7619 infinities and NaNs. */
7620 if (skip_evaluation == 0 && integer_zerop (op1))
7621 warning (OPT_Wdiv_by_zero, "division by zero");
7623 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7624 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7625 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7626 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7628 enum tree_code tcode0 = code0, tcode1 = code1;
7630 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7631 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
7632 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
7633 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
7635 if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
7636 resultcode = RDIV_EXPR;
7638 /* Although it would be tempting to shorten always here, that
7639 loses on some targets, since the modulo instruction is
7640 undefined if the quotient can't be represented in the
7641 computation mode. We shorten only if unsigned or if
7642 dividing by something we know != -1. */
7643 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7644 || (TREE_CODE (op1) == INTEGER_CST
7645 && !integer_all_onesp (op1)));
7653 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7655 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
7659 case TRUNC_MOD_EXPR:
7660 case FLOOR_MOD_EXPR:
7661 if (skip_evaluation == 0 && integer_zerop (op1))
7662 warning (OPT_Wdiv_by_zero, "division by zero");
7664 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7666 /* Although it would be tempting to shorten always here, that loses
7667 on some targets, since the modulo instruction is undefined if the
7668 quotient can't be represented in the computation mode. We shorten
7669 only if unsigned or if dividing by something we know != -1. */
7670 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7671 || (TREE_CODE (op1) == INTEGER_CST
7672 && !integer_all_onesp (op1)));
7677 case TRUTH_ANDIF_EXPR:
7678 case TRUTH_ORIF_EXPR:
7679 case TRUTH_AND_EXPR:
7681 case TRUTH_XOR_EXPR:
7682 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
7683 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
7684 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
7685 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
7687 /* Result of these operations is always an int,
7688 but that does not mean the operands should be
7689 converted to ints! */
7690 result_type = integer_type_node;
7691 op0 = c_common_truthvalue_conversion (op0);
7692 op1 = c_common_truthvalue_conversion (op1);
7697 /* Shift operations: result has same type as first operand;
7698 always convert second operand to int.
7699 Also set SHORT_SHIFT if shifting rightward. */
7702 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7704 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7706 if (tree_int_cst_sgn (op1) < 0)
7707 warning (0, "right shift count is negative");
7710 if (!integer_zerop (op1))
7713 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7714 warning (0, "right shift count >= width of type");
7718 /* Use the type of the value to be shifted. */
7719 result_type = type0;
7720 /* Convert the shift-count to an integer, regardless of size
7721 of value being shifted. */
7722 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7723 op1 = convert (integer_type_node, op1);
7724 /* Avoid converting op1 to result_type later. */
7730 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7732 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7734 if (tree_int_cst_sgn (op1) < 0)
7735 warning (0, "left shift count is negative");
7737 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7738 warning (0, "left shift count >= width of type");
7741 /* Use the type of the value to be shifted. */
7742 result_type = type0;
7743 /* Convert the shift-count to an integer, regardless of size
7744 of value being shifted. */
7745 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7746 op1 = convert (integer_type_node, op1);
7747 /* Avoid converting op1 to result_type later. */
7754 if (code0 == REAL_TYPE || code1 == REAL_TYPE)
7755 warning (OPT_Wfloat_equal,
7756 "comparing floating point with == or != is unsafe");
7757 /* Result of comparison is always int,
7758 but don't convert the args to int! */
7759 build_type = integer_type_node;
7760 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7761 || code0 == COMPLEX_TYPE)
7762 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7763 || code1 == COMPLEX_TYPE))
7765 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7767 tree tt0 = TREE_TYPE (type0);
7768 tree tt1 = TREE_TYPE (type1);
7769 /* Anything compares with void *. void * compares with anything.
7770 Otherwise, the targets must be compatible
7771 and both must be object or both incomplete. */
7772 if (comp_target_types (type0, type1))
7773 result_type = common_pointer_type (type0, type1);
7774 else if (VOID_TYPE_P (tt0))
7776 /* op0 != orig_op0 detects the case of something
7777 whose value is 0 but which isn't a valid null ptr const. */
7778 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
7779 && TREE_CODE (tt1) == FUNCTION_TYPE)
7780 pedwarn ("ISO C forbids comparison of %<void *%>"
7781 " with function pointer");
7783 else if (VOID_TYPE_P (tt1))
7785 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
7786 && TREE_CODE (tt0) == FUNCTION_TYPE)
7787 pedwarn ("ISO C forbids comparison of %<void *%>"
7788 " with function pointer");
7791 /* Avoid warning about the volatile ObjC EH puts on decls. */
7793 pedwarn ("comparison of distinct pointer types lacks a cast");
7795 if (result_type == NULL_TREE)
7796 result_type = ptr_type_node;
7798 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7799 && integer_zerop (op1))
7800 result_type = type0;
7801 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7802 && integer_zerop (op0))
7803 result_type = type1;
7804 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7806 result_type = type0;
7807 pedwarn ("comparison between pointer and integer");
7809 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7811 result_type = type1;
7812 pedwarn ("comparison between pointer and integer");
7820 build_type = integer_type_node;
7821 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7822 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7824 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7826 if (comp_target_types (type0, type1))
7828 result_type = common_pointer_type (type0, type1);
7829 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
7830 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
7831 pedwarn ("comparison of complete and incomplete pointers");
7833 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7834 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7838 result_type = ptr_type_node;
7839 pedwarn ("comparison of distinct pointer types lacks a cast");
7842 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7843 && integer_zerop (op1))
7845 result_type = type0;
7846 if (pedantic || extra_warnings)
7847 pedwarn ("ordered comparison of pointer with integer zero");
7849 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7850 && integer_zerop (op0))
7852 result_type = type1;
7854 pedwarn ("ordered comparison of pointer with integer zero");
7856 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7858 result_type = type0;
7859 pedwarn ("comparison between pointer and integer");
7861 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7863 result_type = type1;
7864 pedwarn ("comparison between pointer and integer");
7872 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7873 return error_mark_node;
7875 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
7876 && (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
7877 || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
7878 TREE_TYPE (type1))))
7880 binary_op_error (code);
7881 return error_mark_node;
7884 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
7885 || code0 == VECTOR_TYPE)
7887 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
7888 || code1 == VECTOR_TYPE))
7890 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
7892 if (shorten || common || short_compare)
7893 result_type = c_common_type (type0, type1);
7895 /* For certain operations (which identify themselves by shorten != 0)
7896 if both args were extended from the same smaller type,
7897 do the arithmetic in that type and then extend.
7899 shorten !=0 and !=1 indicates a bitwise operation.
7900 For them, this optimization is safe only if
7901 both args are zero-extended or both are sign-extended.
7902 Otherwise, we might change the result.
7903 Eg, (short)-1 | (unsigned short)-1 is (int)-1
7904 but calculated in (unsigned short) it would be (unsigned short)-1. */
7906 if (shorten && none_complex)
7908 int unsigned0, unsigned1;
7909 tree arg0 = get_narrower (op0, &unsigned0);
7910 tree arg1 = get_narrower (op1, &unsigned1);
7911 /* UNS is 1 if the operation to be done is an unsigned one. */
7912 int uns = TYPE_UNSIGNED (result_type);
7915 final_type = result_type;
7917 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
7918 but it *requires* conversion to FINAL_TYPE. */
7920 if ((TYPE_PRECISION (TREE_TYPE (op0))
7921 == TYPE_PRECISION (TREE_TYPE (arg0)))
7922 && TREE_TYPE (op0) != final_type)
7923 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
7924 if ((TYPE_PRECISION (TREE_TYPE (op1))
7925 == TYPE_PRECISION (TREE_TYPE (arg1)))
7926 && TREE_TYPE (op1) != final_type)
7927 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
7929 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
7931 /* For bitwise operations, signedness of nominal type
7932 does not matter. Consider only how operands were extended. */
7936 /* Note that in all three cases below we refrain from optimizing
7937 an unsigned operation on sign-extended args.
7938 That would not be valid. */
7940 /* Both args variable: if both extended in same way
7941 from same width, do it in that width.
7942 Do it unsigned if args were zero-extended. */
7943 if ((TYPE_PRECISION (TREE_TYPE (arg0))
7944 < TYPE_PRECISION (result_type))
7945 && (TYPE_PRECISION (TREE_TYPE (arg1))
7946 == TYPE_PRECISION (TREE_TYPE (arg0)))
7947 && unsigned0 == unsigned1
7948 && (unsigned0 || !uns))
7950 = c_common_signed_or_unsigned_type
7951 (unsigned0, c_common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
7952 else if (TREE_CODE (arg0) == INTEGER_CST
7953 && (unsigned1 || !uns)
7954 && (TYPE_PRECISION (TREE_TYPE (arg1))
7955 < TYPE_PRECISION (result_type))
7957 = c_common_signed_or_unsigned_type (unsigned1,
7959 int_fits_type_p (arg0, type)))
7961 else if (TREE_CODE (arg1) == INTEGER_CST
7962 && (unsigned0 || !uns)
7963 && (TYPE_PRECISION (TREE_TYPE (arg0))
7964 < TYPE_PRECISION (result_type))
7966 = c_common_signed_or_unsigned_type (unsigned0,
7968 int_fits_type_p (arg1, type)))
7972 /* Shifts can be shortened if shifting right. */
7977 tree arg0 = get_narrower (op0, &unsigned_arg);
7979 final_type = result_type;
7981 if (arg0 == op0 && final_type == TREE_TYPE (op0))
7982 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
7984 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7985 /* We can shorten only if the shift count is less than the
7986 number of bits in the smaller type size. */
7987 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7988 /* We cannot drop an unsigned shift after sign-extension. */
7989 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
7991 /* Do an unsigned shift if the operand was zero-extended. */
7993 = c_common_signed_or_unsigned_type (unsigned_arg,
7995 /* Convert value-to-be-shifted to that type. */
7996 if (TREE_TYPE (op0) != result_type)
7997 op0 = convert (result_type, op0);
8002 /* Comparison operations are shortened too but differently.
8003 They identify themselves by setting short_compare = 1. */
8007 /* Don't write &op0, etc., because that would prevent op0
8008 from being kept in a register.
8009 Instead, make copies of the our local variables and
8010 pass the copies by reference, then copy them back afterward. */
8011 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
8012 enum tree_code xresultcode = resultcode;
8014 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
8019 op0 = xop0, op1 = xop1;
8021 resultcode = xresultcode;
8023 if (warn_sign_compare && skip_evaluation == 0)
8025 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
8026 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
8027 int unsignedp0, unsignedp1;
8028 tree primop0 = get_narrower (op0, &unsignedp0);
8029 tree primop1 = get_narrower (op1, &unsignedp1);
8033 STRIP_TYPE_NOPS (xop0);
8034 STRIP_TYPE_NOPS (xop1);
8036 /* Give warnings for comparisons between signed and unsigned
8037 quantities that may fail.
8039 Do the checking based on the original operand trees, so that
8040 casts will be considered, but default promotions won't be.
8042 Do not warn if the comparison is being done in a signed type,
8043 since the signed type will only be chosen if it can represent
8044 all the values of the unsigned type. */
8045 if (!TYPE_UNSIGNED (result_type))
8047 /* Do not warn if both operands are the same signedness. */
8048 else if (op0_signed == op1_signed)
8055 sop = xop0, uop = xop1;
8057 sop = xop1, uop = xop0;
8059 /* Do not warn if the signed quantity is an
8060 unsuffixed integer literal (or some static
8061 constant expression involving such literals or a
8062 conditional expression involving such literals)
8063 and it is non-negative. */
8064 if (tree_expr_nonnegative_p (sop))
8066 /* Do not warn if the comparison is an equality operation,
8067 the unsigned quantity is an integral constant, and it
8068 would fit in the result if the result were signed. */
8069 else if (TREE_CODE (uop) == INTEGER_CST
8070 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
8072 (uop, c_common_signed_type (result_type)))
8074 /* Do not warn if the unsigned quantity is an enumeration
8075 constant and its maximum value would fit in the result
8076 if the result were signed. */
8077 else if (TREE_CODE (uop) == INTEGER_CST
8078 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
8080 (TYPE_MAX_VALUE (TREE_TYPE (uop)),
8081 c_common_signed_type (result_type)))
8084 warning (0, "comparison between signed and unsigned");
8087 /* Warn if two unsigned values are being compared in a size
8088 larger than their original size, and one (and only one) is the
8089 result of a `~' operator. This comparison will always fail.
8091 Also warn if one operand is a constant, and the constant
8092 does not have all bits set that are set in the ~ operand
8093 when it is extended. */
8095 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
8096 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
8098 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
8099 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
8102 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
8105 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
8108 HOST_WIDE_INT constant, mask;
8109 int unsignedp, bits;
8111 if (host_integerp (primop0, 0))
8114 unsignedp = unsignedp1;
8115 constant = tree_low_cst (primop0, 0);
8120 unsignedp = unsignedp0;
8121 constant = tree_low_cst (primop1, 0);
8124 bits = TYPE_PRECISION (TREE_TYPE (primop));
8125 if (bits < TYPE_PRECISION (result_type)
8126 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
8128 mask = (~(HOST_WIDE_INT) 0) << bits;
8129 if ((mask & constant) != mask)
8130 warning (0, "comparison of promoted ~unsigned with constant");
8133 else if (unsignedp0 && unsignedp1
8134 && (TYPE_PRECISION (TREE_TYPE (primop0))
8135 < TYPE_PRECISION (result_type))
8136 && (TYPE_PRECISION (TREE_TYPE (primop1))
8137 < TYPE_PRECISION (result_type)))
8138 warning (0, "comparison of promoted ~unsigned with unsigned");
8144 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
8145 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
8146 Then the expression will be built.
8147 It will be given type FINAL_TYPE if that is nonzero;
8148 otherwise, it will be given type RESULT_TYPE. */
8152 binary_op_error (code);
8153 return error_mark_node;
8158 if (TREE_TYPE (op0) != result_type)
8159 op0 = convert (result_type, op0);
8160 if (TREE_TYPE (op1) != result_type)
8161 op1 = convert (result_type, op1);
8163 /* This can happen if one operand has a vector type, and the other
8164 has a different type. */
8165 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
8166 return error_mark_node;
8169 if (build_type == NULL_TREE)
8170 build_type = result_type;
8173 tree result = build2 (resultcode, build_type, op0, op1);
8175 /* Treat expressions in initializers specially as they can't trap. */
8176 result = require_constant_value ? fold_initializer (result)
8179 if (final_type != 0)
8180 result = convert (final_type, result);
8186 /* Convert EXPR to be a truth-value, validating its type for this
8190 c_objc_common_truthvalue_conversion (tree expr)
8192 switch (TREE_CODE (TREE_TYPE (expr)))
8195 error ("used array that cannot be converted to pointer where scalar is required");
8196 return error_mark_node;
8199 error ("used struct type value where scalar is required");
8200 return error_mark_node;
8203 error ("used union type value where scalar is required");
8204 return error_mark_node;
8213 /* ??? Should we also give an error for void and vectors rather than
8214 leaving those to give errors later? */
8215 return c_common_truthvalue_conversion (expr);
8219 /* Convert EXPR to a contained DECL, updating *TC, *TI and *SE as
8223 c_expr_to_decl (tree expr, bool *tc ATTRIBUTE_UNUSED,
8224 bool *ti ATTRIBUTE_UNUSED, bool *se)
8226 if (TREE_CODE (expr) == COMPOUND_LITERAL_EXPR)
8228 tree decl = COMPOUND_LITERAL_EXPR_DECL (expr);
8229 /* Executing a compound literal inside a function reinitializes
8231 if (!TREE_STATIC (decl))