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, 2006, 2007, 2008, 2009
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
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"
46 #include "tree-flow.h"
48 /* Possible cases of implicit bad conversions. Used to select
49 diagnostic messages in convert_for_assignment. */
57 /* Whether we are building a boolean conversion inside
58 convert_for_assignment, or some other late binary operation. If
59 build_binary_op is called (from code shared with C++) in this case,
60 then the operands have already been folded and the result will not
61 be folded again, so C_MAYBE_CONST_EXPR should not be generated. */
62 bool in_late_binary_op;
64 /* The level of nesting inside "__alignof__". */
67 /* The level of nesting inside "sizeof". */
70 /* The level of nesting inside "typeof". */
73 struct c_label_context_se *label_context_stack_se;
74 struct c_label_context_vm *label_context_stack_vm;
76 /* Nonzero if we've already printed a "missing braces around initializer"
77 message within this initializer. */
78 static int missing_braces_mentioned;
80 static int require_constant_value;
81 static int require_constant_elements;
83 static bool null_pointer_constant_p (const_tree);
84 static tree qualify_type (tree, tree);
85 static int tagged_types_tu_compatible_p (const_tree, const_tree, bool *);
86 static int comp_target_types (location_t, tree, tree);
87 static int function_types_compatible_p (const_tree, const_tree, bool *);
88 static int type_lists_compatible_p (const_tree, const_tree, bool *);
89 static tree lookup_field (tree, tree);
90 static int convert_arguments (tree, VEC(tree,gc) *, VEC(tree,gc) *, tree,
92 static tree pointer_diff (tree, tree);
93 static tree convert_for_assignment (location_t, tree, tree, tree,
94 enum impl_conv, bool, tree, tree, int);
95 static tree valid_compound_expr_initializer (tree, tree);
96 static void push_string (const char *);
97 static void push_member_name (tree);
98 static int spelling_length (void);
99 static char *print_spelling (char *);
100 static void warning_init (int, const char *);
101 static tree digest_init (location_t, tree, tree, tree, bool, bool, int);
102 static void output_init_element (tree, tree, bool, tree, tree, int, bool);
103 static void output_pending_init_elements (int);
104 static int set_designator (int);
105 static void push_range_stack (tree);
106 static void add_pending_init (tree, tree, tree, bool);
107 static void set_nonincremental_init (void);
108 static void set_nonincremental_init_from_string (tree);
109 static tree find_init_member (tree);
110 static void readonly_error (tree, enum lvalue_use);
111 static void readonly_warning (tree, enum lvalue_use);
112 static int lvalue_or_else (const_tree, enum lvalue_use);
113 static void record_maybe_used_decl (tree);
114 static int comptypes_internal (const_tree, const_tree, bool *);
116 /* Return true if EXP is a null pointer constant, false otherwise. */
119 null_pointer_constant_p (const_tree expr)
121 /* This should really operate on c_expr structures, but they aren't
122 yet available everywhere required. */
123 tree type = TREE_TYPE (expr);
124 return (TREE_CODE (expr) == INTEGER_CST
125 && !TREE_OVERFLOW (expr)
126 && integer_zerop (expr)
127 && (INTEGRAL_TYPE_P (type)
128 || (TREE_CODE (type) == POINTER_TYPE
129 && VOID_TYPE_P (TREE_TYPE (type))
130 && TYPE_QUALS (TREE_TYPE (type)) == TYPE_UNQUALIFIED)));
133 /* EXPR may appear in an unevaluated part of an integer constant
134 expression, but not in an evaluated part. Wrap it in a
135 C_MAYBE_CONST_EXPR, or mark it with TREE_OVERFLOW if it is just an
136 INTEGER_CST and we cannot create a C_MAYBE_CONST_EXPR. */
139 note_integer_operands (tree expr)
142 if (TREE_CODE (expr) == INTEGER_CST && in_late_binary_op)
144 ret = copy_node (expr);
145 TREE_OVERFLOW (ret) = 1;
149 ret = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (expr), NULL_TREE, expr);
150 C_MAYBE_CONST_EXPR_INT_OPERANDS (ret) = 1;
155 /* Having checked whether EXPR may appear in an unevaluated part of an
156 integer constant expression and found that it may, remove any
157 C_MAYBE_CONST_EXPR noting this fact and return the resulting
161 remove_c_maybe_const_expr (tree expr)
163 if (TREE_CODE (expr) == C_MAYBE_CONST_EXPR)
164 return C_MAYBE_CONST_EXPR_EXPR (expr);
169 \f/* This is a cache to hold if two types are compatible or not. */
171 struct tagged_tu_seen_cache {
172 const struct tagged_tu_seen_cache * next;
175 /* The return value of tagged_types_tu_compatible_p if we had seen
176 these two types already. */
180 static const struct tagged_tu_seen_cache * tagged_tu_seen_base;
181 static void free_all_tagged_tu_seen_up_to (const struct tagged_tu_seen_cache *);
183 /* Do `exp = require_complete_type (exp);' to make sure exp
184 does not have an incomplete type. (That includes void types.) */
187 require_complete_type (tree value)
189 tree type = TREE_TYPE (value);
191 if (value == error_mark_node || type == error_mark_node)
192 return error_mark_node;
194 /* First, detect a valid value with a complete type. */
195 if (COMPLETE_TYPE_P (type))
198 c_incomplete_type_error (value, type);
199 return error_mark_node;
202 /* Print an error message for invalid use of an incomplete type.
203 VALUE is the expression that was used (or 0 if that isn't known)
204 and TYPE is the type that was invalid. */
207 c_incomplete_type_error (const_tree value, const_tree type)
209 const char *type_code_string;
211 /* Avoid duplicate error message. */
212 if (TREE_CODE (type) == ERROR_MARK)
215 if (value != 0 && (TREE_CODE (value) == VAR_DECL
216 || TREE_CODE (value) == PARM_DECL))
217 error ("%qD has an incomplete type", value);
221 /* We must print an error message. Be clever about what it says. */
223 switch (TREE_CODE (type))
226 type_code_string = "struct";
230 type_code_string = "union";
234 type_code_string = "enum";
238 error ("invalid use of void expression");
242 if (TYPE_DOMAIN (type))
244 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
246 error ("invalid use of flexible array member");
249 type = TREE_TYPE (type);
252 error ("invalid use of array with unspecified bounds");
259 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
260 error ("invalid use of undefined type %<%s %E%>",
261 type_code_string, TYPE_NAME (type));
263 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
264 error ("invalid use of incomplete typedef %qD", TYPE_NAME (type));
268 /* Given a type, apply default promotions wrt unnamed function
269 arguments and return the new type. */
272 c_type_promotes_to (tree type)
274 if (TYPE_MAIN_VARIANT (type) == float_type_node)
275 return double_type_node;
277 if (c_promoting_integer_type_p (type))
279 /* Preserve unsignedness if not really getting any wider. */
280 if (TYPE_UNSIGNED (type)
281 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
282 return unsigned_type_node;
283 return integer_type_node;
289 /* Return a variant of TYPE which has all the type qualifiers of LIKE
290 as well as those of TYPE. */
293 qualify_type (tree type, tree like)
295 return c_build_qualified_type (type,
296 TYPE_QUALS (type) | TYPE_QUALS (like));
299 /* Return true iff the given tree T is a variable length array. */
302 c_vla_type_p (const_tree t)
304 if (TREE_CODE (t) == ARRAY_TYPE
305 && C_TYPE_VARIABLE_SIZE (t))
310 /* Return the composite type of two compatible types.
312 We assume that comptypes has already been done and returned
313 nonzero; if that isn't so, this may crash. In particular, we
314 assume that qualifiers match. */
317 composite_type (tree t1, tree t2)
319 enum tree_code code1;
320 enum tree_code code2;
323 /* Save time if the two types are the same. */
325 if (t1 == t2) return t1;
327 /* If one type is nonsense, use the other. */
328 if (t1 == error_mark_node)
330 if (t2 == error_mark_node)
333 code1 = TREE_CODE (t1);
334 code2 = TREE_CODE (t2);
336 /* Merge the attributes. */
337 attributes = targetm.merge_type_attributes (t1, t2);
339 /* If one is an enumerated type and the other is the compatible
340 integer type, the composite type might be either of the two
341 (DR#013 question 3). For consistency, use the enumerated type as
342 the composite type. */
344 if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
346 if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
349 gcc_assert (code1 == code2);
354 /* For two pointers, do this recursively on the target type. */
356 tree pointed_to_1 = TREE_TYPE (t1);
357 tree pointed_to_2 = TREE_TYPE (t2);
358 tree target = composite_type (pointed_to_1, pointed_to_2);
359 t1 = build_pointer_type (target);
360 t1 = build_type_attribute_variant (t1, attributes);
361 return qualify_type (t1, t2);
366 tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
369 tree d1 = TYPE_DOMAIN (t1);
370 tree d2 = TYPE_DOMAIN (t2);
371 bool d1_variable, d2_variable;
372 bool d1_zero, d2_zero;
373 bool t1_complete, t2_complete;
375 /* We should not have any type quals on arrays at all. */
376 gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
378 t1_complete = COMPLETE_TYPE_P (t1);
379 t2_complete = COMPLETE_TYPE_P (t2);
381 d1_zero = d1 == 0 || !TYPE_MAX_VALUE (d1);
382 d2_zero = d2 == 0 || !TYPE_MAX_VALUE (d2);
384 d1_variable = (!d1_zero
385 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
386 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
387 d2_variable = (!d2_zero
388 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
389 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
390 d1_variable = d1_variable || (d1_zero && c_vla_type_p (t1));
391 d2_variable = d2_variable || (d2_zero && c_vla_type_p (t2));
393 /* Save space: see if the result is identical to one of the args. */
394 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1)
395 && (d2_variable || d2_zero || !d1_variable))
396 return build_type_attribute_variant (t1, attributes);
397 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2)
398 && (d1_variable || d1_zero || !d2_variable))
399 return build_type_attribute_variant (t2, attributes);
401 if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
402 return build_type_attribute_variant (t1, attributes);
403 if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
404 return build_type_attribute_variant (t2, attributes);
406 /* Merge the element types, and have a size if either arg has
407 one. We may have qualifiers on the element types. To set
408 up TYPE_MAIN_VARIANT correctly, we need to form the
409 composite of the unqualified types and add the qualifiers
411 quals = TYPE_QUALS (strip_array_types (elt));
412 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
413 t1 = build_array_type (unqual_elt,
414 TYPE_DOMAIN ((TYPE_DOMAIN (t1)
420 /* Ensure a composite type involving a zero-length array type
421 is a zero-length type not an incomplete type. */
422 if (d1_zero && d2_zero
423 && (t1_complete || t2_complete)
424 && !COMPLETE_TYPE_P (t1))
426 TYPE_SIZE (t1) = bitsize_zero_node;
427 TYPE_SIZE_UNIT (t1) = size_zero_node;
429 t1 = c_build_qualified_type (t1, quals);
430 return build_type_attribute_variant (t1, attributes);
436 if (attributes != NULL)
438 /* Try harder not to create a new aggregate type. */
439 if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
441 if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
444 return build_type_attribute_variant (t1, attributes);
447 /* Function types: prefer the one that specified arg types.
448 If both do, merge the arg types. Also merge the return types. */
450 tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
451 tree p1 = TYPE_ARG_TYPES (t1);
452 tree p2 = TYPE_ARG_TYPES (t2);
457 /* Save space: see if the result is identical to one of the args. */
458 if (valtype == TREE_TYPE (t1) && !TYPE_ARG_TYPES (t2))
459 return build_type_attribute_variant (t1, attributes);
460 if (valtype == TREE_TYPE (t2) && !TYPE_ARG_TYPES (t1))
461 return build_type_attribute_variant (t2, attributes);
463 /* Simple way if one arg fails to specify argument types. */
464 if (TYPE_ARG_TYPES (t1) == 0)
466 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
467 t1 = build_type_attribute_variant (t1, attributes);
468 return qualify_type (t1, t2);
470 if (TYPE_ARG_TYPES (t2) == 0)
472 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
473 t1 = build_type_attribute_variant (t1, attributes);
474 return qualify_type (t1, t2);
477 /* If both args specify argument types, we must merge the two
478 lists, argument by argument. */
479 /* Tell global_bindings_p to return false so that variable_size
480 doesn't die on VLAs in parameter types. */
481 c_override_global_bindings_to_false = true;
483 len = list_length (p1);
486 for (i = 0; i < len; i++)
487 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
492 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
494 /* A null type means arg type is not specified.
495 Take whatever the other function type has. */
496 if (TREE_VALUE (p1) == 0)
498 TREE_VALUE (n) = TREE_VALUE (p2);
501 if (TREE_VALUE (p2) == 0)
503 TREE_VALUE (n) = TREE_VALUE (p1);
507 /* Given wait (union {union wait *u; int *i} *)
508 and wait (union wait *),
509 prefer union wait * as type of parm. */
510 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
511 && TREE_VALUE (p1) != TREE_VALUE (p2))
514 tree mv2 = TREE_VALUE (p2);
515 if (mv2 && mv2 != error_mark_node
516 && TREE_CODE (mv2) != ARRAY_TYPE)
517 mv2 = TYPE_MAIN_VARIANT (mv2);
518 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
519 memb; memb = TREE_CHAIN (memb))
521 tree mv3 = TREE_TYPE (memb);
522 if (mv3 && mv3 != error_mark_node
523 && TREE_CODE (mv3) != ARRAY_TYPE)
524 mv3 = TYPE_MAIN_VARIANT (mv3);
525 if (comptypes (mv3, mv2))
527 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
529 pedwarn (input_location, OPT_pedantic,
530 "function types not truly compatible in ISO C");
535 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
536 && TREE_VALUE (p2) != TREE_VALUE (p1))
539 tree mv1 = TREE_VALUE (p1);
540 if (mv1 && mv1 != error_mark_node
541 && TREE_CODE (mv1) != ARRAY_TYPE)
542 mv1 = TYPE_MAIN_VARIANT (mv1);
543 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
544 memb; memb = TREE_CHAIN (memb))
546 tree mv3 = TREE_TYPE (memb);
547 if (mv3 && mv3 != error_mark_node
548 && TREE_CODE (mv3) != ARRAY_TYPE)
549 mv3 = TYPE_MAIN_VARIANT (mv3);
550 if (comptypes (mv3, mv1))
552 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
554 pedwarn (input_location, OPT_pedantic,
555 "function types not truly compatible in ISO C");
560 TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
564 c_override_global_bindings_to_false = false;
565 t1 = build_function_type (valtype, newargs);
566 t1 = qualify_type (t1, t2);
567 /* ... falls through ... */
571 return build_type_attribute_variant (t1, attributes);
576 /* Return the type of a conditional expression between pointers to
577 possibly differently qualified versions of compatible types.
579 We assume that comp_target_types has already been done and returned
580 nonzero; if that isn't so, this may crash. */
583 common_pointer_type (tree t1, tree t2)
586 tree pointed_to_1, mv1;
587 tree pointed_to_2, mv2;
589 unsigned target_quals;
591 /* Save time if the two types are the same. */
593 if (t1 == t2) return t1;
595 /* If one type is nonsense, use the other. */
596 if (t1 == error_mark_node)
598 if (t2 == error_mark_node)
601 gcc_assert (TREE_CODE (t1) == POINTER_TYPE
602 && TREE_CODE (t2) == POINTER_TYPE);
604 /* Merge the attributes. */
605 attributes = targetm.merge_type_attributes (t1, t2);
607 /* Find the composite type of the target types, and combine the
608 qualifiers of the two types' targets. Do not lose qualifiers on
609 array element types by taking the TYPE_MAIN_VARIANT. */
610 mv1 = pointed_to_1 = TREE_TYPE (t1);
611 mv2 = pointed_to_2 = TREE_TYPE (t2);
612 if (TREE_CODE (mv1) != ARRAY_TYPE)
613 mv1 = TYPE_MAIN_VARIANT (pointed_to_1);
614 if (TREE_CODE (mv2) != ARRAY_TYPE)
615 mv2 = TYPE_MAIN_VARIANT (pointed_to_2);
616 target = composite_type (mv1, mv2);
618 /* For function types do not merge const qualifiers, but drop them
619 if used inconsistently. The middle-end uses these to mark const
620 and noreturn functions. */
621 if (TREE_CODE (pointed_to_1) == FUNCTION_TYPE)
622 target_quals = TYPE_QUALS (pointed_to_1) & TYPE_QUALS (pointed_to_2);
624 target_quals = TYPE_QUALS (pointed_to_1) | TYPE_QUALS (pointed_to_2);
625 t1 = build_pointer_type (c_build_qualified_type (target, target_quals));
626 return build_type_attribute_variant (t1, attributes);
629 /* Return the common type for two arithmetic types under the usual
630 arithmetic conversions. The default conversions have already been
631 applied, and enumerated types converted to their compatible integer
632 types. The resulting type is unqualified and has no attributes.
634 This is the type for the result of most arithmetic operations
635 if the operands have the given two types. */
638 c_common_type (tree t1, tree t2)
640 enum tree_code code1;
641 enum tree_code code2;
643 /* If one type is nonsense, use the other. */
644 if (t1 == error_mark_node)
646 if (t2 == error_mark_node)
649 if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
650 t1 = TYPE_MAIN_VARIANT (t1);
652 if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
653 t2 = TYPE_MAIN_VARIANT (t2);
655 if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
656 t1 = build_type_attribute_variant (t1, NULL_TREE);
658 if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
659 t2 = build_type_attribute_variant (t2, NULL_TREE);
661 /* Save time if the two types are the same. */
663 if (t1 == t2) return t1;
665 code1 = TREE_CODE (t1);
666 code2 = TREE_CODE (t2);
668 gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
669 || code1 == FIXED_POINT_TYPE || code1 == REAL_TYPE
670 || code1 == INTEGER_TYPE);
671 gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
672 || code2 == FIXED_POINT_TYPE || code2 == REAL_TYPE
673 || code2 == INTEGER_TYPE);
675 /* When one operand is a decimal float type, the other operand cannot be
676 a generic float type or a complex type. We also disallow vector types
678 if ((DECIMAL_FLOAT_TYPE_P (t1) || DECIMAL_FLOAT_TYPE_P (t2))
679 && !(DECIMAL_FLOAT_TYPE_P (t1) && DECIMAL_FLOAT_TYPE_P (t2)))
681 if (code1 == VECTOR_TYPE || code2 == VECTOR_TYPE)
683 error ("can%'t mix operands of decimal float and vector types");
684 return error_mark_node;
686 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
688 error ("can%'t mix operands of decimal float and complex types");
689 return error_mark_node;
691 if (code1 == REAL_TYPE && code2 == REAL_TYPE)
693 error ("can%'t mix operands of decimal float and other float types");
694 return error_mark_node;
698 /* If one type is a vector type, return that type. (How the usual
699 arithmetic conversions apply to the vector types extension is not
700 precisely specified.) */
701 if (code1 == VECTOR_TYPE)
704 if (code2 == VECTOR_TYPE)
707 /* If one type is complex, form the common type of the non-complex
708 components, then make that complex. Use T1 or T2 if it is the
710 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
712 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
713 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
714 tree subtype = c_common_type (subtype1, subtype2);
716 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
718 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
721 return build_complex_type (subtype);
724 /* If only one is real, use it as the result. */
726 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
729 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
732 /* If both are real and either are decimal floating point types, use
733 the decimal floating point type with the greater precision. */
735 if (code1 == REAL_TYPE && code2 == REAL_TYPE)
737 if (TYPE_MAIN_VARIANT (t1) == dfloat128_type_node
738 || TYPE_MAIN_VARIANT (t2) == dfloat128_type_node)
739 return dfloat128_type_node;
740 else if (TYPE_MAIN_VARIANT (t1) == dfloat64_type_node
741 || TYPE_MAIN_VARIANT (t2) == dfloat64_type_node)
742 return dfloat64_type_node;
743 else if (TYPE_MAIN_VARIANT (t1) == dfloat32_type_node
744 || TYPE_MAIN_VARIANT (t2) == dfloat32_type_node)
745 return dfloat32_type_node;
748 /* Deal with fixed-point types. */
749 if (code1 == FIXED_POINT_TYPE || code2 == FIXED_POINT_TYPE)
751 unsigned int unsignedp = 0, satp = 0;
752 enum machine_mode m1, m2;
753 unsigned int fbit1, ibit1, fbit2, ibit2, max_fbit, max_ibit;
758 /* If one input type is saturating, the result type is saturating. */
759 if (TYPE_SATURATING (t1) || TYPE_SATURATING (t2))
762 /* If both fixed-point types are unsigned, the result type is unsigned.
763 When mixing fixed-point and integer types, follow the sign of the
765 Otherwise, the result type is signed. */
766 if ((TYPE_UNSIGNED (t1) && TYPE_UNSIGNED (t2)
767 && code1 == FIXED_POINT_TYPE && code2 == FIXED_POINT_TYPE)
768 || (code1 == FIXED_POINT_TYPE && code2 != FIXED_POINT_TYPE
769 && TYPE_UNSIGNED (t1))
770 || (code1 != FIXED_POINT_TYPE && code2 == FIXED_POINT_TYPE
771 && TYPE_UNSIGNED (t2)))
774 /* The result type is signed. */
777 /* If the input type is unsigned, we need to convert to the
779 if (code1 == FIXED_POINT_TYPE && TYPE_UNSIGNED (t1))
781 enum mode_class mclass = (enum mode_class) 0;
782 if (GET_MODE_CLASS (m1) == MODE_UFRACT)
784 else if (GET_MODE_CLASS (m1) == MODE_UACCUM)
788 m1 = mode_for_size (GET_MODE_PRECISION (m1), mclass, 0);
790 if (code2 == FIXED_POINT_TYPE && TYPE_UNSIGNED (t2))
792 enum mode_class mclass = (enum mode_class) 0;
793 if (GET_MODE_CLASS (m2) == MODE_UFRACT)
795 else if (GET_MODE_CLASS (m2) == MODE_UACCUM)
799 m2 = mode_for_size (GET_MODE_PRECISION (m2), mclass, 0);
803 if (code1 == FIXED_POINT_TYPE)
805 fbit1 = GET_MODE_FBIT (m1);
806 ibit1 = GET_MODE_IBIT (m1);
811 /* Signed integers need to subtract one sign bit. */
812 ibit1 = TYPE_PRECISION (t1) - (!TYPE_UNSIGNED (t1));
815 if (code2 == FIXED_POINT_TYPE)
817 fbit2 = GET_MODE_FBIT (m2);
818 ibit2 = GET_MODE_IBIT (m2);
823 /* Signed integers need to subtract one sign bit. */
824 ibit2 = TYPE_PRECISION (t2) - (!TYPE_UNSIGNED (t2));
827 max_ibit = ibit1 >= ibit2 ? ibit1 : ibit2;
828 max_fbit = fbit1 >= fbit2 ? fbit1 : fbit2;
829 return c_common_fixed_point_type_for_size (max_ibit, max_fbit, unsignedp,
833 /* Both real or both integers; use the one with greater precision. */
835 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
837 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
840 /* Same precision. Prefer long longs to longs to ints when the
841 same precision, following the C99 rules on integer type rank
842 (which are equivalent to the C90 rules for C90 types). */
844 if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
845 || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
846 return long_long_unsigned_type_node;
848 if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
849 || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
851 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
852 return long_long_unsigned_type_node;
854 return long_long_integer_type_node;
857 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
858 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
859 return long_unsigned_type_node;
861 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
862 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
864 /* But preserve unsignedness from the other type,
865 since long cannot hold all the values of an unsigned int. */
866 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
867 return long_unsigned_type_node;
869 return long_integer_type_node;
872 /* Likewise, prefer long double to double even if same size. */
873 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
874 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
875 return long_double_type_node;
877 /* Otherwise prefer the unsigned one. */
879 if (TYPE_UNSIGNED (t1))
885 /* Wrapper around c_common_type that is used by c-common.c and other
886 front end optimizations that remove promotions. ENUMERAL_TYPEs
887 are allowed here and are converted to their compatible integer types.
888 BOOLEAN_TYPEs are allowed here and return either boolean_type_node or
889 preferably a non-Boolean type as the common type. */
891 common_type (tree t1, tree t2)
893 if (TREE_CODE (t1) == ENUMERAL_TYPE)
894 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
895 if (TREE_CODE (t2) == ENUMERAL_TYPE)
896 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
898 /* If both types are BOOLEAN_TYPE, then return boolean_type_node. */
899 if (TREE_CODE (t1) == BOOLEAN_TYPE
900 && TREE_CODE (t2) == BOOLEAN_TYPE)
901 return boolean_type_node;
903 /* If either type is BOOLEAN_TYPE, then return the other. */
904 if (TREE_CODE (t1) == BOOLEAN_TYPE)
906 if (TREE_CODE (t2) == BOOLEAN_TYPE)
909 return c_common_type (t1, t2);
912 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
913 or various other operations. Return 2 if they are compatible
914 but a warning may be needed if you use them together. */
917 comptypes (tree type1, tree type2)
919 const struct tagged_tu_seen_cache * tagged_tu_seen_base1 = tagged_tu_seen_base;
922 val = comptypes_internal (type1, type2, NULL);
923 free_all_tagged_tu_seen_up_to (tagged_tu_seen_base1);
928 /* Like comptypes, but if it returns non-zero because enum and int are
929 compatible, it sets *ENUM_AND_INT_P to true. */
932 comptypes_check_enum_int (tree type1, tree type2, bool *enum_and_int_p)
934 const struct tagged_tu_seen_cache * tagged_tu_seen_base1 = tagged_tu_seen_base;
937 val = comptypes_internal (type1, type2, enum_and_int_p);
938 free_all_tagged_tu_seen_up_to (tagged_tu_seen_base1);
943 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
944 or various other operations. Return 2 if they are compatible
945 but a warning may be needed if you use them together. If
946 ENUM_AND_INT_P is not NULL, and one type is an enum and the other a
947 compatible integer type, then this sets *ENUM_AND_INT_P to true;
948 *ENUM_AND_INT_P is never set to false. This differs from
949 comptypes, in that we don't free the seen types. */
952 comptypes_internal (const_tree type1, const_tree type2, bool *enum_and_int_p)
954 const_tree t1 = type1;
955 const_tree t2 = type2;
958 /* Suppress errors caused by previously reported errors. */
960 if (t1 == t2 || !t1 || !t2
961 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
964 /* If either type is the internal version of sizetype, return the
966 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
967 && TYPE_ORIG_SIZE_TYPE (t1))
968 t1 = TYPE_ORIG_SIZE_TYPE (t1);
970 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
971 && TYPE_ORIG_SIZE_TYPE (t2))
972 t2 = TYPE_ORIG_SIZE_TYPE (t2);
975 /* Enumerated types are compatible with integer types, but this is
976 not transitive: two enumerated types in the same translation unit
977 are compatible with each other only if they are the same type. */
979 if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
981 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
982 if (enum_and_int_p != NULL && TREE_CODE (t2) != VOID_TYPE)
983 *enum_and_int_p = true;
985 else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
987 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
988 if (enum_and_int_p != NULL && TREE_CODE (t1) != VOID_TYPE)
989 *enum_and_int_p = true;
995 /* Different classes of types can't be compatible. */
997 if (TREE_CODE (t1) != TREE_CODE (t2))
1000 /* Qualifiers must match. C99 6.7.3p9 */
1002 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
1005 /* Allow for two different type nodes which have essentially the same
1006 definition. Note that we already checked for equality of the type
1007 qualifiers (just above). */
1009 if (TREE_CODE (t1) != ARRAY_TYPE
1010 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
1013 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1014 if (!(attrval = targetm.comp_type_attributes (t1, t2)))
1017 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1020 switch (TREE_CODE (t1))
1023 /* Do not remove mode or aliasing information. */
1024 if (TYPE_MODE (t1) != TYPE_MODE (t2)
1025 || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2))
1027 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
1028 ? 1 : comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2),
1033 val = function_types_compatible_p (t1, t2, enum_and_int_p);
1038 tree d1 = TYPE_DOMAIN (t1);
1039 tree d2 = TYPE_DOMAIN (t2);
1040 bool d1_variable, d2_variable;
1041 bool d1_zero, d2_zero;
1044 /* Target types must match incl. qualifiers. */
1045 if (TREE_TYPE (t1) != TREE_TYPE (t2)
1046 && 0 == (val = comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2),
1050 /* Sizes must match unless one is missing or variable. */
1051 if (d1 == 0 || d2 == 0 || d1 == d2)
1054 d1_zero = !TYPE_MAX_VALUE (d1);
1055 d2_zero = !TYPE_MAX_VALUE (d2);
1057 d1_variable = (!d1_zero
1058 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
1059 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
1060 d2_variable = (!d2_zero
1061 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
1062 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
1063 d1_variable = d1_variable || (d1_zero && c_vla_type_p (t1));
1064 d2_variable = d2_variable || (d2_zero && c_vla_type_p (t2));
1066 if (d1_variable || d2_variable)
1068 if (d1_zero && d2_zero)
1070 if (d1_zero || d2_zero
1071 || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
1072 || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
1081 if (val != 1 && !same_translation_unit_p (t1, t2))
1083 tree a1 = TYPE_ATTRIBUTES (t1);
1084 tree a2 = TYPE_ATTRIBUTES (t2);
1086 if (! attribute_list_contained (a1, a2)
1087 && ! attribute_list_contained (a2, a1))
1091 return tagged_types_tu_compatible_p (t1, t2, enum_and_int_p);
1092 val = tagged_types_tu_compatible_p (t1, t2, enum_and_int_p);
1097 val = (TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1098 && comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2),
1105 return attrval == 2 && val == 1 ? 2 : val;
1108 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
1109 ignoring their qualifiers. */
1112 comp_target_types (location_t location, tree ttl, tree ttr)
1116 bool enum_and_int_p;
1118 /* Do not lose qualifiers on element types of array types that are
1119 pointer targets by taking their TYPE_MAIN_VARIANT. */
1120 mvl = TREE_TYPE (ttl);
1121 mvr = TREE_TYPE (ttr);
1122 if (TREE_CODE (mvl) != ARRAY_TYPE)
1123 mvl = TYPE_MAIN_VARIANT (mvl);
1124 if (TREE_CODE (mvr) != ARRAY_TYPE)
1125 mvr = TYPE_MAIN_VARIANT (mvr);
1126 enum_and_int_p = false;
1127 val = comptypes_check_enum_int (mvl, mvr, &enum_and_int_p);
1130 pedwarn (location, OPT_pedantic, "types are not quite compatible");
1132 if (val == 1 && enum_and_int_p && warn_cxx_compat)
1133 warning_at (location, OPT_Wc___compat,
1134 "pointer target types incompatible in C++");
1139 /* Subroutines of `comptypes'. */
1141 /* Determine whether two trees derive from the same translation unit.
1142 If the CONTEXT chain ends in a null, that tree's context is still
1143 being parsed, so if two trees have context chains ending in null,
1144 they're in the same translation unit. */
1146 same_translation_unit_p (const_tree t1, const_tree t2)
1148 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
1149 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
1151 case tcc_declaration:
1152 t1 = DECL_CONTEXT (t1); break;
1154 t1 = TYPE_CONTEXT (t1); break;
1155 case tcc_exceptional:
1156 t1 = BLOCK_SUPERCONTEXT (t1); break; /* assume block */
1157 default: gcc_unreachable ();
1160 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
1161 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
1163 case tcc_declaration:
1164 t2 = DECL_CONTEXT (t2); break;
1166 t2 = TYPE_CONTEXT (t2); break;
1167 case tcc_exceptional:
1168 t2 = BLOCK_SUPERCONTEXT (t2); break; /* assume block */
1169 default: gcc_unreachable ();
1175 /* Allocate the seen two types, assuming that they are compatible. */
1177 static struct tagged_tu_seen_cache *
1178 alloc_tagged_tu_seen_cache (const_tree t1, const_tree t2)
1180 struct tagged_tu_seen_cache *tu = XNEW (struct tagged_tu_seen_cache);
1181 tu->next = tagged_tu_seen_base;
1185 tagged_tu_seen_base = tu;
1187 /* The C standard says that two structures in different translation
1188 units are compatible with each other only if the types of their
1189 fields are compatible (among other things). We assume that they
1190 are compatible until proven otherwise when building the cache.
1191 An example where this can occur is:
1196 If we are comparing this against a similar struct in another TU,
1197 and did not assume they were compatible, we end up with an infinite
1203 /* Free the seen types until we get to TU_TIL. */
1206 free_all_tagged_tu_seen_up_to (const struct tagged_tu_seen_cache *tu_til)
1208 const struct tagged_tu_seen_cache *tu = tagged_tu_seen_base;
1209 while (tu != tu_til)
1211 const struct tagged_tu_seen_cache *const tu1
1212 = (const struct tagged_tu_seen_cache *) tu;
1214 free (CONST_CAST (struct tagged_tu_seen_cache *, tu1));
1216 tagged_tu_seen_base = tu_til;
1219 /* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
1220 compatible. If the two types are not the same (which has been
1221 checked earlier), this can only happen when multiple translation
1222 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
1223 rules. ENUM_AND_INT_P is as in comptypes_internal. */
1226 tagged_types_tu_compatible_p (const_tree t1, const_tree t2,
1227 bool *enum_and_int_p)
1230 bool needs_warning = false;
1232 /* We have to verify that the tags of the types are the same. This
1233 is harder than it looks because this may be a typedef, so we have
1234 to go look at the original type. It may even be a typedef of a
1236 In the case of compiler-created builtin structs the TYPE_DECL
1237 may be a dummy, with no DECL_ORIGINAL_TYPE. Don't fault. */
1238 while (TYPE_NAME (t1)
1239 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
1240 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
1241 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
1243 while (TYPE_NAME (t2)
1244 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL
1245 && DECL_ORIGINAL_TYPE (TYPE_NAME (t2)))
1246 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
1248 /* C90 didn't have the requirement that the two tags be the same. */
1249 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
1252 /* C90 didn't say what happened if one or both of the types were
1253 incomplete; we choose to follow C99 rules here, which is that they
1255 if (TYPE_SIZE (t1) == NULL
1256 || TYPE_SIZE (t2) == NULL)
1260 const struct tagged_tu_seen_cache * tts_i;
1261 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
1262 if (tts_i->t1 == t1 && tts_i->t2 == t2)
1266 switch (TREE_CODE (t1))
1270 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1271 /* Speed up the case where the type values are in the same order. */
1272 tree tv1 = TYPE_VALUES (t1);
1273 tree tv2 = TYPE_VALUES (t2);
1280 for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
1282 if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
1284 if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
1291 if (tv1 == NULL_TREE && tv2 == NULL_TREE)
1295 if (tv1 == NULL_TREE || tv2 == NULL_TREE)
1301 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
1307 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
1309 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
1311 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
1322 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1323 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
1329 /* Speed up the common case where the fields are in the same order. */
1330 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2); s1 && s2;
1331 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
1335 if (DECL_NAME (s1) != DECL_NAME (s2))
1337 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2),
1340 if (result != 1 && !DECL_NAME (s1))
1348 needs_warning = true;
1350 if (TREE_CODE (s1) == FIELD_DECL
1351 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1352 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1360 tu->val = needs_warning ? 2 : 1;
1364 for (s1 = TYPE_FIELDS (t1); s1; s1 = TREE_CHAIN (s1))
1368 for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
1369 if (DECL_NAME (s1) == DECL_NAME (s2))
1373 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2),
1376 if (result != 1 && !DECL_NAME (s1))
1384 needs_warning = true;
1386 if (TREE_CODE (s1) == FIELD_DECL
1387 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1388 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1400 tu->val = needs_warning ? 2 : 10;
1406 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1408 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
1410 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
1413 if (TREE_CODE (s1) != TREE_CODE (s2)
1414 || DECL_NAME (s1) != DECL_NAME (s2))
1416 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2),
1421 needs_warning = true;
1423 if (TREE_CODE (s1) == FIELD_DECL
1424 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1425 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1431 tu->val = needs_warning ? 2 : 1;
1440 /* Return 1 if two function types F1 and F2 are compatible.
1441 If either type specifies no argument types,
1442 the other must specify a fixed number of self-promoting arg types.
1443 Otherwise, if one type specifies only the number of arguments,
1444 the other must specify that number of self-promoting arg types.
1445 Otherwise, the argument types must match.
1446 ENUM_AND_INT_P is as in comptypes_internal. */
1449 function_types_compatible_p (const_tree f1, const_tree f2,
1450 bool *enum_and_int_p)
1453 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1458 ret1 = TREE_TYPE (f1);
1459 ret2 = TREE_TYPE (f2);
1461 /* 'volatile' qualifiers on a function's return type used to mean
1462 the function is noreturn. */
1463 if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
1464 pedwarn (input_location, 0, "function return types not compatible due to %<volatile%>");
1465 if (TYPE_VOLATILE (ret1))
1466 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
1467 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
1468 if (TYPE_VOLATILE (ret2))
1469 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
1470 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
1471 val = comptypes_internal (ret1, ret2, enum_and_int_p);
1475 args1 = TYPE_ARG_TYPES (f1);
1476 args2 = TYPE_ARG_TYPES (f2);
1478 /* An unspecified parmlist matches any specified parmlist
1479 whose argument types don't need default promotions. */
1483 if (!self_promoting_args_p (args2))
1485 /* If one of these types comes from a non-prototype fn definition,
1486 compare that with the other type's arglist.
1487 If they don't match, ask for a warning (but no error). */
1488 if (TYPE_ACTUAL_ARG_TYPES (f1)
1489 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1),
1496 if (!self_promoting_args_p (args1))
1498 if (TYPE_ACTUAL_ARG_TYPES (f2)
1499 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2),
1505 /* Both types have argument lists: compare them and propagate results. */
1506 val1 = type_lists_compatible_p (args1, args2, enum_and_int_p);
1507 return val1 != 1 ? val1 : val;
1510 /* Check two lists of types for compatibility, returning 0 for
1511 incompatible, 1 for compatible, or 2 for compatible with
1512 warning. ENUM_AND_INT_P is as in comptypes_internal. */
1515 type_lists_compatible_p (const_tree args1, const_tree args2,
1516 bool *enum_and_int_p)
1518 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1524 tree a1, mv1, a2, mv2;
1525 if (args1 == 0 && args2 == 0)
1527 /* If one list is shorter than the other,
1528 they fail to match. */
1529 if (args1 == 0 || args2 == 0)
1531 mv1 = a1 = TREE_VALUE (args1);
1532 mv2 = a2 = TREE_VALUE (args2);
1533 if (mv1 && mv1 != error_mark_node && TREE_CODE (mv1) != ARRAY_TYPE)
1534 mv1 = TYPE_MAIN_VARIANT (mv1);
1535 if (mv2 && mv2 != error_mark_node && TREE_CODE (mv2) != ARRAY_TYPE)
1536 mv2 = TYPE_MAIN_VARIANT (mv2);
1537 /* A null pointer instead of a type
1538 means there is supposed to be an argument
1539 but nothing is specified about what type it has.
1540 So match anything that self-promotes. */
1543 if (c_type_promotes_to (a2) != a2)
1548 if (c_type_promotes_to (a1) != a1)
1551 /* If one of the lists has an error marker, ignore this arg. */
1552 else if (TREE_CODE (a1) == ERROR_MARK
1553 || TREE_CODE (a2) == ERROR_MARK)
1555 else if (!(newval = comptypes_internal (mv1, mv2, enum_and_int_p)))
1557 /* Allow wait (union {union wait *u; int *i} *)
1558 and wait (union wait *) to be compatible. */
1559 if (TREE_CODE (a1) == UNION_TYPE
1560 && (TYPE_NAME (a1) == 0
1561 || TYPE_TRANSPARENT_UNION (a1))
1562 && TREE_CODE (TYPE_SIZE (a1)) == INTEGER_CST
1563 && tree_int_cst_equal (TYPE_SIZE (a1),
1567 for (memb = TYPE_FIELDS (a1);
1568 memb; memb = TREE_CHAIN (memb))
1570 tree mv3 = TREE_TYPE (memb);
1571 if (mv3 && mv3 != error_mark_node
1572 && TREE_CODE (mv3) != ARRAY_TYPE)
1573 mv3 = TYPE_MAIN_VARIANT (mv3);
1574 if (comptypes_internal (mv3, mv2, enum_and_int_p))
1580 else if (TREE_CODE (a2) == UNION_TYPE
1581 && (TYPE_NAME (a2) == 0
1582 || TYPE_TRANSPARENT_UNION (a2))
1583 && TREE_CODE (TYPE_SIZE (a2)) == INTEGER_CST
1584 && tree_int_cst_equal (TYPE_SIZE (a2),
1588 for (memb = TYPE_FIELDS (a2);
1589 memb; memb = TREE_CHAIN (memb))
1591 tree mv3 = TREE_TYPE (memb);
1592 if (mv3 && mv3 != error_mark_node
1593 && TREE_CODE (mv3) != ARRAY_TYPE)
1594 mv3 = TYPE_MAIN_VARIANT (mv3);
1595 if (comptypes_internal (mv3, mv1, enum_and_int_p))
1605 /* comptypes said ok, but record if it said to warn. */
1609 args1 = TREE_CHAIN (args1);
1610 args2 = TREE_CHAIN (args2);
1614 /* Compute the size to increment a pointer by. */
1617 c_size_in_bytes (const_tree type)
1619 enum tree_code code = TREE_CODE (type);
1621 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
1622 return size_one_node;
1624 if (!COMPLETE_OR_VOID_TYPE_P (type))
1626 error ("arithmetic on pointer to an incomplete type");
1627 return size_one_node;
1630 /* Convert in case a char is more than one unit. */
1631 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
1632 size_int (TYPE_PRECISION (char_type_node)
1636 /* Return either DECL or its known constant value (if it has one). */
1639 decl_constant_value (tree decl)
1641 if (/* Don't change a variable array bound or initial value to a constant
1642 in a place where a variable is invalid. Note that DECL_INITIAL
1643 isn't valid for a PARM_DECL. */
1644 current_function_decl != 0
1645 && TREE_CODE (decl) != PARM_DECL
1646 && !TREE_THIS_VOLATILE (decl)
1647 && TREE_READONLY (decl)
1648 && DECL_INITIAL (decl) != 0
1649 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
1650 /* This is invalid if initial value is not constant.
1651 If it has either a function call, a memory reference,
1652 or a variable, then re-evaluating it could give different results. */
1653 && TREE_CONSTANT (DECL_INITIAL (decl))
1654 /* Check for cases where this is sub-optimal, even though valid. */
1655 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
1656 return DECL_INITIAL (decl);
1660 /* Convert the array expression EXP to a pointer. */
1662 array_to_pointer_conversion (location_t loc, tree exp)
1664 tree orig_exp = exp;
1665 tree type = TREE_TYPE (exp);
1667 tree restype = TREE_TYPE (type);
1670 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
1672 STRIP_TYPE_NOPS (exp);
1674 if (TREE_NO_WARNING (orig_exp))
1675 TREE_NO_WARNING (exp) = 1;
1677 ptrtype = build_pointer_type (restype);
1679 if (TREE_CODE (exp) == INDIRECT_REF)
1680 return convert (ptrtype, TREE_OPERAND (exp, 0));
1682 adr = build_unary_op (loc, ADDR_EXPR, exp, 1);
1683 return convert (ptrtype, adr);
1686 /* Convert the function expression EXP to a pointer. */
1688 function_to_pointer_conversion (location_t loc, tree exp)
1690 tree orig_exp = exp;
1692 gcc_assert (TREE_CODE (TREE_TYPE (exp)) == FUNCTION_TYPE);
1694 STRIP_TYPE_NOPS (exp);
1696 if (TREE_NO_WARNING (orig_exp))
1697 TREE_NO_WARNING (exp) = 1;
1699 return build_unary_op (loc, ADDR_EXPR, exp, 0);
1702 /* Perform the default conversion of arrays and functions to pointers.
1703 Return the result of converting EXP. For any other expression, just
1706 LOC is the location of the expression. */
1709 default_function_array_conversion (location_t loc, struct c_expr exp)
1711 tree orig_exp = exp.value;
1712 tree type = TREE_TYPE (exp.value);
1713 enum tree_code code = TREE_CODE (type);
1719 bool not_lvalue = false;
1720 bool lvalue_array_p;
1722 while ((TREE_CODE (exp.value) == NON_LVALUE_EXPR
1723 || CONVERT_EXPR_P (exp.value))
1724 && TREE_TYPE (TREE_OPERAND (exp.value, 0)) == type)
1726 if (TREE_CODE (exp.value) == NON_LVALUE_EXPR)
1728 exp.value = TREE_OPERAND (exp.value, 0);
1731 if (TREE_NO_WARNING (orig_exp))
1732 TREE_NO_WARNING (exp.value) = 1;
1734 lvalue_array_p = !not_lvalue && lvalue_p (exp.value);
1735 if (!flag_isoc99 && !lvalue_array_p)
1737 /* Before C99, non-lvalue arrays do not decay to pointers.
1738 Normally, using such an array would be invalid; but it can
1739 be used correctly inside sizeof or as a statement expression.
1740 Thus, do not give an error here; an error will result later. */
1744 exp.value = array_to_pointer_conversion (loc, exp.value);
1748 exp.value = function_to_pointer_conversion (loc, exp.value);
1758 /* EXP is an expression of integer type. Apply the integer promotions
1759 to it and return the promoted value. */
1762 perform_integral_promotions (tree exp)
1764 tree type = TREE_TYPE (exp);
1765 enum tree_code code = TREE_CODE (type);
1767 gcc_assert (INTEGRAL_TYPE_P (type));
1769 /* Normally convert enums to int,
1770 but convert wide enums to something wider. */
1771 if (code == ENUMERAL_TYPE)
1773 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
1774 TYPE_PRECISION (integer_type_node)),
1775 ((TYPE_PRECISION (type)
1776 >= TYPE_PRECISION (integer_type_node))
1777 && TYPE_UNSIGNED (type)));
1779 return convert (type, exp);
1782 /* ??? This should no longer be needed now bit-fields have their
1784 if (TREE_CODE (exp) == COMPONENT_REF
1785 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
1786 /* If it's thinner than an int, promote it like a
1787 c_promoting_integer_type_p, otherwise leave it alone. */
1788 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
1789 TYPE_PRECISION (integer_type_node)))
1790 return convert (integer_type_node, exp);
1792 if (c_promoting_integer_type_p (type))
1794 /* Preserve unsignedness if not really getting any wider. */
1795 if (TYPE_UNSIGNED (type)
1796 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1797 return convert (unsigned_type_node, exp);
1799 return convert (integer_type_node, exp);
1806 /* Perform default promotions for C data used in expressions.
1807 Enumeral types or short or char are converted to int.
1808 In addition, manifest constants symbols are replaced by their values. */
1811 default_conversion (tree exp)
1814 tree type = TREE_TYPE (exp);
1815 enum tree_code code = TREE_CODE (type);
1818 /* Functions and arrays have been converted during parsing. */
1819 gcc_assert (code != FUNCTION_TYPE);
1820 if (code == ARRAY_TYPE)
1823 /* Constants can be used directly unless they're not loadable. */
1824 if (TREE_CODE (exp) == CONST_DECL)
1825 exp = DECL_INITIAL (exp);
1827 /* Strip no-op conversions. */
1829 STRIP_TYPE_NOPS (exp);
1831 if (TREE_NO_WARNING (orig_exp))
1832 TREE_NO_WARNING (exp) = 1;
1834 if (code == VOID_TYPE)
1836 error ("void value not ignored as it ought to be");
1837 return error_mark_node;
1840 exp = require_complete_type (exp);
1841 if (exp == error_mark_node)
1842 return error_mark_node;
1844 promoted_type = targetm.promoted_type (type);
1846 return convert (promoted_type, exp);
1848 if (INTEGRAL_TYPE_P (type))
1849 return perform_integral_promotions (exp);
1854 /* Look up COMPONENT in a structure or union DECL.
1856 If the component name is not found, returns NULL_TREE. Otherwise,
1857 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1858 stepping down the chain to the component, which is in the last
1859 TREE_VALUE of the list. Normally the list is of length one, but if
1860 the component is embedded within (nested) anonymous structures or
1861 unions, the list steps down the chain to the component. */
1864 lookup_field (tree decl, tree component)
1866 tree type = TREE_TYPE (decl);
1869 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1870 to the field elements. Use a binary search on this array to quickly
1871 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1872 will always be set for structures which have many elements. */
1874 if (TYPE_LANG_SPECIFIC (type) && TYPE_LANG_SPECIFIC (type)->s)
1877 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
1879 field = TYPE_FIELDS (type);
1881 top = TYPE_LANG_SPECIFIC (type)->s->len;
1882 while (top - bot > 1)
1884 half = (top - bot + 1) >> 1;
1885 field = field_array[bot+half];
1887 if (DECL_NAME (field) == NULL_TREE)
1889 /* Step through all anon unions in linear fashion. */
1890 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1892 field = field_array[bot++];
1893 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1894 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1896 tree anon = lookup_field (field, component);
1899 return tree_cons (NULL_TREE, field, anon);
1903 /* Entire record is only anon unions. */
1907 /* Restart the binary search, with new lower bound. */
1911 if (DECL_NAME (field) == component)
1913 if (DECL_NAME (field) < component)
1919 if (DECL_NAME (field_array[bot]) == component)
1920 field = field_array[bot];
1921 else if (DECL_NAME (field) != component)
1926 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1928 if (DECL_NAME (field) == NULL_TREE
1929 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1930 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1932 tree anon = lookup_field (field, component);
1935 return tree_cons (NULL_TREE, field, anon);
1938 if (DECL_NAME (field) == component)
1942 if (field == NULL_TREE)
1946 return tree_cons (NULL_TREE, field, NULL_TREE);
1949 /* Make an expression to refer to the COMPONENT field of structure or
1950 union value DATUM. COMPONENT is an IDENTIFIER_NODE. LOC is the
1951 location of the COMPONENT_REF. */
1954 build_component_ref (location_t loc, tree datum, tree component)
1956 tree type = TREE_TYPE (datum);
1957 enum tree_code code = TREE_CODE (type);
1960 bool datum_lvalue = lvalue_p (datum);
1962 if (!objc_is_public (datum, component))
1963 return error_mark_node;
1965 /* See if there is a field or component with name COMPONENT. */
1967 if (code == RECORD_TYPE || code == UNION_TYPE)
1969 if (!COMPLETE_TYPE_P (type))
1971 c_incomplete_type_error (NULL_TREE, type);
1972 return error_mark_node;
1975 field = lookup_field (datum, component);
1979 error_at (loc, "%qT has no member named %qE", type, component);
1980 return error_mark_node;
1983 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1984 This might be better solved in future the way the C++ front
1985 end does it - by giving the anonymous entities each a
1986 separate name and type, and then have build_component_ref
1987 recursively call itself. We can't do that here. */
1990 tree subdatum = TREE_VALUE (field);
1993 bool use_datum_quals;
1995 if (TREE_TYPE (subdatum) == error_mark_node)
1996 return error_mark_node;
1998 /* If this is an rvalue, it does not have qualifiers in C
1999 standard terms and we must avoid propagating such
2000 qualifiers down to a non-lvalue array that is then
2001 converted to a pointer. */
2002 use_datum_quals = (datum_lvalue
2003 || TREE_CODE (TREE_TYPE (subdatum)) != ARRAY_TYPE);
2005 quals = TYPE_QUALS (strip_array_types (TREE_TYPE (subdatum)));
2006 if (use_datum_quals)
2007 quals |= TYPE_QUALS (TREE_TYPE (datum));
2008 subtype = c_build_qualified_type (TREE_TYPE (subdatum), quals);
2010 ref = build3 (COMPONENT_REF, subtype, datum, subdatum,
2012 SET_EXPR_LOCATION (ref, loc);
2013 if (TREE_READONLY (subdatum)
2014 || (use_datum_quals && TREE_READONLY (datum)))
2015 TREE_READONLY (ref) = 1;
2016 if (TREE_THIS_VOLATILE (subdatum)
2017 || (use_datum_quals && TREE_THIS_VOLATILE (datum)))
2018 TREE_THIS_VOLATILE (ref) = 1;
2020 if (TREE_DEPRECATED (subdatum))
2021 warn_deprecated_use (subdatum, NULL_TREE);
2025 field = TREE_CHAIN (field);
2031 else if (code != ERROR_MARK)
2033 "request for member %qE in something not a structure or union",
2036 return error_mark_node;
2039 /* Given an expression PTR for a pointer, return an expression
2040 for the value pointed to.
2041 ERRORSTRING is the name of the operator to appear in error messages.
2043 LOC is the location to use for the generated tree. */
2046 build_indirect_ref (location_t loc, tree ptr, const char *errorstring)
2048 tree pointer = default_conversion (ptr);
2049 tree type = TREE_TYPE (pointer);
2052 if (TREE_CODE (type) == POINTER_TYPE)
2054 if (CONVERT_EXPR_P (pointer)
2055 || TREE_CODE (pointer) == VIEW_CONVERT_EXPR)
2057 /* If a warning is issued, mark it to avoid duplicates from
2058 the backend. This only needs to be done at
2059 warn_strict_aliasing > 2. */
2060 if (warn_strict_aliasing > 2)
2061 if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (pointer, 0)),
2062 type, TREE_OPERAND (pointer, 0)))
2063 TREE_NO_WARNING (pointer) = 1;
2066 if (TREE_CODE (pointer) == ADDR_EXPR
2067 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
2068 == TREE_TYPE (type)))
2070 ref = TREE_OPERAND (pointer, 0);
2071 protected_set_expr_location (ref, loc);
2076 tree t = TREE_TYPE (type);
2078 ref = build1 (INDIRECT_REF, t, pointer);
2080 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
2082 error_at (loc, "dereferencing pointer to incomplete type");
2083 return error_mark_node;
2085 if (VOID_TYPE_P (t) && skip_evaluation == 0)
2086 warning_at (loc, 0, "dereferencing %<void *%> pointer");
2088 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2089 so that we get the proper error message if the result is used
2090 to assign to. Also, &* is supposed to be a no-op.
2091 And ANSI C seems to specify that the type of the result
2092 should be the const type. */
2093 /* A de-reference of a pointer to const is not a const. It is valid
2094 to change it via some other pointer. */
2095 TREE_READONLY (ref) = TYPE_READONLY (t);
2096 TREE_SIDE_EFFECTS (ref)
2097 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
2098 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
2099 protected_set_expr_location (ref, loc);
2103 else if (TREE_CODE (pointer) != ERROR_MARK)
2105 "invalid type argument of %qs (have %qT)", errorstring, type);
2106 return error_mark_node;
2109 /* This handles expressions of the form "a[i]", which denotes
2112 This is logically equivalent in C to *(a+i), but we may do it differently.
2113 If A is a variable or a member, we generate a primitive ARRAY_REF.
2114 This avoids forcing the array out of registers, and can work on
2115 arrays that are not lvalues (for example, members of structures returned
2118 LOC is the location to use for the returned expression. */
2121 build_array_ref (location_t loc, tree array, tree index)
2124 bool swapped = false;
2125 if (TREE_TYPE (array) == error_mark_node
2126 || TREE_TYPE (index) == error_mark_node)
2127 return error_mark_node;
2129 if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
2130 && TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE)
2133 if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
2134 && TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
2136 error_at (loc, "subscripted value is neither array nor pointer");
2137 return error_mark_node;
2145 if (!INTEGRAL_TYPE_P (TREE_TYPE (index)))
2147 error_at (loc, "array subscript is not an integer");
2148 return error_mark_node;
2151 if (TREE_CODE (TREE_TYPE (TREE_TYPE (array))) == FUNCTION_TYPE)
2153 error_at (loc, "subscripted value is pointer to function");
2154 return error_mark_node;
2157 /* ??? Existing practice has been to warn only when the char
2158 index is syntactically the index, not for char[array]. */
2160 warn_array_subscript_with_type_char (index);
2162 /* Apply default promotions *after* noticing character types. */
2163 index = default_conversion (index);
2165 gcc_assert (TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE);
2167 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2171 /* An array that is indexed by a non-constant
2172 cannot be stored in a register; we must be able to do
2173 address arithmetic on its address.
2174 Likewise an array of elements of variable size. */
2175 if (TREE_CODE (index) != INTEGER_CST
2176 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2177 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
2179 if (!c_mark_addressable (array))
2180 return error_mark_node;
2182 /* An array that is indexed by a constant value which is not within
2183 the array bounds cannot be stored in a register either; because we
2184 would get a crash in store_bit_field/extract_bit_field when trying
2185 to access a non-existent part of the register. */
2186 if (TREE_CODE (index) == INTEGER_CST
2187 && TYPE_DOMAIN (TREE_TYPE (array))
2188 && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
2190 if (!c_mark_addressable (array))
2191 return error_mark_node;
2197 while (TREE_CODE (foo) == COMPONENT_REF)
2198 foo = TREE_OPERAND (foo, 0);
2199 if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
2200 pedwarn (loc, OPT_pedantic,
2201 "ISO C forbids subscripting %<register%> array");
2202 else if (!flag_isoc99 && !lvalue_p (foo))
2203 pedwarn (loc, OPT_pedantic,
2204 "ISO C90 forbids subscripting non-lvalue array");
2207 type = TREE_TYPE (TREE_TYPE (array));
2208 rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
2209 /* Array ref is const/volatile if the array elements are
2210 or if the array is. */
2211 TREE_READONLY (rval)
2212 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
2213 | TREE_READONLY (array));
2214 TREE_SIDE_EFFECTS (rval)
2215 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
2216 | TREE_SIDE_EFFECTS (array));
2217 TREE_THIS_VOLATILE (rval)
2218 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
2219 /* This was added by rms on 16 Nov 91.
2220 It fixes vol struct foo *a; a->elts[1]
2221 in an inline function.
2222 Hope it doesn't break something else. */
2223 | TREE_THIS_VOLATILE (array));
2224 ret = require_complete_type (rval);
2225 protected_set_expr_location (ret, loc);
2230 tree ar = default_conversion (array);
2232 if (ar == error_mark_node)
2235 gcc_assert (TREE_CODE (TREE_TYPE (ar)) == POINTER_TYPE);
2236 gcc_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) != FUNCTION_TYPE);
2238 return build_indirect_ref
2239 (loc, build_binary_op (loc, PLUS_EXPR, ar, index, 0),
2244 /* Build an external reference to identifier ID. FUN indicates
2245 whether this will be used for a function call. LOC is the source
2246 location of the identifier. This sets *TYPE to the type of the
2247 identifier, which is not the same as the type of the returned value
2248 for CONST_DECLs defined as enum constants. If the type of the
2249 identifier is not available, *TYPE is set to NULL. */
2251 build_external_ref (location_t loc, tree id, int fun, tree *type)
2254 tree decl = lookup_name (id);
2256 /* In Objective-C, an instance variable (ivar) may be preferred to
2257 whatever lookup_name() found. */
2258 decl = objc_lookup_ivar (decl, id);
2261 if (decl && decl != error_mark_node)
2264 *type = TREE_TYPE (ref);
2267 /* Implicit function declaration. */
2268 ref = implicitly_declare (loc, id);
2269 else if (decl == error_mark_node)
2270 /* Don't complain about something that's already been
2271 complained about. */
2272 return error_mark_node;
2275 undeclared_variable (loc, id);
2276 return error_mark_node;
2279 if (TREE_TYPE (ref) == error_mark_node)
2280 return error_mark_node;
2282 if (TREE_DEPRECATED (ref))
2283 warn_deprecated_use (ref, NULL_TREE);
2285 /* Recursive call does not count as usage. */
2286 if (ref != current_function_decl)
2288 TREE_USED (ref) = 1;
2291 if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
2293 if (!in_sizeof && !in_typeof)
2294 C_DECL_USED (ref) = 1;
2295 else if (DECL_INITIAL (ref) == 0
2296 && DECL_EXTERNAL (ref)
2297 && !TREE_PUBLIC (ref))
2298 record_maybe_used_decl (ref);
2301 if (TREE_CODE (ref) == CONST_DECL)
2303 used_types_insert (TREE_TYPE (ref));
2306 && TREE_CODE (TREE_TYPE (ref)) == ENUMERAL_TYPE
2307 && C_TYPE_DEFINED_IN_STRUCT (TREE_TYPE (ref)))
2309 warning_at (loc, OPT_Wc___compat,
2310 ("enum constant defined in struct or union "
2311 "is not visible in C++"));
2312 inform (DECL_SOURCE_LOCATION (ref), "enum constant defined here");
2315 ref = DECL_INITIAL (ref);
2316 TREE_CONSTANT (ref) = 1;
2318 else if (current_function_decl != 0
2319 && !DECL_FILE_SCOPE_P (current_function_decl)
2320 && (TREE_CODE (ref) == VAR_DECL
2321 || TREE_CODE (ref) == PARM_DECL
2322 || TREE_CODE (ref) == FUNCTION_DECL))
2324 tree context = decl_function_context (ref);
2326 if (context != 0 && context != current_function_decl)
2327 DECL_NONLOCAL (ref) = 1;
2329 /* C99 6.7.4p3: An inline definition of a function with external
2330 linkage ... shall not contain a reference to an identifier with
2331 internal linkage. */
2332 else if (current_function_decl != 0
2333 && DECL_DECLARED_INLINE_P (current_function_decl)
2334 && DECL_EXTERNAL (current_function_decl)
2335 && VAR_OR_FUNCTION_DECL_P (ref)
2336 && (TREE_CODE (ref) != VAR_DECL || TREE_STATIC (ref))
2337 && ! TREE_PUBLIC (ref)
2338 && DECL_CONTEXT (ref) != current_function_decl)
2339 record_inline_static (loc, current_function_decl, ref,
2345 /* Record details of decls possibly used inside sizeof or typeof. */
2346 struct maybe_used_decl
2350 /* The level seen at (in_sizeof + in_typeof). */
2352 /* The next one at this level or above, or NULL. */
2353 struct maybe_used_decl *next;
2356 static struct maybe_used_decl *maybe_used_decls;
2358 /* Record that DECL, an undefined static function reference seen
2359 inside sizeof or typeof, might be used if the operand of sizeof is
2360 a VLA type or the operand of typeof is a variably modified
2364 record_maybe_used_decl (tree decl)
2366 struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
2368 t->level = in_sizeof + in_typeof;
2369 t->next = maybe_used_decls;
2370 maybe_used_decls = t;
2373 /* Pop the stack of decls possibly used inside sizeof or typeof. If
2374 USED is false, just discard them. If it is true, mark them used
2375 (if no longer inside sizeof or typeof) or move them to the next
2376 level up (if still inside sizeof or typeof). */
2379 pop_maybe_used (bool used)
2381 struct maybe_used_decl *p = maybe_used_decls;
2382 int cur_level = in_sizeof + in_typeof;
2383 while (p && p->level > cur_level)
2388 C_DECL_USED (p->decl) = 1;
2390 p->level = cur_level;
2394 if (!used || cur_level == 0)
2395 maybe_used_decls = p;
2398 /* Return the result of sizeof applied to EXPR. */
2401 c_expr_sizeof_expr (location_t loc, struct c_expr expr)
2404 if (expr.value == error_mark_node)
2406 ret.value = error_mark_node;
2407 ret.original_code = ERROR_MARK;
2408 ret.original_type = NULL;
2409 pop_maybe_used (false);
2413 bool expr_const_operands = true;
2414 tree folded_expr = c_fully_fold (expr.value, require_constant_value,
2415 &expr_const_operands);
2416 ret.value = c_sizeof (loc, TREE_TYPE (folded_expr));
2417 ret.original_code = ERROR_MARK;
2418 ret.original_type = NULL;
2419 if (c_vla_type_p (TREE_TYPE (folded_expr)))
2421 /* sizeof is evaluated when given a vla (C99 6.5.3.4p2). */
2422 ret.value = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (ret.value),
2423 folded_expr, ret.value);
2424 C_MAYBE_CONST_EXPR_NON_CONST (ret.value) = !expr_const_operands;
2425 SET_EXPR_LOCATION (ret.value, loc);
2427 pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (folded_expr)));
2432 /* Return the result of sizeof applied to T, a structure for the type
2433 name passed to sizeof (rather than the type itself). LOC is the
2434 location of the original expression. */
2437 c_expr_sizeof_type (location_t loc, struct c_type_name *t)
2441 tree type_expr = NULL_TREE;
2442 bool type_expr_const = true;
2443 type = groktypename (t, &type_expr, &type_expr_const);
2444 ret.value = c_sizeof (loc, type);
2445 ret.original_code = ERROR_MARK;
2446 ret.original_type = NULL;
2447 if ((type_expr || TREE_CODE (ret.value) == INTEGER_CST)
2448 && c_vla_type_p (type))
2450 /* If the type is a [*] array, it is a VLA but is represented as
2451 having a size of zero. In such a case we must ensure that
2452 the result of sizeof does not get folded to a constant by
2453 c_fully_fold, because if the size is evaluated the result is
2454 not constant and so constraints on zero or negative size
2455 arrays must not be applied when this sizeof call is inside
2456 another array declarator. */
2458 type_expr = integer_zero_node;
2459 ret.value = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (ret.value),
2460 type_expr, ret.value);
2461 C_MAYBE_CONST_EXPR_NON_CONST (ret.value) = !type_expr_const;
2463 pop_maybe_used (type != error_mark_node
2464 ? C_TYPE_VARIABLE_SIZE (type) : false);
2468 /* Build a function call to function FUNCTION with parameters PARAMS.
2469 The function call is at LOC.
2470 PARAMS is a list--a chain of TREE_LIST nodes--in which the
2471 TREE_VALUE of each node is a parameter-expression.
2472 FUNCTION's data type may be a function type or a pointer-to-function. */
2475 build_function_call (location_t loc, tree function, tree params)
2480 vec = VEC_alloc (tree, gc, list_length (params));
2481 for (; params; params = TREE_CHAIN (params))
2482 VEC_quick_push (tree, vec, TREE_VALUE (params));
2483 ret = build_function_call_vec (loc, function, vec, NULL);
2484 VEC_free (tree, gc, vec);
2488 /* Build a function call to function FUNCTION with parameters PARAMS.
2489 ORIGTYPES, if not NULL, is a vector of types; each element is
2490 either NULL or the original type of the corresponding element in
2491 PARAMS. The original type may differ from TREE_TYPE of the
2492 parameter for enums. FUNCTION's data type may be a function type
2493 or pointer-to-function. This function changes the elements of
2497 build_function_call_vec (location_t loc, tree function, VEC(tree,gc) *params,
2498 VEC(tree,gc) *origtypes)
2500 tree fntype, fundecl = 0;
2501 tree name = NULL_TREE, result;
2507 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
2508 STRIP_TYPE_NOPS (function);
2510 /* Convert anything with function type to a pointer-to-function. */
2511 if (TREE_CODE (function) == FUNCTION_DECL)
2513 /* Implement type-directed function overloading for builtins.
2514 resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
2515 handle all the type checking. The result is a complete expression
2516 that implements this function call. */
2517 tem = resolve_overloaded_builtin (loc, function, params);
2521 name = DECL_NAME (function);
2524 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE)
2525 function = function_to_pointer_conversion (loc, function);
2527 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2528 expressions, like those used for ObjC messenger dispatches. */
2529 if (!VEC_empty (tree, params))
2530 function = objc_rewrite_function_call (function,
2531 VEC_index (tree, params, 0));
2533 function = c_fully_fold (function, false, NULL);
2535 fntype = TREE_TYPE (function);
2537 if (TREE_CODE (fntype) == ERROR_MARK)
2538 return error_mark_node;
2540 if (!(TREE_CODE (fntype) == POINTER_TYPE
2541 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
2543 error_at (loc, "called object %qE is not a function", function);
2544 return error_mark_node;
2547 if (fundecl && TREE_THIS_VOLATILE (fundecl))
2548 current_function_returns_abnormally = 1;
2550 /* fntype now gets the type of function pointed to. */
2551 fntype = TREE_TYPE (fntype);
2553 /* Convert the parameters to the types declared in the
2554 function prototype, or apply default promotions. */
2556 nargs = convert_arguments (TYPE_ARG_TYPES (fntype), params, origtypes,
2559 return error_mark_node;
2561 /* Check that the function is called through a compatible prototype.
2562 If it is not, replace the call by a trap, wrapped up in a compound
2563 expression if necessary. This has the nice side-effect to prevent
2564 the tree-inliner from generating invalid assignment trees which may
2565 blow up in the RTL expander later. */
2566 if (CONVERT_EXPR_P (function)
2567 && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
2568 && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
2569 && !comptypes (fntype, TREE_TYPE (tem)))
2571 tree return_type = TREE_TYPE (fntype);
2572 tree trap = build_function_call (loc, built_in_decls[BUILT_IN_TRAP],
2576 /* This situation leads to run-time undefined behavior. We can't,
2577 therefore, simply error unless we can prove that all possible
2578 executions of the program must execute the code. */
2579 if (warning_at (loc, 0, "function called through a non-compatible type"))
2580 /* We can, however, treat "undefined" any way we please.
2581 Call abort to encourage the user to fix the program. */
2582 inform (loc, "if this code is reached, the program will abort");
2583 /* Before the abort, allow the function arguments to exit or
2585 for (i = 0; i < nargs; i++)
2586 trap = build2 (COMPOUND_EXPR, void_type_node,
2587 VEC_index (tree, params, i), trap);
2589 if (VOID_TYPE_P (return_type))
2591 if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED)
2592 pedwarn (input_location, 0,
2593 "function with qualified void return type called");
2600 if (AGGREGATE_TYPE_P (return_type))
2601 rhs = build_compound_literal (loc, return_type,
2602 build_constructor (return_type, 0),
2605 rhs = fold_convert (return_type, integer_zero_node);
2607 return require_complete_type (build2 (COMPOUND_EXPR, return_type,
2612 argarray = VEC_address (tree, params);
2614 /* Check that arguments to builtin functions match the expectations. */
2616 && DECL_BUILT_IN (fundecl)
2617 && DECL_BUILT_IN_CLASS (fundecl) == BUILT_IN_NORMAL
2618 && !check_builtin_function_arguments (fundecl, nargs, argarray))
2619 return error_mark_node;
2621 /* Check that the arguments to the function are valid. */
2622 check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,
2623 TYPE_ARG_TYPES (fntype));
2625 if (name != NULL_TREE
2626 && !strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10))
2628 if (require_constant_value)
2629 result = fold_build_call_array_initializer (TREE_TYPE (fntype),
2630 function, nargs, argarray);
2632 result = fold_build_call_array (TREE_TYPE (fntype),
2633 function, nargs, argarray);
2634 if (TREE_CODE (result) == NOP_EXPR
2635 && TREE_CODE (TREE_OPERAND (result, 0)) == INTEGER_CST)
2636 STRIP_TYPE_NOPS (result);
2639 result = build_call_array (TREE_TYPE (fntype),
2640 function, nargs, argarray);
2642 if (VOID_TYPE_P (TREE_TYPE (result)))
2644 if (TYPE_QUALS (TREE_TYPE (result)) != TYPE_UNQUALIFIED)
2645 pedwarn (input_location, 0,
2646 "function with qualified void return type called");
2649 return require_complete_type (result);
2652 /* Convert the argument expressions in the vector VALUES
2653 to the types in the list TYPELIST.
2655 If TYPELIST is exhausted, or when an element has NULL as its type,
2656 perform the default conversions.
2658 ORIGTYPES is the original types of the expressions in VALUES. This
2659 holds the type of enum values which have been converted to integral
2660 types. It may be NULL.
2662 FUNCTION is a tree for the called function. It is used only for
2663 error messages, where it is formatted with %qE.
2665 This is also where warnings about wrong number of args are generated.
2667 Returns the actual number of arguments processed (which may be less
2668 than the length of VALUES in some error situations), or -1 on
2672 convert_arguments (tree typelist, VEC(tree,gc) *values,
2673 VEC(tree,gc) *origtypes, tree function, tree fundecl)
2676 unsigned int parmnum;
2677 const bool type_generic = fundecl
2678 && lookup_attribute ("type generic", TYPE_ATTRIBUTES(TREE_TYPE (fundecl)));
2679 bool type_generic_remove_excess_precision = false;
2682 /* Change pointer to function to the function itself for
2684 if (TREE_CODE (function) == ADDR_EXPR
2685 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
2686 function = TREE_OPERAND (function, 0);
2688 /* Handle an ObjC selector specially for diagnostics. */
2689 selector = objc_message_selector ();
2691 /* For type-generic built-in functions, determine whether excess
2692 precision should be removed (classification) or not
2695 && DECL_BUILT_IN (fundecl)
2696 && DECL_BUILT_IN_CLASS (fundecl) == BUILT_IN_NORMAL)
2698 switch (DECL_FUNCTION_CODE (fundecl))
2700 case BUILT_IN_ISFINITE:
2701 case BUILT_IN_ISINF:
2702 case BUILT_IN_ISINF_SIGN:
2703 case BUILT_IN_ISNAN:
2704 case BUILT_IN_ISNORMAL:
2705 case BUILT_IN_FPCLASSIFY:
2706 type_generic_remove_excess_precision = true;
2710 type_generic_remove_excess_precision = false;
2715 /* Scan the given expressions and types, producing individual
2716 converted arguments. */
2718 for (typetail = typelist, parmnum = 0;
2719 VEC_iterate (tree, values, parmnum, val);
2722 tree type = typetail ? TREE_VALUE (typetail) : 0;
2723 tree valtype = TREE_TYPE (val);
2724 tree rname = function;
2725 int argnum = parmnum + 1;
2726 const char *invalid_func_diag;
2727 bool excess_precision = false;
2731 if (type == void_type_node)
2733 error ("too many arguments to function %qE", function);
2737 if (selector && argnum > 2)
2743 npc = null_pointer_constant_p (val);
2745 /* If there is excess precision and a prototype, convert once to
2746 the required type rather than converting via the semantic
2747 type. Likewise without a prototype a float value represented
2748 as long double should be converted once to double. But for
2749 type-generic classification functions excess precision must
2751 if (TREE_CODE (val) == EXCESS_PRECISION_EXPR
2752 && (type || !type_generic || !type_generic_remove_excess_precision))
2754 val = TREE_OPERAND (val, 0);
2755 excess_precision = true;
2757 val = c_fully_fold (val, false, NULL);
2758 STRIP_TYPE_NOPS (val);
2760 val = require_complete_type (val);
2764 /* Formal parm type is specified by a function prototype. */
2766 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
2768 error ("type of formal parameter %d is incomplete", parmnum + 1);
2775 /* Optionally warn about conversions that
2776 differ from the default conversions. */
2777 if (warn_traditional_conversion || warn_traditional)
2779 unsigned int formal_prec = TYPE_PRECISION (type);
2781 if (INTEGRAL_TYPE_P (type)
2782 && TREE_CODE (valtype) == REAL_TYPE)
2783 warning (0, "passing argument %d of %qE as integer "
2784 "rather than floating due to prototype",
2786 if (INTEGRAL_TYPE_P (type)
2787 && TREE_CODE (valtype) == COMPLEX_TYPE)
2788 warning (0, "passing argument %d of %qE as integer "
2789 "rather than complex due to prototype",
2791 else if (TREE_CODE (type) == COMPLEX_TYPE
2792 && TREE_CODE (valtype) == REAL_TYPE)
2793 warning (0, "passing argument %d of %qE as complex "
2794 "rather than floating due to prototype",
2796 else if (TREE_CODE (type) == REAL_TYPE
2797 && INTEGRAL_TYPE_P (valtype))
2798 warning (0, "passing argument %d of %qE as floating "
2799 "rather than integer due to prototype",
2801 else if (TREE_CODE (type) == COMPLEX_TYPE
2802 && INTEGRAL_TYPE_P (valtype))
2803 warning (0, "passing argument %d of %qE as complex "
2804 "rather than integer due to prototype",
2806 else if (TREE_CODE (type) == REAL_TYPE
2807 && TREE_CODE (valtype) == COMPLEX_TYPE)
2808 warning (0, "passing argument %d of %qE as floating "
2809 "rather than complex due to prototype",
2811 /* ??? At some point, messages should be written about
2812 conversions between complex types, but that's too messy
2814 else if (TREE_CODE (type) == REAL_TYPE
2815 && TREE_CODE (valtype) == REAL_TYPE)
2817 /* Warn if any argument is passed as `float',
2818 since without a prototype it would be `double'. */
2819 if (formal_prec == TYPE_PRECISION (float_type_node)
2820 && type != dfloat32_type_node)
2821 warning (0, "passing argument %d of %qE as %<float%> "
2822 "rather than %<double%> due to prototype",
2825 /* Warn if mismatch between argument and prototype
2826 for decimal float types. Warn of conversions with
2827 binary float types and of precision narrowing due to
2829 else if (type != valtype
2830 && (type == dfloat32_type_node
2831 || type == dfloat64_type_node
2832 || type == dfloat128_type_node
2833 || valtype == dfloat32_type_node
2834 || valtype == dfloat64_type_node
2835 || valtype == dfloat128_type_node)
2837 <= TYPE_PRECISION (valtype)
2838 || (type == dfloat128_type_node
2840 != dfloat64_type_node
2842 != dfloat32_type_node)))
2843 || (type == dfloat64_type_node
2845 != dfloat32_type_node))))
2846 warning (0, "passing argument %d of %qE as %qT "
2847 "rather than %qT due to prototype",
2848 argnum, rname, type, valtype);
2851 /* Detect integer changing in width or signedness.
2852 These warnings are only activated with
2853 -Wtraditional-conversion, not with -Wtraditional. */
2854 else if (warn_traditional_conversion && INTEGRAL_TYPE_P (type)
2855 && INTEGRAL_TYPE_P (valtype))
2857 tree would_have_been = default_conversion (val);
2858 tree type1 = TREE_TYPE (would_have_been);
2860 if (TREE_CODE (type) == ENUMERAL_TYPE
2861 && (TYPE_MAIN_VARIANT (type)
2862 == TYPE_MAIN_VARIANT (valtype)))
2863 /* No warning if function asks for enum
2864 and the actual arg is that enum type. */
2866 else if (formal_prec != TYPE_PRECISION (type1))
2867 warning (OPT_Wtraditional_conversion,
2868 "passing argument %d of %qE "
2869 "with different width due to prototype",
2871 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
2873 /* Don't complain if the formal parameter type
2874 is an enum, because we can't tell now whether
2875 the value was an enum--even the same enum. */
2876 else if (TREE_CODE (type) == ENUMERAL_TYPE)
2878 else if (TREE_CODE (val) == INTEGER_CST
2879 && int_fits_type_p (val, type))
2880 /* Change in signedness doesn't matter
2881 if a constant value is unaffected. */
2883 /* If the value is extended from a narrower
2884 unsigned type, it doesn't matter whether we
2885 pass it as signed or unsigned; the value
2886 certainly is the same either way. */
2887 else if (TYPE_PRECISION (valtype) < TYPE_PRECISION (type)
2888 && TYPE_UNSIGNED (valtype))
2890 else if (TYPE_UNSIGNED (type))
2891 warning (OPT_Wtraditional_conversion,
2892 "passing argument %d of %qE "
2893 "as unsigned due to prototype",
2896 warning (OPT_Wtraditional_conversion,
2897 "passing argument %d of %qE "
2898 "as signed due to prototype", argnum, rname);
2902 /* Possibly restore an EXCESS_PRECISION_EXPR for the
2903 sake of better warnings from convert_and_check. */
2904 if (excess_precision)
2905 val = build1 (EXCESS_PRECISION_EXPR, valtype, val);
2906 origtype = (origtypes == NULL
2908 : VEC_index (tree, origtypes, parmnum));
2909 parmval = convert_for_assignment (input_location, type, val,
2910 origtype, ic_argpass, npc,
2914 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
2915 && INTEGRAL_TYPE_P (type)
2916 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
2917 parmval = default_conversion (parmval);
2920 else if (TREE_CODE (valtype) == REAL_TYPE
2921 && (TYPE_PRECISION (valtype)
2922 < TYPE_PRECISION (double_type_node))
2923 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (valtype)))
2928 /* Convert `float' to `double'. */
2929 parmval = convert (double_type_node, val);
2931 else if (excess_precision && !type_generic)
2932 /* A "double" argument with excess precision being passed
2933 without a prototype or in variable arguments. */
2934 parmval = convert (valtype, val);
2935 else if ((invalid_func_diag =
2936 targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
2938 error (invalid_func_diag);
2942 /* Convert `short' and `char' to full-size `int'. */
2943 parmval = default_conversion (val);
2945 VEC_replace (tree, values, parmnum, parmval);
2948 typetail = TREE_CHAIN (typetail);
2951 gcc_assert (parmnum == VEC_length (tree, values));
2953 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
2955 error ("too few arguments to function %qE", function);
2962 /* This is the entry point used by the parser to build unary operators
2963 in the input. CODE, a tree_code, specifies the unary operator, and
2964 ARG is the operand. For unary plus, the C parser currently uses
2965 CONVERT_EXPR for code.
2967 LOC is the location to use for the tree generated.
2971 parser_build_unary_op (location_t loc, enum tree_code code, struct c_expr arg)
2973 struct c_expr result;
2975 result.value = build_unary_op (loc, code, arg.value, 0);
2976 result.original_code = code;
2977 result.original_type = NULL;
2979 if (TREE_OVERFLOW_P (result.value) && !TREE_OVERFLOW_P (arg.value))
2980 overflow_warning (loc, result.value);
2985 /* This is the entry point used by the parser to build binary operators
2986 in the input. CODE, a tree_code, specifies the binary operator, and
2987 ARG1 and ARG2 are the operands. In addition to constructing the
2988 expression, we check for operands that were written with other binary
2989 operators in a way that is likely to confuse the user.
2991 LOCATION is the location of the binary operator. */
2994 parser_build_binary_op (location_t location, enum tree_code code,
2995 struct c_expr arg1, struct c_expr arg2)
2997 struct c_expr result;
2999 enum tree_code code1 = arg1.original_code;
3000 enum tree_code code2 = arg2.original_code;
3001 tree type1 = (arg1.original_type
3002 ? arg1.original_type
3003 : TREE_TYPE (arg1.value));
3004 tree type2 = (arg2.original_type
3005 ? arg2.original_type
3006 : TREE_TYPE (arg2.value));
3008 result.value = build_binary_op (location, code,
3009 arg1.value, arg2.value, 1);
3010 result.original_code = code;
3011 result.original_type = NULL;
3013 if (TREE_CODE (result.value) == ERROR_MARK)
3016 if (location != UNKNOWN_LOCATION)
3017 protected_set_expr_location (result.value, location);
3019 /* Check for cases such as x+y<<z which users are likely
3021 if (warn_parentheses)
3022 warn_about_parentheses (code, code1, arg1.value, code2, arg2.value);
3024 if (warn_logical_op)
3025 warn_logical_operator (input_location, code, TREE_TYPE (result.value),
3026 code1, arg1.value, code2, arg2.value);
3028 /* Warn about comparisons against string literals, with the exception
3029 of testing for equality or inequality of a string literal with NULL. */
3030 if (code == EQ_EXPR || code == NE_EXPR)
3032 if ((code1 == STRING_CST && !integer_zerop (arg2.value))
3033 || (code2 == STRING_CST && !integer_zerop (arg1.value)))
3034 warning_at (location, OPT_Waddress,
3035 "comparison with string literal results in unspecified behavior");
3037 else if (TREE_CODE_CLASS (code) == tcc_comparison
3038 && (code1 == STRING_CST || code2 == STRING_CST))
3039 warning_at (location, OPT_Waddress,
3040 "comparison with string literal results in unspecified behavior");
3042 if (TREE_OVERFLOW_P (result.value)
3043 && !TREE_OVERFLOW_P (arg1.value)
3044 && !TREE_OVERFLOW_P (arg2.value))
3045 overflow_warning (location, result.value);
3047 /* Warn about comparisons of different enum types. */
3048 if (warn_enum_compare
3049 && TREE_CODE_CLASS (code) == tcc_comparison
3050 && TREE_CODE (type1) == ENUMERAL_TYPE
3051 && TREE_CODE (type2) == ENUMERAL_TYPE
3052 && TYPE_MAIN_VARIANT (type1) != TYPE_MAIN_VARIANT (type2))
3053 warning_at (location, OPT_Wenum_compare,
3054 "comparison between %qT and %qT",
3060 /* Return a tree for the difference of pointers OP0 and OP1.
3061 The resulting tree has type int. */
3064 pointer_diff (tree op0, tree op1)
3066 tree restype = ptrdiff_type_node;
3068 tree target_type = TREE_TYPE (TREE_TYPE (op0));
3069 tree con0, con1, lit0, lit1;
3070 tree orig_op1 = op1;
3072 if (TREE_CODE (target_type) == VOID_TYPE)
3073 pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3074 "pointer of type %<void *%> used in subtraction");
3075 if (TREE_CODE (target_type) == FUNCTION_TYPE)
3076 pedwarn (input_location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3077 "pointer to a function used in subtraction");
3079 /* If the conversion to ptrdiff_type does anything like widening or
3080 converting a partial to an integral mode, we get a convert_expression
3081 that is in the way to do any simplifications.
3082 (fold-const.c doesn't know that the extra bits won't be needed.
3083 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
3084 different mode in place.)
3085 So first try to find a common term here 'by hand'; we want to cover
3086 at least the cases that occur in legal static initializers. */
3087 if (CONVERT_EXPR_P (op0)
3088 && (TYPE_PRECISION (TREE_TYPE (op0))
3089 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0)))))
3090 con0 = TREE_OPERAND (op0, 0);
3093 if (CONVERT_EXPR_P (op1)
3094 && (TYPE_PRECISION (TREE_TYPE (op1))
3095 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1, 0)))))
3096 con1 = TREE_OPERAND (op1, 0);
3100 if (TREE_CODE (con0) == PLUS_EXPR)
3102 lit0 = TREE_OPERAND (con0, 1);
3103 con0 = TREE_OPERAND (con0, 0);
3106 lit0 = integer_zero_node;
3108 if (TREE_CODE (con1) == PLUS_EXPR)
3110 lit1 = TREE_OPERAND (con1, 1);
3111 con1 = TREE_OPERAND (con1, 0);
3114 lit1 = integer_zero_node;
3116 if (operand_equal_p (con0, con1, 0))
3123 /* First do the subtraction as integers;
3124 then drop through to build the divide operator.
3125 Do not do default conversions on the minus operator
3126 in case restype is a short type. */
3128 op0 = build_binary_op (input_location,
3129 MINUS_EXPR, convert (restype, op0),
3130 convert (restype, op1), 0);
3131 /* This generates an error if op1 is pointer to incomplete type. */
3132 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
3133 error ("arithmetic on pointer to an incomplete type");
3135 /* This generates an error if op0 is pointer to incomplete type. */
3136 op1 = c_size_in_bytes (target_type);
3138 /* Divide by the size, in easiest possible way. */
3139 return fold_build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
3142 /* Construct and perhaps optimize a tree representation
3143 for a unary operation. CODE, a tree_code, specifies the operation
3144 and XARG is the operand.
3145 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
3146 the default promotions (such as from short to int).
3147 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
3148 allows non-lvalues; this is only used to handle conversion of non-lvalue
3149 arrays to pointers in C99.
3151 LOCATION is the location of the operator. */
3154 build_unary_op (location_t location,
3155 enum tree_code code, tree xarg, int flag)
3157 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
3160 enum tree_code typecode;
3162 tree ret = error_mark_node;
3163 tree eptype = NULL_TREE;
3164 int noconvert = flag;
3165 const char *invalid_op_diag;
3168 int_operands = EXPR_INT_CONST_OPERANDS (xarg);
3170 arg = remove_c_maybe_const_expr (arg);
3172 if (code != ADDR_EXPR)
3173 arg = require_complete_type (arg);
3175 typecode = TREE_CODE (TREE_TYPE (arg));
3176 if (typecode == ERROR_MARK)
3177 return error_mark_node;
3178 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
3179 typecode = INTEGER_TYPE;
3181 if ((invalid_op_diag
3182 = targetm.invalid_unary_op (code, TREE_TYPE (xarg))))
3184 error_at (location, invalid_op_diag);
3185 return error_mark_node;
3188 if (TREE_CODE (arg) == EXCESS_PRECISION_EXPR)
3190 eptype = TREE_TYPE (arg);
3191 arg = TREE_OPERAND (arg, 0);
3197 /* This is used for unary plus, because a CONVERT_EXPR
3198 is enough to prevent anybody from looking inside for
3199 associativity, but won't generate any code. */
3200 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
3201 || typecode == FIXED_POINT_TYPE || typecode == COMPLEX_TYPE
3202 || typecode == VECTOR_TYPE))
3204 error_at (location, "wrong type argument to unary plus");
3205 return error_mark_node;
3207 else if (!noconvert)
3208 arg = default_conversion (arg);
3209 arg = non_lvalue (arg);
3213 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
3214 || typecode == FIXED_POINT_TYPE || typecode == COMPLEX_TYPE
3215 || typecode == VECTOR_TYPE))
3217 error_at (location, "wrong type argument to unary minus");
3218 return error_mark_node;
3220 else if (!noconvert)
3221 arg = default_conversion (arg);
3225 /* ~ works on integer types and non float vectors. */
3226 if (typecode == INTEGER_TYPE
3227 || (typecode == VECTOR_TYPE
3228 && !VECTOR_FLOAT_TYPE_P (TREE_TYPE (arg))))
3231 arg = default_conversion (arg);
3233 else if (typecode == COMPLEX_TYPE)
3236 pedwarn (location, OPT_pedantic,
3237 "ISO C does not support %<~%> for complex conjugation");
3239 arg = default_conversion (arg);
3243 error_at (location, "wrong type argument to bit-complement");
3244 return error_mark_node;
3249 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
3251 error_at (location, "wrong type argument to abs");
3252 return error_mark_node;
3254 else if (!noconvert)
3255 arg = default_conversion (arg);
3259 /* Conjugating a real value is a no-op, but allow it anyway. */
3260 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
3261 || typecode == COMPLEX_TYPE))
3263 error_at (location, "wrong type argument to conjugation");
3264 return error_mark_node;
3266 else if (!noconvert)
3267 arg = default_conversion (arg);
3270 case TRUTH_NOT_EXPR:
3271 if (typecode != INTEGER_TYPE && typecode != FIXED_POINT_TYPE
3272 && typecode != REAL_TYPE && typecode != POINTER_TYPE
3273 && typecode != COMPLEX_TYPE)
3276 "wrong type argument to unary exclamation mark");
3277 return error_mark_node;
3279 arg = c_objc_common_truthvalue_conversion (location, arg);
3280 ret = invert_truthvalue (arg);
3281 /* If the TRUTH_NOT_EXPR has been folded, reset the location. */
3282 if (EXPR_P (ret) && EXPR_HAS_LOCATION (ret))
3283 location = EXPR_LOCATION (ret);
3284 goto return_build_unary_op;
3287 if (TREE_CODE (arg) == COMPLEX_CST)
3288 ret = TREE_REALPART (arg);
3289 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3290 ret = fold_build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
3293 if (eptype && TREE_CODE (eptype) == COMPLEX_TYPE)
3294 eptype = TREE_TYPE (eptype);
3295 goto return_build_unary_op;
3298 if (TREE_CODE (arg) == COMPLEX_CST)
3299 ret = TREE_IMAGPART (arg);
3300 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3301 ret = fold_build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
3303 ret = omit_one_operand (TREE_TYPE (arg), integer_zero_node, arg);
3304 if (eptype && TREE_CODE (eptype) == COMPLEX_TYPE)
3305 eptype = TREE_TYPE (eptype);
3306 goto return_build_unary_op;
3308 case PREINCREMENT_EXPR:
3309 case POSTINCREMENT_EXPR:
3310 case PREDECREMENT_EXPR:
3311 case POSTDECREMENT_EXPR:
3313 if (TREE_CODE (arg) == C_MAYBE_CONST_EXPR)
3315 tree inner = build_unary_op (location, code,
3316 C_MAYBE_CONST_EXPR_EXPR (arg), flag);
3317 if (inner == error_mark_node)
3318 return error_mark_node;
3319 ret = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (inner),
3320 C_MAYBE_CONST_EXPR_PRE (arg), inner);
3321 gcc_assert (!C_MAYBE_CONST_EXPR_INT_OPERANDS (arg));
3322 C_MAYBE_CONST_EXPR_NON_CONST (ret) = 1;
3323 goto return_build_unary_op;
3326 /* Complain about anything that is not a true lvalue. */
3327 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
3328 || code == POSTINCREMENT_EXPR)
3331 return error_mark_node;
3333 if (warn_cxx_compat && TREE_CODE (TREE_TYPE (arg)) == ENUMERAL_TYPE)
3335 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3336 warning_at (location, OPT_Wc___compat,
3337 "increment of enumeration value is invalid in C++");
3339 warning_at (location, OPT_Wc___compat,
3340 "decrement of enumeration value is invalid in C++");
3343 /* Ensure the argument is fully folded inside any SAVE_EXPR. */
3344 arg = c_fully_fold (arg, false, NULL);
3346 /* Increment or decrement the real part of the value,
3347 and don't change the imaginary part. */
3348 if (typecode == COMPLEX_TYPE)
3352 pedwarn (location, OPT_pedantic,
3353 "ISO C does not support %<++%> and %<--%> on complex types");
3355 arg = stabilize_reference (arg);
3356 real = build_unary_op (EXPR_LOCATION (arg), REALPART_EXPR, arg, 1);
3357 imag = build_unary_op (EXPR_LOCATION (arg), IMAGPART_EXPR, arg, 1);
3358 real = build_unary_op (EXPR_LOCATION (arg), code, real, 1);
3359 if (real == error_mark_node || imag == error_mark_node)
3360 return error_mark_node;
3361 ret = build2 (COMPLEX_EXPR, TREE_TYPE (arg),
3363 goto return_build_unary_op;
3366 /* Report invalid types. */
3368 if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
3369 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
3371 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3372 error_at (location, "wrong type argument to increment");
3374 error_at (location, "wrong type argument to decrement");
3376 return error_mark_node;
3382 argtype = TREE_TYPE (arg);
3384 /* Compute the increment. */
3386 if (typecode == POINTER_TYPE)
3388 /* If pointer target is an undefined struct,
3389 we just cannot know how to do the arithmetic. */
3390 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (argtype)))
3392 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3394 "increment of pointer to unknown structure");
3397 "decrement of pointer to unknown structure");
3399 else if (TREE_CODE (TREE_TYPE (argtype)) == FUNCTION_TYPE
3400 || TREE_CODE (TREE_TYPE (argtype)) == VOID_TYPE)
3402 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3403 pedwarn (location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3404 "wrong type argument to increment");
3406 pedwarn (location, pedantic ? OPT_pedantic : OPT_Wpointer_arith,
3407 "wrong type argument to decrement");
3410 inc = c_size_in_bytes (TREE_TYPE (argtype));
3411 inc = fold_convert (sizetype, inc);
3413 else if (FRACT_MODE_P (TYPE_MODE (argtype)))
3415 /* For signed fract types, we invert ++ to -- or
3416 -- to ++, and change inc from 1 to -1, because
3417 it is not possible to represent 1 in signed fract constants.
3418 For unsigned fract types, the result always overflows and
3419 we get an undefined (original) or the maximum value. */
3420 if (code == PREINCREMENT_EXPR)
3421 code = PREDECREMENT_EXPR;
3422 else if (code == PREDECREMENT_EXPR)
3423 code = PREINCREMENT_EXPR;
3424 else if (code == POSTINCREMENT_EXPR)
3425 code = POSTDECREMENT_EXPR;
3426 else /* code == POSTDECREMENT_EXPR */
3427 code = POSTINCREMENT_EXPR;
3429 inc = integer_minus_one_node;
3430 inc = convert (argtype, inc);
3434 inc = integer_one_node;
3435 inc = convert (argtype, inc);
3438 /* Report a read-only lvalue. */
3439 if (TYPE_READONLY (argtype))
3441 readonly_error (arg,
3442 ((code == PREINCREMENT_EXPR
3443 || code == POSTINCREMENT_EXPR)
3444 ? lv_increment : lv_decrement));
3445 return error_mark_node;
3447 else if (TREE_READONLY (arg))
3448 readonly_warning (arg,
3449 ((code == PREINCREMENT_EXPR
3450 || code == POSTINCREMENT_EXPR)
3451 ? lv_increment : lv_decrement));
3453 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
3454 val = boolean_increment (code, arg);
3456 val = build2 (code, TREE_TYPE (arg), arg, inc);
3457 TREE_SIDE_EFFECTS (val) = 1;
3458 if (TREE_CODE (val) != code)
3459 TREE_NO_WARNING (val) = 1;
3461 goto return_build_unary_op;
3465 /* Note that this operation never does default_conversion. */
3467 /* The operand of unary '&' must be an lvalue (which excludes
3468 expressions of type void), or, in C99, the result of a [] or
3469 unary '*' operator. */
3470 if (VOID_TYPE_P (TREE_TYPE (arg))
3471 && TYPE_QUALS (TREE_TYPE (arg)) == TYPE_UNQUALIFIED
3472 && (TREE_CODE (arg) != INDIRECT_REF
3474 pedwarn (location, 0, "taking address of expression of type %<void%>");
3476 /* Let &* cancel out to simplify resulting code. */
3477 if (TREE_CODE (arg) == INDIRECT_REF)
3479 /* Don't let this be an lvalue. */
3480 if (lvalue_p (TREE_OPERAND (arg, 0)))
3481 return non_lvalue (TREE_OPERAND (arg, 0));
3482 ret = TREE_OPERAND (arg, 0);
3483 goto return_build_unary_op;
3486 /* For &x[y], return x+y */
3487 if (TREE_CODE (arg) == ARRAY_REF)
3489 tree op0 = TREE_OPERAND (arg, 0);
3490 if (!c_mark_addressable (op0))
3491 return error_mark_node;
3492 return build_binary_op (location, PLUS_EXPR,
3493 (TREE_CODE (TREE_TYPE (op0)) == ARRAY_TYPE
3494 ? array_to_pointer_conversion (location,
3497 TREE_OPERAND (arg, 1), 1);
3500 /* Anything not already handled and not a true memory reference
3501 or a non-lvalue array is an error. */
3502 else if (typecode != FUNCTION_TYPE && !flag
3503 && !lvalue_or_else (arg, lv_addressof))
3504 return error_mark_node;
3506 /* Move address operations inside C_MAYBE_CONST_EXPR to simplify
3508 if (TREE_CODE (arg) == C_MAYBE_CONST_EXPR)
3510 tree inner = build_unary_op (location, code,
3511 C_MAYBE_CONST_EXPR_EXPR (arg), flag);
3512 ret = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (inner),
3513 C_MAYBE_CONST_EXPR_PRE (arg), inner);
3514 gcc_assert (!C_MAYBE_CONST_EXPR_INT_OPERANDS (arg));
3515 C_MAYBE_CONST_EXPR_NON_CONST (ret)
3516 = C_MAYBE_CONST_EXPR_NON_CONST (arg);
3517 goto return_build_unary_op;
3520 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
3521 argtype = TREE_TYPE (arg);
3523 /* If the lvalue is const or volatile, merge that into the type
3524 to which the address will point. Note that you can't get a
3525 restricted pointer by taking the address of something, so we
3526 only have to deal with `const' and `volatile' here. */
3527 if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
3528 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
3529 argtype = c_build_type_variant (argtype,
3530 TREE_READONLY (arg),
3531 TREE_THIS_VOLATILE (arg));
3533 if (!c_mark_addressable (arg))
3534 return error_mark_node;
3536 gcc_assert (TREE_CODE (arg) != COMPONENT_REF
3537 || !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)));
3539 argtype = build_pointer_type (argtype);
3541 /* ??? Cope with user tricks that amount to offsetof. Delete this
3542 when we have proper support for integer constant expressions. */
3543 val = get_base_address (arg);
3544 if (val && TREE_CODE (val) == INDIRECT_REF
3545 && TREE_CONSTANT (TREE_OPERAND (val, 0)))
3547 tree op0 = fold_convert (sizetype, fold_offsetof (arg, val)), op1;
3549 op1 = fold_convert (argtype, TREE_OPERAND (val, 0));
3550 ret = fold_build2 (POINTER_PLUS_EXPR, argtype, op1, op0);
3551 goto return_build_unary_op;
3554 val = build1 (ADDR_EXPR, argtype, arg);
3557 goto return_build_unary_op;
3564 argtype = TREE_TYPE (arg);
3565 if (TREE_CODE (arg) == INTEGER_CST)
3566 ret = (require_constant_value
3567 ? fold_build1_initializer (code, argtype, arg)
3568 : fold_build1 (code, argtype, arg));
3570 ret = build1 (code, argtype, arg);
3571 return_build_unary_op:
3572 gcc_assert (ret != error_mark_node);
3573 if (TREE_CODE (ret) == INTEGER_CST && !TREE_OVERFLOW (ret)
3574 && !(TREE_CODE (xarg) == INTEGER_CST && !TREE_OVERFLOW (xarg)))
3575 ret = build1 (NOP_EXPR, TREE_TYPE (ret), ret);
3576 else if (TREE_CODE (ret) != INTEGER_CST && int_operands)
3577 ret = note_integer_operands (ret);
3579 ret = build1 (EXCESS_PRECISION_EXPR, eptype, ret);
3580 protected_set_expr_location (ret, location);
3584 /* Return nonzero if REF is an lvalue valid for this language.
3585 Lvalues can be assigned, unless their type has TYPE_READONLY.
3586 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
3589 lvalue_p (const_tree ref)
3591 const enum tree_code code = TREE_CODE (ref);
3598 return lvalue_p (TREE_OPERAND (ref, 0));
3600 case C_MAYBE_CONST_EXPR:
3601 return lvalue_p (TREE_OPERAND (ref, 1));
3603 case COMPOUND_LITERAL_EXPR:
3613 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3614 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
3617 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
3624 /* Give an error for storing in something that is 'const'. */
3627 readonly_error (tree arg, enum lvalue_use use)
3629 gcc_assert (use == lv_assign || use == lv_increment || use == lv_decrement
3631 /* Using this macro rather than (for example) arrays of messages
3632 ensures that all the format strings are checked at compile
3634 #define READONLY_MSG(A, I, D, AS) (use == lv_assign ? (A) \
3635 : (use == lv_increment ? (I) \
3636 : (use == lv_decrement ? (D) : (AS))))
3637 if (TREE_CODE (arg) == COMPONENT_REF)
3639 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3640 readonly_error (TREE_OPERAND (arg, 0), use);
3642 error (READONLY_MSG (G_("assignment of read-only member %qD"),
3643 G_("increment of read-only member %qD"),
3644 G_("decrement of read-only member %qD"),
3645 G_("read-only member %qD used as %<asm%> output")),
3646 TREE_OPERAND (arg, 1));
3648 else if (TREE_CODE (arg) == VAR_DECL)
3649 error (READONLY_MSG (G_("assignment of read-only variable %qD"),
3650 G_("increment of read-only variable %qD"),
3651 G_("decrement of read-only variable %qD"),
3652 G_("read-only variable %qD used as %<asm%> output")),
3655 error (READONLY_MSG (G_("assignment of read-only location %qE"),
3656 G_("increment of read-only location %qE"),
3657 G_("decrement of read-only location %qE"),
3658 G_("read-only location %qE used as %<asm%> output")),
3662 /* Give a warning for storing in something that is read-only in GCC
3663 terms but not const in ISO C terms. */
3666 readonly_warning (tree arg, enum lvalue_use use)
3671 warning (0, "assignment of read-only location %qE", arg);
3674 warning (0, "increment of read-only location %qE", arg);
3677 warning (0, "decrement of read-only location %qE", arg);
3686 /* Return nonzero if REF is an lvalue valid for this language;
3687 otherwise, print an error message and return zero. USE says
3688 how the lvalue is being used and so selects the error message. */
3691 lvalue_or_else (const_tree ref, enum lvalue_use use)
3693 int win = lvalue_p (ref);
3701 /* Mark EXP saying that we need to be able to take the
3702 address of it; it should not be allocated in a register.
3703 Returns true if successful. */
3706 c_mark_addressable (tree exp)
3711 switch (TREE_CODE (x))
3714 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
3717 ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
3721 /* ... fall through ... */
3727 x = TREE_OPERAND (x, 0);
3730 case COMPOUND_LITERAL_EXPR:
3732 TREE_ADDRESSABLE (x) = 1;
3739 if (C_DECL_REGISTER (x)
3740 && DECL_NONLOCAL (x))
3742 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
3745 ("global register variable %qD used in nested function", x);
3748 pedwarn (input_location, 0, "register variable %qD used in nested function", x);
3750 else if (C_DECL_REGISTER (x))
3752 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
3753 error ("address of global register variable %qD requested", x);
3755 error ("address of register variable %qD requested", x);
3761 TREE_ADDRESSABLE (x) = 1;
3768 /* Build and return a conditional expression IFEXP ? OP1 : OP2. If
3769 IFEXP_BCP then the condition is a call to __builtin_constant_p, and
3770 if folded to an integer constant then the unselected half may
3771 contain arbitrary operations not normally permitted in constant
3772 expressions. Set the location of the expression to LOC. */
3775 build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
3780 enum tree_code code1;
3781 enum tree_code code2;
3782 tree result_type = NULL;
3783 tree ep_result_type = NULL;
3784 tree orig_op1 = op1, orig_op2 = op2;
3785 bool int_const, op1_int_operands, op2_int_operands, int_operands;
3786 bool ifexp_int_operands;
3790 op1_int_operands = EXPR_INT_CONST_OPERANDS (orig_op1);
3791 if (op1_int_operands)
3792 op1 = remove_c_maybe_const_expr (op1);
3793 op2_int_operands = EXPR_INT_CONST_OPERANDS (orig_op2);
3794 if (op2_int_operands)
3795 op2 = remove_c_maybe_const_expr (op2);
3796 ifexp_int_operands = EXPR_INT_CONST_OPERANDS (ifexp);
3797 if (ifexp_int_operands)
3798 ifexp = remove_c_maybe_const_expr (ifexp);
3800 /* Promote both alternatives. */
3802 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3803 op1 = default_conversion (op1);
3804 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3805 op2 = default_conversion (op2);
3807 if (TREE_CODE (ifexp) == ERROR_MARK
3808 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3809 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3810 return error_mark_node;
3812 type1 = TREE_TYPE (op1);
3813 code1 = TREE_CODE (type1);
3814 type2 = TREE_TYPE (op2);
3815 code2 = TREE_CODE (type2);
3817 /* C90 does not permit non-lvalue arrays in conditional expressions.
3818 In C99 they will be pointers by now. */
3819 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
3821 error_at (colon_loc, "non-lvalue array in conditional expression");
3822 return error_mark_node;
3825 objc_ok = objc_compare_types (type1, type2, -3, NULL_TREE);
3827 if ((TREE_CODE (op1) == EXCESS_PRECISION_EXPR
3828 || TREE_CODE (op2) == EXCESS_PRECISION_EXPR)
3829 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
3830 || code1 == COMPLEX_TYPE)
3831 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3832 || code2 == COMPLEX_TYPE))
3834 ep_result_type = c_common_type (type1, type2);
3835 if (TREE_CODE (op1) == EXCESS_PRECISION_EXPR)
3837 op1 = TREE_OPERAND (op1, 0);
3838 type1 = TREE_TYPE (op1);
3839 gcc_assert (TREE_CODE (type1) == code1);
3841 if (TREE_CODE (op2) == EXCESS_PRECISION_EXPR)
3843 op2 = TREE_OPERAND (op2, 0);
3844 type2 = TREE_TYPE (op2);
3845 gcc_assert (TREE_CODE (type2) == code2);
3849 /* Quickly detect the usual case where op1 and op2 have the same type
3851 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3854 result_type = type1;
3856 result_type = TYPE_MAIN_VARIANT (type1);
3858 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
3859 || code1 == COMPLEX_TYPE)
3860 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3861 || code2 == COMPLEX_TYPE))
3863 result_type = c_common_type (type1, type2);
3865 /* If -Wsign-compare, warn here if type1 and type2 have
3866 different signedness. We'll promote the signed to unsigned
3867 and later code won't know it used to be different.
3868 Do this check on the original types, so that explicit casts
3869 will be considered, but default promotions won't. */
3870 if (!skip_evaluation)
3872 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3873 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
3875 if (unsigned_op1 ^ unsigned_op2)
3879 /* Do not warn if the result type is signed, since the
3880 signed type will only be chosen if it can represent
3881 all the values of the unsigned type. */
3882 if (!TYPE_UNSIGNED (result_type))
3886 bool op1_maybe_const = true;
3887 bool op2_maybe_const = true;
3889 /* Do not warn if the signed quantity is an
3890 unsuffixed integer literal (or some static
3891 constant expression involving such literals) and
3892 it is non-negative. This warning requires the
3893 operands to be folded for best results, so do
3894 that folding in this case even without
3895 warn_sign_compare to avoid warning options
3896 possibly affecting code generation. */
3897 op1 = c_fully_fold (op1, require_constant_value,
3899 op2 = c_fully_fold (op2, require_constant_value,
3902 if (warn_sign_compare)
3905 && tree_expr_nonnegative_warnv_p (op1, &ovf))
3907 && tree_expr_nonnegative_warnv_p (op2, &ovf)))
3910 warning_at (colon_loc, OPT_Wsign_compare,
3911 ("signed and unsigned type in "
3912 "conditional expression"));
3914 if (!op1_maybe_const || TREE_CODE (op1) != INTEGER_CST)
3916 op1 = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (op1),
3918 C_MAYBE_CONST_EXPR_NON_CONST (op1) = !op1_maybe_const;
3920 if (!op2_maybe_const || TREE_CODE (op2) != INTEGER_CST)
3922 op2 = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (op2),
3924 C_MAYBE_CONST_EXPR_NON_CONST (op2) = !op2_maybe_const;
3930 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3932 if (code1 != VOID_TYPE || code2 != VOID_TYPE)
3933 pedwarn (colon_loc, OPT_pedantic,
3934 "ISO C forbids conditional expr with only one void side");
3935 result_type = void_type_node;
3937 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3939 if (comp_target_types (colon_loc, type1, type2))
3940 result_type = common_pointer_type (type1, type2);
3941 else if (null_pointer_constant_p (orig_op1))
3942 result_type = qualify_type (type2, type1);
3943 else if (null_pointer_constant_p (orig_op2))
3944 result_type = qualify_type (type1, type2);
3945 else if (VOID_TYPE_P (TREE_TYPE (type1)))
3947 if (TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3948 pedwarn (colon_loc, OPT_pedantic,
3949 "ISO C forbids conditional expr between "
3950 "%<void *%> and function pointer");
3951 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
3952 TREE_TYPE (type2)));
3954 else if (VOID_TYPE_P (TREE_TYPE (type2)))
3956 if (TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3957 pedwarn (colon_loc, OPT_pedantic,
3958 "ISO C forbids conditional expr between "
3959 "%<void *%> and function pointer");
3960 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
3961 TREE_TYPE (type1)));
3966 pedwarn (colon_loc, 0,
3967 "pointer type mismatch in conditional expression");
3968 result_type = build_pointer_type (void_type_node);
3971 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3973 if (!null_pointer_constant_p (orig_op2))
3974 pedwarn (colon_loc, 0,
3975 "pointer/integer type mismatch in conditional expression");
3978 op2 = null_pointer_node;
3980 result_type = type1;
3982 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3984 if (!null_pointer_constant_p (orig_op1))
3985 pedwarn (colon_loc, 0,
3986 "pointer/integer type mismatch in conditional expression");
3989 op1 = null_pointer_node;
3991 result_type = type2;
3996 if (flag_cond_mismatch)
3997 result_type = void_type_node;
4000 error_at (colon_loc, "type mismatch in conditional expression");
4001 return error_mark_node;
4005 /* Merge const and volatile flags of the incoming types. */
4007 = build_type_variant (result_type,
4008 TREE_READONLY (op1) || TREE_READONLY (op2),
4009 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
4011 if (result_type != TREE_TYPE (op1))
4012 op1 = convert_and_check (result_type, op1);
4013 if (result_type != TREE_TYPE (op2))
4014 op2 = convert_and_check (result_type, op2);
4016 if (ifexp_bcp && ifexp == truthvalue_true_node)
4018 op2_int_operands = true;
4019 op1 = c_fully_fold (op1, require_constant_value, NULL);
4021 if (ifexp_bcp && ifexp == truthvalue_false_node)
4023 op1_int_operands = true;
4024 op2 = c_fully_fold (op2, require_constant_value, NULL);
4026 int_const = int_operands = (ifexp_int_operands
4028 && op2_int_operands);
4031 int_const = ((ifexp == truthvalue_true_node
4032 && TREE_CODE (orig_op1) == INTEGER_CST
4033 && !TREE_OVERFLOW (orig_op1))
4034 || (ifexp == truthvalue_false_node
4035 && TREE_CODE (orig_op2) == INTEGER_CST
4036 && !TREE_OVERFLOW (orig_op2)));
4038 if (int_const || (ifexp_bcp && TREE_CODE (ifexp) == INTEGER_CST))
4039 ret = fold_build3 (COND_EXPR, result_type, ifexp, op1, op2);
4042 ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
4044 ret = note_integer_operands (ret);
4047 ret = build1 (EXCESS_PRECISION_EXPR, ep_result_type, ret);
4049 protected_set_expr_location (ret, colon_loc);
4053 /* Return a compound expression that performs two expressions and
4054 returns the value of the second of them.
4056 LOC is the location of the COMPOUND_EXPR. */
4059 build_compound_expr (location_t loc, tree expr1, tree expr2)
4061 bool expr1_int_operands, expr2_int_operands;
4062 tree eptype = NULL_TREE;
4065 expr1_int_operands = EXPR_INT_CONST_OPERANDS (expr1);
4066 if (expr1_int_operands)
4067 expr1 = remove_c_maybe_const_expr (expr1);
4068 expr2_int_operands = EXPR_INT_CONST_OPERANDS (expr2);
4069 if (expr2_int_operands)
4070 expr2 = remove_c_maybe_const_expr (expr2);
4072 if (TREE_CODE (expr1) == EXCESS_PRECISION_EXPR)
4073 expr1 = TREE_OPERAND (expr1, 0);
4074 if (TREE_CODE (expr2) == EXCESS_PRECISION_EXPR)
4076 eptype = TREE_TYPE (expr2);
4077 expr2 = TREE_OPERAND (expr2, 0);
4080 if (!TREE_SIDE_EFFECTS (expr1))
4082 /* The left-hand operand of a comma expression is like an expression
4083 statement: with -Wunused, we should warn if it doesn't have
4084 any side-effects, unless it was explicitly cast to (void). */
4085 if (warn_unused_value)
4087 if (VOID_TYPE_P (TREE_TYPE (expr1))
4088 && CONVERT_EXPR_P (expr1))
4090 else if (VOID_TYPE_P (TREE_TYPE (expr1))
4091 && TREE_CODE (expr1) == COMPOUND_EXPR
4092 && CONVERT_EXPR_P (TREE_OPERAND (expr1, 1)))
4093 ; /* (void) a, (void) b, c */
4095 warning_at (loc, OPT_Wunused_value,
4096 "left-hand operand of comma expression has no effect");
4100 /* With -Wunused, we should also warn if the left-hand operand does have
4101 side-effects, but computes a value which is not used. For example, in
4102 `foo() + bar(), baz()' the result of the `+' operator is not used,
4103 so we should issue a warning. */
4104 else if (warn_unused_value)
4105 warn_if_unused_value (expr1, loc);
4107 if (expr2 == error_mark_node)
4108 return error_mark_node;
4110 ret = build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
4113 && expr1_int_operands
4114 && expr2_int_operands)
4115 ret = note_integer_operands (ret);
4118 ret = build1 (EXCESS_PRECISION_EXPR, eptype, ret);
4120 protected_set_expr_location (ret, loc);
4124 /* Issue -Wcast-qual warnings when appropriate. TYPE is the type to
4125 which we are casting. OTYPE is the type of the expression being
4126 cast. Both TYPE and OTYPE are pointer types. -Wcast-qual appeared
4127 on the command line. */
4130 handle_warn_cast_qual (tree type, tree otype)
4132 tree in_type = type;
4133 tree in_otype = otype;
4138 /* Check that the qualifiers on IN_TYPE are a superset of the
4139 qualifiers of IN_OTYPE. The outermost level of POINTER_TYPE
4140 nodes is uninteresting and we stop as soon as we hit a
4141 non-POINTER_TYPE node on either type. */
4144 in_otype = TREE_TYPE (in_otype);
4145 in_type = TREE_TYPE (in_type);
4147 /* GNU C allows cv-qualified function types. 'const' means the
4148 function is very pure, 'volatile' means it can't return. We
4149 need to warn when such qualifiers are added, not when they're
4151 if (TREE_CODE (in_otype) == FUNCTION_TYPE
4152 && TREE_CODE (in_type) == FUNCTION_TYPE)
4153 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
4155 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
4157 while (TREE_CODE (in_type) == POINTER_TYPE
4158 && TREE_CODE (in_otype) == POINTER_TYPE);
4161 warning (OPT_Wcast_qual, "cast adds new qualifiers to function type");
4164 /* There are qualifiers present in IN_OTYPE that are not present
4166 warning (OPT_Wcast_qual,
4167 "cast discards qualifiers from pointer target type");
4169 if (added || discarded)
4172 /* A cast from **T to const **T is unsafe, because it can cause a
4173 const value to be changed with no additional warning. We only
4174 issue this warning if T is the same on both sides, and we only
4175 issue the warning if there are the same number of pointers on
4176 both sides, as otherwise the cast is clearly unsafe anyhow. A
4177 cast is unsafe when a qualifier is added at one level and const
4178 is not present at all outer levels.
4180 To issue this warning, we check at each level whether the cast
4181 adds new qualifiers not already seen. We don't need to special
4182 case function types, as they won't have the same
4183 TYPE_MAIN_VARIANT. */
4185 if (TYPE_MAIN_VARIANT (in_type) != TYPE_MAIN_VARIANT (in_otype))
4187 if (TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE)
4192 is_const = TYPE_READONLY (TREE_TYPE (in_type));
4195 in_type = TREE_TYPE (in_type);
4196 in_otype = TREE_TYPE (in_otype);
4197 if ((TYPE_QUALS (in_type) &~ TYPE_QUALS (in_otype)) != 0
4200 warning (OPT_Wcast_qual,
4201 ("new qualifiers in middle of multi-level non-const cast "
4206 is_const = TYPE_READONLY (in_type);
4208 while (TREE_CODE (in_type) == POINTER_TYPE);
4211 /* Build an expression representing a cast to type TYPE of expression EXPR.
4212 LOC is the location of the cast-- typically the open paren of the cast. */
4215 build_c_cast (location_t loc, tree type, tree expr)
4219 if (TREE_CODE (expr) == EXCESS_PRECISION_EXPR)
4220 expr = TREE_OPERAND (expr, 0);
4224 if (type == error_mark_node || expr == error_mark_node)
4225 return error_mark_node;
4227 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
4228 only in <protocol> qualifications. But when constructing cast expressions,
4229 the protocols do matter and must be kept around. */
4230 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
4231 return build1 (NOP_EXPR, type, expr);
4233 type = TYPE_MAIN_VARIANT (type);
4235 if (TREE_CODE (type) == ARRAY_TYPE)
4237 error_at (loc, "cast specifies array type");
4238 return error_mark_node;
4241 if (TREE_CODE (type) == FUNCTION_TYPE)
4243 error_at (loc, "cast specifies function type");
4244 return error_mark_node;
4247 if (!VOID_TYPE_P (type))
4249 value = require_complete_type (value);
4250 if (value == error_mark_node)
4251 return error_mark_node;
4254 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
4256 if (TREE_CODE (type) == RECORD_TYPE
4257 || TREE_CODE (type) == UNION_TYPE)
4258 pedwarn (loc, OPT_pedantic,
4259 "ISO C forbids casting nonscalar to the same type");
4261 else if (TREE_CODE (type) == UNION_TYPE)
4265 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
4266 if (TREE_TYPE (field) != error_mark_node
4267 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
4268 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
4275 pedwarn (loc, OPT_pedantic, "ISO C forbids casts to union type");
4276 t = digest_init (loc, type,
4277 build_constructor_single (type, field, value),
4278 NULL_TREE, false, true, 0);
4279 TREE_CONSTANT (t) = TREE_CONSTANT (value);
4282 error_at (loc, "cast to union type from type not present in union");
4283 return error_mark_node;
4289 if (type == void_type_node)
4291 tree t = build1 (CONVERT_EXPR, type, value);
4292 SET_EXPR_LOCATION (t, loc);
4296 otype = TREE_TYPE (value);
4298 /* Optionally warn about potentially worrisome casts. */
4300 && TREE_CODE (type) == POINTER_TYPE
4301 && TREE_CODE (otype) == POINTER_TYPE)
4302 handle_warn_cast_qual (type, otype);
4304 /* Warn about possible alignment problems. */
4305 if (STRICT_ALIGNMENT
4306 && TREE_CODE (type) == POINTER_TYPE
4307 && TREE_CODE (otype) == POINTER_TYPE
4308 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
4309 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
4310 /* Don't warn about opaque types, where the actual alignment
4311 restriction is unknown. */
4312 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
4313 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
4314 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
4315 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
4316 warning_at (loc, OPT_Wcast_align,
4317 "cast increases required alignment of target type");
4319 if (TREE_CODE (type) == INTEGER_TYPE
4320 && TREE_CODE (otype) == POINTER_TYPE
4321 && TYPE_PRECISION (type) != TYPE_PRECISION (otype))
4322 /* Unlike conversion of integers to pointers, where the
4323 warning is disabled for converting constants because
4324 of cases such as SIG_*, warn about converting constant
4325 pointers to integers. In some cases it may cause unwanted
4326 sign extension, and a warning is appropriate. */
4327 warning_at (loc, OPT_Wpointer_to_int_cast,
4328 "cast from pointer to integer of different size");
4330 if (TREE_CODE (value) == CALL_EXPR
4331 && TREE_CODE (type) != TREE_CODE (otype))
4332 warning_at (loc, OPT_Wbad_function_cast,
4333 "cast from function call of type %qT "
4334 "to non-matching type %qT", otype, type);
4336 if (TREE_CODE (type) == POINTER_TYPE
4337 && TREE_CODE (otype) == INTEGER_TYPE
4338 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
4339 /* Don't warn about converting any constant. */
4340 && !TREE_CONSTANT (value))
4342 OPT_Wint_to_pointer_cast, "cast to pointer from integer "
4343 "of different size");
4345 if (warn_strict_aliasing <= 2)
4346 strict_aliasing_warning (otype, type, expr);
4348 /* If pedantic, warn for conversions between function and object
4349 pointer types, except for converting a null pointer constant
4350 to function pointer type. */
4352 && TREE_CODE (type) == POINTER_TYPE
4353 && TREE_CODE (otype) == POINTER_TYPE
4354 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
4355 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
4356 pedwarn (loc, OPT_pedantic, "ISO C forbids "
4357 "conversion of function pointer to object pointer type");
4360 && TREE_CODE (type) == POINTER_TYPE
4361 && TREE_CODE (otype) == POINTER_TYPE
4362 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
4363 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
4364 && !null_pointer_constant_p (value))
4365 pedwarn (loc, OPT_pedantic, "ISO C forbids "
4366 "conversion of object pointer to function pointer type");
4369 value = convert (type, value);
4371 /* Ignore any integer overflow caused by the cast. */
4372 if (TREE_CODE (value) == INTEGER_CST && !FLOAT_TYPE_P (otype))
4374 if (CONSTANT_CLASS_P (ovalue) && TREE_OVERFLOW (ovalue))
4376 if (!TREE_OVERFLOW (value))
4378 /* Avoid clobbering a shared constant. */
4379 value = copy_node (value);
4380 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
4383 else if (TREE_OVERFLOW (value))
4384 /* Reset VALUE's overflow flags, ensuring constant sharing. */
4385 value = build_int_cst_wide (TREE_TYPE (value),
4386 TREE_INT_CST_LOW (value),
4387 TREE_INT_CST_HIGH (value));
4391 /* Don't let a cast be an lvalue. */
4393 value = non_lvalue (value);
4395 /* Don't allow the results of casting to floating-point or complex
4396 types be confused with actual constants, or casts involving
4397 integer and pointer types other than direct integer-to-integer
4398 and integer-to-pointer be confused with integer constant
4399 expressions and null pointer constants. */
4400 if (TREE_CODE (value) == REAL_CST
4401 || TREE_CODE (value) == COMPLEX_CST
4402 || (TREE_CODE (value) == INTEGER_CST
4403 && !((TREE_CODE (expr) == INTEGER_CST
4404 && INTEGRAL_TYPE_P (TREE_TYPE (expr)))
4405 || TREE_CODE (expr) == REAL_CST
4406 || TREE_CODE (expr) == COMPLEX_CST)))
4407 value = build1 (NOP_EXPR, type, value);
4409 if (CAN_HAVE_LOCATION_P (value))
4410 SET_EXPR_LOCATION (value, loc);
4414 /* Interpret a cast of expression EXPR to type TYPE. LOC is the
4415 location of the open paren of the cast, or the position of the cast
4418 c_cast_expr (location_t loc, struct c_type_name *type_name, tree expr)
4421 tree type_expr = NULL_TREE;
4422 bool type_expr_const = true;
4424 int saved_wsp = warn_strict_prototypes;
4426 /* This avoids warnings about unprototyped casts on
4427 integers. E.g. "#define SIG_DFL (void(*)())0". */
4428 if (TREE_CODE (expr) == INTEGER_CST)
4429 warn_strict_prototypes = 0;
4430 type = groktypename (type_name, &type_expr, &type_expr_const);
4431 warn_strict_prototypes = saved_wsp;
4433 ret = build_c_cast (loc, type, expr);
4436 ret = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (ret), type_expr, ret);
4437 C_MAYBE_CONST_EXPR_NON_CONST (ret) = !type_expr_const;
4438 SET_EXPR_LOCATION (ret, loc);
4441 if (CAN_HAVE_LOCATION_P (ret) && !EXPR_HAS_LOCATION (ret))
4442 SET_EXPR_LOCATION (ret, loc);
4444 /* C++ does not permits types to be defined in a cast. */
4445 if (warn_cxx_compat && type_name->specs->tag_defined_p)
4446 warning_at (loc, OPT_Wc___compat,
4447 "defining a type in a cast is invalid in C++");
4452 /* Build an assignment expression of lvalue LHS from value RHS.
4453 If LHS_ORIGTYPE is not NULL, it is the original type of LHS, which
4454 may differ from TREE_TYPE (LHS) for an enum bitfield.
4455 MODIFYCODE is the code for a binary operator that we use
4456 to combine the old value of LHS with RHS to get the new value.
4457 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
4458 If RHS_ORIGTYPE is not NULL_TREE, it is the original type of RHS,
4459 which may differ from TREE_TYPE (RHS) for an enum value.
4461 LOCATION is the location of the MODIFYCODE operator.
4462 RHS_LOC is the location of the RHS. */
4465 build_modify_expr (location_t location, tree lhs, tree lhs_origtype,
4466 enum tree_code modifycode,
4467 location_t rhs_loc, tree rhs, tree rhs_origtype)
4471 tree rhs_semantic_type = NULL_TREE;
4472 tree lhstype = TREE_TYPE (lhs);
4473 tree olhstype = lhstype;
4476 /* Types that aren't fully specified cannot be used in assignments. */
4477 lhs = require_complete_type (lhs);
4479 /* Avoid duplicate error messages from operands that had errors. */
4480 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
4481 return error_mark_node;
4483 if (!lvalue_or_else (lhs, lv_assign))
4484 return error_mark_node;
4486 if (TREE_CODE (rhs) == EXCESS_PRECISION_EXPR)
4488 rhs_semantic_type = TREE_TYPE (rhs);
4489 rhs = TREE_OPERAND (rhs, 0);
4494 if (TREE_CODE (lhs) == C_MAYBE_CONST_EXPR)
4496 tree inner = build_modify_expr (location, C_MAYBE_CONST_EXPR_EXPR (lhs),
4497 lhs_origtype, modifycode, rhs_loc, rhs,
4499 if (inner == error_mark_node)
4500 return error_mark_node;
4501 result = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (inner),
4502 C_MAYBE_CONST_EXPR_PRE (lhs), inner);
4503 gcc_assert (!C_MAYBE_CONST_EXPR_INT_OPERANDS (lhs));
4504 C_MAYBE_CONST_EXPR_NON_CONST (result) = 1;
4505 protected_set_expr_location (result, location);
4509 /* If a binary op has been requested, combine the old LHS value with the RHS
4510 producing the value we should actually store into the LHS. */
4512 if (modifycode != NOP_EXPR)
4514 lhs = c_fully_fold (lhs, false, NULL);
4515 lhs = stabilize_reference (lhs);
4516 newrhs = build_binary_op (location,
4517 modifycode, lhs, rhs, 1);
4519 /* The original type of the right hand side is no longer
4521 rhs_origtype = NULL_TREE;
4524 /* Give an error for storing in something that is 'const'. */
4526 if (TYPE_READONLY (lhstype)
4527 || ((TREE_CODE (lhstype) == RECORD_TYPE
4528 || TREE_CODE (lhstype) == UNION_TYPE)
4529 && C_TYPE_FIELDS_READONLY (lhstype)))
4531 readonly_error (lhs, lv_assign);
4532 return error_mark_node;
4534 else if (TREE_READONLY (lhs))
4535 readonly_warning (lhs, lv_assign);
4537 /* If storing into a structure or union member,
4538 it has probably been given type `int'.
4539 Compute the type that would go with
4540 the actual amount of storage the member occupies. */
4542 if (TREE_CODE (lhs) == COMPONENT_REF
4543 && (TREE_CODE (lhstype) == INTEGER_TYPE
4544 || TREE_CODE (lhstype) == BOOLEAN_TYPE
4545 || TREE_CODE (lhstype) == REAL_TYPE
4546 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
4547 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
4549 /* If storing in a field that is in actuality a short or narrower than one,
4550 we must store in the field in its actual type. */
4552 if (lhstype != TREE_TYPE (lhs))
4554 lhs = copy_node (lhs);
4555 TREE_TYPE (lhs) = lhstype;
4558 /* Issue -Wc++-compat warnings about an assignment to an enum type
4559 when LHS does not have its original type. This happens for,
4560 e.g., an enum bitfield in a struct. */
4562 && lhs_origtype != NULL_TREE
4563 && lhs_origtype != lhstype
4564 && TREE_CODE (lhs_origtype) == ENUMERAL_TYPE)
4566 tree checktype = (rhs_origtype != NULL_TREE
4569 if (checktype != error_mark_node
4570 && TYPE_MAIN_VARIANT (checktype) != TYPE_MAIN_VARIANT (lhs_origtype))
4571 warning_at (location, OPT_Wc___compat,
4572 "enum conversion in assignment is invalid in C++");
4575 /* Convert new value to destination type. Fold it first, then
4576 restore any excess precision information, for the sake of
4577 conversion warnings. */
4579 npc = null_pointer_constant_p (newrhs);
4580 newrhs = c_fully_fold (newrhs, false, NULL);
4581 if (rhs_semantic_type)
4582 newrhs = build1 (EXCESS_PRECISION_EXPR, rhs_semantic_type, newrhs);
4583 newrhs = convert_for_assignment (location, lhstype, newrhs, rhs_origtype,
4584 ic_assign, npc, NULL_TREE, NULL_TREE, 0);
4585 if (TREE_CODE (newrhs) == ERROR_MARK)
4586 return error_mark_node;
4588 /* Emit ObjC write barrier, if necessary. */
4589 if (c_dialect_objc () && flag_objc_gc)
4591 result = objc_generate_write_barrier (lhs, modifycode, newrhs);
4594 protected_set_expr_location (result, location);
4599 /* Scan operands. */
4601 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
4602 TREE_SIDE_EFFECTS (result) = 1;
4603 protected_set_expr_location (result, location);
4605 /* If we got the LHS in a different type for storing in,
4606 convert the result back to the nominal type of LHS
4607 so that the value we return always has the same type
4608 as the LHS argument. */
4610 if (olhstype == TREE_TYPE (result))
4613 result = convert_for_assignment (location, olhstype, result, rhs_origtype,
4614 ic_assign, false, NULL_TREE, NULL_TREE, 0);
4615 protected_set_expr_location (result, location);
4619 /* Convert value RHS to type TYPE as preparation for an assignment to
4620 an lvalue of type TYPE. If ORIGTYPE is not NULL_TREE, it is the
4621 original type of RHS; this differs from TREE_TYPE (RHS) for enum
4622 types. NULL_POINTER_CONSTANT says whether RHS was a null pointer
4623 constant before any folding.
4624 The real work of conversion is done by `convert'.
4625 The purpose of this function is to generate error messages
4626 for assignments that are not allowed in C.
4627 ERRTYPE says whether it is argument passing, assignment,
4628 initialization or return.
4630 LOCATION is the location of the RHS.
4631 FUNCTION is a tree for the function being called.
4632 PARMNUM is the number of the argument, for printing in error messages. */
4635 convert_for_assignment (location_t location, tree type, tree rhs,
4636 tree origtype, enum impl_conv errtype,
4637 bool null_pointer_constant, tree fundecl,
4638 tree function, int parmnum)
4640 enum tree_code codel = TREE_CODE (type);
4641 tree orig_rhs = rhs;
4643 enum tree_code coder;
4644 tree rname = NULL_TREE;
4645 bool objc_ok = false;
4647 if (errtype == ic_argpass)
4650 /* Change pointer to function to the function itself for
4652 if (TREE_CODE (function) == ADDR_EXPR
4653 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
4654 function = TREE_OPERAND (function, 0);
4656 /* Handle an ObjC selector specially for diagnostics. */
4657 selector = objc_message_selector ();
4659 if (selector && parmnum > 2)
4666 /* This macro is used to emit diagnostics to ensure that all format
4667 strings are complete sentences, visible to gettext and checked at
4669 #define WARN_FOR_ASSIGNMENT(LOCATION, OPT, AR, AS, IN, RE) \
4674 if (pedwarn (LOCATION, OPT, AR, parmnum, rname)) \
4675 inform ((fundecl && !DECL_IS_BUILTIN (fundecl)) \
4676 ? DECL_SOURCE_LOCATION (fundecl) : LOCATION, \
4677 "expected %qT but argument is of type %qT", \
4681 pedwarn (LOCATION, OPT, AS); \
4684 pedwarn (LOCATION, OPT, IN); \
4687 pedwarn (LOCATION, OPT, RE); \
4690 gcc_unreachable (); \
4694 if (TREE_CODE (rhs) == EXCESS_PRECISION_EXPR)
4695 rhs = TREE_OPERAND (rhs, 0);
4697 rhstype = TREE_TYPE (rhs);
4698 coder = TREE_CODE (rhstype);
4700 if (coder == ERROR_MARK)
4701 return error_mark_node;
4703 if (c_dialect_objc ())
4726 objc_ok = objc_compare_types (type, rhstype, parmno, rname);
4729 if (warn_cxx_compat)
4731 tree checktype = origtype != NULL_TREE ? origtype : rhstype;
4732 if (checktype != error_mark_node
4733 && TREE_CODE (type) == ENUMERAL_TYPE
4734 && TYPE_MAIN_VARIANT (checktype) != TYPE_MAIN_VARIANT (type))
4736 WARN_FOR_ASSIGNMENT (input_location, OPT_Wc___compat,
4737 G_("enum conversion when passing argument "
4738 "%d of %qE is invalid in C++"),
4739 G_("enum conversion in assignment is "
4741 G_("enum conversion in initialization is "
4743 G_("enum conversion in return is "
4748 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
4751 if (coder == VOID_TYPE)
4753 /* Except for passing an argument to an unprototyped function,
4754 this is a constraint violation. When passing an argument to
4755 an unprototyped function, it is compile-time undefined;
4756 making it a constraint in that case was rejected in
4758 error_at (location, "void value not ignored as it ought to be");
4759 return error_mark_node;
4761 rhs = require_complete_type (rhs);
4762 if (rhs == error_mark_node)
4763 return error_mark_node;
4764 /* A type converts to a reference to it.
4765 This code doesn't fully support references, it's just for the
4766 special case of va_start and va_copy. */
4767 if (codel == REFERENCE_TYPE
4768 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
4770 if (!lvalue_p (rhs))
4772 error_at (location, "cannot pass rvalue to reference parameter");
4773 return error_mark_node;
4775 if (!c_mark_addressable (rhs))
4776 return error_mark_node;
4777 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
4778 SET_EXPR_LOCATION (rhs, location);
4780 /* We already know that these two types are compatible, but they
4781 may not be exactly identical. In fact, `TREE_TYPE (type)' is
4782 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
4783 likely to be va_list, a typedef to __builtin_va_list, which
4784 is different enough that it will cause problems later. */
4785 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
4787 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
4788 SET_EXPR_LOCATION (rhs, location);
4791 rhs = build1 (NOP_EXPR, type, rhs);
4792 SET_EXPR_LOCATION (rhs, location);
4795 /* Some types can interconvert without explicit casts. */
4796 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
4797 && vector_types_convertible_p (type, TREE_TYPE (rhs), true))
4798 return convert (type, rhs);
4799 /* Arithmetic types all interconvert, and enum is treated like int. */
4800 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
4801 || codel == FIXED_POINT_TYPE
4802 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
4803 || codel == BOOLEAN_TYPE)
4804 && (coder == INTEGER_TYPE || coder == REAL_TYPE
4805 || coder == FIXED_POINT_TYPE
4806 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
4807 || coder == BOOLEAN_TYPE))
4810 bool save = in_late_binary_op;
4811 if (codel == BOOLEAN_TYPE)
4812 in_late_binary_op = true;
4813 ret = convert_and_check (type, orig_rhs);
4814 if (codel == BOOLEAN_TYPE)
4815 in_late_binary_op = save;
4819 /* Aggregates in different TUs might need conversion. */
4820 if ((codel == RECORD_TYPE || codel == UNION_TYPE)
4822 && comptypes (type, rhstype))
4823 return convert_and_check (type, rhs);
4825 /* Conversion to a transparent union from its member types.
4826 This applies only to function arguments. */
4827 if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
4828 && errtype == ic_argpass)
4830 tree memb, marginal_memb = NULL_TREE;
4832 for (memb = TYPE_FIELDS (type); memb ; memb = TREE_CHAIN (memb))
4834 tree memb_type = TREE_TYPE (memb);
4836 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
4837 TYPE_MAIN_VARIANT (rhstype)))
4840 if (TREE_CODE (memb_type) != POINTER_TYPE)
4843 if (coder == POINTER_TYPE)
4845 tree ttl = TREE_TYPE (memb_type);
4846 tree ttr = TREE_TYPE (rhstype);
4848 /* Any non-function converts to a [const][volatile] void *
4849 and vice versa; otherwise, targets must be the same.
4850 Meanwhile, the lhs target must have all the qualifiers of
4852 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4853 || comp_target_types (location, memb_type, rhstype))
4855 /* If this type won't generate any warnings, use it. */
4856 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
4857 || ((TREE_CODE (ttr) == FUNCTION_TYPE
4858 && TREE_CODE (ttl) == FUNCTION_TYPE)
4859 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4860 == TYPE_QUALS (ttr))
4861 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4862 == TYPE_QUALS (ttl))))
4865 /* Keep looking for a better type, but remember this one. */
4867 marginal_memb = memb;
4871 /* Can convert integer zero to any pointer type. */
4872 if (null_pointer_constant)
4874 rhs = null_pointer_node;
4879 if (memb || marginal_memb)
4883 /* We have only a marginally acceptable member type;
4884 it needs a warning. */
4885 tree ttl = TREE_TYPE (TREE_TYPE (marginal_memb));
4886 tree ttr = TREE_TYPE (rhstype);
4888 /* Const and volatile mean something different for function
4889 types, so the usual warnings are not appropriate. */
4890 if (TREE_CODE (ttr) == FUNCTION_TYPE
4891 && TREE_CODE (ttl) == FUNCTION_TYPE)
4893 /* Because const and volatile on functions are
4894 restrictions that say the function will not do
4895 certain things, it is okay to use a const or volatile
4896 function where an ordinary one is wanted, but not
4898 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4899 WARN_FOR_ASSIGNMENT (location, 0,
4900 G_("passing argument %d of %qE "
4901 "makes qualified function "
4902 "pointer from unqualified"),
4903 G_("assignment makes qualified "
4904 "function pointer from "
4906 G_("initialization makes qualified "
4907 "function pointer from "
4909 G_("return makes qualified function "
4910 "pointer from unqualified"));
4912 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4913 WARN_FOR_ASSIGNMENT (location, 0,
4914 G_("passing argument %d of %qE discards "
4915 "qualifiers from pointer target type"),
4916 G_("assignment discards qualifiers "
4917 "from pointer target type"),
4918 G_("initialization discards qualifiers "
4919 "from pointer target type"),
4920 G_("return discards qualifiers from "
4921 "pointer target type"));
4923 memb = marginal_memb;
4926 if (!fundecl || !DECL_IN_SYSTEM_HEADER (fundecl))
4927 pedwarn (location, OPT_pedantic,
4928 "ISO C prohibits argument conversion to union type");
4930 rhs = fold_convert (TREE_TYPE (memb), rhs);
4931 return build_constructor_single (type, memb, rhs);
4935 /* Conversions among pointers */
4936 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4937 && (coder == codel))
4939 tree ttl = TREE_TYPE (type);
4940 tree ttr = TREE_TYPE (rhstype);
4943 bool is_opaque_pointer;
4944 int target_cmp = 0; /* Cache comp_target_types () result. */
4946 if (TREE_CODE (mvl) != ARRAY_TYPE)
4947 mvl = TYPE_MAIN_VARIANT (mvl);
4948 if (TREE_CODE (mvr) != ARRAY_TYPE)
4949 mvr = TYPE_MAIN_VARIANT (mvr);
4950 /* Opaque pointers are treated like void pointers. */
4951 is_opaque_pointer = vector_targets_convertible_p (ttl, ttr);
4953 /* C++ does not allow the implicit conversion void* -> T*. However,
4954 for the purpose of reducing the number of false positives, we
4955 tolerate the special case of
4959 where NULL is typically defined in C to be '(void *) 0'. */
4960 if (VOID_TYPE_P (ttr) && rhs != null_pointer_node && !VOID_TYPE_P (ttl))
4961 warning_at (location, OPT_Wc___compat,
4962 "request for implicit conversion "
4963 "from %qT to %qT not permitted in C++", rhstype, type);
4965 /* Check if the right-hand side has a format attribute but the
4966 left-hand side doesn't. */
4967 if (warn_missing_format_attribute
4968 && check_missing_format_attribute (type, rhstype))
4973 warning_at (location, OPT_Wmissing_format_attribute,
4974 "argument %d of %qE might be "
4975 "a candidate for a format attribute",
4979 warning_at (location, OPT_Wmissing_format_attribute,
4980 "assignment left-hand side might be "
4981 "a candidate for a format attribute");
4984 warning_at (location, OPT_Wmissing_format_attribute,
4985 "initialization left-hand side might be "
4986 "a candidate for a format attribute");
4989 warning_at (location, OPT_Wmissing_format_attribute,
4990 "return type might be "
4991 "a candidate for a format attribute");
4998 /* Any non-function converts to a [const][volatile] void *
4999 and vice versa; otherwise, targets must be the same.
5000 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
5001 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
5002 || (target_cmp = comp_target_types (location, type, rhstype))
5003 || is_opaque_pointer
5004 || (c_common_unsigned_type (mvl)
5005 == c_common_unsigned_type (mvr)))
5008 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
5011 && !null_pointer_constant
5012 && TREE_CODE (ttl) == FUNCTION_TYPE)))
5013 WARN_FOR_ASSIGNMENT (location, OPT_pedantic,
5014 G_("ISO C forbids passing argument %d of "
5015 "%qE between function pointer "
5017 G_("ISO C forbids assignment between "
5018 "function pointer and %<void *%>"),
5019 G_("ISO C forbids initialization between "
5020 "function pointer and %<void *%>"),
5021 G_("ISO C forbids return between function "
5022 "pointer and %<void *%>"));
5023 /* Const and volatile mean something different for function types,
5024 so the usual warnings are not appropriate. */
5025 else if (TREE_CODE (ttr) != FUNCTION_TYPE
5026 && TREE_CODE (ttl) != FUNCTION_TYPE)
5028 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
5030 /* Types differing only by the presence of the 'volatile'
5031 qualifier are acceptable if the 'volatile' has been added
5032 in by the Objective-C EH machinery. */
5033 if (!objc_type_quals_match (ttl, ttr))
5034 WARN_FOR_ASSIGNMENT (location, 0,
5035 G_("passing argument %d of %qE discards "
5036 "qualifiers from pointer target type"),
5037 G_("assignment discards qualifiers "
5038 "from pointer target type"),
5039 G_("initialization discards qualifiers "
5040 "from pointer target type"),
5041 G_("return discards qualifiers from "
5042 "pointer target type"));
5044 /* If this is not a case of ignoring a mismatch in signedness,
5046 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
5049 /* If there is a mismatch, do warn. */
5050 else if (warn_pointer_sign)
5051 WARN_FOR_ASSIGNMENT (location, OPT_Wpointer_sign,
5052 G_("pointer targets in passing argument "
5053 "%d of %qE differ in signedness"),
5054 G_("pointer targets in assignment "
5055 "differ in signedness"),
5056 G_("pointer targets in initialization "
5057 "differ in signedness"),
5058 G_("pointer targets in return differ "
5061 else if (TREE_CODE (ttl) == FUNCTION_TYPE
5062 && TREE_CODE (ttr) == FUNCTION_TYPE)
5064 /* Because const and volatile on functions are restrictions
5065 that say the function will not do certain things,
5066 it is okay to use a const or volatile function
5067 where an ordinary one is wanted, but not vice-versa. */
5068 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
5069 WARN_FOR_ASSIGNMENT (location, 0,
5070 G_("passing argument %d of %qE makes "
5071 "qualified function pointer "
5072 "from unqualified"),
5073 G_("assignment makes qualified function "
5074 "pointer from unqualified"),
5075 G_("initialization makes qualified "
5076 "function pointer from unqualified"),
5077 G_("return makes qualified function "
5078 "pointer from unqualified"));
5082 /* Avoid warning about the volatile ObjC EH puts on decls. */
5084 WARN_FOR_ASSIGNMENT (location, 0,
5085 G_("passing argument %d of %qE from "
5086 "incompatible pointer type"),
5087 G_("assignment from incompatible pointer type"),
5088 G_("initialization from incompatible "
5090 G_("return from incompatible pointer type"));
5092 return convert (type, rhs);
5094 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
5096 /* ??? This should not be an error when inlining calls to
5097 unprototyped functions. */
5098 error_at (location, "invalid use of non-lvalue array");
5099 return error_mark_node;
5101 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
5103 /* An explicit constant 0 can convert to a pointer,
5104 or one that results from arithmetic, even including
5105 a cast to integer type. */
5106 if (!null_pointer_constant)
5107 WARN_FOR_ASSIGNMENT (location, 0,
5108 G_("passing argument %d of %qE makes "
5109 "pointer from integer without a cast"),
5110 G_("assignment makes pointer from integer "
5112 G_("initialization makes pointer from "
5113 "integer without a cast"),
5114 G_("return makes pointer from integer "
5117 return convert (type, rhs);
5119 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
5121 WARN_FOR_ASSIGNMENT (location, 0,
5122 G_("passing argument %d of %qE makes integer "
5123 "from pointer without a cast"),
5124 G_("assignment makes integer from pointer "
5126 G_("initialization makes integer from pointer "
5128 G_("return makes integer from pointer "
5130 return convert (type, rhs);
5132 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
5135 bool save = in_late_binary_op;
5136 in_late_binary_op = true;
5137 ret = convert (type, rhs);
5138 in_late_binary_op = save;
5145 error_at (location, "incompatible type for argument %d of %qE", parmnum, rname);
5146 inform ((fundecl && !DECL_IS_BUILTIN (fundecl))
5147 ? DECL_SOURCE_LOCATION (fundecl) : input_location,
5148 "expected %qT but argument is of type %qT", type, rhstype);
5151 error_at (location, "incompatible types when assigning to type %qT from "
5152 "type %qT", type, rhstype);
5156 "incompatible types when initializing type %qT using type %qT",
5161 "incompatible types when returning type %qT but %qT was "
5162 "expected", rhstype, type);
5168 return error_mark_node;
5171 /* If VALUE is a compound expr all of whose expressions are constant, then
5172 return its value. Otherwise, return error_mark_node.
5174 This is for handling COMPOUND_EXPRs as initializer elements
5175 which is allowed with a warning when -pedantic is specified. */
5178 valid_compound_expr_initializer (tree value, tree endtype)
5180 if (TREE_CODE (value) == COMPOUND_EXPR)
5182 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
5184 return error_mark_node;
5185 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
5188 else if (!initializer_constant_valid_p (value, endtype))
5189 return error_mark_node;
5194 /* Perform appropriate conversions on the initial value of a variable,
5195 store it in the declaration DECL,
5196 and print any error messages that are appropriate.
5197 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
5198 If the init is invalid, store an ERROR_MARK.
5200 INIT_LOC is the location of the initial value. */
5203 store_init_value (location_t init_loc, tree decl, tree init, tree origtype)
5208 /* If variable's type was invalidly declared, just ignore it. */
5210 type = TREE_TYPE (decl);
5211 if (TREE_CODE (type) == ERROR_MARK)
5214 /* Digest the specified initializer into an expression. */
5217 npc = null_pointer_constant_p (init);
5218 value = digest_init (init_loc, type, init, origtype, npc,
5219 true, TREE_STATIC (decl));
5221 /* Store the expression if valid; else report error. */
5223 if (!in_system_header
5224 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
5225 warning (OPT_Wtraditional, "traditional C rejects automatic "
5226 "aggregate initialization");
5228 DECL_INITIAL (decl) = value;
5230 /* ANSI wants warnings about out-of-range constant initializers. */
5231 STRIP_TYPE_NOPS (value);
5232 if (TREE_STATIC (decl))
5233 constant_expression_warning (value);
5235 /* Check if we need to set array size from compound literal size. */
5236 if (TREE_CODE (type) == ARRAY_TYPE
5237 && TYPE_DOMAIN (type) == 0
5238 && value != error_mark_node)
5240 tree inside_init = init;
5242 STRIP_TYPE_NOPS (inside_init);
5243 inside_init = fold (inside_init);
5245 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
5247 tree cldecl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
5249 if (TYPE_DOMAIN (TREE_TYPE (cldecl)))
5251 /* For int foo[] = (int [3]){1}; we need to set array size
5252 now since later on array initializer will be just the
5253 brace enclosed list of the compound literal. */
5254 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5255 TREE_TYPE (decl) = type;
5256 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (cldecl));
5258 layout_decl (cldecl, 0);
5264 /* Methods for storing and printing names for error messages. */
5266 /* Implement a spelling stack that allows components of a name to be pushed
5267 and popped. Each element on the stack is this structure. */
5274 unsigned HOST_WIDE_INT i;
5279 #define SPELLING_STRING 1
5280 #define SPELLING_MEMBER 2
5281 #define SPELLING_BOUNDS 3
5283 static struct spelling *spelling; /* Next stack element (unused). */
5284 static struct spelling *spelling_base; /* Spelling stack base. */
5285 static int spelling_size; /* Size of the spelling stack. */
5287 /* Macros to save and restore the spelling stack around push_... functions.
5288 Alternative to SAVE_SPELLING_STACK. */
5290 #define SPELLING_DEPTH() (spelling - spelling_base)
5291 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
5293 /* Push an element on the spelling stack with type KIND and assign VALUE
5296 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
5298 int depth = SPELLING_DEPTH (); \
5300 if (depth >= spelling_size) \
5302 spelling_size += 10; \
5303 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
5305 RESTORE_SPELLING_DEPTH (depth); \
5308 spelling->kind = (KIND); \
5309 spelling->MEMBER = (VALUE); \
5313 /* Push STRING on the stack. Printed literally. */
5316 push_string (const char *string)
5318 PUSH_SPELLING (SPELLING_STRING, string, u.s);
5321 /* Push a member name on the stack. Printed as '.' STRING. */
5324 push_member_name (tree decl)
5326 const char *const string
5328 ? identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl)))
5329 : _("<anonymous>"));
5330 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
5333 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
5336 push_array_bounds (unsigned HOST_WIDE_INT bounds)
5338 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
5341 /* Compute the maximum size in bytes of the printed spelling. */
5344 spelling_length (void)
5349 for (p = spelling_base; p < spelling; p++)
5351 if (p->kind == SPELLING_BOUNDS)
5354 size += strlen (p->u.s) + 1;
5360 /* Print the spelling to BUFFER and return it. */
5363 print_spelling (char *buffer)
5368 for (p = spelling_base; p < spelling; p++)
5369 if (p->kind == SPELLING_BOUNDS)
5371 sprintf (d, "[" HOST_WIDE_INT_PRINT_UNSIGNED "]", p->u.i);
5377 if (p->kind == SPELLING_MEMBER)
5379 for (s = p->u.s; (*d = *s++); d++)
5386 /* Issue an error message for a bad initializer component.
5387 MSGID identifies the message.
5388 The component name is taken from the spelling stack. */
5391 error_init (const char *msgid)
5395 error ("%s", _(msgid));
5396 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
5398 error ("(near initialization for %qs)", ofwhat);
5401 /* Issue a pedantic warning for a bad initializer component. OPT is
5402 the option OPT_* (from options.h) controlling this warning or 0 if
5403 it is unconditionally given. MSGID identifies the message. The
5404 component name is taken from the spelling stack. */
5407 pedwarn_init (location_t location, int opt, const char *msgid)
5411 pedwarn (location, opt, "%s", _(msgid));
5412 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
5414 pedwarn (location, opt, "(near initialization for %qs)", ofwhat);
5417 /* Issue a warning for a bad initializer component.
5419 OPT is the OPT_W* value corresponding to the warning option that
5420 controls this warning. MSGID identifies the message. The
5421 component name is taken from the spelling stack. */
5424 warning_init (int opt, const char *msgid)
5428 warning (opt, "%s", _(msgid));
5429 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
5431 warning (opt, "(near initialization for %qs)", ofwhat);
5434 /* If TYPE is an array type and EXPR is a parenthesized string
5435 constant, warn if pedantic that EXPR is being used to initialize an
5436 object of type TYPE. */
5439 maybe_warn_string_init (tree type, struct c_expr expr)
5442 && TREE_CODE (type) == ARRAY_TYPE
5443 && TREE_CODE (expr.value) == STRING_CST
5444 && expr.original_code != STRING_CST)
5445 pedwarn_init (input_location, OPT_pedantic,
5446 "array initialized from parenthesized string constant");
5449 /* Digest the parser output INIT as an initializer for type TYPE.
5450 Return a C expression of type TYPE to represent the initial value.
5452 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
5454 NULL_POINTER_CONSTANT is true if INIT is a null pointer constant.
5456 If INIT is a string constant, STRICT_STRING is true if it is
5457 unparenthesized or we should not warn here for it being parenthesized.
5458 For other types of INIT, STRICT_STRING is not used.
5460 INIT_LOC is the location of the INIT.
5462 REQUIRE_CONSTANT requests an error if non-constant initializers or
5463 elements are seen. */
5466 digest_init (location_t init_loc, tree type, tree init, tree origtype,
5467 bool null_pointer_constant, bool strict_string,
5468 int require_constant)
5470 enum tree_code code = TREE_CODE (type);
5471 tree inside_init = init;
5472 tree semantic_type = NULL_TREE;
5473 bool maybe_const = true;
5475 if (type == error_mark_node
5477 || init == error_mark_node
5478 || TREE_TYPE (init) == error_mark_node)
5479 return error_mark_node;
5481 STRIP_TYPE_NOPS (inside_init);
5483 if (TREE_CODE (inside_init) == EXCESS_PRECISION_EXPR)
5485 semantic_type = TREE_TYPE (inside_init);
5486 inside_init = TREE_OPERAND (inside_init, 0);
5488 inside_init = c_fully_fold (inside_init, require_constant, &maybe_const);
5489 inside_init = decl_constant_value_for_optimization (inside_init);
5491 /* Initialization of an array of chars from a string constant
5492 optionally enclosed in braces. */
5494 if (code == ARRAY_TYPE && inside_init
5495 && TREE_CODE (inside_init) == STRING_CST)
5497 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
5498 /* Note that an array could be both an array of character type
5499 and an array of wchar_t if wchar_t is signed char or unsigned
5501 bool char_array = (typ1 == char_type_node
5502 || typ1 == signed_char_type_node
5503 || typ1 == unsigned_char_type_node);
5504 bool wchar_array = !!comptypes (typ1, wchar_type_node);
5505 bool char16_array = !!comptypes (typ1, char16_type_node);
5506 bool char32_array = !!comptypes (typ1, char32_type_node);
5508 if (char_array || wchar_array || char16_array || char32_array)
5511 tree typ2 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)));
5512 expr.value = inside_init;
5513 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
5514 expr.original_type = NULL;
5515 maybe_warn_string_init (type, expr);
5517 if (TYPE_DOMAIN (type) && !TYPE_MAX_VALUE (TYPE_DOMAIN (type)))
5518 pedwarn_init (init_loc, OPT_pedantic,
5519 "initialization of a flexible array member");
5521 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
5522 TYPE_MAIN_VARIANT (type)))
5527 if (typ2 != char_type_node)
5529 error_init ("char-array initialized from wide string");
5530 return error_mark_node;
5535 if (typ2 == char_type_node)
5537 error_init ("wide character array initialized from non-wide "
5539 return error_mark_node;
5541 else if (!comptypes(typ1, typ2))
5543 error_init ("wide character array initialized from "
5544 "incompatible wide string");
5545 return error_mark_node;
5549 TREE_TYPE (inside_init) = type;
5550 if (TYPE_DOMAIN (type) != 0
5551 && TYPE_SIZE (type) != 0
5552 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
5553 /* Subtract the size of a single (possibly wide) character
5554 because it's ok to ignore the terminating null char
5555 that is counted in the length of the constant. */
5556 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
5557 TREE_STRING_LENGTH (inside_init)
5558 - (TYPE_PRECISION (typ1)
5560 pedwarn_init (init_loc, 0,
5561 "initializer-string for array of chars is too long");
5565 else if (INTEGRAL_TYPE_P (typ1))
5567 error_init ("array of inappropriate type initialized "
5568 "from string constant");
5569 return error_mark_node;
5573 /* Build a VECTOR_CST from a *constant* vector constructor. If the
5574 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
5575 below and handle as a constructor. */
5576 if (code == VECTOR_TYPE
5577 && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
5578 && vector_types_convertible_p (TREE_TYPE (inside_init), type, true)
5579 && TREE_CONSTANT (inside_init))
5581 if (TREE_CODE (inside_init) == VECTOR_CST
5582 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
5583 TYPE_MAIN_VARIANT (type)))
5586 if (TREE_CODE (inside_init) == CONSTRUCTOR)
5588 unsigned HOST_WIDE_INT ix;
5590 bool constant_p = true;
5592 /* Iterate through elements and check if all constructor
5593 elements are *_CSTs. */
5594 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (inside_init), ix, value)
5595 if (!CONSTANT_CLASS_P (value))
5602 return build_vector_from_ctor (type,
5603 CONSTRUCTOR_ELTS (inside_init));
5607 if (warn_sequence_point)
5608 verify_sequence_points (inside_init);
5610 /* Any type can be initialized
5611 from an expression of the same type, optionally with braces. */
5613 if (inside_init && TREE_TYPE (inside_init) != 0
5614 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
5615 TYPE_MAIN_VARIANT (type))
5616 || (code == ARRAY_TYPE
5617 && comptypes (TREE_TYPE (inside_init), type))
5618 || (code == VECTOR_TYPE
5619 && comptypes (TREE_TYPE (inside_init), type))
5620 || (code == POINTER_TYPE
5621 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
5622 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
5623 TREE_TYPE (type)))))
5625 if (code == POINTER_TYPE)
5627 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
5629 if (TREE_CODE (inside_init) == STRING_CST
5630 || TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
5631 inside_init = array_to_pointer_conversion
5632 (init_loc, inside_init);
5635 error_init ("invalid use of non-lvalue array");
5636 return error_mark_node;
5641 if (code == VECTOR_TYPE)
5642 /* Although the types are compatible, we may require a
5644 inside_init = convert (type, inside_init);
5646 if (require_constant
5647 && (code == VECTOR_TYPE || !flag_isoc99)
5648 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
5650 /* As an extension, allow initializing objects with static storage
5651 duration with compound literals (which are then treated just as
5652 the brace enclosed list they contain). Also allow this for
5653 vectors, as we can only assign them with compound literals. */
5654 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
5655 inside_init = DECL_INITIAL (decl);
5658 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
5659 && TREE_CODE (inside_init) != CONSTRUCTOR)
5661 error_init ("array initialized from non-constant array expression");
5662 return error_mark_node;
5665 /* Compound expressions can only occur here if -pedantic or
5666 -pedantic-errors is specified. In the later case, we always want
5667 an error. In the former case, we simply want a warning. */
5668 if (require_constant && pedantic
5669 && TREE_CODE (inside_init) == COMPOUND_EXPR)
5672 = valid_compound_expr_initializer (inside_init,
5673 TREE_TYPE (inside_init));
5674 if (inside_init == error_mark_node)
5675 error_init ("initializer element is not constant");
5677 pedwarn_init (init_loc, OPT_pedantic,
5678 "initializer element is not constant");
5679 if (flag_pedantic_errors)
5680 inside_init = error_mark_node;
5682 else if (require_constant
5683 && !initializer_constant_valid_p (inside_init,
5684 TREE_TYPE (inside_init)))
5686 error_init ("initializer element is not constant");
5687 inside_init = error_mark_node;
5689 else if (require_constant && !maybe_const)
5690 pedwarn_init (init_loc, 0,
5691 "initializer element is not a constant expression");
5693 /* Added to enable additional -Wmissing-format-attribute warnings. */
5694 if (TREE_CODE (TREE_TYPE (inside_init)) == POINTER_TYPE)
5695 inside_init = convert_for_assignment (init_loc, type, inside_init,
5697 ic_init, null_pointer_constant,
5698 NULL_TREE, NULL_TREE, 0);
5702 /* Handle scalar types, including conversions. */
5704 if (code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE
5705 || code == POINTER_TYPE || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE
5706 || code == COMPLEX_TYPE || code == VECTOR_TYPE)
5708 if (TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE
5709 && (TREE_CODE (init) == STRING_CST
5710 || TREE_CODE (init) == COMPOUND_LITERAL_EXPR))
5711 inside_init = init = array_to_pointer_conversion (init_loc, init);
5713 inside_init = build1 (EXCESS_PRECISION_EXPR, semantic_type,
5716 = convert_for_assignment (init_loc, type, inside_init, origtype,
5717 ic_init, null_pointer_constant,
5718 NULL_TREE, NULL_TREE, 0);
5720 /* Check to see if we have already given an error message. */
5721 if (inside_init == error_mark_node)
5723 else if (require_constant && !TREE_CONSTANT (inside_init))
5725 error_init ("initializer element is not constant");
5726 inside_init = error_mark_node;
5728 else if (require_constant
5729 && !initializer_constant_valid_p (inside_init,
5730 TREE_TYPE (inside_init)))
5732 error_init ("initializer element is not computable at load time");
5733 inside_init = error_mark_node;
5735 else if (require_constant && !maybe_const)
5736 pedwarn_init (init_loc, 0,
5737 "initializer element is not a constant expression");
5742 /* Come here only for records and arrays. */
5744 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
5746 error_init ("variable-sized object may not be initialized");
5747 return error_mark_node;
5750 error_init ("invalid initializer");
5751 return error_mark_node;
5754 /* Handle initializers that use braces. */
5756 /* Type of object we are accumulating a constructor for.
5757 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
5758 static tree constructor_type;
5760 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
5762 static tree constructor_fields;
5764 /* For an ARRAY_TYPE, this is the specified index
5765 at which to store the next element we get. */
5766 static tree constructor_index;
5768 /* For an ARRAY_TYPE, this is the maximum index. */
5769 static tree constructor_max_index;
5771 /* For a RECORD_TYPE, this is the first field not yet written out. */
5772 static tree constructor_unfilled_fields;
5774 /* For an ARRAY_TYPE, this is the index of the first element
5775 not yet written out. */
5776 static tree constructor_unfilled_index;
5778 /* In a RECORD_TYPE, the byte index of the next consecutive field.
5779 This is so we can generate gaps between fields, when appropriate. */
5780 static tree constructor_bit_index;
5782 /* If we are saving up the elements rather than allocating them,
5783 this is the list of elements so far (in reverse order,
5784 most recent first). */
5785 static VEC(constructor_elt,gc) *constructor_elements;
5787 /* 1 if constructor should be incrementally stored into a constructor chain,
5788 0 if all the elements should be kept in AVL tree. */
5789 static int constructor_incremental;
5791 /* 1 if so far this constructor's elements are all compile-time constants. */
5792 static int constructor_constant;
5794 /* 1 if so far this constructor's elements are all valid address constants. */
5795 static int constructor_simple;
5797 /* 1 if this constructor has an element that cannot be part of a
5798 constant expression. */
5799 static int constructor_nonconst;
5801 /* 1 if this constructor is erroneous so far. */
5802 static int constructor_erroneous;
5804 /* Structure for managing pending initializer elements, organized as an
5809 struct init_node *left, *right;
5810 struct init_node *parent;
5817 /* Tree of pending elements at this constructor level.
5818 These are elements encountered out of order
5819 which belong at places we haven't reached yet in actually
5821 Will never hold tree nodes across GC runs. */
5822 static struct init_node *constructor_pending_elts;
5824 /* The SPELLING_DEPTH of this constructor. */
5825 static int constructor_depth;
5827 /* DECL node for which an initializer is being read.
5828 0 means we are reading a constructor expression
5829 such as (struct foo) {...}. */
5830 static tree constructor_decl;
5832 /* Nonzero if this is an initializer for a top-level decl. */
5833 static int constructor_top_level;
5835 /* Nonzero if there were any member designators in this initializer. */
5836 static int constructor_designated;
5838 /* Nesting depth of designator list. */
5839 static int designator_depth;
5841 /* Nonzero if there were diagnosed errors in this designator list. */
5842 static int designator_erroneous;
5845 /* This stack has a level for each implicit or explicit level of
5846 structuring in the initializer, including the outermost one. It
5847 saves the values of most of the variables above. */
5849 struct constructor_range_stack;
5851 struct constructor_stack
5853 struct constructor_stack *next;
5858 tree unfilled_index;
5859 tree unfilled_fields;
5861 VEC(constructor_elt,gc) *elements;
5862 struct init_node *pending_elts;
5865 /* If value nonzero, this value should replace the entire
5866 constructor at this level. */
5867 struct c_expr replacement_value;
5868 struct constructor_range_stack *range_stack;
5879 static struct constructor_stack *constructor_stack;
5881 /* This stack represents designators from some range designator up to
5882 the last designator in the list. */
5884 struct constructor_range_stack
5886 struct constructor_range_stack *next, *prev;
5887 struct constructor_stack *stack;
5894 static struct constructor_range_stack *constructor_range_stack;
5896 /* This stack records separate initializers that are nested.
5897 Nested initializers can't happen in ANSI C, but GNU C allows them
5898 in cases like { ... (struct foo) { ... } ... }. */
5900 struct initializer_stack
5902 struct initializer_stack *next;
5904 struct constructor_stack *constructor_stack;
5905 struct constructor_range_stack *constructor_range_stack;
5906 VEC(constructor_elt,gc) *elements;
5907 struct spelling *spelling;
5908 struct spelling *spelling_base;
5911 char require_constant_value;
5912 char require_constant_elements;
5915 static struct initializer_stack *initializer_stack;
5917 /* Prepare to parse and output the initializer for variable DECL. */
5920 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
5923 struct initializer_stack *p = XNEW (struct initializer_stack);
5925 p->decl = constructor_decl;
5926 p->require_constant_value = require_constant_value;
5927 p->require_constant_elements = require_constant_elements;
5928 p->constructor_stack = constructor_stack;
5929 p->constructor_range_stack = constructor_range_stack;
5930 p->elements = constructor_elements;
5931 p->spelling = spelling;
5932 p->spelling_base = spelling_base;
5933 p->spelling_size = spelling_size;
5934 p->top_level = constructor_top_level;
5935 p->next = initializer_stack;
5936 initializer_stack = p;
5938 constructor_decl = decl;
5939 constructor_designated = 0;
5940 constructor_top_level = top_level;
5942 if (decl != 0 && decl != error_mark_node)
5944 require_constant_value = TREE_STATIC (decl);
5945 require_constant_elements
5946 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
5947 /* For a scalar, you can always use any value to initialize,
5948 even within braces. */
5949 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
5950 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5951 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
5952 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
5953 locus = identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl)));
5957 require_constant_value = 0;
5958 require_constant_elements = 0;
5959 locus = _("(anonymous)");
5962 constructor_stack = 0;
5963 constructor_range_stack = 0;
5965 missing_braces_mentioned = 0;
5969 RESTORE_SPELLING_DEPTH (0);
5972 push_string (locus);
5978 struct initializer_stack *p = initializer_stack;
5980 /* Free the whole constructor stack of this initializer. */
5981 while (constructor_stack)
5983 struct constructor_stack *q = constructor_stack;
5984 constructor_stack = q->next;
5988 gcc_assert (!constructor_range_stack);
5990 /* Pop back to the data of the outer initializer (if any). */
5991 free (spelling_base);
5993 constructor_decl = p->decl;
5994 require_constant_value = p->require_constant_value;
5995 require_constant_elements = p->require_constant_elements;
5996 constructor_stack = p->constructor_stack;
5997 constructor_range_stack = p->constructor_range_stack;
5998 constructor_elements = p->elements;
5999 spelling = p->spelling;
6000 spelling_base = p->spelling_base;
6001 spelling_size = p->spelling_size;
6002 constructor_top_level = p->top_level;
6003 initializer_stack = p->next;
6007 /* Call here when we see the initializer is surrounded by braces.
6008 This is instead of a call to push_init_level;
6009 it is matched by a call to pop_init_level.
6011 TYPE is the type to initialize, for a constructor expression.
6012 For an initializer for a decl, TYPE is zero. */
6015 really_start_incremental_init (tree type)
6017 struct constructor_stack *p = XNEW (struct constructor_stack);
6020 type = TREE_TYPE (constructor_decl);
6022 if (TREE_CODE (type) == VECTOR_TYPE
6023 && TYPE_VECTOR_OPAQUE (type))
6024 error ("opaque vector types cannot be initialized");
6026 p->type = constructor_type;
6027 p->fields = constructor_fields;
6028 p->index = constructor_index;
6029 p->max_index = constructor_max_index;
6030 p->unfilled_index = constructor_unfilled_index;
6031 p->unfilled_fields = constructor_unfilled_fields;
6032 p->bit_index = constructor_bit_index;
6033 p->elements = constructor_elements;
6034 p->constant = constructor_constant;
6035 p->simple = constructor_simple;
6036 p->nonconst = constructor_nonconst;
6037 p->erroneous = constructor_erroneous;
6038 p->pending_elts = constructor_pending_elts;
6039 p->depth = constructor_depth;
6040 p->replacement_value.value = 0;
6041 p->replacement_value.original_code = ERROR_MARK;
6042 p->replacement_value.original_type = NULL;
6046 p->incremental = constructor_incremental;
6047 p->designated = constructor_designated;
6049 constructor_stack = p;
6051 constructor_constant = 1;
6052 constructor_simple = 1;
6053 constructor_nonconst = 0;
6054 constructor_depth = SPELLING_DEPTH ();
6055 constructor_elements = 0;
6056 constructor_pending_elts = 0;
6057 constructor_type = type;
6058 constructor_incremental = 1;
6059 constructor_designated = 0;
6060 designator_depth = 0;
6061 designator_erroneous = 0;
6063 if (TREE_CODE (constructor_type) == RECORD_TYPE
6064 || TREE_CODE (constructor_type) == UNION_TYPE)
6066 constructor_fields = TYPE_FIELDS (constructor_type);
6067 /* Skip any nameless bit fields at the beginning. */
6068 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
6069 && DECL_NAME (constructor_fields) == 0)
6070 constructor_fields = TREE_CHAIN (constructor_fields);
6072 constructor_unfilled_fields = constructor_fields;
6073 constructor_bit_index = bitsize_zero_node;
6075 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6077 if (TYPE_DOMAIN (constructor_type))
6079 constructor_max_index
6080 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
6082 /* Detect non-empty initializations of zero-length arrays. */
6083 if (constructor_max_index == NULL_TREE
6084 && TYPE_SIZE (constructor_type))
6085 constructor_max_index = build_int_cst (NULL_TREE, -1);
6087 /* constructor_max_index needs to be an INTEGER_CST. Attempts
6088 to initialize VLAs will cause a proper error; avoid tree
6089 checking errors as well by setting a safe value. */
6090 if (constructor_max_index
6091 && TREE_CODE (constructor_max_index) != INTEGER_CST)
6092 constructor_max_index = build_int_cst (NULL_TREE, -1);
6095 = convert (bitsizetype,
6096 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
6100 constructor_index = bitsize_zero_node;
6101 constructor_max_index = NULL_TREE;
6104 constructor_unfilled_index = constructor_index;
6106 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6108 /* Vectors are like simple fixed-size arrays. */
6109 constructor_max_index =
6110 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
6111 constructor_index = bitsize_zero_node;
6112 constructor_unfilled_index = constructor_index;
6116 /* Handle the case of int x = {5}; */
6117 constructor_fields = constructor_type;
6118 constructor_unfilled_fields = constructor_type;
6122 /* Push down into a subobject, for initialization.
6123 If this is for an explicit set of braces, IMPLICIT is 0.
6124 If it is because the next element belongs at a lower level,
6125 IMPLICIT is 1 (or 2 if the push is because of designator list). */
6128 push_init_level (int implicit)
6130 struct constructor_stack *p;
6131 tree value = NULL_TREE;
6133 /* If we've exhausted any levels that didn't have braces,
6134 pop them now. If implicit == 1, this will have been done in
6135 process_init_element; do not repeat it here because in the case
6136 of excess initializers for an empty aggregate this leads to an
6137 infinite cycle of popping a level and immediately recreating
6141 while (constructor_stack->implicit)
6143 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6144 || TREE_CODE (constructor_type) == UNION_TYPE)
6145 && constructor_fields == 0)
6146 process_init_element (pop_init_level (1), true);
6147 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6148 && constructor_max_index
6149 && tree_int_cst_lt (constructor_max_index,
6151 process_init_element (pop_init_level (1), true);
6157 /* Unless this is an explicit brace, we need to preserve previous
6161 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6162 || TREE_CODE (constructor_type) == UNION_TYPE)
6163 && constructor_fields)
6164 value = find_init_member (constructor_fields);
6165 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6166 value = find_init_member (constructor_index);
6169 p = XNEW (struct constructor_stack);
6170 p->type = constructor_type;
6171 p->fields = constructor_fields;
6172 p->index = constructor_index;
6173 p->max_index = constructor_max_index;
6174 p->unfilled_index = constructor_unfilled_index;
6175 p->unfilled_fields = constructor_unfilled_fields;
6176 p->bit_index = constructor_bit_index;
6177 p->elements = constructor_elements;
6178 p->constant = constructor_constant;
6179 p->simple = constructor_simple;
6180 p->nonconst = constructor_nonconst;
6181 p->erroneous = constructor_erroneous;
6182 p->pending_elts = constructor_pending_elts;
6183 p->depth = constructor_depth;
6184 p->replacement_value.value = 0;
6185 p->replacement_value.original_code = ERROR_MARK;
6186 p->replacement_value.original_type = NULL;
6187 p->implicit = implicit;
6189 p->incremental = constructor_incremental;
6190 p->designated = constructor_designated;
6191 p->next = constructor_stack;
6193 constructor_stack = p;
6195 constructor_constant = 1;
6196 constructor_simple = 1;
6197 constructor_nonconst = 0;
6198 constructor_depth = SPELLING_DEPTH ();
6199 constructor_elements = 0;
6200 constructor_incremental = 1;
6201 constructor_designated = 0;
6202 constructor_pending_elts = 0;
6205 p->range_stack = constructor_range_stack;
6206 constructor_range_stack = 0;
6207 designator_depth = 0;
6208 designator_erroneous = 0;
6211 /* Don't die if an entire brace-pair level is superfluous
6212 in the containing level. */
6213 if (constructor_type == 0)
6215 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6216 || TREE_CODE (constructor_type) == UNION_TYPE)
6218 /* Don't die if there are extra init elts at the end. */
6219 if (constructor_fields == 0)
6220 constructor_type = 0;
6223 constructor_type = TREE_TYPE (constructor_fields);
6224 push_member_name (constructor_fields);
6225 constructor_depth++;
6228 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6230 constructor_type = TREE_TYPE (constructor_type);
6231 push_array_bounds (tree_low_cst (constructor_index, 1));
6232 constructor_depth++;
6235 if (constructor_type == 0)
6237 error_init ("extra brace group at end of initializer");
6238 constructor_fields = 0;
6239 constructor_unfilled_fields = 0;
6243 if (value && TREE_CODE (value) == CONSTRUCTOR)
6245 constructor_constant = TREE_CONSTANT (value);
6246 constructor_simple = TREE_STATIC (value);
6247 constructor_nonconst = CONSTRUCTOR_NON_CONST (value);
6248 constructor_elements = CONSTRUCTOR_ELTS (value);
6249 if (!VEC_empty (constructor_elt, constructor_elements)
6250 && (TREE_CODE (constructor_type) == RECORD_TYPE
6251 || TREE_CODE (constructor_type) == ARRAY_TYPE))
6252 set_nonincremental_init ();
6255 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
6257 missing_braces_mentioned = 1;
6258 warning_init (OPT_Wmissing_braces, "missing braces around initializer");
6261 if (TREE_CODE (constructor_type) == RECORD_TYPE
6262 || TREE_CODE (constructor_type) == UNION_TYPE)
6264 constructor_fields = TYPE_FIELDS (constructor_type);
6265 /* Skip any nameless bit fields at the beginning. */
6266 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
6267 && DECL_NAME (constructor_fields) == 0)
6268 constructor_fields = TREE_CHAIN (constructor_fields);
6270 constructor_unfilled_fields = constructor_fields;
6271 constructor_bit_index = bitsize_zero_node;
6273 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6275 /* Vectors are like simple fixed-size arrays. */
6276 constructor_max_index =
6277 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
6278 constructor_index = convert (bitsizetype, integer_zero_node);
6279 constructor_unfilled_index = constructor_index;
6281 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6283 if (TYPE_DOMAIN (constructor_type))
6285 constructor_max_index
6286 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
6288 /* Detect non-empty initializations of zero-length arrays. */
6289 if (constructor_max_index == NULL_TREE
6290 && TYPE_SIZE (constructor_type))
6291 constructor_max_index = build_int_cst (NULL_TREE, -1);
6293 /* constructor_max_index needs to be an INTEGER_CST. Attempts
6294 to initialize VLAs will cause a proper error; avoid tree
6295 checking errors as well by setting a safe value. */
6296 if (constructor_max_index
6297 && TREE_CODE (constructor_max_index) != INTEGER_CST)
6298 constructor_max_index = build_int_cst (NULL_TREE, -1);
6301 = convert (bitsizetype,
6302 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
6305 constructor_index = bitsize_zero_node;
6307 constructor_unfilled_index = constructor_index;
6308 if (value && TREE_CODE (value) == STRING_CST)
6310 /* We need to split the char/wchar array into individual
6311 characters, so that we don't have to special case it
6313 set_nonincremental_init_from_string (value);
6318 if (constructor_type != error_mark_node)
6319 warning_init (0, "braces around scalar initializer");
6320 constructor_fields = constructor_type;
6321 constructor_unfilled_fields = constructor_type;
6325 /* At the end of an implicit or explicit brace level,
6326 finish up that level of constructor. If a single expression
6327 with redundant braces initialized that level, return the
6328 c_expr structure for that expression. Otherwise, the original_code
6329 element is set to ERROR_MARK.
6330 If we were outputting the elements as they are read, return 0 as the value
6331 from inner levels (process_init_element ignores that),
6332 but return error_mark_node as the value from the outermost level
6333 (that's what we want to put in DECL_INITIAL).
6334 Otherwise, return a CONSTRUCTOR expression as the value. */
6337 pop_init_level (int implicit)
6339 struct constructor_stack *p;
6342 ret.original_code = ERROR_MARK;
6343 ret.original_type = NULL;
6347 /* When we come to an explicit close brace,
6348 pop any inner levels that didn't have explicit braces. */
6349 while (constructor_stack->implicit)
6350 process_init_element (pop_init_level (1), true);
6352 gcc_assert (!constructor_range_stack);
6355 /* Now output all pending elements. */
6356 constructor_incremental = 1;
6357 output_pending_init_elements (1);
6359 p = constructor_stack;
6361 /* Error for initializing a flexible array member, or a zero-length
6362 array member in an inappropriate context. */
6363 if (constructor_type && constructor_fields
6364 && TREE_CODE (constructor_type) == ARRAY_TYPE
6365 && TYPE_DOMAIN (constructor_type)
6366 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
6368 /* Silently discard empty initializations. The parser will
6369 already have pedwarned for empty brackets. */
6370 if (integer_zerop (constructor_unfilled_index))
6371 constructor_type = NULL_TREE;
6374 gcc_assert (!TYPE_SIZE (constructor_type));
6376 if (constructor_depth > 2)
6377 error_init ("initialization of flexible array member in a nested context");
6379 pedwarn_init (input_location, OPT_pedantic,
6380 "initialization of a flexible array member");
6382 /* We have already issued an error message for the existence
6383 of a flexible array member not at the end of the structure.
6384 Discard the initializer so that we do not die later. */
6385 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
6386 constructor_type = NULL_TREE;
6390 /* Warn when some struct elements are implicitly initialized to zero. */
6391 if (warn_missing_field_initializers
6393 && TREE_CODE (constructor_type) == RECORD_TYPE
6394 && constructor_unfilled_fields)
6396 /* Do not warn for flexible array members or zero-length arrays. */
6397 while (constructor_unfilled_fields
6398 && (!DECL_SIZE (constructor_unfilled_fields)
6399 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
6400 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
6402 /* Do not warn if this level of the initializer uses member
6403 designators; it is likely to be deliberate. */
6404 if (constructor_unfilled_fields && !constructor_designated)
6406 push_member_name (constructor_unfilled_fields);
6407 warning_init (OPT_Wmissing_field_initializers,
6408 "missing initializer");
6409 RESTORE_SPELLING_DEPTH (constructor_depth);
6413 /* Pad out the end of the structure. */
6414 if (p->replacement_value.value)
6415 /* If this closes a superfluous brace pair,
6416 just pass out the element between them. */
6417 ret = p->replacement_value;
6418 else if (constructor_type == 0)
6420 else if (TREE_CODE (constructor_type) != RECORD_TYPE
6421 && TREE_CODE (constructor_type) != UNION_TYPE
6422 && TREE_CODE (constructor_type) != ARRAY_TYPE
6423 && TREE_CODE (constructor_type) != VECTOR_TYPE)
6425 /* A nonincremental scalar initializer--just return
6426 the element, after verifying there is just one. */
6427 if (VEC_empty (constructor_elt,constructor_elements))
6429 if (!constructor_erroneous)
6430 error_init ("empty scalar initializer");
6431 ret.value = error_mark_node;
6433 else if (VEC_length (constructor_elt,constructor_elements) != 1)
6435 error_init ("extra elements in scalar initializer");
6436 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
6439 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
6443 if (constructor_erroneous)
6444 ret.value = error_mark_node;
6447 ret.value = build_constructor (constructor_type,
6448 constructor_elements);
6449 if (constructor_constant)
6450 TREE_CONSTANT (ret.value) = 1;
6451 if (constructor_constant && constructor_simple)
6452 TREE_STATIC (ret.value) = 1;
6453 if (constructor_nonconst)
6454 CONSTRUCTOR_NON_CONST (ret.value) = 1;
6458 if (ret.value && TREE_CODE (ret.value) != CONSTRUCTOR)
6460 if (constructor_nonconst)
6461 ret.original_code = C_MAYBE_CONST_EXPR;
6462 else if (ret.original_code == C_MAYBE_CONST_EXPR)
6463 ret.original_code = ERROR_MARK;
6466 constructor_type = p->type;
6467 constructor_fields = p->fields;
6468 constructor_index = p->index;
6469 constructor_max_index = p->max_index;
6470 constructor_unfilled_index = p->unfilled_index;
6471 constructor_unfilled_fields = p->unfilled_fields;
6472 constructor_bit_index = p->bit_index;
6473 constructor_elements = p->elements;
6474 constructor_constant = p->constant;
6475 constructor_simple = p->simple;
6476 constructor_nonconst = p->nonconst;
6477 constructor_erroneous = p->erroneous;
6478 constructor_incremental = p->incremental;
6479 constructor_designated = p->designated;
6480 constructor_pending_elts = p->pending_elts;
6481 constructor_depth = p->depth;
6483 constructor_range_stack = p->range_stack;
6484 RESTORE_SPELLING_DEPTH (constructor_depth);
6486 constructor_stack = p->next;
6489 if (ret.value == 0 && constructor_stack == 0)
6490 ret.value = error_mark_node;
6494 /* Common handling for both array range and field name designators.
6495 ARRAY argument is nonzero for array ranges. Returns zero for success. */
6498 set_designator (int array)
6501 enum tree_code subcode;
6503 /* Don't die if an entire brace-pair level is superfluous
6504 in the containing level. */
6505 if (constructor_type == 0)
6508 /* If there were errors in this designator list already, bail out
6510 if (designator_erroneous)
6513 if (!designator_depth)
6515 gcc_assert (!constructor_range_stack);
6517 /* Designator list starts at the level of closest explicit
6519 while (constructor_stack->implicit)
6520 process_init_element (pop_init_level (1), true);
6521 constructor_designated = 1;
6525 switch (TREE_CODE (constructor_type))
6529 subtype = TREE_TYPE (constructor_fields);
6530 if (subtype != error_mark_node)
6531 subtype = TYPE_MAIN_VARIANT (subtype);
6534 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6540 subcode = TREE_CODE (subtype);
6541 if (array && subcode != ARRAY_TYPE)
6543 error_init ("array index in non-array initializer");
6546 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
6548 error_init ("field name not in record or union initializer");
6552 constructor_designated = 1;
6553 push_init_level (2);
6557 /* If there are range designators in designator list, push a new designator
6558 to constructor_range_stack. RANGE_END is end of such stack range or
6559 NULL_TREE if there is no range designator at this level. */
6562 push_range_stack (tree range_end)
6564 struct constructor_range_stack *p;
6566 p = GGC_NEW (struct constructor_range_stack);
6567 p->prev = constructor_range_stack;
6569 p->fields = constructor_fields;
6570 p->range_start = constructor_index;
6571 p->index = constructor_index;
6572 p->stack = constructor_stack;
6573 p->range_end = range_end;
6574 if (constructor_range_stack)
6575 constructor_range_stack->next = p;
6576 constructor_range_stack = p;
6579 /* Within an array initializer, specify the next index to be initialized.
6580 FIRST is that index. If LAST is nonzero, then initialize a range
6581 of indices, running from FIRST through LAST. */
6584 set_init_index (tree first, tree last)
6586 if (set_designator (1))
6589 designator_erroneous = 1;
6591 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
6592 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
6594 error_init ("array index in initializer not of integer type");
6598 if (TREE_CODE (first) != INTEGER_CST)
6600 first = c_fully_fold (first, false, NULL);
6601 if (TREE_CODE (first) == INTEGER_CST)
6602 pedwarn_init (input_location, OPT_pedantic,
6603 "array index in initializer is not "
6604 "an integer constant expression");
6607 if (last && TREE_CODE (last) != INTEGER_CST)
6609 last = c_fully_fold (last, false, NULL);
6610 if (TREE_CODE (last) == INTEGER_CST)
6611 pedwarn_init (input_location, OPT_pedantic,
6612 "array index in initializer is not "
6613 "an integer constant expression");
6616 if (TREE_CODE (first) != INTEGER_CST)
6617 error_init ("nonconstant array index in initializer");
6618 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
6619 error_init ("nonconstant array index in initializer");
6620 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
6621 error_init ("array index in non-array initializer");
6622 else if (tree_int_cst_sgn (first) == -1)
6623 error_init ("array index in initializer exceeds array bounds");
6624 else if (constructor_max_index
6625 && tree_int_cst_lt (constructor_max_index, first))
6626 error_init ("array index in initializer exceeds array bounds");
6629 constant_expression_warning (first);
6631 constant_expression_warning (last);
6632 constructor_index = convert (bitsizetype, first);
6636 if (tree_int_cst_equal (first, last))
6638 else if (tree_int_cst_lt (last, first))
6640 error_init ("empty index range in initializer");
6645 last = convert (bitsizetype, last);
6646 if (constructor_max_index != 0
6647 && tree_int_cst_lt (constructor_max_index, last))
6649 error_init ("array index range in initializer exceeds array bounds");
6656 designator_erroneous = 0;
6657 if (constructor_range_stack || last)
6658 push_range_stack (last);
6662 /* Within a struct initializer, specify the next field to be initialized. */
6665 set_init_label (tree fieldname)
6669 if (set_designator (0))
6672 designator_erroneous = 1;
6674 if (TREE_CODE (constructor_type) != RECORD_TYPE
6675 && TREE_CODE (constructor_type) != UNION_TYPE)
6677 error_init ("field name not in record or union initializer");
6681 for (tail = TYPE_FIELDS (constructor_type); tail;
6682 tail = TREE_CHAIN (tail))
6684 if (DECL_NAME (tail) == fieldname)
6689 error ("unknown field %qE specified in initializer", fieldname);
6692 constructor_fields = tail;
6694 designator_erroneous = 0;
6695 if (constructor_range_stack)
6696 push_range_stack (NULL_TREE);
6700 /* Add a new initializer to the tree of pending initializers. PURPOSE
6701 identifies the initializer, either array index or field in a structure.
6702 VALUE is the value of that index or field. If ORIGTYPE is not
6703 NULL_TREE, it is the original type of VALUE.
6705 IMPLICIT is true if value comes from pop_init_level (1),
6706 the new initializer has been merged with the existing one
6707 and thus no warnings should be emitted about overriding an
6708 existing initializer. */
6711 add_pending_init (tree purpose, tree value, tree origtype, bool implicit)
6713 struct init_node *p, **q, *r;
6715 q = &constructor_pending_elts;
6718 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6723 if (tree_int_cst_lt (purpose, p->purpose))
6725 else if (tree_int_cst_lt (p->purpose, purpose))
6731 if (TREE_SIDE_EFFECTS (p->value))
6732 warning_init (0, "initialized field with side-effects overwritten");
6733 else if (warn_override_init)
6734 warning_init (OPT_Woverride_init, "initialized field overwritten");
6737 p->origtype = origtype;
6746 bitpos = bit_position (purpose);
6750 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
6752 else if (p->purpose != purpose)
6758 if (TREE_SIDE_EFFECTS (p->value))
6759 warning_init (0, "initialized field with side-effects overwritten");
6760 else if (warn_override_init)
6761 warning_init (OPT_Woverride_init, "initialized field overwritten");
6764 p->origtype = origtype;
6770 r = GGC_NEW (struct init_node);
6771 r->purpose = purpose;
6773 r->origtype = origtype;
6783 struct init_node *s;
6787 if (p->balance == 0)
6789 else if (p->balance < 0)
6796 p->left->parent = p;
6813 constructor_pending_elts = r;
6818 struct init_node *t = r->right;
6822 r->right->parent = r;
6827 p->left->parent = p;
6830 p->balance = t->balance < 0;
6831 r->balance = -(t->balance > 0);
6846 constructor_pending_elts = t;
6852 /* p->balance == +1; growth of left side balances the node. */
6857 else /* r == p->right */
6859 if (p->balance == 0)
6860 /* Growth propagation from right side. */
6862 else if (p->balance > 0)
6869 p->right->parent = p;
6886 constructor_pending_elts = r;
6888 else /* r->balance == -1 */
6891 struct init_node *t = r->left;
6895 r->left->parent = r;
6900 p->right->parent = p;
6903 r->balance = (t->balance < 0);
6904 p->balance = -(t->balance > 0);
6919 constructor_pending_elts = t;
6925 /* p->balance == -1; growth of right side balances the node. */
6936 /* Build AVL tree from a sorted chain. */
6939 set_nonincremental_init (void)
6941 unsigned HOST_WIDE_INT ix;
6944 if (TREE_CODE (constructor_type) != RECORD_TYPE
6945 && TREE_CODE (constructor_type) != ARRAY_TYPE)
6948 FOR_EACH_CONSTRUCTOR_ELT (constructor_elements, ix, index, value)
6949 add_pending_init (index, value, NULL_TREE, false);
6950 constructor_elements = 0;
6951 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6953 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
6954 /* Skip any nameless bit fields at the beginning. */
6955 while (constructor_unfilled_fields != 0
6956 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6957 && DECL_NAME (constructor_unfilled_fields) == 0)
6958 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
6961 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6963 if (TYPE_DOMAIN (constructor_type))
6964 constructor_unfilled_index
6965 = convert (bitsizetype,
6966 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
6968 constructor_unfilled_index = bitsize_zero_node;
6970 constructor_incremental = 0;
6973 /* Build AVL tree from a string constant. */
6976 set_nonincremental_init_from_string (tree str)
6978 tree value, purpose, type;
6979 HOST_WIDE_INT val[2];
6980 const char *p, *end;
6981 int byte, wchar_bytes, charwidth, bitpos;
6983 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
6985 wchar_bytes = TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str))) / BITS_PER_UNIT;
6986 charwidth = TYPE_PRECISION (char_type_node);
6987 type = TREE_TYPE (constructor_type);
6988 p = TREE_STRING_POINTER (str);
6989 end = p + TREE_STRING_LENGTH (str);
6991 for (purpose = bitsize_zero_node;
6992 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
6993 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
6995 if (wchar_bytes == 1)
6997 val[1] = (unsigned char) *p++;
7004 for (byte = 0; byte < wchar_bytes; byte++)
7006 if (BYTES_BIG_ENDIAN)
7007 bitpos = (wchar_bytes - byte - 1) * charwidth;
7009 bitpos = byte * charwidth;
7010 val[bitpos < HOST_BITS_PER_WIDE_INT]
7011 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
7012 << (bitpos % HOST_BITS_PER_WIDE_INT);
7016 if (!TYPE_UNSIGNED (type))
7018 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
7019 if (bitpos < HOST_BITS_PER_WIDE_INT)
7021 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
7023 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
7027 else if (bitpos == HOST_BITS_PER_WIDE_INT)
7032 else if (val[0] & (((HOST_WIDE_INT) 1)
7033 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
7034 val[0] |= ((HOST_WIDE_INT) -1)
7035 << (bitpos - HOST_BITS_PER_WIDE_INT);
7038 value = build_int_cst_wide (type, val[1], val[0]);
7039 add_pending_init (purpose, value, NULL_TREE, false);
7042 constructor_incremental = 0;
7045 /* Return value of FIELD in pending initializer or zero if the field was
7046 not initialized yet. */
7049 find_init_member (tree field)
7051 struct init_node *p;
7053 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
7055 if (constructor_incremental
7056 && tree_int_cst_lt (field, constructor_unfilled_index))
7057 set_nonincremental_init ();
7059 p = constructor_pending_elts;
7062 if (tree_int_cst_lt (field, p->purpose))
7064 else if (tree_int_cst_lt (p->purpose, field))
7070 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
7072 tree bitpos = bit_position (field);
7074 if (constructor_incremental
7075 && (!constructor_unfilled_fields
7076 || tree_int_cst_lt (bitpos,
7077 bit_position (constructor_unfilled_fields))))
7078 set_nonincremental_init ();
7080 p = constructor_pending_elts;
7083 if (field == p->purpose)
7085 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
7091 else if (TREE_CODE (constructor_type) == UNION_TYPE)
7093 if (!VEC_empty (constructor_elt, constructor_elements)
7094 && (VEC_last (constructor_elt, constructor_elements)->index
7096 return VEC_last (constructor_elt, constructor_elements)->value;
7101 /* "Output" the next constructor element.
7102 At top level, really output it to assembler code now.
7103 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
7104 If ORIGTYPE is not NULL_TREE, it is the original type of VALUE.
7105 TYPE is the data type that the containing data type wants here.
7106 FIELD is the field (a FIELD_DECL) or the index that this element fills.
7107 If VALUE is a string constant, STRICT_STRING is true if it is
7108 unparenthesized or we should not warn here for it being parenthesized.
7109 For other types of VALUE, STRICT_STRING is not used.
7111 PENDING if non-nil means output pending elements that belong
7112 right after this element. (PENDING is normally 1;
7113 it is 0 while outputting pending elements, to avoid recursion.)
7115 IMPLICIT is true if value comes from pop_init_level (1),
7116 the new initializer has been merged with the existing one
7117 and thus no warnings should be emitted about overriding an
7118 existing initializer. */
7121 output_init_element (tree value, tree origtype, bool strict_string, tree type,
7122 tree field, int pending, bool implicit)
7124 tree semantic_type = NULL_TREE;
7125 constructor_elt *celt;
7126 bool maybe_const = true;
7129 if (type == error_mark_node || value == error_mark_node)
7131 constructor_erroneous = 1;
7134 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
7135 && (TREE_CODE (value) == STRING_CST
7136 || TREE_CODE (value) == COMPOUND_LITERAL_EXPR)
7137 && !(TREE_CODE (value) == STRING_CST
7138 && TREE_CODE (type) == ARRAY_TYPE
7139 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
7140 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
7141 TYPE_MAIN_VARIANT (type)))
7142 value = array_to_pointer_conversion (input_location, value);
7144 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
7145 && require_constant_value && !flag_isoc99 && pending)
7147 /* As an extension, allow initializing objects with static storage
7148 duration with compound literals (which are then treated just as
7149 the brace enclosed list they contain). */
7150 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
7151 value = DECL_INITIAL (decl);
7154 npc = null_pointer_constant_p (value);
7155 if (TREE_CODE (value) == EXCESS_PRECISION_EXPR)
7157 semantic_type = TREE_TYPE (value);
7158 value = TREE_OPERAND (value, 0);
7160 value = c_fully_fold (value, require_constant_value, &maybe_const);
7162 if (value == error_mark_node)
7163 constructor_erroneous = 1;
7164 else if (!TREE_CONSTANT (value))
7165 constructor_constant = 0;
7166 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
7167 || ((TREE_CODE (constructor_type) == RECORD_TYPE
7168 || TREE_CODE (constructor_type) == UNION_TYPE)
7169 && DECL_C_BIT_FIELD (field)
7170 && TREE_CODE (value) != INTEGER_CST))
7171 constructor_simple = 0;
7173 constructor_nonconst = 1;
7175 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
7177 if (require_constant_value)
7179 error_init ("initializer element is not constant");
7180 value = error_mark_node;
7182 else if (require_constant_elements)
7183 pedwarn (input_location, 0,
7184 "initializer element is not computable at load time");
7186 else if (!maybe_const
7187 && (require_constant_value || require_constant_elements))
7188 pedwarn_init (input_location, 0,
7189 "initializer element is not a constant expression");
7191 /* Issue -Wc++-compat warnings about initializing a bitfield with
7194 && field != NULL_TREE
7195 && TREE_CODE (field) == FIELD_DECL
7196 && DECL_BIT_FIELD_TYPE (field) != NULL_TREE
7197 && (TYPE_MAIN_VARIANT (DECL_BIT_FIELD_TYPE (field))
7198 != TYPE_MAIN_VARIANT (type))
7199 && TREE_CODE (DECL_BIT_FIELD_TYPE (field)) == ENUMERAL_TYPE)
7201 tree checktype = origtype != NULL_TREE ? origtype : TREE_TYPE (value);
7202 if (checktype != error_mark_node
7203 && (TYPE_MAIN_VARIANT (checktype)
7204 != TYPE_MAIN_VARIANT (DECL_BIT_FIELD_TYPE (field))))
7205 warning_init (OPT_Wc___compat,
7206 "enum conversion in initialization is invalid in C++");
7209 /* If this field is empty (and not at the end of structure),
7210 don't do anything other than checking the initializer. */
7212 && (TREE_TYPE (field) == error_mark_node
7213 || (COMPLETE_TYPE_P (TREE_TYPE (field))
7214 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
7215 && (TREE_CODE (constructor_type) == ARRAY_TYPE
7216 || TREE_CHAIN (field)))))
7220 value = build1 (EXCESS_PRECISION_EXPR, semantic_type, value);
7221 value = digest_init (input_location, type, value, origtype, npc,
7222 strict_string, require_constant_value);
7223 if (value == error_mark_node)
7225 constructor_erroneous = 1;
7228 if (require_constant_value || require_constant_elements)
7229 constant_expression_warning (value);
7231 /* If this element doesn't come next in sequence,
7232 put it on constructor_pending_elts. */
7233 if (TREE_CODE (constructor_type) == ARRAY_TYPE
7234 && (!constructor_incremental
7235 || !tree_int_cst_equal (field, constructor_unfilled_index)))
7237 if (constructor_incremental
7238 && tree_int_cst_lt (field, constructor_unfilled_index))
7239 set_nonincremental_init ();
7241 add_pending_init (field, value, origtype, implicit);
7244 else if (TREE_CODE (constructor_type) == RECORD_TYPE
7245 && (!constructor_incremental
7246 || field != constructor_unfilled_fields))
7248 /* We do this for records but not for unions. In a union,
7249 no matter which field is specified, it can be initialized
7250 right away since it starts at the beginning of the union. */
7251 if (constructor_incremental)
7253 if (!constructor_unfilled_fields)
7254 set_nonincremental_init ();
7257 tree bitpos, unfillpos;
7259 bitpos = bit_position (field);
7260 unfillpos = bit_position (constructor_unfilled_fields);
7262 if (tree_int_cst_lt (bitpos, unfillpos))
7263 set_nonincremental_init ();
7267 add_pending_init (field, value, origtype, implicit);
7270 else if (TREE_CODE (constructor_type) == UNION_TYPE
7271 && !VEC_empty (constructor_elt, constructor_elements))
7275 if (TREE_SIDE_EFFECTS (VEC_last (constructor_elt,
7276 constructor_elements)->value))
7278 "initialized field with side-effects overwritten");
7279 else if (warn_override_init)
7280 warning_init (OPT_Woverride_init, "initialized field overwritten");
7283 /* We can have just one union field set. */
7284 constructor_elements = 0;
7287 /* Otherwise, output this element either to
7288 constructor_elements or to the assembler file. */
7290 celt = VEC_safe_push (constructor_elt, gc, constructor_elements, NULL);
7291 celt->index = field;
7292 celt->value = value;
7294 /* Advance the variable that indicates sequential elements output. */
7295 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
7296 constructor_unfilled_index
7297 = size_binop (PLUS_EXPR, constructor_unfilled_index,
7299 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
7301 constructor_unfilled_fields
7302 = TREE_CHAIN (constructor_unfilled_fields);
7304 /* Skip any nameless bit fields. */
7305 while (constructor_unfilled_fields != 0
7306 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
7307 && DECL_NAME (constructor_unfilled_fields) == 0)
7308 constructor_unfilled_fields =
7309 TREE_CHAIN (constructor_unfilled_fields);
7311 else if (TREE_CODE (constructor_type) == UNION_TYPE)
7312 constructor_unfilled_fields = 0;
7314 /* Now output any pending elements which have become next. */
7316 output_pending_init_elements (0);
7319 /* Output any pending elements which have become next.
7320 As we output elements, constructor_unfilled_{fields,index}
7321 advances, which may cause other elements to become next;
7322 if so, they too are output.
7324 If ALL is 0, we return when there are
7325 no more pending elements to output now.
7327 If ALL is 1, we output space as necessary so that
7328 we can output all the pending elements. */
7331 output_pending_init_elements (int all)
7333 struct init_node *elt = constructor_pending_elts;
7338 /* Look through the whole pending tree.
7339 If we find an element that should be output now,
7340 output it. Otherwise, set NEXT to the element
7341 that comes first among those still pending. */
7346 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
7348 if (tree_int_cst_equal (elt->purpose,
7349 constructor_unfilled_index))
7350 output_init_element (elt->value, elt->origtype, true,
7351 TREE_TYPE (constructor_type),
7352 constructor_unfilled_index, 0, false);
7353 else if (tree_int_cst_lt (constructor_unfilled_index,
7356 /* Advance to the next smaller node. */
7361 /* We have reached the smallest node bigger than the
7362 current unfilled index. Fill the space first. */
7363 next = elt->purpose;
7369 /* Advance to the next bigger node. */
7374 /* We have reached the biggest node in a subtree. Find
7375 the parent of it, which is the next bigger node. */
7376 while (elt->parent && elt->parent->right == elt)
7379 if (elt && tree_int_cst_lt (constructor_unfilled_index,
7382 next = elt->purpose;
7388 else if (TREE_CODE (constructor_type) == RECORD_TYPE
7389 || TREE_CODE (constructor_type) == UNION_TYPE)
7391 tree ctor_unfilled_bitpos, elt_bitpos;
7393 /* If the current record is complete we are done. */
7394 if (constructor_unfilled_fields == 0)
7397 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
7398 elt_bitpos = bit_position (elt->purpose);
7399 /* We can't compare fields here because there might be empty
7400 fields in between. */
7401 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
7403 constructor_unfilled_fields = elt->purpose;
7404 output_init_element (elt->value, elt->origtype, true,
7405 TREE_TYPE (elt->purpose),
7406 elt->purpose, 0, false);
7408 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
7410 /* Advance to the next smaller node. */
7415 /* We have reached the smallest node bigger than the
7416 current unfilled field. Fill the space first. */
7417 next = elt->purpose;
7423 /* Advance to the next bigger node. */
7428 /* We have reached the biggest node in a subtree. Find
7429 the parent of it, which is the next bigger node. */
7430 while (elt->parent && elt->parent->right == elt)
7434 && (tree_int_cst_lt (ctor_unfilled_bitpos,
7435 bit_position (elt->purpose))))
7437 next = elt->purpose;
7445 /* Ordinarily return, but not if we want to output all
7446 and there are elements left. */
7447 if (!(all && next != 0))
7450 /* If it's not incremental, just skip over the gap, so that after
7451 jumping to retry we will output the next successive element. */
7452 if (TREE_CODE (constructor_type) == RECORD_TYPE
7453 || TREE_CODE (constructor_type) == UNION_TYPE)
7454 constructor_unfilled_fields = next;
7455 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
7456 constructor_unfilled_index = next;
7458 /* ELT now points to the node in the pending tree with the next
7459 initializer to output. */
7463 /* Add one non-braced element to the current constructor level.
7464 This adjusts the current position within the constructor's type.
7465 This may also start or terminate implicit levels
7466 to handle a partly-braced initializer.
7468 Once this has found the correct level for the new element,
7469 it calls output_init_element.
7471 IMPLICIT is true if value comes from pop_init_level (1),
7472 the new initializer has been merged with the existing one
7473 and thus no warnings should be emitted about overriding an
7474 existing initializer. */
7477 process_init_element (struct c_expr value, bool implicit)
7479 tree orig_value = value.value;
7480 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
7481 bool strict_string = value.original_code == STRING_CST;
7483 designator_depth = 0;
7484 designator_erroneous = 0;
7486 /* Handle superfluous braces around string cst as in
7487 char x[] = {"foo"}; */
7490 && TREE_CODE (constructor_type) == ARRAY_TYPE
7491 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
7492 && integer_zerop (constructor_unfilled_index))
7494 if (constructor_stack->replacement_value.value)
7495 error_init ("excess elements in char array initializer");
7496 constructor_stack->replacement_value = value;
7500 if (constructor_stack->replacement_value.value != 0)
7502 error_init ("excess elements in struct initializer");
7506 /* Ignore elements of a brace group if it is entirely superfluous
7507 and has already been diagnosed. */
7508 if (constructor_type == 0)
7511 /* If we've exhausted any levels that didn't have braces,
7513 while (constructor_stack->implicit)
7515 if ((TREE_CODE (constructor_type) == RECORD_TYPE
7516 || TREE_CODE (constructor_type) == UNION_TYPE)
7517 && constructor_fields == 0)
7518 process_init_element (pop_init_level (1), true);
7519 else if ((TREE_CODE (constructor_type) == ARRAY_TYPE
7520 || TREE_CODE (constructor_type) == VECTOR_TYPE)
7521 && (constructor_max_index == 0
7522 || tree_int_cst_lt (constructor_max_index,
7523 constructor_index)))
7524 process_init_element (pop_init_level (1), true);
7529 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
7530 if (constructor_range_stack)
7532 /* If value is a compound literal and we'll be just using its
7533 content, don't put it into a SAVE_EXPR. */
7534 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
7535 || !require_constant_value
7538 tree semantic_type = NULL_TREE;
7539 if (TREE_CODE (value.value) == EXCESS_PRECISION_EXPR)
7541 semantic_type = TREE_TYPE (value.value);
7542 value.value = TREE_OPERAND (value.value, 0);
7544 value.value = c_save_expr (value.value);
7546 value.value = build1 (EXCESS_PRECISION_EXPR, semantic_type,
7553 if (TREE_CODE (constructor_type) == RECORD_TYPE)
7556 enum tree_code fieldcode;
7558 if (constructor_fields == 0)
7560 pedwarn_init (input_location, 0,
7561 "excess elements in struct initializer");
7565 fieldtype = TREE_TYPE (constructor_fields);
7566 if (fieldtype != error_mark_node)
7567 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
7568 fieldcode = TREE_CODE (fieldtype);
7570 /* Error for non-static initialization of a flexible array member. */
7571 if (fieldcode == ARRAY_TYPE
7572 && !require_constant_value
7573 && TYPE_SIZE (fieldtype) == NULL_TREE
7574 && TREE_CHAIN (constructor_fields) == NULL_TREE)
7576 error_init ("non-static initialization of a flexible array member");
7580 /* Accept a string constant to initialize a subarray. */
7581 if (value.value != 0
7582 && fieldcode == ARRAY_TYPE
7583 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
7585 value.value = orig_value;
7586 /* Otherwise, if we have come to a subaggregate,
7587 and we don't have an element of its type, push into it. */
7588 else if (value.value != 0
7589 && value.value != error_mark_node
7590 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
7591 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
7592 || fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
7594 push_init_level (1);
7600 push_member_name (constructor_fields);
7601 output_init_element (value.value, value.original_type,
7602 strict_string, fieldtype,
7603 constructor_fields, 1, implicit);
7604 RESTORE_SPELLING_DEPTH (constructor_depth);
7607 /* Do the bookkeeping for an element that was
7608 directly output as a constructor. */
7610 /* For a record, keep track of end position of last field. */
7611 if (DECL_SIZE (constructor_fields))
7612 constructor_bit_index
7613 = size_binop (PLUS_EXPR,
7614 bit_position (constructor_fields),
7615 DECL_SIZE (constructor_fields));
7617 /* If the current field was the first one not yet written out,
7618 it isn't now, so update. */
7619 if (constructor_unfilled_fields == constructor_fields)
7621 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
7622 /* Skip any nameless bit fields. */
7623 while (constructor_unfilled_fields != 0
7624 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
7625 && DECL_NAME (constructor_unfilled_fields) == 0)
7626 constructor_unfilled_fields =
7627 TREE_CHAIN (constructor_unfilled_fields);
7631 constructor_fields = TREE_CHAIN (constructor_fields);
7632 /* Skip any nameless bit fields at the beginning. */
7633 while (constructor_fields != 0
7634 && DECL_C_BIT_FIELD (constructor_fields)
7635 && DECL_NAME (constructor_fields) == 0)
7636 constructor_fields = TREE_CHAIN (constructor_fields);
7638 else if (TREE_CODE (constructor_type) == UNION_TYPE)
7641 enum tree_code fieldcode;
7643 if (constructor_fields == 0)
7645 pedwarn_init (input_location, 0,
7646 "excess elements in union initializer");
7650 fieldtype = TREE_TYPE (constructor_fields);
7651 if (fieldtype != error_mark_node)
7652 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
7653 fieldcode = TREE_CODE (fieldtype);
7655 /* Warn that traditional C rejects initialization of unions.
7656 We skip the warning if the value is zero. This is done
7657 under the assumption that the zero initializer in user
7658 code appears conditioned on e.g. __STDC__ to avoid
7659 "missing initializer" warnings and relies on default
7660 initialization to zero in the traditional C case.
7661 We also skip the warning if the initializer is designated,
7662 again on the assumption that this must be conditional on
7663 __STDC__ anyway (and we've already complained about the
7664 member-designator already). */
7665 if (!in_system_header && !constructor_designated
7666 && !(value.value && (integer_zerop (value.value)
7667 || real_zerop (value.value))))
7668 warning (OPT_Wtraditional, "traditional C rejects initialization "
7671 /* Accept a string constant to initialize a subarray. */
7672 if (value.value != 0
7673 && fieldcode == ARRAY_TYPE
7674 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
7676 value.value = orig_value;
7677 /* Otherwise, if we have come to a subaggregate,
7678 and we don't have an element of its type, push into it. */
7679 else if (value.value != 0
7680 && value.value != error_mark_node
7681 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
7682 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
7683 || fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
7685 push_init_level (1);
7691 push_member_name (constructor_fields);
7692 output_init_element (value.value, value.original_type,
7693 strict_string, fieldtype,
7694 constructor_fields, 1, implicit);
7695 RESTORE_SPELLING_DEPTH (constructor_depth);
7698 /* Do the bookkeeping for an element that was
7699 directly output as a constructor. */
7701 constructor_bit_index = DECL_SIZE (constructor_fields);
7702 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
7705 constructor_fields = 0;
7707 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
7709 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
7710 enum tree_code eltcode = TREE_CODE (elttype);
7712 /* Accept a string constant to initialize a subarray. */
7713 if (value.value != 0
7714 && eltcode == ARRAY_TYPE
7715 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
7717 value.value = orig_value;
7718 /* Otherwise, if we have come to a subaggregate,
7719 and we don't have an element of its type, push into it. */
7720 else if (value.value != 0
7721 && value.value != error_mark_node
7722 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
7723 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
7724 || eltcode == UNION_TYPE || eltcode == VECTOR_TYPE))
7726 push_init_level (1);
7730 if (constructor_max_index != 0
7731 && (tree_int_cst_lt (constructor_max_index, constructor_index)
7732 || integer_all_onesp (constructor_max_index)))
7734 pedwarn_init (input_location, 0,
7735 "excess elements in array initializer");
7739 /* Now output the actual element. */
7742 push_array_bounds (tree_low_cst (constructor_index, 1));
7743 output_init_element (value.value, value.original_type,
7744 strict_string, elttype,
7745 constructor_index, 1, implicit);
7746 RESTORE_SPELLING_DEPTH (constructor_depth);
7750 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
7753 /* If we are doing the bookkeeping for an element that was
7754 directly output as a constructor, we must update
7755 constructor_unfilled_index. */
7756 constructor_unfilled_index = constructor_index;
7758 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
7760 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
7762 /* Do a basic check of initializer size. Note that vectors
7763 always have a fixed size derived from their type. */
7764 if (tree_int_cst_lt (constructor_max_index, constructor_index))
7766 pedwarn_init (input_location, 0,
7767 "excess elements in vector initializer");
7771 /* Now output the actual element. */
7774 if (TREE_CODE (value.value) == VECTOR_CST)
7775 elttype = TYPE_MAIN_VARIANT (constructor_type);
7776 output_init_element (value.value, value.original_type,
7777 strict_string, elttype,
7778 constructor_index, 1, implicit);
7782 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
7785 /* If we are doing the bookkeeping for an element that was
7786 directly output as a constructor, we must update
7787 constructor_unfilled_index. */
7788 constructor_unfilled_index = constructor_index;
7791 /* Handle the sole element allowed in a braced initializer
7792 for a scalar variable. */
7793 else if (constructor_type != error_mark_node
7794 && constructor_fields == 0)
7796 pedwarn_init (input_location, 0,
7797 "excess elements in scalar initializer");
7803 output_init_element (value.value, value.original_type,
7804 strict_string, constructor_type,
7805 NULL_TREE, 1, implicit);
7806 constructor_fields = 0;
7809 /* Handle range initializers either at this level or anywhere higher
7810 in the designator stack. */
7811 if (constructor_range_stack)
7813 struct constructor_range_stack *p, *range_stack;
7816 range_stack = constructor_range_stack;
7817 constructor_range_stack = 0;
7818 while (constructor_stack != range_stack->stack)
7820 gcc_assert (constructor_stack->implicit);
7821 process_init_element (pop_init_level (1), true);
7823 for (p = range_stack;
7824 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
7827 gcc_assert (constructor_stack->implicit);
7828 process_init_element (pop_init_level (1), true);
7831 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
7832 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
7837 constructor_index = p->index;
7838 constructor_fields = p->fields;
7839 if (finish && p->range_end && p->index == p->range_start)
7847 push_init_level (2);
7848 p->stack = constructor_stack;
7849 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
7850 p->index = p->range_start;
7854 constructor_range_stack = range_stack;
7861 constructor_range_stack = 0;
7864 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
7865 (guaranteed to be 'volatile' or null) and ARGS (represented using
7866 an ASM_EXPR node). */
7868 build_asm_stmt (tree cv_qualifier, tree args)
7870 if (!ASM_VOLATILE_P (args) && cv_qualifier)
7871 ASM_VOLATILE_P (args) = 1;
7872 return add_stmt (args);
7875 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
7876 some INPUTS, and some CLOBBERS. The latter three may be NULL.
7877 SIMPLE indicates whether there was anything at all after the
7878 string in the asm expression -- asm("blah") and asm("blah" : )
7879 are subtly different. We use a ASM_EXPR node to represent this. */
7881 build_asm_expr (location_t loc, tree string, tree outputs, tree inputs,
7882 tree clobbers, bool simple)
7887 const char *constraint;
7888 const char **oconstraints;
7889 bool allows_mem, allows_reg, is_inout;
7890 int ninputs, noutputs;
7892 ninputs = list_length (inputs);
7893 noutputs = list_length (outputs);
7894 oconstraints = (const char **) alloca (noutputs * sizeof (const char *));
7896 string = resolve_asm_operand_names (string, outputs, inputs);
7898 /* Remove output conversions that change the type but not the mode. */
7899 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
7901 tree output = TREE_VALUE (tail);
7903 /* ??? Really, this should not be here. Users should be using a
7904 proper lvalue, dammit. But there's a long history of using casts
7905 in the output operands. In cases like longlong.h, this becomes a
7906 primitive form of typechecking -- if the cast can be removed, then
7907 the output operand had a type of the proper width; otherwise we'll
7908 get an error. Gross, but ... */
7909 STRIP_NOPS (output);
7911 if (!lvalue_or_else (output, lv_asm))
7912 output = error_mark_node;
7914 if (output != error_mark_node
7915 && (TREE_READONLY (output)
7916 || TYPE_READONLY (TREE_TYPE (output))
7917 || ((TREE_CODE (TREE_TYPE (output)) == RECORD_TYPE
7918 || TREE_CODE (TREE_TYPE (output)) == UNION_TYPE)
7919 && C_TYPE_FIELDS_READONLY (TREE_TYPE (output)))))
7920 readonly_error (output, lv_asm);
7922 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
7923 oconstraints[i] = constraint;
7925 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
7926 &allows_mem, &allows_reg, &is_inout))
7928 /* If the operand is going to end up in memory,
7929 mark it addressable. */
7930 if (!allows_reg && !c_mark_addressable (output))
7931 output = error_mark_node;
7934 output = error_mark_node;
7936 TREE_VALUE (tail) = output;
7939 for (i = 0, tail = inputs; tail; ++i, tail = TREE_CHAIN (tail))
7943 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
7944 input = TREE_VALUE (tail);
7946 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
7947 oconstraints, &allows_mem, &allows_reg))
7949 /* If the operand is going to end up in memory,
7950 mark it addressable. */
7951 if (!allows_reg && allows_mem)
7953 /* Strip the nops as we allow this case. FIXME, this really
7954 should be rejected or made deprecated. */
7956 if (!c_mark_addressable (input))
7957 input = error_mark_node;
7961 input = error_mark_node;
7963 TREE_VALUE (tail) = input;
7966 args = build_stmt (loc, ASM_EXPR, string, outputs, inputs, clobbers);
7968 /* asm statements without outputs, including simple ones, are treated
7970 ASM_INPUT_P (args) = simple;
7971 ASM_VOLATILE_P (args) = (noutputs == 0);
7976 /* Generate a goto statement to LABEL. LOC is the location of the
7980 c_finish_goto_label (location_t loc, tree label)
7982 tree decl = lookup_label (label);
7986 if (C_DECL_UNJUMPABLE_STMT_EXPR (decl))
7988 error_at (loc, "jump into statement expression");
7992 if (C_DECL_UNJUMPABLE_VM (decl))
7995 "jump into scope of identifier with variably modified type");
7999 if (!C_DECL_UNDEFINABLE_STMT_EXPR (decl))
8001 /* No jump from outside this statement expression context, so
8002 record that there is a jump from within this context. */
8003 struct c_label_list *nlist;
8004 nlist = XOBNEW (&parser_obstack, struct c_label_list);
8005 nlist->next = label_context_stack_se->labels_used;
8006 nlist->label = decl;
8007 label_context_stack_se->labels_used = nlist;
8010 if (!C_DECL_UNDEFINABLE_VM (decl))
8012 /* No jump from outside this context context of identifiers with
8013 variably modified type, so record that there is a jump from
8014 within this context. */
8015 struct c_label_list *nlist;
8016 nlist = XOBNEW (&parser_obstack, struct c_label_list);
8017 nlist->next = label_context_stack_vm->labels_used;
8018 nlist->label = decl;
8019 label_context_stack_vm->labels_used = nlist;
8022 TREE_USED (decl) = 1;
8024 tree t = build1 (GOTO_EXPR, void_type_node, decl);
8025 SET_EXPR_LOCATION (t, loc);
8026 return add_stmt (t);
8030 /* Generate a computed goto statement to EXPR. LOC is the location of
8034 c_finish_goto_ptr (location_t loc, tree expr)
8037 pedwarn (loc, OPT_pedantic, "ISO C forbids %<goto *expr;%>");
8038 expr = c_fully_fold (expr, false, NULL);
8039 expr = convert (ptr_type_node, expr);
8040 t = build1 (GOTO_EXPR, void_type_node, expr);
8041 SET_EXPR_LOCATION (t, loc);
8042 return add_stmt (t);
8045 /* Generate a C `return' statement. RETVAL is the expression for what
8046 to return, or a null pointer for `return;' with no value. LOC is
8047 the location of the return statement. If ORIGTYPE is not NULL_TREE, it
8048 is the original type of RETVAL. */
8051 c_finish_return (location_t loc, tree retval, tree origtype)
8053 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl)), ret_stmt;
8054 bool no_warning = false;
8057 if (TREE_THIS_VOLATILE (current_function_decl))
8059 "function declared %<noreturn%> has a %<return%> statement");
8063 tree semantic_type = NULL_TREE;
8064 npc = null_pointer_constant_p (retval);
8065 if (TREE_CODE (retval) == EXCESS_PRECISION_EXPR)
8067 semantic_type = TREE_TYPE (retval);
8068 retval = TREE_OPERAND (retval, 0);
8070 retval = c_fully_fold (retval, false, NULL);
8072 retval = build1 (EXCESS_PRECISION_EXPR, semantic_type, retval);
8077 current_function_returns_null = 1;
8078 if ((warn_return_type || flag_isoc99)
8079 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
8081 pedwarn_c99 (loc, flag_isoc99 ? 0 : OPT_Wreturn_type,
8082 "%<return%> with no value, in "
8083 "function returning non-void");
8087 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
8089 current_function_returns_null = 1;
8090 if (TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
8092 "%<return%> with a value, in function returning void");
8094 pedwarn (loc, OPT_pedantic, "ISO C forbids "
8095 "%<return%> with expression, in function returning void");
8099 tree t = convert_for_assignment (loc, valtype, retval, origtype,
8101 npc, NULL_TREE, NULL_TREE, 0);
8102 tree res = DECL_RESULT (current_function_decl);
8105 current_function_returns_value = 1;
8106 if (t == error_mark_node)
8109 inner = t = convert (TREE_TYPE (res), t);
8111 /* Strip any conversions, additions, and subtractions, and see if
8112 we are returning the address of a local variable. Warn if so. */
8115 switch (TREE_CODE (inner))
8118 case NON_LVALUE_EXPR:
8120 case POINTER_PLUS_EXPR:
8121 inner = TREE_OPERAND (inner, 0);
8125 /* If the second operand of the MINUS_EXPR has a pointer
8126 type (or is converted from it), this may be valid, so
8127 don't give a warning. */
8129 tree op1 = TREE_OPERAND (inner, 1);
8131 while (!POINTER_TYPE_P (TREE_TYPE (op1))
8132 && (CONVERT_EXPR_P (op1)
8133 || TREE_CODE (op1) == NON_LVALUE_EXPR))
8134 op1 = TREE_OPERAND (op1, 0);
8136 if (POINTER_TYPE_P (TREE_TYPE (op1)))
8139 inner = TREE_OPERAND (inner, 0);
8144 inner = TREE_OPERAND (inner, 0);
8146 while (REFERENCE_CLASS_P (inner)
8147 && TREE_CODE (inner) != INDIRECT_REF)
8148 inner = TREE_OPERAND (inner, 0);
8151 && !DECL_EXTERNAL (inner)
8152 && !TREE_STATIC (inner)
8153 && DECL_CONTEXT (inner) == current_function_decl)
8155 0, "function returns address of local variable");
8165 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
8166 SET_EXPR_LOCATION (retval, loc);
8168 if (warn_sequence_point)
8169 verify_sequence_points (retval);
8172 ret_stmt = build_stmt (loc, RETURN_EXPR, retval);
8173 TREE_NO_WARNING (ret_stmt) |= no_warning;
8174 return add_stmt (ret_stmt);
8178 /* The SWITCH_EXPR being built. */
8181 /* The original type of the testing expression, i.e. before the
8182 default conversion is applied. */
8185 /* A splay-tree mapping the low element of a case range to the high
8186 element, or NULL_TREE if there is no high element. Used to
8187 determine whether or not a new case label duplicates an old case
8188 label. We need a tree, rather than simply a hash table, because
8189 of the GNU case range extension. */
8192 /* Number of nested statement expressions within this switch
8193 statement; if nonzero, case and default labels may not
8195 unsigned int blocked_stmt_expr;
8197 /* Scope of outermost declarations of identifiers with variably
8198 modified type within this switch statement; if nonzero, case and
8199 default labels may not appear. */
8200 unsigned int blocked_vm;
8202 /* The next node on the stack. */
8203 struct c_switch *next;
8206 /* A stack of the currently active switch statements. The innermost
8207 switch statement is on the top of the stack. There is no need to
8208 mark the stack for garbage collection because it is only active
8209 during the processing of the body of a function, and we never
8210 collect at that point. */
8212 struct c_switch *c_switch_stack;
8214 /* Start a C switch statement, testing expression EXP. Return the new
8215 SWITCH_EXPR. SWITCH_LOC is the location of the `switch'.
8216 SWITCH_COND_LOC is the location of the switch's condition. */
8219 c_start_case (location_t switch_loc,
8220 location_t switch_cond_loc,
8223 tree orig_type = error_mark_node;
8224 struct c_switch *cs;
8226 if (exp != error_mark_node)
8228 orig_type = TREE_TYPE (exp);
8230 if (!INTEGRAL_TYPE_P (orig_type))
8232 if (orig_type != error_mark_node)
8234 error_at (switch_cond_loc, "switch quantity not an integer");
8235 orig_type = error_mark_node;
8237 exp = integer_zero_node;
8241 tree type = TYPE_MAIN_VARIANT (orig_type);
8243 if (!in_system_header
8244 && (type == long_integer_type_node
8245 || type == long_unsigned_type_node))
8246 warning_at (switch_cond_loc,
8247 OPT_Wtraditional, "%<long%> switch expression not "
8248 "converted to %<int%> in ISO C");
8250 exp = c_fully_fold (exp, false, NULL);
8251 exp = default_conversion (exp);
8253 if (warn_sequence_point)
8254 verify_sequence_points (exp);
8258 /* Add this new SWITCH_EXPR to the stack. */
8259 cs = XNEW (struct c_switch);
8260 cs->switch_expr = build3 (SWITCH_EXPR, orig_type, exp, NULL_TREE, NULL_TREE);
8261 SET_EXPR_LOCATION (cs->switch_expr, switch_loc);
8262 cs->orig_type = orig_type;
8263 cs->cases = splay_tree_new (case_compare, NULL, NULL);
8264 cs->blocked_stmt_expr = 0;
8266 cs->next = c_switch_stack;
8267 c_switch_stack = cs;
8269 return add_stmt (cs->switch_expr);
8272 /* Process a case label at location LOC. */
8275 do_case (location_t loc, tree low_value, tree high_value)
8277 tree label = NULL_TREE;
8279 if (low_value && TREE_CODE (low_value) != INTEGER_CST)
8281 low_value = c_fully_fold (low_value, false, NULL);
8282 if (TREE_CODE (low_value) == INTEGER_CST)
8283 pedwarn (input_location, OPT_pedantic,
8284 "case label is not an integer constant expression");
8287 if (high_value && TREE_CODE (high_value) != INTEGER_CST)
8289 high_value = c_fully_fold (high_value, false, NULL);
8290 if (TREE_CODE (high_value) == INTEGER_CST)
8291 pedwarn (input_location, OPT_pedantic,
8292 "case label is not an integer constant expression");
8295 if (c_switch_stack && !c_switch_stack->blocked_stmt_expr
8296 && !c_switch_stack->blocked_vm)
8298 label = c_add_case_label (loc, c_switch_stack->cases,
8299 SWITCH_COND (c_switch_stack->switch_expr),
8300 c_switch_stack->orig_type,
8301 low_value, high_value);
8302 if (label == error_mark_node)
8305 else if (c_switch_stack && c_switch_stack->blocked_stmt_expr)
8308 error_at (loc, "case label in statement expression not containing "
8309 "enclosing switch statement");
8311 error_at (loc, "%<default%> label in statement expression not containing "
8312 "enclosing switch statement");
8314 else if (c_switch_stack && c_switch_stack->blocked_vm)
8317 error_at (loc, "case label in scope of identifier with variably "
8318 "modified type not containing enclosing switch statement");
8320 error_at (loc, "%<default%> label in scope of identifier with "
8321 "variably modified type not containing enclosing switch "
8325 error_at (loc, "case label not within a switch statement");
8327 error_at (loc, "%<default%> label not within a switch statement");
8332 /* Finish the switch statement. */
8335 c_finish_case (tree body)
8337 struct c_switch *cs = c_switch_stack;
8338 location_t switch_location;
8340 SWITCH_BODY (cs->switch_expr) = body;
8342 /* We must not be within a statement expression nested in the switch
8343 at this point; we might, however, be within the scope of an
8344 identifier with variably modified type nested in the switch. */
8345 gcc_assert (!cs->blocked_stmt_expr);
8347 /* Emit warnings as needed. */
8348 switch_location = EXPR_LOCATION (cs->switch_expr);
8349 c_do_switch_warnings (cs->cases, switch_location,
8350 TREE_TYPE (cs->switch_expr),
8351 SWITCH_COND (cs->switch_expr));
8353 /* Pop the stack. */
8354 c_switch_stack = cs->next;
8355 splay_tree_delete (cs->cases);
8359 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
8360 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
8361 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
8362 statement, and was not surrounded with parenthesis. */
8365 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
8366 tree else_block, bool nested_if)
8370 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
8371 if (warn_parentheses && nested_if && else_block == NULL)
8373 tree inner_if = then_block;
8375 /* We know from the grammar productions that there is an IF nested
8376 within THEN_BLOCK. Due to labels and c99 conditional declarations,
8377 it might not be exactly THEN_BLOCK, but should be the last
8378 non-container statement within. */
8380 switch (TREE_CODE (inner_if))
8385 inner_if = BIND_EXPR_BODY (inner_if);
8387 case STATEMENT_LIST:
8388 inner_if = expr_last (then_block);
8390 case TRY_FINALLY_EXPR:
8391 case TRY_CATCH_EXPR:
8392 inner_if = TREE_OPERAND (inner_if, 0);
8399 if (COND_EXPR_ELSE (inner_if))
8400 warning (OPT_Wparentheses,
8401 "%Hsuggest explicit braces to avoid ambiguous %<else%>",
8405 stmt = build3 (COND_EXPR, void_type_node, cond, then_block, else_block);
8406 SET_EXPR_LOCATION (stmt, if_locus);
8410 /* Emit a general-purpose loop construct. START_LOCUS is the location of
8411 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
8412 is false for DO loops. INCR is the FOR increment expression. BODY is
8413 the statement controlled by the loop. BLAB is the break label. CLAB is
8414 the continue label. Everything is allowed to be NULL. */
8417 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
8418 tree blab, tree clab, bool cond_is_first)
8420 tree entry = NULL, exit = NULL, t;
8422 /* If the condition is zero don't generate a loop construct. */
8423 if (cond && integer_zerop (cond))
8427 t = build_and_jump (&blab);
8428 SET_EXPR_LOCATION (t, start_locus);
8434 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
8436 /* If we have an exit condition, then we build an IF with gotos either
8437 out of the loop, or to the top of it. If there's no exit condition,
8438 then we just build a jump back to the top. */
8439 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
8441 if (cond && !integer_nonzerop (cond))
8443 /* Canonicalize the loop condition to the end. This means
8444 generating a branch to the loop condition. Reuse the
8445 continue label, if possible. */
8450 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
8451 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
8454 t = build1 (GOTO_EXPR, void_type_node, clab);
8455 SET_EXPR_LOCATION (t, start_locus);
8459 t = build_and_jump (&blab);
8460 exit = fold_build3 (COND_EXPR, void_type_node, cond, exit, t);
8462 SET_EXPR_LOCATION (exit, start_locus);
8464 SET_EXPR_LOCATION (exit, input_location);
8473 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
8481 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
8485 c_finish_bc_stmt (location_t loc, tree *label_p, bool is_break)
8488 tree label = *label_p;
8490 /* In switch statements break is sometimes stylistically used after
8491 a return statement. This can lead to spurious warnings about
8492 control reaching the end of a non-void function when it is
8493 inlined. Note that we are calling block_may_fallthru with
8494 language specific tree nodes; this works because
8495 block_may_fallthru returns true when given something it does not
8497 skip = !block_may_fallthru (cur_stmt_list);
8502 *label_p = label = create_artificial_label (loc);
8504 else if (TREE_CODE (label) == LABEL_DECL)
8506 else switch (TREE_INT_CST_LOW (label))
8510 error_at (loc, "break statement not within loop or switch");
8512 error_at (loc, "continue statement not within a loop");
8516 gcc_assert (is_break);
8517 error_at (loc, "break statement used with OpenMP for loop");
8528 add_stmt (build_predict_expr (PRED_CONTINUE, NOT_TAKEN));
8530 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
8533 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
8536 emit_side_effect_warnings (location_t loc, tree expr)
8538 if (expr == error_mark_node)
8540 else if (!TREE_SIDE_EFFECTS (expr))
8542 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
8543 warning_at (loc, OPT_Wunused_value, "statement with no effect");
8546 warn_if_unused_value (expr, loc);
8549 /* Process an expression as if it were a complete statement. Emit
8550 diagnostics, but do not call ADD_STMT. LOC is the location of the
8554 c_process_expr_stmt (location_t loc, tree expr)
8559 expr = c_fully_fold (expr, false, NULL);
8561 if (warn_sequence_point)
8562 verify_sequence_points (expr);
8564 if (TREE_TYPE (expr) != error_mark_node
8565 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
8566 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
8567 error_at (loc, "expression statement has incomplete type");
8569 /* If we're not processing a statement expression, warn about unused values.
8570 Warnings for statement expressions will be emitted later, once we figure
8571 out which is the result. */
8572 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
8573 && warn_unused_value)
8574 emit_side_effect_warnings (loc, expr);
8576 /* If the expression is not of a type to which we cannot assign a line
8577 number, wrap the thing in a no-op NOP_EXPR. */
8578 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
8580 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
8581 SET_EXPR_LOCATION (expr, loc);
8587 /* Emit an expression as a statement. LOC is the location of the
8591 c_finish_expr_stmt (location_t loc, tree expr)
8594 return add_stmt (c_process_expr_stmt (loc, expr));
8599 /* Do the opposite and emit a statement as an expression. To begin,
8600 create a new binding level and return it. */
8603 c_begin_stmt_expr (void)
8606 struct c_label_context_se *nstack;
8607 struct c_label_list *glist;
8609 /* We must force a BLOCK for this level so that, if it is not expanded
8610 later, there is a way to turn off the entire subtree of blocks that
8611 are contained in it. */
8613 ret = c_begin_compound_stmt (true);
8616 c_switch_stack->blocked_stmt_expr++;
8617 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
8619 for (glist = label_context_stack_se->labels_used;
8621 glist = glist->next)
8623 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 1;
8625 nstack = XOBNEW (&parser_obstack, struct c_label_context_se);
8626 nstack->labels_def = NULL;
8627 nstack->labels_used = NULL;
8628 nstack->next = label_context_stack_se;
8629 label_context_stack_se = nstack;
8631 /* Mark the current statement list as belonging to a statement list. */
8632 STATEMENT_LIST_STMT_EXPR (ret) = 1;
8637 /* LOC is the location of the compound statement to which this body
8641 c_finish_stmt_expr (location_t loc, tree body)
8643 tree last, type, tmp, val;
8645 struct c_label_list *dlist, *glist, *glist_prev = NULL;
8647 body = c_end_compound_stmt (loc, body, true);
8650 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
8651 c_switch_stack->blocked_stmt_expr--;
8653 /* It is no longer possible to jump to labels defined within this
8654 statement expression. */
8655 for (dlist = label_context_stack_se->labels_def;
8657 dlist = dlist->next)
8659 C_DECL_UNJUMPABLE_STMT_EXPR (dlist->label) = 1;
8661 /* It is again possible to define labels with a goto just outside
8662 this statement expression. */
8663 for (glist = label_context_stack_se->next->labels_used;
8665 glist = glist->next)
8667 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 0;
8670 if (glist_prev != NULL)
8671 glist_prev->next = label_context_stack_se->labels_used;
8673 label_context_stack_se->next->labels_used
8674 = label_context_stack_se->labels_used;
8675 label_context_stack_se = label_context_stack_se->next;
8677 /* Locate the last statement in BODY. See c_end_compound_stmt
8678 about always returning a BIND_EXPR. */
8679 last_p = &BIND_EXPR_BODY (body);
8680 last = BIND_EXPR_BODY (body);
8683 if (TREE_CODE (last) == STATEMENT_LIST)
8685 tree_stmt_iterator i;
8687 /* This can happen with degenerate cases like ({ }). No value. */
8688 if (!TREE_SIDE_EFFECTS (last))
8691 /* If we're supposed to generate side effects warnings, process
8692 all of the statements except the last. */
8693 if (warn_unused_value)
8695 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
8698 tree t = tsi_stmt (i);
8700 tloc = EXPR_HAS_LOCATION (t) ? EXPR_LOCATION (t) : loc;
8701 emit_side_effect_warnings (tloc, t);
8705 i = tsi_last (last);
8706 last_p = tsi_stmt_ptr (i);
8710 /* If the end of the list is exception related, then the list was split
8711 by a call to push_cleanup. Continue searching. */
8712 if (TREE_CODE (last) == TRY_FINALLY_EXPR
8713 || TREE_CODE (last) == TRY_CATCH_EXPR)
8715 last_p = &TREE_OPERAND (last, 0);
8717 goto continue_searching;
8720 /* In the case that the BIND_EXPR is not necessary, return the
8721 expression out from inside it. */
8722 if (last == error_mark_node
8723 || (last == BIND_EXPR_BODY (body)
8724 && BIND_EXPR_VARS (body) == NULL))
8726 /* Even if this looks constant, do not allow it in a constant
8728 last = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (last), NULL_TREE, last);
8729 C_MAYBE_CONST_EXPR_NON_CONST (last) = 1;
8730 /* Do not warn if the return value of a statement expression is
8732 TREE_NO_WARNING (last) = 1;
8736 /* Extract the type of said expression. */
8737 type = TREE_TYPE (last);
8739 /* If we're not returning a value at all, then the BIND_EXPR that
8740 we already have is a fine expression to return. */
8741 if (!type || VOID_TYPE_P (type))
8744 /* Now that we've located the expression containing the value, it seems
8745 silly to make voidify_wrapper_expr repeat the process. Create a
8746 temporary of the appropriate type and stick it in a TARGET_EXPR. */
8747 tmp = create_tmp_var_raw (type, NULL);
8749 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
8750 tree_expr_nonnegative_p giving up immediately. */
8752 if (TREE_CODE (val) == NOP_EXPR
8753 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
8754 val = TREE_OPERAND (val, 0);
8756 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
8757 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
8760 tree t = build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
8761 SET_EXPR_LOCATION (t, loc);
8766 /* Begin the scope of an identifier of variably modified type, scope
8767 number SCOPE. Jumping from outside this scope to inside it is not
8771 c_begin_vm_scope (unsigned int scope)
8773 struct c_label_context_vm *nstack;
8774 struct c_label_list *glist;
8776 gcc_assert (scope > 0);
8778 /* At file_scope, we don't have to do any processing. */
8779 if (label_context_stack_vm == NULL)
8782 if (c_switch_stack && !c_switch_stack->blocked_vm)
8783 c_switch_stack->blocked_vm = scope;
8784 for (glist = label_context_stack_vm->labels_used;
8786 glist = glist->next)
8788 C_DECL_UNDEFINABLE_VM (glist->label) = 1;
8790 nstack = XOBNEW (&parser_obstack, struct c_label_context_vm);
8791 nstack->labels_def = NULL;
8792 nstack->labels_used = NULL;
8793 nstack->scope = scope;
8794 nstack->next = label_context_stack_vm;
8795 label_context_stack_vm = nstack;
8798 /* End a scope which may contain identifiers of variably modified
8799 type, scope number SCOPE. */
8802 c_end_vm_scope (unsigned int scope)
8804 if (label_context_stack_vm == NULL)
8806 if (c_switch_stack && c_switch_stack->blocked_vm == scope)
8807 c_switch_stack->blocked_vm = 0;
8808 /* We may have a number of nested scopes of identifiers with
8809 variably modified type, all at this depth. Pop each in turn. */
8810 while (label_context_stack_vm->scope == scope)
8812 struct c_label_list *dlist, *glist, *glist_prev = NULL;
8814 /* It is no longer possible to jump to labels defined within this
8816 for (dlist = label_context_stack_vm->labels_def;
8818 dlist = dlist->next)
8820 C_DECL_UNJUMPABLE_VM (dlist->label) = 1;
8822 /* It is again possible to define labels with a goto just outside
8824 for (glist = label_context_stack_vm->next->labels_used;
8826 glist = glist->next)
8828 C_DECL_UNDEFINABLE_VM (glist->label) = 0;
8831 if (glist_prev != NULL)
8832 glist_prev->next = label_context_stack_vm->labels_used;
8834 label_context_stack_vm->next->labels_used
8835 = label_context_stack_vm->labels_used;
8836 label_context_stack_vm = label_context_stack_vm->next;
8840 /* Begin and end compound statements. This is as simple as pushing
8841 and popping new statement lists from the tree. */
8844 c_begin_compound_stmt (bool do_scope)
8846 tree stmt = push_stmt_list ();
8852 /* End a compound statement. STMT is the statement. LOC is the
8853 location of the compound statement-- this is usually the location
8854 of the opening brace. */
8857 c_end_compound_stmt (location_t loc, tree stmt, bool do_scope)
8863 if (c_dialect_objc ())
8864 objc_clear_super_receiver ();
8865 block = pop_scope ();
8868 stmt = pop_stmt_list (stmt);
8869 stmt = c_build_bind_expr (loc, block, stmt);
8871 /* If this compound statement is nested immediately inside a statement
8872 expression, then force a BIND_EXPR to be created. Otherwise we'll
8873 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
8874 STATEMENT_LISTs merge, and thus we can lose track of what statement
8877 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
8878 && TREE_CODE (stmt) != BIND_EXPR)
8880 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
8881 TREE_SIDE_EFFECTS (stmt) = 1;
8882 SET_EXPR_LOCATION (stmt, loc);
8888 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
8889 when the current scope is exited. EH_ONLY is true when this is not
8890 meant to apply to normal control flow transfer. */
8893 push_cleanup (tree decl, tree cleanup, bool eh_only)
8895 enum tree_code code;
8899 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
8900 stmt = build_stmt (DECL_SOURCE_LOCATION (decl), code, NULL, cleanup);
8902 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
8903 list = push_stmt_list ();
8904 TREE_OPERAND (stmt, 0) = list;
8905 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
8908 /* Build a binary-operation expression without default conversions.
8909 CODE is the kind of expression to build.
8910 LOCATION is the operator's location.
8911 This function differs from `build' in several ways:
8912 the data type of the result is computed and recorded in it,
8913 warnings are generated if arg data types are invalid,
8914 special handling for addition and subtraction of pointers is known,
8915 and some optimization is done (operations on narrow ints
8916 are done in the narrower type when that gives the same result).
8917 Constant folding is also done before the result is returned.
8919 Note that the operands will never have enumeral types, or function
8920 or array types, because either they will have the default conversions
8921 performed or they have both just been converted to some other type in which
8922 the arithmetic is to be done. */
8925 build_binary_op (location_t location, enum tree_code code,
8926 tree orig_op0, tree orig_op1, int convert_p)
8928 tree type0, type1, orig_type0, orig_type1;
8930 enum tree_code code0, code1;
8932 tree ret = error_mark_node;
8933 const char *invalid_op_diag;
8934 bool op0_int_operands, op1_int_operands;
8935 bool int_const, int_const_or_overflow, int_operands;
8937 /* Expression code to give to the expression when it is built.
8938 Normally this is CODE, which is what the caller asked for,
8939 but in some special cases we change it. */
8940 enum tree_code resultcode = code;
8942 /* Data type in which the computation is to be performed.
8943 In the simplest cases this is the common type of the arguments. */
8944 tree result_type = NULL;
8946 /* When the computation is in excess precision, the type of the
8947 final EXCESS_PRECISION_EXPR. */
8948 tree real_result_type = NULL;
8950 /* Nonzero means operands have already been type-converted
8951 in whatever way is necessary.
8952 Zero means they need to be converted to RESULT_TYPE. */
8955 /* Nonzero means create the expression with this type, rather than
8957 tree build_type = 0;
8959 /* Nonzero means after finally constructing the expression
8960 convert it to this type. */
8961 tree final_type = 0;
8963 /* Nonzero if this is an operation like MIN or MAX which can
8964 safely be computed in short if both args are promoted shorts.
8965 Also implies COMMON.
8966 -1 indicates a bitwise operation; this makes a difference
8967 in the exact conditions for when it is safe to do the operation
8968 in a narrower mode. */
8971 /* Nonzero if this is a comparison operation;
8972 if both args are promoted shorts, compare the original shorts.
8973 Also implies COMMON. */
8974 int short_compare = 0;
8976 /* Nonzero if this is a right-shift operation, which can be computed on the
8977 original short and then promoted if the operand is a promoted short. */
8978 int short_shift = 0;
8980 /* Nonzero means set RESULT_TYPE to the common type of the args. */
8983 /* True means types are compatible as far as ObjC is concerned. */
8986 /* True means this is an arithmetic operation that may need excess
8988 bool may_need_excess_precision;
8990 if (location == UNKNOWN_LOCATION)
8991 location = input_location;
8996 op0_int_operands = EXPR_INT_CONST_OPERANDS (orig_op0);
8997 if (op0_int_operands)
8998 op0 = remove_c_maybe_const_expr (op0);
8999 op1_int_operands = EXPR_INT_CONST_OPERANDS (orig_op1);
9000 if (op1_int_operands)
9001 op1 = remove_c_maybe_const_expr (op1);
9002 int_operands = (op0_int_operands && op1_int_operands);
9005 int_const_or_overflow = (TREE_CODE (orig_op0) == INTEGER_CST
9006 && TREE_CODE (orig_op1) == INTEGER_CST);
9007 int_const = (int_const_or_overflow
9008 && !TREE_OVERFLOW (orig_op0)
9009 && !TREE_OVERFLOW (orig_op1));
9012 int_const = int_const_or_overflow = false;
9016 op0 = default_conversion (op0);
9017 op1 = default_conversion (op1);
9020 orig_type0 = type0 = TREE_TYPE (op0);
9021 orig_type1 = type1 = TREE_TYPE (op1);
9023 /* The expression codes of the data types of the arguments tell us
9024 whether the arguments are integers, floating, pointers, etc. */
9025 code0 = TREE_CODE (type0);
9026 code1 = TREE_CODE (type1);
9028 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
9029 STRIP_TYPE_NOPS (op0);
9030 STRIP_TYPE_NOPS (op1);
9032 /* If an error was already reported for one of the arguments,
9033 avoid reporting another error. */
9035 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
9036 return error_mark_node;
9038 if ((invalid_op_diag
9039 = targetm.invalid_binary_op (code, type0, type1)))
9041 error_at (location, invalid_op_diag);
9042 return error_mark_node;
9050 case TRUNC_DIV_EXPR:
9052 case FLOOR_DIV_EXPR:
9053 case ROUND_DIV_EXPR:
9054 case EXACT_DIV_EXPR:
9055 may_need_excess_precision = true;
9058 may_need_excess_precision = false;
9061 if (TREE_CODE (op0) == EXCESS_PRECISION_EXPR)
9063 op0 = TREE_OPERAND (op0, 0);
9064 type0 = TREE_TYPE (op0);
9066 else if (may_need_excess_precision
9067 && (eptype = excess_precision_type (type0)) != NULL_TREE)
9070 op0 = convert (eptype, op0);
9072 if (TREE_CODE (op1) == EXCESS_PRECISION_EXPR)
9074 op1 = TREE_OPERAND (op1, 0);
9075 type1 = TREE_TYPE (op1);
9077 else if (may_need_excess_precision
9078 && (eptype = excess_precision_type (type1)) != NULL_TREE)
9081 op1 = convert (eptype, op1);
9084 objc_ok = objc_compare_types (type0, type1, -3, NULL_TREE);
9089 /* Handle the pointer + int case. */
9090 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
9092 ret = pointer_int_sum (PLUS_EXPR, op0, op1);
9093 goto return_build_binary_op;
9095 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
9097 ret = pointer_int_sum (PLUS_EXPR, op1, op0);
9098 goto return_build_binary_op;
9105 /* Subtraction of two similar pointers.
9106 We must subtract them as integers, then divide by object size. */
9107 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
9108 && comp_target_types (location, type0, type1))
9110 ret = pointer_diff (op0, op1);
9111 goto return_build_binary_op;
9113 /* Handle pointer minus int. Just like pointer plus int. */
9114 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
9116 ret = pointer_int_sum (MINUS_EXPR, op0, op1);
9117 goto return_build_binary_op;
9127 case TRUNC_DIV_EXPR:
9129 case FLOOR_DIV_EXPR:
9130 case ROUND_DIV_EXPR:
9131 case EXACT_DIV_EXPR:
9132 warn_for_div_by_zero (location, op1);
9134 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
9135 || code0 == FIXED_POINT_TYPE
9136 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
9137 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
9138 || code1 == FIXED_POINT_TYPE
9139 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
9141 enum tree_code tcode0 = code0, tcode1 = code1;
9143 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
9144 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
9145 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
9146 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
9148 if (!((tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE)
9149 || (tcode0 == FIXED_POINT_TYPE && tcode1 == FIXED_POINT_TYPE)))
9150 resultcode = RDIV_EXPR;
9152 /* Although it would be tempting to shorten always here, that
9153 loses on some targets, since the modulo instruction is
9154 undefined if the quotient can't be represented in the
9155 computation mode. We shorten only if unsigned or if
9156 dividing by something we know != -1. */
9157 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
9158 || (TREE_CODE (op1) == INTEGER_CST
9159 && !integer_all_onesp (op1)));
9167 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
9169 /* Allow vector types which are not floating point types. */
9170 else if (code0 == VECTOR_TYPE
9171 && code1 == VECTOR_TYPE
9172 && !VECTOR_FLOAT_TYPE_P (type0)
9173 && !VECTOR_FLOAT_TYPE_P (type1))
9177 case TRUNC_MOD_EXPR:
9178 case FLOOR_MOD_EXPR:
9179 warn_for_div_by_zero (location, op1);
9181 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
9182 && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE
9183 && TREE_CODE (TREE_TYPE (type1)) == INTEGER_TYPE)
9185 else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
9187 /* Although it would be tempting to shorten always here, that loses
9188 on some targets, since the modulo instruction is undefined if the
9189 quotient can't be represented in the computation mode. We shorten
9190 only if unsigned or if dividing by something we know != -1. */
9191 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
9192 || (TREE_CODE (op1) == INTEGER_CST
9193 && !integer_all_onesp (op1)));
9198 case TRUTH_ANDIF_EXPR:
9199 case TRUTH_ORIF_EXPR:
9200 case TRUTH_AND_EXPR:
9202 case TRUTH_XOR_EXPR:
9203 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
9204 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
9205 || code0 == FIXED_POINT_TYPE)
9206 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
9207 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
9208 || code1 == FIXED_POINT_TYPE))
9210 /* Result of these operations is always an int,
9211 but that does not mean the operands should be
9212 converted to ints! */
9213 result_type = integer_type_node;
9214 op0 = c_common_truthvalue_conversion (location, op0);
9215 op1 = c_common_truthvalue_conversion (location, op1);
9218 if (code == TRUTH_ANDIF_EXPR)
9220 int_const_or_overflow = (int_operands
9221 && TREE_CODE (orig_op0) == INTEGER_CST
9222 && (op0 == truthvalue_false_node
9223 || TREE_CODE (orig_op1) == INTEGER_CST));
9224 int_const = (int_const_or_overflow
9225 && !TREE_OVERFLOW (orig_op0)
9226 && (op0 == truthvalue_false_node
9227 || !TREE_OVERFLOW (orig_op1)));
9229 else if (code == TRUTH_ORIF_EXPR)
9231 int_const_or_overflow = (int_operands
9232 && TREE_CODE (orig_op0) == INTEGER_CST
9233 && (op0 == truthvalue_true_node
9234 || TREE_CODE (orig_op1) == INTEGER_CST));
9235 int_const = (int_const_or_overflow
9236 && !TREE_OVERFLOW (orig_op0)
9237 && (op0 == truthvalue_true_node
9238 || !TREE_OVERFLOW (orig_op1)));
9242 /* Shift operations: result has same type as first operand;
9243 always convert second operand to int.
9244 Also set SHORT_SHIFT if shifting rightward. */
9247 if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE)
9248 && code1 == INTEGER_TYPE)
9250 if (TREE_CODE (op1) == INTEGER_CST)
9252 if (tree_int_cst_sgn (op1) < 0)
9255 if (skip_evaluation == 0)
9256 warning (0, "right shift count is negative");
9260 if (!integer_zerop (op1))
9263 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
9266 if (skip_evaluation == 0)
9267 warning (0, "right shift count >= width of type");
9272 /* Use the type of the value to be shifted. */
9273 result_type = type0;
9274 /* Convert the shift-count to an integer, regardless of size
9275 of value being shifted. */
9276 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
9277 op1 = convert (integer_type_node, op1);
9278 /* Avoid converting op1 to result_type later. */
9284 if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE)
9285 && code1 == INTEGER_TYPE)
9287 if (TREE_CODE (op1) == INTEGER_CST)
9289 if (tree_int_cst_sgn (op1) < 0)
9292 if (skip_evaluation == 0)
9293 warning (0, "left shift count is negative");
9296 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
9299 if (skip_evaluation == 0)
9300 warning (0, "left shift count >= width of type");
9304 /* Use the type of the value to be shifted. */
9305 result_type = type0;
9306 /* Convert the shift-count to an integer, regardless of size
9307 of value being shifted. */
9308 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
9309 op1 = convert (integer_type_node, op1);
9310 /* Avoid converting op1 to result_type later. */
9317 if (FLOAT_TYPE_P (type0) || FLOAT_TYPE_P (type1))
9318 warning_at (location,
9320 "comparing floating point with == or != is unsafe");
9321 /* Result of comparison is always int,
9322 but don't convert the args to int! */
9323 build_type = integer_type_node;
9324 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
9325 || code0 == FIXED_POINT_TYPE || code0 == COMPLEX_TYPE)
9326 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
9327 || code1 == FIXED_POINT_TYPE || code1 == COMPLEX_TYPE))
9329 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
9331 tree tt0 = TREE_TYPE (type0);
9332 tree tt1 = TREE_TYPE (type1);
9333 /* Anything compares with void *. void * compares with anything.
9334 Otherwise, the targets must be compatible
9335 and both must be object or both incomplete. */
9336 if (comp_target_types (location, type0, type1))
9337 result_type = common_pointer_type (type0, type1);
9338 else if (VOID_TYPE_P (tt0))
9340 /* op0 != orig_op0 detects the case of something
9341 whose value is 0 but which isn't a valid null ptr const. */
9342 if (pedantic && !null_pointer_constant_p (orig_op0)
9343 && TREE_CODE (tt1) == FUNCTION_TYPE)
9344 pedwarn (location, OPT_pedantic, "ISO C forbids "
9345 "comparison of %<void *%> with function pointer");
9347 else if (VOID_TYPE_P (tt1))
9349 if (pedantic && !null_pointer_constant_p (orig_op1)
9350 && TREE_CODE (tt0) == FUNCTION_TYPE)
9351 pedwarn (location, OPT_pedantic, "ISO C forbids "
9352 "comparison of %<void *%> with function pointer");
9355 /* Avoid warning about the volatile ObjC EH puts on decls. */
9357 pedwarn (location, 0,
9358 "comparison of distinct pointer types lacks a cast");
9360 if (result_type == NULL_TREE)
9361 result_type = ptr_type_node;
9363 else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
9365 if (TREE_CODE (op0) == ADDR_EXPR
9366 && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
9367 warning_at (location,
9368 OPT_Waddress, "the address of %qD will never be NULL",
9369 TREE_OPERAND (op0, 0));
9370 result_type = type0;
9372 else if (code1 == POINTER_TYPE && null_pointer_constant_p (orig_op0))
9374 if (TREE_CODE (op1) == ADDR_EXPR
9375 && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
9376 warning_at (location,
9377 OPT_Waddress, "the address of %qD will never be NULL",
9378 TREE_OPERAND (op1, 0));
9379 result_type = type1;
9381 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
9383 result_type = type0;
9384 pedwarn (location, 0, "comparison between pointer and integer");
9386 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
9388 result_type = type1;
9389 pedwarn (location, 0, "comparison between pointer and integer");
9397 build_type = integer_type_node;
9398 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
9399 || code0 == FIXED_POINT_TYPE)
9400 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
9401 || code1 == FIXED_POINT_TYPE))
9403 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
9405 if (comp_target_types (location, type0, type1))
9407 result_type = common_pointer_type (type0, type1);
9408 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
9409 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
9410 pedwarn (location, 0,
9411 "comparison of complete and incomplete pointers");
9412 else if (TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
9413 pedwarn (location, OPT_pedantic, "ISO C forbids "
9414 "ordered comparisons of pointers to functions");
9418 result_type = ptr_type_node;
9419 pedwarn (location, 0,
9420 "comparison of distinct pointer types lacks a cast");
9423 else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
9425 result_type = type0;
9427 pedwarn (location, OPT_pedantic,
9428 "ordered comparison of pointer with integer zero");
9429 else if (extra_warnings)
9430 warning_at (location, OPT_Wextra,
9431 "ordered comparison of pointer with integer zero");
9433 else if (code1 == POINTER_TYPE && null_pointer_constant_p (orig_op0))
9435 result_type = type1;
9436 pedwarn (location, OPT_pedantic,
9437 "ordered comparison of pointer with integer zero");
9439 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
9441 result_type = type0;
9442 pedwarn (location, 0, "comparison between pointer and integer");
9444 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
9446 result_type = type1;
9447 pedwarn (location, 0, "comparison between pointer and integer");
9455 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
9456 return error_mark_node;
9458 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
9459 && (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
9460 || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
9461 TREE_TYPE (type1))))
9463 binary_op_error (location, code, type0, type1);
9464 return error_mark_node;
9467 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
9468 || code0 == FIXED_POINT_TYPE || code0 == VECTOR_TYPE)
9470 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
9471 || code1 == FIXED_POINT_TYPE || code1 == VECTOR_TYPE))
9473 bool first_complex = (code0 == COMPLEX_TYPE);
9474 bool second_complex = (code1 == COMPLEX_TYPE);
9475 int none_complex = (!first_complex && !second_complex);
9477 if (shorten || common || short_compare)
9479 result_type = c_common_type (type0, type1);
9480 if (result_type == error_mark_node)
9481 return error_mark_node;
9484 if (first_complex != second_complex
9485 && (code == PLUS_EXPR
9486 || code == MINUS_EXPR
9487 || code == MULT_EXPR
9488 || (code == TRUNC_DIV_EXPR && first_complex))
9489 && TREE_CODE (TREE_TYPE (result_type)) == REAL_TYPE
9490 && flag_signed_zeros)
9492 /* An operation on mixed real/complex operands must be
9493 handled specially, but the language-independent code can
9494 more easily optimize the plain complex arithmetic if
9495 -fno-signed-zeros. */
9496 tree real_type = TREE_TYPE (result_type);
9498 if (type0 != orig_type0 || type1 != orig_type1)
9500 gcc_assert (may_need_excess_precision && common);
9501 real_result_type = c_common_type (orig_type0, orig_type1);
9505 if (TREE_TYPE (op0) != result_type)
9506 op0 = convert_and_check (result_type, op0);
9507 if (TREE_TYPE (op1) != real_type)
9508 op1 = convert_and_check (real_type, op1);
9512 if (TREE_TYPE (op0) != real_type)
9513 op0 = convert_and_check (real_type, op0);
9514 if (TREE_TYPE (op1) != result_type)
9515 op1 = convert_and_check (result_type, op1);
9517 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
9518 return error_mark_node;
9521 op0 = c_save_expr (op0);
9522 real = build_unary_op (EXPR_LOCATION (orig_op0), REALPART_EXPR,
9524 imag = build_unary_op (EXPR_LOCATION (orig_op0), IMAGPART_EXPR,
9529 case TRUNC_DIV_EXPR:
9530 imag = build2 (resultcode, real_type, imag, op1);
9534 real = build2 (resultcode, real_type, real, op1);
9542 op1 = c_save_expr (op1);
9543 real = build_unary_op (EXPR_LOCATION (orig_op1), REALPART_EXPR,
9545 imag = build_unary_op (EXPR_LOCATION (orig_op1), IMAGPART_EXPR,
9550 imag = build2 (resultcode, real_type, op0, imag);
9553 real = build2 (resultcode, real_type, op0, real);
9556 real = build2 (resultcode, real_type, op0, real);
9557 imag = build1 (NEGATE_EXPR, real_type, imag);
9563 ret = build2 (COMPLEX_EXPR, result_type, real, imag);
9564 goto return_build_binary_op;
9567 /* For certain operations (which identify themselves by shorten != 0)
9568 if both args were extended from the same smaller type,
9569 do the arithmetic in that type and then extend.
9571 shorten !=0 and !=1 indicates a bitwise operation.
9572 For them, this optimization is safe only if
9573 both args are zero-extended or both are sign-extended.
9574 Otherwise, we might change the result.
9575 Eg, (short)-1 | (unsigned short)-1 is (int)-1
9576 but calculated in (unsigned short) it would be (unsigned short)-1. */
9578 if (shorten && none_complex)
9580 final_type = result_type;
9581 result_type = shorten_binary_op (result_type, op0, op1,
9585 /* Shifts can be shortened if shifting right. */
9590 tree arg0 = get_narrower (op0, &unsigned_arg);
9592 final_type = result_type;
9594 if (arg0 == op0 && final_type == TREE_TYPE (op0))
9595 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
9597 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
9598 /* We can shorten only if the shift count is less than the
9599 number of bits in the smaller type size. */
9600 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
9601 /* We cannot drop an unsigned shift after sign-extension. */
9602 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
9604 /* Do an unsigned shift if the operand was zero-extended. */
9606 = c_common_signed_or_unsigned_type (unsigned_arg,
9608 /* Convert value-to-be-shifted to that type. */
9609 if (TREE_TYPE (op0) != result_type)
9610 op0 = convert (result_type, op0);
9615 /* Comparison operations are shortened too but differently.
9616 They identify themselves by setting short_compare = 1. */
9620 /* Don't write &op0, etc., because that would prevent op0
9621 from being kept in a register.
9622 Instead, make copies of the our local variables and
9623 pass the copies by reference, then copy them back afterward. */
9624 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
9625 enum tree_code xresultcode = resultcode;
9627 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
9632 goto return_build_binary_op;
9635 op0 = xop0, op1 = xop1;
9637 resultcode = xresultcode;
9639 if (!skip_evaluation)
9641 bool op0_maybe_const = true;
9642 bool op1_maybe_const = true;
9643 tree orig_op0_folded, orig_op1_folded;
9645 if (in_late_binary_op)
9647 orig_op0_folded = orig_op0;
9648 orig_op1_folded = orig_op1;
9652 /* Fold for the sake of possible warnings, as in
9653 build_conditional_expr. This requires the
9654 "original" values to be folded, not just op0 and
9656 op0 = c_fully_fold (op0, require_constant_value,
9658 op1 = c_fully_fold (op1, require_constant_value,
9660 orig_op0_folded = c_fully_fold (orig_op0,
9661 require_constant_value,
9663 orig_op1_folded = c_fully_fold (orig_op1,
9664 require_constant_value,
9668 if (warn_sign_compare)
9669 warn_for_sign_compare (location, orig_op0_folded,
9670 orig_op1_folded, op0, op1,
9671 result_type, resultcode);
9672 if (!in_late_binary_op)
9674 if (!op0_maybe_const || TREE_CODE (op0) != INTEGER_CST)
9676 op0 = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (op0),
9678 C_MAYBE_CONST_EXPR_NON_CONST (op0) = !op0_maybe_const;
9680 if (!op1_maybe_const || TREE_CODE (op1) != INTEGER_CST)
9682 op1 = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (op1),
9684 C_MAYBE_CONST_EXPR_NON_CONST (op1) = !op1_maybe_const;
9691 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
9692 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
9693 Then the expression will be built.
9694 It will be given type FINAL_TYPE if that is nonzero;
9695 otherwise, it will be given type RESULT_TYPE. */
9699 binary_op_error (location, code, TREE_TYPE (op0), TREE_TYPE (op1));
9700 return error_mark_node;
9705 if (TREE_TYPE (op0) != result_type)
9706 op0 = convert_and_check (result_type, op0);
9707 if (TREE_TYPE (op1) != result_type)
9708 op1 = convert_and_check (result_type, op1);
9710 /* This can happen if one operand has a vector type, and the other
9711 has a different type. */
9712 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
9713 return error_mark_node;
9716 if (build_type == NULL_TREE)
9718 build_type = result_type;
9719 if (type0 != orig_type0 || type1 != orig_type1)
9721 gcc_assert (may_need_excess_precision && common);
9722 real_result_type = c_common_type (orig_type0, orig_type1);
9726 /* Treat expressions in initializers specially as they can't trap. */
9727 if (int_const_or_overflow)
9728 ret = (require_constant_value
9729 ? fold_build2_initializer (resultcode, build_type, op0, op1)
9730 : fold_build2 (resultcode, build_type, op0, op1));
9732 ret = build2 (resultcode, build_type, op0, op1);
9733 if (final_type != 0)
9734 ret = convert (final_type, ret);
9736 return_build_binary_op:
9737 gcc_assert (ret != error_mark_node);
9738 if (TREE_CODE (ret) == INTEGER_CST && !TREE_OVERFLOW (ret) && !int_const)
9740 ? note_integer_operands (ret)
9741 : build1 (NOP_EXPR, TREE_TYPE (ret), ret));
9742 else if (TREE_CODE (ret) != INTEGER_CST && int_operands
9743 && !in_late_binary_op)
9744 ret = note_integer_operands (ret);
9745 if (real_result_type)
9746 ret = build1 (EXCESS_PRECISION_EXPR, real_result_type, ret);
9747 protected_set_expr_location (ret, location);
9752 /* Convert EXPR to be a truth-value, validating its type for this
9753 purpose. LOCATION is the source location for the expression. */
9756 c_objc_common_truthvalue_conversion (location_t location, tree expr)
9758 bool int_const, int_operands;
9760 switch (TREE_CODE (TREE_TYPE (expr)))
9763 error_at (location, "used array that cannot be converted to pointer where scalar is required");
9764 return error_mark_node;
9767 error_at (location, "used struct type value where scalar is required");
9768 return error_mark_node;
9771 error_at (location, "used union type value where scalar is required");
9772 return error_mark_node;
9781 int_const = (TREE_CODE (expr) == INTEGER_CST && !TREE_OVERFLOW (expr));
9782 int_operands = EXPR_INT_CONST_OPERANDS (expr);
9784 expr = remove_c_maybe_const_expr (expr);
9786 /* ??? Should we also give an error for void and vectors rather than
9787 leaving those to give errors later? */
9788 expr = c_common_truthvalue_conversion (location, expr);
9790 if (TREE_CODE (expr) == INTEGER_CST && int_operands && !int_const)
9792 if (TREE_OVERFLOW (expr))
9795 return note_integer_operands (expr);
9797 if (TREE_CODE (expr) == INTEGER_CST && !int_const)
9798 return build1 (NOP_EXPR, TREE_TYPE (expr), expr);
9803 /* Convert EXPR to a contained DECL, updating *TC, *TI and *SE as
9807 c_expr_to_decl (tree expr, bool *tc ATTRIBUTE_UNUSED, bool *se)
9809 if (TREE_CODE (expr) == COMPOUND_LITERAL_EXPR)
9811 tree decl = COMPOUND_LITERAL_EXPR_DECL (expr);
9812 /* Executing a compound literal inside a function reinitializes
9814 if (!TREE_STATIC (decl))
9822 /* Like c_begin_compound_stmt, except force the retention of the BLOCK. */
9825 c_begin_omp_parallel (void)
9830 block = c_begin_compound_stmt (true);
9835 /* Generate OMP_PARALLEL, with CLAUSES and BLOCK as its compound
9836 statement. LOC is the location of the OMP_PARALLEL. */
9839 c_finish_omp_parallel (location_t loc, tree clauses, tree block)
9843 block = c_end_compound_stmt (loc, block, true);
9845 stmt = make_node (OMP_PARALLEL);
9846 TREE_TYPE (stmt) = void_type_node;
9847 OMP_PARALLEL_CLAUSES (stmt) = clauses;
9848 OMP_PARALLEL_BODY (stmt) = block;
9849 SET_EXPR_LOCATION (stmt, loc);
9851 return add_stmt (stmt);
9854 /* Like c_begin_compound_stmt, except force the retention of the BLOCK. */
9857 c_begin_omp_task (void)
9862 block = c_begin_compound_stmt (true);
9867 /* Generate OMP_TASK, with CLAUSES and BLOCK as its compound
9868 statement. LOC is the location of the #pragma. */
9871 c_finish_omp_task (location_t loc, tree clauses, tree block)
9875 block = c_end_compound_stmt (loc, block, true);
9877 stmt = make_node (OMP_TASK);
9878 TREE_TYPE (stmt) = void_type_node;
9879 OMP_TASK_CLAUSES (stmt) = clauses;
9880 OMP_TASK_BODY (stmt) = block;
9881 SET_EXPR_LOCATION (stmt, loc);
9883 return add_stmt (stmt);
9886 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
9887 Remove any elements from the list that are invalid. */
9890 c_finish_omp_clauses (tree clauses)
9892 bitmap_head generic_head, firstprivate_head, lastprivate_head;
9893 tree c, t, *pc = &clauses;
9896 bitmap_obstack_initialize (NULL);
9897 bitmap_initialize (&generic_head, &bitmap_default_obstack);
9898 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
9899 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
9901 for (pc = &clauses, c = clauses; c ; c = *pc)
9903 bool remove = false;
9904 bool need_complete = false;
9905 bool need_implicitly_determined = false;
9907 switch (OMP_CLAUSE_CODE (c))
9909 case OMP_CLAUSE_SHARED:
9911 need_implicitly_determined = true;
9912 goto check_dup_generic;
9914 case OMP_CLAUSE_PRIVATE:
9916 need_complete = true;
9917 need_implicitly_determined = true;
9918 goto check_dup_generic;
9920 case OMP_CLAUSE_REDUCTION:
9922 need_implicitly_determined = true;
9923 t = OMP_CLAUSE_DECL (c);
9924 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
9925 || POINTER_TYPE_P (TREE_TYPE (t)))
9927 error_at (OMP_CLAUSE_LOCATION (c),
9928 "%qE has invalid type for %<reduction%>", t);
9931 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
9933 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
9934 const char *r_name = NULL;
9951 case TRUTH_ANDIF_EXPR:
9954 case TRUTH_ORIF_EXPR:
9962 error_at (OMP_CLAUSE_LOCATION (c),
9963 "%qE has invalid type for %<reduction(%s)%>",
9968 goto check_dup_generic;
9970 case OMP_CLAUSE_COPYPRIVATE:
9971 name = "copyprivate";
9972 goto check_dup_generic;
9974 case OMP_CLAUSE_COPYIN:
9976 t = OMP_CLAUSE_DECL (c);
9977 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
9979 error_at (OMP_CLAUSE_LOCATION (c),
9980 "%qE must be %<threadprivate%> for %<copyin%>", t);
9983 goto check_dup_generic;
9986 t = OMP_CLAUSE_DECL (c);
9987 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
9989 error_at (OMP_CLAUSE_LOCATION (c),
9990 "%qE is not a variable in clause %qs", t, name);
9993 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
9994 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
9995 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
9997 error_at (OMP_CLAUSE_LOCATION (c),
9998 "%qE appears more than once in data clauses", t);
10002 bitmap_set_bit (&generic_head, DECL_UID (t));
10005 case OMP_CLAUSE_FIRSTPRIVATE:
10006 name = "firstprivate";
10007 t = OMP_CLAUSE_DECL (c);
10008 need_complete = true;
10009 need_implicitly_determined = true;
10010 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
10012 error_at (OMP_CLAUSE_LOCATION (c),
10013 "%qE is not a variable in clause %<firstprivate%>", t);
10016 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
10017 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
10019 error_at (OMP_CLAUSE_LOCATION (c),
10020 "%qE appears more than once in data clauses", t);
10024 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
10027 case OMP_CLAUSE_LASTPRIVATE:
10028 name = "lastprivate";
10029 t = OMP_CLAUSE_DECL (c);
10030 need_complete = true;
10031 need_implicitly_determined = true;
10032 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
10034 error_at (OMP_CLAUSE_LOCATION (c),
10035 "%qE is not a variable in clause %<lastprivate%>", t);
10038 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
10039 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
10041 error_at (OMP_CLAUSE_LOCATION (c),
10042 "%qE appears more than once in data clauses", t);
10046 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
10049 case OMP_CLAUSE_IF:
10050 case OMP_CLAUSE_NUM_THREADS:
10051 case OMP_CLAUSE_SCHEDULE:
10052 case OMP_CLAUSE_NOWAIT:
10053 case OMP_CLAUSE_ORDERED:
10054 case OMP_CLAUSE_DEFAULT:
10055 case OMP_CLAUSE_UNTIED:
10056 case OMP_CLAUSE_COLLAPSE:
10057 pc = &OMP_CLAUSE_CHAIN (c);
10061 gcc_unreachable ();
10066 t = OMP_CLAUSE_DECL (c);
10070 t = require_complete_type (t);
10071 if (t == error_mark_node)
10075 if (need_implicitly_determined)
10077 const char *share_name = NULL;
10079 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
10080 share_name = "threadprivate";
10081 else switch (c_omp_predetermined_sharing (t))
10083 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
10085 case OMP_CLAUSE_DEFAULT_SHARED:
10086 share_name = "shared";
10088 case OMP_CLAUSE_DEFAULT_PRIVATE:
10089 share_name = "private";
10092 gcc_unreachable ();
10096 error_at (OMP_CLAUSE_LOCATION (c),
10097 "%qE is predetermined %qs for %qs",
10098 t, share_name, name);
10105 *pc = OMP_CLAUSE_CHAIN (c);
10107 pc = &OMP_CLAUSE_CHAIN (c);
10110 bitmap_obstack_release (NULL);
10114 /* Make a variant type in the proper way for C/C++, propagating qualifiers
10115 down to the element type of an array. */
10118 c_build_qualified_type (tree type, int type_quals)
10120 if (type == error_mark_node)
10123 if (TREE_CODE (type) == ARRAY_TYPE)
10126 tree element_type = c_build_qualified_type (TREE_TYPE (type),
10129 /* See if we already have an identically qualified type. */
10130 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10132 if (TYPE_QUALS (strip_array_types (t)) == type_quals
10133 && TYPE_NAME (t) == TYPE_NAME (type)
10134 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
10135 && attribute_list_equal (TYPE_ATTRIBUTES (t),
10136 TYPE_ATTRIBUTES (type)))
10141 tree domain = TYPE_DOMAIN (type);
10143 t = build_variant_type_copy (type);
10144 TREE_TYPE (t) = element_type;
10146 if (TYPE_STRUCTURAL_EQUALITY_P (element_type)
10147 || (domain && TYPE_STRUCTURAL_EQUALITY_P (domain)))
10148 SET_TYPE_STRUCTURAL_EQUALITY (t);
10149 else if (TYPE_CANONICAL (element_type) != element_type
10150 || (domain && TYPE_CANONICAL (domain) != domain))
10152 tree unqualified_canon
10153 = build_array_type (TYPE_CANONICAL (element_type),
10154 domain? TYPE_CANONICAL (domain)
10157 = c_build_qualified_type (unqualified_canon, type_quals);
10160 TYPE_CANONICAL (t) = t;
10165 /* A restrict-qualified pointer type must be a pointer to object or
10166 incomplete type. Note that the use of POINTER_TYPE_P also allows
10167 REFERENCE_TYPEs, which is appropriate for C++. */
10168 if ((type_quals & TYPE_QUAL_RESTRICT)
10169 && (!POINTER_TYPE_P (type)
10170 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type))))
10172 error ("invalid use of %<restrict%>");
10173 type_quals &= ~TYPE_QUAL_RESTRICT;
10176 return build_qualified_type (type, type_quals);
10179 /* Build a VA_ARG_EXPR for the C parser. */
10182 c_build_va_arg (location_t loc, tree expr, tree type)
10184 if (warn_cxx_compat && TREE_CODE (type) == ENUMERAL_TYPE)
10185 warning_at (loc, OPT_Wc___compat,
10186 "C++ requires promoted type, not enum type, in %<va_arg%>");
10187 return build_va_arg (loc, expr, type);