1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 /* This file is part of the C front end.
24 It contains routines to build C expressions given their operands,
25 including computing the types of the result, C-specific error checks,
26 and some optimization.
28 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
29 and to process initializations in declarations (since they work
30 like a strange sort of assignment). */
46 /* Nonzero if we've already printed a "missing braces around initializer"
47 message within this initializer. */
48 static int missing_braces_mentioned
;
50 /* 1 if we explained undeclared var errors. */
51 static int undeclared_variable_notice
;
53 static tree qualify_type
PARAMS ((tree
, tree
));
54 static int comp_target_types
PARAMS ((tree
, tree
));
55 static int function_types_compatible_p
PARAMS ((tree
, tree
));
56 static int type_lists_compatible_p
PARAMS ((tree
, tree
));
57 static tree decl_constant_value_for_broken_optimization
PARAMS ((tree
));
58 static tree lookup_field
PARAMS ((tree
, tree
, tree
*));
59 static tree convert_arguments
PARAMS ((tree
, tree
, tree
, tree
));
60 static tree pointer_int_sum
PARAMS ((enum tree_code
, tree
, tree
));
61 static tree pointer_diff
PARAMS ((tree
, tree
));
62 static tree unary_complex_lvalue
PARAMS ((enum tree_code
, tree
));
63 static void pedantic_lvalue_warning
PARAMS ((enum tree_code
));
64 static tree internal_build_compound_expr
PARAMS ((tree
, int));
65 static tree convert_for_assignment
PARAMS ((tree
, tree
, const char *,
67 static void warn_for_assignment
PARAMS ((const char *, const char *,
69 static tree valid_compound_expr_initializer
PARAMS ((tree
, tree
));
70 static void push_string
PARAMS ((const char *));
71 static void push_member_name
PARAMS ((tree
));
72 static void push_array_bounds
PARAMS ((int));
73 static int spelling_length
PARAMS ((void));
74 static char *print_spelling
PARAMS ((char *));
75 static void warning_init
PARAMS ((const char *));
76 static tree digest_init
PARAMS ((tree
, tree
, int, int));
77 static void output_init_element
PARAMS ((tree
, tree
, tree
, int));
78 static void output_pending_init_elements
PARAMS ((int));
79 static int set_designator
PARAMS ((int));
80 static void push_range_stack
PARAMS ((tree
));
81 static void add_pending_init
PARAMS ((tree
, tree
));
82 static void set_nonincremental_init
PARAMS ((void));
83 static void set_nonincremental_init_from_string
PARAMS ((tree
));
84 static tree find_init_member
PARAMS ((tree
));
86 /* Do `exp = require_complete_type (exp);' to make sure exp
87 does not have an incomplete type. (That includes void types.) */
90 require_complete_type (value
)
93 tree type
= TREE_TYPE (value
);
95 if (TREE_CODE (value
) == ERROR_MARK
)
96 return error_mark_node
;
98 /* First, detect a valid value with a complete type. */
99 if (COMPLETE_TYPE_P (type
))
102 incomplete_type_error (value
, type
);
103 return error_mark_node
;
106 /* Print an error message for invalid use of an incomplete type.
107 VALUE is the expression that was used (or 0 if that isn't known)
108 and TYPE is the type that was invalid. */
111 incomplete_type_error (value
, type
)
115 const char *type_code_string
;
117 /* Avoid duplicate error message. */
118 if (TREE_CODE (type
) == ERROR_MARK
)
121 if (value
!= 0 && (TREE_CODE (value
) == VAR_DECL
122 || TREE_CODE (value
) == PARM_DECL
))
123 error ("`%s' has an incomplete type",
124 IDENTIFIER_POINTER (DECL_NAME (value
)));
128 /* We must print an error message. Be clever about what it says. */
130 switch (TREE_CODE (type
))
133 type_code_string
= "struct";
137 type_code_string
= "union";
141 type_code_string
= "enum";
145 error ("invalid use of void expression");
149 if (TYPE_DOMAIN (type
))
151 type
= TREE_TYPE (type
);
154 error ("invalid use of array with unspecified bounds");
161 if (TREE_CODE (TYPE_NAME (type
)) == IDENTIFIER_NODE
)
162 error ("invalid use of undefined type `%s %s'",
163 type_code_string
, IDENTIFIER_POINTER (TYPE_NAME (type
)));
165 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
166 error ("invalid use of incomplete typedef `%s'",
167 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type
))));
171 /* Return a variant of TYPE which has all the type qualifiers of LIKE
172 as well as those of TYPE. */
175 qualify_type (type
, like
)
178 return c_build_qualified_type (type
,
179 TYPE_QUALS (type
) | TYPE_QUALS (like
));
182 /* Return the common type of two types.
183 We assume that comptypes has already been done and returned 1;
184 if that isn't so, this may crash. In particular, we assume that qualifiers
187 This is the type for the result of most arithmetic operations
188 if the operands have the given two types. */
194 register enum tree_code code1
;
195 register enum tree_code code2
;
198 /* Save time if the two types are the same. */
200 if (t1
== t2
) return t1
;
202 /* If one type is nonsense, use the other. */
203 if (t1
== error_mark_node
)
205 if (t2
== error_mark_node
)
208 /* Merge the attributes. */
209 attributes
= (*targetm
.merge_type_attributes
) (t1
, t2
);
211 /* Treat an enum type as the unsigned integer type of the same width. */
213 if (TREE_CODE (t1
) == ENUMERAL_TYPE
)
214 t1
= type_for_size (TYPE_PRECISION (t1
), 1);
215 if (TREE_CODE (t2
) == ENUMERAL_TYPE
)
216 t2
= type_for_size (TYPE_PRECISION (t2
), 1);
218 code1
= TREE_CODE (t1
);
219 code2
= TREE_CODE (t2
);
221 /* If one type is complex, form the common type of the non-complex
222 components, then make that complex. Use T1 or T2 if it is the
224 if (code1
== COMPLEX_TYPE
|| code2
== COMPLEX_TYPE
)
226 tree subtype1
= code1
== COMPLEX_TYPE
? TREE_TYPE (t1
) : t1
;
227 tree subtype2
= code2
== COMPLEX_TYPE
? TREE_TYPE (t2
) : t2
;
228 tree subtype
= common_type (subtype1
, subtype2
);
230 if (code1
== COMPLEX_TYPE
&& TREE_TYPE (t1
) == subtype
)
231 return build_type_attribute_variant (t1
, attributes
);
232 else if (code2
== COMPLEX_TYPE
&& TREE_TYPE (t2
) == subtype
)
233 return build_type_attribute_variant (t2
, attributes
);
235 return build_type_attribute_variant (build_complex_type (subtype
),
243 /* If only one is real, use it as the result. */
245 if (code1
== REAL_TYPE
&& code2
!= REAL_TYPE
)
246 return build_type_attribute_variant (t1
, attributes
);
248 if (code2
== REAL_TYPE
&& code1
!= REAL_TYPE
)
249 return build_type_attribute_variant (t2
, attributes
);
251 /* Both real or both integers; use the one with greater precision. */
253 if (TYPE_PRECISION (t1
) > TYPE_PRECISION (t2
))
254 return build_type_attribute_variant (t1
, attributes
);
255 else if (TYPE_PRECISION (t2
) > TYPE_PRECISION (t1
))
256 return build_type_attribute_variant (t2
, attributes
);
258 /* Same precision. Prefer longs to ints even when same size. */
260 if (TYPE_MAIN_VARIANT (t1
) == long_unsigned_type_node
261 || TYPE_MAIN_VARIANT (t2
) == long_unsigned_type_node
)
262 return build_type_attribute_variant (long_unsigned_type_node
,
265 if (TYPE_MAIN_VARIANT (t1
) == long_integer_type_node
266 || TYPE_MAIN_VARIANT (t2
) == long_integer_type_node
)
268 /* But preserve unsignedness from the other type,
269 since long cannot hold all the values of an unsigned int. */
270 if (TREE_UNSIGNED (t1
) || TREE_UNSIGNED (t2
))
271 t1
= long_unsigned_type_node
;
273 t1
= long_integer_type_node
;
274 return build_type_attribute_variant (t1
, attributes
);
277 /* Likewise, prefer long double to double even if same size. */
278 if (TYPE_MAIN_VARIANT (t1
) == long_double_type_node
279 || TYPE_MAIN_VARIANT (t2
) == long_double_type_node
)
280 return build_type_attribute_variant (long_double_type_node
,
283 /* Otherwise prefer the unsigned one. */
285 if (TREE_UNSIGNED (t1
))
286 return build_type_attribute_variant (t1
, attributes
);
288 return build_type_attribute_variant (t2
, attributes
);
291 /* For two pointers, do this recursively on the target type,
292 and combine the qualifiers of the two types' targets. */
293 /* This code was turned off; I don't know why.
294 But ANSI C specifies doing this with the qualifiers.
295 So I turned it on again. */
297 tree pointed_to_1
= TREE_TYPE (t1
);
298 tree pointed_to_2
= TREE_TYPE (t2
);
299 tree target
= common_type (TYPE_MAIN_VARIANT (pointed_to_1
),
300 TYPE_MAIN_VARIANT (pointed_to_2
));
301 t1
= build_pointer_type (c_build_qualified_type
303 TYPE_QUALS (pointed_to_1
) |
304 TYPE_QUALS (pointed_to_2
)));
305 return build_type_attribute_variant (t1
, attributes
);
308 t1
= build_pointer_type (common_type (TREE_TYPE (t1
), TREE_TYPE (t2
)));
309 return build_type_attribute_variant (t1
, attributes
);
314 tree elt
= common_type (TREE_TYPE (t1
), TREE_TYPE (t2
));
315 /* Save space: see if the result is identical to one of the args. */
316 if (elt
== TREE_TYPE (t1
) && TYPE_DOMAIN (t1
))
317 return build_type_attribute_variant (t1
, attributes
);
318 if (elt
== TREE_TYPE (t2
) && TYPE_DOMAIN (t2
))
319 return build_type_attribute_variant (t2
, attributes
);
320 /* Merge the element types, and have a size if either arg has one. */
321 t1
= build_array_type (elt
, TYPE_DOMAIN (TYPE_DOMAIN (t1
) ? t1
: t2
));
322 return build_type_attribute_variant (t1
, attributes
);
326 /* Function types: prefer the one that specified arg types.
327 If both do, merge the arg types. Also merge the return types. */
329 tree valtype
= common_type (TREE_TYPE (t1
), TREE_TYPE (t2
));
330 tree p1
= TYPE_ARG_TYPES (t1
);
331 tree p2
= TYPE_ARG_TYPES (t2
);
336 /* Save space: see if the result is identical to one of the args. */
337 if (valtype
== TREE_TYPE (t1
) && ! TYPE_ARG_TYPES (t2
))
338 return build_type_attribute_variant (t1
, attributes
);
339 if (valtype
== TREE_TYPE (t2
) && ! TYPE_ARG_TYPES (t1
))
340 return build_type_attribute_variant (t2
, attributes
);
342 /* Simple way if one arg fails to specify argument types. */
343 if (TYPE_ARG_TYPES (t1
) == 0)
345 t1
= build_function_type (valtype
, TYPE_ARG_TYPES (t2
));
346 return build_type_attribute_variant (t1
, attributes
);
348 if (TYPE_ARG_TYPES (t2
) == 0)
350 t1
= build_function_type (valtype
, TYPE_ARG_TYPES (t1
));
351 return build_type_attribute_variant (t1
, attributes
);
354 /* If both args specify argument types, we must merge the two
355 lists, argument by argument. */
358 declare_parm_level (1);
360 len
= list_length (p1
);
363 for (i
= 0; i
< len
; i
++)
364 newargs
= tree_cons (NULL_TREE
, NULL_TREE
, newargs
);
369 p1
= TREE_CHAIN (p1
), p2
= TREE_CHAIN (p2
), n
= TREE_CHAIN (n
))
371 /* A null type means arg type is not specified.
372 Take whatever the other function type has. */
373 if (TREE_VALUE (p1
) == 0)
375 TREE_VALUE (n
) = TREE_VALUE (p2
);
378 if (TREE_VALUE (p2
) == 0)
380 TREE_VALUE (n
) = TREE_VALUE (p1
);
384 /* Given wait (union {union wait *u; int *i} *)
385 and wait (union wait *),
386 prefer union wait * as type of parm. */
387 if (TREE_CODE (TREE_VALUE (p1
)) == UNION_TYPE
388 && TREE_VALUE (p1
) != TREE_VALUE (p2
))
391 for (memb
= TYPE_FIELDS (TREE_VALUE (p1
));
392 memb
; memb
= TREE_CHAIN (memb
))
393 if (comptypes (TREE_TYPE (memb
), TREE_VALUE (p2
)))
395 TREE_VALUE (n
) = TREE_VALUE (p2
);
397 pedwarn ("function types not truly compatible in ISO C");
401 if (TREE_CODE (TREE_VALUE (p2
)) == UNION_TYPE
402 && TREE_VALUE (p2
) != TREE_VALUE (p1
))
405 for (memb
= TYPE_FIELDS (TREE_VALUE (p2
));
406 memb
; memb
= TREE_CHAIN (memb
))
407 if (comptypes (TREE_TYPE (memb
), TREE_VALUE (p1
)))
409 TREE_VALUE (n
) = TREE_VALUE (p1
);
411 pedwarn ("function types not truly compatible in ISO C");
415 TREE_VALUE (n
) = common_type (TREE_VALUE (p1
), TREE_VALUE (p2
));
421 t1
= build_function_type (valtype
, newargs
);
422 /* ... falls through ... */
426 return build_type_attribute_variant (t1
, attributes
);
431 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
432 or various other operations. Return 2 if they are compatible
433 but a warning may be needed if you use them together. */
436 comptypes (type1
, type2
)
439 register tree t1
= type1
;
440 register tree t2
= type2
;
443 /* Suppress errors caused by previously reported errors. */
445 if (t1
== t2
|| !t1
|| !t2
446 || TREE_CODE (t1
) == ERROR_MARK
|| TREE_CODE (t2
) == ERROR_MARK
)
449 /* If either type is the internal version of sizetype, return the
451 if (TREE_CODE (t1
) == INTEGER_TYPE
&& TYPE_IS_SIZETYPE (t1
)
452 && TYPE_DOMAIN (t1
) != 0)
453 t1
= TYPE_DOMAIN (t1
);
455 if (TREE_CODE (t2
) == INTEGER_TYPE
&& TYPE_IS_SIZETYPE (t2
)
456 && TYPE_DOMAIN (t2
) != 0)
457 t2
= TYPE_DOMAIN (t2
);
459 /* Treat an enum type as the integer type of the same width and
462 if (TREE_CODE (t1
) == ENUMERAL_TYPE
)
463 t1
= type_for_size (TYPE_PRECISION (t1
), TREE_UNSIGNED (t1
));
464 if (TREE_CODE (t2
) == ENUMERAL_TYPE
)
465 t2
= type_for_size (TYPE_PRECISION (t2
), TREE_UNSIGNED (t2
));
470 /* Different classes of types can't be compatible. */
472 if (TREE_CODE (t1
) != TREE_CODE (t2
)) return 0;
474 /* Qualifiers must match. */
476 if (TYPE_QUALS (t1
) != TYPE_QUALS (t2
))
479 /* Allow for two different type nodes which have essentially the same
480 definition. Note that we already checked for equality of the type
481 qualifiers (just above). */
483 if (TYPE_MAIN_VARIANT (t1
) == TYPE_MAIN_VARIANT (t2
))
486 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
487 if (! (attrval
= (*targetm
.comp_type_attributes
) (t1
, t2
)))
490 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
493 switch (TREE_CODE (t1
))
496 val
= (TREE_TYPE (t1
) == TREE_TYPE (t2
)
497 ? 1 : comptypes (TREE_TYPE (t1
), TREE_TYPE (t2
)));
501 val
= function_types_compatible_p (t1
, t2
);
506 tree d1
= TYPE_DOMAIN (t1
);
507 tree d2
= TYPE_DOMAIN (t2
);
510 /* Target types must match incl. qualifiers. */
511 if (TREE_TYPE (t1
) != TREE_TYPE (t2
)
512 && 0 == (val
= comptypes (TREE_TYPE (t1
), TREE_TYPE (t2
))))
515 /* Sizes must match unless one is missing or variable. */
516 if (d1
== 0 || d2
== 0 || d1
== d2
517 || TREE_CODE (TYPE_MIN_VALUE (d1
)) != INTEGER_CST
518 || TREE_CODE (TYPE_MIN_VALUE (d2
)) != INTEGER_CST
519 || TREE_CODE (TYPE_MAX_VALUE (d1
)) != INTEGER_CST
520 || TREE_CODE (TYPE_MAX_VALUE (d2
)) != INTEGER_CST
)
523 if (! tree_int_cst_equal (TYPE_MIN_VALUE (d1
), TYPE_MIN_VALUE (d2
))
524 || ! tree_int_cst_equal (TYPE_MAX_VALUE (d1
), TYPE_MAX_VALUE (d2
)))
531 if (maybe_objc_comptypes (t1
, t2
, 0) == 1)
538 return attrval
== 2 && val
== 1 ? 2 : val
;
541 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
542 ignoring their qualifiers. */
545 comp_target_types (ttl
, ttr
)
550 /* Give maybe_objc_comptypes a crack at letting these types through. */
551 if ((val
= maybe_objc_comptypes (ttl
, ttr
, 1)) >= 0)
554 val
= comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl
)),
555 TYPE_MAIN_VARIANT (TREE_TYPE (ttr
)));
557 if (val
== 2 && pedantic
)
558 pedwarn ("types are not quite compatible");
562 /* Subroutines of `comptypes'. */
564 /* Return 1 if two function types F1 and F2 are compatible.
565 If either type specifies no argument types,
566 the other must specify a fixed number of self-promoting arg types.
567 Otherwise, if one type specifies only the number of arguments,
568 the other must specify that number of self-promoting arg types.
569 Otherwise, the argument types must match. */
572 function_types_compatible_p (f1
, f2
)
576 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
580 if (!(TREE_TYPE (f1
) == TREE_TYPE (f2
)
581 || (val
= comptypes (TREE_TYPE (f1
), TREE_TYPE (f2
)))))
584 args1
= TYPE_ARG_TYPES (f1
);
585 args2
= TYPE_ARG_TYPES (f2
);
587 /* An unspecified parmlist matches any specified parmlist
588 whose argument types don't need default promotions. */
592 if (!self_promoting_args_p (args2
))
594 /* If one of these types comes from a non-prototype fn definition,
595 compare that with the other type's arglist.
596 If they don't match, ask for a warning (but no error). */
597 if (TYPE_ACTUAL_ARG_TYPES (f1
)
598 && 1 != type_lists_compatible_p (args2
, TYPE_ACTUAL_ARG_TYPES (f1
)))
604 if (!self_promoting_args_p (args1
))
606 if (TYPE_ACTUAL_ARG_TYPES (f2
)
607 && 1 != type_lists_compatible_p (args1
, TYPE_ACTUAL_ARG_TYPES (f2
)))
612 /* Both types have argument lists: compare them and propagate results. */
613 val1
= type_lists_compatible_p (args1
, args2
);
614 return val1
!= 1 ? val1
: val
;
617 /* Check two lists of types for compatibility,
618 returning 0 for incompatible, 1 for compatible,
619 or 2 for compatible with warning. */
622 type_lists_compatible_p (args1
, args2
)
625 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
631 if (args1
== 0 && args2
== 0)
633 /* If one list is shorter than the other,
634 they fail to match. */
635 if (args1
== 0 || args2
== 0)
637 /* A null pointer instead of a type
638 means there is supposed to be an argument
639 but nothing is specified about what type it has.
640 So match anything that self-promotes. */
641 if (TREE_VALUE (args1
) == 0)
643 if (simple_type_promotes_to (TREE_VALUE (args2
)) != NULL_TREE
)
646 else if (TREE_VALUE (args2
) == 0)
648 if (simple_type_promotes_to (TREE_VALUE (args1
)) != NULL_TREE
)
651 else if (! (newval
= comptypes (TYPE_MAIN_VARIANT (TREE_VALUE (args1
)),
652 TYPE_MAIN_VARIANT (TREE_VALUE (args2
)))))
654 /* Allow wait (union {union wait *u; int *i} *)
655 and wait (union wait *) to be compatible. */
656 if (TREE_CODE (TREE_VALUE (args1
)) == UNION_TYPE
657 && (TYPE_NAME (TREE_VALUE (args1
)) == 0
658 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1
)))
659 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1
))) == INTEGER_CST
660 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1
)),
661 TYPE_SIZE (TREE_VALUE (args2
))))
664 for (memb
= TYPE_FIELDS (TREE_VALUE (args1
));
665 memb
; memb
= TREE_CHAIN (memb
))
666 if (comptypes (TREE_TYPE (memb
), TREE_VALUE (args2
)))
671 else if (TREE_CODE (TREE_VALUE (args2
)) == UNION_TYPE
672 && (TYPE_NAME (TREE_VALUE (args2
)) == 0
673 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2
)))
674 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2
))) == INTEGER_CST
675 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2
)),
676 TYPE_SIZE (TREE_VALUE (args1
))))
679 for (memb
= TYPE_FIELDS (TREE_VALUE (args2
));
680 memb
; memb
= TREE_CHAIN (memb
))
681 if (comptypes (TREE_TYPE (memb
), TREE_VALUE (args1
)))
690 /* comptypes said ok, but record if it said to warn. */
694 args1
= TREE_CHAIN (args1
);
695 args2
= TREE_CHAIN (args2
);
699 /* Compute the value of the `sizeof' operator. */
705 enum tree_code code
= TREE_CODE (type
);
708 if (code
== FUNCTION_TYPE
)
710 if (pedantic
|| warn_pointer_arith
)
711 pedwarn ("sizeof applied to a function type");
712 size
= size_one_node
;
714 else if (code
== VOID_TYPE
)
716 if (pedantic
|| warn_pointer_arith
)
717 pedwarn ("sizeof applied to a void type");
718 size
= size_one_node
;
720 else if (code
== ERROR_MARK
)
721 size
= size_one_node
;
722 else if (!COMPLETE_TYPE_P (type
))
724 error ("sizeof applied to an incomplete type");
725 size
= size_zero_node
;
728 /* Convert in case a char is more than one unit. */
729 size
= size_binop (CEIL_DIV_EXPR
, TYPE_SIZE_UNIT (type
),
730 size_int (TYPE_PRECISION (char_type_node
)
733 /* SIZE will have an integer type with TYPE_IS_SIZETYPE set.
734 TYPE_IS_SIZETYPE means that certain things (like overflow) will
735 never happen. However, this node should really have type
736 `size_t', which is just a typedef for an ordinary integer type. */
737 return fold (build1 (NOP_EXPR
, c_size_type_node
, size
));
741 c_sizeof_nowarn (type
)
744 enum tree_code code
= TREE_CODE (type
);
747 if (code
== FUNCTION_TYPE
|| code
== VOID_TYPE
|| code
== ERROR_MARK
)
748 size
= size_one_node
;
749 else if (!COMPLETE_TYPE_P (type
))
750 size
= size_zero_node
;
752 /* Convert in case a char is more than one unit. */
753 size
= size_binop (CEIL_DIV_EXPR
, TYPE_SIZE_UNIT (type
),
754 size_int (TYPE_PRECISION (char_type_node
)
757 /* SIZE will have an integer type with TYPE_IS_SIZETYPE set.
758 TYPE_IS_SIZETYPE means that certain things (like overflow) will
759 never happen. However, this node should really have type
760 `size_t', which is just a typedef for an ordinary integer type. */
761 return fold (build1 (NOP_EXPR
, c_size_type_node
, size
));
764 /* Compute the size to increment a pointer by. */
767 c_size_in_bytes (type
)
770 enum tree_code code
= TREE_CODE (type
);
772 if (code
== FUNCTION_TYPE
|| code
== VOID_TYPE
|| code
== ERROR_MARK
)
773 return size_one_node
;
775 if (!COMPLETE_OR_VOID_TYPE_P (type
))
777 error ("arithmetic on pointer to an incomplete type");
778 return size_one_node
;
781 /* Convert in case a char is more than one unit. */
782 return size_binop (CEIL_DIV_EXPR
, TYPE_SIZE_UNIT (type
),
783 size_int (TYPE_PRECISION (char_type_node
)
787 /* Return either DECL or its known constant value (if it has one). */
790 decl_constant_value (decl
)
793 if (/* Don't change a variable array bound or initial value to a constant
794 in a place where a variable is invalid. */
795 current_function_decl
!= 0
796 && ! TREE_THIS_VOLATILE (decl
)
797 && TREE_READONLY (decl
)
798 && DECL_INITIAL (decl
) != 0
799 && TREE_CODE (DECL_INITIAL (decl
)) != ERROR_MARK
800 /* This is invalid if initial value is not constant.
801 If it has either a function call, a memory reference,
802 or a variable, then re-evaluating it could give different results. */
803 && TREE_CONSTANT (DECL_INITIAL (decl
))
804 /* Check for cases where this is sub-optimal, even though valid. */
805 && TREE_CODE (DECL_INITIAL (decl
)) != CONSTRUCTOR
)
806 return DECL_INITIAL (decl
);
810 /* Return either DECL or its known constant value (if it has one), but
811 return DECL if pedantic or DECL has mode BLKmode. This is for
812 bug-compatibility with the old behavior of decl_constant_value
813 (before GCC 3.0); every use of this function is a bug and it should
814 be removed before GCC 3.1. It is not appropriate to use pedantic
815 in a way that affects optimization, and BLKmode is probably not the
816 right test for avoiding misoptimizations either. */
819 decl_constant_value_for_broken_optimization (decl
)
822 if (pedantic
|| DECL_MODE (decl
) == BLKmode
)
825 return decl_constant_value (decl
);
828 /* Perform default promotions for C data used in expressions.
829 Arrays and functions are converted to pointers;
830 enumeral types or short or char, to int.
831 In addition, manifest constants symbols are replaced by their values. */
834 default_conversion (exp
)
837 register tree type
= TREE_TYPE (exp
);
838 register enum tree_code code
= TREE_CODE (type
);
840 /* Constants can be used directly unless they're not loadable. */
841 if (TREE_CODE (exp
) == CONST_DECL
)
842 exp
= DECL_INITIAL (exp
);
844 /* Replace a nonvolatile const static variable with its value unless
845 it is an array, in which case we must be sure that taking the
846 address of the array produces consistent results. */
847 else if (optimize
&& TREE_CODE (exp
) == VAR_DECL
&& code
!= ARRAY_TYPE
)
849 exp
= decl_constant_value_for_broken_optimization (exp
);
850 type
= TREE_TYPE (exp
);
853 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
856 Do not use STRIP_NOPS here! It will remove conversions from pointer
857 to integer and cause infinite recursion. */
858 while (TREE_CODE (exp
) == NON_LVALUE_EXPR
859 || (TREE_CODE (exp
) == NOP_EXPR
860 && TREE_TYPE (TREE_OPERAND (exp
, 0)) == TREE_TYPE (exp
)))
861 exp
= TREE_OPERAND (exp
, 0);
863 /* Normally convert enums to int,
864 but convert wide enums to something wider. */
865 if (code
== ENUMERAL_TYPE
)
867 type
= type_for_size (MAX (TYPE_PRECISION (type
),
868 TYPE_PRECISION (integer_type_node
)),
870 || (TYPE_PRECISION (type
)
871 >= TYPE_PRECISION (integer_type_node
)))
872 && TREE_UNSIGNED (type
)));
874 return convert (type
, exp
);
877 if (TREE_CODE (exp
) == COMPONENT_REF
878 && DECL_C_BIT_FIELD (TREE_OPERAND (exp
, 1))
879 /* If it's thinner than an int, promote it like a
880 c_promoting_integer_type_p, otherwise leave it alone. */
881 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp
, 1)),
882 TYPE_PRECISION (integer_type_node
)))
883 return convert (flag_traditional
&& TREE_UNSIGNED (type
)
884 ? unsigned_type_node
: integer_type_node
,
887 if (c_promoting_integer_type_p (type
))
889 /* Traditionally, unsignedness is preserved in default promotions.
890 Also preserve unsignedness if not really getting any wider. */
891 if (TREE_UNSIGNED (type
)
893 || TYPE_PRECISION (type
) == TYPE_PRECISION (integer_type_node
)))
894 return convert (unsigned_type_node
, exp
);
896 return convert (integer_type_node
, exp
);
899 if (flag_traditional
&& !flag_allow_single_precision
900 && TYPE_MAIN_VARIANT (type
) == float_type_node
)
901 return convert (double_type_node
, exp
);
903 if (code
== VOID_TYPE
)
905 error ("void value not ignored as it ought to be");
906 return error_mark_node
;
908 if (code
== FUNCTION_TYPE
)
910 return build_unary_op (ADDR_EXPR
, exp
, 0);
912 if (code
== ARRAY_TYPE
)
915 tree restype
= TREE_TYPE (type
);
920 if (TREE_CODE_CLASS (TREE_CODE (exp
)) == 'r' || DECL_P (exp
))
922 constp
= TREE_READONLY (exp
);
923 volatilep
= TREE_THIS_VOLATILE (exp
);
926 if (TYPE_QUALS (type
) || constp
|| volatilep
)
928 = c_build_qualified_type (restype
,
930 | (constp
* TYPE_QUAL_CONST
)
931 | (volatilep
* TYPE_QUAL_VOLATILE
));
933 if (TREE_CODE (exp
) == INDIRECT_REF
)
934 return convert (TYPE_POINTER_TO (restype
),
935 TREE_OPERAND (exp
, 0));
937 if (TREE_CODE (exp
) == COMPOUND_EXPR
)
939 tree op1
= default_conversion (TREE_OPERAND (exp
, 1));
940 return build (COMPOUND_EXPR
, TREE_TYPE (op1
),
941 TREE_OPERAND (exp
, 0), op1
);
945 && ! (TREE_CODE (exp
) == CONSTRUCTOR
&& TREE_STATIC (exp
)))
947 error ("invalid use of non-lvalue array");
948 return error_mark_node
;
951 ptrtype
= build_pointer_type (restype
);
953 if (TREE_CODE (exp
) == VAR_DECL
)
955 /* ??? This is not really quite correct
956 in that the type of the operand of ADDR_EXPR
957 is not the target type of the type of the ADDR_EXPR itself.
958 Question is, can this lossage be avoided? */
959 adr
= build1 (ADDR_EXPR
, ptrtype
, exp
);
960 if (mark_addressable (exp
) == 0)
961 return error_mark_node
;
962 TREE_CONSTANT (adr
) = staticp (exp
);
963 TREE_SIDE_EFFECTS (adr
) = 0; /* Default would be, same as EXP. */
966 /* This way is better for a COMPONENT_REF since it can
967 simplify the offset for a component. */
968 adr
= build_unary_op (ADDR_EXPR
, exp
, 1);
969 return convert (ptrtype
, adr
);
974 /* Look up component name in the structure type definition.
976 If this component name is found indirectly within an anonymous union,
977 store in *INDIRECT the component which directly contains
978 that anonymous union. Otherwise, set *INDIRECT to 0. */
981 lookup_field (type
, component
, indirect
)
982 tree type
, component
;
987 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
988 to the field elements. Use a binary search on this array to quickly
989 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
990 will always be set for structures which have many elements. */
992 if (TYPE_LANG_SPECIFIC (type
))
995 tree
*field_array
= &TYPE_LANG_SPECIFIC (type
)->elts
[0];
997 field
= TYPE_FIELDS (type
);
999 top
= TYPE_LANG_SPECIFIC (type
)->len
;
1000 while (top
- bot
> 1)
1002 half
= (top
- bot
+ 1) >> 1;
1003 field
= field_array
[bot
+half
];
1005 if (DECL_NAME (field
) == NULL_TREE
)
1007 /* Step through all anon unions in linear fashion. */
1008 while (DECL_NAME (field_array
[bot
]) == NULL_TREE
)
1010 tree anon
= 0, junk
;
1012 field
= field_array
[bot
++];
1013 if (TREE_CODE (TREE_TYPE (field
)) == RECORD_TYPE
1014 || TREE_CODE (TREE_TYPE (field
)) == UNION_TYPE
)
1015 anon
= lookup_field (TREE_TYPE (field
), component
, &junk
);
1017 if (anon
!= NULL_TREE
)
1024 /* Entire record is only anon unions. */
1028 /* Restart the binary search, with new lower bound. */
1032 if (DECL_NAME (field
) == component
)
1034 if (DECL_NAME (field
) < component
)
1040 if (DECL_NAME (field_array
[bot
]) == component
)
1041 field
= field_array
[bot
];
1042 else if (DECL_NAME (field
) != component
)
1047 for (field
= TYPE_FIELDS (type
); field
; field
= TREE_CHAIN (field
))
1049 if (DECL_NAME (field
) == NULL_TREE
)
1054 if (TREE_CODE (TREE_TYPE (field
)) == RECORD_TYPE
1055 || TREE_CODE (TREE_TYPE (field
)) == UNION_TYPE
)
1056 anon
= lookup_field (TREE_TYPE (field
), component
, &junk
);
1058 if (anon
!= NULL_TREE
)
1065 if (DECL_NAME (field
) == component
)
1070 *indirect
= NULL_TREE
;
1074 /* Make an expression to refer to the COMPONENT field of
1075 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1078 build_component_ref (datum
, component
)
1079 tree datum
, component
;
1081 register tree type
= TREE_TYPE (datum
);
1082 register enum tree_code code
= TREE_CODE (type
);
1083 register tree field
= NULL
;
1086 /* If DATUM is a COMPOUND_EXPR or COND_EXPR, move our reference inside it
1087 unless we are not to support things not strictly ANSI. */
1088 switch (TREE_CODE (datum
))
1092 tree value
= build_component_ref (TREE_OPERAND (datum
, 1), component
);
1093 return build (COMPOUND_EXPR
, TREE_TYPE (value
),
1094 TREE_OPERAND (datum
, 0), value
);
1097 return build_conditional_expr
1098 (TREE_OPERAND (datum
, 0),
1099 build_component_ref (TREE_OPERAND (datum
, 1), component
),
1100 build_component_ref (TREE_OPERAND (datum
, 2), component
));
1106 /* See if there is a field or component with name COMPONENT. */
1108 if (code
== RECORD_TYPE
|| code
== UNION_TYPE
)
1112 if (!COMPLETE_TYPE_P (type
))
1114 incomplete_type_error (NULL_TREE
, type
);
1115 return error_mark_node
;
1118 field
= lookup_field (type
, component
, &indirect
);
1122 error ("%s has no member named `%s'",
1123 code
== RECORD_TYPE
? "structure" : "union",
1124 IDENTIFIER_POINTER (component
));
1125 return error_mark_node
;
1127 if (TREE_TYPE (field
) == error_mark_node
)
1128 return error_mark_node
;
1130 /* If FIELD was found buried within an anonymous union,
1131 make one COMPONENT_REF to get that anonymous union,
1132 then fall thru to make a second COMPONENT_REF to get FIELD. */
1135 ref
= build (COMPONENT_REF
, TREE_TYPE (indirect
), datum
, indirect
);
1136 if (TREE_READONLY (datum
) || TREE_READONLY (indirect
))
1137 TREE_READONLY (ref
) = 1;
1138 if (TREE_THIS_VOLATILE (datum
) || TREE_THIS_VOLATILE (indirect
))
1139 TREE_THIS_VOLATILE (ref
) = 1;
1143 ref
= build (COMPONENT_REF
, TREE_TYPE (field
), datum
, field
);
1145 if (TREE_READONLY (datum
) || TREE_READONLY (field
))
1146 TREE_READONLY (ref
) = 1;
1147 if (TREE_THIS_VOLATILE (datum
) || TREE_THIS_VOLATILE (field
))
1148 TREE_THIS_VOLATILE (ref
) = 1;
1152 else if (code
!= ERROR_MARK
)
1153 error ("request for member `%s' in something not a structure or union",
1154 IDENTIFIER_POINTER (component
));
1156 return error_mark_node
;
1159 /* Given an expression PTR for a pointer, return an expression
1160 for the value pointed to.
1161 ERRORSTRING is the name of the operator to appear in error messages. */
1164 build_indirect_ref (ptr
, errorstring
)
1166 const char *errorstring
;
1168 register tree pointer
= default_conversion (ptr
);
1169 register tree type
= TREE_TYPE (pointer
);
1171 if (TREE_CODE (type
) == POINTER_TYPE
)
1173 if (TREE_CODE (pointer
) == ADDR_EXPR
1175 && (TREE_TYPE (TREE_OPERAND (pointer
, 0))
1176 == TREE_TYPE (type
)))
1177 return TREE_OPERAND (pointer
, 0);
1180 tree t
= TREE_TYPE (type
);
1181 register tree ref
= build1 (INDIRECT_REF
,
1182 TYPE_MAIN_VARIANT (t
), pointer
);
1184 if (!COMPLETE_OR_VOID_TYPE_P (t
) && TREE_CODE (t
) != ARRAY_TYPE
)
1186 error ("dereferencing pointer to incomplete type");
1187 return error_mark_node
;
1189 if (VOID_TYPE_P (t
) && skip_evaluation
== 0)
1190 warning ("dereferencing `void *' pointer");
1192 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1193 so that we get the proper error message if the result is used
1194 to assign to. Also, &* is supposed to be a no-op.
1195 And ANSI C seems to specify that the type of the result
1196 should be the const type. */
1197 /* A de-reference of a pointer to const is not a const. It is valid
1198 to change it via some other pointer. */
1199 TREE_READONLY (ref
) = TYPE_READONLY (t
);
1200 TREE_SIDE_EFFECTS (ref
)
1201 = TYPE_VOLATILE (t
) || TREE_SIDE_EFFECTS (pointer
) || flag_volatile
;
1202 TREE_THIS_VOLATILE (ref
) = TYPE_VOLATILE (t
);
1206 else if (TREE_CODE (pointer
) != ERROR_MARK
)
1207 error ("invalid type argument of `%s'", errorstring
);
1208 return error_mark_node
;
1211 /* This handles expressions of the form "a[i]", which denotes
1214 This is logically equivalent in C to *(a+i), but we may do it differently.
1215 If A is a variable or a member, we generate a primitive ARRAY_REF.
1216 This avoids forcing the array out of registers, and can work on
1217 arrays that are not lvalues (for example, members of structures returned
1221 build_array_ref (array
, index
)
1226 error ("subscript missing in array reference");
1227 return error_mark_node
;
1230 if (TREE_TYPE (array
) == error_mark_node
1231 || TREE_TYPE (index
) == error_mark_node
)
1232 return error_mark_node
;
1234 if (TREE_CODE (TREE_TYPE (array
)) == ARRAY_TYPE
1235 && TREE_CODE (array
) != INDIRECT_REF
)
1239 /* Subscripting with type char is likely to lose
1240 on a machine where chars are signed.
1241 So warn on any machine, but optionally.
1242 Don't warn for unsigned char since that type is safe.
1243 Don't warn for signed char because anyone who uses that
1244 must have done so deliberately. */
1245 if (warn_char_subscripts
1246 && TYPE_MAIN_VARIANT (TREE_TYPE (index
)) == char_type_node
)
1247 warning ("array subscript has type `char'");
1249 /* Apply default promotions *after* noticing character types. */
1250 index
= default_conversion (index
);
1252 /* Require integer *after* promotion, for sake of enums. */
1253 if (TREE_CODE (TREE_TYPE (index
)) != INTEGER_TYPE
)
1255 error ("array subscript is not an integer");
1256 return error_mark_node
;
1259 /* An array that is indexed by a non-constant
1260 cannot be stored in a register; we must be able to do
1261 address arithmetic on its address.
1262 Likewise an array of elements of variable size. */
1263 if (TREE_CODE (index
) != INTEGER_CST
1264 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array
)))
1265 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array
)))) != INTEGER_CST
))
1267 if (mark_addressable (array
) == 0)
1268 return error_mark_node
;
1270 /* An array that is indexed by a constant value which is not within
1271 the array bounds cannot be stored in a register either; because we
1272 would get a crash in store_bit_field/extract_bit_field when trying
1273 to access a non-existent part of the register. */
1274 if (TREE_CODE (index
) == INTEGER_CST
1275 && TYPE_VALUES (TREE_TYPE (array
))
1276 && ! int_fits_type_p (index
, TYPE_VALUES (TREE_TYPE (array
))))
1278 if (mark_addressable (array
) == 0)
1279 return error_mark_node
;
1285 while (TREE_CODE (foo
) == COMPONENT_REF
)
1286 foo
= TREE_OPERAND (foo
, 0);
1287 if (TREE_CODE (foo
) == VAR_DECL
&& DECL_REGISTER (foo
))
1288 pedwarn ("ISO C forbids subscripting `register' array");
1289 else if (! flag_isoc99
&& ! lvalue_p (foo
))
1290 pedwarn ("ISO C89 forbids subscripting non-lvalue array");
1293 type
= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array
)));
1294 rval
= build (ARRAY_REF
, type
, array
, index
);
1295 /* Array ref is const/volatile if the array elements are
1296 or if the array is. */
1297 TREE_READONLY (rval
)
1298 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array
)))
1299 | TREE_READONLY (array
));
1300 TREE_SIDE_EFFECTS (rval
)
1301 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array
)))
1302 | TREE_SIDE_EFFECTS (array
));
1303 TREE_THIS_VOLATILE (rval
)
1304 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array
)))
1305 /* This was added by rms on 16 Nov 91.
1306 It fixes vol struct foo *a; a->elts[1]
1307 in an inline function.
1308 Hope it doesn't break something else. */
1309 | TREE_THIS_VOLATILE (array
));
1310 return require_complete_type (fold (rval
));
1314 tree ar
= default_conversion (array
);
1315 tree ind
= default_conversion (index
);
1317 /* Do the same warning check as above, but only on the part that's
1318 syntactically the index and only if it is also semantically
1320 if (warn_char_subscripts
1321 && TREE_CODE (TREE_TYPE (index
)) == INTEGER_TYPE
1322 && TYPE_MAIN_VARIANT (TREE_TYPE (index
)) == char_type_node
)
1323 warning ("subscript has type `char'");
1325 /* Put the integer in IND to simplify error checking. */
1326 if (TREE_CODE (TREE_TYPE (ar
)) == INTEGER_TYPE
)
1333 if (ar
== error_mark_node
)
1336 if (TREE_CODE (TREE_TYPE (ar
)) != POINTER_TYPE
1337 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar
))) == FUNCTION_TYPE
)
1339 error ("subscripted value is neither array nor pointer");
1340 return error_mark_node
;
1342 if (TREE_CODE (TREE_TYPE (ind
)) != INTEGER_TYPE
)
1344 error ("array subscript is not an integer");
1345 return error_mark_node
;
1348 return build_indirect_ref (build_binary_op (PLUS_EXPR
, ar
, ind
, 0),
1353 /* Build an external reference to identifier ID. FUN indicates
1354 whether this will be used for a function call. */
1356 build_external_ref (id
, fun
)
1361 tree decl
= lookup_name (id
);
1362 tree objc_ivar
= lookup_objc_ivar (id
);
1364 if (!decl
|| decl
== error_mark_node
|| C_DECL_ANTICIPATED (decl
))
1370 if (!decl
|| decl
== error_mark_node
)
1371 /* Ordinary implicit function declaration. */
1372 ref
= implicitly_declare (id
);
1375 /* Implicit declaration of built-in function. Don't
1376 change the built-in declaration, but don't let this
1377 go by silently, either. */
1378 implicit_decl_warning (id
);
1380 /* only issue this warning once */
1381 C_DECL_ANTICIPATED (decl
) = 0;
1387 /* Reference to undeclared variable, including reference to
1388 builtin outside of function-call context. */
1389 if (current_function_decl
== 0)
1390 error ("`%s' undeclared here (not in a function)",
1391 IDENTIFIER_POINTER (id
));
1394 if (IDENTIFIER_GLOBAL_VALUE (id
) != error_mark_node
1395 || IDENTIFIER_ERROR_LOCUS (id
) != current_function_decl
)
1397 error ("`%s' undeclared (first use in this function)",
1398 IDENTIFIER_POINTER (id
));
1400 if (! undeclared_variable_notice
)
1402 error ("(Each undeclared identifier is reported only once");
1403 error ("for each function it appears in.)");
1404 undeclared_variable_notice
= 1;
1407 IDENTIFIER_GLOBAL_VALUE (id
) = error_mark_node
;
1408 IDENTIFIER_ERROR_LOCUS (id
) = current_function_decl
;
1410 return error_mark_node
;
1415 /* Properly declared variable or function reference. */
1418 else if (decl
!= objc_ivar
&& IDENTIFIER_LOCAL_VALUE (id
))
1420 warning ("local declaration of `%s' hides instance variable",
1421 IDENTIFIER_POINTER (id
));
1428 if (TREE_TYPE (ref
) == error_mark_node
)
1429 return error_mark_node
;
1431 assemble_external (ref
);
1432 TREE_USED (ref
) = 1;
1434 if (TREE_CODE (ref
) == CONST_DECL
)
1436 ref
= DECL_INITIAL (ref
);
1437 TREE_CONSTANT (ref
) = 1;
1443 /* Build a function call to function FUNCTION with parameters PARAMS.
1444 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1445 TREE_VALUE of each node is a parameter-expression.
1446 FUNCTION's data type may be a function type or a pointer-to-function. */
1449 build_function_call (function
, params
)
1450 tree function
, params
;
1452 register tree fntype
, fundecl
= 0;
1453 register tree coerced_params
;
1454 tree name
= NULL_TREE
, assembler_name
= NULL_TREE
, result
;
1456 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1457 STRIP_TYPE_NOPS (function
);
1459 /* Convert anything with function type to a pointer-to-function. */
1460 if (TREE_CODE (function
) == FUNCTION_DECL
)
1462 name
= DECL_NAME (function
);
1463 assembler_name
= DECL_ASSEMBLER_NAME (function
);
1465 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1466 (because calling an inline function does not mean the function
1467 needs to be separately compiled). */
1468 fntype
= build_type_variant (TREE_TYPE (function
),
1469 TREE_READONLY (function
),
1470 TREE_THIS_VOLATILE (function
));
1472 function
= build1 (ADDR_EXPR
, build_pointer_type (fntype
), function
);
1475 function
= default_conversion (function
);
1477 fntype
= TREE_TYPE (function
);
1479 if (TREE_CODE (fntype
) == ERROR_MARK
)
1480 return error_mark_node
;
1482 if (!(TREE_CODE (fntype
) == POINTER_TYPE
1483 && TREE_CODE (TREE_TYPE (fntype
)) == FUNCTION_TYPE
))
1485 error ("called object is not a function");
1486 return error_mark_node
;
1489 /* fntype now gets the type of function pointed to. */
1490 fntype
= TREE_TYPE (fntype
);
1492 /* Convert the parameters to the types declared in the
1493 function prototype, or apply default promotions. */
1496 = convert_arguments (TYPE_ARG_TYPES (fntype
), params
, name
, fundecl
);
1498 /* Check for errors in format strings. */
1500 if (warn_format
&& (name
|| assembler_name
))
1501 check_function_format (NULL
, name
, assembler_name
, coerced_params
);
1503 /* Recognize certain built-in functions so we can make tree-codes
1504 other than CALL_EXPR. We do this when it enables fold-const.c
1505 to do something useful. */
1507 if (TREE_CODE (function
) == ADDR_EXPR
1508 && TREE_CODE (TREE_OPERAND (function
, 0)) == FUNCTION_DECL
1509 && DECL_BUILT_IN (TREE_OPERAND (function
, 0)))
1511 result
= expand_tree_builtin (TREE_OPERAND (function
, 0),
1512 params
, coerced_params
);
1517 result
= build (CALL_EXPR
, TREE_TYPE (fntype
),
1518 function
, coerced_params
, NULL_TREE
);
1519 TREE_SIDE_EFFECTS (result
) = 1;
1520 result
= fold (result
);
1522 if (VOID_TYPE_P (TREE_TYPE (result
)))
1524 return require_complete_type (result
);
1527 /* Convert the argument expressions in the list VALUES
1528 to the types in the list TYPELIST. The result is a list of converted
1529 argument expressions.
1531 If TYPELIST is exhausted, or when an element has NULL as its type,
1532 perform the default conversions.
1534 PARMLIST is the chain of parm decls for the function being called.
1535 It may be 0, if that info is not available.
1536 It is used only for generating error messages.
1538 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1540 This is also where warnings about wrong number of args are generated.
1542 Both VALUES and the returned value are chains of TREE_LIST nodes
1543 with the elements of the list in the TREE_VALUE slots of those nodes. */
1546 convert_arguments (typelist
, values
, name
, fundecl
)
1547 tree typelist
, values
, name
, fundecl
;
1549 register tree typetail
, valtail
;
1550 register tree result
= NULL
;
1553 /* Scan the given expressions and types, producing individual
1554 converted arguments and pushing them on RESULT in reverse order. */
1556 for (valtail
= values
, typetail
= typelist
, parmnum
= 0;
1558 valtail
= TREE_CHAIN (valtail
), parmnum
++)
1560 register tree type
= typetail
? TREE_VALUE (typetail
) : 0;
1561 register tree val
= TREE_VALUE (valtail
);
1563 if (type
== void_type_node
)
1566 error ("too many arguments to function `%s'",
1567 IDENTIFIER_POINTER (name
));
1569 error ("too many arguments to function");
1573 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1574 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1575 to convert automatically to a pointer. */
1576 if (TREE_CODE (val
) == NON_LVALUE_EXPR
)
1577 val
= TREE_OPERAND (val
, 0);
1579 if (TREE_CODE (TREE_TYPE (val
)) == ARRAY_TYPE
1580 || TREE_CODE (TREE_TYPE (val
)) == FUNCTION_TYPE
)
1581 val
= default_conversion (val
);
1583 val
= require_complete_type (val
);
1587 /* Formal parm type is specified by a function prototype. */
1590 if (!COMPLETE_TYPE_P (type
))
1592 error ("type of formal parameter %d is incomplete", parmnum
+ 1);
1597 /* Optionally warn about conversions that
1598 differ from the default conversions. */
1599 if (warn_conversion
|| warn_traditional
)
1601 int formal_prec
= TYPE_PRECISION (type
);
1603 if (INTEGRAL_TYPE_P (type
)
1604 && TREE_CODE (TREE_TYPE (val
)) == REAL_TYPE
)
1605 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name
, parmnum
+ 1);
1606 if (INTEGRAL_TYPE_P (type
)
1607 && TREE_CODE (TREE_TYPE (val
)) == COMPLEX_TYPE
)
1608 warn_for_assignment ("%s as integer rather than complex due to prototype", (char *) 0, name
, parmnum
+ 1);
1609 else if (TREE_CODE (type
) == COMPLEX_TYPE
1610 && TREE_CODE (TREE_TYPE (val
)) == REAL_TYPE
)
1611 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name
, parmnum
+ 1);
1612 else if (TREE_CODE (type
) == REAL_TYPE
1613 && INTEGRAL_TYPE_P (TREE_TYPE (val
)))
1614 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name
, parmnum
+ 1);
1615 else if (TREE_CODE (type
) == COMPLEX_TYPE
1616 && INTEGRAL_TYPE_P (TREE_TYPE (val
)))
1617 warn_for_assignment ("%s as complex rather than integer due to prototype", (char *) 0, name
, parmnum
+ 1);
1618 else if (TREE_CODE (type
) == REAL_TYPE
1619 && TREE_CODE (TREE_TYPE (val
)) == COMPLEX_TYPE
)
1620 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name
, parmnum
+ 1);
1621 /* ??? At some point, messages should be written about
1622 conversions between complex types, but that's too messy
1624 else if (TREE_CODE (type
) == REAL_TYPE
1625 && TREE_CODE (TREE_TYPE (val
)) == REAL_TYPE
)
1627 /* Warn if any argument is passed as `float',
1628 since without a prototype it would be `double'. */
1629 if (formal_prec
== TYPE_PRECISION (float_type_node
))
1630 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name
, parmnum
+ 1);
1632 /* Detect integer changing in width or signedness.
1633 These warnings are only activated with
1634 -Wconversion, not with -Wtraditional. */
1635 else if (warn_conversion
&& INTEGRAL_TYPE_P (type
)
1636 && INTEGRAL_TYPE_P (TREE_TYPE (val
)))
1638 tree would_have_been
= default_conversion (val
);
1639 tree type1
= TREE_TYPE (would_have_been
);
1641 if (TREE_CODE (type
) == ENUMERAL_TYPE
1642 && type
== TREE_TYPE (val
))
1643 /* No warning if function asks for enum
1644 and the actual arg is that enum type. */
1646 else if (formal_prec
!= TYPE_PRECISION (type1
))
1647 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name
, parmnum
+ 1);
1648 else if (TREE_UNSIGNED (type
) == TREE_UNSIGNED (type1
))
1650 /* Don't complain if the formal parameter type
1651 is an enum, because we can't tell now whether
1652 the value was an enum--even the same enum. */
1653 else if (TREE_CODE (type
) == ENUMERAL_TYPE
)
1655 else if (TREE_CODE (val
) == INTEGER_CST
1656 && int_fits_type_p (val
, type
))
1657 /* Change in signedness doesn't matter
1658 if a constant value is unaffected. */
1660 /* Likewise for a constant in a NOP_EXPR. */
1661 else if (TREE_CODE (val
) == NOP_EXPR
1662 && TREE_CODE (TREE_OPERAND (val
, 0)) == INTEGER_CST
1663 && int_fits_type_p (TREE_OPERAND (val
, 0), type
))
1665 #if 0 /* We never get such tree structure here. */
1666 else if (TREE_CODE (TREE_TYPE (val
)) == ENUMERAL_TYPE
1667 && int_fits_type_p (TYPE_MIN_VALUE (TREE_TYPE (val
)), type
)
1668 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (val
)), type
))
1669 /* Change in signedness doesn't matter
1670 if an enum value is unaffected. */
1673 /* If the value is extended from a narrower
1674 unsigned type, it doesn't matter whether we
1675 pass it as signed or unsigned; the value
1676 certainly is the same either way. */
1677 else if (TYPE_PRECISION (TREE_TYPE (val
)) < TYPE_PRECISION (type
)
1678 && TREE_UNSIGNED (TREE_TYPE (val
)))
1680 else if (TREE_UNSIGNED (type
))
1681 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name
, parmnum
+ 1);
1683 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name
, parmnum
+ 1);
1687 parmval
= convert_for_assignment (type
, val
,
1688 (char *) 0, /* arg passing */
1689 fundecl
, name
, parmnum
+ 1);
1691 if (PROMOTE_PROTOTYPES
1692 && INTEGRAL_TYPE_P (type
)
1693 && (TYPE_PRECISION (type
) < TYPE_PRECISION (integer_type_node
)))
1694 parmval
= default_conversion (parmval
);
1696 result
= tree_cons (NULL_TREE
, parmval
, result
);
1698 else if (TREE_CODE (TREE_TYPE (val
)) == REAL_TYPE
1699 && (TYPE_PRECISION (TREE_TYPE (val
))
1700 < TYPE_PRECISION (double_type_node
)))
1701 /* Convert `float' to `double'. */
1702 result
= tree_cons (NULL_TREE
, convert (double_type_node
, val
), result
);
1704 /* Convert `short' and `char' to full-size `int'. */
1705 result
= tree_cons (NULL_TREE
, default_conversion (val
), result
);
1708 typetail
= TREE_CHAIN (typetail
);
1711 if (typetail
!= 0 && TREE_VALUE (typetail
) != void_type_node
)
1714 error ("too few arguments to function `%s'",
1715 IDENTIFIER_POINTER (name
));
1717 error ("too few arguments to function");
1720 return nreverse (result
);
1723 /* This is the entry point used by the parser
1724 for binary operators in the input.
1725 In addition to constructing the expression,
1726 we check for operands that were written with other binary operators
1727 in a way that is likely to confuse the user. */
1730 parser_build_binary_op (code
, arg1
, arg2
)
1731 enum tree_code code
;
1734 tree result
= build_binary_op (code
, arg1
, arg2
, 1);
1737 char class1
= TREE_CODE_CLASS (TREE_CODE (arg1
));
1738 char class2
= TREE_CODE_CLASS (TREE_CODE (arg2
));
1739 enum tree_code code1
= ERROR_MARK
;
1740 enum tree_code code2
= ERROR_MARK
;
1742 if (class1
== 'e' || class1
== '1'
1743 || class1
== '2' || class1
== '<')
1744 code1
= C_EXP_ORIGINAL_CODE (arg1
);
1745 if (class2
== 'e' || class2
== '1'
1746 || class2
== '2' || class2
== '<')
1747 code2
= C_EXP_ORIGINAL_CODE (arg2
);
1749 /* Check for cases such as x+y<<z which users are likely
1750 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1751 is cleared to prevent these warnings. */
1752 if (warn_parentheses
)
1754 if (code
== LSHIFT_EXPR
|| code
== RSHIFT_EXPR
)
1756 if (code1
== PLUS_EXPR
|| code1
== MINUS_EXPR
1757 || code2
== PLUS_EXPR
|| code2
== MINUS_EXPR
)
1758 warning ("suggest parentheses around + or - inside shift");
1761 if (code
== TRUTH_ORIF_EXPR
)
1763 if (code1
== TRUTH_ANDIF_EXPR
1764 || code2
== TRUTH_ANDIF_EXPR
)
1765 warning ("suggest parentheses around && within ||");
1768 if (code
== BIT_IOR_EXPR
)
1770 if (code1
== BIT_AND_EXPR
|| code1
== BIT_XOR_EXPR
1771 || code1
== PLUS_EXPR
|| code1
== MINUS_EXPR
1772 || code2
== BIT_AND_EXPR
|| code2
== BIT_XOR_EXPR
1773 || code2
== PLUS_EXPR
|| code2
== MINUS_EXPR
)
1774 warning ("suggest parentheses around arithmetic in operand of |");
1775 /* Check cases like x|y==z */
1776 if (TREE_CODE_CLASS (code1
) == '<' || TREE_CODE_CLASS (code2
) == '<')
1777 warning ("suggest parentheses around comparison in operand of |");
1780 if (code
== BIT_XOR_EXPR
)
1782 if (code1
== BIT_AND_EXPR
1783 || code1
== PLUS_EXPR
|| code1
== MINUS_EXPR
1784 || code2
== BIT_AND_EXPR
1785 || code2
== PLUS_EXPR
|| code2
== MINUS_EXPR
)
1786 warning ("suggest parentheses around arithmetic in operand of ^");
1787 /* Check cases like x^y==z */
1788 if (TREE_CODE_CLASS (code1
) == '<' || TREE_CODE_CLASS (code2
) == '<')
1789 warning ("suggest parentheses around comparison in operand of ^");
1792 if (code
== BIT_AND_EXPR
)
1794 if (code1
== PLUS_EXPR
|| code1
== MINUS_EXPR
1795 || code2
== PLUS_EXPR
|| code2
== MINUS_EXPR
)
1796 warning ("suggest parentheses around + or - in operand of &");
1797 /* Check cases like x&y==z */
1798 if (TREE_CODE_CLASS (code1
) == '<' || TREE_CODE_CLASS (code2
) == '<')
1799 warning ("suggest parentheses around comparison in operand of &");
1803 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
1804 if (TREE_CODE_CLASS (code
) == '<' && extra_warnings
1805 && (TREE_CODE_CLASS (code1
) == '<' || TREE_CODE_CLASS (code2
) == '<'))
1806 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1808 unsigned_conversion_warning (result
, arg1
);
1809 unsigned_conversion_warning (result
, arg2
);
1810 overflow_warning (result
);
1812 class = TREE_CODE_CLASS (TREE_CODE (result
));
1814 /* Record the code that was specified in the source,
1815 for the sake of warnings about confusing nesting. */
1816 if (class == 'e' || class == '1'
1817 || class == '2' || class == '<')
1818 C_SET_EXP_ORIGINAL_CODE (result
, code
);
1821 int flag
= TREE_CONSTANT (result
);
1822 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
1823 so that convert_for_assignment wouldn't strip it.
1824 That way, we got warnings for things like p = (1 - 1).
1825 But it turns out we should not get those warnings. */
1826 result
= build1 (NON_LVALUE_EXPR
, TREE_TYPE (result
), result
);
1827 C_SET_EXP_ORIGINAL_CODE (result
, code
);
1828 TREE_CONSTANT (result
) = flag
;
1834 /* Build a binary-operation expression without default conversions.
1835 CODE is the kind of expression to build.
1836 This function differs from `build' in several ways:
1837 the data type of the result is computed and recorded in it,
1838 warnings are generated if arg data types are invalid,
1839 special handling for addition and subtraction of pointers is known,
1840 and some optimization is done (operations on narrow ints
1841 are done in the narrower type when that gives the same result).
1842 Constant folding is also done before the result is returned.
1844 Note that the operands will never have enumeral types, or function
1845 or array types, because either they will have the default conversions
1846 performed or they have both just been converted to some other type in which
1847 the arithmetic is to be done. */
1850 build_binary_op (code
, orig_op0
, orig_op1
, convert_p
)
1851 enum tree_code code
;
1852 tree orig_op0
, orig_op1
;
1856 register enum tree_code code0
, code1
;
1859 /* Expression code to give to the expression when it is built.
1860 Normally this is CODE, which is what the caller asked for,
1861 but in some special cases we change it. */
1862 register enum tree_code resultcode
= code
;
1864 /* Data type in which the computation is to be performed.
1865 In the simplest cases this is the common type of the arguments. */
1866 register tree result_type
= NULL
;
1868 /* Nonzero means operands have already been type-converted
1869 in whatever way is necessary.
1870 Zero means they need to be converted to RESULT_TYPE. */
1873 /* Nonzero means create the expression with this type, rather than
1875 tree build_type
= 0;
1877 /* Nonzero means after finally constructing the expression
1878 convert it to this type. */
1879 tree final_type
= 0;
1881 /* Nonzero if this is an operation like MIN or MAX which can
1882 safely be computed in short if both args are promoted shorts.
1883 Also implies COMMON.
1884 -1 indicates a bitwise operation; this makes a difference
1885 in the exact conditions for when it is safe to do the operation
1886 in a narrower mode. */
1889 /* Nonzero if this is a comparison operation;
1890 if both args are promoted shorts, compare the original shorts.
1891 Also implies COMMON. */
1892 int short_compare
= 0;
1894 /* Nonzero if this is a right-shift operation, which can be computed on the
1895 original short and then promoted if the operand is a promoted short. */
1896 int short_shift
= 0;
1898 /* Nonzero means set RESULT_TYPE to the common type of the args. */
1903 op0
= default_conversion (orig_op0
);
1904 op1
= default_conversion (orig_op1
);
1912 type0
= TREE_TYPE (op0
);
1913 type1
= TREE_TYPE (op1
);
1915 /* The expression codes of the data types of the arguments tell us
1916 whether the arguments are integers, floating, pointers, etc. */
1917 code0
= TREE_CODE (type0
);
1918 code1
= TREE_CODE (type1
);
1920 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1921 STRIP_TYPE_NOPS (op0
);
1922 STRIP_TYPE_NOPS (op1
);
1924 /* If an error was already reported for one of the arguments,
1925 avoid reporting another error. */
1927 if (code0
== ERROR_MARK
|| code1
== ERROR_MARK
)
1928 return error_mark_node
;
1933 /* Handle the pointer + int case. */
1934 if (code0
== POINTER_TYPE
&& code1
== INTEGER_TYPE
)
1935 return pointer_int_sum (PLUS_EXPR
, op0
, op1
);
1936 else if (code1
== POINTER_TYPE
&& code0
== INTEGER_TYPE
)
1937 return pointer_int_sum (PLUS_EXPR
, op1
, op0
);
1943 /* Subtraction of two similar pointers.
1944 We must subtract them as integers, then divide by object size. */
1945 if (code0
== POINTER_TYPE
&& code1
== POINTER_TYPE
1946 && comp_target_types (type0
, type1
))
1947 return pointer_diff (op0
, op1
);
1948 /* Handle pointer minus int. Just like pointer plus int. */
1949 else if (code0
== POINTER_TYPE
&& code1
== INTEGER_TYPE
)
1950 return pointer_int_sum (MINUS_EXPR
, op0
, op1
);
1959 case TRUNC_DIV_EXPR
:
1961 case FLOOR_DIV_EXPR
:
1962 case ROUND_DIV_EXPR
:
1963 case EXACT_DIV_EXPR
:
1964 if ((code0
== INTEGER_TYPE
|| code0
== REAL_TYPE
1965 || code0
== COMPLEX_TYPE
)
1966 && (code1
== INTEGER_TYPE
|| code1
== REAL_TYPE
1967 || code1
== COMPLEX_TYPE
))
1969 if (!(code0
== INTEGER_TYPE
&& code1
== INTEGER_TYPE
))
1970 resultcode
= RDIV_EXPR
;
1972 /* Although it would be tempting to shorten always here, that
1973 loses on some targets, since the modulo instruction is
1974 undefined if the quotient can't be represented in the
1975 computation mode. We shorten only if unsigned or if
1976 dividing by something we know != -1. */
1977 shorten
= (TREE_UNSIGNED (TREE_TYPE (orig_op0
))
1978 || (TREE_CODE (op1
) == INTEGER_CST
1979 && ! integer_all_onesp (op1
)));
1985 case BIT_ANDTC_EXPR
:
1988 if (code0
== INTEGER_TYPE
&& code1
== INTEGER_TYPE
)
1990 /* If one operand is a constant, and the other is a short type
1991 that has been converted to an int,
1992 really do the work in the short type and then convert the
1993 result to int. If we are lucky, the constant will be 0 or 1
1994 in the short type, making the entire operation go away. */
1995 if (TREE_CODE (op0
) == INTEGER_CST
1996 && TREE_CODE (op1
) == NOP_EXPR
1997 && TYPE_PRECISION (type1
) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1
, 0)))
1998 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op1
, 0))))
2000 final_type
= result_type
;
2001 op1
= TREE_OPERAND (op1
, 0);
2002 result_type
= TREE_TYPE (op1
);
2004 if (TREE_CODE (op1
) == INTEGER_CST
2005 && TREE_CODE (op0
) == NOP_EXPR
2006 && TYPE_PRECISION (type0
) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0
, 0)))
2007 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0
, 0))))
2009 final_type
= result_type
;
2010 op0
= TREE_OPERAND (op0
, 0);
2011 result_type
= TREE_TYPE (op0
);
2015 case TRUNC_MOD_EXPR
:
2016 case FLOOR_MOD_EXPR
:
2017 if (code0
== INTEGER_TYPE
&& code1
== INTEGER_TYPE
)
2019 /* Although it would be tempting to shorten always here, that loses
2020 on some targets, since the modulo instruction is undefined if the
2021 quotient can't be represented in the computation mode. We shorten
2022 only if unsigned or if dividing by something we know != -1. */
2023 shorten
= (TREE_UNSIGNED (TREE_TYPE (orig_op0
))
2024 || (TREE_CODE (op1
) == INTEGER_CST
2025 && ! integer_all_onesp (op1
)));
2030 case TRUTH_ANDIF_EXPR
:
2031 case TRUTH_ORIF_EXPR
:
2032 case TRUTH_AND_EXPR
:
2034 case TRUTH_XOR_EXPR
:
2035 if ((code0
== INTEGER_TYPE
|| code0
== POINTER_TYPE
2036 || code0
== REAL_TYPE
|| code0
== COMPLEX_TYPE
)
2037 && (code1
== INTEGER_TYPE
|| code1
== POINTER_TYPE
2038 || code1
== REAL_TYPE
|| code1
== COMPLEX_TYPE
))
2040 /* Result of these operations is always an int,
2041 but that does not mean the operands should be
2042 converted to ints! */
2043 result_type
= integer_type_node
;
2044 op0
= truthvalue_conversion (op0
);
2045 op1
= truthvalue_conversion (op1
);
2050 /* Shift operations: result has same type as first operand;
2051 always convert second operand to int.
2052 Also set SHORT_SHIFT if shifting rightward. */
2055 if (code0
== INTEGER_TYPE
&& code1
== INTEGER_TYPE
)
2057 if (TREE_CODE (op1
) == INTEGER_CST
&& skip_evaluation
== 0)
2059 if (tree_int_cst_sgn (op1
) < 0)
2060 warning ("right shift count is negative");
2063 if (! integer_zerop (op1
))
2066 if (compare_tree_int (op1
, TYPE_PRECISION (type0
)) >= 0)
2067 warning ("right shift count >= width of type");
2071 /* Use the type of the value to be shifted.
2072 This is what most traditional C compilers do. */
2073 result_type
= type0
;
2074 /* Unless traditional, convert the shift-count to an integer,
2075 regardless of size of value being shifted. */
2076 if (! flag_traditional
)
2078 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1
)) != integer_type_node
)
2079 op1
= convert (integer_type_node
, op1
);
2080 /* Avoid converting op1 to result_type later. */
2087 if (code0
== INTEGER_TYPE
&& code1
== INTEGER_TYPE
)
2089 if (TREE_CODE (op1
) == INTEGER_CST
&& skip_evaluation
== 0)
2091 if (tree_int_cst_sgn (op1
) < 0)
2092 warning ("left shift count is negative");
2094 else if (compare_tree_int (op1
, TYPE_PRECISION (type0
)) >= 0)
2095 warning ("left shift count >= width of type");
2098 /* Use the type of the value to be shifted.
2099 This is what most traditional C compilers do. */
2100 result_type
= type0
;
2101 /* Unless traditional, convert the shift-count to an integer,
2102 regardless of size of value being shifted. */
2103 if (! flag_traditional
)
2105 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1
)) != integer_type_node
)
2106 op1
= convert (integer_type_node
, op1
);
2107 /* Avoid converting op1 to result_type later. */
2115 if (code0
== INTEGER_TYPE
&& code1
== INTEGER_TYPE
)
2117 if (TREE_CODE (op1
) == INTEGER_CST
&& skip_evaluation
== 0)
2119 if (tree_int_cst_sgn (op1
) < 0)
2120 warning ("shift count is negative");
2121 else if (compare_tree_int (op1
, TYPE_PRECISION (type0
)) >= 0)
2122 warning ("shift count >= width of type");
2125 /* Use the type of the value to be shifted.
2126 This is what most traditional C compilers do. */
2127 result_type
= type0
;
2128 /* Unless traditional, convert the shift-count to an integer,
2129 regardless of size of value being shifted. */
2130 if (! flag_traditional
)
2132 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1
)) != integer_type_node
)
2133 op1
= convert (integer_type_node
, op1
);
2134 /* Avoid converting op1 to result_type later. */
2142 if (warn_float_equal
&& (code0
== REAL_TYPE
|| code1
== REAL_TYPE
))
2143 warning ("comparing floating point with == or != is unsafe");
2144 /* Result of comparison is always int,
2145 but don't convert the args to int! */
2146 build_type
= integer_type_node
;
2147 if ((code0
== INTEGER_TYPE
|| code0
== REAL_TYPE
2148 || code0
== COMPLEX_TYPE
)
2149 && (code1
== INTEGER_TYPE
|| code1
== REAL_TYPE
2150 || code1
== COMPLEX_TYPE
))
2152 else if (code0
== POINTER_TYPE
&& code1
== POINTER_TYPE
)
2154 register tree tt0
= TREE_TYPE (type0
);
2155 register tree tt1
= TREE_TYPE (type1
);
2156 /* Anything compares with void *. void * compares with anything.
2157 Otherwise, the targets must be compatible
2158 and both must be object or both incomplete. */
2159 if (comp_target_types (type0
, type1
))
2160 result_type
= common_type (type0
, type1
);
2161 else if (VOID_TYPE_P (tt0
))
2163 /* op0 != orig_op0 detects the case of something
2164 whose value is 0 but which isn't a valid null ptr const. */
2165 if (pedantic
&& (!integer_zerop (op0
) || op0
!= orig_op0
)
2166 && TREE_CODE (tt1
) == FUNCTION_TYPE
)
2167 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
2169 else if (VOID_TYPE_P (tt1
))
2171 if (pedantic
&& (!integer_zerop (op1
) || op1
!= orig_op1
)
2172 && TREE_CODE (tt0
) == FUNCTION_TYPE
)
2173 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
2176 pedwarn ("comparison of distinct pointer types lacks a cast");
2178 if (result_type
== NULL_TREE
)
2179 result_type
= ptr_type_node
;
2181 else if (code0
== POINTER_TYPE
&& TREE_CODE (op1
) == INTEGER_CST
2182 && integer_zerop (op1
))
2183 result_type
= type0
;
2184 else if (code1
== POINTER_TYPE
&& TREE_CODE (op0
) == INTEGER_CST
2185 && integer_zerop (op0
))
2186 result_type
= type1
;
2187 else if (code0
== POINTER_TYPE
&& code1
== INTEGER_TYPE
)
2189 result_type
= type0
;
2190 if (! flag_traditional
)
2191 pedwarn ("comparison between pointer and integer");
2193 else if (code0
== INTEGER_TYPE
&& code1
== POINTER_TYPE
)
2195 result_type
= type1
;
2196 if (! flag_traditional
)
2197 pedwarn ("comparison between pointer and integer");
2203 if ((code0
== INTEGER_TYPE
|| code0
== REAL_TYPE
)
2204 && (code1
== INTEGER_TYPE
|| code1
== REAL_TYPE
))
2206 else if (code0
== POINTER_TYPE
&& code1
== POINTER_TYPE
)
2208 if (comp_target_types (type0
, type1
))
2210 result_type
= common_type (type0
, type1
);
2212 && TREE_CODE (TREE_TYPE (type0
)) == FUNCTION_TYPE
)
2213 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
2217 result_type
= ptr_type_node
;
2218 pedwarn ("comparison of distinct pointer types lacks a cast");
2227 build_type
= integer_type_node
;
2228 if ((code0
== INTEGER_TYPE
|| code0
== REAL_TYPE
)
2229 && (code1
== INTEGER_TYPE
|| code1
== REAL_TYPE
))
2231 else if (code0
== POINTER_TYPE
&& code1
== POINTER_TYPE
)
2233 if (comp_target_types (type0
, type1
))
2235 result_type
= common_type (type0
, type1
);
2236 if (!COMPLETE_TYPE_P (TREE_TYPE (type0
))
2237 != !COMPLETE_TYPE_P (TREE_TYPE (type1
)))
2238 pedwarn ("comparison of complete and incomplete pointers");
2240 && TREE_CODE (TREE_TYPE (type0
)) == FUNCTION_TYPE
)
2241 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
2245 result_type
= ptr_type_node
;
2246 pedwarn ("comparison of distinct pointer types lacks a cast");
2249 else if (code0
== POINTER_TYPE
&& TREE_CODE (op1
) == INTEGER_CST
2250 && integer_zerop (op1
))
2252 result_type
= type0
;
2253 if (pedantic
|| extra_warnings
)
2254 pedwarn ("ordered comparison of pointer with integer zero");
2256 else if (code1
== POINTER_TYPE
&& TREE_CODE (op0
) == INTEGER_CST
2257 && integer_zerop (op0
))
2259 result_type
= type1
;
2261 pedwarn ("ordered comparison of pointer with integer zero");
2263 else if (code0
== POINTER_TYPE
&& code1
== INTEGER_TYPE
)
2265 result_type
= type0
;
2266 if (! flag_traditional
)
2267 pedwarn ("comparison between pointer and integer");
2269 else if (code0
== INTEGER_TYPE
&& code1
== POINTER_TYPE
)
2271 result_type
= type1
;
2272 if (! flag_traditional
)
2273 pedwarn ("comparison between pointer and integer");
2277 case UNORDERED_EXPR
:
2284 build_type
= integer_type_node
;
2285 if (code0
!= REAL_TYPE
|| code1
!= REAL_TYPE
)
2287 error ("unordered comparison on non-floating point argument");
2288 return error_mark_node
;
2297 if ((code0
== INTEGER_TYPE
|| code0
== REAL_TYPE
|| code0
== COMPLEX_TYPE
)
2299 (code1
== INTEGER_TYPE
|| code1
== REAL_TYPE
|| code1
== COMPLEX_TYPE
))
2301 int none_complex
= (code0
!= COMPLEX_TYPE
&& code1
!= COMPLEX_TYPE
);
2303 if (shorten
|| common
|| short_compare
)
2304 result_type
= common_type (type0
, type1
);
2306 /* For certain operations (which identify themselves by shorten != 0)
2307 if both args were extended from the same smaller type,
2308 do the arithmetic in that type and then extend.
2310 shorten !=0 and !=1 indicates a bitwise operation.
2311 For them, this optimization is safe only if
2312 both args are zero-extended or both are sign-extended.
2313 Otherwise, we might change the result.
2314 Eg, (short)-1 | (unsigned short)-1 is (int)-1
2315 but calculated in (unsigned short) it would be (unsigned short)-1. */
2317 if (shorten
&& none_complex
)
2319 int unsigned0
, unsigned1
;
2320 tree arg0
= get_narrower (op0
, &unsigned0
);
2321 tree arg1
= get_narrower (op1
, &unsigned1
);
2322 /* UNS is 1 if the operation to be done is an unsigned one. */
2323 int uns
= TREE_UNSIGNED (result_type
);
2326 final_type
= result_type
;
2328 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
2329 but it *requires* conversion to FINAL_TYPE. */
2331 if ((TYPE_PRECISION (TREE_TYPE (op0
))
2332 == TYPE_PRECISION (TREE_TYPE (arg0
)))
2333 && TREE_TYPE (op0
) != final_type
)
2334 unsigned0
= TREE_UNSIGNED (TREE_TYPE (op0
));
2335 if ((TYPE_PRECISION (TREE_TYPE (op1
))
2336 == TYPE_PRECISION (TREE_TYPE (arg1
)))
2337 && TREE_TYPE (op1
) != final_type
)
2338 unsigned1
= TREE_UNSIGNED (TREE_TYPE (op1
));
2340 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
2342 /* For bitwise operations, signedness of nominal type
2343 does not matter. Consider only how operands were extended. */
2347 /* Note that in all three cases below we refrain from optimizing
2348 an unsigned operation on sign-extended args.
2349 That would not be valid. */
2351 /* Both args variable: if both extended in same way
2352 from same width, do it in that width.
2353 Do it unsigned if args were zero-extended. */
2354 if ((TYPE_PRECISION (TREE_TYPE (arg0
))
2355 < TYPE_PRECISION (result_type
))
2356 && (TYPE_PRECISION (TREE_TYPE (arg1
))
2357 == TYPE_PRECISION (TREE_TYPE (arg0
)))
2358 && unsigned0
== unsigned1
2359 && (unsigned0
|| !uns
))
2361 = signed_or_unsigned_type (unsigned0
,
2362 common_type (TREE_TYPE (arg0
), TREE_TYPE (arg1
)));
2363 else if (TREE_CODE (arg0
) == INTEGER_CST
2364 && (unsigned1
|| !uns
)
2365 && (TYPE_PRECISION (TREE_TYPE (arg1
))
2366 < TYPE_PRECISION (result_type
))
2367 && (type
= signed_or_unsigned_type (unsigned1
,
2369 int_fits_type_p (arg0
, type
)))
2371 else if (TREE_CODE (arg1
) == INTEGER_CST
2372 && (unsigned0
|| !uns
)
2373 && (TYPE_PRECISION (TREE_TYPE (arg0
))
2374 < TYPE_PRECISION (result_type
))
2375 && (type
= signed_or_unsigned_type (unsigned0
,
2377 int_fits_type_p (arg1
, type
)))
2381 /* Shifts can be shortened if shifting right. */
2386 tree arg0
= get_narrower (op0
, &unsigned_arg
);
2388 final_type
= result_type
;
2390 if (arg0
== op0
&& final_type
== TREE_TYPE (op0
))
2391 unsigned_arg
= TREE_UNSIGNED (TREE_TYPE (op0
));
2393 if (TYPE_PRECISION (TREE_TYPE (arg0
)) < TYPE_PRECISION (result_type
)
2394 /* We can shorten only if the shift count is less than the
2395 number of bits in the smaller type size. */
2396 && compare_tree_int (op1
, TYPE_PRECISION (TREE_TYPE (arg0
))) < 0
2397 /* We cannot drop an unsigned shift after sign-extension. */
2398 && (!TREE_UNSIGNED (final_type
) || unsigned_arg
))
2400 /* Do an unsigned shift if the operand was zero-extended. */
2402 = signed_or_unsigned_type (unsigned_arg
, TREE_TYPE (arg0
));
2403 /* Convert value-to-be-shifted to that type. */
2404 if (TREE_TYPE (op0
) != result_type
)
2405 op0
= convert (result_type
, op0
);
2410 /* Comparison operations are shortened too but differently.
2411 They identify themselves by setting short_compare = 1. */
2415 /* Don't write &op0, etc., because that would prevent op0
2416 from being kept in a register.
2417 Instead, make copies of the our local variables and
2418 pass the copies by reference, then copy them back afterward. */
2419 tree xop0
= op0
, xop1
= op1
, xresult_type
= result_type
;
2420 enum tree_code xresultcode
= resultcode
;
2422 = shorten_compare (&xop0
, &xop1
, &xresult_type
, &xresultcode
);
2427 op0
= xop0
, op1
= xop1
;
2429 resultcode
= xresultcode
;
2431 if ((warn_sign_compare
< 0 ? extra_warnings
: warn_sign_compare
!= 0)
2432 && skip_evaluation
== 0)
2434 int op0_signed
= ! TREE_UNSIGNED (TREE_TYPE (orig_op0
));
2435 int op1_signed
= ! TREE_UNSIGNED (TREE_TYPE (orig_op1
));
2436 int unsignedp0
, unsignedp1
;
2437 tree primop0
= get_narrower (op0
, &unsignedp0
);
2438 tree primop1
= get_narrower (op1
, &unsignedp1
);
2442 STRIP_TYPE_NOPS (xop0
);
2443 STRIP_TYPE_NOPS (xop1
);
2445 /* Give warnings for comparisons between signed and unsigned
2446 quantities that may fail.
2448 Do the checking based on the original operand trees, so that
2449 casts will be considered, but default promotions won't be.
2451 Do not warn if the comparison is being done in a signed type,
2452 since the signed type will only be chosen if it can represent
2453 all the values of the unsigned type. */
2454 if (! TREE_UNSIGNED (result_type
))
2456 /* Do not warn if both operands are the same signedness. */
2457 else if (op0_signed
== op1_signed
)
2464 sop
= xop0
, uop
= xop1
;
2466 sop
= xop1
, uop
= xop0
;
2468 /* Do not warn if the signed quantity is an
2469 unsuffixed integer literal (or some static
2470 constant expression involving such literals or a
2471 conditional expression involving such literals)
2472 and it is non-negative. */
2473 if (tree_expr_nonnegative_p (sop
))
2475 /* Do not warn if the comparison is an equality operation,
2476 the unsigned quantity is an integral constant, and it
2477 would fit in the result if the result were signed. */
2478 else if (TREE_CODE (uop
) == INTEGER_CST
2479 && (resultcode
== EQ_EXPR
|| resultcode
== NE_EXPR
)
2480 && int_fits_type_p (uop
, signed_type (result_type
)))
2482 /* Do not warn if the unsigned quantity is an enumeration
2483 constant and its maximum value would fit in the result
2484 if the result were signed. */
2485 else if (TREE_CODE (uop
) == INTEGER_CST
2486 && TREE_CODE (TREE_TYPE (uop
)) == ENUMERAL_TYPE
2487 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE(uop
)),
2488 signed_type (result_type
)))
2491 warning ("comparison between signed and unsigned");
2494 /* Warn if two unsigned values are being compared in a size
2495 larger than their original size, and one (and only one) is the
2496 result of a `~' operator. This comparison will always fail.
2498 Also warn if one operand is a constant, and the constant
2499 does not have all bits set that are set in the ~ operand
2500 when it is extended. */
2502 if ((TREE_CODE (primop0
) == BIT_NOT_EXPR
)
2503 != (TREE_CODE (primop1
) == BIT_NOT_EXPR
))
2505 if (TREE_CODE (primop0
) == BIT_NOT_EXPR
)
2506 primop0
= get_narrower (TREE_OPERAND (primop0
, 0),
2509 primop1
= get_narrower (TREE_OPERAND (primop1
, 0),
2512 if (host_integerp (primop0
, 0) || host_integerp (primop1
, 0))
2515 HOST_WIDE_INT constant
, mask
;
2516 int unsignedp
, bits
;
2518 if (host_integerp (primop0
, 0))
2521 unsignedp
= unsignedp1
;
2522 constant
= tree_low_cst (primop0
, 0);
2527 unsignedp
= unsignedp0
;
2528 constant
= tree_low_cst (primop1
, 0);
2531 bits
= TYPE_PRECISION (TREE_TYPE (primop
));
2532 if (bits
< TYPE_PRECISION (result_type
)
2533 && bits
< HOST_BITS_PER_WIDE_INT
&& unsignedp
)
2535 mask
= (~ (HOST_WIDE_INT
) 0) << bits
;
2536 if ((mask
& constant
) != mask
)
2537 warning ("comparison of promoted ~unsigned with constant");
2540 else if (unsignedp0
&& unsignedp1
2541 && (TYPE_PRECISION (TREE_TYPE (primop0
))
2542 < TYPE_PRECISION (result_type
))
2543 && (TYPE_PRECISION (TREE_TYPE (primop1
))
2544 < TYPE_PRECISION (result_type
)))
2545 warning ("comparison of promoted ~unsigned with unsigned");
2551 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
2552 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
2553 Then the expression will be built.
2554 It will be given type FINAL_TYPE if that is nonzero;
2555 otherwise, it will be given type RESULT_TYPE. */
2559 binary_op_error (code
);
2560 return error_mark_node
;
2565 if (TREE_TYPE (op0
) != result_type
)
2566 op0
= convert (result_type
, op0
);
2567 if (TREE_TYPE (op1
) != result_type
)
2568 op1
= convert (result_type
, op1
);
2571 if (build_type
== NULL_TREE
)
2572 build_type
= result_type
;
2575 register tree result
= build (resultcode
, build_type
, op0
, op1
);
2576 register tree folded
;
2578 folded
= fold (result
);
2579 if (folded
== result
)
2580 TREE_CONSTANT (folded
) = TREE_CONSTANT (op0
) & TREE_CONSTANT (op1
);
2581 if (final_type
!= 0)
2582 return convert (final_type
, folded
);
2587 /* Return a tree for the sum or difference (RESULTCODE says which)
2588 of pointer PTROP and integer INTOP. */
2591 pointer_int_sum (resultcode
, ptrop
, intop
)
2592 enum tree_code resultcode
;
2593 register tree ptrop
, intop
;
2597 register tree result
;
2598 register tree folded
;
2600 /* The result is a pointer of the same type that is being added. */
2602 register tree result_type
= TREE_TYPE (ptrop
);
2604 if (TREE_CODE (TREE_TYPE (result_type
)) == VOID_TYPE
)
2606 if (pedantic
|| warn_pointer_arith
)
2607 pedwarn ("pointer of type `void *' used in arithmetic");
2608 size_exp
= integer_one_node
;
2610 else if (TREE_CODE (TREE_TYPE (result_type
)) == FUNCTION_TYPE
)
2612 if (pedantic
|| warn_pointer_arith
)
2613 pedwarn ("pointer to a function used in arithmetic");
2614 size_exp
= integer_one_node
;
2617 size_exp
= c_size_in_bytes (TREE_TYPE (result_type
));
2619 /* If what we are about to multiply by the size of the elements
2620 contains a constant term, apply distributive law
2621 and multiply that constant term separately.
2622 This helps produce common subexpressions. */
2624 if ((TREE_CODE (intop
) == PLUS_EXPR
|| TREE_CODE (intop
) == MINUS_EXPR
)
2625 && ! TREE_CONSTANT (intop
)
2626 && TREE_CONSTANT (TREE_OPERAND (intop
, 1))
2627 && TREE_CONSTANT (size_exp
)
2628 /* If the constant comes from pointer subtraction,
2629 skip this optimization--it would cause an error. */
2630 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop
, 0))) == INTEGER_TYPE
2631 /* If the constant is unsigned, and smaller than the pointer size,
2632 then we must skip this optimization. This is because it could cause
2633 an overflow error if the constant is negative but INTOP is not. */
2634 && (! TREE_UNSIGNED (TREE_TYPE (intop
))
2635 || (TYPE_PRECISION (TREE_TYPE (intop
))
2636 == TYPE_PRECISION (TREE_TYPE (ptrop
)))))
2638 enum tree_code subcode
= resultcode
;
2639 tree int_type
= TREE_TYPE (intop
);
2640 if (TREE_CODE (intop
) == MINUS_EXPR
)
2641 subcode
= (subcode
== PLUS_EXPR
? MINUS_EXPR
: PLUS_EXPR
);
2642 /* Convert both subexpression types to the type of intop,
2643 because weird cases involving pointer arithmetic
2644 can result in a sum or difference with different type args. */
2645 ptrop
= build_binary_op (subcode
, ptrop
,
2646 convert (int_type
, TREE_OPERAND (intop
, 1)), 1);
2647 intop
= convert (int_type
, TREE_OPERAND (intop
, 0));
2650 /* Convert the integer argument to a type the same size as sizetype
2651 so the multiply won't overflow spuriously. */
2653 if (TYPE_PRECISION (TREE_TYPE (intop
)) != TYPE_PRECISION (sizetype
)
2654 || TREE_UNSIGNED (TREE_TYPE (intop
)) != TREE_UNSIGNED (sizetype
))
2655 intop
= convert (type_for_size (TYPE_PRECISION (sizetype
),
2656 TREE_UNSIGNED (sizetype
)), intop
);
2658 /* Replace the integer argument with a suitable product by the object size.
2659 Do this multiplication as signed, then convert to the appropriate
2660 pointer type (actually unsigned integral). */
2662 intop
= convert (result_type
,
2663 build_binary_op (MULT_EXPR
, intop
,
2664 convert (TREE_TYPE (intop
), size_exp
), 1));
2666 /* Create the sum or difference. */
2668 result
= build (resultcode
, result_type
, ptrop
, intop
);
2670 folded
= fold (result
);
2671 if (folded
== result
)
2672 TREE_CONSTANT (folded
) = TREE_CONSTANT (ptrop
) & TREE_CONSTANT (intop
);
2676 /* Return a tree for the difference of pointers OP0 and OP1.
2677 The resulting tree has type int. */
2680 pointer_diff (op0
, op1
)
2681 register tree op0
, op1
;
2683 register tree result
, folded
;
2684 tree restype
= ptrdiff_type_node
;
2686 tree target_type
= TREE_TYPE (TREE_TYPE (op0
));
2687 tree con0
, con1
, lit0
, lit1
;
2688 tree orig_op1
= op1
;
2690 if (pedantic
|| warn_pointer_arith
)
2692 if (TREE_CODE (target_type
) == VOID_TYPE
)
2693 pedwarn ("pointer of type `void *' used in subtraction");
2694 if (TREE_CODE (target_type
) == FUNCTION_TYPE
)
2695 pedwarn ("pointer to a function used in subtraction");
2698 /* If the conversion to ptrdiff_type does anything like widening or
2699 converting a partial to an integral mode, we get a convert_expression
2700 that is in the way to do any simplifications.
2701 (fold-const.c doesn't know that the extra bits won't be needed.
2702 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2703 different mode in place.)
2704 So first try to find a common term here 'by hand'; we want to cover
2705 at least the cases that occur in legal static initializers. */
2706 con0
= TREE_CODE (op0
) == NOP_EXPR
? TREE_OPERAND (op0
, 0) : op0
;
2707 con1
= TREE_CODE (op1
) == NOP_EXPR
? TREE_OPERAND (op1
, 0) : op1
;
2709 if (TREE_CODE (con0
) == PLUS_EXPR
)
2711 lit0
= TREE_OPERAND (con0
, 1);
2712 con0
= TREE_OPERAND (con0
, 0);
2715 lit0
= integer_zero_node
;
2717 if (TREE_CODE (con1
) == PLUS_EXPR
)
2719 lit1
= TREE_OPERAND (con1
, 1);
2720 con1
= TREE_OPERAND (con1
, 0);
2723 lit1
= integer_zero_node
;
2725 if (operand_equal_p (con0
, con1
, 0))
2732 /* First do the subtraction as integers;
2733 then drop through to build the divide operator.
2734 Do not do default conversions on the minus operator
2735 in case restype is a short type. */
2737 op0
= build_binary_op (MINUS_EXPR
, convert (restype
, op0
),
2738 convert (restype
, op1
), 0);
2739 /* This generates an error if op1 is pointer to incomplete type. */
2740 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1
))))
2741 error ("arithmetic on pointer to an incomplete type");
2743 /* This generates an error if op0 is pointer to incomplete type. */
2744 op1
= c_size_in_bytes (target_type
);
2746 /* Divide by the size, in easiest possible way. */
2748 result
= build (EXACT_DIV_EXPR
, restype
, op0
, convert (restype
, op1
));
2750 folded
= fold (result
);
2751 if (folded
== result
)
2752 TREE_CONSTANT (folded
) = TREE_CONSTANT (op0
) & TREE_CONSTANT (op1
);
2756 /* Construct and perhaps optimize a tree representation
2757 for a unary operation. CODE, a tree_code, specifies the operation
2758 and XARG is the operand. NOCONVERT nonzero suppresses
2759 the default promotions (such as from short to int). */
2762 build_unary_op (code
, xarg
, noconvert
)
2763 enum tree_code code
;
2767 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2768 register tree arg
= xarg
;
2769 register tree argtype
= 0;
2770 register enum tree_code typecode
= TREE_CODE (TREE_TYPE (arg
));
2773 if (typecode
== ERROR_MARK
)
2774 return error_mark_node
;
2775 if (typecode
== ENUMERAL_TYPE
|| typecode
== BOOLEAN_TYPE
)
2776 typecode
= INTEGER_TYPE
;
2781 /* This is used for unary plus, because a CONVERT_EXPR
2782 is enough to prevent anybody from looking inside for
2783 associativity, but won't generate any code. */
2784 if (!(typecode
== INTEGER_TYPE
|| typecode
== REAL_TYPE
2785 || typecode
== COMPLEX_TYPE
))
2787 error ("wrong type argument to unary plus");
2788 return error_mark_node
;
2790 else if (!noconvert
)
2791 arg
= default_conversion (arg
);
2795 if (!(typecode
== INTEGER_TYPE
|| typecode
== REAL_TYPE
2796 || typecode
== COMPLEX_TYPE
))
2798 error ("wrong type argument to unary minus");
2799 return error_mark_node
;
2801 else if (!noconvert
)
2802 arg
= default_conversion (arg
);
2806 if (typecode
== COMPLEX_TYPE
)
2810 pedwarn ("ISO C does not support `~' for complex conjugation");
2812 arg
= default_conversion (arg
);
2814 else if (typecode
!= INTEGER_TYPE
)
2816 error ("wrong type argument to bit-complement");
2817 return error_mark_node
;
2819 else if (!noconvert
)
2820 arg
= default_conversion (arg
);
2824 if (!(typecode
== INTEGER_TYPE
|| typecode
== REAL_TYPE
2825 || typecode
== COMPLEX_TYPE
))
2827 error ("wrong type argument to abs");
2828 return error_mark_node
;
2830 else if (!noconvert
)
2831 arg
= default_conversion (arg
);
2835 /* Conjugating a real value is a no-op, but allow it anyway. */
2836 if (!(typecode
== INTEGER_TYPE
|| typecode
== REAL_TYPE
2837 || typecode
== COMPLEX_TYPE
))
2839 error ("wrong type argument to conjugation");
2840 return error_mark_node
;
2842 else if (!noconvert
)
2843 arg
= default_conversion (arg
);
2846 case TRUTH_NOT_EXPR
:
2847 if (typecode
!= INTEGER_TYPE
2848 && typecode
!= REAL_TYPE
&& typecode
!= POINTER_TYPE
2849 && typecode
!= COMPLEX_TYPE
2850 /* These will convert to a pointer. */
2851 && typecode
!= ARRAY_TYPE
&& typecode
!= FUNCTION_TYPE
)
2853 error ("wrong type argument to unary exclamation mark");
2854 return error_mark_node
;
2856 arg
= truthvalue_conversion (arg
);
2857 return invert_truthvalue (arg
);
2863 if (TREE_CODE (arg
) == COMPLEX_CST
)
2864 return TREE_REALPART (arg
);
2865 else if (TREE_CODE (TREE_TYPE (arg
)) == COMPLEX_TYPE
)
2866 return fold (build1 (REALPART_EXPR
, TREE_TYPE (TREE_TYPE (arg
)), arg
));
2871 if (TREE_CODE (arg
) == COMPLEX_CST
)
2872 return TREE_IMAGPART (arg
);
2873 else if (TREE_CODE (TREE_TYPE (arg
)) == COMPLEX_TYPE
)
2874 return fold (build1 (IMAGPART_EXPR
, TREE_TYPE (TREE_TYPE (arg
)), arg
));
2876 return convert (TREE_TYPE (arg
), integer_zero_node
);
2878 case PREINCREMENT_EXPR
:
2879 case POSTINCREMENT_EXPR
:
2880 case PREDECREMENT_EXPR
:
2881 case POSTDECREMENT_EXPR
:
2882 /* Handle complex lvalues (when permitted)
2883 by reduction to simpler cases. */
2885 val
= unary_complex_lvalue (code
, arg
);
2889 /* Increment or decrement the real part of the value,
2890 and don't change the imaginary part. */
2891 if (typecode
== COMPLEX_TYPE
)
2896 pedwarn ("ISO C does not support `++' and `--' on complex types");
2898 arg
= stabilize_reference (arg
);
2899 real
= build_unary_op (REALPART_EXPR
, arg
, 1);
2900 imag
= build_unary_op (IMAGPART_EXPR
, arg
, 1);
2901 return build (COMPLEX_EXPR
, TREE_TYPE (arg
),
2902 build_unary_op (code
, real
, 1), imag
);
2905 /* Report invalid types. */
2907 if (typecode
!= POINTER_TYPE
2908 && typecode
!= INTEGER_TYPE
&& typecode
!= REAL_TYPE
)
2910 error ("wrong type argument to %s",
2911 code
== PREINCREMENT_EXPR
|| code
== POSTINCREMENT_EXPR
2912 ? "increment" : "decrement");
2913 return error_mark_node
;
2918 tree result_type
= TREE_TYPE (arg
);
2920 arg
= get_unwidened (arg
, 0);
2921 argtype
= TREE_TYPE (arg
);
2923 /* Compute the increment. */
2925 if (typecode
== POINTER_TYPE
)
2927 /* If pointer target is an undefined struct,
2928 we just cannot know how to do the arithmetic. */
2929 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type
)))
2930 error ("%s of pointer to unknown structure",
2931 code
== PREINCREMENT_EXPR
|| code
== POSTINCREMENT_EXPR
2932 ? "increment" : "decrement");
2933 else if ((pedantic
|| warn_pointer_arith
)
2934 && (TREE_CODE (TREE_TYPE (result_type
)) == FUNCTION_TYPE
2935 || TREE_CODE (TREE_TYPE (result_type
)) == VOID_TYPE
))
2936 pedwarn ("wrong type argument to %s",
2937 code
== PREINCREMENT_EXPR
|| code
== POSTINCREMENT_EXPR
2938 ? "increment" : "decrement");
2939 inc
= c_size_in_bytes (TREE_TYPE (result_type
));
2942 inc
= integer_one_node
;
2944 inc
= convert (argtype
, inc
);
2946 /* Handle incrementing a cast-expression. */
2949 switch (TREE_CODE (arg
))
2954 case FIX_TRUNC_EXPR
:
2955 case FIX_FLOOR_EXPR
:
2956 case FIX_ROUND_EXPR
:
2958 pedantic_lvalue_warning (CONVERT_EXPR
);
2959 /* If the real type has the same machine representation
2960 as the type it is cast to, we can make better output
2961 by adding directly to the inside of the cast. */
2962 if ((TREE_CODE (TREE_TYPE (arg
))
2963 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg
, 0))))
2964 && (TYPE_MODE (TREE_TYPE (arg
))
2965 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg
, 0)))))
2966 arg
= TREE_OPERAND (arg
, 0);
2969 tree incremented
, modify
, value
;
2970 if (TREE_CODE (TREE_TYPE (arg
)) == BOOLEAN_TYPE
)
2971 value
= boolean_increment (code
, arg
);
2974 arg
= stabilize_reference (arg
);
2975 if (code
== PREINCREMENT_EXPR
|| code
== PREDECREMENT_EXPR
)
2978 value
= save_expr (arg
);
2979 incremented
= build (((code
== PREINCREMENT_EXPR
2980 || code
== POSTINCREMENT_EXPR
)
2981 ? PLUS_EXPR
: MINUS_EXPR
),
2982 argtype
, value
, inc
);
2983 TREE_SIDE_EFFECTS (incremented
) = 1;
2984 modify
= build_modify_expr (arg
, NOP_EXPR
, incremented
);
2985 value
= build (COMPOUND_EXPR
, TREE_TYPE (arg
), modify
, value
);
2987 TREE_USED (value
) = 1;
2997 /* Complain about anything else that is not a true lvalue. */
2998 if (!lvalue_or_else (arg
, ((code
== PREINCREMENT_EXPR
2999 || code
== POSTINCREMENT_EXPR
)
3000 ? "invalid lvalue in increment"
3001 : "invalid lvalue in decrement")))
3002 return error_mark_node
;
3004 /* Report a read-only lvalue. */
3005 if (TREE_READONLY (arg
))
3006 readonly_warning (arg
,
3007 ((code
== PREINCREMENT_EXPR
3008 || code
== POSTINCREMENT_EXPR
)
3009 ? "increment" : "decrement"));
3011 if (TREE_CODE (TREE_TYPE (arg
)) == BOOLEAN_TYPE
)
3012 val
= boolean_increment (code
, arg
);
3014 val
= build (code
, TREE_TYPE (arg
), arg
, inc
);
3015 TREE_SIDE_EFFECTS (val
) = 1;
3016 val
= convert (result_type
, val
);
3017 if (TREE_CODE (val
) != code
)
3018 TREE_NO_UNUSED_WARNING (val
) = 1;
3023 /* Note that this operation never does default_conversion
3024 regardless of NOCONVERT. */
3026 /* Let &* cancel out to simplify resulting code. */
3027 if (TREE_CODE (arg
) == INDIRECT_REF
)
3029 /* Don't let this be an lvalue. */
3030 if (lvalue_p (TREE_OPERAND (arg
, 0)))
3031 return non_lvalue (TREE_OPERAND (arg
, 0));
3032 return TREE_OPERAND (arg
, 0);
3035 /* For &x[y], return x+y */
3036 if (TREE_CODE (arg
) == ARRAY_REF
)
3038 if (mark_addressable (TREE_OPERAND (arg
, 0)) == 0)
3039 return error_mark_node
;
3040 return build_binary_op (PLUS_EXPR
, TREE_OPERAND (arg
, 0),
3041 TREE_OPERAND (arg
, 1), 1);
3044 /* Handle complex lvalues (when permitted)
3045 by reduction to simpler cases. */
3046 val
= unary_complex_lvalue (code
, arg
);
3050 #if 0 /* Turned off because inconsistent;
3051 float f; *&(int)f = 3.4 stores in int format
3052 whereas (int)f = 3.4 stores in float format. */
3053 /* Address of a cast is just a cast of the address
3054 of the operand of the cast. */
3055 switch (TREE_CODE (arg
))
3060 case FIX_TRUNC_EXPR
:
3061 case FIX_FLOOR_EXPR
:
3062 case FIX_ROUND_EXPR
:
3065 pedwarn ("ISO C forbids the address of a cast expression");
3066 return convert (build_pointer_type (TREE_TYPE (arg
)),
3067 build_unary_op (ADDR_EXPR
, TREE_OPERAND (arg
, 0),
3072 /* Allow the address of a constructor if all the elements
3074 if (TREE_CODE (arg
) == CONSTRUCTOR
&& TREE_CONSTANT (arg
))
3076 /* Anything not already handled and not a true memory reference
3078 else if (typecode
!= FUNCTION_TYPE
3079 && !lvalue_or_else (arg
, "invalid lvalue in unary `&'"))
3080 return error_mark_node
;
3082 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
3083 argtype
= TREE_TYPE (arg
);
3085 /* If the lvalue is const or volatile, merge that into the type
3086 to which the address will point. Note that you can't get a
3087 restricted pointer by taking the address of something, so we
3088 only have to deal with `const' and `volatile' here. */
3089 if ((DECL_P (arg
) || TREE_CODE_CLASS (TREE_CODE (arg
)) == 'r')
3090 && (TREE_READONLY (arg
) || TREE_THIS_VOLATILE (arg
)))
3091 argtype
= c_build_type_variant (argtype
,
3092 TREE_READONLY (arg
),
3093 TREE_THIS_VOLATILE (arg
));
3095 argtype
= build_pointer_type (argtype
);
3097 if (mark_addressable (arg
) == 0)
3098 return error_mark_node
;
3103 if (TREE_CODE (arg
) == COMPONENT_REF
)
3105 tree field
= TREE_OPERAND (arg
, 1);
3107 addr
= build_unary_op (ADDR_EXPR
, TREE_OPERAND (arg
, 0), 0);
3109 if (DECL_C_BIT_FIELD (field
))
3111 error ("attempt to take address of bit-field structure member `%s'",
3112 IDENTIFIER_POINTER (DECL_NAME (field
)));
3113 return error_mark_node
;
3116 addr
= fold (build (PLUS_EXPR
, argtype
,
3117 convert (argtype
, addr
),
3118 convert (argtype
, byte_position (field
))));
3121 addr
= build1 (code
, argtype
, arg
);
3123 /* Address of a static or external variable or
3124 file-scope function counts as a constant. */
3126 && ! (TREE_CODE (arg
) == FUNCTION_DECL
3127 && DECL_CONTEXT (arg
) != 0))
3128 TREE_CONSTANT (addr
) = 1;
3137 argtype
= TREE_TYPE (arg
);
3138 return fold (build1 (code
, argtype
, arg
));
3142 /* If CONVERSIONS is a conversion expression or a nested sequence of such,
3143 convert ARG with the same conversions in the same order
3144 and return the result. */
3147 convert_sequence (conversions
, arg
)
3151 switch (TREE_CODE (conversions
))
3156 case FIX_TRUNC_EXPR
:
3157 case FIX_FLOOR_EXPR
:
3158 case FIX_ROUND_EXPR
:
3160 return convert (TREE_TYPE (conversions
),
3161 convert_sequence (TREE_OPERAND (conversions
, 0),
3170 /* Return nonzero if REF is an lvalue valid for this language.
3171 Lvalues can be assigned, unless their type has TYPE_READONLY.
3172 Lvalues can have their address taken, unless they have DECL_REGISTER. */
3178 register enum tree_code code
= TREE_CODE (ref
);
3185 return lvalue_p (TREE_OPERAND (ref
, 0));
3196 return (TREE_CODE (TREE_TYPE (ref
)) != FUNCTION_TYPE
3197 && TREE_CODE (TREE_TYPE (ref
)) != METHOD_TYPE
);
3201 return TREE_CODE (TREE_TYPE (ref
)) == ARRAY_TYPE
;
3208 /* Return nonzero if REF is an lvalue valid for this language;
3209 otherwise, print an error message and return zero. */
3212 lvalue_or_else (ref
, msgid
)
3216 int win
= lvalue_p (ref
);
3219 error ("%s", msgid
);
3224 /* Apply unary lvalue-demanding operator CODE to the expression ARG
3225 for certain kinds of expressions which are not really lvalues
3226 but which we can accept as lvalues.
3228 If ARG is not a kind of expression we can handle, return zero. */
3231 unary_complex_lvalue (code
, arg
)
3232 enum tree_code code
;
3235 /* Handle (a, b) used as an "lvalue". */
3236 if (TREE_CODE (arg
) == COMPOUND_EXPR
)
3238 tree real_result
= build_unary_op (code
, TREE_OPERAND (arg
, 1), 0);
3240 /* If this returns a function type, it isn't really being used as
3241 an lvalue, so don't issue a warning about it. */
3242 if (TREE_CODE (TREE_TYPE (arg
)) != FUNCTION_TYPE
)
3243 pedantic_lvalue_warning (COMPOUND_EXPR
);
3245 return build (COMPOUND_EXPR
, TREE_TYPE (real_result
),
3246 TREE_OPERAND (arg
, 0), real_result
);
3249 /* Handle (a ? b : c) used as an "lvalue". */
3250 if (TREE_CODE (arg
) == COND_EXPR
)
3252 pedantic_lvalue_warning (COND_EXPR
);
3253 if (TREE_CODE (TREE_TYPE (arg
)) != FUNCTION_TYPE
)
3254 pedantic_lvalue_warning (COMPOUND_EXPR
);
3256 return (build_conditional_expr
3257 (TREE_OPERAND (arg
, 0),
3258 build_unary_op (code
, TREE_OPERAND (arg
, 1), 0),
3259 build_unary_op (code
, TREE_OPERAND (arg
, 2), 0)));
3265 /* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
3266 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
3269 pedantic_lvalue_warning (code
)
3270 enum tree_code code
;
3276 pedwarn ("ISO C forbids use of conditional expressions as lvalues");
3279 pedwarn ("ISO C forbids use of compound expressions as lvalues");
3282 pedwarn ("ISO C forbids use of cast expressions as lvalues");
3287 /* Warn about storing in something that is `const'. */
3290 readonly_warning (arg
, msgid
)
3294 if (TREE_CODE (arg
) == COMPONENT_REF
)
3296 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg
, 0))))
3297 readonly_warning (TREE_OPERAND (arg
, 0), msgid
);
3299 pedwarn ("%s of read-only member `%s'", _(msgid
),
3300 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg
, 1))));
3302 else if (TREE_CODE (arg
) == VAR_DECL
)
3303 pedwarn ("%s of read-only variable `%s'", _(msgid
),
3304 IDENTIFIER_POINTER (DECL_NAME (arg
)));
3306 pedwarn ("%s of read-only location", _(msgid
));
3309 /* Mark EXP saying that we need to be able to take the
3310 address of it; it should not be allocated in a register.
3311 Value is 1 if successful. */
3314 mark_addressable (exp
)
3317 register tree x
= exp
;
3319 switch (TREE_CODE (x
))
3322 if (DECL_C_BIT_FIELD (TREE_OPERAND (x
, 1)))
3324 error ("cannot take address of bitfield `%s'",
3325 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x
, 1))));
3329 /* ... fall through ... */
3335 x
= TREE_OPERAND (x
, 0);
3339 TREE_ADDRESSABLE (x
) = 1;
3346 if (DECL_REGISTER (x
) && !TREE_ADDRESSABLE (x
)
3347 && DECL_NONLOCAL (x
))
3349 if (TREE_PUBLIC (x
))
3351 error ("global register variable `%s' used in nested function",
3352 IDENTIFIER_POINTER (DECL_NAME (x
)));
3355 pedwarn ("register variable `%s' used in nested function",
3356 IDENTIFIER_POINTER (DECL_NAME (x
)));
3358 else if (DECL_REGISTER (x
) && !TREE_ADDRESSABLE (x
))
3360 if (TREE_PUBLIC (x
))
3362 error ("address of global register variable `%s' requested",
3363 IDENTIFIER_POINTER (DECL_NAME (x
)));
3367 /* If we are making this addressable due to its having
3368 volatile components, give a different error message. Also
3369 handle the case of an unnamed parameter by not trying
3370 to give the name. */
3372 else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x
)))
3374 error ("cannot put object with volatile field into register");
3378 pedwarn ("address of register variable `%s' requested",
3379 IDENTIFIER_POINTER (DECL_NAME (x
)));
3381 put_var_into_stack (x
);
3385 TREE_ADDRESSABLE (x
) = 1;
3386 #if 0 /* poplevel deals with this now. */
3387 if (DECL_CONTEXT (x
) == 0)
3388 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x
)) = 1;
3396 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
3399 build_conditional_expr (ifexp
, op1
, op2
)
3400 tree ifexp
, op1
, op2
;
3402 register tree type1
;
3403 register tree type2
;
3404 register enum tree_code code1
;
3405 register enum tree_code code2
;
3406 register tree result_type
= NULL
;
3407 tree orig_op1
= op1
, orig_op2
= op2
;
3409 ifexp
= truthvalue_conversion (default_conversion (ifexp
));
3411 #if 0 /* Produces wrong result if within sizeof. */
3412 /* Don't promote the operands separately if they promote
3413 the same way. Return the unpromoted type and let the combined
3414 value get promoted if necessary. */
3416 if (TREE_TYPE (op1
) == TREE_TYPE (op2
)
3417 && TREE_CODE (TREE_TYPE (op1
)) != ARRAY_TYPE
3418 && TREE_CODE (TREE_TYPE (op1
)) != ENUMERAL_TYPE
3419 && TREE_CODE (TREE_TYPE (op1
)) != FUNCTION_TYPE
)
3421 if (TREE_CODE (ifexp
) == INTEGER_CST
)
3422 return pedantic_non_lvalue (integer_zerop (ifexp
) ? op2
: op1
);
3424 return fold (build (COND_EXPR
, TREE_TYPE (op1
), ifexp
, op1
, op2
));
3428 /* Promote both alternatives. */
3430 if (TREE_CODE (TREE_TYPE (op1
)) != VOID_TYPE
)
3431 op1
= default_conversion (op1
);
3432 if (TREE_CODE (TREE_TYPE (op2
)) != VOID_TYPE
)
3433 op2
= default_conversion (op2
);
3435 if (TREE_CODE (ifexp
) == ERROR_MARK
3436 || TREE_CODE (TREE_TYPE (op1
)) == ERROR_MARK
3437 || TREE_CODE (TREE_TYPE (op2
)) == ERROR_MARK
)
3438 return error_mark_node
;
3440 type1
= TREE_TYPE (op1
);
3441 code1
= TREE_CODE (type1
);
3442 type2
= TREE_TYPE (op2
);
3443 code2
= TREE_CODE (type2
);
3445 /* Quickly detect the usual case where op1 and op2 have the same type
3447 if (TYPE_MAIN_VARIANT (type1
) == TYPE_MAIN_VARIANT (type2
))
3450 result_type
= type1
;
3452 result_type
= TYPE_MAIN_VARIANT (type1
);
3454 else if ((code1
== INTEGER_TYPE
|| code1
== REAL_TYPE
3455 || code1
== COMPLEX_TYPE
)
3456 && (code2
== INTEGER_TYPE
|| code2
== REAL_TYPE
3457 || code2
== COMPLEX_TYPE
))
3459 result_type
= common_type (type1
, type2
);
3461 /* If -Wsign-compare, warn here if type1 and type2 have
3462 different signedness. We'll promote the signed to unsigned
3463 and later code won't know it used to be different.
3464 Do this check on the original types, so that explicit casts
3465 will be considered, but default promotions won't. */
3466 if ((warn_sign_compare
< 0 ? extra_warnings
: warn_sign_compare
)
3467 && !skip_evaluation
)
3469 int unsigned_op1
= TREE_UNSIGNED (TREE_TYPE (orig_op1
));
3470 int unsigned_op2
= TREE_UNSIGNED (TREE_TYPE (orig_op2
));
3472 if (unsigned_op1
^ unsigned_op2
)
3474 /* Do not warn if the result type is signed, since the
3475 signed type will only be chosen if it can represent
3476 all the values of the unsigned type. */
3477 if (! TREE_UNSIGNED (result_type
))
3479 /* Do not warn if the signed quantity is an unsuffixed
3480 integer literal (or some static constant expression
3481 involving such literals) and it is non-negative. */
3482 else if ((unsigned_op2
&& tree_expr_nonnegative_p (op1
))
3483 || (unsigned_op1
&& tree_expr_nonnegative_p (op2
)))
3486 warning ("signed and unsigned type in conditional expression");
3490 else if (code1
== VOID_TYPE
|| code2
== VOID_TYPE
)
3492 if (pedantic
&& (code1
!= VOID_TYPE
|| code2
!= VOID_TYPE
))
3493 pedwarn ("ISO C forbids conditional expr with only one void side");
3494 result_type
= void_type_node
;
3496 else if (code1
== POINTER_TYPE
&& code2
== POINTER_TYPE
)
3498 if (comp_target_types (type1
, type2
))
3499 result_type
= common_type (type1
, type2
);
3500 else if (integer_zerop (op1
) && TREE_TYPE (type1
) == void_type_node
3501 && TREE_CODE (orig_op1
) != NOP_EXPR
)
3502 result_type
= qualify_type (type2
, type1
);
3503 else if (integer_zerop (op2
) && TREE_TYPE (type2
) == void_type_node
3504 && TREE_CODE (orig_op2
) != NOP_EXPR
)
3505 result_type
= qualify_type (type1
, type2
);
3506 else if (VOID_TYPE_P (TREE_TYPE (type1
)))
3508 if (pedantic
&& TREE_CODE (TREE_TYPE (type2
)) == FUNCTION_TYPE
)
3509 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
3510 result_type
= build_pointer_type (qualify_type (TREE_TYPE (type1
),
3511 TREE_TYPE (type2
)));
3513 else if (VOID_TYPE_P (TREE_TYPE (type2
)))
3515 if (pedantic
&& TREE_CODE (TREE_TYPE (type1
)) == FUNCTION_TYPE
)
3516 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
3517 result_type
= build_pointer_type (qualify_type (TREE_TYPE (type2
),
3518 TREE_TYPE (type1
)));
3522 pedwarn ("pointer type mismatch in conditional expression");
3523 result_type
= build_pointer_type (void_type_node
);
3526 else if (code1
== POINTER_TYPE
&& code2
== INTEGER_TYPE
)
3528 if (! integer_zerop (op2
))
3529 pedwarn ("pointer/integer type mismatch in conditional expression");
3532 op2
= null_pointer_node
;
3534 result_type
= type1
;
3536 else if (code2
== POINTER_TYPE
&& code1
== INTEGER_TYPE
)
3538 if (!integer_zerop (op1
))
3539 pedwarn ("pointer/integer type mismatch in conditional expression");
3542 op1
= null_pointer_node
;
3544 result_type
= type2
;
3549 if (flag_cond_mismatch
)
3550 result_type
= void_type_node
;
3553 error ("type mismatch in conditional expression");
3554 return error_mark_node
;
3558 /* Merge const and volatile flags of the incoming types. */
3560 = build_type_variant (result_type
,
3561 TREE_READONLY (op1
) || TREE_READONLY (op2
),
3562 TREE_THIS_VOLATILE (op1
) || TREE_THIS_VOLATILE (op2
));
3564 if (result_type
!= TREE_TYPE (op1
))
3565 op1
= convert_and_check (result_type
, op1
);
3566 if (result_type
!= TREE_TYPE (op2
))
3567 op2
= convert_and_check (result_type
, op2
);
3569 if (TREE_CODE (ifexp
) == INTEGER_CST
)
3570 return pedantic_non_lvalue (integer_zerop (ifexp
) ? op2
: op1
);
3572 return fold (build (COND_EXPR
, result_type
, ifexp
, op1
, op2
));
3575 /* Given a list of expressions, return a compound expression
3576 that performs them all and returns the value of the last of them. */
3579 build_compound_expr (list
)
3582 return internal_build_compound_expr (list
, TRUE
);
3586 internal_build_compound_expr (list
, first_p
)
3592 if (TREE_CHAIN (list
) == 0)
3594 /* Convert arrays to pointers when there really is a comma operator. */
3595 if (!first_p
&& TREE_CODE (TREE_TYPE (TREE_VALUE (list
))) == ARRAY_TYPE
)
3596 TREE_VALUE (list
) = default_conversion (TREE_VALUE (list
));
3598 #if 0 /* If something inside inhibited lvalueness, we should not override. */
3599 /* Consider (x, y+0), which is not an lvalue since y+0 is not. */
3601 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3602 if (TREE_CODE (list
) == NON_LVALUE_EXPR
)
3603 list
= TREE_OPERAND (list
, 0);
3606 /* Don't let (0, 0) be null pointer constant. */
3607 if (!first_p
&& integer_zerop (TREE_VALUE (list
)))
3608 return non_lvalue (TREE_VALUE (list
));
3609 return TREE_VALUE (list
);
3612 rest
= internal_build_compound_expr (TREE_CHAIN (list
), FALSE
);
3614 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list
)))
3616 /* The left-hand operand of a comma expression is like an expression
3617 statement: with -W or -Wunused, we should warn if it doesn't have
3618 any side-effects, unless it was explicitly cast to (void). */
3619 if ((extra_warnings
|| warn_unused_value
)
3620 && ! (TREE_CODE (TREE_VALUE (list
)) == CONVERT_EXPR
3621 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE (list
)))))
3622 warning ("left-hand operand of comma expression has no effect");
3624 /* When pedantic, a compound expression can be neither an lvalue
3625 nor an integer constant expression. */
3630 /* With -Wunused, we should also warn if the left-hand operand does have
3631 side-effects, but computes a value which is not used. For example, in
3632 `foo() + bar(), baz()' the result of the `+' operator is not used,
3633 so we should issue a warning. */
3634 else if (warn_unused_value
)
3635 warn_if_unused_value (TREE_VALUE (list
));
3637 return build (COMPOUND_EXPR
, TREE_TYPE (rest
), TREE_VALUE (list
), rest
);
3640 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3643 build_c_cast (type
, expr
)
3647 register tree value
= expr
;
3649 if (type
== error_mark_node
|| expr
== error_mark_node
)
3650 return error_mark_node
;
3651 type
= TYPE_MAIN_VARIANT (type
);
3654 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3655 if (TREE_CODE (value
) == NON_LVALUE_EXPR
)
3656 value
= TREE_OPERAND (value
, 0);
3659 if (TREE_CODE (type
) == ARRAY_TYPE
)
3661 error ("cast specifies array type");
3662 return error_mark_node
;
3665 if (TREE_CODE (type
) == FUNCTION_TYPE
)
3667 error ("cast specifies function type");
3668 return error_mark_node
;
3671 if (type
== TYPE_MAIN_VARIANT (TREE_TYPE (value
)))
3675 if (TREE_CODE (type
) == RECORD_TYPE
3676 || TREE_CODE (type
) == UNION_TYPE
)
3677 pedwarn ("ISO C forbids casting nonscalar to the same type");
3680 else if (TREE_CODE (type
) == UNION_TYPE
)
3683 if (TREE_CODE (TREE_TYPE (value
)) == ARRAY_TYPE
3684 || TREE_CODE (TREE_TYPE (value
)) == FUNCTION_TYPE
)
3685 value
= default_conversion (value
);
3687 for (field
= TYPE_FIELDS (type
); field
; field
= TREE_CHAIN (field
))
3688 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field
)),
3689 TYPE_MAIN_VARIANT (TREE_TYPE (value
))))
3698 pedwarn ("ISO C forbids casts to union type");
3699 if (TYPE_NAME (type
) != 0)
3701 if (TREE_CODE (TYPE_NAME (type
)) == IDENTIFIER_NODE
)
3702 name
= IDENTIFIER_POINTER (TYPE_NAME (type
));
3704 name
= IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type
)));
3708 t
= digest_init (type
, build (CONSTRUCTOR
, type
, NULL_TREE
,
3709 build_tree_list (field
, value
)),
3711 TREE_CONSTANT (t
) = TREE_CONSTANT (value
);
3714 error ("cast to union type from type not present in union");
3715 return error_mark_node
;
3721 /* If casting to void, avoid the error that would come
3722 from default_conversion in the case of a non-lvalue array. */
3723 if (type
== void_type_node
)
3724 return build1 (CONVERT_EXPR
, type
, value
);
3726 /* Convert functions and arrays to pointers,
3727 but don't convert any other types. */
3728 if (TREE_CODE (TREE_TYPE (value
)) == FUNCTION_TYPE
3729 || TREE_CODE (TREE_TYPE (value
)) == ARRAY_TYPE
)
3730 value
= default_conversion (value
);
3731 otype
= TREE_TYPE (value
);
3733 /* Optionally warn about potentially worrisome casts. */
3736 && TREE_CODE (type
) == POINTER_TYPE
3737 && TREE_CODE (otype
) == POINTER_TYPE
)
3739 tree in_type
= type
;
3740 tree in_otype
= otype
;
3743 /* Check that the qualifiers on IN_TYPE are a superset of
3744 the qualifiers of IN_OTYPE. The outermost level of
3745 POINTER_TYPE nodes is uninteresting and we stop as soon
3746 as we hit a non-POINTER_TYPE node on either type. */
3749 in_otype
= TREE_TYPE (in_otype
);
3750 in_type
= TREE_TYPE (in_type
);
3751 warn
|= (TYPE_QUALS (in_otype
) & ~TYPE_QUALS (in_type
));
3753 while (TREE_CODE (in_type
) == POINTER_TYPE
3754 && TREE_CODE (in_otype
) == POINTER_TYPE
);
3757 /* There are qualifiers present in IN_OTYPE that are not
3758 present in IN_TYPE. */
3759 warning ("cast discards qualifiers from pointer target type");
3762 /* Warn about possible alignment problems. */
3763 if (STRICT_ALIGNMENT
&& warn_cast_align
3764 && TREE_CODE (type
) == POINTER_TYPE
3765 && TREE_CODE (otype
) == POINTER_TYPE
3766 && TREE_CODE (TREE_TYPE (otype
)) != VOID_TYPE
3767 && TREE_CODE (TREE_TYPE (otype
)) != FUNCTION_TYPE
3768 /* Don't warn about opaque types, where the actual alignment
3769 restriction is unknown. */
3770 && !((TREE_CODE (TREE_TYPE (otype
)) == UNION_TYPE
3771 || TREE_CODE (TREE_TYPE (otype
)) == RECORD_TYPE
)
3772 && TYPE_MODE (TREE_TYPE (otype
)) == VOIDmode
)
3773 && TYPE_ALIGN (TREE_TYPE (type
)) > TYPE_ALIGN (TREE_TYPE (otype
)))
3774 warning ("cast increases required alignment of target type");
3776 if (TREE_CODE (type
) == INTEGER_TYPE
3777 && TREE_CODE (otype
) == POINTER_TYPE
3778 && TYPE_PRECISION (type
) != TYPE_PRECISION (otype
)
3779 && !TREE_CONSTANT (value
))
3780 warning ("cast from pointer to integer of different size");
3782 if (warn_bad_function_cast
3783 && TREE_CODE (value
) == CALL_EXPR
3784 && TREE_CODE (type
) != TREE_CODE (otype
))
3785 warning ("cast does not match function type");
3787 if (TREE_CODE (type
) == POINTER_TYPE
3788 && TREE_CODE (otype
) == INTEGER_TYPE
3789 && TYPE_PRECISION (type
) != TYPE_PRECISION (otype
)
3790 /* Don't warn about converting any constant. */
3791 && !TREE_CONSTANT (value
))
3792 warning ("cast to pointer from integer of different size");
3795 value
= convert (type
, value
);
3797 /* Ignore any integer overflow caused by the cast. */
3798 if (TREE_CODE (value
) == INTEGER_CST
)
3800 TREE_OVERFLOW (value
) = TREE_OVERFLOW (ovalue
);
3801 TREE_CONSTANT_OVERFLOW (value
) = TREE_CONSTANT_OVERFLOW (ovalue
);
3805 /* Pedantically, don't ley (void *) (FOO *) 0 be a null pointer constant. */
3806 if (pedantic
&& TREE_CODE (value
) == INTEGER_CST
3807 && TREE_CODE (expr
) == INTEGER_CST
3808 && TREE_CODE (TREE_TYPE (expr
)) != INTEGER_TYPE
)
3809 value
= non_lvalue (value
);
3811 /* If pedantic, don't let a cast be an lvalue. */
3812 if (value
== expr
&& pedantic
)
3813 value
= non_lvalue (value
);
3818 /* Interpret a cast of expression EXPR to type TYPE. */
3820 c_cast_expr (type
, expr
)
3823 int saved_wsp
= warn_strict_prototypes
;
3825 /* This avoids warnings about unprototyped casts on
3826 integers. E.g. "#define SIG_DFL (void(*)())0". */
3827 if (TREE_CODE (expr
) == INTEGER_CST
)
3828 warn_strict_prototypes
= 0;
3829 type
= groktypename (type
);
3830 warn_strict_prototypes
= saved_wsp
;
3832 return build_c_cast (type
, expr
);
3836 /* Build an assignment expression of lvalue LHS from value RHS.
3837 MODIFYCODE is the code for a binary operator that we use
3838 to combine the old value of LHS with RHS to get the new value.
3839 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3842 build_modify_expr (lhs
, modifycode
, rhs
)
3844 enum tree_code modifycode
;
3846 register tree result
;
3848 tree lhstype
= TREE_TYPE (lhs
);
3849 tree olhstype
= lhstype
;
3851 /* Types that aren't fully specified cannot be used in assignments. */
3852 lhs
= require_complete_type (lhs
);
3854 /* Avoid duplicate error messages from operands that had errors. */
3855 if (TREE_CODE (lhs
) == ERROR_MARK
|| TREE_CODE (rhs
) == ERROR_MARK
)
3856 return error_mark_node
;
3858 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3859 /* Do not use STRIP_NOPS here. We do not want an enumerator
3860 whose value is 0 to count as a null pointer constant. */
3861 if (TREE_CODE (rhs
) == NON_LVALUE_EXPR
)
3862 rhs
= TREE_OPERAND (rhs
, 0);
3866 /* Handle control structure constructs used as "lvalues". */
3868 switch (TREE_CODE (lhs
))
3870 /* Handle (a, b) used as an "lvalue". */
3872 pedantic_lvalue_warning (COMPOUND_EXPR
);
3873 newrhs
= build_modify_expr (TREE_OPERAND (lhs
, 1), modifycode
, rhs
);
3874 if (TREE_CODE (newrhs
) == ERROR_MARK
)
3875 return error_mark_node
;
3876 return build (COMPOUND_EXPR
, lhstype
,
3877 TREE_OPERAND (lhs
, 0), newrhs
);
3879 /* Handle (a ? b : c) used as an "lvalue". */
3881 pedantic_lvalue_warning (COND_EXPR
);
3882 rhs
= save_expr (rhs
);
3884 /* Produce (a ? (b = rhs) : (c = rhs))
3885 except that the RHS goes through a save-expr
3886 so the code to compute it is only emitted once. */
3888 = build_conditional_expr (TREE_OPERAND (lhs
, 0),
3889 build_modify_expr (TREE_OPERAND (lhs
, 1),
3891 build_modify_expr (TREE_OPERAND (lhs
, 2),
3893 if (TREE_CODE (cond
) == ERROR_MARK
)
3895 /* Make sure the code to compute the rhs comes out
3896 before the split. */
3897 return build (COMPOUND_EXPR
, TREE_TYPE (lhs
),
3898 /* But cast it to void to avoid an "unused" error. */
3899 convert (void_type_node
, rhs
), cond
);
3905 /* If a binary op has been requested, combine the old LHS value with the RHS
3906 producing the value we should actually store into the LHS. */
3908 if (modifycode
!= NOP_EXPR
)
3910 lhs
= stabilize_reference (lhs
);
3911 newrhs
= build_binary_op (modifycode
, lhs
, rhs
, 1);
3914 /* Handle a cast used as an "lvalue".
3915 We have already performed any binary operator using the value as cast.
3916 Now convert the result to the cast type of the lhs,
3917 and then true type of the lhs and store it there;
3918 then convert result back to the cast type to be the value
3919 of the assignment. */
3921 switch (TREE_CODE (lhs
))
3926 case FIX_TRUNC_EXPR
:
3927 case FIX_FLOOR_EXPR
:
3928 case FIX_ROUND_EXPR
:
3930 if (TREE_CODE (TREE_TYPE (newrhs
)) == ARRAY_TYPE
3931 || TREE_CODE (TREE_TYPE (newrhs
)) == FUNCTION_TYPE
)
3932 newrhs
= default_conversion (newrhs
);
3934 tree inner_lhs
= TREE_OPERAND (lhs
, 0);
3936 result
= build_modify_expr (inner_lhs
, NOP_EXPR
,
3937 convert (TREE_TYPE (inner_lhs
),
3938 convert (lhstype
, newrhs
)));
3939 if (TREE_CODE (result
) == ERROR_MARK
)
3941 pedantic_lvalue_warning (CONVERT_EXPR
);
3942 return convert (TREE_TYPE (lhs
), result
);
3949 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3950 Reject anything strange now. */
3952 if (!lvalue_or_else (lhs
, "invalid lvalue in assignment"))
3953 return error_mark_node
;
3955 /* Warn about storing in something that is `const'. */
3957 if (TREE_READONLY (lhs
) || TYPE_READONLY (lhstype
)
3958 || ((TREE_CODE (lhstype
) == RECORD_TYPE
3959 || TREE_CODE (lhstype
) == UNION_TYPE
)
3960 && C_TYPE_FIELDS_READONLY (lhstype
)))
3961 readonly_warning (lhs
, "assignment");
3963 /* If storing into a structure or union member,
3964 it has probably been given type `int'.
3965 Compute the type that would go with
3966 the actual amount of storage the member occupies. */
3968 if (TREE_CODE (lhs
) == COMPONENT_REF
3969 && (TREE_CODE (lhstype
) == INTEGER_TYPE
3970 || TREE_CODE (lhstype
) == BOOLEAN_TYPE
3971 || TREE_CODE (lhstype
) == REAL_TYPE
3972 || TREE_CODE (lhstype
) == ENUMERAL_TYPE
))
3973 lhstype
= TREE_TYPE (get_unwidened (lhs
, 0));
3975 /* If storing in a field that is in actuality a short or narrower than one,
3976 we must store in the field in its actual type. */
3978 if (lhstype
!= TREE_TYPE (lhs
))
3980 lhs
= copy_node (lhs
);
3981 TREE_TYPE (lhs
) = lhstype
;
3984 /* Convert new value to destination type. */
3986 newrhs
= convert_for_assignment (lhstype
, newrhs
, _("assignment"),
3987 NULL_TREE
, NULL_TREE
, 0);
3988 if (TREE_CODE (newrhs
) == ERROR_MARK
)
3989 return error_mark_node
;
3993 result
= build (MODIFY_EXPR
, lhstype
, lhs
, newrhs
);
3994 TREE_SIDE_EFFECTS (result
) = 1;
3996 /* If we got the LHS in a different type for storing in,
3997 convert the result back to the nominal type of LHS
3998 so that the value we return always has the same type
3999 as the LHS argument. */
4001 if (olhstype
== TREE_TYPE (result
))
4003 return convert_for_assignment (olhstype
, result
, _("assignment"),
4004 NULL_TREE
, NULL_TREE
, 0);
4007 /* Convert value RHS to type TYPE as preparation for an assignment
4008 to an lvalue of type TYPE.
4009 The real work of conversion is done by `convert'.
4010 The purpose of this function is to generate error messages
4011 for assignments that are not allowed in C.
4012 ERRTYPE is a string to use in error messages:
4013 "assignment", "return", etc. If it is null, this is parameter passing
4014 for a function call (and different error messages are output).
4016 FUNNAME is the name of the function being called,
4017 as an IDENTIFIER_NODE, or null.
4018 PARMNUM is the number of the argument, for printing in error messages. */
4021 convert_for_assignment (type
, rhs
, errtype
, fundecl
, funname
, parmnum
)
4023 const char *errtype
;
4024 tree fundecl
, funname
;
4027 register enum tree_code codel
= TREE_CODE (type
);
4028 register tree rhstype
;
4029 register enum tree_code coder
;
4031 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4032 /* Do not use STRIP_NOPS here. We do not want an enumerator
4033 whose value is 0 to count as a null pointer constant. */
4034 if (TREE_CODE (rhs
) == NON_LVALUE_EXPR
)
4035 rhs
= TREE_OPERAND (rhs
, 0);
4037 if (TREE_CODE (TREE_TYPE (rhs
)) == ARRAY_TYPE
4038 || TREE_CODE (TREE_TYPE (rhs
)) == FUNCTION_TYPE
)
4039 rhs
= default_conversion (rhs
);
4040 else if (optimize
&& TREE_CODE (rhs
) == VAR_DECL
)
4041 rhs
= decl_constant_value_for_broken_optimization (rhs
);
4043 rhstype
= TREE_TYPE (rhs
);
4044 coder
= TREE_CODE (rhstype
);
4046 if (coder
== ERROR_MARK
)
4047 return error_mark_node
;
4049 if (TYPE_MAIN_VARIANT (type
) == TYPE_MAIN_VARIANT (rhstype
))
4051 overflow_warning (rhs
);
4052 /* Check for Objective-C protocols. This will issue a warning if
4053 there are protocol violations. No need to use the return value. */
4054 maybe_objc_comptypes (type
, rhstype
, 0);
4058 if (coder
== VOID_TYPE
)
4060 error ("void value not ignored as it ought to be");
4061 return error_mark_node
;
4063 /* A type converts to a reference to it.
4064 This code doesn't fully support references, it's just for the
4065 special case of va_start and va_copy. */
4066 if (codel
== REFERENCE_TYPE
4067 && comptypes (TREE_TYPE (type
), TREE_TYPE (rhs
)) == 1)
4069 if (mark_addressable (rhs
) == 0)
4070 return error_mark_node
;
4071 rhs
= build1 (ADDR_EXPR
, build_pointer_type (TREE_TYPE (rhs
)), rhs
);
4073 /* We already know that these two types are compatible, but they
4074 may not be exactly identical. In fact, `TREE_TYPE (type)' is
4075 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
4076 likely to be va_list, a typedef to __builtin_va_list, which
4077 is different enough that it will cause problems later. */
4078 if (TREE_TYPE (TREE_TYPE (rhs
)) != TREE_TYPE (type
))
4079 rhs
= build1 (NOP_EXPR
, build_pointer_type (TREE_TYPE (type
)), rhs
);
4081 rhs
= build1 (NOP_EXPR
, type
, rhs
);
4084 /* Arithmetic types all interconvert, and enum is treated like int. */
4085 else if ((codel
== INTEGER_TYPE
|| codel
== REAL_TYPE
4086 || codel
== ENUMERAL_TYPE
|| codel
== COMPLEX_TYPE
4087 || codel
== BOOLEAN_TYPE
)
4088 && (coder
== INTEGER_TYPE
|| coder
== REAL_TYPE
4089 || coder
== ENUMERAL_TYPE
|| coder
== COMPLEX_TYPE
4090 || coder
== BOOLEAN_TYPE
))
4091 return convert_and_check (type
, rhs
);
4093 /* Conversion to a transparent union from its member types.
4094 This applies only to function arguments. */
4095 else if (codel
== UNION_TYPE
&& TYPE_TRANSPARENT_UNION (type
) && ! errtype
)
4098 tree marginal_memb_type
= 0;
4100 for (memb_types
= TYPE_FIELDS (type
); memb_types
;
4101 memb_types
= TREE_CHAIN (memb_types
))
4103 tree memb_type
= TREE_TYPE (memb_types
);
4105 if (comptypes (TYPE_MAIN_VARIANT (memb_type
),
4106 TYPE_MAIN_VARIANT (rhstype
)))
4109 if (TREE_CODE (memb_type
) != POINTER_TYPE
)
4112 if (coder
== POINTER_TYPE
)
4114 register tree ttl
= TREE_TYPE (memb_type
);
4115 register tree ttr
= TREE_TYPE (rhstype
);
4117 /* Any non-function converts to a [const][volatile] void *
4118 and vice versa; otherwise, targets must be the same.
4119 Meanwhile, the lhs target must have all the qualifiers of
4121 if (VOID_TYPE_P (ttl
) || VOID_TYPE_P (ttr
)
4122 || comp_target_types (memb_type
, rhstype
))
4124 /* If this type won't generate any warnings, use it. */
4125 if (TYPE_QUALS (ttl
) == TYPE_QUALS (ttr
)
4126 || ((TREE_CODE (ttr
) == FUNCTION_TYPE
4127 && TREE_CODE (ttl
) == FUNCTION_TYPE
)
4128 ? ((TYPE_QUALS (ttl
) | TYPE_QUALS (ttr
))
4129 == TYPE_QUALS (ttr
))
4130 : ((TYPE_QUALS (ttl
) | TYPE_QUALS (ttr
))
4131 == TYPE_QUALS (ttl
))))
4134 /* Keep looking for a better type, but remember this one. */
4135 if (! marginal_memb_type
)
4136 marginal_memb_type
= memb_type
;
4140 /* Can convert integer zero to any pointer type. */
4141 if (integer_zerop (rhs
)
4142 || (TREE_CODE (rhs
) == NOP_EXPR
4143 && integer_zerop (TREE_OPERAND (rhs
, 0))))
4145 rhs
= null_pointer_node
;
4150 if (memb_types
|| marginal_memb_type
)
4154 /* We have only a marginally acceptable member type;
4155 it needs a warning. */
4156 register tree ttl
= TREE_TYPE (marginal_memb_type
);
4157 register tree ttr
= TREE_TYPE (rhstype
);
4159 /* Const and volatile mean something different for function
4160 types, so the usual warnings are not appropriate. */
4161 if (TREE_CODE (ttr
) == FUNCTION_TYPE
4162 && TREE_CODE (ttl
) == FUNCTION_TYPE
)
4164 /* Because const and volatile on functions are
4165 restrictions that say the function will not do
4166 certain things, it is okay to use a const or volatile
4167 function where an ordinary one is wanted, but not
4169 if (TYPE_QUALS (ttl
) & ~TYPE_QUALS (ttr
))
4170 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4171 errtype
, funname
, parmnum
);
4173 else if (TYPE_QUALS (ttr
) & ~TYPE_QUALS (ttl
))
4174 warn_for_assignment ("%s discards qualifiers from pointer target type",
4179 if (pedantic
&& ! DECL_IN_SYSTEM_HEADER (fundecl
))
4180 pedwarn ("ISO C prohibits argument conversion to union type");
4182 return build1 (NOP_EXPR
, type
, rhs
);
4186 /* Conversions among pointers */
4187 else if ((codel
== POINTER_TYPE
|| codel
== REFERENCE_TYPE
)
4188 && (coder
== POINTER_TYPE
|| coder
== REFERENCE_TYPE
))
4190 register tree ttl
= TREE_TYPE (type
);
4191 register tree ttr
= TREE_TYPE (rhstype
);
4193 /* Any non-function converts to a [const][volatile] void *
4194 and vice versa; otherwise, targets must be the same.
4195 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
4196 if (VOID_TYPE_P (ttl
) || VOID_TYPE_P (ttr
)
4197 || comp_target_types (type
, rhstype
)
4198 || (unsigned_type (TYPE_MAIN_VARIANT (ttl
))
4199 == unsigned_type (TYPE_MAIN_VARIANT (ttr
))))
4202 && ((VOID_TYPE_P (ttl
) && TREE_CODE (ttr
) == FUNCTION_TYPE
)
4205 /* Check TREE_CODE to catch cases like (void *) (char *) 0
4206 which are not ANSI null ptr constants. */
4207 && (!integer_zerop (rhs
) || TREE_CODE (rhs
) == NOP_EXPR
)
4208 && TREE_CODE (ttl
) == FUNCTION_TYPE
)))
4209 warn_for_assignment ("ISO C forbids %s between function pointer and `void *'",
4210 errtype
, funname
, parmnum
);
4211 /* Const and volatile mean something different for function types,
4212 so the usual warnings are not appropriate. */
4213 else if (TREE_CODE (ttr
) != FUNCTION_TYPE
4214 && TREE_CODE (ttl
) != FUNCTION_TYPE
)
4216 if (TYPE_QUALS (ttr
) & ~TYPE_QUALS (ttl
))
4217 warn_for_assignment ("%s discards qualifiers from pointer target type",
4218 errtype
, funname
, parmnum
);
4219 /* If this is not a case of ignoring a mismatch in signedness,
4221 else if (VOID_TYPE_P (ttl
) || VOID_TYPE_P (ttr
)
4222 || comp_target_types (type
, rhstype
))
4224 /* If there is a mismatch, do warn. */
4226 warn_for_assignment ("pointer targets in %s differ in signedness",
4227 errtype
, funname
, parmnum
);
4229 else if (TREE_CODE (ttl
) == FUNCTION_TYPE
4230 && TREE_CODE (ttr
) == FUNCTION_TYPE
)
4232 /* Because const and volatile on functions are restrictions
4233 that say the function will not do certain things,
4234 it is okay to use a const or volatile function
4235 where an ordinary one is wanted, but not vice-versa. */
4236 if (TYPE_QUALS (ttl
) & ~TYPE_QUALS (ttr
))
4237 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4238 errtype
, funname
, parmnum
);
4242 warn_for_assignment ("%s from incompatible pointer type",
4243 errtype
, funname
, parmnum
);
4244 return convert (type
, rhs
);
4246 else if (codel
== POINTER_TYPE
&& coder
== INTEGER_TYPE
)
4248 /* An explicit constant 0 can convert to a pointer,
4249 or one that results from arithmetic, even including
4250 a cast to integer type. */
4251 if (! (TREE_CODE (rhs
) == INTEGER_CST
&& integer_zerop (rhs
))
4253 ! (TREE_CODE (rhs
) == NOP_EXPR
4254 && TREE_CODE (TREE_TYPE (rhs
)) == INTEGER_TYPE
4255 && TREE_CODE (TREE_OPERAND (rhs
, 0)) == INTEGER_CST
4256 && integer_zerop (TREE_OPERAND (rhs
, 0))))
4258 warn_for_assignment ("%s makes pointer from integer without a cast",
4259 errtype
, funname
, parmnum
);
4260 return convert (type
, rhs
);
4262 return null_pointer_node
;
4264 else if (codel
== INTEGER_TYPE
&& coder
== POINTER_TYPE
)
4266 warn_for_assignment ("%s makes integer from pointer without a cast",
4267 errtype
, funname
, parmnum
);
4268 return convert (type
, rhs
);
4270 else if (codel
== BOOLEAN_TYPE
&& coder
== POINTER_TYPE
)
4271 return convert (type
, rhs
);
4277 tree selector
= maybe_building_objc_message_expr ();
4279 if (selector
&& parmnum
> 2)
4280 error ("incompatible type for argument %d of `%s'",
4281 parmnum
- 2, IDENTIFIER_POINTER (selector
));
4283 error ("incompatible type for argument %d of `%s'",
4284 parmnum
, IDENTIFIER_POINTER (funname
));
4287 error ("incompatible type for argument %d of indirect function call",
4291 error ("incompatible types in %s", errtype
);
4293 return error_mark_node
;
4296 /* Print a warning using MSGID.
4297 It gets OPNAME as its one parameter.
4298 If OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
4299 FUNCTION and ARGNUM are handled specially if we are building an
4300 Objective-C selector. */
4303 warn_for_assignment (msgid
, opname
, function
, argnum
)
4311 tree selector
= maybe_building_objc_message_expr ();
4314 if (selector
&& argnum
> 2)
4316 function
= selector
;
4321 /* Function name is known; supply it. */
4322 const char *argstring
= _("passing arg %d of `%s'");
4323 new_opname
= (char *) alloca (IDENTIFIER_LENGTH (function
)
4324 + strlen (argstring
) + 1 + 25
4326 sprintf (new_opname
, argstring
, argnum
,
4327 IDENTIFIER_POINTER (function
));
4331 /* Function name unknown (call through ptr); just give arg number.*/
4332 const char *argnofun
= _("passing arg %d of pointer to function");
4333 new_opname
= (char *) alloca (strlen (argnofun
) + 1 + 25 /*%d*/ + 1);
4334 sprintf (new_opname
, argnofun
, argnum
);
4336 opname
= new_opname
;
4338 pedwarn (msgid
, opname
);
4341 /* If VALUE is a compound expr all of whose expressions are constant, then
4342 return its value. Otherwise, return error_mark_node.
4344 This is for handling COMPOUND_EXPRs as initializer elements
4345 which is allowed with a warning when -pedantic is specified. */
4348 valid_compound_expr_initializer (value
, endtype
)
4352 if (TREE_CODE (value
) == COMPOUND_EXPR
)
4354 if (valid_compound_expr_initializer (TREE_OPERAND (value
, 0), endtype
)
4356 return error_mark_node
;
4357 return valid_compound_expr_initializer (TREE_OPERAND (value
, 1),
4360 else if (! TREE_CONSTANT (value
)
4361 && ! initializer_constant_valid_p (value
, endtype
))
4362 return error_mark_node
;
4367 /* Perform appropriate conversions on the initial value of a variable,
4368 store it in the declaration DECL,
4369 and print any error messages that are appropriate.
4370 If the init is invalid, store an ERROR_MARK. */
4373 store_init_value (decl
, init
)
4376 register tree value
, type
;
4378 /* If variable's type was invalidly declared, just ignore it. */
4380 type
= TREE_TYPE (decl
);
4381 if (TREE_CODE (type
) == ERROR_MARK
)
4384 /* Digest the specified initializer into an expression. */
4386 value
= digest_init (type
, init
, TREE_STATIC (decl
),
4387 TREE_STATIC (decl
) || (pedantic
&& !flag_isoc99
));
4389 /* Store the expression if valid; else report error. */
4392 /* Note that this is the only place we can detect the error
4393 in a case such as struct foo bar = (struct foo) { x, y };
4394 where there is one initial value which is a constructor expression. */
4395 if (value
== error_mark_node
)
4397 else if (TREE_STATIC (decl
) && ! TREE_CONSTANT (value
))
4399 error ("initializer for static variable is not constant");
4400 value
= error_mark_node
;
4402 else if (TREE_STATIC (decl
)
4403 && initializer_constant_valid_p (value
, TREE_TYPE (value
)) == 0)
4405 error ("initializer for static variable uses complicated arithmetic");
4406 value
= error_mark_node
;
4410 if (pedantic
&& TREE_CODE (value
) == CONSTRUCTOR
)
4412 if (! TREE_CONSTANT (value
))
4413 pedwarn ("aggregate initializer is not constant");
4414 else if (! TREE_STATIC (value
))
4415 pedwarn ("aggregate initializer uses complicated arithmetic");
4420 if (warn_traditional
&& !in_system_header
4421 && AGGREGATE_TYPE_P (TREE_TYPE (decl
)) && ! TREE_STATIC (decl
))
4422 warning ("traditional C rejects automatic aggregate initialization");
4424 DECL_INITIAL (decl
) = value
;
4426 /* ANSI wants warnings about out-of-range constant initializers. */
4427 STRIP_TYPE_NOPS (value
);
4428 constant_expression_warning (value
);
4431 /* Methods for storing and printing names for error messages. */
4433 /* Implement a spelling stack that allows components of a name to be pushed
4434 and popped. Each element on the stack is this structure. */
4446 #define SPELLING_STRING 1
4447 #define SPELLING_MEMBER 2
4448 #define SPELLING_BOUNDS 3
4450 static struct spelling
*spelling
; /* Next stack element (unused). */
4451 static struct spelling
*spelling_base
; /* Spelling stack base. */
4452 static int spelling_size
; /* Size of the spelling stack. */
4454 /* Macros to save and restore the spelling stack around push_... functions.
4455 Alternative to SAVE_SPELLING_STACK. */
4457 #define SPELLING_DEPTH() (spelling - spelling_base)
4458 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
4460 /* Save and restore the spelling stack around arbitrary C code. */
4462 #define SAVE_SPELLING_DEPTH(code) \
4464 int __depth = SPELLING_DEPTH (); \
4466 RESTORE_SPELLING_DEPTH (__depth); \
4469 /* Push an element on the spelling stack with type KIND and assign VALUE
4472 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4474 int depth = SPELLING_DEPTH (); \
4476 if (depth >= spelling_size) \
4478 spelling_size += 10; \
4479 if (spelling_base == 0) \
4481 = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \
4484 = (struct spelling *) xrealloc (spelling_base, \
4485 spelling_size * sizeof (struct spelling)); \
4486 RESTORE_SPELLING_DEPTH (depth); \
4489 spelling->kind = (KIND); \
4490 spelling->MEMBER = (VALUE); \
4494 /* Push STRING on the stack. Printed literally. */
4497 push_string (string
)
4500 PUSH_SPELLING (SPELLING_STRING
, string
, u
.s
);
4503 /* Push a member name on the stack. Printed as '.' STRING. */
4506 push_member_name (decl
)
4511 = DECL_NAME (decl
) ? IDENTIFIER_POINTER (DECL_NAME (decl
)) : "<anonymous>";
4512 PUSH_SPELLING (SPELLING_MEMBER
, string
, u
.s
);
4515 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4518 push_array_bounds (bounds
)
4521 PUSH_SPELLING (SPELLING_BOUNDS
, bounds
, u
.i
);
4524 /* Compute the maximum size in bytes of the printed spelling. */
4529 register int size
= 0;
4530 register struct spelling
*p
;
4532 for (p
= spelling_base
; p
< spelling
; p
++)
4534 if (p
->kind
== SPELLING_BOUNDS
)
4537 size
+= strlen (p
->u
.s
) + 1;
4543 /* Print the spelling to BUFFER and return it. */
4546 print_spelling (buffer
)
4547 register char *buffer
;
4549 register char *d
= buffer
;
4550 register struct spelling
*p
;
4552 for (p
= spelling_base
; p
< spelling
; p
++)
4553 if (p
->kind
== SPELLING_BOUNDS
)
4555 sprintf (d
, "[%d]", p
->u
.i
);
4560 register const char *s
;
4561 if (p
->kind
== SPELLING_MEMBER
)
4563 for (s
= p
->u
.s
; (*d
= *s
++); d
++)
4570 /* Issue an error message for a bad initializer component.
4571 MSGID identifies the message.
4572 The component name is taken from the spelling stack. */
4580 error ("%s", msgid
);
4581 ofwhat
= print_spelling ((char *) alloca (spelling_length () + 1));
4583 error ("(near initialization for `%s')", ofwhat
);
4586 /* Issue a pedantic warning for a bad initializer component.
4587 MSGID identifies the message.
4588 The component name is taken from the spelling stack. */
4591 pedwarn_init (msgid
)
4596 pedwarn ("%s", msgid
);
4597 ofwhat
= print_spelling ((char *) alloca (spelling_length () + 1));
4599 pedwarn ("(near initialization for `%s')", ofwhat
);
4602 /* Issue a warning for a bad initializer component.
4603 MSGID identifies the message.
4604 The component name is taken from the spelling stack. */
4607 warning_init (msgid
)
4612 warning ("%s", msgid
);
4613 ofwhat
= print_spelling ((char *) alloca (spelling_length () + 1));
4615 warning ("(near initialization for `%s')", ofwhat
);
4618 /* Digest the parser output INIT as an initializer for type TYPE.
4619 Return a C expression of type TYPE to represent the initial value.
4621 The arguments REQUIRE_CONSTANT and CONSTRUCTOR_CONSTANT request errors
4622 if non-constant initializers or elements are seen. CONSTRUCTOR_CONSTANT
4623 applies only to elements of constructors. */
4626 digest_init (type
, init
, require_constant
, constructor_constant
)
4628 int require_constant
, constructor_constant
;
4630 enum tree_code code
= TREE_CODE (type
);
4631 tree inside_init
= init
;
4633 if (type
== error_mark_node
4634 || init
== error_mark_node
4635 || TREE_TYPE (init
) == error_mark_node
)
4636 return error_mark_node
;
4638 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4639 /* Do not use STRIP_NOPS here. We do not want an enumerator
4640 whose value is 0 to count as a null pointer constant. */
4641 if (TREE_CODE (init
) == NON_LVALUE_EXPR
)
4642 inside_init
= TREE_OPERAND (init
, 0);
4644 inside_init
= fold (inside_init
);
4646 /* Initialization of an array of chars from a string constant
4647 optionally enclosed in braces. */
4649 if (code
== ARRAY_TYPE
)
4651 tree typ1
= TYPE_MAIN_VARIANT (TREE_TYPE (type
));
4652 if ((typ1
== char_type_node
4653 || typ1
== signed_char_type_node
4654 || typ1
== unsigned_char_type_node
4655 || typ1
== unsigned_wchar_type_node
4656 || typ1
== signed_wchar_type_node
)
4657 && ((inside_init
&& TREE_CODE (inside_init
) == STRING_CST
)))
4659 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init
)),
4660 TYPE_MAIN_VARIANT (type
)))
4663 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init
)))
4665 && TYPE_PRECISION (typ1
) == TYPE_PRECISION (char_type_node
))
4667 error_init ("char-array initialized from wide string");
4668 return error_mark_node
;
4670 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init
)))
4672 && TYPE_PRECISION (typ1
) != TYPE_PRECISION (char_type_node
))
4674 error_init ("int-array initialized from non-wide string");
4675 return error_mark_node
;
4678 TREE_TYPE (inside_init
) = type
;
4679 if (TYPE_DOMAIN (type
) != 0
4680 && TREE_CODE (TYPE_SIZE (type
)) == INTEGER_CST
4681 /* Subtract 1 (or sizeof (wchar_t))
4682 because it's ok to ignore the terminating null char
4683 that is counted in the length of the constant. */
4684 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type
),
4685 TREE_STRING_LENGTH (inside_init
)
4686 - ((TYPE_PRECISION (typ1
)
4687 != TYPE_PRECISION (char_type_node
))
4688 ? (TYPE_PRECISION (wchar_type_node
)
4691 pedwarn_init ("initializer-string for array of chars is too long");
4697 /* Any type can be initialized
4698 from an expression of the same type, optionally with braces. */
4700 if (inside_init
&& TREE_TYPE (inside_init
) != 0
4701 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init
)),
4702 TYPE_MAIN_VARIANT (type
))
4703 || (code
== ARRAY_TYPE
4704 && comptypes (TREE_TYPE (inside_init
), type
))
4705 || (code
== POINTER_TYPE
4706 && (TREE_CODE (TREE_TYPE (inside_init
)) == ARRAY_TYPE
4707 || TREE_CODE (TREE_TYPE (inside_init
)) == FUNCTION_TYPE
)
4708 && comptypes (TREE_TYPE (TREE_TYPE (inside_init
)),
4709 TREE_TYPE (type
)))))
4711 if (code
== POINTER_TYPE
4712 && (TREE_CODE (TREE_TYPE (inside_init
)) == ARRAY_TYPE
4713 || TREE_CODE (TREE_TYPE (inside_init
)) == FUNCTION_TYPE
))
4714 inside_init
= default_conversion (inside_init
);
4715 else if (code
== ARRAY_TYPE
&& TREE_CODE (inside_init
) != STRING_CST
4716 && TREE_CODE (inside_init
) != CONSTRUCTOR
)
4718 error_init ("array initialized from non-constant array expression");
4719 return error_mark_node
;
4722 if (optimize
&& TREE_CODE (inside_init
) == VAR_DECL
)
4723 inside_init
= decl_constant_value_for_broken_optimization (inside_init
);
4725 /* Compound expressions can only occur here if -pedantic or
4726 -pedantic-errors is specified. In the later case, we always want
4727 an error. In the former case, we simply want a warning. */
4728 if (require_constant
&& pedantic
4729 && TREE_CODE (inside_init
) == COMPOUND_EXPR
)
4732 = valid_compound_expr_initializer (inside_init
,
4733 TREE_TYPE (inside_init
));
4734 if (inside_init
== error_mark_node
)
4735 error_init ("initializer element is not constant");
4737 pedwarn_init ("initializer element is not constant");
4738 if (flag_pedantic_errors
)
4739 inside_init
= error_mark_node
;
4741 else if (require_constant
4742 && (!TREE_CONSTANT (inside_init
)
4743 /* This test catches things like `7 / 0' which
4744 result in an expression for which TREE_CONSTANT
4745 is true, but which is not actually something
4746 that is a legal constant. We really should not
4747 be using this function, because it is a part of
4748 the back-end. Instead, the expression should
4749 already have been turned into ERROR_MARK_NODE. */
4750 || !initializer_constant_valid_p (inside_init
,
4751 TREE_TYPE (inside_init
))))
4753 error_init ("initializer element is not constant");
4754 inside_init
= error_mark_node
;
4760 /* Handle scalar types, including conversions. */
4762 if (code
== INTEGER_TYPE
|| code
== REAL_TYPE
|| code
== POINTER_TYPE
4763 || code
== ENUMERAL_TYPE
|| code
== BOOLEAN_TYPE
|| code
== COMPLEX_TYPE
)
4765 /* Note that convert_for_assignment calls default_conversion
4766 for arrays and functions. We must not call it in the
4767 case where inside_init is a null pointer constant. */
4769 = convert_for_assignment (type
, init
, _("initialization"),
4770 NULL_TREE
, NULL_TREE
, 0);
4772 if (require_constant
&& ! TREE_CONSTANT (inside_init
))
4774 error_init ("initializer element is not constant");
4775 inside_init
= error_mark_node
;
4777 else if (require_constant
4778 && initializer_constant_valid_p (inside_init
, TREE_TYPE (inside_init
)) == 0)
4780 error_init ("initializer element is not computable at load time");
4781 inside_init
= error_mark_node
;
4787 /* Come here only for records and arrays. */
4789 if (COMPLETE_TYPE_P (type
) && TREE_CODE (TYPE_SIZE (type
)) != INTEGER_CST
)
4791 error_init ("variable-sized object may not be initialized");
4792 return error_mark_node
;
4795 /* Traditionally, you can write struct foo x = 0;
4796 and it initializes the first element of x to 0. */
4797 if (flag_traditional
)
4799 tree top
= 0, prev
= 0, otype
= type
;
4800 while (TREE_CODE (type
) == RECORD_TYPE
4801 || TREE_CODE (type
) == ARRAY_TYPE
4802 || TREE_CODE (type
) == QUAL_UNION_TYPE
4803 || TREE_CODE (type
) == UNION_TYPE
)
4805 tree temp
= build (CONSTRUCTOR
, type
, NULL_TREE
, NULL_TREE
);
4809 TREE_OPERAND (prev
, 1) = build_tree_list (NULL_TREE
, temp
);
4811 if (TREE_CODE (type
) == ARRAY_TYPE
)
4812 type
= TREE_TYPE (type
);
4813 else if (TYPE_FIELDS (type
))
4814 type
= TREE_TYPE (TYPE_FIELDS (type
));
4817 error_init ("invalid initializer");
4818 return error_mark_node
;
4824 TREE_OPERAND (prev
, 1)
4825 = build_tree_list (NULL_TREE
,
4826 digest_init (type
, init
, require_constant
,
4827 constructor_constant
));
4831 return error_mark_node
;
4833 error_init ("invalid initializer");
4834 return error_mark_node
;
4837 /* Handle initializers that use braces. */
4839 /* Type of object we are accumulating a constructor for.
4840 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4841 static tree constructor_type
;
4843 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4845 static tree constructor_fields
;
4847 /* For an ARRAY_TYPE, this is the specified index
4848 at which to store the next element we get. */
4849 static tree constructor_index
;
4851 /* For an ARRAY_TYPE, this is the maximum index. */
4852 static tree constructor_max_index
;
4854 /* For a RECORD_TYPE, this is the first field not yet written out. */
4855 static tree constructor_unfilled_fields
;
4857 /* For an ARRAY_TYPE, this is the index of the first element
4858 not yet written out. */
4859 static tree constructor_unfilled_index
;
4861 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4862 This is so we can generate gaps between fields, when appropriate. */
4863 static tree constructor_bit_index
;
4865 /* If we are saving up the elements rather than allocating them,
4866 this is the list of elements so far (in reverse order,
4867 most recent first). */
4868 static tree constructor_elements
;
4870 /* 1 if constructor should be incrementally stored into a constructor chain,
4871 0 if all the elements should be kept in AVL tree. */
4872 static int constructor_incremental
;
4874 /* 1 if so far this constructor's elements are all compile-time constants. */
4875 static int constructor_constant
;
4877 /* 1 if so far this constructor's elements are all valid address constants. */
4878 static int constructor_simple
;
4880 /* 1 if this constructor is erroneous so far. */
4881 static int constructor_erroneous
;
4883 /* 1 if have called defer_addressed_constants. */
4884 static int constructor_subconstants_deferred
;
4886 /* Structure for managing pending initializer elements, organized as an
4891 struct init_node
*left
, *right
;
4892 struct init_node
*parent
;
4898 /* Tree of pending elements at this constructor level.
4899 These are elements encountered out of order
4900 which belong at places we haven't reached yet in actually
4902 Will never hold tree nodes across GC runs. */
4903 static struct init_node
*constructor_pending_elts
;
4905 /* The SPELLING_DEPTH of this constructor. */
4906 static int constructor_depth
;
4908 /* 0 if implicitly pushing constructor levels is allowed. */
4909 int constructor_no_implicit
= 0; /* 0 for C; 1 for some other languages. */
4911 static int require_constant_value
;
4912 static int require_constant_elements
;
4914 /* DECL node for which an initializer is being read.
4915 0 means we are reading a constructor expression
4916 such as (struct foo) {...}. */
4917 static tree constructor_decl
;
4919 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4920 static const char *constructor_asmspec
;
4922 /* Nonzero if this is an initializer for a top-level decl. */
4923 static int constructor_top_level
;
4925 /* Nesting depth of designator list. */
4926 static int designator_depth
;
4928 /* Nonzero if there were diagnosed errors in this designator list. */
4929 static int designator_errorneous
;
4932 /* This stack has a level for each implicit or explicit level of
4933 structuring in the initializer, including the outermost one. It
4934 saves the values of most of the variables above. */
4936 struct constructor_range_stack
;
4938 struct constructor_stack
4940 struct constructor_stack
*next
;
4945 tree unfilled_index
;
4946 tree unfilled_fields
;
4949 struct init_node
*pending_elts
;
4952 /* If nonzero, this value should replace the entire
4953 constructor at this level. */
4954 tree replacement_value
;
4955 struct constructor_range_stack
*range_stack
;
4964 struct constructor_stack
*constructor_stack
;
4966 /* This stack represents designators from some range designator up to
4967 the last designator in the list. */
4969 struct constructor_range_stack
4971 struct constructor_range_stack
*next
, *prev
;
4972 struct constructor_stack
*stack
;
4979 struct constructor_range_stack
*constructor_range_stack
;
4981 /* This stack records separate initializers that are nested.
4982 Nested initializers can't happen in ANSI C, but GNU C allows them
4983 in cases like { ... (struct foo) { ... } ... }. */
4985 struct initializer_stack
4987 struct initializer_stack
*next
;
4989 const char *asmspec
;
4990 struct constructor_stack
*constructor_stack
;
4991 struct constructor_range_stack
*constructor_range_stack
;
4993 struct spelling
*spelling
;
4994 struct spelling
*spelling_base
;
4997 char require_constant_value
;
4998 char require_constant_elements
;
5002 struct initializer_stack
*initializer_stack
;
5004 /* Prepare to parse and output the initializer for variable DECL. */
5007 start_init (decl
, asmspec_tree
, top_level
)
5013 struct initializer_stack
*p
5014 = (struct initializer_stack
*) xmalloc (sizeof (struct initializer_stack
));
5015 const char *asmspec
= 0;
5018 asmspec
= TREE_STRING_POINTER (asmspec_tree
);
5020 p
->decl
= constructor_decl
;
5021 p
->asmspec
= constructor_asmspec
;
5022 p
->require_constant_value
= require_constant_value
;
5023 p
->require_constant_elements
= require_constant_elements
;
5024 p
->constructor_stack
= constructor_stack
;
5025 p
->constructor_range_stack
= constructor_range_stack
;
5026 p
->elements
= constructor_elements
;
5027 p
->spelling
= spelling
;
5028 p
->spelling_base
= spelling_base
;
5029 p
->spelling_size
= spelling_size
;
5030 p
->deferred
= constructor_subconstants_deferred
;
5031 p
->top_level
= constructor_top_level
;
5032 p
->next
= initializer_stack
;
5033 initializer_stack
= p
;
5035 constructor_decl
= decl
;
5036 constructor_asmspec
= asmspec
;
5037 constructor_subconstants_deferred
= 0;
5038 constructor_top_level
= top_level
;
5042 require_constant_value
= TREE_STATIC (decl
);
5043 require_constant_elements
5044 = ((TREE_STATIC (decl
) || (pedantic
&& !flag_isoc99
))
5045 /* For a scalar, you can always use any value to initialize,
5046 even within braces. */
5047 && (TREE_CODE (TREE_TYPE (decl
)) == ARRAY_TYPE
5048 || TREE_CODE (TREE_TYPE (decl
)) == RECORD_TYPE
5049 || TREE_CODE (TREE_TYPE (decl
)) == UNION_TYPE
5050 || TREE_CODE (TREE_TYPE (decl
)) == QUAL_UNION_TYPE
));
5051 locus
= IDENTIFIER_POINTER (DECL_NAME (decl
));
5055 require_constant_value
= 0;
5056 require_constant_elements
= 0;
5057 locus
= "(anonymous)";
5060 constructor_stack
= 0;
5061 constructor_range_stack
= 0;
5063 missing_braces_mentioned
= 0;
5067 RESTORE_SPELLING_DEPTH (0);
5070 push_string (locus
);
5076 struct initializer_stack
*p
= initializer_stack
;
5078 /* Output subconstants (string constants, usually)
5079 that were referenced within this initializer and saved up.
5080 Must do this if and only if we called defer_addressed_constants. */
5081 if (constructor_subconstants_deferred
)
5082 output_deferred_addressed_constants ();
5084 /* Free the whole constructor stack of this initializer. */
5085 while (constructor_stack
)
5087 struct constructor_stack
*q
= constructor_stack
;
5088 constructor_stack
= q
->next
;
5092 if (constructor_range_stack
)
5095 /* Pop back to the data of the outer initializer (if any). */
5096 constructor_decl
= p
->decl
;
5097 constructor_asmspec
= p
->asmspec
;
5098 require_constant_value
= p
->require_constant_value
;
5099 require_constant_elements
= p
->require_constant_elements
;
5100 constructor_stack
= p
->constructor_stack
;
5101 constructor_range_stack
= p
->constructor_range_stack
;
5102 constructor_elements
= p
->elements
;
5103 spelling
= p
->spelling
;
5104 spelling_base
= p
->spelling_base
;
5105 spelling_size
= p
->spelling_size
;
5106 constructor_subconstants_deferred
= p
->deferred
;
5107 constructor_top_level
= p
->top_level
;
5108 initializer_stack
= p
->next
;
5112 /* Call here when we see the initializer is surrounded by braces.
5113 This is instead of a call to push_init_level;
5114 it is matched by a call to pop_init_level.
5116 TYPE is the type to initialize, for a constructor expression.
5117 For an initializer for a decl, TYPE is zero. */
5120 really_start_incremental_init (type
)
5123 struct constructor_stack
*p
5124 = (struct constructor_stack
*) xmalloc (sizeof (struct constructor_stack
));
5127 type
= TREE_TYPE (constructor_decl
);
5129 p
->type
= constructor_type
;
5130 p
->fields
= constructor_fields
;
5131 p
->index
= constructor_index
;
5132 p
->max_index
= constructor_max_index
;
5133 p
->unfilled_index
= constructor_unfilled_index
;
5134 p
->unfilled_fields
= constructor_unfilled_fields
;
5135 p
->bit_index
= constructor_bit_index
;
5136 p
->elements
= constructor_elements
;
5137 p
->constant
= constructor_constant
;
5138 p
->simple
= constructor_simple
;
5139 p
->erroneous
= constructor_erroneous
;
5140 p
->pending_elts
= constructor_pending_elts
;
5141 p
->depth
= constructor_depth
;
5142 p
->replacement_value
= 0;
5146 p
->incremental
= constructor_incremental
;
5148 constructor_stack
= p
;
5150 constructor_constant
= 1;
5151 constructor_simple
= 1;
5152 constructor_depth
= SPELLING_DEPTH ();
5153 constructor_elements
= 0;
5154 constructor_pending_elts
= 0;
5155 constructor_type
= type
;
5156 constructor_incremental
= 1;
5157 designator_depth
= 0;
5158 designator_errorneous
= 0;
5160 if (TREE_CODE (constructor_type
) == RECORD_TYPE
5161 || TREE_CODE (constructor_type
) == UNION_TYPE
)
5163 constructor_fields
= TYPE_FIELDS (constructor_type
);
5164 /* Skip any nameless bit fields at the beginning. */
5165 while (constructor_fields
!= 0 && DECL_C_BIT_FIELD (constructor_fields
)
5166 && DECL_NAME (constructor_fields
) == 0)
5167 constructor_fields
= TREE_CHAIN (constructor_fields
);
5169 constructor_unfilled_fields
= constructor_fields
;
5170 constructor_bit_index
= bitsize_zero_node
;
5172 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
5174 if (TYPE_DOMAIN (constructor_type
))
5176 constructor_max_index
5177 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type
));
5179 /* Detect non-empty initializations of zero-length arrays. */
5180 if (constructor_max_index
== NULL_TREE
)
5181 constructor_max_index
= build_int_2 (-1, -1);
5184 = convert (bitsizetype
,
5185 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type
)));
5188 constructor_index
= bitsize_zero_node
;
5190 constructor_unfilled_index
= constructor_index
;
5194 /* Handle the case of int x = {5}; */
5195 constructor_fields
= constructor_type
;
5196 constructor_unfilled_fields
= constructor_type
;
5200 /* Push down into a subobject, for initialization.
5201 If this is for an explicit set of braces, IMPLICIT is 0.
5202 If it is because the next element belongs at a lower level,
5203 IMPLICIT is 1 (or 2 if the push is because of designator list). */
5206 push_init_level (implicit
)
5209 struct constructor_stack
*p
;
5210 tree value
= NULL_TREE
;
5212 /* If we've exhausted any levels that didn't have braces,
5214 while (constructor_stack
->implicit
)
5216 if ((TREE_CODE (constructor_type
) == RECORD_TYPE
5217 || TREE_CODE (constructor_type
) == UNION_TYPE
)
5218 && constructor_fields
== 0)
5219 process_init_element (pop_init_level (1));
5220 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
5221 && tree_int_cst_lt (constructor_max_index
, constructor_index
))
5222 process_init_element (pop_init_level (1));
5227 /* Unless this is an explicit brace, we need to preserve previous
5231 if ((TREE_CODE (constructor_type
) == RECORD_TYPE
5232 || TREE_CODE (constructor_type
) == UNION_TYPE
)
5233 && constructor_fields
)
5234 value
= find_init_member (constructor_fields
);
5235 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
5236 value
= find_init_member (constructor_index
);
5239 p
= (struct constructor_stack
*) xmalloc (sizeof (struct constructor_stack
));
5240 p
->type
= constructor_type
;
5241 p
->fields
= constructor_fields
;
5242 p
->index
= constructor_index
;
5243 p
->max_index
= constructor_max_index
;
5244 p
->unfilled_index
= constructor_unfilled_index
;
5245 p
->unfilled_fields
= constructor_unfilled_fields
;
5246 p
->bit_index
= constructor_bit_index
;
5247 p
->elements
= constructor_elements
;
5248 p
->constant
= constructor_constant
;
5249 p
->simple
= constructor_simple
;
5250 p
->erroneous
= constructor_erroneous
;
5251 p
->pending_elts
= constructor_pending_elts
;
5252 p
->depth
= constructor_depth
;
5253 p
->replacement_value
= 0;
5254 p
->implicit
= implicit
;
5256 p
->incremental
= constructor_incremental
;
5257 p
->next
= constructor_stack
;
5259 constructor_stack
= p
;
5261 constructor_constant
= 1;
5262 constructor_simple
= 1;
5263 constructor_depth
= SPELLING_DEPTH ();
5264 constructor_elements
= 0;
5265 constructor_incremental
= 1;
5266 constructor_pending_elts
= 0;
5269 p
->range_stack
= constructor_range_stack
;
5270 constructor_range_stack
= 0;
5271 designator_depth
= 0;
5272 designator_errorneous
= 0;
5275 /* Don't die if an entire brace-pair level is superfluous
5276 in the containing level. */
5277 if (constructor_type
== 0)
5279 else if (TREE_CODE (constructor_type
) == RECORD_TYPE
5280 || TREE_CODE (constructor_type
) == UNION_TYPE
)
5282 /* Don't die if there are extra init elts at the end. */
5283 if (constructor_fields
== 0)
5284 constructor_type
= 0;
5287 constructor_type
= TREE_TYPE (constructor_fields
);
5288 push_member_name (constructor_fields
);
5289 constructor_depth
++;
5292 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
5294 constructor_type
= TREE_TYPE (constructor_type
);
5295 push_array_bounds (tree_low_cst (constructor_index
, 0));
5296 constructor_depth
++;
5299 if (constructor_type
== 0)
5301 error_init ("extra brace group at end of initializer");
5302 constructor_fields
= 0;
5303 constructor_unfilled_fields
= 0;
5307 if (value
&& TREE_CODE (value
) == CONSTRUCTOR
)
5309 constructor_constant
= TREE_CONSTANT (value
);
5310 constructor_simple
= TREE_STATIC (value
);
5311 constructor_elements
= TREE_OPERAND (value
, 1);
5312 if (constructor_elements
5313 && (TREE_CODE (constructor_type
) == RECORD_TYPE
5314 || TREE_CODE (constructor_type
) == ARRAY_TYPE
))
5315 set_nonincremental_init ();
5318 if (implicit
== 1 && warn_missing_braces
&& !missing_braces_mentioned
)
5320 missing_braces_mentioned
= 1;
5321 warning_init ("missing braces around initializer");
5324 if (TREE_CODE (constructor_type
) == RECORD_TYPE
5325 || TREE_CODE (constructor_type
) == UNION_TYPE
)
5327 constructor_fields
= TYPE_FIELDS (constructor_type
);
5328 /* Skip any nameless bit fields at the beginning. */
5329 while (constructor_fields
!= 0 && DECL_C_BIT_FIELD (constructor_fields
)
5330 && DECL_NAME (constructor_fields
) == 0)
5331 constructor_fields
= TREE_CHAIN (constructor_fields
);
5333 constructor_unfilled_fields
= constructor_fields
;
5334 constructor_bit_index
= bitsize_zero_node
;
5336 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
5338 if (TYPE_DOMAIN (constructor_type
))
5340 constructor_max_index
5341 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type
));
5343 = convert (bitsizetype
,
5344 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type
)));
5346 /* ??? For GCC 3.1, remove special case initialization of
5347 zero-length array members from pop_init_level and set
5348 constructor_max_index such that we get the normal
5349 "excess elements" warning. */
5352 constructor_index
= bitsize_zero_node
;
5354 constructor_unfilled_index
= constructor_index
;
5355 if (value
&& TREE_CODE (value
) == STRING_CST
)
5357 /* We need to split the char/wchar array into individual
5358 characters, so that we don't have to special case it
5360 set_nonincremental_init_from_string (value
);
5365 warning_init ("braces around scalar initializer");
5366 constructor_fields
= constructor_type
;
5367 constructor_unfilled_fields
= constructor_type
;
5371 /* At the end of an implicit or explicit brace level,
5372 finish up that level of constructor.
5373 If we were outputting the elements as they are read, return 0
5374 from inner levels (process_init_element ignores that),
5375 but return error_mark_node from the outermost level
5376 (that's what we want to put in DECL_INITIAL).
5377 Otherwise, return a CONSTRUCTOR expression. */
5380 pop_init_level (implicit
)
5383 struct constructor_stack
*p
;
5384 HOST_WIDE_INT size
= 0;
5385 tree constructor
= 0;
5389 /* When we come to an explicit close brace,
5390 pop any inner levels that didn't have explicit braces. */
5391 while (constructor_stack
->implicit
)
5392 process_init_element (pop_init_level (1));
5394 if (constructor_range_stack
)
5398 p
= constructor_stack
;
5400 if (constructor_type
!= 0)
5401 size
= int_size_in_bytes (constructor_type
);
5403 /* Error for initializing a flexible array member, or a zero-length
5404 array member in an inappropriate context. */
5405 if (constructor_type
&& constructor_fields
5406 && TREE_CODE (constructor_type
) == ARRAY_TYPE
5407 && TYPE_DOMAIN (constructor_type
)
5408 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type
)))
5410 /* Silently discard empty initializations. The parser will
5411 already have pedwarned for empty brackets. */
5412 if (integer_zerop (constructor_unfilled_index
))
5413 constructor_type
= NULL_TREE
;
5414 else if (! TYPE_SIZE (constructor_type
))
5416 if (constructor_depth
> 2)
5417 error_init ("initialization of flexible array member in a nested context");
5419 pedwarn_init ("initialization of a flexible array member");
5421 /* We have already issued an error message for the existance
5422 of a flexible array member not at the end of the structure.
5423 Discard the initializer so that we do not abort later. */
5424 if (TREE_CHAIN (constructor_fields
) != NULL_TREE
)
5425 constructor_type
= NULL_TREE
;
5429 warning_init ("deprecated initialization of zero-length array");
5431 /* We must be initializing the last member of a top-level struct. */
5432 if (TREE_CHAIN (constructor_fields
) != NULL_TREE
)
5434 error_init ("initialization of zero-length array before end of structure");
5435 /* Discard the initializer so that we do not abort later. */
5436 constructor_type
= NULL_TREE
;
5438 else if (constructor_depth
> 2)
5439 error_init ("initialization of zero-length array inside a nested context");
5443 /* Warn when some struct elements are implicitly initialized to zero. */
5446 && TREE_CODE (constructor_type
) == RECORD_TYPE
5447 && constructor_unfilled_fields
)
5449 /* Do not warn for flexible array members or zero-length arrays. */
5450 while (constructor_unfilled_fields
5451 && (! DECL_SIZE (constructor_unfilled_fields
)
5452 || integer_zerop (DECL_SIZE (constructor_unfilled_fields
))))
5453 constructor_unfilled_fields
= TREE_CHAIN (constructor_unfilled_fields
);
5455 if (constructor_unfilled_fields
)
5457 push_member_name (constructor_unfilled_fields
);
5458 warning_init ("missing initializer");
5459 RESTORE_SPELLING_DEPTH (constructor_depth
);
5463 /* Now output all pending elements. */
5464 constructor_incremental
= 1;
5465 output_pending_init_elements (1);
5467 /* Pad out the end of the structure. */
5468 if (p
->replacement_value
)
5469 /* If this closes a superfluous brace pair,
5470 just pass out the element between them. */
5471 constructor
= p
->replacement_value
;
5472 else if (constructor_type
== 0)
5474 else if (TREE_CODE (constructor_type
) != RECORD_TYPE
5475 && TREE_CODE (constructor_type
) != UNION_TYPE
5476 && TREE_CODE (constructor_type
) != ARRAY_TYPE
)
5478 /* A nonincremental scalar initializer--just return
5479 the element, after verifying there is just one. */
5480 if (constructor_elements
== 0)
5482 if (!constructor_erroneous
)
5483 error_init ("empty scalar initializer");
5484 constructor
= error_mark_node
;
5486 else if (TREE_CHAIN (constructor_elements
) != 0)
5488 error_init ("extra elements in scalar initializer");
5489 constructor
= TREE_VALUE (constructor_elements
);
5492 constructor
= TREE_VALUE (constructor_elements
);
5496 if (constructor_erroneous
)
5497 constructor
= error_mark_node
;
5500 constructor
= build (CONSTRUCTOR
, constructor_type
, NULL_TREE
,
5501 nreverse (constructor_elements
));
5502 if (constructor_constant
)
5503 TREE_CONSTANT (constructor
) = 1;
5504 if (constructor_constant
&& constructor_simple
)
5505 TREE_STATIC (constructor
) = 1;
5509 constructor_type
= p
->type
;
5510 constructor_fields
= p
->fields
;
5511 constructor_index
= p
->index
;
5512 constructor_max_index
= p
->max_index
;
5513 constructor_unfilled_index
= p
->unfilled_index
;
5514 constructor_unfilled_fields
= p
->unfilled_fields
;
5515 constructor_bit_index
= p
->bit_index
;
5516 constructor_elements
= p
->elements
;
5517 constructor_constant
= p
->constant
;
5518 constructor_simple
= p
->simple
;
5519 constructor_erroneous
= p
->erroneous
;
5520 constructor_incremental
= p
->incremental
;
5521 constructor_pending_elts
= p
->pending_elts
;
5522 constructor_depth
= p
->depth
;
5524 constructor_range_stack
= p
->range_stack
;
5525 RESTORE_SPELLING_DEPTH (constructor_depth
);
5527 constructor_stack
= p
->next
;
5530 if (constructor
== 0)
5532 if (constructor_stack
== 0)
5533 return error_mark_node
;
5539 /* Common handling for both array range and field name designators.
5540 ARRAY argument is non-zero for array ranges. Returns zero for success. */
5543 set_designator (array
)
5547 enum tree_code subcode
;
5549 /* Don't die if an entire brace-pair level is superfluous
5550 in the containing level. */
5551 if (constructor_type
== 0)
5554 /* If there were errors in this designator list already, bail out silently. */
5555 if (designator_errorneous
)
5558 if (!designator_depth
)
5560 if (constructor_range_stack
)
5563 /* Designator list starts at the level of closest explicit
5565 while (constructor_stack
->implicit
)
5566 process_init_element (pop_init_level (1));
5570 if (constructor_no_implicit
)
5572 error_init ("initialization designators may not nest");
5576 if (TREE_CODE (constructor_type
) == RECORD_TYPE
5577 || TREE_CODE (constructor_type
) == UNION_TYPE
)
5579 subtype
= TREE_TYPE (constructor_fields
);
5580 if (subtype
!= error_mark_node
)
5581 subtype
= TYPE_MAIN_VARIANT (subtype
);
5583 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
5585 subtype
= TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type
));
5590 subcode
= TREE_CODE (subtype
);
5591 if (array
&& subcode
!= ARRAY_TYPE
)
5593 error_init ("array index in non-array initializer");
5596 else if (!array
&& subcode
!= RECORD_TYPE
&& subcode
!= UNION_TYPE
)
5598 error_init ("field name not in record or union initializer");
5602 push_init_level (2);
5606 /* If there are range designators in designator list, push a new designator
5607 to constructor_range_stack. RANGE_END is end of such stack range or
5608 NULL_TREE if there is no range designator at this level. */
5611 push_range_stack (range_end
)
5614 struct constructor_range_stack
*p
;
5616 p
= (struct constructor_range_stack
*)
5617 ggc_alloc (sizeof (struct constructor_range_stack
));
5618 p
->prev
= constructor_range_stack
;
5620 p
->fields
= constructor_fields
;
5621 p
->range_start
= constructor_index
;
5622 p
->index
= constructor_index
;
5623 p
->stack
= constructor_stack
;
5624 p
->range_end
= range_end
;
5625 if (constructor_range_stack
)
5626 constructor_range_stack
->next
= p
;
5627 constructor_range_stack
= p
;
5630 /* Within an array initializer, specify the next index to be initialized.
5631 FIRST is that index. If LAST is nonzero, then initialize a range
5632 of indices, running from FIRST through LAST. */
5635 set_init_index (first
, last
)
5638 if (set_designator (1))
5641 designator_errorneous
= 1;
5643 while ((TREE_CODE (first
) == NOP_EXPR
5644 || TREE_CODE (first
) == CONVERT_EXPR
5645 || TREE_CODE (first
) == NON_LVALUE_EXPR
)
5646 && (TYPE_MODE (TREE_TYPE (first
))
5647 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first
, 0)))))
5648 first
= TREE_OPERAND (first
, 0);
5651 while ((TREE_CODE (last
) == NOP_EXPR
5652 || TREE_CODE (last
) == CONVERT_EXPR
5653 || TREE_CODE (last
) == NON_LVALUE_EXPR
)
5654 && (TYPE_MODE (TREE_TYPE (last
))
5655 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last
, 0)))))
5656 last
= TREE_OPERAND (last
, 0);
5658 if (TREE_CODE (first
) != INTEGER_CST
)
5659 error_init ("nonconstant array index in initializer");
5660 else if (last
!= 0 && TREE_CODE (last
) != INTEGER_CST
)
5661 error_init ("nonconstant array index in initializer");
5662 else if (TREE_CODE (constructor_type
) != ARRAY_TYPE
)
5663 error_init ("array index in non-array initializer");
5664 else if (constructor_max_index
5665 && tree_int_cst_lt (constructor_max_index
, first
))
5666 error_init ("array index in initializer exceeds array bounds");
5669 constructor_index
= convert (bitsizetype
, first
);
5673 if (tree_int_cst_equal (first
, last
))
5675 else if (tree_int_cst_lt (last
, first
))
5677 error_init ("empty index range in initializer");
5682 last
= convert (bitsizetype
, last
);
5683 if (constructor_max_index
!= 0
5684 && tree_int_cst_lt (constructor_max_index
, last
))
5686 error_init ("array index range in initializer exceeds array bounds");
5693 designator_errorneous
= 0;
5694 if (constructor_range_stack
|| last
)
5695 push_range_stack (last
);
5699 /* Within a struct initializer, specify the next field to be initialized. */
5702 set_init_label (fieldname
)
5707 if (set_designator (0))
5710 designator_errorneous
= 1;
5712 if (TREE_CODE (constructor_type
) != RECORD_TYPE
5713 && TREE_CODE (constructor_type
) != UNION_TYPE
)
5715 error_init ("field name not in record or union initializer");
5719 for (tail
= TYPE_FIELDS (constructor_type
); tail
;
5720 tail
= TREE_CHAIN (tail
))
5722 if (DECL_NAME (tail
) == fieldname
)
5727 error ("unknown field `%s' specified in initializer",
5728 IDENTIFIER_POINTER (fieldname
));
5731 constructor_fields
= tail
;
5733 designator_errorneous
= 0;
5734 if (constructor_range_stack
)
5735 push_range_stack (NULL_TREE
);
5739 /* Add a new initializer to the tree of pending initializers. PURPOSE
5740 indentifies the initializer, either array index or field in a structure.
5741 VALUE is the value of that index or field. */
5744 add_pending_init (purpose
, value
)
5745 tree purpose
, value
;
5747 struct init_node
*p
, **q
, *r
;
5749 q
= &constructor_pending_elts
;
5752 if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
5757 if (tree_int_cst_lt (purpose
, p
->purpose
))
5759 else if (tree_int_cst_lt (p
->purpose
, purpose
))
5763 if (TREE_SIDE_EFFECTS (p
->value
))
5764 warning_init ("initialized field with side-effects overwritten");
5774 bitpos
= bit_position (purpose
);
5778 if (tree_int_cst_lt (bitpos
, bit_position (p
->purpose
)))
5780 else if (p
->purpose
!= purpose
)
5784 if (TREE_SIDE_EFFECTS (p
->value
))
5785 warning_init ("initialized field with side-effects overwritten");
5792 r
= (struct init_node
*) ggc_alloc (sizeof (struct init_node
));
5793 r
->purpose
= purpose
;
5804 struct init_node
*s
;
5808 if (p
->balance
== 0)
5810 else if (p
->balance
< 0)
5817 p
->left
->parent
= p
;
5834 constructor_pending_elts
= r
;
5839 struct init_node
*t
= r
->right
;
5843 r
->right
->parent
= r
;
5848 p
->left
->parent
= p
;
5851 p
->balance
= t
->balance
< 0;
5852 r
->balance
= -(t
->balance
> 0);
5867 constructor_pending_elts
= t
;
5873 /* p->balance == +1; growth of left side balances the node. */
5878 else /* r == p->right */
5880 if (p
->balance
== 0)
5881 /* Growth propagation from right side. */
5883 else if (p
->balance
> 0)
5890 p
->right
->parent
= p
;
5907 constructor_pending_elts
= r
;
5909 else /* r->balance == -1 */
5912 struct init_node
*t
= r
->left
;
5916 r
->left
->parent
= r
;
5921 p
->right
->parent
= p
;
5924 r
->balance
= (t
->balance
< 0);
5925 p
->balance
= -(t
->balance
> 0);
5940 constructor_pending_elts
= t
;
5946 /* p->balance == -1; growth of right side balances the node. */
5957 /* Build AVL tree from a sorted chain. */
5960 set_nonincremental_init ()
5964 if (TREE_CODE (constructor_type
) != RECORD_TYPE
5965 && TREE_CODE (constructor_type
) != ARRAY_TYPE
)
5968 for (chain
= constructor_elements
; chain
; chain
= TREE_CHAIN (chain
))
5969 add_pending_init (TREE_PURPOSE (chain
), TREE_VALUE (chain
));
5970 constructor_elements
= 0;
5971 if (TREE_CODE (constructor_type
) == RECORD_TYPE
)
5973 constructor_unfilled_fields
= TYPE_FIELDS (constructor_type
);
5974 /* Skip any nameless bit fields at the beginning. */
5975 while (constructor_unfilled_fields
!= 0
5976 && DECL_C_BIT_FIELD (constructor_unfilled_fields
)
5977 && DECL_NAME (constructor_unfilled_fields
) == 0)
5978 constructor_unfilled_fields
= TREE_CHAIN (constructor_unfilled_fields
);
5981 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
5983 if (TYPE_DOMAIN (constructor_type
))
5984 constructor_unfilled_index
5985 = convert (bitsizetype
,
5986 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type
)));
5988 constructor_unfilled_index
= bitsize_zero_node
;
5990 constructor_incremental
= 0;
5993 /* Build AVL tree from a string constant. */
5996 set_nonincremental_init_from_string (str
)
5999 tree value
, purpose
, type
;
6000 HOST_WIDE_INT val
[2];
6001 const char *p
, *end
;
6002 int byte
, wchar_bytes
, charwidth
, bitpos
;
6004 if (TREE_CODE (constructor_type
) != ARRAY_TYPE
)
6007 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str
)))
6008 == TYPE_PRECISION (char_type_node
))
6010 else if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str
)))
6011 == TYPE_PRECISION (wchar_type_node
))
6012 wchar_bytes
= TYPE_PRECISION (wchar_type_node
) / BITS_PER_UNIT
;
6016 charwidth
= TYPE_PRECISION (char_type_node
);
6017 type
= TREE_TYPE (constructor_type
);
6018 p
= TREE_STRING_POINTER (str
);
6019 end
= p
+ TREE_STRING_LENGTH (str
);
6021 for (purpose
= bitsize_zero_node
;
6022 p
< end
&& !tree_int_cst_lt (constructor_max_index
, purpose
);
6023 purpose
= size_binop (PLUS_EXPR
, purpose
, bitsize_one_node
))
6025 if (wchar_bytes
== 1)
6027 val
[1] = (unsigned char) *p
++;
6034 for (byte
= 0; byte
< wchar_bytes
; byte
++)
6036 if (BYTES_BIG_ENDIAN
)
6037 bitpos
= (wchar_bytes
- byte
- 1) * charwidth
;
6039 bitpos
= byte
* charwidth
;
6040 val
[bitpos
< HOST_BITS_PER_WIDE_INT
]
6041 |= ((unsigned HOST_WIDE_INT
) ((unsigned char) *p
++))
6042 << (bitpos
% HOST_BITS_PER_WIDE_INT
);
6046 if (!TREE_UNSIGNED (type
))
6048 bitpos
= ((wchar_bytes
- 1) * charwidth
) + HOST_BITS_PER_CHAR
;
6049 if (bitpos
< HOST_BITS_PER_WIDE_INT
)
6051 if (val
[1] & (((HOST_WIDE_INT
) 1) << (bitpos
- 1)))
6053 val
[1] |= ((HOST_WIDE_INT
) -1) << bitpos
;
6057 else if (bitpos
== HOST_BITS_PER_WIDE_INT
)
6062 else if (val
[0] & (((HOST_WIDE_INT
) 1)
6063 << (bitpos
- 1 - HOST_BITS_PER_WIDE_INT
)))
6064 val
[0] |= ((HOST_WIDE_INT
) -1)
6065 << (bitpos
- HOST_BITS_PER_WIDE_INT
);
6068 value
= build_int_2 (val
[1], val
[0]);
6069 TREE_TYPE (value
) = type
;
6070 add_pending_init (purpose
, value
);
6073 constructor_incremental
= 0;
6076 /* Return value of FIELD in pending initializer or zero if the field was
6077 not initialized yet. */
6080 find_init_member (field
)
6083 struct init_node
*p
;
6085 if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
6087 if (constructor_incremental
6088 && tree_int_cst_lt (field
, constructor_unfilled_index
))
6089 set_nonincremental_init ();
6091 p
= constructor_pending_elts
;
6094 if (tree_int_cst_lt (field
, p
->purpose
))
6096 else if (tree_int_cst_lt (p
->purpose
, field
))
6102 else if (TREE_CODE (constructor_type
) == RECORD_TYPE
)
6104 tree bitpos
= bit_position (field
);
6106 if (constructor_incremental
6107 && (!constructor_unfilled_fields
6108 || tree_int_cst_lt (bitpos
,
6109 bit_position (constructor_unfilled_fields
))))
6110 set_nonincremental_init ();
6112 p
= constructor_pending_elts
;
6115 if (field
== p
->purpose
)
6117 else if (tree_int_cst_lt (bitpos
, bit_position (p
->purpose
)))
6123 else if (TREE_CODE (constructor_type
) == UNION_TYPE
)
6125 if (constructor_elements
6126 && TREE_PURPOSE (constructor_elements
) == field
)
6127 return TREE_VALUE (constructor_elements
);
6132 /* "Output" the next constructor element.
6133 At top level, really output it to assembler code now.
6134 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
6135 TYPE is the data type that the containing data type wants here.
6136 FIELD is the field (a FIELD_DECL) or the index that this element fills.
6138 PENDING if non-nil means output pending elements that belong
6139 right after this element. (PENDING is normally 1;
6140 it is 0 while outputting pending elements, to avoid recursion.) */
6143 output_init_element (value
, type
, field
, pending
)
6144 tree value
, type
, field
;
6147 if (TREE_CODE (TREE_TYPE (value
)) == FUNCTION_TYPE
6148 || (TREE_CODE (TREE_TYPE (value
)) == ARRAY_TYPE
6149 && !(TREE_CODE (value
) == STRING_CST
6150 && TREE_CODE (type
) == ARRAY_TYPE
6151 && TREE_CODE (TREE_TYPE (type
)) == INTEGER_TYPE
)
6152 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value
)),
6153 TYPE_MAIN_VARIANT (type
))))
6154 value
= default_conversion (value
);
6156 if (value
== error_mark_node
)
6157 constructor_erroneous
= 1;
6158 else if (!TREE_CONSTANT (value
))
6159 constructor_constant
= 0;
6160 else if (initializer_constant_valid_p (value
, TREE_TYPE (value
)) == 0
6161 || ((TREE_CODE (constructor_type
) == RECORD_TYPE
6162 || TREE_CODE (constructor_type
) == UNION_TYPE
)
6163 && DECL_C_BIT_FIELD (field
)
6164 && TREE_CODE (value
) != INTEGER_CST
))
6165 constructor_simple
= 0;
6167 if (require_constant_value
&& ! TREE_CONSTANT (value
))
6169 error_init ("initializer element is not constant");
6170 value
= error_mark_node
;
6172 else if (require_constant_elements
6173 && initializer_constant_valid_p (value
, TREE_TYPE (value
)) == 0)
6174 pedwarn ("initializer element is not computable at load time");
6176 /* If this field is empty (and not at the end of structure),
6177 don't do anything other than checking the initializer. */
6179 && (TREE_TYPE (field
) == error_mark_node
6180 || (COMPLETE_TYPE_P (TREE_TYPE (field
))
6181 && integer_zerop (TYPE_SIZE (TREE_TYPE (field
)))
6182 && (TREE_CODE (constructor_type
) == ARRAY_TYPE
6183 || TREE_CHAIN (field
)))))
6186 if (value
== error_mark_node
)
6188 constructor_erroneous
= 1;
6192 /* If this element doesn't come next in sequence,
6193 put it on constructor_pending_elts. */
6194 if (TREE_CODE (constructor_type
) == ARRAY_TYPE
6195 && (!constructor_incremental
6196 || !tree_int_cst_equal (field
, constructor_unfilled_index
)))
6198 if (constructor_incremental
6199 && tree_int_cst_lt (field
, constructor_unfilled_index
))
6200 set_nonincremental_init ();
6202 add_pending_init (field
,
6203 digest_init (type
, value
, require_constant_value
,
6204 require_constant_elements
));
6207 else if (TREE_CODE (constructor_type
) == RECORD_TYPE
6208 && (!constructor_incremental
6209 || field
!= constructor_unfilled_fields
))
6211 /* We do this for records but not for unions. In a union,
6212 no matter which field is specified, it can be initialized
6213 right away since it starts at the beginning of the union. */
6214 if (constructor_incremental
)
6216 if (!constructor_unfilled_fields
)
6217 set_nonincremental_init ();
6220 tree bitpos
, unfillpos
;
6222 bitpos
= bit_position (field
);
6223 unfillpos
= bit_position (constructor_unfilled_fields
);
6225 if (tree_int_cst_lt (bitpos
, unfillpos
))
6226 set_nonincremental_init ();
6230 add_pending_init (field
,
6231 digest_init (type
, value
, require_constant_value
,
6232 require_constant_elements
));
6235 else if (TREE_CODE (constructor_type
) == UNION_TYPE
6236 && constructor_elements
)
6238 if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements
)))
6239 warning_init ("initialized field with side-effects overwritten");
6241 /* We can have just one union field set. */
6242 constructor_elements
= 0;
6245 /* Otherwise, output this element either to
6246 constructor_elements or to the assembler file. */
6248 if (field
&& TREE_CODE (field
) == INTEGER_CST
)
6249 field
= copy_node (field
);
6250 constructor_elements
6251 = tree_cons (field
, digest_init (type
, value
,
6252 require_constant_value
,
6253 require_constant_elements
),
6254 constructor_elements
);
6256 /* Advance the variable that indicates sequential elements output. */
6257 if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
6258 constructor_unfilled_index
6259 = size_binop (PLUS_EXPR
, constructor_unfilled_index
,
6261 else if (TREE_CODE (constructor_type
) == RECORD_TYPE
)
6263 constructor_unfilled_fields
6264 = TREE_CHAIN (constructor_unfilled_fields
);
6266 /* Skip any nameless bit fields. */
6267 while (constructor_unfilled_fields
!= 0
6268 && DECL_C_BIT_FIELD (constructor_unfilled_fields
)
6269 && DECL_NAME (constructor_unfilled_fields
) == 0)
6270 constructor_unfilled_fields
=
6271 TREE_CHAIN (constructor_unfilled_fields
);
6273 else if (TREE_CODE (constructor_type
) == UNION_TYPE
)
6274 constructor_unfilled_fields
= 0;
6276 /* Now output any pending elements which have become next. */
6278 output_pending_init_elements (0);
6281 /* Output any pending elements which have become next.
6282 As we output elements, constructor_unfilled_{fields,index}
6283 advances, which may cause other elements to become next;
6284 if so, they too are output.
6286 If ALL is 0, we return when there are
6287 no more pending elements to output now.
6289 If ALL is 1, we output space as necessary so that
6290 we can output all the pending elements. */
6293 output_pending_init_elements (all
)
6296 struct init_node
*elt
= constructor_pending_elts
;
6301 /* Look thru the whole pending tree.
6302 If we find an element that should be output now,
6303 output it. Otherwise, set NEXT to the element
6304 that comes first among those still pending. */
6309 if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
6311 if (tree_int_cst_equal (elt
->purpose
,
6312 constructor_unfilled_index
))
6313 output_init_element (elt
->value
,
6314 TREE_TYPE (constructor_type
),
6315 constructor_unfilled_index
, 0);
6316 else if (tree_int_cst_lt (constructor_unfilled_index
,
6319 /* Advance to the next smaller node. */
6324 /* We have reached the smallest node bigger than the
6325 current unfilled index. Fill the space first. */
6326 next
= elt
->purpose
;
6332 /* Advance to the next bigger node. */
6337 /* We have reached the biggest node in a subtree. Find
6338 the parent of it, which is the next bigger node. */
6339 while (elt
->parent
&& elt
->parent
->right
== elt
)
6342 if (elt
&& tree_int_cst_lt (constructor_unfilled_index
,
6345 next
= elt
->purpose
;
6351 else if (TREE_CODE (constructor_type
) == RECORD_TYPE
6352 || TREE_CODE (constructor_type
) == UNION_TYPE
)
6354 tree ctor_unfilled_bitpos
, elt_bitpos
;
6356 /* If the current record is complete we are done. */
6357 if (constructor_unfilled_fields
== 0)
6360 ctor_unfilled_bitpos
= bit_position (constructor_unfilled_fields
);
6361 elt_bitpos
= bit_position (elt
->purpose
);
6362 /* We can't compare fields here because there might be empty
6363 fields in between. */
6364 if (tree_int_cst_equal (elt_bitpos
, ctor_unfilled_bitpos
))
6366 constructor_unfilled_fields
= elt
->purpose
;
6367 output_init_element (elt
->value
, TREE_TYPE (elt
->purpose
),
6370 else if (tree_int_cst_lt (ctor_unfilled_bitpos
, elt_bitpos
))
6372 /* Advance to the next smaller node. */
6377 /* We have reached the smallest node bigger than the
6378 current unfilled field. Fill the space first. */
6379 next
= elt
->purpose
;
6385 /* Advance to the next bigger node. */
6390 /* We have reached the biggest node in a subtree. Find
6391 the parent of it, which is the next bigger node. */
6392 while (elt
->parent
&& elt
->parent
->right
== elt
)
6396 && (tree_int_cst_lt (ctor_unfilled_bitpos
,
6397 bit_position (elt
->purpose
))))
6399 next
= elt
->purpose
;
6407 /* Ordinarily return, but not if we want to output all
6408 and there are elements left. */
6409 if (! (all
&& next
!= 0))
6412 /* If it's not incremental, just skip over the gap, so that after
6413 jumping to retry we will output the next successive element. */
6414 if (TREE_CODE (constructor_type
) == RECORD_TYPE
6415 || TREE_CODE (constructor_type
) == UNION_TYPE
)
6416 constructor_unfilled_fields
= next
;
6417 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
6418 constructor_unfilled_index
= next
;
6420 /* ELT now points to the node in the pending tree with the next
6421 initializer to output. */
6425 /* Add one non-braced element to the current constructor level.
6426 This adjusts the current position within the constructor's type.
6427 This may also start or terminate implicit levels
6428 to handle a partly-braced initializer.
6430 Once this has found the correct level for the new element,
6431 it calls output_init_element. */
6434 process_init_element (value
)
6437 tree orig_value
= value
;
6438 int string_flag
= value
!= 0 && TREE_CODE (value
) == STRING_CST
;
6440 designator_depth
= 0;
6441 designator_errorneous
= 0;
6443 /* Handle superfluous braces around string cst as in
6444 char x[] = {"foo"}; */
6447 && TREE_CODE (constructor_type
) == ARRAY_TYPE
6448 && TREE_CODE (TREE_TYPE (constructor_type
)) == INTEGER_TYPE
6449 && integer_zerop (constructor_unfilled_index
))
6451 if (constructor_stack
->replacement_value
)
6452 error_init ("excess elements in char array initializer");
6453 constructor_stack
->replacement_value
= value
;
6457 if (constructor_stack
->replacement_value
!= 0)
6459 error_init ("excess elements in struct initializer");
6463 /* Ignore elements of a brace group if it is entirely superfluous
6464 and has already been diagnosed. */
6465 if (constructor_type
== 0)
6468 /* If we've exhausted any levels that didn't have braces,
6470 while (constructor_stack
->implicit
)
6472 if ((TREE_CODE (constructor_type
) == RECORD_TYPE
6473 || TREE_CODE (constructor_type
) == UNION_TYPE
)
6474 && constructor_fields
== 0)
6475 process_init_element (pop_init_level (1));
6476 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
6477 && (constructor_max_index
== 0
6478 || tree_int_cst_lt (constructor_max_index
,
6479 constructor_index
)))
6480 process_init_element (pop_init_level (1));
6485 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6486 if (constructor_range_stack
)
6487 value
= save_expr (value
);
6491 if (TREE_CODE (constructor_type
) == RECORD_TYPE
)
6494 enum tree_code fieldcode
;
6496 if (constructor_fields
== 0)
6498 pedwarn_init ("excess elements in struct initializer");
6502 fieldtype
= TREE_TYPE (constructor_fields
);
6503 if (fieldtype
!= error_mark_node
)
6504 fieldtype
= TYPE_MAIN_VARIANT (fieldtype
);
6505 fieldcode
= TREE_CODE (fieldtype
);
6507 /* Accept a string constant to initialize a subarray. */
6509 && fieldcode
== ARRAY_TYPE
6510 && TREE_CODE (TREE_TYPE (fieldtype
)) == INTEGER_TYPE
6513 /* Otherwise, if we have come to a subaggregate,
6514 and we don't have an element of its type, push into it. */
6515 else if (value
!= 0 && !constructor_no_implicit
6516 && value
!= error_mark_node
6517 && TYPE_MAIN_VARIANT (TREE_TYPE (value
)) != fieldtype
6518 && (fieldcode
== RECORD_TYPE
|| fieldcode
== ARRAY_TYPE
6519 || fieldcode
== UNION_TYPE
))
6521 push_init_level (1);
6527 push_member_name (constructor_fields
);
6528 output_init_element (value
, fieldtype
, constructor_fields
, 1);
6529 RESTORE_SPELLING_DEPTH (constructor_depth
);
6532 /* Do the bookkeeping for an element that was
6533 directly output as a constructor. */
6535 /* For a record, keep track of end position of last field. */
6536 if (DECL_SIZE (constructor_fields
))
6537 constructor_bit_index
6538 = size_binop (PLUS_EXPR
,
6539 bit_position (constructor_fields
),
6540 DECL_SIZE (constructor_fields
));
6542 constructor_unfilled_fields
= TREE_CHAIN (constructor_fields
);
6543 /* Skip any nameless bit fields. */
6544 while (constructor_unfilled_fields
!= 0
6545 && DECL_C_BIT_FIELD (constructor_unfilled_fields
)
6546 && DECL_NAME (constructor_unfilled_fields
) == 0)
6547 constructor_unfilled_fields
=
6548 TREE_CHAIN (constructor_unfilled_fields
);
6551 constructor_fields
= TREE_CHAIN (constructor_fields
);
6552 /* Skip any nameless bit fields at the beginning. */
6553 while (constructor_fields
!= 0
6554 && DECL_C_BIT_FIELD (constructor_fields
)
6555 && DECL_NAME (constructor_fields
) == 0)
6556 constructor_fields
= TREE_CHAIN (constructor_fields
);
6558 else if (TREE_CODE (constructor_type
) == UNION_TYPE
)
6561 enum tree_code fieldcode
;
6563 if (constructor_fields
== 0)
6565 pedwarn_init ("excess elements in union initializer");
6569 fieldtype
= TREE_TYPE (constructor_fields
);
6570 if (fieldtype
!= error_mark_node
)
6571 fieldtype
= TYPE_MAIN_VARIANT (fieldtype
);
6572 fieldcode
= TREE_CODE (fieldtype
);
6574 /* Warn that traditional C rejects initialization of unions.
6575 We skip the warning if the value is zero. This is done
6576 under the assumption that the zero initializer in user
6577 code appears conditioned on e.g. __STDC__ to avoid
6578 "missing initializer" warnings and relies on default
6579 initialization to zero in the traditional C case. */
6580 if (warn_traditional
&& !in_system_header
6581 && !(value
&& (integer_zerop (value
) || real_zerop (value
))))
6582 warning ("traditional C rejects initialization of unions");
6584 /* Accept a string constant to initialize a subarray. */
6586 && fieldcode
== ARRAY_TYPE
6587 && TREE_CODE (TREE_TYPE (fieldtype
)) == INTEGER_TYPE
6590 /* Otherwise, if we have come to a subaggregate,
6591 and we don't have an element of its type, push into it. */
6592 else if (value
!= 0 && !constructor_no_implicit
6593 && value
!= error_mark_node
6594 && TYPE_MAIN_VARIANT (TREE_TYPE (value
)) != fieldtype
6595 && (fieldcode
== RECORD_TYPE
|| fieldcode
== ARRAY_TYPE
6596 || fieldcode
== UNION_TYPE
))
6598 push_init_level (1);
6604 push_member_name (constructor_fields
);
6605 output_init_element (value
, fieldtype
, constructor_fields
, 1);
6606 RESTORE_SPELLING_DEPTH (constructor_depth
);
6609 /* Do the bookkeeping for an element that was
6610 directly output as a constructor. */
6612 constructor_bit_index
= DECL_SIZE (constructor_fields
);
6613 constructor_unfilled_fields
= TREE_CHAIN (constructor_fields
);
6616 constructor_fields
= 0;
6618 else if (TREE_CODE (constructor_type
) == ARRAY_TYPE
)
6620 tree elttype
= TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type
));
6621 enum tree_code eltcode
= TREE_CODE (elttype
);
6623 /* Accept a string constant to initialize a subarray. */
6625 && eltcode
== ARRAY_TYPE
6626 && TREE_CODE (TREE_TYPE (elttype
)) == INTEGER_TYPE
6629 /* Otherwise, if we have come to a subaggregate,
6630 and we don't have an element of its type, push into it. */
6631 else if (value
!= 0 && !constructor_no_implicit
6632 && value
!= error_mark_node
6633 && TYPE_MAIN_VARIANT (TREE_TYPE (value
)) != elttype
6634 && (eltcode
== RECORD_TYPE
|| eltcode
== ARRAY_TYPE
6635 || eltcode
== UNION_TYPE
))
6637 push_init_level (1);
6641 if (constructor_max_index
!= 0
6642 && (tree_int_cst_lt (constructor_max_index
, constructor_index
)
6643 || integer_all_onesp (constructor_max_index
)))
6645 pedwarn_init ("excess elements in array initializer");
6649 /* Now output the actual element. */
6652 push_array_bounds (tree_low_cst (constructor_index
, 0));
6653 output_init_element (value
, elttype
, constructor_index
, 1);
6654 RESTORE_SPELLING_DEPTH (constructor_depth
);
6658 = size_binop (PLUS_EXPR
, constructor_index
, bitsize_one_node
);
6661 /* If we are doing the bookkeeping for an element that was
6662 directly output as a constructor, we must update
6663 constructor_unfilled_index. */
6664 constructor_unfilled_index
= constructor_index
;
6667 /* Handle the sole element allowed in a braced initializer
6668 for a scalar variable. */
6669 else if (constructor_fields
== 0)
6671 pedwarn_init ("excess elements in scalar initializer");
6677 output_init_element (value
, constructor_type
, NULL_TREE
, 1);
6678 constructor_fields
= 0;
6681 /* Handle range initializers either at this level or anywhere higher
6682 in the designator stack. */
6683 if (constructor_range_stack
)
6685 struct constructor_range_stack
*p
, *range_stack
;
6688 range_stack
= constructor_range_stack
;
6689 constructor_range_stack
= 0;
6690 while (constructor_stack
!= range_stack
->stack
)
6692 if (!constructor_stack
->implicit
)
6694 process_init_element (pop_init_level (1));
6696 for (p
= range_stack
;
6697 !p
->range_end
|| tree_int_cst_equal (p
->index
, p
->range_end
);
6700 if (!constructor_stack
->implicit
)
6702 process_init_element (pop_init_level (1));
6705 p
->index
= size_binop (PLUS_EXPR
, p
->index
, bitsize_one_node
);
6706 if (tree_int_cst_equal (p
->index
, p
->range_end
) && !p
->prev
)
6711 constructor_index
= p
->index
;
6712 constructor_fields
= p
->fields
;
6713 if (finish
&& p
->range_end
&& p
->index
== p
->range_start
)
6721 push_init_level (2);
6722 p
->stack
= constructor_stack
;
6723 if (p
->range_end
&& tree_int_cst_equal (p
->index
, p
->range_end
))
6724 p
->index
= p
->range_start
;
6728 constructor_range_stack
= range_stack
;
6735 constructor_range_stack
= 0;
6738 /* Build a simple asm-statement, from one string literal. */
6740 simple_asm_stmt (expr
)
6745 if (TREE_CODE (expr
) == ADDR_EXPR
)
6746 expr
= TREE_OPERAND (expr
, 0);
6748 if (TREE_CODE (expr
) == STRING_CST
)
6752 if (TREE_CHAIN (expr
))
6753 expr
= combine_strings (expr
);
6754 stmt
= add_stmt (build_stmt (ASM_STMT
, NULL_TREE
, expr
,
6755 NULL_TREE
, NULL_TREE
,
6757 ASM_INPUT_P (stmt
) = 1;
6761 error ("argument of `asm' is not a constant string");
6765 /* Build an asm-statement, whose components are a CV_QUALIFIER, a
6766 STRING, some OUTPUTS, some INPUTS, and some CLOBBERS. */
6769 build_asm_stmt (cv_qualifier
, string
, outputs
, inputs
, clobbers
)
6778 if (TREE_CHAIN (string
))
6779 string
= combine_strings (string
);
6780 if (TREE_CODE (string
) != STRING_CST
)
6782 error ("asm template is not a string constant");
6786 if (cv_qualifier
!= NULL_TREE
6787 && cv_qualifier
!= ridpointers
[(int) RID_VOLATILE
])
6789 warning ("%s qualifier ignored on asm",
6790 IDENTIFIER_POINTER (cv_qualifier
));
6791 cv_qualifier
= NULL_TREE
;
6794 /* We can remove output conversions that change the type,
6795 but not the mode. */
6796 for (tail
= outputs
; tail
; tail
= TREE_CHAIN (tail
))
6798 tree output
= TREE_VALUE (tail
);
6800 STRIP_NOPS (output
);
6801 TREE_VALUE (tail
) = output
;
6803 /* Allow conversions as LHS here. build_modify_expr as called below
6804 will do the right thing with them. */
6805 while (TREE_CODE (output
) == NOP_EXPR
6806 || TREE_CODE (output
) == CONVERT_EXPR
6807 || TREE_CODE (output
) == FLOAT_EXPR
6808 || TREE_CODE (output
) == FIX_TRUNC_EXPR
6809 || TREE_CODE (output
) == FIX_FLOOR_EXPR
6810 || TREE_CODE (output
) == FIX_ROUND_EXPR
6811 || TREE_CODE (output
) == FIX_CEIL_EXPR
)
6812 output
= TREE_OPERAND (output
, 0);
6814 lvalue_or_else (TREE_VALUE (tail
), "invalid lvalue in asm statement");
6817 /* Remove output conversions that change the type but not the mode. */
6818 for (tail
= outputs
; tail
; tail
= TREE_CHAIN (tail
))
6820 tree output
= TREE_VALUE (tail
);
6821 STRIP_NOPS (output
);
6822 TREE_VALUE (tail
) = output
;
6825 /* Perform default conversions on array and function inputs.
6826 Don't do this for other types as it would screw up operands
6827 expected to be in memory. */
6828 for (tail
= inputs
; tail
; tail
= TREE_CHAIN (tail
))
6829 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tail
))) == ARRAY_TYPE
6830 || TREE_CODE (TREE_TYPE (TREE_VALUE (tail
))) == FUNCTION_TYPE
)
6831 TREE_VALUE (tail
) = default_conversion (TREE_VALUE (tail
));
6833 return add_stmt (build_stmt (ASM_STMT
, cv_qualifier
, string
,
6834 outputs
, inputs
, clobbers
));
6837 /* Expand an ASM statement with operands, handling output operands
6838 that are not variables or INDIRECT_REFS by transforming such
6839 cases into cases that expand_asm_operands can handle.
6841 Arguments are same as for expand_asm_operands. */
6844 c_expand_asm_operands (string
, outputs
, inputs
, clobbers
, vol
, filename
, line
)
6845 tree string
, outputs
, inputs
, clobbers
;
6847 const char *filename
;
6850 int noutputs
= list_length (outputs
);
6852 /* o[I] is the place that output number I should be written. */
6853 register tree
*o
= (tree
*) alloca (noutputs
* sizeof (tree
));
6856 /* Record the contents of OUTPUTS before it is modified. */
6857 for (i
= 0, tail
= outputs
; tail
; tail
= TREE_CHAIN (tail
), i
++)
6858 o
[i
] = TREE_VALUE (tail
);
6860 /* Generate the ASM_OPERANDS insn; store into the TREE_VALUEs of
6861 OUTPUTS some trees for where the values were actually stored. */
6862 expand_asm_operands (string
, outputs
, inputs
, clobbers
, vol
, filename
, line
);
6864 /* Copy all the intermediate outputs into the specified outputs. */
6865 for (i
= 0, tail
= outputs
; tail
; tail
= TREE_CHAIN (tail
), i
++)
6867 if (o
[i
] != TREE_VALUE (tail
))
6869 expand_expr (build_modify_expr (o
[i
], NOP_EXPR
, TREE_VALUE (tail
)),
6870 NULL_RTX
, VOIDmode
, EXPAND_NORMAL
);
6873 /* Restore the original value so that it's correct the next
6874 time we expand this function. */
6875 TREE_VALUE (tail
) = o
[i
];
6877 /* Detect modification of read-only values.
6878 (Otherwise done by build_modify_expr.) */
6881 tree type
= TREE_TYPE (o
[i
]);
6882 if (TREE_READONLY (o
[i
])
6883 || TYPE_READONLY (type
)
6884 || ((TREE_CODE (type
) == RECORD_TYPE
6885 || TREE_CODE (type
) == UNION_TYPE
)
6886 && C_TYPE_FIELDS_READONLY (type
)))
6887 readonly_warning (o
[i
], "modification by `asm'");
6891 /* Those MODIFY_EXPRs could do autoincrements. */
6895 /* Expand a C `return' statement.
6896 RETVAL is the expression for what to return,
6897 or a null pointer for `return;' with no value. */
6900 c_expand_return (retval
)
6903 tree valtype
= TREE_TYPE (TREE_TYPE (current_function_decl
));
6905 if (TREE_THIS_VOLATILE (current_function_decl
))
6906 warning ("function declared `noreturn' has a `return' statement");
6910 current_function_returns_null
= 1;
6911 if ((warn_return_type
|| flag_isoc99
)
6912 && valtype
!= 0 && TREE_CODE (valtype
) != VOID_TYPE
)
6913 pedwarn_c99 ("`return' with no value, in function returning non-void");
6915 else if (valtype
== 0 || TREE_CODE (valtype
) == VOID_TYPE
)
6917 current_function_returns_null
= 1;
6918 if (pedantic
|| TREE_CODE (TREE_TYPE (retval
)) != VOID_TYPE
)
6919 pedwarn ("`return' with a value, in function returning void");
6923 tree t
= convert_for_assignment (valtype
, retval
, _("return"),
6924 NULL_TREE
, NULL_TREE
, 0);
6925 tree res
= DECL_RESULT (current_function_decl
);
6928 if (t
== error_mark_node
)
6931 inner
= t
= convert (TREE_TYPE (res
), t
);
6933 /* Strip any conversions, additions, and subtractions, and see if
6934 we are returning the address of a local variable. Warn if so. */
6937 switch (TREE_CODE (inner
))
6939 case NOP_EXPR
: case NON_LVALUE_EXPR
: case CONVERT_EXPR
:
6941 inner
= TREE_OPERAND (inner
, 0);
6945 /* If the second operand of the MINUS_EXPR has a pointer
6946 type (or is converted from it), this may be valid, so
6947 don't give a warning. */
6949 tree op1
= TREE_OPERAND (inner
, 1);
6951 while (! POINTER_TYPE_P (TREE_TYPE (op1
))
6952 && (TREE_CODE (op1
) == NOP_EXPR
6953 || TREE_CODE (op1
) == NON_LVALUE_EXPR
6954 || TREE_CODE (op1
) == CONVERT_EXPR
))
6955 op1
= TREE_OPERAND (op1
, 0);
6957 if (POINTER_TYPE_P (TREE_TYPE (op1
)))
6960 inner
= TREE_OPERAND (inner
, 0);
6965 inner
= TREE_OPERAND (inner
, 0);
6967 while (TREE_CODE_CLASS (TREE_CODE (inner
)) == 'r')
6968 inner
= TREE_OPERAND (inner
, 0);
6970 if (TREE_CODE (inner
) == VAR_DECL
6971 && ! DECL_EXTERNAL (inner
)
6972 && ! TREE_STATIC (inner
)
6973 && DECL_CONTEXT (inner
) == current_function_decl
)
6974 warning ("function returns address of local variable");
6984 retval
= build (MODIFY_EXPR
, TREE_TYPE (res
), res
, t
);
6985 current_function_returns_value
= 1;
6988 return add_stmt (build_return_stmt (retval
));
6992 /* The SWITCH_STMT being built. */
6994 /* A splay-tree mapping the low element of a case range to the high
6995 element, or NULL_TREE if there is no high element. Used to
6996 determine whether or not a new case label duplicates an old case
6997 label. We need a tree, rather than simply a hash table, because
6998 of the GNU case range extension. */
7000 /* The next node on the stack. */
7001 struct c_switch
*next
;
7004 /* A stack of the currently active switch statements. The innermost
7005 switch statement is on the top of the stack. There is no need to
7006 mark the stack for garbage collection because it is only active
7007 during the processing of the body of a function, and we never
7008 collect at that point. */
7010 static struct c_switch
*switch_stack
;
7012 /* Start a C switch statement, testing expression EXP. Return the new
7019 register enum tree_code code
;
7021 struct c_switch
*cs
;
7023 if (exp
!= error_mark_node
)
7025 code
= TREE_CODE (TREE_TYPE (exp
));
7026 type
= TREE_TYPE (exp
);
7028 if (! INTEGRAL_TYPE_P (type
)
7029 && code
!= ERROR_MARK
)
7031 error ("switch quantity not an integer");
7032 exp
= integer_zero_node
;
7037 type
= TYPE_MAIN_VARIANT (TREE_TYPE (exp
));
7039 if (warn_traditional
&& !in_system_header
7040 && (type
== long_integer_type_node
7041 || type
== long_unsigned_type_node
))
7042 warning ("`long' switch expression not converted to `int' in ISO C");
7044 exp
= default_conversion (exp
);
7045 type
= TREE_TYPE (exp
);
7046 index
= get_unwidened (exp
, NULL_TREE
);
7047 /* We can't strip a conversion from a signed type to an
7048 unsigned, because if we did, int_fits_type_p would do the
7049 wrong thing when checking case values for being in range,
7050 and it's too hard to do the right thing. */
7051 if (TREE_UNSIGNED (TREE_TYPE (exp
))
7052 == TREE_UNSIGNED (TREE_TYPE (index
)))
7057 /* Add this new SWITCH_STMT to the stack. */
7058 cs
= (struct c_switch
*) xmalloc (sizeof (*cs
));
7059 cs
->switch_stmt
= build_stmt (SWITCH_STMT
, exp
, NULL_TREE
, NULL_TREE
);
7060 cs
->cases
= splay_tree_new (case_compare
, NULL
, NULL
);
7061 cs
->next
= switch_stack
;
7064 return add_stmt (switch_stack
->switch_stmt
);
7067 /* Process a case label. */
7070 do_case (low_value
, high_value
)
7074 tree label
= NULL_TREE
;
7078 label
= c_add_case_label (switch_stack
->cases
,
7079 SWITCH_COND (switch_stack
->switch_stmt
),
7080 low_value
, high_value
);
7081 if (label
== error_mark_node
)
7085 error ("case label not within a switch statement");
7087 error ("`default' label not within a switch statement");
7092 /* Finish the switch statement. */
7097 struct c_switch
*cs
= switch_stack
;
7099 RECHAIN_STMTS (cs
->switch_stmt
, SWITCH_BODY (cs
->switch_stmt
));
7101 /* Pop the stack. */
7102 switch_stack
= switch_stack
->next
;
7103 splay_tree_delete (cs
->cases
);