* config/frv/frv.md (*adddi3_internal): Change name to...
[official-gcc.git] / gcc / c-typeck.c
blob5fe3b9d19c77d899e1eea5edc3cd005588ee8227
1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
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
15 for more details.
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
20 02111-1307, USA. */
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 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "rtl.h"
33 #include "tree.h"
34 #include "langhooks.h"
35 #include "c-tree.h"
36 #include "tm_p.h"
37 #include "flags.h"
38 #include "output.h"
39 #include "expr.h"
40 #include "toplev.h"
41 #include "intl.h"
42 #include "ggc.h"
43 #include "target.h"
44 #include "tree-iterator.h"
45 #include "tree-gimple.h"
47 /* Places where an lvalue, or modifiable lvalue, may be required.
48 Used to select diagnostic messages in lvalue_or_else and
49 readonly_error. */
50 enum lvalue_use {
51 lv_assign,
52 lv_increment,
53 lv_decrement,
54 lv_addressof,
55 lv_asm
58 /* Possible cases of implicit bad conversions. Used to select
59 diagnostic messages in convert_for_assignment. */
60 enum impl_conv {
61 ic_argpass,
62 ic_argpass_nonproto,
63 ic_assign,
64 ic_init,
65 ic_return
68 /* The level of nesting inside "__alignof__". */
69 int in_alignof;
71 /* The level of nesting inside "sizeof". */
72 int in_sizeof;
74 /* The level of nesting inside "typeof". */
75 int in_typeof;
77 /* Nonzero if we've already printed a "missing braces around initializer"
78 message within this initializer. */
79 static int missing_braces_mentioned;
81 static int require_constant_value;
82 static int require_constant_elements;
84 static tree qualify_type (tree, tree);
85 static int tagged_types_tu_compatible_p (tree, tree);
86 static int comp_target_types (tree, tree, int);
87 static int function_types_compatible_p (tree, tree);
88 static int type_lists_compatible_p (tree, tree);
89 static tree decl_constant_value_for_broken_optimization (tree);
90 static tree default_function_array_conversion (tree);
91 static tree lookup_field (tree, tree);
92 static tree convert_arguments (tree, tree, tree, tree);
93 static tree pointer_diff (tree, tree);
94 static tree convert_for_assignment (tree, tree, enum impl_conv, tree, tree,
95 int);
96 static tree valid_compound_expr_initializer (tree, tree);
97 static void push_string (const char *);
98 static void push_member_name (tree);
99 static void push_array_bounds (int);
100 static int spelling_length (void);
101 static char *print_spelling (char *);
102 static void warning_init (const char *);
103 static tree digest_init (tree, tree, bool, int);
104 static void output_init_element (tree, bool, tree, tree, int);
105 static void output_pending_init_elements (int);
106 static int set_designator (int);
107 static void push_range_stack (tree);
108 static void add_pending_init (tree, tree);
109 static void set_nonincremental_init (void);
110 static void set_nonincremental_init_from_string (tree);
111 static tree find_init_member (tree);
112 static int lvalue_or_else (tree, enum lvalue_use);
113 static void readonly_error (tree, enum lvalue_use);
115 /* Do `exp = require_complete_type (exp);' to make sure exp
116 does not have an incomplete type. (That includes void types.) */
118 tree
119 require_complete_type (tree value)
121 tree type = TREE_TYPE (value);
123 if (value == error_mark_node || type == error_mark_node)
124 return error_mark_node;
126 /* First, detect a valid value with a complete type. */
127 if (COMPLETE_TYPE_P (type))
128 return value;
130 c_incomplete_type_error (value, type);
131 return error_mark_node;
134 /* Print an error message for invalid use of an incomplete type.
135 VALUE is the expression that was used (or 0 if that isn't known)
136 and TYPE is the type that was invalid. */
138 void
139 c_incomplete_type_error (tree value, tree type)
141 const char *type_code_string;
143 /* Avoid duplicate error message. */
144 if (TREE_CODE (type) == ERROR_MARK)
145 return;
147 if (value != 0 && (TREE_CODE (value) == VAR_DECL
148 || TREE_CODE (value) == PARM_DECL))
149 error ("%qs has an incomplete type",
150 IDENTIFIER_POINTER (DECL_NAME (value)));
151 else
153 retry:
154 /* We must print an error message. Be clever about what it says. */
156 switch (TREE_CODE (type))
158 case RECORD_TYPE:
159 type_code_string = "struct";
160 break;
162 case UNION_TYPE:
163 type_code_string = "union";
164 break;
166 case ENUMERAL_TYPE:
167 type_code_string = "enum";
168 break;
170 case VOID_TYPE:
171 error ("invalid use of void expression");
172 return;
174 case ARRAY_TYPE:
175 if (TYPE_DOMAIN (type))
177 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
179 error ("invalid use of flexible array member");
180 return;
182 type = TREE_TYPE (type);
183 goto retry;
185 error ("invalid use of array with unspecified bounds");
186 return;
188 default:
189 gcc_unreachable ();
192 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
193 error ("invalid use of undefined type %<%s %s%>",
194 type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
195 else
196 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
197 error ("invalid use of incomplete typedef %qs",
198 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
202 /* Given a type, apply default promotions wrt unnamed function
203 arguments and return the new type. */
205 tree
206 c_type_promotes_to (tree type)
208 if (TYPE_MAIN_VARIANT (type) == float_type_node)
209 return double_type_node;
211 if (c_promoting_integer_type_p (type))
213 /* Preserve unsignedness if not really getting any wider. */
214 if (TYPE_UNSIGNED (type)
215 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
216 return unsigned_type_node;
217 return integer_type_node;
220 return type;
223 /* Return a variant of TYPE which has all the type qualifiers of LIKE
224 as well as those of TYPE. */
226 static tree
227 qualify_type (tree type, tree like)
229 return c_build_qualified_type (type,
230 TYPE_QUALS (type) | TYPE_QUALS (like));
233 /* Return the composite type of two compatible types.
235 We assume that comptypes has already been done and returned
236 nonzero; if that isn't so, this may crash. In particular, we
237 assume that qualifiers match. */
239 tree
240 composite_type (tree t1, tree t2)
242 enum tree_code code1;
243 enum tree_code code2;
244 tree attributes;
246 /* Save time if the two types are the same. */
248 if (t1 == t2) return t1;
250 /* If one type is nonsense, use the other. */
251 if (t1 == error_mark_node)
252 return t2;
253 if (t2 == error_mark_node)
254 return t1;
256 code1 = TREE_CODE (t1);
257 code2 = TREE_CODE (t2);
259 /* Merge the attributes. */
260 attributes = targetm.merge_type_attributes (t1, t2);
262 /* If one is an enumerated type and the other is the compatible
263 integer type, the composite type might be either of the two
264 (DR#013 question 3). For consistency, use the enumerated type as
265 the composite type. */
267 if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
268 return t1;
269 if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
270 return t2;
272 gcc_assert (code1 == code2);
274 switch (code1)
276 case POINTER_TYPE:
277 /* For two pointers, do this recursively on the target type. */
279 tree pointed_to_1 = TREE_TYPE (t1);
280 tree pointed_to_2 = TREE_TYPE (t2);
281 tree target = composite_type (pointed_to_1, pointed_to_2);
282 t1 = build_pointer_type (target);
283 t1 = build_type_attribute_variant (t1, attributes);
284 return qualify_type (t1, t2);
287 case ARRAY_TYPE:
289 tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
291 /* We should not have any type quals on arrays at all. */
292 gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
294 /* Save space: see if the result is identical to one of the args. */
295 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
296 return build_type_attribute_variant (t1, attributes);
297 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
298 return build_type_attribute_variant (t2, attributes);
300 if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
301 return build_type_attribute_variant (t1, attributes);
302 if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
303 return build_type_attribute_variant (t2, attributes);
305 /* Merge the element types, and have a size if either arg has one. */
306 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
307 return build_type_attribute_variant (t1, attributes);
310 case FUNCTION_TYPE:
311 /* Function types: prefer the one that specified arg types.
312 If both do, merge the arg types. Also merge the return types. */
314 tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
315 tree p1 = TYPE_ARG_TYPES (t1);
316 tree p2 = TYPE_ARG_TYPES (t2);
317 int len;
318 tree newargs, n;
319 int i;
321 /* Save space: see if the result is identical to one of the args. */
322 if (valtype == TREE_TYPE (t1) && !TYPE_ARG_TYPES (t2))
323 return build_type_attribute_variant (t1, attributes);
324 if (valtype == TREE_TYPE (t2) && !TYPE_ARG_TYPES (t1))
325 return build_type_attribute_variant (t2, attributes);
327 /* Simple way if one arg fails to specify argument types. */
328 if (TYPE_ARG_TYPES (t1) == 0)
330 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
331 t1 = build_type_attribute_variant (t1, attributes);
332 return qualify_type (t1, t2);
334 if (TYPE_ARG_TYPES (t2) == 0)
336 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
337 t1 = build_type_attribute_variant (t1, attributes);
338 return qualify_type (t1, t2);
341 /* If both args specify argument types, we must merge the two
342 lists, argument by argument. */
343 /* Tell global_bindings_p to return false so that variable_size
344 doesn't abort on VLAs in parameter types. */
345 c_override_global_bindings_to_false = true;
347 len = list_length (p1);
348 newargs = 0;
350 for (i = 0; i < len; i++)
351 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
353 n = newargs;
355 for (; p1;
356 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
358 /* A null type means arg type is not specified.
359 Take whatever the other function type has. */
360 if (TREE_VALUE (p1) == 0)
362 TREE_VALUE (n) = TREE_VALUE (p2);
363 goto parm_done;
365 if (TREE_VALUE (p2) == 0)
367 TREE_VALUE (n) = TREE_VALUE (p1);
368 goto parm_done;
371 /* Given wait (union {union wait *u; int *i} *)
372 and wait (union wait *),
373 prefer union wait * as type of parm. */
374 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
375 && TREE_VALUE (p1) != TREE_VALUE (p2))
377 tree memb;
378 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
379 memb; memb = TREE_CHAIN (memb))
380 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
382 TREE_VALUE (n) = TREE_VALUE (p2);
383 if (pedantic)
384 pedwarn ("function types not truly compatible in ISO C");
385 goto parm_done;
388 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
389 && TREE_VALUE (p2) != TREE_VALUE (p1))
391 tree memb;
392 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
393 memb; memb = TREE_CHAIN (memb))
394 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
396 TREE_VALUE (n) = TREE_VALUE (p1);
397 if (pedantic)
398 pedwarn ("function types not truly compatible in ISO C");
399 goto parm_done;
402 TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
403 parm_done: ;
406 c_override_global_bindings_to_false = false;
407 t1 = build_function_type (valtype, newargs);
408 t1 = qualify_type (t1, t2);
409 /* ... falls through ... */
412 default:
413 return build_type_attribute_variant (t1, attributes);
418 /* Return the type of a conditional expression between pointers to
419 possibly differently qualified versions of compatible types.
421 We assume that comp_target_types has already been done and returned
422 nonzero; if that isn't so, this may crash. */
424 static tree
425 common_pointer_type (tree t1, tree t2)
427 tree attributes;
428 tree pointed_to_1;
429 tree pointed_to_2;
430 tree target;
432 /* Save time if the two types are the same. */
434 if (t1 == t2) return t1;
436 /* If one type is nonsense, use the other. */
437 if (t1 == error_mark_node)
438 return t2;
439 if (t2 == error_mark_node)
440 return t1;
442 gcc_assert (TREE_CODE (t1) == POINTER_TYPE
443 && TREE_CODE (t2) == POINTER_TYPE);
445 /* Merge the attributes. */
446 attributes = targetm.merge_type_attributes (t1, t2);
448 /* Find the composite type of the target types, and combine the
449 qualifiers of the two types' targets. */
450 pointed_to_1 = TREE_TYPE (t1);
451 pointed_to_2 = TREE_TYPE (t2);
452 target = composite_type (TYPE_MAIN_VARIANT (pointed_to_1),
453 TYPE_MAIN_VARIANT (pointed_to_2));
454 t1 = build_pointer_type (c_build_qualified_type
455 (target,
456 TYPE_QUALS (pointed_to_1) |
457 TYPE_QUALS (pointed_to_2)));
458 return build_type_attribute_variant (t1, attributes);
461 /* Return the common type for two arithmetic types under the usual
462 arithmetic conversions. The default conversions have already been
463 applied, and enumerated types converted to their compatible integer
464 types. The resulting type is unqualified and has no attributes.
466 This is the type for the result of most arithmetic operations
467 if the operands have the given two types. */
469 tree
470 common_type (tree t1, tree t2)
472 enum tree_code code1;
473 enum tree_code code2;
475 /* If one type is nonsense, use the other. */
476 if (t1 == error_mark_node)
477 return t2;
478 if (t2 == error_mark_node)
479 return t1;
481 if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
482 t1 = TYPE_MAIN_VARIANT (t1);
484 if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
485 t2 = TYPE_MAIN_VARIANT (t2);
487 if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
488 t1 = build_type_attribute_variant (t1, NULL_TREE);
490 if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
491 t2 = build_type_attribute_variant (t2, NULL_TREE);
493 /* Save time if the two types are the same. */
495 if (t1 == t2) return t1;
497 code1 = TREE_CODE (t1);
498 code2 = TREE_CODE (t2);
500 gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
501 || code1 == REAL_TYPE || code1 == INTEGER_TYPE);
502 gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
503 || code2 == REAL_TYPE || code2 == INTEGER_TYPE);
505 /* If one type is a vector type, return that type. (How the usual
506 arithmetic conversions apply to the vector types extension is not
507 precisely specified.) */
508 if (code1 == VECTOR_TYPE)
509 return t1;
511 if (code2 == VECTOR_TYPE)
512 return t2;
514 /* If one type is complex, form the common type of the non-complex
515 components, then make that complex. Use T1 or T2 if it is the
516 required type. */
517 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
519 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
520 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
521 tree subtype = common_type (subtype1, subtype2);
523 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
524 return t1;
525 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
526 return t2;
527 else
528 return build_complex_type (subtype);
531 /* If only one is real, use it as the result. */
533 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
534 return t1;
536 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
537 return t2;
539 /* Both real or both integers; use the one with greater precision. */
541 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
542 return t1;
543 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
544 return t2;
546 /* Same precision. Prefer long longs to longs to ints when the
547 same precision, following the C99 rules on integer type rank
548 (which are equivalent to the C90 rules for C90 types). */
550 if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
551 || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
552 return long_long_unsigned_type_node;
554 if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
555 || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
557 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
558 return long_long_unsigned_type_node;
559 else
560 return long_long_integer_type_node;
563 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
564 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
565 return long_unsigned_type_node;
567 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
568 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
570 /* But preserve unsignedness from the other type,
571 since long cannot hold all the values of an unsigned int. */
572 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
573 return long_unsigned_type_node;
574 else
575 return long_integer_type_node;
578 /* Likewise, prefer long double to double even if same size. */
579 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
580 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
581 return long_double_type_node;
583 /* Otherwise prefer the unsigned one. */
585 if (TYPE_UNSIGNED (t1))
586 return t1;
587 else
588 return t2;
591 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
592 or various other operations. Return 2 if they are compatible
593 but a warning may be needed if you use them together. */
596 comptypes (tree type1, tree type2)
598 tree t1 = type1;
599 tree t2 = type2;
600 int attrval, val;
602 /* Suppress errors caused by previously reported errors. */
604 if (t1 == t2 || !t1 || !t2
605 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
606 return 1;
608 /* If either type is the internal version of sizetype, return the
609 language version. */
610 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
611 && TYPE_ORIG_SIZE_TYPE (t1))
612 t1 = TYPE_ORIG_SIZE_TYPE (t1);
614 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
615 && TYPE_ORIG_SIZE_TYPE (t2))
616 t2 = TYPE_ORIG_SIZE_TYPE (t2);
619 /* Enumerated types are compatible with integer types, but this is
620 not transitive: two enumerated types in the same translation unit
621 are compatible with each other only if they are the same type. */
623 if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
624 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
625 else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
626 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
628 if (t1 == t2)
629 return 1;
631 /* Different classes of types can't be compatible. */
633 if (TREE_CODE (t1) != TREE_CODE (t2))
634 return 0;
636 /* Qualifiers must match. C99 6.7.3p9 */
638 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
639 return 0;
641 /* Allow for two different type nodes which have essentially the same
642 definition. Note that we already checked for equality of the type
643 qualifiers (just above). */
645 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
646 return 1;
648 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
649 if (!(attrval = targetm.comp_type_attributes (t1, t2)))
650 return 0;
652 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
653 val = 0;
655 switch (TREE_CODE (t1))
657 case POINTER_TYPE:
658 /* We must give ObjC the first crack at comparing pointers, since
659 protocol qualifiers may be involved. */
660 if (c_dialect_objc () && (val = objc_comptypes (t1, t2, 0)) >= 0)
661 break;
662 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
663 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
664 break;
666 case FUNCTION_TYPE:
667 val = function_types_compatible_p (t1, t2);
668 break;
670 case ARRAY_TYPE:
672 tree d1 = TYPE_DOMAIN (t1);
673 tree d2 = TYPE_DOMAIN (t2);
674 bool d1_variable, d2_variable;
675 bool d1_zero, d2_zero;
676 val = 1;
678 /* Target types must match incl. qualifiers. */
679 if (TREE_TYPE (t1) != TREE_TYPE (t2)
680 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
681 return 0;
683 /* Sizes must match unless one is missing or variable. */
684 if (d1 == 0 || d2 == 0 || d1 == d2)
685 break;
687 d1_zero = !TYPE_MAX_VALUE (d1);
688 d2_zero = !TYPE_MAX_VALUE (d2);
690 d1_variable = (!d1_zero
691 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
692 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
693 d2_variable = (!d2_zero
694 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
695 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
697 if (d1_variable || d2_variable)
698 break;
699 if (d1_zero && d2_zero)
700 break;
701 if (d1_zero || d2_zero
702 || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
703 || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
704 val = 0;
706 break;
709 case RECORD_TYPE:
710 /* We are dealing with two distinct structs. In assorted Objective-C
711 corner cases, however, these can still be deemed equivalent. */
712 if (c_dialect_objc () && objc_comptypes (t1, t2, 0) == 1)
713 val = 1;
715 case ENUMERAL_TYPE:
716 case UNION_TYPE:
717 if (val != 1 && !same_translation_unit_p (t1, t2))
718 val = tagged_types_tu_compatible_p (t1, t2);
719 break;
721 case VECTOR_TYPE:
722 val = TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
723 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2));
724 break;
726 default:
727 break;
729 return attrval == 2 && val == 1 ? 2 : val;
732 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
733 ignoring their qualifiers. REFLEXIVE is only used by ObjC - set it
734 to 1 or 0 depending if the check of the pointer types is meant to
735 be reflexive or not (typically, assignments are not reflexive,
736 while comparisons are reflexive).
739 static int
740 comp_target_types (tree ttl, tree ttr, int reflexive)
742 int val;
744 /* Give objc_comptypes a crack at letting these types through. */
745 if ((val = objc_comptypes (ttl, ttr, reflexive)) >= 0)
746 return val;
748 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
749 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
751 if (val == 2 && pedantic)
752 pedwarn ("types are not quite compatible");
753 return val;
756 /* Subroutines of `comptypes'. */
758 /* Determine whether two trees derive from the same translation unit.
759 If the CONTEXT chain ends in a null, that tree's context is still
760 being parsed, so if two trees have context chains ending in null,
761 they're in the same translation unit. */
763 same_translation_unit_p (tree t1, tree t2)
765 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
766 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
768 case tcc_declaration:
769 t1 = DECL_CONTEXT (t1); break;
770 case tcc_type:
771 t1 = TYPE_CONTEXT (t1); break;
772 case tcc_exceptional:
773 t1 = BLOCK_SUPERCONTEXT (t1); break; /* assume block */
774 default: gcc_unreachable ();
777 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
778 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
780 case tcc_declaration:
781 t2 = DECL_CONTEXT (t2); break;
782 case tcc_type:
783 t2 = TYPE_CONTEXT (t2); break;
784 case tcc_exceptional:
785 t2 = BLOCK_SUPERCONTEXT (t2); break; /* assume block */
786 default: gcc_unreachable ();
789 return t1 == t2;
792 /* The C standard says that two structures in different translation
793 units are compatible with each other only if the types of their
794 fields are compatible (among other things). So, consider two copies
795 of this structure: */
797 struct tagged_tu_seen {
798 const struct tagged_tu_seen * next;
799 tree t1;
800 tree t2;
803 /* Can they be compatible with each other? We choose to break the
804 recursion by allowing those types to be compatible. */
806 static const struct tagged_tu_seen * tagged_tu_seen_base;
808 /* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
809 compatible. If the two types are not the same (which has been
810 checked earlier), this can only happen when multiple translation
811 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
812 rules. */
814 static int
815 tagged_types_tu_compatible_p (tree t1, tree t2)
817 tree s1, s2;
818 bool needs_warning = false;
820 /* We have to verify that the tags of the types are the same. This
821 is harder than it looks because this may be a typedef, so we have
822 to go look at the original type. It may even be a typedef of a
823 typedef...
824 In the case of compiler-created builtin structs the TYPE_DECL
825 may be a dummy, with no DECL_ORIGINAL_TYPE. Don't fault. */
826 while (TYPE_NAME (t1)
827 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
828 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
829 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
831 while (TYPE_NAME (t2)
832 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL
833 && DECL_ORIGINAL_TYPE (TYPE_NAME (t2)))
834 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
836 /* C90 didn't have the requirement that the two tags be the same. */
837 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
838 return 0;
840 /* C90 didn't say what happened if one or both of the types were
841 incomplete; we choose to follow C99 rules here, which is that they
842 are compatible. */
843 if (TYPE_SIZE (t1) == NULL
844 || TYPE_SIZE (t2) == NULL)
845 return 1;
848 const struct tagged_tu_seen * tts_i;
849 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
850 if (tts_i->t1 == t1 && tts_i->t2 == t2)
851 return 1;
854 switch (TREE_CODE (t1))
856 case ENUMERAL_TYPE:
859 /* Speed up the case where the type values are in the same order. */
860 tree tv1 = TYPE_VALUES (t1);
861 tree tv2 = TYPE_VALUES (t2);
863 if (tv1 == tv2)
864 return 1;
866 for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
868 if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
869 break;
870 if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
871 return 0;
874 if (tv1 == NULL_TREE && tv2 == NULL_TREE)
875 return 1;
876 if (tv1 == NULL_TREE || tv2 == NULL_TREE)
877 return 0;
879 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
880 return 0;
882 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
884 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
885 if (s2 == NULL
886 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
887 return 0;
889 return 1;
892 case UNION_TYPE:
894 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
895 return 0;
897 for (s1 = TYPE_FIELDS (t1); s1; s1 = TREE_CHAIN (s1))
899 bool ok = false;
900 struct tagged_tu_seen tts;
902 tts.next = tagged_tu_seen_base;
903 tts.t1 = t1;
904 tts.t2 = t2;
905 tagged_tu_seen_base = &tts;
907 if (DECL_NAME (s1) != NULL)
908 for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
909 if (DECL_NAME (s1) == DECL_NAME (s2))
911 int result;
912 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
913 if (result == 0)
914 break;
915 if (result == 2)
916 needs_warning = true;
918 if (TREE_CODE (s1) == FIELD_DECL
919 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
920 DECL_FIELD_BIT_OFFSET (s2)) != 1)
921 break;
923 ok = true;
924 break;
926 tagged_tu_seen_base = tts.next;
927 if (!ok)
928 return 0;
930 return needs_warning ? 2 : 1;
933 case RECORD_TYPE:
935 struct tagged_tu_seen tts;
937 tts.next = tagged_tu_seen_base;
938 tts.t1 = t1;
939 tts.t2 = t2;
940 tagged_tu_seen_base = &tts;
942 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
943 s1 && s2;
944 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
946 int result;
947 if (TREE_CODE (s1) != TREE_CODE (s2)
948 || DECL_NAME (s1) != DECL_NAME (s2))
949 break;
950 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
951 if (result == 0)
952 break;
953 if (result == 2)
954 needs_warning = true;
956 if (TREE_CODE (s1) == FIELD_DECL
957 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
958 DECL_FIELD_BIT_OFFSET (s2)) != 1)
959 break;
961 tagged_tu_seen_base = tts.next;
962 if (s1 && s2)
963 return 0;
964 return needs_warning ? 2 : 1;
967 default:
968 gcc_unreachable ();
972 /* Return 1 if two function types F1 and F2 are compatible.
973 If either type specifies no argument types,
974 the other must specify a fixed number of self-promoting arg types.
975 Otherwise, if one type specifies only the number of arguments,
976 the other must specify that number of self-promoting arg types.
977 Otherwise, the argument types must match. */
979 static int
980 function_types_compatible_p (tree f1, tree f2)
982 tree args1, args2;
983 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
984 int val = 1;
985 int val1;
986 tree ret1, ret2;
988 ret1 = TREE_TYPE (f1);
989 ret2 = TREE_TYPE (f2);
991 /* 'volatile' qualifiers on a function's return type used to mean
992 the function is noreturn. */
993 if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
994 pedwarn ("function return types not compatible due to %<volatile%>");
995 if (TYPE_VOLATILE (ret1))
996 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
997 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
998 if (TYPE_VOLATILE (ret2))
999 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
1000 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
1001 val = comptypes (ret1, ret2);
1002 if (val == 0)
1003 return 0;
1005 args1 = TYPE_ARG_TYPES (f1);
1006 args2 = TYPE_ARG_TYPES (f2);
1008 /* An unspecified parmlist matches any specified parmlist
1009 whose argument types don't need default promotions. */
1011 if (args1 == 0)
1013 if (!self_promoting_args_p (args2))
1014 return 0;
1015 /* If one of these types comes from a non-prototype fn definition,
1016 compare that with the other type's arglist.
1017 If they don't match, ask for a warning (but no error). */
1018 if (TYPE_ACTUAL_ARG_TYPES (f1)
1019 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
1020 val = 2;
1021 return val;
1023 if (args2 == 0)
1025 if (!self_promoting_args_p (args1))
1026 return 0;
1027 if (TYPE_ACTUAL_ARG_TYPES (f2)
1028 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
1029 val = 2;
1030 return val;
1033 /* Both types have argument lists: compare them and propagate results. */
1034 val1 = type_lists_compatible_p (args1, args2);
1035 return val1 != 1 ? val1 : val;
1038 /* Check two lists of types for compatibility,
1039 returning 0 for incompatible, 1 for compatible,
1040 or 2 for compatible with warning. */
1042 static int
1043 type_lists_compatible_p (tree args1, tree args2)
1045 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1046 int val = 1;
1047 int newval = 0;
1049 while (1)
1051 if (args1 == 0 && args2 == 0)
1052 return val;
1053 /* If one list is shorter than the other,
1054 they fail to match. */
1055 if (args1 == 0 || args2 == 0)
1056 return 0;
1057 /* A null pointer instead of a type
1058 means there is supposed to be an argument
1059 but nothing is specified about what type it has.
1060 So match anything that self-promotes. */
1061 if (TREE_VALUE (args1) == 0)
1063 if (c_type_promotes_to (TREE_VALUE (args2)) != TREE_VALUE (args2))
1064 return 0;
1066 else if (TREE_VALUE (args2) == 0)
1068 if (c_type_promotes_to (TREE_VALUE (args1)) != TREE_VALUE (args1))
1069 return 0;
1071 /* If one of the lists has an error marker, ignore this arg. */
1072 else if (TREE_CODE (TREE_VALUE (args1)) == ERROR_MARK
1073 || TREE_CODE (TREE_VALUE (args2)) == ERROR_MARK)
1075 else if (!(newval = comptypes (TYPE_MAIN_VARIANT (TREE_VALUE (args1)),
1076 TYPE_MAIN_VARIANT (TREE_VALUE (args2)))))
1078 /* Allow wait (union {union wait *u; int *i} *)
1079 and wait (union wait *) to be compatible. */
1080 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
1081 && (TYPE_NAME (TREE_VALUE (args1)) == 0
1082 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
1083 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
1084 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
1085 TYPE_SIZE (TREE_VALUE (args2))))
1087 tree memb;
1088 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
1089 memb; memb = TREE_CHAIN (memb))
1090 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
1091 break;
1092 if (memb == 0)
1093 return 0;
1095 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
1096 && (TYPE_NAME (TREE_VALUE (args2)) == 0
1097 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
1098 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
1099 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
1100 TYPE_SIZE (TREE_VALUE (args1))))
1102 tree memb;
1103 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
1104 memb; memb = TREE_CHAIN (memb))
1105 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
1106 break;
1107 if (memb == 0)
1108 return 0;
1110 else
1111 return 0;
1114 /* comptypes said ok, but record if it said to warn. */
1115 if (newval > val)
1116 val = newval;
1118 args1 = TREE_CHAIN (args1);
1119 args2 = TREE_CHAIN (args2);
1123 /* Compute the size to increment a pointer by. */
1125 tree
1126 c_size_in_bytes (tree type)
1128 enum tree_code code = TREE_CODE (type);
1130 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
1131 return size_one_node;
1133 if (!COMPLETE_OR_VOID_TYPE_P (type))
1135 error ("arithmetic on pointer to an incomplete type");
1136 return size_one_node;
1139 /* Convert in case a char is more than one unit. */
1140 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
1141 size_int (TYPE_PRECISION (char_type_node)
1142 / BITS_PER_UNIT));
1145 /* Return either DECL or its known constant value (if it has one). */
1147 tree
1148 decl_constant_value (tree decl)
1150 if (/* Don't change a variable array bound or initial value to a constant
1151 in a place where a variable is invalid. Note that DECL_INITIAL
1152 isn't valid for a PARM_DECL. */
1153 current_function_decl != 0
1154 && TREE_CODE (decl) != PARM_DECL
1155 && !TREE_THIS_VOLATILE (decl)
1156 && TREE_READONLY (decl)
1157 && DECL_INITIAL (decl) != 0
1158 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
1159 /* This is invalid if initial value is not constant.
1160 If it has either a function call, a memory reference,
1161 or a variable, then re-evaluating it could give different results. */
1162 && TREE_CONSTANT (DECL_INITIAL (decl))
1163 /* Check for cases where this is sub-optimal, even though valid. */
1164 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
1165 return DECL_INITIAL (decl);
1166 return decl;
1169 /* Return either DECL or its known constant value (if it has one), but
1170 return DECL if pedantic or DECL has mode BLKmode. This is for
1171 bug-compatibility with the old behavior of decl_constant_value
1172 (before GCC 3.0); every use of this function is a bug and it should
1173 be removed before GCC 3.1. It is not appropriate to use pedantic
1174 in a way that affects optimization, and BLKmode is probably not the
1175 right test for avoiding misoptimizations either. */
1177 static tree
1178 decl_constant_value_for_broken_optimization (tree decl)
1180 if (pedantic || DECL_MODE (decl) == BLKmode)
1181 return decl;
1182 else
1183 return decl_constant_value (decl);
1187 /* Perform the default conversion of arrays and functions to pointers.
1188 Return the result of converting EXP. For any other expression, just
1189 return EXP. */
1191 static tree
1192 default_function_array_conversion (tree exp)
1194 tree orig_exp;
1195 tree type = TREE_TYPE (exp);
1196 enum tree_code code = TREE_CODE (type);
1197 int not_lvalue = 0;
1199 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
1200 an lvalue.
1202 Do not use STRIP_NOPS here! It will remove conversions from pointer
1203 to integer and cause infinite recursion. */
1204 orig_exp = exp;
1205 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1206 || (TREE_CODE (exp) == NOP_EXPR
1207 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1209 if (TREE_CODE (exp) == NON_LVALUE_EXPR)
1210 not_lvalue = 1;
1211 exp = TREE_OPERAND (exp, 0);
1214 if (TREE_NO_WARNING (orig_exp))
1215 TREE_NO_WARNING (exp) = 1;
1217 if (code == FUNCTION_TYPE)
1219 return build_unary_op (ADDR_EXPR, exp, 0);
1221 if (code == ARRAY_TYPE)
1223 tree adr;
1224 tree restype = TREE_TYPE (type);
1225 tree ptrtype;
1226 int constp = 0;
1227 int volatilep = 0;
1228 int lvalue_array_p;
1230 if (REFERENCE_CLASS_P (exp) || DECL_P (exp))
1232 constp = TREE_READONLY (exp);
1233 volatilep = TREE_THIS_VOLATILE (exp);
1236 if (TYPE_QUALS (type) || constp || volatilep)
1237 restype
1238 = c_build_qualified_type (restype,
1239 TYPE_QUALS (type)
1240 | (constp * TYPE_QUAL_CONST)
1241 | (volatilep * TYPE_QUAL_VOLATILE));
1243 if (TREE_CODE (exp) == INDIRECT_REF)
1244 return convert (build_pointer_type (restype),
1245 TREE_OPERAND (exp, 0));
1247 if (TREE_CODE (exp) == COMPOUND_EXPR)
1249 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
1250 return build2 (COMPOUND_EXPR, TREE_TYPE (op1),
1251 TREE_OPERAND (exp, 0), op1);
1254 lvalue_array_p = !not_lvalue && lvalue_p (exp);
1255 if (!flag_isoc99 && !lvalue_array_p)
1257 /* Before C99, non-lvalue arrays do not decay to pointers.
1258 Normally, using such an array would be invalid; but it can
1259 be used correctly inside sizeof or as a statement expression.
1260 Thus, do not give an error here; an error will result later. */
1261 return exp;
1264 ptrtype = build_pointer_type (restype);
1266 if (TREE_CODE (exp) == VAR_DECL)
1268 /* We are making an ADDR_EXPR of ptrtype. This is a valid
1269 ADDR_EXPR because it's the best way of representing what
1270 happens in C when we take the address of an array and place
1271 it in a pointer to the element type. */
1272 adr = build1 (ADDR_EXPR, ptrtype, exp);
1273 if (!c_mark_addressable (exp))
1274 return error_mark_node;
1275 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1276 return adr;
1278 /* This way is better for a COMPONENT_REF since it can
1279 simplify the offset for a component. */
1280 adr = build_unary_op (ADDR_EXPR, exp, 1);
1281 return convert (ptrtype, adr);
1283 return exp;
1286 /* Perform default promotions for C data used in expressions.
1287 Arrays and functions are converted to pointers;
1288 enumeral types or short or char, to int.
1289 In addition, manifest constants symbols are replaced by their values. */
1291 tree
1292 default_conversion (tree exp)
1294 tree orig_exp;
1295 tree type = TREE_TYPE (exp);
1296 enum tree_code code = TREE_CODE (type);
1298 if (code == FUNCTION_TYPE || code == ARRAY_TYPE)
1299 return default_function_array_conversion (exp);
1301 /* Constants can be used directly unless they're not loadable. */
1302 if (TREE_CODE (exp) == CONST_DECL)
1303 exp = DECL_INITIAL (exp);
1305 /* Replace a nonvolatile const static variable with its value unless
1306 it is an array, in which case we must be sure that taking the
1307 address of the array produces consistent results. */
1308 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
1310 exp = decl_constant_value_for_broken_optimization (exp);
1311 type = TREE_TYPE (exp);
1314 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
1315 an lvalue.
1317 Do not use STRIP_NOPS here! It will remove conversions from pointer
1318 to integer and cause infinite recursion. */
1319 orig_exp = exp;
1320 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1321 || (TREE_CODE (exp) == NOP_EXPR
1322 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1323 exp = TREE_OPERAND (exp, 0);
1325 if (TREE_NO_WARNING (orig_exp))
1326 TREE_NO_WARNING (exp) = 1;
1328 /* Normally convert enums to int,
1329 but convert wide enums to something wider. */
1330 if (code == ENUMERAL_TYPE)
1332 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
1333 TYPE_PRECISION (integer_type_node)),
1334 ((TYPE_PRECISION (type)
1335 >= TYPE_PRECISION (integer_type_node))
1336 && TYPE_UNSIGNED (type)));
1338 return convert (type, exp);
1341 if (TREE_CODE (exp) == COMPONENT_REF
1342 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
1343 /* If it's thinner than an int, promote it like a
1344 c_promoting_integer_type_p, otherwise leave it alone. */
1345 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
1346 TYPE_PRECISION (integer_type_node)))
1347 return convert (integer_type_node, exp);
1349 if (c_promoting_integer_type_p (type))
1351 /* Preserve unsignedness if not really getting any wider. */
1352 if (TYPE_UNSIGNED (type)
1353 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1354 return convert (unsigned_type_node, exp);
1356 return convert (integer_type_node, exp);
1359 if (code == VOID_TYPE)
1361 error ("void value not ignored as it ought to be");
1362 return error_mark_node;
1364 return exp;
1367 /* Look up COMPONENT in a structure or union DECL.
1369 If the component name is not found, returns NULL_TREE. Otherwise,
1370 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1371 stepping down the chain to the component, which is in the last
1372 TREE_VALUE of the list. Normally the list is of length one, but if
1373 the component is embedded within (nested) anonymous structures or
1374 unions, the list steps down the chain to the component. */
1376 static tree
1377 lookup_field (tree decl, tree component)
1379 tree type = TREE_TYPE (decl);
1380 tree field;
1382 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1383 to the field elements. Use a binary search on this array to quickly
1384 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1385 will always be set for structures which have many elements. */
1387 if (TYPE_LANG_SPECIFIC (type))
1389 int bot, top, half;
1390 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
1392 field = TYPE_FIELDS (type);
1393 bot = 0;
1394 top = TYPE_LANG_SPECIFIC (type)->s->len;
1395 while (top - bot > 1)
1397 half = (top - bot + 1) >> 1;
1398 field = field_array[bot+half];
1400 if (DECL_NAME (field) == NULL_TREE)
1402 /* Step through all anon unions in linear fashion. */
1403 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1405 field = field_array[bot++];
1406 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1407 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1409 tree anon = lookup_field (field, component);
1411 if (anon)
1412 return tree_cons (NULL_TREE, field, anon);
1416 /* Entire record is only anon unions. */
1417 if (bot > top)
1418 return NULL_TREE;
1420 /* Restart the binary search, with new lower bound. */
1421 continue;
1424 if (DECL_NAME (field) == component)
1425 break;
1426 if (DECL_NAME (field) < component)
1427 bot += half;
1428 else
1429 top = bot + half;
1432 if (DECL_NAME (field_array[bot]) == component)
1433 field = field_array[bot];
1434 else if (DECL_NAME (field) != component)
1435 return NULL_TREE;
1437 else
1439 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1441 if (DECL_NAME (field) == NULL_TREE
1442 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1443 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1445 tree anon = lookup_field (field, component);
1447 if (anon)
1448 return tree_cons (NULL_TREE, field, anon);
1451 if (DECL_NAME (field) == component)
1452 break;
1455 if (field == NULL_TREE)
1456 return NULL_TREE;
1459 return tree_cons (NULL_TREE, field, NULL_TREE);
1462 /* Make an expression to refer to the COMPONENT field of
1463 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1465 tree
1466 build_component_ref (tree datum, tree component)
1468 tree type = TREE_TYPE (datum);
1469 enum tree_code code = TREE_CODE (type);
1470 tree field = NULL;
1471 tree ref;
1473 if (!objc_is_public (datum, component))
1474 return error_mark_node;
1476 /* See if there is a field or component with name COMPONENT. */
1478 if (code == RECORD_TYPE || code == UNION_TYPE)
1480 if (!COMPLETE_TYPE_P (type))
1482 c_incomplete_type_error (NULL_TREE, type);
1483 return error_mark_node;
1486 field = lookup_field (datum, component);
1488 if (!field)
1490 error ("%qT has no member named %qs", type,
1491 IDENTIFIER_POINTER (component));
1492 return error_mark_node;
1495 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1496 This might be better solved in future the way the C++ front
1497 end does it - by giving the anonymous entities each a
1498 separate name and type, and then have build_component_ref
1499 recursively call itself. We can't do that here. */
1502 tree subdatum = TREE_VALUE (field);
1504 if (TREE_TYPE (subdatum) == error_mark_node)
1505 return error_mark_node;
1507 ref = build3 (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum,
1508 NULL_TREE);
1509 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
1510 TREE_READONLY (ref) = 1;
1511 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
1512 TREE_THIS_VOLATILE (ref) = 1;
1514 if (TREE_DEPRECATED (subdatum))
1515 warn_deprecated_use (subdatum);
1517 datum = ref;
1519 field = TREE_CHAIN (field);
1521 while (field);
1523 return ref;
1525 else if (code != ERROR_MARK)
1526 error ("request for member %qs in something not a structure or union",
1527 IDENTIFIER_POINTER (component));
1529 return error_mark_node;
1532 /* Given an expression PTR for a pointer, return an expression
1533 for the value pointed to.
1534 ERRORSTRING is the name of the operator to appear in error messages. */
1536 tree
1537 build_indirect_ref (tree ptr, const char *errorstring)
1539 tree pointer = default_conversion (ptr);
1540 tree type = TREE_TYPE (pointer);
1542 if (TREE_CODE (type) == POINTER_TYPE)
1544 if (TREE_CODE (pointer) == ADDR_EXPR
1545 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1546 == TREE_TYPE (type)))
1547 return TREE_OPERAND (pointer, 0);
1548 else
1550 tree t = TREE_TYPE (type);
1551 tree ref = build1 (INDIRECT_REF, TYPE_MAIN_VARIANT (t), pointer);
1553 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1555 error ("dereferencing pointer to incomplete type");
1556 return error_mark_node;
1558 if (VOID_TYPE_P (t) && skip_evaluation == 0)
1559 warning ("dereferencing %<void *%> pointer");
1561 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1562 so that we get the proper error message if the result is used
1563 to assign to. Also, &* is supposed to be a no-op.
1564 And ANSI C seems to specify that the type of the result
1565 should be the const type. */
1566 /* A de-reference of a pointer to const is not a const. It is valid
1567 to change it via some other pointer. */
1568 TREE_READONLY (ref) = TYPE_READONLY (t);
1569 TREE_SIDE_EFFECTS (ref)
1570 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
1571 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1572 return ref;
1575 else if (TREE_CODE (pointer) != ERROR_MARK)
1576 error ("invalid type argument of %qs", errorstring);
1577 return error_mark_node;
1580 /* This handles expressions of the form "a[i]", which denotes
1581 an array reference.
1583 This is logically equivalent in C to *(a+i), but we may do it differently.
1584 If A is a variable or a member, we generate a primitive ARRAY_REF.
1585 This avoids forcing the array out of registers, and can work on
1586 arrays that are not lvalues (for example, members of structures returned
1587 by functions). */
1589 tree
1590 build_array_ref (tree array, tree index)
1592 if (index == 0)
1594 error ("subscript missing in array reference");
1595 return error_mark_node;
1598 if (TREE_TYPE (array) == error_mark_node
1599 || TREE_TYPE (index) == error_mark_node)
1600 return error_mark_node;
1602 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
1604 tree rval, type;
1606 /* Subscripting with type char is likely to lose
1607 on a machine where chars are signed.
1608 So warn on any machine, but optionally.
1609 Don't warn for unsigned char since that type is safe.
1610 Don't warn for signed char because anyone who uses that
1611 must have done so deliberately. */
1612 if (warn_char_subscripts
1613 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1614 warning ("array subscript has type %<char%>");
1616 /* Apply default promotions *after* noticing character types. */
1617 index = default_conversion (index);
1619 /* Require integer *after* promotion, for sake of enums. */
1620 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1622 error ("array subscript is not an integer");
1623 return error_mark_node;
1626 /* An array that is indexed by a non-constant
1627 cannot be stored in a register; we must be able to do
1628 address arithmetic on its address.
1629 Likewise an array of elements of variable size. */
1630 if (TREE_CODE (index) != INTEGER_CST
1631 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1632 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1634 if (!c_mark_addressable (array))
1635 return error_mark_node;
1637 /* An array that is indexed by a constant value which is not within
1638 the array bounds cannot be stored in a register either; because we
1639 would get a crash in store_bit_field/extract_bit_field when trying
1640 to access a non-existent part of the register. */
1641 if (TREE_CODE (index) == INTEGER_CST
1642 && TYPE_DOMAIN (TREE_TYPE (array))
1643 && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
1645 if (!c_mark_addressable (array))
1646 return error_mark_node;
1649 if (pedantic)
1651 tree foo = array;
1652 while (TREE_CODE (foo) == COMPONENT_REF)
1653 foo = TREE_OPERAND (foo, 0);
1654 if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
1655 pedwarn ("ISO C forbids subscripting %<register%> array");
1656 else if (!flag_isoc99 && !lvalue_p (foo))
1657 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
1660 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1661 rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
1662 /* Array ref is const/volatile if the array elements are
1663 or if the array is. */
1664 TREE_READONLY (rval)
1665 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1666 | TREE_READONLY (array));
1667 TREE_SIDE_EFFECTS (rval)
1668 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1669 | TREE_SIDE_EFFECTS (array));
1670 TREE_THIS_VOLATILE (rval)
1671 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1672 /* This was added by rms on 16 Nov 91.
1673 It fixes vol struct foo *a; a->elts[1]
1674 in an inline function.
1675 Hope it doesn't break something else. */
1676 | TREE_THIS_VOLATILE (array));
1677 return require_complete_type (fold (rval));
1681 tree ar = default_conversion (array);
1682 tree ind = default_conversion (index);
1684 /* Do the same warning check as above, but only on the part that's
1685 syntactically the index and only if it is also semantically
1686 the index. */
1687 if (warn_char_subscripts
1688 && TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
1689 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1690 warning ("subscript has type %<char%>");
1692 /* Put the integer in IND to simplify error checking. */
1693 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1695 tree temp = ar;
1696 ar = ind;
1697 ind = temp;
1700 if (ar == error_mark_node)
1701 return ar;
1703 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
1704 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
1706 error ("subscripted value is neither array nor pointer");
1707 return error_mark_node;
1709 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1711 error ("array subscript is not an integer");
1712 return error_mark_node;
1715 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1716 "array indexing");
1720 /* Build an external reference to identifier ID. FUN indicates
1721 whether this will be used for a function call. */
1722 tree
1723 build_external_ref (tree id, int fun)
1725 tree ref;
1726 tree decl = lookup_name (id);
1727 tree objc_ivar = objc_lookup_ivar (id);
1729 if (decl && decl != error_mark_node)
1731 /* Properly declared variable or function reference. */
1732 if (!objc_ivar)
1733 ref = decl;
1734 else if (decl != objc_ivar && !DECL_FILE_SCOPE_P (decl))
1736 warning ("local declaration of %qs hides instance variable",
1737 IDENTIFIER_POINTER (id));
1738 ref = decl;
1740 else
1741 ref = objc_ivar;
1743 else if (objc_ivar)
1744 ref = objc_ivar;
1745 else if (fun)
1746 /* Implicit function declaration. */
1747 ref = implicitly_declare (id);
1748 else if (decl == error_mark_node)
1749 /* Don't complain about something that's already been
1750 complained about. */
1751 return error_mark_node;
1752 else
1754 undeclared_variable (id);
1755 return error_mark_node;
1758 if (TREE_TYPE (ref) == error_mark_node)
1759 return error_mark_node;
1761 if (TREE_DEPRECATED (ref))
1762 warn_deprecated_use (ref);
1764 if (!skip_evaluation)
1765 assemble_external (ref);
1766 TREE_USED (ref) = 1;
1768 if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
1770 if (!in_sizeof && !in_typeof)
1771 C_DECL_USED (ref) = 1;
1772 else if (DECL_INITIAL (ref) == 0
1773 && DECL_EXTERNAL (ref)
1774 && !TREE_PUBLIC (ref))
1775 record_maybe_used_decl (ref);
1778 if (TREE_CODE (ref) == CONST_DECL)
1780 ref = DECL_INITIAL (ref);
1781 TREE_CONSTANT (ref) = 1;
1782 TREE_INVARIANT (ref) = 1;
1784 else if (current_function_decl != 0
1785 && !DECL_FILE_SCOPE_P (current_function_decl)
1786 && (TREE_CODE (ref) == VAR_DECL
1787 || TREE_CODE (ref) == PARM_DECL
1788 || TREE_CODE (ref) == FUNCTION_DECL))
1790 tree context = decl_function_context (ref);
1792 if (context != 0 && context != current_function_decl)
1793 DECL_NONLOCAL (ref) = 1;
1796 return ref;
1799 /* Record details of decls possibly used inside sizeof or typeof. */
1800 struct maybe_used_decl
1802 /* The decl. */
1803 tree decl;
1804 /* The level seen at (in_sizeof + in_typeof). */
1805 int level;
1806 /* The next one at this level or above, or NULL. */
1807 struct maybe_used_decl *next;
1810 static struct maybe_used_decl *maybe_used_decls;
1812 /* Record that DECL, an undefined static function reference seen
1813 inside sizeof or typeof, might be used if the operand of sizeof is
1814 a VLA type or the operand of typeof is a variably modified
1815 type. */
1817 void
1818 record_maybe_used_decl (tree decl)
1820 struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
1821 t->decl = decl;
1822 t->level = in_sizeof + in_typeof;
1823 t->next = maybe_used_decls;
1824 maybe_used_decls = t;
1827 /* Pop the stack of decls possibly used inside sizeof or typeof. If
1828 USED is false, just discard them. If it is true, mark them used
1829 (if no longer inside sizeof or typeof) or move them to the next
1830 level up (if still inside sizeof or typeof). */
1832 void
1833 pop_maybe_used (bool used)
1835 struct maybe_used_decl *p = maybe_used_decls;
1836 int cur_level = in_sizeof + in_typeof;
1837 while (p && p->level > cur_level)
1839 if (used)
1841 if (cur_level == 0)
1842 C_DECL_USED (p->decl) = 1;
1843 else
1844 p->level = cur_level;
1846 p = p->next;
1848 if (!used || cur_level == 0)
1849 maybe_used_decls = p;
1852 /* Return the result of sizeof applied to EXPR. */
1854 struct c_expr
1855 c_expr_sizeof_expr (struct c_expr expr)
1857 struct c_expr ret;
1858 if (expr.value == error_mark_node)
1860 ret.value = error_mark_node;
1861 ret.original_code = ERROR_MARK;
1862 pop_maybe_used (false);
1864 else
1866 ret.value = c_sizeof (TREE_TYPE (expr.value));
1867 ret.original_code = ERROR_MARK;
1868 pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
1870 return ret;
1873 /* Return the result of sizeof applied to T, a structure for the type
1874 name passed to sizeof (rather than the type itself). */
1876 struct c_expr
1877 c_expr_sizeof_type (struct c_type_name *t)
1879 tree type;
1880 struct c_expr ret;
1881 type = groktypename (t);
1882 ret.value = c_sizeof (type);
1883 ret.original_code = ERROR_MARK;
1884 pop_maybe_used (C_TYPE_VARIABLE_SIZE (type));
1885 return ret;
1888 /* Build a function call to function FUNCTION with parameters PARAMS.
1889 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1890 TREE_VALUE of each node is a parameter-expression.
1891 FUNCTION's data type may be a function type or a pointer-to-function. */
1893 tree
1894 build_function_call (tree function, tree params)
1896 tree fntype, fundecl = 0;
1897 tree coerced_params;
1898 tree name = NULL_TREE, result;
1899 tree tem;
1901 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1902 STRIP_TYPE_NOPS (function);
1904 /* Convert anything with function type to a pointer-to-function. */
1905 if (TREE_CODE (function) == FUNCTION_DECL)
1907 name = DECL_NAME (function);
1909 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1910 (because calling an inline function does not mean the function
1911 needs to be separately compiled). */
1912 fntype = build_type_variant (TREE_TYPE (function),
1913 TREE_READONLY (function),
1914 TREE_THIS_VOLATILE (function));
1915 fundecl = function;
1916 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1918 else
1919 function = default_conversion (function);
1921 fntype = TREE_TYPE (function);
1923 if (TREE_CODE (fntype) == ERROR_MARK)
1924 return error_mark_node;
1926 if (!(TREE_CODE (fntype) == POINTER_TYPE
1927 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1929 error ("called object %qE is not a function", function);
1930 return error_mark_node;
1933 if (fundecl && TREE_THIS_VOLATILE (fundecl))
1934 current_function_returns_abnormally = 1;
1936 /* fntype now gets the type of function pointed to. */
1937 fntype = TREE_TYPE (fntype);
1939 /* Check that the function is called through a compatible prototype.
1940 If it is not, replace the call by a trap, wrapped up in a compound
1941 expression if necessary. This has the nice side-effect to prevent
1942 the tree-inliner from generating invalid assignment trees which may
1943 blow up in the RTL expander later.
1945 ??? This doesn't work for Objective-C because objc_comptypes
1946 refuses to compare function prototypes, yet the compiler appears
1947 to build calls that are flagged as invalid by C's comptypes. */
1948 if (!c_dialect_objc ()
1949 && TREE_CODE (function) == NOP_EXPR
1950 && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
1951 && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
1952 && !comptypes (fntype, TREE_TYPE (tem)))
1954 tree return_type = TREE_TYPE (fntype);
1955 tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
1956 NULL_TREE);
1958 /* This situation leads to run-time undefined behavior. We can't,
1959 therefore, simply error unless we can prove that all possible
1960 executions of the program must execute the code. */
1961 warning ("function called through a non-compatible type");
1963 /* We can, however, treat "undefined" any way we please.
1964 Call abort to encourage the user to fix the program. */
1965 inform ("if this code is reached, the program will abort");
1967 if (VOID_TYPE_P (return_type))
1968 return trap;
1969 else
1971 tree rhs;
1973 if (AGGREGATE_TYPE_P (return_type))
1974 rhs = build_compound_literal (return_type,
1975 build_constructor (return_type,
1976 NULL_TREE));
1977 else
1978 rhs = fold (build1 (NOP_EXPR, return_type, integer_zero_node));
1980 return build2 (COMPOUND_EXPR, return_type, trap, rhs);
1984 /* Convert the parameters to the types declared in the
1985 function prototype, or apply default promotions. */
1987 coerced_params
1988 = convert_arguments (TYPE_ARG_TYPES (fntype), params, function, fundecl);
1990 /* Check that the arguments to the function are valid. */
1992 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
1994 result = build3 (CALL_EXPR, TREE_TYPE (fntype),
1995 function, coerced_params, NULL_TREE);
1996 TREE_SIDE_EFFECTS (result) = 1;
1998 if (require_constant_value)
2000 result = fold_initializer (result);
2002 if (TREE_CONSTANT (result)
2003 && (name == NULL_TREE
2004 || strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10) != 0))
2005 pedwarn_init ("initializer element is not constant");
2007 else
2008 result = fold (result);
2010 if (VOID_TYPE_P (TREE_TYPE (result)))
2011 return result;
2012 return require_complete_type (result);
2015 /* Convert the argument expressions in the list VALUES
2016 to the types in the list TYPELIST. The result is a list of converted
2017 argument expressions.
2019 If TYPELIST is exhausted, or when an element has NULL as its type,
2020 perform the default conversions.
2022 PARMLIST is the chain of parm decls for the function being called.
2023 It may be 0, if that info is not available.
2024 It is used only for generating error messages.
2026 FUNCTION is a tree for the called function. It is used only for
2027 error messages, where it is formatted with %qE.
2029 This is also where warnings about wrong number of args are generated.
2031 Both VALUES and the returned value are chains of TREE_LIST nodes
2032 with the elements of the list in the TREE_VALUE slots of those nodes. */
2034 static tree
2035 convert_arguments (tree typelist, tree values, tree function, tree fundecl)
2037 tree typetail, valtail;
2038 tree result = NULL;
2039 int parmnum;
2040 tree selector;
2042 /* Change pointer to function to the function itself for
2043 diagnostics. */
2044 if (TREE_CODE (function) == ADDR_EXPR
2045 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
2046 function = TREE_OPERAND (function, 0);
2048 /* Handle an ObjC selector specially for diagnostics. */
2049 selector = objc_message_selector ();
2051 /* Scan the given expressions and types, producing individual
2052 converted arguments and pushing them on RESULT in reverse order. */
2054 for (valtail = values, typetail = typelist, parmnum = 0;
2055 valtail;
2056 valtail = TREE_CHAIN (valtail), parmnum++)
2058 tree type = typetail ? TREE_VALUE (typetail) : 0;
2059 tree val = TREE_VALUE (valtail);
2060 tree rname = function;
2061 int argnum = parmnum + 1;
2063 if (type == void_type_node)
2065 error ("too many arguments to function %qE", function);
2066 break;
2069 if (selector && argnum > 2)
2071 rname = selector;
2072 argnum -= 2;
2075 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
2076 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
2077 to convert automatically to a pointer. */
2078 if (TREE_CODE (val) == NON_LVALUE_EXPR)
2079 val = TREE_OPERAND (val, 0);
2081 val = default_function_array_conversion (val);
2083 val = require_complete_type (val);
2085 if (type != 0)
2087 /* Formal parm type is specified by a function prototype. */
2088 tree parmval;
2090 if (!COMPLETE_TYPE_P (type))
2092 error ("type of formal parameter %d is incomplete", parmnum + 1);
2093 parmval = val;
2095 else
2097 /* Optionally warn about conversions that
2098 differ from the default conversions. */
2099 if (warn_conversion || warn_traditional)
2101 unsigned int formal_prec = TYPE_PRECISION (type);
2103 if (INTEGRAL_TYPE_P (type)
2104 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2105 warning ("passing argument %d of %qE as integer "
2106 "rather than floating due to prototype",
2107 argnum, rname);
2108 if (INTEGRAL_TYPE_P (type)
2109 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2110 warning ("passing argument %d of %qE as integer "
2111 "rather than complex due to prototype",
2112 argnum, rname);
2113 else if (TREE_CODE (type) == COMPLEX_TYPE
2114 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2115 warning ("passing argument %d of %qE as complex "
2116 "rather than floating due to prototype",
2117 argnum, rname);
2118 else if (TREE_CODE (type) == REAL_TYPE
2119 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2120 warning ("passing argument %d of %qE as floating "
2121 "rather than integer due to prototype",
2122 argnum, rname);
2123 else if (TREE_CODE (type) == COMPLEX_TYPE
2124 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2125 warning ("passing argument %d of %qE as complex "
2126 "rather than integer due to prototype",
2127 argnum, rname);
2128 else if (TREE_CODE (type) == REAL_TYPE
2129 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2130 warning ("passing argument %d of %qE as floating "
2131 "rather than complex due to prototype",
2132 argnum, rname);
2133 /* ??? At some point, messages should be written about
2134 conversions between complex types, but that's too messy
2135 to do now. */
2136 else if (TREE_CODE (type) == REAL_TYPE
2137 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2139 /* Warn if any argument is passed as `float',
2140 since without a prototype it would be `double'. */
2141 if (formal_prec == TYPE_PRECISION (float_type_node))
2142 warning ("passing argument %d of %qE as %<float%> "
2143 "rather than %<double%> due to prototype",
2144 argnum, rname);
2146 /* Detect integer changing in width or signedness.
2147 These warnings are only activated with
2148 -Wconversion, not with -Wtraditional. */
2149 else if (warn_conversion && INTEGRAL_TYPE_P (type)
2150 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2152 tree would_have_been = default_conversion (val);
2153 tree type1 = TREE_TYPE (would_have_been);
2155 if (TREE_CODE (type) == ENUMERAL_TYPE
2156 && (TYPE_MAIN_VARIANT (type)
2157 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
2158 /* No warning if function asks for enum
2159 and the actual arg is that enum type. */
2161 else if (formal_prec != TYPE_PRECISION (type1))
2162 warning ("passing argument %d of %qE with different "
2163 "width due to prototype", argnum, rname);
2164 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
2166 /* Don't complain if the formal parameter type
2167 is an enum, because we can't tell now whether
2168 the value was an enum--even the same enum. */
2169 else if (TREE_CODE (type) == ENUMERAL_TYPE)
2171 else if (TREE_CODE (val) == INTEGER_CST
2172 && int_fits_type_p (val, type))
2173 /* Change in signedness doesn't matter
2174 if a constant value is unaffected. */
2176 /* Likewise for a constant in a NOP_EXPR. */
2177 else if (TREE_CODE (val) == NOP_EXPR
2178 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
2179 && int_fits_type_p (TREE_OPERAND (val, 0), type))
2181 /* If the value is extended from a narrower
2182 unsigned type, it doesn't matter whether we
2183 pass it as signed or unsigned; the value
2184 certainly is the same either way. */
2185 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
2186 && TYPE_UNSIGNED (TREE_TYPE (val)))
2188 else if (TYPE_UNSIGNED (type))
2189 warning ("passing argument %d of %qE as unsigned "
2190 "due to prototype", argnum, rname);
2191 else
2192 warning ("passing argument %d of %qE as signed "
2193 "due to prototype", argnum, rname);
2197 parmval = convert_for_assignment (type, val, ic_argpass,
2198 fundecl, function,
2199 parmnum + 1);
2201 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
2202 && INTEGRAL_TYPE_P (type)
2203 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
2204 parmval = default_conversion (parmval);
2206 result = tree_cons (NULL_TREE, parmval, result);
2208 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
2209 && (TYPE_PRECISION (TREE_TYPE (val))
2210 < TYPE_PRECISION (double_type_node)))
2211 /* Convert `float' to `double'. */
2212 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
2213 else
2214 /* Convert `short' and `char' to full-size `int'. */
2215 result = tree_cons (NULL_TREE, default_conversion (val), result);
2217 if (typetail)
2218 typetail = TREE_CHAIN (typetail);
2221 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
2222 error ("too few arguments to function %qE", function);
2224 return nreverse (result);
2227 /* This is the entry point used by the parser
2228 for binary operators in the input.
2229 In addition to constructing the expression,
2230 we check for operands that were written with other binary operators
2231 in a way that is likely to confuse the user. */
2233 struct c_expr
2234 parser_build_binary_op (enum tree_code code, struct c_expr arg1,
2235 struct c_expr arg2)
2237 struct c_expr result;
2239 enum tree_code code1 = arg1.original_code;
2240 enum tree_code code2 = arg2.original_code;
2242 result.value = build_binary_op (code, arg1.value, arg2.value, 1);
2243 result.original_code = code;
2245 if (TREE_CODE (result.value) == ERROR_MARK)
2246 return result;
2248 /* Check for cases such as x+y<<z which users are likely
2249 to misinterpret. */
2250 if (warn_parentheses)
2252 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
2254 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2255 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2256 warning ("suggest parentheses around + or - inside shift");
2259 if (code == TRUTH_ORIF_EXPR)
2261 if (code1 == TRUTH_ANDIF_EXPR
2262 || code2 == TRUTH_ANDIF_EXPR)
2263 warning ("suggest parentheses around && within ||");
2266 if (code == BIT_IOR_EXPR)
2268 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
2269 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2270 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
2271 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2272 warning ("suggest parentheses around arithmetic in operand of |");
2273 /* Check cases like x|y==z */
2274 if (TREE_CODE_CLASS (code1) == tcc_comparison
2275 || TREE_CODE_CLASS (code2) == tcc_comparison)
2276 warning ("suggest parentheses around comparison in operand of |");
2279 if (code == BIT_XOR_EXPR)
2281 if (code1 == BIT_AND_EXPR
2282 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2283 || code2 == BIT_AND_EXPR
2284 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2285 warning ("suggest parentheses around arithmetic in operand of ^");
2286 /* Check cases like x^y==z */
2287 if (TREE_CODE_CLASS (code1) == tcc_comparison
2288 || TREE_CODE_CLASS (code2) == tcc_comparison)
2289 warning ("suggest parentheses around comparison in operand of ^");
2292 if (code == BIT_AND_EXPR)
2294 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2295 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2296 warning ("suggest parentheses around + or - in operand of &");
2297 /* Check cases like x&y==z */
2298 if (TREE_CODE_CLASS (code1) == tcc_comparison
2299 || TREE_CODE_CLASS (code2) == tcc_comparison)
2300 warning ("suggest parentheses around comparison in operand of &");
2302 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
2303 if (TREE_CODE_CLASS (code) == tcc_comparison
2304 && (TREE_CODE_CLASS (code1) == tcc_comparison
2305 || TREE_CODE_CLASS (code2) == tcc_comparison))
2306 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
2310 unsigned_conversion_warning (result.value, arg1.value);
2311 unsigned_conversion_warning (result.value, arg2.value);
2312 overflow_warning (result.value);
2314 return result;
2317 /* Return a tree for the difference of pointers OP0 and OP1.
2318 The resulting tree has type int. */
2320 static tree
2321 pointer_diff (tree op0, tree op1)
2323 tree restype = ptrdiff_type_node;
2325 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2326 tree con0, con1, lit0, lit1;
2327 tree orig_op1 = op1;
2329 if (pedantic || warn_pointer_arith)
2331 if (TREE_CODE (target_type) == VOID_TYPE)
2332 pedwarn ("pointer of type %<void *%> used in subtraction");
2333 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2334 pedwarn ("pointer to a function used in subtraction");
2337 /* If the conversion to ptrdiff_type does anything like widening or
2338 converting a partial to an integral mode, we get a convert_expression
2339 that is in the way to do any simplifications.
2340 (fold-const.c doesn't know that the extra bits won't be needed.
2341 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2342 different mode in place.)
2343 So first try to find a common term here 'by hand'; we want to cover
2344 at least the cases that occur in legal static initializers. */
2345 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2346 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
2348 if (TREE_CODE (con0) == PLUS_EXPR)
2350 lit0 = TREE_OPERAND (con0, 1);
2351 con0 = TREE_OPERAND (con0, 0);
2353 else
2354 lit0 = integer_zero_node;
2356 if (TREE_CODE (con1) == PLUS_EXPR)
2358 lit1 = TREE_OPERAND (con1, 1);
2359 con1 = TREE_OPERAND (con1, 0);
2361 else
2362 lit1 = integer_zero_node;
2364 if (operand_equal_p (con0, con1, 0))
2366 op0 = lit0;
2367 op1 = lit1;
2371 /* First do the subtraction as integers;
2372 then drop through to build the divide operator.
2373 Do not do default conversions on the minus operator
2374 in case restype is a short type. */
2376 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2377 convert (restype, op1), 0);
2378 /* This generates an error if op1 is pointer to incomplete type. */
2379 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2380 error ("arithmetic on pointer to an incomplete type");
2382 /* This generates an error if op0 is pointer to incomplete type. */
2383 op1 = c_size_in_bytes (target_type);
2385 /* Divide by the size, in easiest possible way. */
2386 return fold (build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1)));
2389 /* Construct and perhaps optimize a tree representation
2390 for a unary operation. CODE, a tree_code, specifies the operation
2391 and XARG is the operand.
2392 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2393 the default promotions (such as from short to int).
2394 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2395 allows non-lvalues; this is only used to handle conversion of non-lvalue
2396 arrays to pointers in C99. */
2398 tree
2399 build_unary_op (enum tree_code code, tree xarg, int flag)
2401 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2402 tree arg = xarg;
2403 tree argtype = 0;
2404 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2405 tree val;
2406 int noconvert = flag;
2408 if (typecode == ERROR_MARK)
2409 return error_mark_node;
2410 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2411 typecode = INTEGER_TYPE;
2413 switch (code)
2415 case CONVERT_EXPR:
2416 /* This is used for unary plus, because a CONVERT_EXPR
2417 is enough to prevent anybody from looking inside for
2418 associativity, but won't generate any code. */
2419 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2420 || typecode == COMPLEX_TYPE
2421 || typecode == VECTOR_TYPE))
2423 error ("wrong type argument to unary plus");
2424 return error_mark_node;
2426 else if (!noconvert)
2427 arg = default_conversion (arg);
2428 arg = non_lvalue (arg);
2429 break;
2431 case NEGATE_EXPR:
2432 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2433 || typecode == COMPLEX_TYPE
2434 || typecode == VECTOR_TYPE))
2436 error ("wrong type argument to unary minus");
2437 return error_mark_node;
2439 else if (!noconvert)
2440 arg = default_conversion (arg);
2441 break;
2443 case BIT_NOT_EXPR:
2444 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
2446 if (!noconvert)
2447 arg = default_conversion (arg);
2449 else if (typecode == COMPLEX_TYPE)
2451 code = CONJ_EXPR;
2452 if (pedantic)
2453 pedwarn ("ISO C does not support %<~%> for complex conjugation");
2454 if (!noconvert)
2455 arg = default_conversion (arg);
2457 else
2459 error ("wrong type argument to bit-complement");
2460 return error_mark_node;
2462 break;
2464 case ABS_EXPR:
2465 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
2467 error ("wrong type argument to abs");
2468 return error_mark_node;
2470 else if (!noconvert)
2471 arg = default_conversion (arg);
2472 break;
2474 case CONJ_EXPR:
2475 /* Conjugating a real value is a no-op, but allow it anyway. */
2476 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2477 || typecode == COMPLEX_TYPE))
2479 error ("wrong type argument to conjugation");
2480 return error_mark_node;
2482 else if (!noconvert)
2483 arg = default_conversion (arg);
2484 break;
2486 case TRUTH_NOT_EXPR:
2487 if (typecode != INTEGER_TYPE
2488 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2489 && typecode != COMPLEX_TYPE
2490 /* These will convert to a pointer. */
2491 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2493 error ("wrong type argument to unary exclamation mark");
2494 return error_mark_node;
2496 arg = lang_hooks.truthvalue_conversion (arg);
2497 return invert_truthvalue (arg);
2499 case NOP_EXPR:
2500 break;
2502 case REALPART_EXPR:
2503 if (TREE_CODE (arg) == COMPLEX_CST)
2504 return TREE_REALPART (arg);
2505 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2506 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2507 else
2508 return arg;
2510 case IMAGPART_EXPR:
2511 if (TREE_CODE (arg) == COMPLEX_CST)
2512 return TREE_IMAGPART (arg);
2513 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2514 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2515 else
2516 return convert (TREE_TYPE (arg), integer_zero_node);
2518 case PREINCREMENT_EXPR:
2519 case POSTINCREMENT_EXPR:
2520 case PREDECREMENT_EXPR:
2521 case POSTDECREMENT_EXPR:
2523 /* Increment or decrement the real part of the value,
2524 and don't change the imaginary part. */
2525 if (typecode == COMPLEX_TYPE)
2527 tree real, imag;
2529 if (pedantic)
2530 pedwarn ("ISO C does not support %<++%> and %<--%>"
2531 " on complex types");
2533 arg = stabilize_reference (arg);
2534 real = build_unary_op (REALPART_EXPR, arg, 1);
2535 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2536 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
2537 build_unary_op (code, real, 1), imag);
2540 /* Report invalid types. */
2542 if (typecode != POINTER_TYPE
2543 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2545 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2546 error ("wrong type argument to increment");
2547 else
2548 error ("wrong type argument to decrement");
2550 return error_mark_node;
2554 tree inc;
2555 tree result_type = TREE_TYPE (arg);
2557 arg = get_unwidened (arg, 0);
2558 argtype = TREE_TYPE (arg);
2560 /* Compute the increment. */
2562 if (typecode == POINTER_TYPE)
2564 /* If pointer target is an undefined struct,
2565 we just cannot know how to do the arithmetic. */
2566 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2568 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2569 error ("increment of pointer to unknown structure");
2570 else
2571 error ("decrement of pointer to unknown structure");
2573 else if ((pedantic || warn_pointer_arith)
2574 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2575 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2577 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2578 pedwarn ("wrong type argument to increment");
2579 else
2580 pedwarn ("wrong type argument to decrement");
2583 inc = c_size_in_bytes (TREE_TYPE (result_type));
2585 else
2586 inc = integer_one_node;
2588 inc = convert (argtype, inc);
2590 /* Complain about anything else that is not a true lvalue. */
2591 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2592 || code == POSTINCREMENT_EXPR)
2593 ? lv_increment
2594 : lv_decrement)))
2595 return error_mark_node;
2597 /* Report a read-only lvalue. */
2598 if (TREE_READONLY (arg))
2599 readonly_error (arg,
2600 ((code == PREINCREMENT_EXPR
2601 || code == POSTINCREMENT_EXPR)
2602 ? lv_increment : lv_decrement));
2604 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2605 val = boolean_increment (code, arg);
2606 else
2607 val = build2 (code, TREE_TYPE (arg), arg, inc);
2608 TREE_SIDE_EFFECTS (val) = 1;
2609 val = convert (result_type, val);
2610 if (TREE_CODE (val) != code)
2611 TREE_NO_WARNING (val) = 1;
2612 return val;
2615 case ADDR_EXPR:
2616 /* Note that this operation never does default_conversion. */
2618 /* Let &* cancel out to simplify resulting code. */
2619 if (TREE_CODE (arg) == INDIRECT_REF)
2621 /* Don't let this be an lvalue. */
2622 if (lvalue_p (TREE_OPERAND (arg, 0)))
2623 return non_lvalue (TREE_OPERAND (arg, 0));
2624 return TREE_OPERAND (arg, 0);
2627 /* For &x[y], return x+y */
2628 if (TREE_CODE (arg) == ARRAY_REF)
2630 if (!c_mark_addressable (TREE_OPERAND (arg, 0)))
2631 return error_mark_node;
2632 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
2633 TREE_OPERAND (arg, 1), 1);
2636 /* Anything not already handled and not a true memory reference
2637 or a non-lvalue array is an error. */
2638 else if (typecode != FUNCTION_TYPE && !flag
2639 && !lvalue_or_else (arg, lv_addressof))
2640 return error_mark_node;
2642 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2643 argtype = TREE_TYPE (arg);
2645 /* If the lvalue is const or volatile, merge that into the type
2646 to which the address will point. Note that you can't get a
2647 restricted pointer by taking the address of something, so we
2648 only have to deal with `const' and `volatile' here. */
2649 if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
2650 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
2651 argtype = c_build_type_variant (argtype,
2652 TREE_READONLY (arg),
2653 TREE_THIS_VOLATILE (arg));
2655 if (!c_mark_addressable (arg))
2656 return error_mark_node;
2658 if (TREE_CODE (arg) == COMPONENT_REF
2659 && DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
2661 error ("attempt to take address of bit-field structure member %qD",
2662 TREE_OPERAND (arg, 1));
2663 return error_mark_node;
2666 argtype = build_pointer_type (argtype);
2668 /* ??? Cope with user tricks that amount to offsetof. Delete this
2669 when we have proper support for integer constant expressions. */
2670 val = get_base_address (arg);
2671 if (val && TREE_CODE (val) == INDIRECT_REF
2672 && integer_zerop (TREE_OPERAND (val, 0)))
2673 return fold_convert (argtype, fold_offsetof (arg));
2675 val = build1 (ADDR_EXPR, argtype, arg);
2677 if (TREE_CODE (arg) == COMPOUND_LITERAL_EXPR)
2678 TREE_INVARIANT (val) = TREE_CONSTANT (val) = 1;
2680 return val;
2682 default:
2683 break;
2686 if (argtype == 0)
2687 argtype = TREE_TYPE (arg);
2688 val = build1 (code, argtype, arg);
2689 return require_constant_value ? fold_initializer (val) : fold (val);
2692 /* Return nonzero if REF is an lvalue valid for this language.
2693 Lvalues can be assigned, unless their type has TYPE_READONLY.
2694 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
2697 lvalue_p (tree ref)
2699 enum tree_code code = TREE_CODE (ref);
2701 switch (code)
2703 case REALPART_EXPR:
2704 case IMAGPART_EXPR:
2705 case COMPONENT_REF:
2706 return lvalue_p (TREE_OPERAND (ref, 0));
2708 case COMPOUND_LITERAL_EXPR:
2709 case STRING_CST:
2710 return 1;
2712 case INDIRECT_REF:
2713 case ARRAY_REF:
2714 case VAR_DECL:
2715 case PARM_DECL:
2716 case RESULT_DECL:
2717 case ERROR_MARK:
2718 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
2719 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
2721 case BIND_EXPR:
2722 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
2724 default:
2725 return 0;
2729 /* Return nonzero if REF is an lvalue valid for this language;
2730 otherwise, print an error message and return zero. USE says
2731 how the lvalue is being used and so selects the error message. */
2733 static int
2734 lvalue_or_else (tree ref, enum lvalue_use use)
2736 int win = lvalue_p (ref);
2738 if (!win)
2740 switch (use)
2742 case lv_assign:
2743 error ("invalid lvalue in assignment");
2744 break;
2745 case lv_increment:
2746 error ("invalid lvalue in increment");
2747 break;
2748 case lv_decrement:
2749 error ("invalid lvalue in decrement");
2750 break;
2751 case lv_addressof:
2752 error ("invalid lvalue in unary %<&%>");
2753 break;
2754 case lv_asm:
2755 error ("invalid lvalue in asm statement");
2756 break;
2757 default:
2758 gcc_unreachable ();
2762 return win;
2766 /* Give an error for storing in something that is 'const'. */
2768 static void
2769 readonly_error (tree arg, enum lvalue_use use)
2771 gcc_assert (use == lv_assign || use == lv_increment || use == lv_decrement);
2772 /* Using this macro rather than (for example) arrays of messages
2773 ensures that all the format strings are checked at compile
2774 time. */
2775 #define READONLY_MSG(A, I, D) (use == lv_assign \
2776 ? (A) \
2777 : (use == lv_increment ? (I) : (D)))
2778 if (TREE_CODE (arg) == COMPONENT_REF)
2780 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
2781 readonly_error (TREE_OPERAND (arg, 0), use);
2782 else
2783 error (READONLY_MSG (N_("assignment of read-only member %qs"),
2784 N_("increment of read-only member %qs"),
2785 N_("decrement of read-only member %qs")),
2786 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
2788 else if (TREE_CODE (arg) == VAR_DECL)
2789 error (READONLY_MSG (N_("assignment of read-only variable %qs"),
2790 N_("increment of read-only variable %qs"),
2791 N_("decrement of read-only variable %qs")),
2792 IDENTIFIER_POINTER (DECL_NAME (arg)));
2793 else
2794 error (READONLY_MSG (N_("assignment of read-only location"),
2795 N_("increment of read-only location"),
2796 N_("decrement of read-only location")));
2799 /* Mark EXP saying that we need to be able to take the
2800 address of it; it should not be allocated in a register.
2801 Returns true if successful. */
2803 bool
2804 c_mark_addressable (tree exp)
2806 tree x = exp;
2808 while (1)
2809 switch (TREE_CODE (x))
2811 case COMPONENT_REF:
2812 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
2814 error ("cannot take address of bit-field %qs",
2815 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
2816 return false;
2819 /* ... fall through ... */
2821 case ADDR_EXPR:
2822 case ARRAY_REF:
2823 case REALPART_EXPR:
2824 case IMAGPART_EXPR:
2825 x = TREE_OPERAND (x, 0);
2826 break;
2828 case COMPOUND_LITERAL_EXPR:
2829 case CONSTRUCTOR:
2830 TREE_ADDRESSABLE (x) = 1;
2831 return true;
2833 case VAR_DECL:
2834 case CONST_DECL:
2835 case PARM_DECL:
2836 case RESULT_DECL:
2837 if (C_DECL_REGISTER (x)
2838 && DECL_NONLOCAL (x))
2840 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2842 error ("global register variable %qs used in nested function",
2843 IDENTIFIER_POINTER (DECL_NAME (x)));
2844 return false;
2846 pedwarn ("register variable %qs used in nested function",
2847 IDENTIFIER_POINTER (DECL_NAME (x)));
2849 else if (C_DECL_REGISTER (x))
2851 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2853 error ("address of global register variable %qs requested",
2854 IDENTIFIER_POINTER (DECL_NAME (x)));
2855 return false;
2858 pedwarn ("address of register variable %qs requested",
2859 IDENTIFIER_POINTER (DECL_NAME (x)));
2862 /* drops in */
2863 case FUNCTION_DECL:
2864 TREE_ADDRESSABLE (x) = 1;
2865 /* drops out */
2866 default:
2867 return true;
2871 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
2873 tree
2874 build_conditional_expr (tree ifexp, tree op1, tree op2)
2876 tree type1;
2877 tree type2;
2878 enum tree_code code1;
2879 enum tree_code code2;
2880 tree result_type = NULL;
2881 tree orig_op1 = op1, orig_op2 = op2;
2883 ifexp = lang_hooks.truthvalue_conversion (default_conversion (ifexp));
2885 /* Promote both alternatives. */
2887 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
2888 op1 = default_conversion (op1);
2889 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
2890 op2 = default_conversion (op2);
2892 if (TREE_CODE (ifexp) == ERROR_MARK
2893 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
2894 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
2895 return error_mark_node;
2897 type1 = TREE_TYPE (op1);
2898 code1 = TREE_CODE (type1);
2899 type2 = TREE_TYPE (op2);
2900 code2 = TREE_CODE (type2);
2902 /* C90 does not permit non-lvalue arrays in conditional expressions.
2903 In C99 they will be pointers by now. */
2904 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
2906 error ("non-lvalue array in conditional expression");
2907 return error_mark_node;
2910 /* Quickly detect the usual case where op1 and op2 have the same type
2911 after promotion. */
2912 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
2914 if (type1 == type2)
2915 result_type = type1;
2916 else
2917 result_type = TYPE_MAIN_VARIANT (type1);
2919 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
2920 || code1 == COMPLEX_TYPE)
2921 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
2922 || code2 == COMPLEX_TYPE))
2924 result_type = common_type (type1, type2);
2926 /* If -Wsign-compare, warn here if type1 and type2 have
2927 different signedness. We'll promote the signed to unsigned
2928 and later code won't know it used to be different.
2929 Do this check on the original types, so that explicit casts
2930 will be considered, but default promotions won't. */
2931 if (warn_sign_compare && !skip_evaluation)
2933 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
2934 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
2936 if (unsigned_op1 ^ unsigned_op2)
2938 /* Do not warn if the result type is signed, since the
2939 signed type will only be chosen if it can represent
2940 all the values of the unsigned type. */
2941 if (!TYPE_UNSIGNED (result_type))
2942 /* OK */;
2943 /* Do not warn if the signed quantity is an unsuffixed
2944 integer literal (or some static constant expression
2945 involving such literals) and it is non-negative. */
2946 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
2947 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
2948 /* OK */;
2949 else
2950 warning ("signed and unsigned type in conditional expression");
2954 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
2956 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
2957 pedwarn ("ISO C forbids conditional expr with only one void side");
2958 result_type = void_type_node;
2960 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
2962 if (comp_target_types (type1, type2, 1))
2963 result_type = common_pointer_type (type1, type2);
2964 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
2965 && TREE_CODE (orig_op1) != NOP_EXPR)
2966 result_type = qualify_type (type2, type1);
2967 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
2968 && TREE_CODE (orig_op2) != NOP_EXPR)
2969 result_type = qualify_type (type1, type2);
2970 else if (VOID_TYPE_P (TREE_TYPE (type1)))
2972 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
2973 pedwarn ("ISO C forbids conditional expr between "
2974 "%<void *%> and function pointer");
2975 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
2976 TREE_TYPE (type2)));
2978 else if (VOID_TYPE_P (TREE_TYPE (type2)))
2980 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
2981 pedwarn ("ISO C forbids conditional expr between "
2982 "%<void *%> and function pointer");
2983 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
2984 TREE_TYPE (type1)));
2986 else
2988 pedwarn ("pointer type mismatch in conditional expression");
2989 result_type = build_pointer_type (void_type_node);
2992 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
2994 if (!integer_zerop (op2))
2995 pedwarn ("pointer/integer type mismatch in conditional expression");
2996 else
2998 op2 = null_pointer_node;
3000 result_type = type1;
3002 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3004 if (!integer_zerop (op1))
3005 pedwarn ("pointer/integer type mismatch in conditional expression");
3006 else
3008 op1 = null_pointer_node;
3010 result_type = type2;
3013 if (!result_type)
3015 if (flag_cond_mismatch)
3016 result_type = void_type_node;
3017 else
3019 error ("type mismatch in conditional expression");
3020 return error_mark_node;
3024 /* Merge const and volatile flags of the incoming types. */
3025 result_type
3026 = build_type_variant (result_type,
3027 TREE_READONLY (op1) || TREE_READONLY (op2),
3028 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3030 if (result_type != TREE_TYPE (op1))
3031 op1 = convert_and_check (result_type, op1);
3032 if (result_type != TREE_TYPE (op2))
3033 op2 = convert_and_check (result_type, op2);
3035 if (TREE_CODE (ifexp) == INTEGER_CST)
3036 return non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3038 return fold (build3 (COND_EXPR, result_type, ifexp, op1, op2));
3041 /* Return a compound expression that performs two expressions and
3042 returns the value of the second of them. */
3044 tree
3045 build_compound_expr (tree expr1, tree expr2)
3047 /* Convert arrays and functions to pointers. */
3048 expr2 = default_function_array_conversion (expr2);
3050 /* Don't let (0, 0) be null pointer constant. */
3051 if (integer_zerop (expr2))
3052 expr2 = non_lvalue (expr2);
3054 if (!TREE_SIDE_EFFECTS (expr1))
3056 /* The left-hand operand of a comma expression is like an expression
3057 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3058 any side-effects, unless it was explicitly cast to (void). */
3059 if (warn_unused_value
3060 && !(TREE_CODE (expr1) == CONVERT_EXPR
3061 && VOID_TYPE_P (TREE_TYPE (expr1))))
3062 warning ("left-hand operand of comma expression has no effect");
3065 /* With -Wunused, we should also warn if the left-hand operand does have
3066 side-effects, but computes a value which is not used. For example, in
3067 `foo() + bar(), baz()' the result of the `+' operator is not used,
3068 so we should issue a warning. */
3069 else if (warn_unused_value)
3070 warn_if_unused_value (expr1, input_location);
3072 return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
3075 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3077 tree
3078 build_c_cast (tree type, tree expr)
3080 tree value = expr;
3082 if (type == error_mark_node || expr == error_mark_node)
3083 return error_mark_node;
3085 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3086 only in <protocol> qualifications. But when constructing cast expressions,
3087 the protocols do matter and must be kept around. */
3088 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
3089 return build1 (NOP_EXPR, type, expr);
3091 type = TYPE_MAIN_VARIANT (type);
3093 if (TREE_CODE (type) == ARRAY_TYPE)
3095 error ("cast specifies array type");
3096 return error_mark_node;
3099 if (TREE_CODE (type) == FUNCTION_TYPE)
3101 error ("cast specifies function type");
3102 return error_mark_node;
3105 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3107 if (pedantic)
3109 if (TREE_CODE (type) == RECORD_TYPE
3110 || TREE_CODE (type) == UNION_TYPE)
3111 pedwarn ("ISO C forbids casting nonscalar to the same type");
3114 else if (TREE_CODE (type) == UNION_TYPE)
3116 tree field;
3117 value = default_function_array_conversion (value);
3119 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3120 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3121 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3122 break;
3124 if (field)
3126 tree t;
3128 if (pedantic)
3129 pedwarn ("ISO C forbids casts to union type");
3130 t = digest_init (type,
3131 build_constructor (type,
3132 build_tree_list (field, value)),
3133 true, 0);
3134 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3135 TREE_INVARIANT (t) = TREE_INVARIANT (value);
3136 return t;
3138 error ("cast to union type from type not present in union");
3139 return error_mark_node;
3141 else
3143 tree otype, ovalue;
3145 /* If casting to void, avoid the error that would come
3146 from default_conversion in the case of a non-lvalue array. */
3147 if (type == void_type_node)
3148 return build1 (CONVERT_EXPR, type, value);
3150 /* Convert functions and arrays to pointers,
3151 but don't convert any other types. */
3152 value = default_function_array_conversion (value);
3153 otype = TREE_TYPE (value);
3155 /* Optionally warn about potentially worrisome casts. */
3157 if (warn_cast_qual
3158 && TREE_CODE (type) == POINTER_TYPE
3159 && TREE_CODE (otype) == POINTER_TYPE)
3161 tree in_type = type;
3162 tree in_otype = otype;
3163 int added = 0;
3164 int discarded = 0;
3166 /* Check that the qualifiers on IN_TYPE are a superset of
3167 the qualifiers of IN_OTYPE. The outermost level of
3168 POINTER_TYPE nodes is uninteresting and we stop as soon
3169 as we hit a non-POINTER_TYPE node on either type. */
3172 in_otype = TREE_TYPE (in_otype);
3173 in_type = TREE_TYPE (in_type);
3175 /* GNU C allows cv-qualified function types. 'const'
3176 means the function is very pure, 'volatile' means it
3177 can't return. We need to warn when such qualifiers
3178 are added, not when they're taken away. */
3179 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3180 && TREE_CODE (in_type) == FUNCTION_TYPE)
3181 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3182 else
3183 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3185 while (TREE_CODE (in_type) == POINTER_TYPE
3186 && TREE_CODE (in_otype) == POINTER_TYPE);
3188 if (added)
3189 warning ("cast adds new qualifiers to function type");
3191 if (discarded)
3192 /* There are qualifiers present in IN_OTYPE that are not
3193 present in IN_TYPE. */
3194 warning ("cast discards qualifiers from pointer target type");
3197 /* Warn about possible alignment problems. */
3198 if (STRICT_ALIGNMENT && warn_cast_align
3199 && TREE_CODE (type) == POINTER_TYPE
3200 && TREE_CODE (otype) == POINTER_TYPE
3201 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3202 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3203 /* Don't warn about opaque types, where the actual alignment
3204 restriction is unknown. */
3205 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3206 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3207 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3208 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3209 warning ("cast increases required alignment of target type");
3211 if (TREE_CODE (type) == INTEGER_TYPE
3212 && TREE_CODE (otype) == POINTER_TYPE
3213 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3214 && !TREE_CONSTANT (value))
3215 warning ("cast from pointer to integer of different size");
3217 if (warn_bad_function_cast
3218 && TREE_CODE (value) == CALL_EXPR
3219 && TREE_CODE (type) != TREE_CODE (otype))
3220 warning ("cast from function call of type %qT to non-matching "
3221 "type %qT", otype, type);
3223 if (TREE_CODE (type) == POINTER_TYPE
3224 && TREE_CODE (otype) == INTEGER_TYPE
3225 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3226 /* Don't warn about converting any constant. */
3227 && !TREE_CONSTANT (value))
3228 warning ("cast to pointer from integer of different size");
3230 if (TREE_CODE (type) == POINTER_TYPE
3231 && TREE_CODE (otype) == POINTER_TYPE
3232 && TREE_CODE (expr) == ADDR_EXPR
3233 && DECL_P (TREE_OPERAND (expr, 0))
3234 && flag_strict_aliasing && warn_strict_aliasing
3235 && !VOID_TYPE_P (TREE_TYPE (type)))
3237 /* Casting the address of a decl to non void pointer. Warn
3238 if the cast breaks type based aliasing. */
3239 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3240 warning ("type-punning to incomplete type might break strict-aliasing rules");
3241 else
3243 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
3244 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
3246 if (!alias_sets_conflict_p (set1, set2))
3247 warning ("dereferencing type-punned pointer will break strict-aliasing rules");
3248 else if (warn_strict_aliasing > 1
3249 && !alias_sets_might_conflict_p (set1, set2))
3250 warning ("dereferencing type-punned pointer might break strict-aliasing rules");
3254 /* If pedantic, warn for conversions between function and object
3255 pointer types, except for converting a null pointer constant
3256 to function pointer type. */
3257 if (pedantic
3258 && TREE_CODE (type) == POINTER_TYPE
3259 && TREE_CODE (otype) == POINTER_TYPE
3260 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3261 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3262 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3264 if (pedantic
3265 && TREE_CODE (type) == POINTER_TYPE
3266 && TREE_CODE (otype) == POINTER_TYPE
3267 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3268 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3269 && !(integer_zerop (value) && TREE_TYPE (otype) == void_type_node
3270 && TREE_CODE (expr) != NOP_EXPR))
3271 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3273 ovalue = value;
3274 /* Replace a nonvolatile const static variable with its value. */
3275 if (optimize && TREE_CODE (value) == VAR_DECL)
3276 value = decl_constant_value (value);
3277 value = convert (type, value);
3279 /* Ignore any integer overflow caused by the cast. */
3280 if (TREE_CODE (value) == INTEGER_CST)
3282 if (EXPR_P (ovalue))
3283 /* If OVALUE had overflow set, then so will VALUE, so it
3284 is safe to overwrite. */
3285 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3286 else
3287 TREE_OVERFLOW (value) = 0;
3289 if (CONSTANT_CLASS_P (ovalue))
3290 /* Similarly, constant_overflow cannot have become
3291 cleared. */
3292 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3296 /* Don't let (void *) (FOO *) 0 be a null pointer constant. */
3297 if (TREE_CODE (value) == INTEGER_CST
3298 && TREE_CODE (expr) == INTEGER_CST
3299 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3300 value = non_lvalue (value);
3302 /* Don't let a cast be an lvalue. */
3303 if (value == expr)
3304 value = non_lvalue (value);
3306 return value;
3309 /* Interpret a cast of expression EXPR to type TYPE. */
3310 tree
3311 c_cast_expr (struct c_type_name *type_name, tree expr)
3313 tree type;
3314 int saved_wsp = warn_strict_prototypes;
3316 /* This avoids warnings about unprototyped casts on
3317 integers. E.g. "#define SIG_DFL (void(*)())0". */
3318 if (TREE_CODE (expr) == INTEGER_CST)
3319 warn_strict_prototypes = 0;
3320 type = groktypename (type_name);
3321 warn_strict_prototypes = saved_wsp;
3323 return build_c_cast (type, expr);
3327 /* Build an assignment expression of lvalue LHS from value RHS.
3328 MODIFYCODE is the code for a binary operator that we use
3329 to combine the old value of LHS with RHS to get the new value.
3330 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3332 tree
3333 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3335 tree result;
3336 tree newrhs;
3337 tree lhstype = TREE_TYPE (lhs);
3338 tree olhstype = lhstype;
3340 /* Types that aren't fully specified cannot be used in assignments. */
3341 lhs = require_complete_type (lhs);
3343 /* Avoid duplicate error messages from operands that had errors. */
3344 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3345 return error_mark_node;
3347 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3348 /* Do not use STRIP_NOPS here. We do not want an enumerator
3349 whose value is 0 to count as a null pointer constant. */
3350 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3351 rhs = TREE_OPERAND (rhs, 0);
3353 newrhs = rhs;
3355 /* If a binary op has been requested, combine the old LHS value with the RHS
3356 producing the value we should actually store into the LHS. */
3358 if (modifycode != NOP_EXPR)
3360 lhs = stabilize_reference (lhs);
3361 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3364 if (!lvalue_or_else (lhs, lv_assign))
3365 return error_mark_node;
3367 /* Give an error for storing in something that is 'const'. */
3369 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3370 || ((TREE_CODE (lhstype) == RECORD_TYPE
3371 || TREE_CODE (lhstype) == UNION_TYPE)
3372 && C_TYPE_FIELDS_READONLY (lhstype)))
3373 readonly_error (lhs, lv_assign);
3375 /* If storing into a structure or union member,
3376 it has probably been given type `int'.
3377 Compute the type that would go with
3378 the actual amount of storage the member occupies. */
3380 if (TREE_CODE (lhs) == COMPONENT_REF
3381 && (TREE_CODE (lhstype) == INTEGER_TYPE
3382 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3383 || TREE_CODE (lhstype) == REAL_TYPE
3384 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3385 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3387 /* If storing in a field that is in actuality a short or narrower than one,
3388 we must store in the field in its actual type. */
3390 if (lhstype != TREE_TYPE (lhs))
3392 lhs = copy_node (lhs);
3393 TREE_TYPE (lhs) = lhstype;
3396 /* Convert new value to destination type. */
3398 newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
3399 NULL_TREE, NULL_TREE, 0);
3400 if (TREE_CODE (newrhs) == ERROR_MARK)
3401 return error_mark_node;
3403 /* Scan operands. */
3405 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3406 TREE_SIDE_EFFECTS (result) = 1;
3408 /* If we got the LHS in a different type for storing in,
3409 convert the result back to the nominal type of LHS
3410 so that the value we return always has the same type
3411 as the LHS argument. */
3413 if (olhstype == TREE_TYPE (result))
3414 return result;
3415 return convert_for_assignment (olhstype, result, ic_assign,
3416 NULL_TREE, NULL_TREE, 0);
3419 /* Convert value RHS to type TYPE as preparation for an assignment
3420 to an lvalue of type TYPE.
3421 The real work of conversion is done by `convert'.
3422 The purpose of this function is to generate error messages
3423 for assignments that are not allowed in C.
3424 ERRTYPE says whether it is argument passing, assignment,
3425 initialization or return.
3427 FUNCTION is a tree for the function being called.
3428 PARMNUM is the number of the argument, for printing in error messages. */
3430 static tree
3431 convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
3432 tree fundecl, tree function, int parmnum)
3434 enum tree_code codel = TREE_CODE (type);
3435 tree rhstype;
3436 enum tree_code coder;
3437 tree rname = NULL_TREE;
3439 if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
3441 tree selector;
3442 /* Change pointer to function to the function itself for
3443 diagnostics. */
3444 if (TREE_CODE (function) == ADDR_EXPR
3445 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3446 function = TREE_OPERAND (function, 0);
3448 /* Handle an ObjC selector specially for diagnostics. */
3449 selector = objc_message_selector ();
3450 rname = function;
3451 if (selector && parmnum > 2)
3453 rname = selector;
3454 parmnum -= 2;
3458 /* This macro is used to emit diagnostics to ensure that all format
3459 strings are complete sentences, visible to gettext and checked at
3460 compile time. */
3461 #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE) \
3462 do { \
3463 switch (errtype) \
3465 case ic_argpass: \
3466 pedwarn (AR, parmnum, rname); \
3467 break; \
3468 case ic_argpass_nonproto: \
3469 warning (AR, parmnum, rname); \
3470 break; \
3471 case ic_assign: \
3472 pedwarn (AS); \
3473 break; \
3474 case ic_init: \
3475 pedwarn (IN); \
3476 break; \
3477 case ic_return: \
3478 pedwarn (RE); \
3479 break; \
3480 default: \
3481 gcc_unreachable (); \
3483 } while (0)
3485 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3486 /* Do not use STRIP_NOPS here. We do not want an enumerator
3487 whose value is 0 to count as a null pointer constant. */
3488 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3489 rhs = TREE_OPERAND (rhs, 0);
3491 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3492 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3493 rhs = default_conversion (rhs);
3494 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3495 rhs = decl_constant_value_for_broken_optimization (rhs);
3497 rhstype = TREE_TYPE (rhs);
3498 coder = TREE_CODE (rhstype);
3500 if (coder == ERROR_MARK)
3501 return error_mark_node;
3503 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3505 overflow_warning (rhs);
3506 /* Check for Objective-C protocols. This will automatically
3507 issue a warning if there are protocol violations. No need to
3508 use the return value. */
3509 if (c_dialect_objc ())
3510 objc_comptypes (type, rhstype, 0);
3511 return rhs;
3514 if (coder == VOID_TYPE)
3516 /* Except for passing an argument to an unprototyped function,
3517 this is a constraint violation. When passing an argument to
3518 an unprototyped function, it is compile-time undefined;
3519 making it a constraint in that case was rejected in
3520 DR#252. */
3521 error ("void value not ignored as it ought to be");
3522 return error_mark_node;
3524 /* A type converts to a reference to it.
3525 This code doesn't fully support references, it's just for the
3526 special case of va_start and va_copy. */
3527 if (codel == REFERENCE_TYPE
3528 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3530 if (!lvalue_p (rhs))
3532 error ("cannot pass rvalue to reference parameter");
3533 return error_mark_node;
3535 if (!c_mark_addressable (rhs))
3536 return error_mark_node;
3537 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3539 /* We already know that these two types are compatible, but they
3540 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3541 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3542 likely to be va_list, a typedef to __builtin_va_list, which
3543 is different enough that it will cause problems later. */
3544 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3545 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3547 rhs = build1 (NOP_EXPR, type, rhs);
3548 return rhs;
3550 /* Some types can interconvert without explicit casts. */
3551 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
3552 && vector_types_convertible_p (type, TREE_TYPE (rhs)))
3553 return convert (type, rhs);
3554 /* Arithmetic types all interconvert, and enum is treated like int. */
3555 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3556 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3557 || codel == BOOLEAN_TYPE)
3558 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3559 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3560 || coder == BOOLEAN_TYPE))
3561 return convert_and_check (type, rhs);
3563 /* Conversion to a transparent union from its member types.
3564 This applies only to function arguments. */
3565 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
3566 && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
3568 tree memb_types;
3569 tree marginal_memb_type = 0;
3571 for (memb_types = TYPE_FIELDS (type); memb_types;
3572 memb_types = TREE_CHAIN (memb_types))
3574 tree memb_type = TREE_TYPE (memb_types);
3576 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3577 TYPE_MAIN_VARIANT (rhstype)))
3578 break;
3580 if (TREE_CODE (memb_type) != POINTER_TYPE)
3581 continue;
3583 if (coder == POINTER_TYPE)
3585 tree ttl = TREE_TYPE (memb_type);
3586 tree ttr = TREE_TYPE (rhstype);
3588 /* Any non-function converts to a [const][volatile] void *
3589 and vice versa; otherwise, targets must be the same.
3590 Meanwhile, the lhs target must have all the qualifiers of
3591 the rhs. */
3592 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3593 || comp_target_types (memb_type, rhstype, 0))
3595 /* If this type won't generate any warnings, use it. */
3596 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3597 || ((TREE_CODE (ttr) == FUNCTION_TYPE
3598 && TREE_CODE (ttl) == FUNCTION_TYPE)
3599 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3600 == TYPE_QUALS (ttr))
3601 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3602 == TYPE_QUALS (ttl))))
3603 break;
3605 /* Keep looking for a better type, but remember this one. */
3606 if (!marginal_memb_type)
3607 marginal_memb_type = memb_type;
3611 /* Can convert integer zero to any pointer type. */
3612 if (integer_zerop (rhs)
3613 || (TREE_CODE (rhs) == NOP_EXPR
3614 && integer_zerop (TREE_OPERAND (rhs, 0))))
3616 rhs = null_pointer_node;
3617 break;
3621 if (memb_types || marginal_memb_type)
3623 if (!memb_types)
3625 /* We have only a marginally acceptable member type;
3626 it needs a warning. */
3627 tree ttl = TREE_TYPE (marginal_memb_type);
3628 tree ttr = TREE_TYPE (rhstype);
3630 /* Const and volatile mean something different for function
3631 types, so the usual warnings are not appropriate. */
3632 if (TREE_CODE (ttr) == FUNCTION_TYPE
3633 && TREE_CODE (ttl) == FUNCTION_TYPE)
3635 /* Because const and volatile on functions are
3636 restrictions that say the function will not do
3637 certain things, it is okay to use a const or volatile
3638 function where an ordinary one is wanted, but not
3639 vice-versa. */
3640 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3641 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE "
3642 "makes qualified function "
3643 "pointer from unqualified"),
3644 N_("assignment makes qualified "
3645 "function pointer from "
3646 "unqualified"),
3647 N_("initialization makes qualified "
3648 "function pointer from "
3649 "unqualified"),
3650 N_("return makes qualified function "
3651 "pointer from unqualified"));
3653 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3654 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
3655 "qualifiers from pointer target type"),
3656 N_("assignment discards qualifiers "
3657 "from pointer target type"),
3658 N_("initialization discards qualifiers "
3659 "from pointer target type"),
3660 N_("return discards qualifiers from "
3661 "pointer target type"));
3664 if (pedantic && !DECL_IN_SYSTEM_HEADER (fundecl))
3665 pedwarn ("ISO C prohibits argument conversion to union type");
3667 return build1 (NOP_EXPR, type, rhs);
3671 /* Conversions among pointers */
3672 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3673 && (coder == codel))
3675 tree ttl = TREE_TYPE (type);
3676 tree ttr = TREE_TYPE (rhstype);
3677 bool is_opaque_pointer;
3678 int target_cmp = 0; /* Cache comp_target_types () result. */
3680 /* Opaque pointers are treated like void pointers. */
3681 is_opaque_pointer = (targetm.vector_opaque_p (type)
3682 || targetm.vector_opaque_p (rhstype))
3683 && TREE_CODE (ttl) == VECTOR_TYPE
3684 && TREE_CODE (ttr) == VECTOR_TYPE;
3686 /* Any non-function converts to a [const][volatile] void *
3687 and vice versa; otherwise, targets must be the same.
3688 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3689 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3690 || (target_cmp = comp_target_types (type, rhstype, 0))
3691 || is_opaque_pointer
3692 || (c_common_unsigned_type (TYPE_MAIN_VARIANT (ttl))
3693 == c_common_unsigned_type (TYPE_MAIN_VARIANT (ttr))))
3695 if (pedantic
3696 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3698 (VOID_TYPE_P (ttr)
3699 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3700 which are not ANSI null ptr constants. */
3701 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3702 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3703 WARN_FOR_ASSIGNMENT (N_("ISO C forbids passing argument %d of "
3704 "%qE between function pointer "
3705 "and %<void *%>"),
3706 N_("ISO C forbids assignment between "
3707 "function pointer and %<void *%>"),
3708 N_("ISO C forbids initialization between "
3709 "function pointer and %<void *%>"),
3710 N_("ISO C forbids return between function "
3711 "pointer and %<void *%>"));
3712 /* Const and volatile mean something different for function types,
3713 so the usual warnings are not appropriate. */
3714 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3715 && TREE_CODE (ttl) != FUNCTION_TYPE)
3717 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3718 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
3719 "qualifiers from pointer target type"),
3720 N_("assignment discards qualifiers "
3721 "from pointer target type"),
3722 N_("initialization discards qualifiers "
3723 "from pointer target type"),
3724 N_("return discards qualifiers from "
3725 "pointer target type"));
3726 /* If this is not a case of ignoring a mismatch in signedness,
3727 no warning. */
3728 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3729 || target_cmp)
3731 /* If there is a mismatch, do warn. */
3732 else
3733 WARN_FOR_ASSIGNMENT (N_("pointer targets in passing argument "
3734 "%d of %qE differ in signedness"),
3735 N_("pointer targets in assignment "
3736 "differ in signedness"),
3737 N_("pointer targets in initialization "
3738 "differ in signedness"),
3739 N_("pointer targets in return differ "
3740 "in signedness"));
3742 else if (TREE_CODE (ttl) == FUNCTION_TYPE
3743 && TREE_CODE (ttr) == FUNCTION_TYPE)
3745 /* Because const and volatile on functions are restrictions
3746 that say the function will not do certain things,
3747 it is okay to use a const or volatile function
3748 where an ordinary one is wanted, but not vice-versa. */
3749 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3750 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
3751 "qualified function pointer "
3752 "from unqualified"),
3753 N_("assignment makes qualified function "
3754 "pointer from unqualified"),
3755 N_("initialization makes qualified "
3756 "function pointer from unqualified"),
3757 N_("return makes qualified function "
3758 "pointer from unqualified"));
3761 else
3762 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE from "
3763 "incompatible pointer type"),
3764 N_("assignment from incompatible pointer type"),
3765 N_("initialization from incompatible "
3766 "pointer type"),
3767 N_("return from incompatible pointer type"));
3768 return convert (type, rhs);
3770 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
3772 /* ??? This should not be an error when inlining calls to
3773 unprototyped functions. */
3774 error ("invalid use of non-lvalue array");
3775 return error_mark_node;
3777 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
3779 /* An explicit constant 0 can convert to a pointer,
3780 or one that results from arithmetic, even including
3781 a cast to integer type. */
3782 if (!(TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3784 !(TREE_CODE (rhs) == NOP_EXPR
3785 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3786 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3787 && integer_zerop (TREE_OPERAND (rhs, 0))))
3788 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
3789 "pointer from integer without a cast"),
3790 N_("assignment makes pointer from integer "
3791 "without a cast"),
3792 N_("initialization makes pointer from "
3793 "integer without a cast"),
3794 N_("return makes pointer from integer "
3795 "without a cast"));
3797 return convert (type, rhs);
3799 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
3801 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes integer "
3802 "from pointer without a cast"),
3803 N_("assignment makes integer from pointer "
3804 "without a cast"),
3805 N_("initialization makes integer from pointer "
3806 "without a cast"),
3807 N_("return makes integer from pointer "
3808 "without a cast"));
3809 return convert (type, rhs);
3811 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3812 return convert (type, rhs);
3814 switch (errtype)
3816 case ic_argpass:
3817 case ic_argpass_nonproto:
3818 /* ??? This should not be an error when inlining calls to
3819 unprototyped functions. */
3820 error ("incompatible type for argument %d of %qE", parmnum, rname);
3821 break;
3822 case ic_assign:
3823 error ("incompatible types in assignment");
3824 break;
3825 case ic_init:
3826 error ("incompatible types in initialization");
3827 break;
3828 case ic_return:
3829 error ("incompatible types in return");
3830 break;
3831 default:
3832 gcc_unreachable ();
3835 return error_mark_node;
3838 /* Convert VALUE for assignment into inlined parameter PARM. ARGNUM
3839 is used for error and waring reporting and indicates which argument
3840 is being processed. */
3842 tree
3843 c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
3845 tree ret, type;
3847 /* If FN was prototyped, the value has been converted already
3848 in convert_arguments. */
3849 if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
3850 return value;
3852 type = TREE_TYPE (parm);
3853 ret = convert_for_assignment (type, value,
3854 ic_argpass_nonproto, fn,
3855 fn, argnum);
3856 if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
3857 && INTEGRAL_TYPE_P (type)
3858 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
3859 ret = default_conversion (ret);
3860 return ret;
3863 /* If VALUE is a compound expr all of whose expressions are constant, then
3864 return its value. Otherwise, return error_mark_node.
3866 This is for handling COMPOUND_EXPRs as initializer elements
3867 which is allowed with a warning when -pedantic is specified. */
3869 static tree
3870 valid_compound_expr_initializer (tree value, tree endtype)
3872 if (TREE_CODE (value) == COMPOUND_EXPR)
3874 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
3875 == error_mark_node)
3876 return error_mark_node;
3877 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
3878 endtype);
3880 else if (!initializer_constant_valid_p (value, endtype))
3881 return error_mark_node;
3882 else
3883 return value;
3886 /* Perform appropriate conversions on the initial value of a variable,
3887 store it in the declaration DECL,
3888 and print any error messages that are appropriate.
3889 If the init is invalid, store an ERROR_MARK. */
3891 void
3892 store_init_value (tree decl, tree init)
3894 tree value, type;
3896 /* If variable's type was invalidly declared, just ignore it. */
3898 type = TREE_TYPE (decl);
3899 if (TREE_CODE (type) == ERROR_MARK)
3900 return;
3902 /* Digest the specified initializer into an expression. */
3904 value = digest_init (type, init, true, TREE_STATIC (decl));
3906 /* Store the expression if valid; else report error. */
3908 if (warn_traditional && !in_system_header
3909 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
3910 warning ("traditional C rejects automatic aggregate initialization");
3912 DECL_INITIAL (decl) = value;
3914 /* ANSI wants warnings about out-of-range constant initializers. */
3915 STRIP_TYPE_NOPS (value);
3916 constant_expression_warning (value);
3918 /* Check if we need to set array size from compound literal size. */
3919 if (TREE_CODE (type) == ARRAY_TYPE
3920 && TYPE_DOMAIN (type) == 0
3921 && value != error_mark_node)
3923 tree inside_init = init;
3925 if (TREE_CODE (init) == NON_LVALUE_EXPR)
3926 inside_init = TREE_OPERAND (init, 0);
3927 inside_init = fold (inside_init);
3929 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
3931 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
3933 if (TYPE_DOMAIN (TREE_TYPE (decl)))
3935 /* For int foo[] = (int [3]){1}; we need to set array size
3936 now since later on array initializer will be just the
3937 brace enclosed list of the compound literal. */
3938 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
3939 layout_type (type);
3940 layout_decl (decl, 0);
3946 /* Methods for storing and printing names for error messages. */
3948 /* Implement a spelling stack that allows components of a name to be pushed
3949 and popped. Each element on the stack is this structure. */
3951 struct spelling
3953 int kind;
3954 union
3956 int i;
3957 const char *s;
3958 } u;
3961 #define SPELLING_STRING 1
3962 #define SPELLING_MEMBER 2
3963 #define SPELLING_BOUNDS 3
3965 static struct spelling *spelling; /* Next stack element (unused). */
3966 static struct spelling *spelling_base; /* Spelling stack base. */
3967 static int spelling_size; /* Size of the spelling stack. */
3969 /* Macros to save and restore the spelling stack around push_... functions.
3970 Alternative to SAVE_SPELLING_STACK. */
3972 #define SPELLING_DEPTH() (spelling - spelling_base)
3973 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
3975 /* Push an element on the spelling stack with type KIND and assign VALUE
3976 to MEMBER. */
3978 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
3980 int depth = SPELLING_DEPTH (); \
3982 if (depth >= spelling_size) \
3984 spelling_size += 10; \
3985 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
3986 spelling_size); \
3987 RESTORE_SPELLING_DEPTH (depth); \
3990 spelling->kind = (KIND); \
3991 spelling->MEMBER = (VALUE); \
3992 spelling++; \
3995 /* Push STRING on the stack. Printed literally. */
3997 static void
3998 push_string (const char *string)
4000 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4003 /* Push a member name on the stack. Printed as '.' STRING. */
4005 static void
4006 push_member_name (tree decl)
4008 const char *const string
4009 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4010 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4013 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4015 static void
4016 push_array_bounds (int bounds)
4018 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4021 /* Compute the maximum size in bytes of the printed spelling. */
4023 static int
4024 spelling_length (void)
4026 int size = 0;
4027 struct spelling *p;
4029 for (p = spelling_base; p < spelling; p++)
4031 if (p->kind == SPELLING_BOUNDS)
4032 size += 25;
4033 else
4034 size += strlen (p->u.s) + 1;
4037 return size;
4040 /* Print the spelling to BUFFER and return it. */
4042 static char *
4043 print_spelling (char *buffer)
4045 char *d = buffer;
4046 struct spelling *p;
4048 for (p = spelling_base; p < spelling; p++)
4049 if (p->kind == SPELLING_BOUNDS)
4051 sprintf (d, "[%d]", p->u.i);
4052 d += strlen (d);
4054 else
4056 const char *s;
4057 if (p->kind == SPELLING_MEMBER)
4058 *d++ = '.';
4059 for (s = p->u.s; (*d = *s++); d++)
4062 *d++ = '\0';
4063 return buffer;
4066 /* Issue an error message for a bad initializer component.
4067 MSGID identifies the message.
4068 The component name is taken from the spelling stack. */
4070 void
4071 error_init (const char *msgid)
4073 char *ofwhat;
4075 error ("%s", _(msgid));
4076 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4077 if (*ofwhat)
4078 error ("(near initialization for %qs)", ofwhat);
4081 /* Issue a pedantic warning for a bad initializer component.
4082 MSGID identifies the message.
4083 The component name is taken from the spelling stack. */
4085 void
4086 pedwarn_init (const char *msgid)
4088 char *ofwhat;
4090 pedwarn ("%s", _(msgid));
4091 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4092 if (*ofwhat)
4093 pedwarn ("(near initialization for %qs)", ofwhat);
4096 /* Issue a warning for a bad initializer component.
4097 MSGID identifies the message.
4098 The component name is taken from the spelling stack. */
4100 static void
4101 warning_init (const char *msgid)
4103 char *ofwhat;
4105 warning ("%s", _(msgid));
4106 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4107 if (*ofwhat)
4108 warning ("(near initialization for %qs)", ofwhat);
4111 /* If TYPE is an array type and EXPR is a parenthesized string
4112 constant, warn if pedantic that EXPR is being used to initialize an
4113 object of type TYPE. */
4115 void
4116 maybe_warn_string_init (tree type, struct c_expr expr)
4118 if (pedantic
4119 && TREE_CODE (type) == ARRAY_TYPE
4120 && TREE_CODE (expr.value) == STRING_CST
4121 && expr.original_code != STRING_CST)
4122 pedwarn_init ("array initialized from parenthesized string constant");
4125 /* Digest the parser output INIT as an initializer for type TYPE.
4126 Return a C expression of type TYPE to represent the initial value.
4128 If INIT is a string constant, STRICT_STRING is true if it is
4129 unparenthesized or we should not warn here for it being parenthesized.
4130 For other types of INIT, STRICT_STRING is not used.
4132 REQUIRE_CONSTANT requests an error if non-constant initializers or
4133 elements are seen. */
4135 static tree
4136 digest_init (tree type, tree init, bool strict_string, int require_constant)
4138 enum tree_code code = TREE_CODE (type);
4139 tree inside_init = init;
4141 if (type == error_mark_node
4142 || init == error_mark_node
4143 || TREE_TYPE (init) == error_mark_node)
4144 return error_mark_node;
4146 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4147 /* Do not use STRIP_NOPS here. We do not want an enumerator
4148 whose value is 0 to count as a null pointer constant. */
4149 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4150 inside_init = TREE_OPERAND (init, 0);
4152 inside_init = fold (inside_init);
4154 /* Initialization of an array of chars from a string constant
4155 optionally enclosed in braces. */
4157 if (code == ARRAY_TYPE && inside_init
4158 && TREE_CODE (inside_init) == STRING_CST)
4160 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4161 /* Note that an array could be both an array of character type
4162 and an array of wchar_t if wchar_t is signed char or unsigned
4163 char. */
4164 bool char_array = (typ1 == char_type_node
4165 || typ1 == signed_char_type_node
4166 || typ1 == unsigned_char_type_node);
4167 bool wchar_array = !!comptypes (typ1, wchar_type_node);
4168 if (char_array || wchar_array)
4170 struct c_expr expr;
4171 bool char_string;
4172 expr.value = inside_init;
4173 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4174 maybe_warn_string_init (type, expr);
4176 char_string
4177 = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4178 == char_type_node);
4180 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4181 TYPE_MAIN_VARIANT (type)))
4182 return inside_init;
4184 if (!wchar_array && !char_string)
4186 error_init ("char-array initialized from wide string");
4187 return error_mark_node;
4189 if (char_string && !char_array)
4191 error_init ("wchar_t-array initialized from non-wide string");
4192 return error_mark_node;
4195 TREE_TYPE (inside_init) = type;
4196 if (TYPE_DOMAIN (type) != 0
4197 && TYPE_SIZE (type) != 0
4198 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4199 /* Subtract 1 (or sizeof (wchar_t))
4200 because it's ok to ignore the terminating null char
4201 that is counted in the length of the constant. */
4202 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4203 TREE_STRING_LENGTH (inside_init)
4204 - ((TYPE_PRECISION (typ1)
4205 != TYPE_PRECISION (char_type_node))
4206 ? (TYPE_PRECISION (wchar_type_node)
4207 / BITS_PER_UNIT)
4208 : 1)))
4209 pedwarn_init ("initializer-string for array of chars is too long");
4211 return inside_init;
4213 else if (INTEGRAL_TYPE_P (typ1))
4215 error_init ("array of inappropriate type initialized "
4216 "from string constant");
4217 return error_mark_node;
4221 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4222 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4223 below and handle as a constructor. */
4224 if (code == VECTOR_TYPE
4225 && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
4226 && vector_types_convertible_p (TREE_TYPE (inside_init), type)
4227 && TREE_CONSTANT (inside_init))
4229 if (TREE_CODE (inside_init) == VECTOR_CST
4230 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4231 TYPE_MAIN_VARIANT (type)))
4232 return inside_init;
4233 else
4234 return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
4237 /* Any type can be initialized
4238 from an expression of the same type, optionally with braces. */
4240 if (inside_init && TREE_TYPE (inside_init) != 0
4241 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4242 TYPE_MAIN_VARIANT (type))
4243 || (code == ARRAY_TYPE
4244 && comptypes (TREE_TYPE (inside_init), type))
4245 || (code == VECTOR_TYPE
4246 && comptypes (TREE_TYPE (inside_init), type))
4247 || (code == POINTER_TYPE
4248 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4249 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4250 TREE_TYPE (type)))
4251 || (code == POINTER_TYPE
4252 && TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE
4253 && comptypes (TREE_TYPE (inside_init),
4254 TREE_TYPE (type)))))
4256 if (code == POINTER_TYPE)
4258 inside_init = default_function_array_conversion (inside_init);
4260 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4262 error_init ("invalid use of non-lvalue array");
4263 return error_mark_node;
4267 if (code == VECTOR_TYPE)
4268 /* Although the types are compatible, we may require a
4269 conversion. */
4270 inside_init = convert (type, inside_init);
4272 if (require_constant && !flag_isoc99
4273 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4275 /* As an extension, allow initializing objects with static storage
4276 duration with compound literals (which are then treated just as
4277 the brace enclosed list they contain). */
4278 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4279 inside_init = DECL_INITIAL (decl);
4282 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4283 && TREE_CODE (inside_init) != CONSTRUCTOR)
4285 error_init ("array initialized from non-constant array expression");
4286 return error_mark_node;
4289 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4290 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4292 /* Compound expressions can only occur here if -pedantic or
4293 -pedantic-errors is specified. In the later case, we always want
4294 an error. In the former case, we simply want a warning. */
4295 if (require_constant && pedantic
4296 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4298 inside_init
4299 = valid_compound_expr_initializer (inside_init,
4300 TREE_TYPE (inside_init));
4301 if (inside_init == error_mark_node)
4302 error_init ("initializer element is not constant");
4303 else
4304 pedwarn_init ("initializer element is not constant");
4305 if (flag_pedantic_errors)
4306 inside_init = error_mark_node;
4308 else if (require_constant
4309 && !initializer_constant_valid_p (inside_init,
4310 TREE_TYPE (inside_init)))
4312 error_init ("initializer element is not constant");
4313 inside_init = error_mark_node;
4316 return inside_init;
4319 /* Handle scalar types, including conversions. */
4321 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4322 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
4323 || code == VECTOR_TYPE)
4325 /* Note that convert_for_assignment calls default_conversion
4326 for arrays and functions. We must not call it in the
4327 case where inside_init is a null pointer constant. */
4328 inside_init
4329 = convert_for_assignment (type, init, ic_init,
4330 NULL_TREE, NULL_TREE, 0);
4332 /* Check to see if we have already given an error message. */
4333 if (inside_init == error_mark_node)
4335 else if (require_constant && !TREE_CONSTANT (inside_init))
4337 error_init ("initializer element is not constant");
4338 inside_init = error_mark_node;
4340 else if (require_constant
4341 && !initializer_constant_valid_p (inside_init,
4342 TREE_TYPE (inside_init)))
4344 error_init ("initializer element is not computable at load time");
4345 inside_init = error_mark_node;
4348 return inside_init;
4351 /* Come here only for records and arrays. */
4353 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4355 error_init ("variable-sized object may not be initialized");
4356 return error_mark_node;
4359 error_init ("invalid initializer");
4360 return error_mark_node;
4363 /* Handle initializers that use braces. */
4365 /* Type of object we are accumulating a constructor for.
4366 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4367 static tree constructor_type;
4369 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4370 left to fill. */
4371 static tree constructor_fields;
4373 /* For an ARRAY_TYPE, this is the specified index
4374 at which to store the next element we get. */
4375 static tree constructor_index;
4377 /* For an ARRAY_TYPE, this is the maximum index. */
4378 static tree constructor_max_index;
4380 /* For a RECORD_TYPE, this is the first field not yet written out. */
4381 static tree constructor_unfilled_fields;
4383 /* For an ARRAY_TYPE, this is the index of the first element
4384 not yet written out. */
4385 static tree constructor_unfilled_index;
4387 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4388 This is so we can generate gaps between fields, when appropriate. */
4389 static tree constructor_bit_index;
4391 /* If we are saving up the elements rather than allocating them,
4392 this is the list of elements so far (in reverse order,
4393 most recent first). */
4394 static tree constructor_elements;
4396 /* 1 if constructor should be incrementally stored into a constructor chain,
4397 0 if all the elements should be kept in AVL tree. */
4398 static int constructor_incremental;
4400 /* 1 if so far this constructor's elements are all compile-time constants. */
4401 static int constructor_constant;
4403 /* 1 if so far this constructor's elements are all valid address constants. */
4404 static int constructor_simple;
4406 /* 1 if this constructor is erroneous so far. */
4407 static int constructor_erroneous;
4409 /* Structure for managing pending initializer elements, organized as an
4410 AVL tree. */
4412 struct init_node
4414 struct init_node *left, *right;
4415 struct init_node *parent;
4416 int balance;
4417 tree purpose;
4418 tree value;
4421 /* Tree of pending elements at this constructor level.
4422 These are elements encountered out of order
4423 which belong at places we haven't reached yet in actually
4424 writing the output.
4425 Will never hold tree nodes across GC runs. */
4426 static struct init_node *constructor_pending_elts;
4428 /* The SPELLING_DEPTH of this constructor. */
4429 static int constructor_depth;
4431 /* 0 if implicitly pushing constructor levels is allowed. */
4432 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4434 /* DECL node for which an initializer is being read.
4435 0 means we are reading a constructor expression
4436 such as (struct foo) {...}. */
4437 static tree constructor_decl;
4439 /* Nonzero if this is an initializer for a top-level decl. */
4440 static int constructor_top_level;
4442 /* Nonzero if there were any member designators in this initializer. */
4443 static int constructor_designated;
4445 /* Nesting depth of designator list. */
4446 static int designator_depth;
4448 /* Nonzero if there were diagnosed errors in this designator list. */
4449 static int designator_errorneous;
4452 /* This stack has a level for each implicit or explicit level of
4453 structuring in the initializer, including the outermost one. It
4454 saves the values of most of the variables above. */
4456 struct constructor_range_stack;
4458 struct constructor_stack
4460 struct constructor_stack *next;
4461 tree type;
4462 tree fields;
4463 tree index;
4464 tree max_index;
4465 tree unfilled_index;
4466 tree unfilled_fields;
4467 tree bit_index;
4468 tree elements;
4469 struct init_node *pending_elts;
4470 int offset;
4471 int depth;
4472 /* If value nonzero, this value should replace the entire
4473 constructor at this level. */
4474 struct c_expr replacement_value;
4475 struct constructor_range_stack *range_stack;
4476 char constant;
4477 char simple;
4478 char implicit;
4479 char erroneous;
4480 char outer;
4481 char incremental;
4482 char designated;
4485 struct constructor_stack *constructor_stack;
4487 /* This stack represents designators from some range designator up to
4488 the last designator in the list. */
4490 struct constructor_range_stack
4492 struct constructor_range_stack *next, *prev;
4493 struct constructor_stack *stack;
4494 tree range_start;
4495 tree index;
4496 tree range_end;
4497 tree fields;
4500 struct constructor_range_stack *constructor_range_stack;
4502 /* This stack records separate initializers that are nested.
4503 Nested initializers can't happen in ANSI C, but GNU C allows them
4504 in cases like { ... (struct foo) { ... } ... }. */
4506 struct initializer_stack
4508 struct initializer_stack *next;
4509 tree decl;
4510 struct constructor_stack *constructor_stack;
4511 struct constructor_range_stack *constructor_range_stack;
4512 tree elements;
4513 struct spelling *spelling;
4514 struct spelling *spelling_base;
4515 int spelling_size;
4516 char top_level;
4517 char require_constant_value;
4518 char require_constant_elements;
4521 struct initializer_stack *initializer_stack;
4523 /* Prepare to parse and output the initializer for variable DECL. */
4525 void
4526 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
4528 const char *locus;
4529 struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
4531 p->decl = constructor_decl;
4532 p->require_constant_value = require_constant_value;
4533 p->require_constant_elements = require_constant_elements;
4534 p->constructor_stack = constructor_stack;
4535 p->constructor_range_stack = constructor_range_stack;
4536 p->elements = constructor_elements;
4537 p->spelling = spelling;
4538 p->spelling_base = spelling_base;
4539 p->spelling_size = spelling_size;
4540 p->top_level = constructor_top_level;
4541 p->next = initializer_stack;
4542 initializer_stack = p;
4544 constructor_decl = decl;
4545 constructor_designated = 0;
4546 constructor_top_level = top_level;
4548 if (decl != 0)
4550 require_constant_value = TREE_STATIC (decl);
4551 require_constant_elements
4552 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4553 /* For a scalar, you can always use any value to initialize,
4554 even within braces. */
4555 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4556 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4557 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4558 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4559 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4561 else
4563 require_constant_value = 0;
4564 require_constant_elements = 0;
4565 locus = "(anonymous)";
4568 constructor_stack = 0;
4569 constructor_range_stack = 0;
4571 missing_braces_mentioned = 0;
4573 spelling_base = 0;
4574 spelling_size = 0;
4575 RESTORE_SPELLING_DEPTH (0);
4577 if (locus)
4578 push_string (locus);
4581 void
4582 finish_init (void)
4584 struct initializer_stack *p = initializer_stack;
4586 /* Free the whole constructor stack of this initializer. */
4587 while (constructor_stack)
4589 struct constructor_stack *q = constructor_stack;
4590 constructor_stack = q->next;
4591 free (q);
4594 gcc_assert (!constructor_range_stack);
4596 /* Pop back to the data of the outer initializer (if any). */
4597 free (spelling_base);
4599 constructor_decl = p->decl;
4600 require_constant_value = p->require_constant_value;
4601 require_constant_elements = p->require_constant_elements;
4602 constructor_stack = p->constructor_stack;
4603 constructor_range_stack = p->constructor_range_stack;
4604 constructor_elements = p->elements;
4605 spelling = p->spelling;
4606 spelling_base = p->spelling_base;
4607 spelling_size = p->spelling_size;
4608 constructor_top_level = p->top_level;
4609 initializer_stack = p->next;
4610 free (p);
4613 /* Call here when we see the initializer is surrounded by braces.
4614 This is instead of a call to push_init_level;
4615 it is matched by a call to pop_init_level.
4617 TYPE is the type to initialize, for a constructor expression.
4618 For an initializer for a decl, TYPE is zero. */
4620 void
4621 really_start_incremental_init (tree type)
4623 struct constructor_stack *p = XNEW (struct constructor_stack);
4625 if (type == 0)
4626 type = TREE_TYPE (constructor_decl);
4628 if (targetm.vector_opaque_p (type))
4629 error ("opaque vector types cannot be initialized");
4631 p->type = constructor_type;
4632 p->fields = constructor_fields;
4633 p->index = constructor_index;
4634 p->max_index = constructor_max_index;
4635 p->unfilled_index = constructor_unfilled_index;
4636 p->unfilled_fields = constructor_unfilled_fields;
4637 p->bit_index = constructor_bit_index;
4638 p->elements = constructor_elements;
4639 p->constant = constructor_constant;
4640 p->simple = constructor_simple;
4641 p->erroneous = constructor_erroneous;
4642 p->pending_elts = constructor_pending_elts;
4643 p->depth = constructor_depth;
4644 p->replacement_value.value = 0;
4645 p->replacement_value.original_code = ERROR_MARK;
4646 p->implicit = 0;
4647 p->range_stack = 0;
4648 p->outer = 0;
4649 p->incremental = constructor_incremental;
4650 p->designated = constructor_designated;
4651 p->next = 0;
4652 constructor_stack = p;
4654 constructor_constant = 1;
4655 constructor_simple = 1;
4656 constructor_depth = SPELLING_DEPTH ();
4657 constructor_elements = 0;
4658 constructor_pending_elts = 0;
4659 constructor_type = type;
4660 constructor_incremental = 1;
4661 constructor_designated = 0;
4662 designator_depth = 0;
4663 designator_errorneous = 0;
4665 if (TREE_CODE (constructor_type) == RECORD_TYPE
4666 || TREE_CODE (constructor_type) == UNION_TYPE)
4668 constructor_fields = TYPE_FIELDS (constructor_type);
4669 /* Skip any nameless bit fields at the beginning. */
4670 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4671 && DECL_NAME (constructor_fields) == 0)
4672 constructor_fields = TREE_CHAIN (constructor_fields);
4674 constructor_unfilled_fields = constructor_fields;
4675 constructor_bit_index = bitsize_zero_node;
4677 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4679 if (TYPE_DOMAIN (constructor_type))
4681 constructor_max_index
4682 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4684 /* Detect non-empty initializations of zero-length arrays. */
4685 if (constructor_max_index == NULL_TREE
4686 && TYPE_SIZE (constructor_type))
4687 constructor_max_index = build_int_cst (NULL_TREE, -1);
4689 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4690 to initialize VLAs will cause a proper error; avoid tree
4691 checking errors as well by setting a safe value. */
4692 if (constructor_max_index
4693 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4694 constructor_max_index = build_int_cst (NULL_TREE, -1);
4696 constructor_index
4697 = convert (bitsizetype,
4698 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4700 else
4701 constructor_index = bitsize_zero_node;
4703 constructor_unfilled_index = constructor_index;
4705 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4707 /* Vectors are like simple fixed-size arrays. */
4708 constructor_max_index =
4709 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4710 constructor_index = convert (bitsizetype, bitsize_zero_node);
4711 constructor_unfilled_index = constructor_index;
4713 else
4715 /* Handle the case of int x = {5}; */
4716 constructor_fields = constructor_type;
4717 constructor_unfilled_fields = constructor_type;
4721 /* Push down into a subobject, for initialization.
4722 If this is for an explicit set of braces, IMPLICIT is 0.
4723 If it is because the next element belongs at a lower level,
4724 IMPLICIT is 1 (or 2 if the push is because of designator list). */
4726 void
4727 push_init_level (int implicit)
4729 struct constructor_stack *p;
4730 tree value = NULL_TREE;
4732 /* If we've exhausted any levels that didn't have braces,
4733 pop them now. */
4734 while (constructor_stack->implicit)
4736 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4737 || TREE_CODE (constructor_type) == UNION_TYPE)
4738 && constructor_fields == 0)
4739 process_init_element (pop_init_level (1));
4740 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4741 && constructor_max_index
4742 && tree_int_cst_lt (constructor_max_index, constructor_index))
4743 process_init_element (pop_init_level (1));
4744 else
4745 break;
4748 /* Unless this is an explicit brace, we need to preserve previous
4749 content if any. */
4750 if (implicit)
4752 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4753 || TREE_CODE (constructor_type) == UNION_TYPE)
4754 && constructor_fields)
4755 value = find_init_member (constructor_fields);
4756 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4757 value = find_init_member (constructor_index);
4760 p = XNEW (struct constructor_stack);
4761 p->type = constructor_type;
4762 p->fields = constructor_fields;
4763 p->index = constructor_index;
4764 p->max_index = constructor_max_index;
4765 p->unfilled_index = constructor_unfilled_index;
4766 p->unfilled_fields = constructor_unfilled_fields;
4767 p->bit_index = constructor_bit_index;
4768 p->elements = constructor_elements;
4769 p->constant = constructor_constant;
4770 p->simple = constructor_simple;
4771 p->erroneous = constructor_erroneous;
4772 p->pending_elts = constructor_pending_elts;
4773 p->depth = constructor_depth;
4774 p->replacement_value.value = 0;
4775 p->replacement_value.original_code = ERROR_MARK;
4776 p->implicit = implicit;
4777 p->outer = 0;
4778 p->incremental = constructor_incremental;
4779 p->designated = constructor_designated;
4780 p->next = constructor_stack;
4781 p->range_stack = 0;
4782 constructor_stack = p;
4784 constructor_constant = 1;
4785 constructor_simple = 1;
4786 constructor_depth = SPELLING_DEPTH ();
4787 constructor_elements = 0;
4788 constructor_incremental = 1;
4789 constructor_designated = 0;
4790 constructor_pending_elts = 0;
4791 if (!implicit)
4793 p->range_stack = constructor_range_stack;
4794 constructor_range_stack = 0;
4795 designator_depth = 0;
4796 designator_errorneous = 0;
4799 /* Don't die if an entire brace-pair level is superfluous
4800 in the containing level. */
4801 if (constructor_type == 0)
4803 else if (TREE_CODE (constructor_type) == RECORD_TYPE
4804 || TREE_CODE (constructor_type) == UNION_TYPE)
4806 /* Don't die if there are extra init elts at the end. */
4807 if (constructor_fields == 0)
4808 constructor_type = 0;
4809 else
4811 constructor_type = TREE_TYPE (constructor_fields);
4812 push_member_name (constructor_fields);
4813 constructor_depth++;
4816 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4818 constructor_type = TREE_TYPE (constructor_type);
4819 push_array_bounds (tree_low_cst (constructor_index, 0));
4820 constructor_depth++;
4823 if (constructor_type == 0)
4825 error_init ("extra brace group at end of initializer");
4826 constructor_fields = 0;
4827 constructor_unfilled_fields = 0;
4828 return;
4831 if (value && TREE_CODE (value) == CONSTRUCTOR)
4833 constructor_constant = TREE_CONSTANT (value);
4834 constructor_simple = TREE_STATIC (value);
4835 constructor_elements = CONSTRUCTOR_ELTS (value);
4836 if (constructor_elements
4837 && (TREE_CODE (constructor_type) == RECORD_TYPE
4838 || TREE_CODE (constructor_type) == ARRAY_TYPE))
4839 set_nonincremental_init ();
4842 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
4844 missing_braces_mentioned = 1;
4845 warning_init ("missing braces around initializer");
4848 if (TREE_CODE (constructor_type) == RECORD_TYPE
4849 || TREE_CODE (constructor_type) == UNION_TYPE)
4851 constructor_fields = TYPE_FIELDS (constructor_type);
4852 /* Skip any nameless bit fields at the beginning. */
4853 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4854 && DECL_NAME (constructor_fields) == 0)
4855 constructor_fields = TREE_CHAIN (constructor_fields);
4857 constructor_unfilled_fields = constructor_fields;
4858 constructor_bit_index = bitsize_zero_node;
4860 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4862 /* Vectors are like simple fixed-size arrays. */
4863 constructor_max_index =
4864 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4865 constructor_index = convert (bitsizetype, integer_zero_node);
4866 constructor_unfilled_index = constructor_index;
4868 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4870 if (TYPE_DOMAIN (constructor_type))
4872 constructor_max_index
4873 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4875 /* Detect non-empty initializations of zero-length arrays. */
4876 if (constructor_max_index == NULL_TREE
4877 && TYPE_SIZE (constructor_type))
4878 constructor_max_index = build_int_cst (NULL_TREE, -1);
4880 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4881 to initialize VLAs will cause a proper error; avoid tree
4882 checking errors as well by setting a safe value. */
4883 if (constructor_max_index
4884 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4885 constructor_max_index = build_int_cst (NULL_TREE, -1);
4887 constructor_index
4888 = convert (bitsizetype,
4889 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4891 else
4892 constructor_index = bitsize_zero_node;
4894 constructor_unfilled_index = constructor_index;
4895 if (value && TREE_CODE (value) == STRING_CST)
4897 /* We need to split the char/wchar array into individual
4898 characters, so that we don't have to special case it
4899 everywhere. */
4900 set_nonincremental_init_from_string (value);
4903 else
4905 warning_init ("braces around scalar initializer");
4906 constructor_fields = constructor_type;
4907 constructor_unfilled_fields = constructor_type;
4911 /* At the end of an implicit or explicit brace level,
4912 finish up that level of constructor. If a single expression
4913 with redundant braces initialized that level, return the
4914 c_expr structure for that expression. Otherwise, the original_code
4915 element is set to ERROR_MARK.
4916 If we were outputting the elements as they are read, return 0 as the value
4917 from inner levels (process_init_element ignores that),
4918 but return error_mark_node as the value from the outermost level
4919 (that's what we want to put in DECL_INITIAL).
4920 Otherwise, return a CONSTRUCTOR expression as the value. */
4922 struct c_expr
4923 pop_init_level (int implicit)
4925 struct constructor_stack *p;
4926 struct c_expr ret;
4927 ret.value = 0;
4928 ret.original_code = ERROR_MARK;
4930 if (implicit == 0)
4932 /* When we come to an explicit close brace,
4933 pop any inner levels that didn't have explicit braces. */
4934 while (constructor_stack->implicit)
4935 process_init_element (pop_init_level (1));
4937 gcc_assert (!constructor_range_stack);
4940 /* Now output all pending elements. */
4941 constructor_incremental = 1;
4942 output_pending_init_elements (1);
4944 p = constructor_stack;
4946 /* Error for initializing a flexible array member, or a zero-length
4947 array member in an inappropriate context. */
4948 if (constructor_type && constructor_fields
4949 && TREE_CODE (constructor_type) == ARRAY_TYPE
4950 && TYPE_DOMAIN (constructor_type)
4951 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
4953 /* Silently discard empty initializations. The parser will
4954 already have pedwarned for empty brackets. */
4955 if (integer_zerop (constructor_unfilled_index))
4956 constructor_type = NULL_TREE;
4957 else
4959 gcc_assert (!TYPE_SIZE (constructor_type));
4961 if (constructor_depth > 2)
4962 error_init ("initialization of flexible array member in a nested context");
4963 else if (pedantic)
4964 pedwarn_init ("initialization of a flexible array member");
4966 /* We have already issued an error message for the existence
4967 of a flexible array member not at the end of the structure.
4968 Discard the initializer so that we do not abort later. */
4969 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
4970 constructor_type = NULL_TREE;
4974 /* Warn when some struct elements are implicitly initialized to zero. */
4975 if (warn_missing_field_initializers
4976 && constructor_type
4977 && TREE_CODE (constructor_type) == RECORD_TYPE
4978 && constructor_unfilled_fields)
4980 /* Do not warn for flexible array members or zero-length arrays. */
4981 while (constructor_unfilled_fields
4982 && (!DECL_SIZE (constructor_unfilled_fields)
4983 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
4984 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
4986 /* Do not warn if this level of the initializer uses member
4987 designators; it is likely to be deliberate. */
4988 if (constructor_unfilled_fields && !constructor_designated)
4990 push_member_name (constructor_unfilled_fields);
4991 warning_init ("missing initializer");
4992 RESTORE_SPELLING_DEPTH (constructor_depth);
4996 /* Pad out the end of the structure. */
4997 if (p->replacement_value.value)
4998 /* If this closes a superfluous brace pair,
4999 just pass out the element between them. */
5000 ret = p->replacement_value;
5001 else if (constructor_type == 0)
5003 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5004 && TREE_CODE (constructor_type) != UNION_TYPE
5005 && TREE_CODE (constructor_type) != ARRAY_TYPE
5006 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5008 /* A nonincremental scalar initializer--just return
5009 the element, after verifying there is just one. */
5010 if (constructor_elements == 0)
5012 if (!constructor_erroneous)
5013 error_init ("empty scalar initializer");
5014 ret.value = error_mark_node;
5016 else if (TREE_CHAIN (constructor_elements) != 0)
5018 error_init ("extra elements in scalar initializer");
5019 ret.value = TREE_VALUE (constructor_elements);
5021 else
5022 ret.value = TREE_VALUE (constructor_elements);
5024 else
5026 if (constructor_erroneous)
5027 ret.value = error_mark_node;
5028 else
5030 ret.value = build_constructor (constructor_type,
5031 nreverse (constructor_elements));
5032 if (constructor_constant)
5033 TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
5034 if (constructor_constant && constructor_simple)
5035 TREE_STATIC (ret.value) = 1;
5039 constructor_type = p->type;
5040 constructor_fields = p->fields;
5041 constructor_index = p->index;
5042 constructor_max_index = p->max_index;
5043 constructor_unfilled_index = p->unfilled_index;
5044 constructor_unfilled_fields = p->unfilled_fields;
5045 constructor_bit_index = p->bit_index;
5046 constructor_elements = p->elements;
5047 constructor_constant = p->constant;
5048 constructor_simple = p->simple;
5049 constructor_erroneous = p->erroneous;
5050 constructor_incremental = p->incremental;
5051 constructor_designated = p->designated;
5052 constructor_pending_elts = p->pending_elts;
5053 constructor_depth = p->depth;
5054 if (!p->implicit)
5055 constructor_range_stack = p->range_stack;
5056 RESTORE_SPELLING_DEPTH (constructor_depth);
5058 constructor_stack = p->next;
5059 free (p);
5061 if (ret.value == 0)
5063 if (constructor_stack == 0)
5065 ret.value = error_mark_node;
5066 return ret;
5068 return ret;
5070 return ret;
5073 /* Common handling for both array range and field name designators.
5074 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5076 static int
5077 set_designator (int array)
5079 tree subtype;
5080 enum tree_code subcode;
5082 /* Don't die if an entire brace-pair level is superfluous
5083 in the containing level. */
5084 if (constructor_type == 0)
5085 return 1;
5087 /* If there were errors in this designator list already, bail out
5088 silently. */
5089 if (designator_errorneous)
5090 return 1;
5092 if (!designator_depth)
5094 gcc_assert (!constructor_range_stack);
5096 /* Designator list starts at the level of closest explicit
5097 braces. */
5098 while (constructor_stack->implicit)
5099 process_init_element (pop_init_level (1));
5100 constructor_designated = 1;
5101 return 0;
5104 if (constructor_no_implicit)
5106 error_init ("initialization designators may not nest");
5107 return 1;
5110 switch (TREE_CODE (constructor_type))
5112 case RECORD_TYPE:
5113 case UNION_TYPE:
5114 subtype = TREE_TYPE (constructor_fields);
5115 if (subtype != error_mark_node)
5116 subtype = TYPE_MAIN_VARIANT (subtype);
5117 break;
5118 case ARRAY_TYPE:
5119 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5120 break;
5121 default:
5122 gcc_unreachable ();
5125 subcode = TREE_CODE (subtype);
5126 if (array && subcode != ARRAY_TYPE)
5128 error_init ("array index in non-array initializer");
5129 return 1;
5131 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5133 error_init ("field name not in record or union initializer");
5134 return 1;
5137 constructor_designated = 1;
5138 push_init_level (2);
5139 return 0;
5142 /* If there are range designators in designator list, push a new designator
5143 to constructor_range_stack. RANGE_END is end of such stack range or
5144 NULL_TREE if there is no range designator at this level. */
5146 static void
5147 push_range_stack (tree range_end)
5149 struct constructor_range_stack *p;
5151 p = GGC_NEW (struct constructor_range_stack);
5152 p->prev = constructor_range_stack;
5153 p->next = 0;
5154 p->fields = constructor_fields;
5155 p->range_start = constructor_index;
5156 p->index = constructor_index;
5157 p->stack = constructor_stack;
5158 p->range_end = range_end;
5159 if (constructor_range_stack)
5160 constructor_range_stack->next = p;
5161 constructor_range_stack = p;
5164 /* Within an array initializer, specify the next index to be initialized.
5165 FIRST is that index. If LAST is nonzero, then initialize a range
5166 of indices, running from FIRST through LAST. */
5168 void
5169 set_init_index (tree first, tree last)
5171 if (set_designator (1))
5172 return;
5174 designator_errorneous = 1;
5176 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5177 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5179 error_init ("array index in initializer not of integer type");
5180 return;
5183 while ((TREE_CODE (first) == NOP_EXPR
5184 || TREE_CODE (first) == CONVERT_EXPR
5185 || TREE_CODE (first) == NON_LVALUE_EXPR)
5186 && (TYPE_MODE (TREE_TYPE (first))
5187 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5188 first = TREE_OPERAND (first, 0);
5190 if (last)
5191 while ((TREE_CODE (last) == NOP_EXPR
5192 || TREE_CODE (last) == CONVERT_EXPR
5193 || TREE_CODE (last) == NON_LVALUE_EXPR)
5194 && (TYPE_MODE (TREE_TYPE (last))
5195 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5196 last = TREE_OPERAND (last, 0);
5198 if (TREE_CODE (first) != INTEGER_CST)
5199 error_init ("nonconstant array index in initializer");
5200 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5201 error_init ("nonconstant array index in initializer");
5202 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5203 error_init ("array index in non-array initializer");
5204 else if (tree_int_cst_sgn (first) == -1)
5205 error_init ("array index in initializer exceeds array bounds");
5206 else if (constructor_max_index
5207 && tree_int_cst_lt (constructor_max_index, first))
5208 error_init ("array index in initializer exceeds array bounds");
5209 else
5211 constructor_index = convert (bitsizetype, first);
5213 if (last)
5215 if (tree_int_cst_equal (first, last))
5216 last = 0;
5217 else if (tree_int_cst_lt (last, first))
5219 error_init ("empty index range in initializer");
5220 last = 0;
5222 else
5224 last = convert (bitsizetype, last);
5225 if (constructor_max_index != 0
5226 && tree_int_cst_lt (constructor_max_index, last))
5228 error_init ("array index range in initializer exceeds array bounds");
5229 last = 0;
5234 designator_depth++;
5235 designator_errorneous = 0;
5236 if (constructor_range_stack || last)
5237 push_range_stack (last);
5241 /* Within a struct initializer, specify the next field to be initialized. */
5243 void
5244 set_init_label (tree fieldname)
5246 tree tail;
5248 if (set_designator (0))
5249 return;
5251 designator_errorneous = 1;
5253 if (TREE_CODE (constructor_type) != RECORD_TYPE
5254 && TREE_CODE (constructor_type) != UNION_TYPE)
5256 error_init ("field name not in record or union initializer");
5257 return;
5260 for (tail = TYPE_FIELDS (constructor_type); tail;
5261 tail = TREE_CHAIN (tail))
5263 if (DECL_NAME (tail) == fieldname)
5264 break;
5267 if (tail == 0)
5268 error ("unknown field %qs specified in initializer",
5269 IDENTIFIER_POINTER (fieldname));
5270 else
5272 constructor_fields = tail;
5273 designator_depth++;
5274 designator_errorneous = 0;
5275 if (constructor_range_stack)
5276 push_range_stack (NULL_TREE);
5280 /* Add a new initializer to the tree of pending initializers. PURPOSE
5281 identifies the initializer, either array index or field in a structure.
5282 VALUE is the value of that index or field. */
5284 static void
5285 add_pending_init (tree purpose, tree value)
5287 struct init_node *p, **q, *r;
5289 q = &constructor_pending_elts;
5290 p = 0;
5292 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5294 while (*q != 0)
5296 p = *q;
5297 if (tree_int_cst_lt (purpose, p->purpose))
5298 q = &p->left;
5299 else if (tree_int_cst_lt (p->purpose, purpose))
5300 q = &p->right;
5301 else
5303 if (TREE_SIDE_EFFECTS (p->value))
5304 warning_init ("initialized field with side-effects overwritten");
5305 p->value = value;
5306 return;
5310 else
5312 tree bitpos;
5314 bitpos = bit_position (purpose);
5315 while (*q != NULL)
5317 p = *q;
5318 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5319 q = &p->left;
5320 else if (p->purpose != purpose)
5321 q = &p->right;
5322 else
5324 if (TREE_SIDE_EFFECTS (p->value))
5325 warning_init ("initialized field with side-effects overwritten");
5326 p->value = value;
5327 return;
5332 r = GGC_NEW (struct init_node);
5333 r->purpose = purpose;
5334 r->value = value;
5336 *q = r;
5337 r->parent = p;
5338 r->left = 0;
5339 r->right = 0;
5340 r->balance = 0;
5342 while (p)
5344 struct init_node *s;
5346 if (r == p->left)
5348 if (p->balance == 0)
5349 p->balance = -1;
5350 else if (p->balance < 0)
5352 if (r->balance < 0)
5354 /* L rotation. */
5355 p->left = r->right;
5356 if (p->left)
5357 p->left->parent = p;
5358 r->right = p;
5360 p->balance = 0;
5361 r->balance = 0;
5363 s = p->parent;
5364 p->parent = r;
5365 r->parent = s;
5366 if (s)
5368 if (s->left == p)
5369 s->left = r;
5370 else
5371 s->right = r;
5373 else
5374 constructor_pending_elts = r;
5376 else
5378 /* LR rotation. */
5379 struct init_node *t = r->right;
5381 r->right = t->left;
5382 if (r->right)
5383 r->right->parent = r;
5384 t->left = r;
5386 p->left = t->right;
5387 if (p->left)
5388 p->left->parent = p;
5389 t->right = p;
5391 p->balance = t->balance < 0;
5392 r->balance = -(t->balance > 0);
5393 t->balance = 0;
5395 s = p->parent;
5396 p->parent = t;
5397 r->parent = t;
5398 t->parent = s;
5399 if (s)
5401 if (s->left == p)
5402 s->left = t;
5403 else
5404 s->right = t;
5406 else
5407 constructor_pending_elts = t;
5409 break;
5411 else
5413 /* p->balance == +1; growth of left side balances the node. */
5414 p->balance = 0;
5415 break;
5418 else /* r == p->right */
5420 if (p->balance == 0)
5421 /* Growth propagation from right side. */
5422 p->balance++;
5423 else if (p->balance > 0)
5425 if (r->balance > 0)
5427 /* R rotation. */
5428 p->right = r->left;
5429 if (p->right)
5430 p->right->parent = p;
5431 r->left = p;
5433 p->balance = 0;
5434 r->balance = 0;
5436 s = p->parent;
5437 p->parent = r;
5438 r->parent = s;
5439 if (s)
5441 if (s->left == p)
5442 s->left = r;
5443 else
5444 s->right = r;
5446 else
5447 constructor_pending_elts = r;
5449 else /* r->balance == -1 */
5451 /* RL rotation */
5452 struct init_node *t = r->left;
5454 r->left = t->right;
5455 if (r->left)
5456 r->left->parent = r;
5457 t->right = r;
5459 p->right = t->left;
5460 if (p->right)
5461 p->right->parent = p;
5462 t->left = p;
5464 r->balance = (t->balance < 0);
5465 p->balance = -(t->balance > 0);
5466 t->balance = 0;
5468 s = p->parent;
5469 p->parent = t;
5470 r->parent = t;
5471 t->parent = s;
5472 if (s)
5474 if (s->left == p)
5475 s->left = t;
5476 else
5477 s->right = t;
5479 else
5480 constructor_pending_elts = t;
5482 break;
5484 else
5486 /* p->balance == -1; growth of right side balances the node. */
5487 p->balance = 0;
5488 break;
5492 r = p;
5493 p = p->parent;
5497 /* Build AVL tree from a sorted chain. */
5499 static void
5500 set_nonincremental_init (void)
5502 tree chain;
5504 if (TREE_CODE (constructor_type) != RECORD_TYPE
5505 && TREE_CODE (constructor_type) != ARRAY_TYPE)
5506 return;
5508 for (chain = constructor_elements; chain; chain = TREE_CHAIN (chain))
5509 add_pending_init (TREE_PURPOSE (chain), TREE_VALUE (chain));
5510 constructor_elements = 0;
5511 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5513 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5514 /* Skip any nameless bit fields at the beginning. */
5515 while (constructor_unfilled_fields != 0
5516 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5517 && DECL_NAME (constructor_unfilled_fields) == 0)
5518 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5521 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5523 if (TYPE_DOMAIN (constructor_type))
5524 constructor_unfilled_index
5525 = convert (bitsizetype,
5526 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5527 else
5528 constructor_unfilled_index = bitsize_zero_node;
5530 constructor_incremental = 0;
5533 /* Build AVL tree from a string constant. */
5535 static void
5536 set_nonincremental_init_from_string (tree str)
5538 tree value, purpose, type;
5539 HOST_WIDE_INT val[2];
5540 const char *p, *end;
5541 int byte, wchar_bytes, charwidth, bitpos;
5543 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
5545 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5546 == TYPE_PRECISION (char_type_node))
5547 wchar_bytes = 1;
5548 else
5550 gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5551 == TYPE_PRECISION (wchar_type_node));
5552 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5554 charwidth = TYPE_PRECISION (char_type_node);
5555 type = TREE_TYPE (constructor_type);
5556 p = TREE_STRING_POINTER (str);
5557 end = p + TREE_STRING_LENGTH (str);
5559 for (purpose = bitsize_zero_node;
5560 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5561 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
5563 if (wchar_bytes == 1)
5565 val[1] = (unsigned char) *p++;
5566 val[0] = 0;
5568 else
5570 val[0] = 0;
5571 val[1] = 0;
5572 for (byte = 0; byte < wchar_bytes; byte++)
5574 if (BYTES_BIG_ENDIAN)
5575 bitpos = (wchar_bytes - byte - 1) * charwidth;
5576 else
5577 bitpos = byte * charwidth;
5578 val[bitpos < HOST_BITS_PER_WIDE_INT]
5579 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5580 << (bitpos % HOST_BITS_PER_WIDE_INT);
5584 if (!TYPE_UNSIGNED (type))
5586 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5587 if (bitpos < HOST_BITS_PER_WIDE_INT)
5589 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5591 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5592 val[0] = -1;
5595 else if (bitpos == HOST_BITS_PER_WIDE_INT)
5597 if (val[1] < 0)
5598 val[0] = -1;
5600 else if (val[0] & (((HOST_WIDE_INT) 1)
5601 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5602 val[0] |= ((HOST_WIDE_INT) -1)
5603 << (bitpos - HOST_BITS_PER_WIDE_INT);
5606 value = build_int_cst_wide (type, val[1], val[0]);
5607 add_pending_init (purpose, value);
5610 constructor_incremental = 0;
5613 /* Return value of FIELD in pending initializer or zero if the field was
5614 not initialized yet. */
5616 static tree
5617 find_init_member (tree field)
5619 struct init_node *p;
5621 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5623 if (constructor_incremental
5624 && tree_int_cst_lt (field, constructor_unfilled_index))
5625 set_nonincremental_init ();
5627 p = constructor_pending_elts;
5628 while (p)
5630 if (tree_int_cst_lt (field, p->purpose))
5631 p = p->left;
5632 else if (tree_int_cst_lt (p->purpose, field))
5633 p = p->right;
5634 else
5635 return p->value;
5638 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5640 tree bitpos = bit_position (field);
5642 if (constructor_incremental
5643 && (!constructor_unfilled_fields
5644 || tree_int_cst_lt (bitpos,
5645 bit_position (constructor_unfilled_fields))))
5646 set_nonincremental_init ();
5648 p = constructor_pending_elts;
5649 while (p)
5651 if (field == p->purpose)
5652 return p->value;
5653 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5654 p = p->left;
5655 else
5656 p = p->right;
5659 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5661 if (constructor_elements
5662 && TREE_PURPOSE (constructor_elements) == field)
5663 return TREE_VALUE (constructor_elements);
5665 return 0;
5668 /* "Output" the next constructor element.
5669 At top level, really output it to assembler code now.
5670 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5671 TYPE is the data type that the containing data type wants here.
5672 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5673 If VALUE is a string constant, STRICT_STRING is true if it is
5674 unparenthesized or we should not warn here for it being parenthesized.
5675 For other types of VALUE, STRICT_STRING is not used.
5677 PENDING if non-nil means output pending elements that belong
5678 right after this element. (PENDING is normally 1;
5679 it is 0 while outputting pending elements, to avoid recursion.) */
5681 static void
5682 output_init_element (tree value, bool strict_string, tree type, tree field,
5683 int pending)
5685 if (type == error_mark_node)
5687 constructor_erroneous = 1;
5688 return;
5690 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5691 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5692 && !(TREE_CODE (value) == STRING_CST
5693 && TREE_CODE (type) == ARRAY_TYPE
5694 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
5695 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5696 TYPE_MAIN_VARIANT (type))))
5697 value = default_conversion (value);
5699 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5700 && require_constant_value && !flag_isoc99 && pending)
5702 /* As an extension, allow initializing objects with static storage
5703 duration with compound literals (which are then treated just as
5704 the brace enclosed list they contain). */
5705 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5706 value = DECL_INITIAL (decl);
5709 if (value == error_mark_node)
5710 constructor_erroneous = 1;
5711 else if (!TREE_CONSTANT (value))
5712 constructor_constant = 0;
5713 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
5714 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5715 || TREE_CODE (constructor_type) == UNION_TYPE)
5716 && DECL_C_BIT_FIELD (field)
5717 && TREE_CODE (value) != INTEGER_CST))
5718 constructor_simple = 0;
5720 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
5722 if (require_constant_value)
5724 error_init ("initializer element is not constant");
5725 value = error_mark_node;
5727 else if (require_constant_elements)
5728 pedwarn ("initializer element is not computable at load time");
5731 /* If this field is empty (and not at the end of structure),
5732 don't do anything other than checking the initializer. */
5733 if (field
5734 && (TREE_TYPE (field) == error_mark_node
5735 || (COMPLETE_TYPE_P (TREE_TYPE (field))
5736 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5737 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5738 || TREE_CHAIN (field)))))
5739 return;
5741 value = digest_init (type, value, strict_string, require_constant_value);
5742 if (value == error_mark_node)
5744 constructor_erroneous = 1;
5745 return;
5748 /* If this element doesn't come next in sequence,
5749 put it on constructor_pending_elts. */
5750 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5751 && (!constructor_incremental
5752 || !tree_int_cst_equal (field, constructor_unfilled_index)))
5754 if (constructor_incremental
5755 && tree_int_cst_lt (field, constructor_unfilled_index))
5756 set_nonincremental_init ();
5758 add_pending_init (field, value);
5759 return;
5761 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5762 && (!constructor_incremental
5763 || field != constructor_unfilled_fields))
5765 /* We do this for records but not for unions. In a union,
5766 no matter which field is specified, it can be initialized
5767 right away since it starts at the beginning of the union. */
5768 if (constructor_incremental)
5770 if (!constructor_unfilled_fields)
5771 set_nonincremental_init ();
5772 else
5774 tree bitpos, unfillpos;
5776 bitpos = bit_position (field);
5777 unfillpos = bit_position (constructor_unfilled_fields);
5779 if (tree_int_cst_lt (bitpos, unfillpos))
5780 set_nonincremental_init ();
5784 add_pending_init (field, value);
5785 return;
5787 else if (TREE_CODE (constructor_type) == UNION_TYPE
5788 && constructor_elements)
5790 if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements)))
5791 warning_init ("initialized field with side-effects overwritten");
5793 /* We can have just one union field set. */
5794 constructor_elements = 0;
5797 /* Otherwise, output this element either to
5798 constructor_elements or to the assembler file. */
5800 if (field && TREE_CODE (field) == INTEGER_CST)
5801 field = copy_node (field);
5802 constructor_elements
5803 = tree_cons (field, value, constructor_elements);
5805 /* Advance the variable that indicates sequential elements output. */
5806 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5807 constructor_unfilled_index
5808 = size_binop (PLUS_EXPR, constructor_unfilled_index,
5809 bitsize_one_node);
5810 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5812 constructor_unfilled_fields
5813 = TREE_CHAIN (constructor_unfilled_fields);
5815 /* Skip any nameless bit fields. */
5816 while (constructor_unfilled_fields != 0
5817 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5818 && DECL_NAME (constructor_unfilled_fields) == 0)
5819 constructor_unfilled_fields =
5820 TREE_CHAIN (constructor_unfilled_fields);
5822 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5823 constructor_unfilled_fields = 0;
5825 /* Now output any pending elements which have become next. */
5826 if (pending)
5827 output_pending_init_elements (0);
5830 /* Output any pending elements which have become next.
5831 As we output elements, constructor_unfilled_{fields,index}
5832 advances, which may cause other elements to become next;
5833 if so, they too are output.
5835 If ALL is 0, we return when there are
5836 no more pending elements to output now.
5838 If ALL is 1, we output space as necessary so that
5839 we can output all the pending elements. */
5841 static void
5842 output_pending_init_elements (int all)
5844 struct init_node *elt = constructor_pending_elts;
5845 tree next;
5847 retry:
5849 /* Look through the whole pending tree.
5850 If we find an element that should be output now,
5851 output it. Otherwise, set NEXT to the element
5852 that comes first among those still pending. */
5854 next = 0;
5855 while (elt)
5857 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5859 if (tree_int_cst_equal (elt->purpose,
5860 constructor_unfilled_index))
5861 output_init_element (elt->value, true,
5862 TREE_TYPE (constructor_type),
5863 constructor_unfilled_index, 0);
5864 else if (tree_int_cst_lt (constructor_unfilled_index,
5865 elt->purpose))
5867 /* Advance to the next smaller node. */
5868 if (elt->left)
5869 elt = elt->left;
5870 else
5872 /* We have reached the smallest node bigger than the
5873 current unfilled index. Fill the space first. */
5874 next = elt->purpose;
5875 break;
5878 else
5880 /* Advance to the next bigger node. */
5881 if (elt->right)
5882 elt = elt->right;
5883 else
5885 /* We have reached the biggest node in a subtree. Find
5886 the parent of it, which is the next bigger node. */
5887 while (elt->parent && elt->parent->right == elt)
5888 elt = elt->parent;
5889 elt = elt->parent;
5890 if (elt && tree_int_cst_lt (constructor_unfilled_index,
5891 elt->purpose))
5893 next = elt->purpose;
5894 break;
5899 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5900 || TREE_CODE (constructor_type) == UNION_TYPE)
5902 tree ctor_unfilled_bitpos, elt_bitpos;
5904 /* If the current record is complete we are done. */
5905 if (constructor_unfilled_fields == 0)
5906 break;
5908 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
5909 elt_bitpos = bit_position (elt->purpose);
5910 /* We can't compare fields here because there might be empty
5911 fields in between. */
5912 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
5914 constructor_unfilled_fields = elt->purpose;
5915 output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
5916 elt->purpose, 0);
5918 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
5920 /* Advance to the next smaller node. */
5921 if (elt->left)
5922 elt = elt->left;
5923 else
5925 /* We have reached the smallest node bigger than the
5926 current unfilled field. Fill the space first. */
5927 next = elt->purpose;
5928 break;
5931 else
5933 /* Advance to the next bigger node. */
5934 if (elt->right)
5935 elt = elt->right;
5936 else
5938 /* We have reached the biggest node in a subtree. Find
5939 the parent of it, which is the next bigger node. */
5940 while (elt->parent && elt->parent->right == elt)
5941 elt = elt->parent;
5942 elt = elt->parent;
5943 if (elt
5944 && (tree_int_cst_lt (ctor_unfilled_bitpos,
5945 bit_position (elt->purpose))))
5947 next = elt->purpose;
5948 break;
5955 /* Ordinarily return, but not if we want to output all
5956 and there are elements left. */
5957 if (!(all && next != 0))
5958 return;
5960 /* If it's not incremental, just skip over the gap, so that after
5961 jumping to retry we will output the next successive element. */
5962 if (TREE_CODE (constructor_type) == RECORD_TYPE
5963 || TREE_CODE (constructor_type) == UNION_TYPE)
5964 constructor_unfilled_fields = next;
5965 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5966 constructor_unfilled_index = next;
5968 /* ELT now points to the node in the pending tree with the next
5969 initializer to output. */
5970 goto retry;
5973 /* Add one non-braced element to the current constructor level.
5974 This adjusts the current position within the constructor's type.
5975 This may also start or terminate implicit levels
5976 to handle a partly-braced initializer.
5978 Once this has found the correct level for the new element,
5979 it calls output_init_element. */
5981 void
5982 process_init_element (struct c_expr value)
5984 tree orig_value = value.value;
5985 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
5986 bool strict_string = value.original_code == STRING_CST;
5988 designator_depth = 0;
5989 designator_errorneous = 0;
5991 /* Handle superfluous braces around string cst as in
5992 char x[] = {"foo"}; */
5993 if (string_flag
5994 && constructor_type
5995 && TREE_CODE (constructor_type) == ARRAY_TYPE
5996 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
5997 && integer_zerop (constructor_unfilled_index))
5999 if (constructor_stack->replacement_value.value)
6000 error_init ("excess elements in char array initializer");
6001 constructor_stack->replacement_value = value;
6002 return;
6005 if (constructor_stack->replacement_value.value != 0)
6007 error_init ("excess elements in struct initializer");
6008 return;
6011 /* Ignore elements of a brace group if it is entirely superfluous
6012 and has already been diagnosed. */
6013 if (constructor_type == 0)
6014 return;
6016 /* If we've exhausted any levels that didn't have braces,
6017 pop them now. */
6018 while (constructor_stack->implicit)
6020 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6021 || TREE_CODE (constructor_type) == UNION_TYPE)
6022 && constructor_fields == 0)
6023 process_init_element (pop_init_level (1));
6024 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6025 && (constructor_max_index == 0
6026 || tree_int_cst_lt (constructor_max_index,
6027 constructor_index)))
6028 process_init_element (pop_init_level (1));
6029 else
6030 break;
6033 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6034 if (constructor_range_stack)
6036 /* If value is a compound literal and we'll be just using its
6037 content, don't put it into a SAVE_EXPR. */
6038 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
6039 || !require_constant_value
6040 || flag_isoc99)
6041 value.value = save_expr (value.value);
6044 while (1)
6046 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6048 tree fieldtype;
6049 enum tree_code fieldcode;
6051 if (constructor_fields == 0)
6053 pedwarn_init ("excess elements in struct initializer");
6054 break;
6057 fieldtype = TREE_TYPE (constructor_fields);
6058 if (fieldtype != error_mark_node)
6059 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6060 fieldcode = TREE_CODE (fieldtype);
6062 /* Error for non-static initialization of a flexible array member. */
6063 if (fieldcode == ARRAY_TYPE
6064 && !require_constant_value
6065 && TYPE_SIZE (fieldtype) == NULL_TREE
6066 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6068 error_init ("non-static initialization of a flexible array member");
6069 break;
6072 /* Accept a string constant to initialize a subarray. */
6073 if (value.value != 0
6074 && fieldcode == ARRAY_TYPE
6075 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6076 && string_flag)
6077 value.value = orig_value;
6078 /* Otherwise, if we have come to a subaggregate,
6079 and we don't have an element of its type, push into it. */
6080 else if (value.value != 0 && !constructor_no_implicit
6081 && value.value != error_mark_node
6082 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6083 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6084 || fieldcode == UNION_TYPE))
6086 push_init_level (1);
6087 continue;
6090 if (value.value)
6092 push_member_name (constructor_fields);
6093 output_init_element (value.value, strict_string,
6094 fieldtype, constructor_fields, 1);
6095 RESTORE_SPELLING_DEPTH (constructor_depth);
6097 else
6098 /* Do the bookkeeping for an element that was
6099 directly output as a constructor. */
6101 /* For a record, keep track of end position of last field. */
6102 if (DECL_SIZE (constructor_fields))
6103 constructor_bit_index
6104 = size_binop (PLUS_EXPR,
6105 bit_position (constructor_fields),
6106 DECL_SIZE (constructor_fields));
6108 /* If the current field was the first one not yet written out,
6109 it isn't now, so update. */
6110 if (constructor_unfilled_fields == constructor_fields)
6112 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6113 /* Skip any nameless bit fields. */
6114 while (constructor_unfilled_fields != 0
6115 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6116 && DECL_NAME (constructor_unfilled_fields) == 0)
6117 constructor_unfilled_fields =
6118 TREE_CHAIN (constructor_unfilled_fields);
6122 constructor_fields = TREE_CHAIN (constructor_fields);
6123 /* Skip any nameless bit fields at the beginning. */
6124 while (constructor_fields != 0
6125 && DECL_C_BIT_FIELD (constructor_fields)
6126 && DECL_NAME (constructor_fields) == 0)
6127 constructor_fields = TREE_CHAIN (constructor_fields);
6129 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6131 tree fieldtype;
6132 enum tree_code fieldcode;
6134 if (constructor_fields == 0)
6136 pedwarn_init ("excess elements in union initializer");
6137 break;
6140 fieldtype = TREE_TYPE (constructor_fields);
6141 if (fieldtype != error_mark_node)
6142 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6143 fieldcode = TREE_CODE (fieldtype);
6145 /* Warn that traditional C rejects initialization of unions.
6146 We skip the warning if the value is zero. This is done
6147 under the assumption that the zero initializer in user
6148 code appears conditioned on e.g. __STDC__ to avoid
6149 "missing initializer" warnings and relies on default
6150 initialization to zero in the traditional C case.
6151 We also skip the warning if the initializer is designated,
6152 again on the assumption that this must be conditional on
6153 __STDC__ anyway (and we've already complained about the
6154 member-designator already). */
6155 if (warn_traditional && !in_system_header && !constructor_designated
6156 && !(value.value && (integer_zerop (value.value)
6157 || real_zerop (value.value))))
6158 warning ("traditional C rejects initialization of unions");
6160 /* Accept a string constant to initialize a subarray. */
6161 if (value.value != 0
6162 && fieldcode == ARRAY_TYPE
6163 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6164 && string_flag)
6165 value.value = orig_value;
6166 /* Otherwise, if we have come to a subaggregate,
6167 and we don't have an element of its type, push into it. */
6168 else if (value.value != 0 && !constructor_no_implicit
6169 && value.value != error_mark_node
6170 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6171 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6172 || fieldcode == UNION_TYPE))
6174 push_init_level (1);
6175 continue;
6178 if (value.value)
6180 push_member_name (constructor_fields);
6181 output_init_element (value.value, strict_string,
6182 fieldtype, constructor_fields, 1);
6183 RESTORE_SPELLING_DEPTH (constructor_depth);
6185 else
6186 /* Do the bookkeeping for an element that was
6187 directly output as a constructor. */
6189 constructor_bit_index = DECL_SIZE (constructor_fields);
6190 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6193 constructor_fields = 0;
6195 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6197 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6198 enum tree_code eltcode = TREE_CODE (elttype);
6200 /* Accept a string constant to initialize a subarray. */
6201 if (value.value != 0
6202 && eltcode == ARRAY_TYPE
6203 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6204 && string_flag)
6205 value.value = orig_value;
6206 /* Otherwise, if we have come to a subaggregate,
6207 and we don't have an element of its type, push into it. */
6208 else if (value.value != 0 && !constructor_no_implicit
6209 && value.value != error_mark_node
6210 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6211 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6212 || eltcode == UNION_TYPE))
6214 push_init_level (1);
6215 continue;
6218 if (constructor_max_index != 0
6219 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6220 || integer_all_onesp (constructor_max_index)))
6222 pedwarn_init ("excess elements in array initializer");
6223 break;
6226 /* Now output the actual element. */
6227 if (value.value)
6229 push_array_bounds (tree_low_cst (constructor_index, 0));
6230 output_init_element (value.value, strict_string,
6231 elttype, constructor_index, 1);
6232 RESTORE_SPELLING_DEPTH (constructor_depth);
6235 constructor_index
6236 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6238 if (!value.value)
6239 /* If we are doing the bookkeeping for an element that was
6240 directly output as a constructor, we must update
6241 constructor_unfilled_index. */
6242 constructor_unfilled_index = constructor_index;
6244 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6246 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6248 /* Do a basic check of initializer size. Note that vectors
6249 always have a fixed size derived from their type. */
6250 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6252 pedwarn_init ("excess elements in vector initializer");
6253 break;
6256 /* Now output the actual element. */
6257 if (value.value)
6258 output_init_element (value.value, strict_string,
6259 elttype, constructor_index, 1);
6261 constructor_index
6262 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6264 if (!value.value)
6265 /* If we are doing the bookkeeping for an element that was
6266 directly output as a constructor, we must update
6267 constructor_unfilled_index. */
6268 constructor_unfilled_index = constructor_index;
6271 /* Handle the sole element allowed in a braced initializer
6272 for a scalar variable. */
6273 else if (constructor_fields == 0)
6275 pedwarn_init ("excess elements in scalar initializer");
6276 break;
6278 else
6280 if (value.value)
6281 output_init_element (value.value, strict_string,
6282 constructor_type, NULL_TREE, 1);
6283 constructor_fields = 0;
6286 /* Handle range initializers either at this level or anywhere higher
6287 in the designator stack. */
6288 if (constructor_range_stack)
6290 struct constructor_range_stack *p, *range_stack;
6291 int finish = 0;
6293 range_stack = constructor_range_stack;
6294 constructor_range_stack = 0;
6295 while (constructor_stack != range_stack->stack)
6297 gcc_assert (constructor_stack->implicit);
6298 process_init_element (pop_init_level (1));
6300 for (p = range_stack;
6301 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6302 p = p->prev)
6304 gcc_assert (constructor_stack->implicit);
6305 process_init_element (pop_init_level (1));
6308 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6309 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6310 finish = 1;
6312 while (1)
6314 constructor_index = p->index;
6315 constructor_fields = p->fields;
6316 if (finish && p->range_end && p->index == p->range_start)
6318 finish = 0;
6319 p->prev = 0;
6321 p = p->next;
6322 if (!p)
6323 break;
6324 push_init_level (2);
6325 p->stack = constructor_stack;
6326 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6327 p->index = p->range_start;
6330 if (!finish)
6331 constructor_range_stack = range_stack;
6332 continue;
6335 break;
6338 constructor_range_stack = 0;
6341 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6342 (guaranteed to be 'volatile' or null) and ARGS (represented using
6343 an ASM_EXPR node). */
6344 tree
6345 build_asm_stmt (tree cv_qualifier, tree args)
6347 if (!ASM_VOLATILE_P (args) && cv_qualifier)
6348 ASM_VOLATILE_P (args) = 1;
6349 return add_stmt (args);
6352 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6353 some INPUTS, and some CLOBBERS. The latter three may be NULL.
6354 SIMPLE indicates whether there was anything at all after the
6355 string in the asm expression -- asm("blah") and asm("blah" : )
6356 are subtly different. We use a ASM_EXPR node to represent this. */
6357 tree
6358 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6359 bool simple)
6361 tree tail;
6362 tree args;
6363 int i;
6364 const char *constraint;
6365 bool allows_mem, allows_reg, is_inout;
6366 int ninputs;
6367 int noutputs;
6369 ninputs = list_length (inputs);
6370 noutputs = list_length (outputs);
6372 /* Remove output conversions that change the type but not the mode. */
6373 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6375 tree output = TREE_VALUE (tail);
6376 STRIP_NOPS (output);
6377 TREE_VALUE (tail) = output;
6378 lvalue_or_else (output, lv_asm);
6380 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6382 if (!parse_output_constraint (&constraint, i, ninputs, noutputs,
6383 &allows_mem, &allows_reg, &is_inout))
6385 /* By marking this operand as erroneous, we will not try
6386 to process this operand again in expand_asm_operands. */
6387 TREE_VALUE (tail) = error_mark_node;
6388 continue;
6391 /* If the operand is a DECL that is going to end up in
6392 memory, assume it is addressable. This is a bit more
6393 conservative than it would ideally be; the exact test is
6394 buried deep in expand_asm_operands and depends on the
6395 DECL_RTL for the OPERAND -- which we don't have at this
6396 point. */
6397 if (!allows_reg && DECL_P (output))
6398 c_mark_addressable (output);
6401 /* Perform default conversions on array and function inputs.
6402 Don't do this for other types as it would screw up operands
6403 expected to be in memory. */
6404 for (tail = inputs; tail; tail = TREE_CHAIN (tail))
6405 TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail));
6407 args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6409 /* Simple asm statements are treated as volatile. */
6410 if (simple)
6412 ASM_VOLATILE_P (args) = 1;
6413 ASM_INPUT_P (args) = 1;
6415 return args;
6418 /* Generate a goto statement to LABEL. */
6420 tree
6421 c_finish_goto_label (tree label)
6423 tree decl = lookup_label (label);
6424 if (!decl)
6425 return NULL_TREE;
6427 TREE_USED (decl) = 1;
6428 return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
6431 /* Generate a computed goto statement to EXPR. */
6433 tree
6434 c_finish_goto_ptr (tree expr)
6436 if (pedantic)
6437 pedwarn ("ISO C forbids %<goto *expr;%>");
6438 expr = convert (ptr_type_node, expr);
6439 return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
6442 /* Generate a C `return' statement. RETVAL is the expression for what
6443 to return, or a null pointer for `return;' with no value. */
6445 tree
6446 c_finish_return (tree retval)
6448 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6450 if (TREE_THIS_VOLATILE (current_function_decl))
6451 warning ("function declared %<noreturn%> has a %<return%> statement");
6453 if (!retval)
6455 current_function_returns_null = 1;
6456 if ((warn_return_type || flag_isoc99)
6457 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6458 pedwarn_c99 ("%<return%> with no value, in "
6459 "function returning non-void");
6461 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6463 current_function_returns_null = 1;
6464 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6465 pedwarn ("%<return%> with a value, in function returning void");
6467 else
6469 tree t = convert_for_assignment (valtype, retval, ic_return,
6470 NULL_TREE, NULL_TREE, 0);
6471 tree res = DECL_RESULT (current_function_decl);
6472 tree inner;
6474 current_function_returns_value = 1;
6475 if (t == error_mark_node)
6476 return NULL_TREE;
6478 inner = t = convert (TREE_TYPE (res), t);
6480 /* Strip any conversions, additions, and subtractions, and see if
6481 we are returning the address of a local variable. Warn if so. */
6482 while (1)
6484 switch (TREE_CODE (inner))
6486 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6487 case PLUS_EXPR:
6488 inner = TREE_OPERAND (inner, 0);
6489 continue;
6491 case MINUS_EXPR:
6492 /* If the second operand of the MINUS_EXPR has a pointer
6493 type (or is converted from it), this may be valid, so
6494 don't give a warning. */
6496 tree op1 = TREE_OPERAND (inner, 1);
6498 while (!POINTER_TYPE_P (TREE_TYPE (op1))
6499 && (TREE_CODE (op1) == NOP_EXPR
6500 || TREE_CODE (op1) == NON_LVALUE_EXPR
6501 || TREE_CODE (op1) == CONVERT_EXPR))
6502 op1 = TREE_OPERAND (op1, 0);
6504 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6505 break;
6507 inner = TREE_OPERAND (inner, 0);
6508 continue;
6511 case ADDR_EXPR:
6512 inner = TREE_OPERAND (inner, 0);
6514 while (REFERENCE_CLASS_P (inner)
6515 && TREE_CODE (inner) != INDIRECT_REF)
6516 inner = TREE_OPERAND (inner, 0);
6518 if (DECL_P (inner)
6519 && !DECL_EXTERNAL (inner)
6520 && !TREE_STATIC (inner)
6521 && DECL_CONTEXT (inner) == current_function_decl)
6522 warning ("function returns address of local variable");
6523 break;
6525 default:
6526 break;
6529 break;
6532 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
6535 return add_stmt (build_stmt (RETURN_EXPR, retval));
6538 struct c_switch {
6539 /* The SWITCH_STMT being built. */
6540 tree switch_stmt;
6542 /* The original type of the testing expression, i.e. before the
6543 default conversion is applied. */
6544 tree orig_type;
6546 /* A splay-tree mapping the low element of a case range to the high
6547 element, or NULL_TREE if there is no high element. Used to
6548 determine whether or not a new case label duplicates an old case
6549 label. We need a tree, rather than simply a hash table, because
6550 of the GNU case range extension. */
6551 splay_tree cases;
6553 /* The next node on the stack. */
6554 struct c_switch *next;
6557 /* A stack of the currently active switch statements. The innermost
6558 switch statement is on the top of the stack. There is no need to
6559 mark the stack for garbage collection because it is only active
6560 during the processing of the body of a function, and we never
6561 collect at that point. */
6563 struct c_switch *c_switch_stack;
6565 /* Start a C switch statement, testing expression EXP. Return the new
6566 SWITCH_STMT. */
6568 tree
6569 c_start_case (tree exp)
6571 enum tree_code code;
6572 tree type, orig_type = error_mark_node;
6573 struct c_switch *cs;
6575 if (exp != error_mark_node)
6577 code = TREE_CODE (TREE_TYPE (exp));
6578 orig_type = TREE_TYPE (exp);
6580 if (!INTEGRAL_TYPE_P (orig_type)
6581 && code != ERROR_MARK)
6583 error ("switch quantity not an integer");
6584 exp = integer_zero_node;
6586 else
6588 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6590 if (warn_traditional && !in_system_header
6591 && (type == long_integer_type_node
6592 || type == long_unsigned_type_node))
6593 warning ("%<long%> switch expression not converted to "
6594 "%<int%> in ISO C");
6596 exp = default_conversion (exp);
6597 type = TREE_TYPE (exp);
6601 /* Add this new SWITCH_STMT to the stack. */
6602 cs = XNEW (struct c_switch);
6603 cs->switch_stmt = build_stmt ((enum tree_code) SWITCH_STMT, exp, NULL_TREE,
6604 orig_type);
6605 cs->orig_type = orig_type;
6606 cs->cases = splay_tree_new (case_compare, NULL, NULL);
6607 cs->next = c_switch_stack;
6608 c_switch_stack = cs;
6610 return add_stmt (cs->switch_stmt);
6613 /* Process a case label. */
6615 tree
6616 do_case (tree low_value, tree high_value)
6618 tree label = NULL_TREE;
6620 if (c_switch_stack)
6622 label = c_add_case_label (c_switch_stack->cases,
6623 SWITCH_COND (c_switch_stack->switch_stmt),
6624 c_switch_stack->orig_type,
6625 low_value, high_value);
6626 if (label == error_mark_node)
6627 label = NULL_TREE;
6629 else if (low_value)
6630 error ("case label not within a switch statement");
6631 else
6632 error ("%<default%> label not within a switch statement");
6634 return label;
6637 /* Finish the switch statement. */
6639 void
6640 c_finish_case (tree body)
6642 struct c_switch *cs = c_switch_stack;
6644 SWITCH_BODY (cs->switch_stmt) = body;
6646 /* Emit warnings as needed. */
6647 c_do_switch_warnings (cs->cases, cs->switch_stmt);
6649 /* Pop the stack. */
6650 c_switch_stack = cs->next;
6651 splay_tree_delete (cs->cases);
6652 XDELETE (cs);
6655 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
6656 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
6657 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
6658 statement, and was not surrounded with parenthesis. */
6660 void
6661 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
6662 tree else_block, bool nested_if)
6664 tree stmt;
6666 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
6667 if (warn_parentheses && nested_if && else_block == NULL)
6669 tree inner_if = then_block;
6671 /* We know from the grammar productions that there is an IF nested
6672 within THEN_BLOCK. Due to labels and c99 conditional declarations,
6673 it might not be exactly THEN_BLOCK, but should be the last
6674 non-container statement within. */
6675 while (1)
6676 switch (TREE_CODE (inner_if))
6678 case COND_EXPR:
6679 goto found;
6680 case BIND_EXPR:
6681 inner_if = BIND_EXPR_BODY (inner_if);
6682 break;
6683 case STATEMENT_LIST:
6684 inner_if = expr_last (then_block);
6685 break;
6686 case TRY_FINALLY_EXPR:
6687 case TRY_CATCH_EXPR:
6688 inner_if = TREE_OPERAND (inner_if, 0);
6689 break;
6690 default:
6691 gcc_unreachable ();
6693 found:
6695 if (COND_EXPR_ELSE (inner_if))
6696 warning ("%Hsuggest explicit braces to avoid ambiguous %<else%>",
6697 &if_locus);
6700 /* Diagnose ";" via the special empty statement node that we create. */
6701 if (extra_warnings)
6703 if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
6705 if (!else_block)
6706 warning ("%Hempty body in an if-statement",
6707 EXPR_LOCUS (then_block));
6708 then_block = alloc_stmt_list ();
6710 if (else_block
6711 && TREE_CODE (else_block) == NOP_EXPR
6712 && !TREE_TYPE (else_block))
6714 warning ("%Hempty body in an else-statement",
6715 EXPR_LOCUS (else_block));
6716 else_block = alloc_stmt_list ();
6720 stmt = build3 (COND_EXPR, NULL_TREE, cond, then_block, else_block);
6721 SET_EXPR_LOCATION (stmt, if_locus);
6722 add_stmt (stmt);
6725 /* Emit a general-purpose loop construct. START_LOCUS is the location of
6726 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
6727 is false for DO loops. INCR is the FOR increment expression. BODY is
6728 the statement controlled by the loop. BLAB is the break label. CLAB is
6729 the continue label. Everything is allowed to be NULL. */
6731 void
6732 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
6733 tree blab, tree clab, bool cond_is_first)
6735 tree entry = NULL, exit = NULL, t;
6737 /* Detect do { ... } while (0) and don't generate loop construct. */
6738 if (cond && !cond_is_first && integer_zerop (cond))
6739 cond = NULL;
6740 if (cond_is_first || cond)
6742 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6744 /* If we have an exit condition, then we build an IF with gotos either
6745 out of the loop, or to the top of it. If there's no exit condition,
6746 then we just build a jump back to the top. */
6747 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
6749 if (cond)
6751 /* Canonicalize the loop condition to the end. This means
6752 generating a branch to the loop condition. Reuse the
6753 continue label, if possible. */
6754 if (cond_is_first)
6756 if (incr || !clab)
6758 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6759 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
6761 else
6762 t = build1 (GOTO_EXPR, void_type_node, clab);
6763 SET_EXPR_LOCATION (t, start_locus);
6764 add_stmt (t);
6767 t = build_and_jump (&blab);
6768 exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
6769 exit = fold (exit);
6770 if (cond_is_first)
6771 SET_EXPR_LOCATION (exit, start_locus);
6772 else
6773 SET_EXPR_LOCATION (exit, input_location);
6776 add_stmt (top);
6779 if (body)
6780 add_stmt (body);
6781 if (clab)
6782 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
6783 if (incr)
6784 add_stmt (incr);
6785 if (entry)
6786 add_stmt (entry);
6787 if (exit)
6788 add_stmt (exit);
6789 if (blab)
6790 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
6793 tree
6794 c_finish_bc_stmt (tree *label_p, bool is_break)
6796 tree label = *label_p;
6798 if (!label)
6799 *label_p = label = create_artificial_label ();
6800 else if (TREE_CODE (label) != LABEL_DECL)
6802 if (is_break)
6803 error ("break statement not within loop or switch");
6804 else
6805 error ("continue statement not within a loop");
6806 return NULL_TREE;
6809 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
6812 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
6814 static void
6815 emit_side_effect_warnings (tree expr)
6817 if (expr == error_mark_node)
6819 else if (!TREE_SIDE_EFFECTS (expr))
6821 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
6822 warning ("%Hstatement with no effect",
6823 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
6825 else if (warn_unused_value)
6826 warn_if_unused_value (expr, input_location);
6829 /* Process an expression as if it were a complete statement. Emit
6830 diagnostics, but do not call ADD_STMT. */
6832 tree
6833 c_process_expr_stmt (tree expr)
6835 if (!expr)
6836 return NULL_TREE;
6838 /* Do default conversion if safe and possibly important,
6839 in case within ({...}). */
6840 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
6841 && (flag_isoc99 || lvalue_p (expr)))
6842 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
6843 expr = default_conversion (expr);
6845 if (warn_sequence_point)
6846 verify_sequence_points (expr);
6848 if (TREE_TYPE (expr) != error_mark_node
6849 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
6850 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
6851 error ("expression statement has incomplete type");
6853 /* If we're not processing a statement expression, warn about unused values.
6854 Warnings for statement expressions will be emitted later, once we figure
6855 out which is the result. */
6856 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
6857 && (extra_warnings || warn_unused_value))
6858 emit_side_effect_warnings (expr);
6860 /* If the expression is not of a type to which we cannot assign a line
6861 number, wrap the thing in a no-op NOP_EXPR. */
6862 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
6863 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
6865 if (EXPR_P (expr))
6866 SET_EXPR_LOCATION (expr, input_location);
6868 return expr;
6871 /* Emit an expression as a statement. */
6873 tree
6874 c_finish_expr_stmt (tree expr)
6876 if (expr)
6877 return add_stmt (c_process_expr_stmt (expr));
6878 else
6879 return NULL;
6882 /* Do the opposite and emit a statement as an expression. To begin,
6883 create a new binding level and return it. */
6885 tree
6886 c_begin_stmt_expr (void)
6888 tree ret;
6890 /* We must force a BLOCK for this level so that, if it is not expanded
6891 later, there is a way to turn off the entire subtree of blocks that
6892 are contained in it. */
6893 keep_next_level ();
6894 ret = c_begin_compound_stmt (true);
6896 /* Mark the current statement list as belonging to a statement list. */
6897 STATEMENT_LIST_STMT_EXPR (ret) = 1;
6899 return ret;
6902 tree
6903 c_finish_stmt_expr (tree body)
6905 tree last, type, tmp, val;
6906 tree *last_p;
6908 body = c_end_compound_stmt (body, true);
6910 /* Locate the last statement in BODY. See c_end_compound_stmt
6911 about always returning a BIND_EXPR. */
6912 last_p = &BIND_EXPR_BODY (body);
6913 last = BIND_EXPR_BODY (body);
6915 continue_searching:
6916 if (TREE_CODE (last) == STATEMENT_LIST)
6918 tree_stmt_iterator i;
6920 /* This can happen with degenerate cases like ({ }). No value. */
6921 if (!TREE_SIDE_EFFECTS (last))
6922 return body;
6924 /* If we're supposed to generate side effects warnings, process
6925 all of the statements except the last. */
6926 if (extra_warnings || warn_unused_value)
6928 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
6929 emit_side_effect_warnings (tsi_stmt (i));
6931 else
6932 i = tsi_last (last);
6933 last_p = tsi_stmt_ptr (i);
6934 last = *last_p;
6937 /* If the end of the list is exception related, then the list was split
6938 by a call to push_cleanup. Continue searching. */
6939 if (TREE_CODE (last) == TRY_FINALLY_EXPR
6940 || TREE_CODE (last) == TRY_CATCH_EXPR)
6942 last_p = &TREE_OPERAND (last, 0);
6943 last = *last_p;
6944 goto continue_searching;
6947 /* In the case that the BIND_EXPR is not necessary, return the
6948 expression out from inside it. */
6949 if (last == error_mark_node
6950 || (last == BIND_EXPR_BODY (body)
6951 && BIND_EXPR_VARS (body) == NULL))
6952 return last;
6954 /* Extract the type of said expression. */
6955 type = TREE_TYPE (last);
6957 /* If we're not returning a value at all, then the BIND_EXPR that
6958 we already have is a fine expression to return. */
6959 if (!type || VOID_TYPE_P (type))
6960 return body;
6962 /* Now that we've located the expression containing the value, it seems
6963 silly to make voidify_wrapper_expr repeat the process. Create a
6964 temporary of the appropriate type and stick it in a TARGET_EXPR. */
6965 tmp = create_tmp_var_raw (type, NULL);
6967 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
6968 tree_expr_nonnegative_p giving up immediately. */
6969 val = last;
6970 if (TREE_CODE (val) == NOP_EXPR
6971 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
6972 val = TREE_OPERAND (val, 0);
6974 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
6975 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
6977 return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
6980 /* Begin and end compound statements. This is as simple as pushing
6981 and popping new statement lists from the tree. */
6983 tree
6984 c_begin_compound_stmt (bool do_scope)
6986 tree stmt = push_stmt_list ();
6987 if (do_scope)
6988 push_scope ();
6989 return stmt;
6992 tree
6993 c_end_compound_stmt (tree stmt, bool do_scope)
6995 tree block = NULL;
6997 if (do_scope)
6999 if (c_dialect_objc ())
7000 objc_clear_super_receiver ();
7001 block = pop_scope ();
7004 stmt = pop_stmt_list (stmt);
7005 stmt = c_build_bind_expr (block, stmt);
7007 /* If this compound statement is nested immediately inside a statement
7008 expression, then force a BIND_EXPR to be created. Otherwise we'll
7009 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
7010 STATEMENT_LISTs merge, and thus we can lose track of what statement
7011 was really last. */
7012 if (cur_stmt_list
7013 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7014 && TREE_CODE (stmt) != BIND_EXPR)
7016 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
7017 TREE_SIDE_EFFECTS (stmt) = 1;
7020 return stmt;
7023 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
7024 when the current scope is exited. EH_ONLY is true when this is not
7025 meant to apply to normal control flow transfer. */
7027 void
7028 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
7030 enum tree_code code;
7031 tree stmt, list;
7032 bool stmt_expr;
7034 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
7035 stmt = build_stmt (code, NULL, cleanup);
7036 add_stmt (stmt);
7037 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
7038 list = push_stmt_list ();
7039 TREE_OPERAND (stmt, 0) = list;
7040 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
7043 /* Build a binary-operation expression without default conversions.
7044 CODE is the kind of expression to build.
7045 This function differs from `build' in several ways:
7046 the data type of the result is computed and recorded in it,
7047 warnings are generated if arg data types are invalid,
7048 special handling for addition and subtraction of pointers is known,
7049 and some optimization is done (operations on narrow ints
7050 are done in the narrower type when that gives the same result).
7051 Constant folding is also done before the result is returned.
7053 Note that the operands will never have enumeral types, or function
7054 or array types, because either they will have the default conversions
7055 performed or they have both just been converted to some other type in which
7056 the arithmetic is to be done. */
7058 tree
7059 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
7060 int convert_p)
7062 tree type0, type1;
7063 enum tree_code code0, code1;
7064 tree op0, op1;
7066 /* Expression code to give to the expression when it is built.
7067 Normally this is CODE, which is what the caller asked for,
7068 but in some special cases we change it. */
7069 enum tree_code resultcode = code;
7071 /* Data type in which the computation is to be performed.
7072 In the simplest cases this is the common type of the arguments. */
7073 tree result_type = NULL;
7075 /* Nonzero means operands have already been type-converted
7076 in whatever way is necessary.
7077 Zero means they need to be converted to RESULT_TYPE. */
7078 int converted = 0;
7080 /* Nonzero means create the expression with this type, rather than
7081 RESULT_TYPE. */
7082 tree build_type = 0;
7084 /* Nonzero means after finally constructing the expression
7085 convert it to this type. */
7086 tree final_type = 0;
7088 /* Nonzero if this is an operation like MIN or MAX which can
7089 safely be computed in short if both args are promoted shorts.
7090 Also implies COMMON.
7091 -1 indicates a bitwise operation; this makes a difference
7092 in the exact conditions for when it is safe to do the operation
7093 in a narrower mode. */
7094 int shorten = 0;
7096 /* Nonzero if this is a comparison operation;
7097 if both args are promoted shorts, compare the original shorts.
7098 Also implies COMMON. */
7099 int short_compare = 0;
7101 /* Nonzero if this is a right-shift operation, which can be computed on the
7102 original short and then promoted if the operand is a promoted short. */
7103 int short_shift = 0;
7105 /* Nonzero means set RESULT_TYPE to the common type of the args. */
7106 int common = 0;
7108 if (convert_p)
7110 op0 = default_conversion (orig_op0);
7111 op1 = default_conversion (orig_op1);
7113 else
7115 op0 = orig_op0;
7116 op1 = orig_op1;
7119 type0 = TREE_TYPE (op0);
7120 type1 = TREE_TYPE (op1);
7122 /* The expression codes of the data types of the arguments tell us
7123 whether the arguments are integers, floating, pointers, etc. */
7124 code0 = TREE_CODE (type0);
7125 code1 = TREE_CODE (type1);
7127 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
7128 STRIP_TYPE_NOPS (op0);
7129 STRIP_TYPE_NOPS (op1);
7131 /* If an error was already reported for one of the arguments,
7132 avoid reporting another error. */
7134 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7135 return error_mark_node;
7137 switch (code)
7139 case PLUS_EXPR:
7140 /* Handle the pointer + int case. */
7141 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7142 return pointer_int_sum (PLUS_EXPR, op0, op1);
7143 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7144 return pointer_int_sum (PLUS_EXPR, op1, op0);
7145 else
7146 common = 1;
7147 break;
7149 case MINUS_EXPR:
7150 /* Subtraction of two similar pointers.
7151 We must subtract them as integers, then divide by object size. */
7152 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7153 && comp_target_types (type0, type1, 1))
7154 return pointer_diff (op0, op1);
7155 /* Handle pointer minus int. Just like pointer plus int. */
7156 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7157 return pointer_int_sum (MINUS_EXPR, op0, op1);
7158 else
7159 common = 1;
7160 break;
7162 case MULT_EXPR:
7163 common = 1;
7164 break;
7166 case TRUNC_DIV_EXPR:
7167 case CEIL_DIV_EXPR:
7168 case FLOOR_DIV_EXPR:
7169 case ROUND_DIV_EXPR:
7170 case EXACT_DIV_EXPR:
7171 /* Floating point division by zero is a legitimate way to obtain
7172 infinities and NaNs. */
7173 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7174 warning ("division by zero");
7176 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7177 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7178 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7179 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7181 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7182 code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
7183 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
7184 code1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
7186 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
7187 resultcode = RDIV_EXPR;
7188 else
7189 /* Although it would be tempting to shorten always here, that
7190 loses on some targets, since the modulo instruction is
7191 undefined if the quotient can't be represented in the
7192 computation mode. We shorten only if unsigned or if
7193 dividing by something we know != -1. */
7194 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7195 || (TREE_CODE (op1) == INTEGER_CST
7196 && !integer_all_onesp (op1)));
7197 common = 1;
7199 break;
7201 case BIT_AND_EXPR:
7202 case BIT_IOR_EXPR:
7203 case BIT_XOR_EXPR:
7204 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7205 shorten = -1;
7206 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
7207 common = 1;
7208 break;
7210 case TRUNC_MOD_EXPR:
7211 case FLOOR_MOD_EXPR:
7212 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7213 warning ("division by zero");
7215 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7217 /* Although it would be tempting to shorten always here, that loses
7218 on some targets, since the modulo instruction is undefined if the
7219 quotient can't be represented in the computation mode. We shorten
7220 only if unsigned or if dividing by something we know != -1. */
7221 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7222 || (TREE_CODE (op1) == INTEGER_CST
7223 && !integer_all_onesp (op1)));
7224 common = 1;
7226 break;
7228 case TRUTH_ANDIF_EXPR:
7229 case TRUTH_ORIF_EXPR:
7230 case TRUTH_AND_EXPR:
7231 case TRUTH_OR_EXPR:
7232 case TRUTH_XOR_EXPR:
7233 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
7234 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
7235 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
7236 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
7238 /* Result of these operations is always an int,
7239 but that does not mean the operands should be
7240 converted to ints! */
7241 result_type = integer_type_node;
7242 op0 = lang_hooks.truthvalue_conversion (op0);
7243 op1 = lang_hooks.truthvalue_conversion (op1);
7244 converted = 1;
7246 break;
7248 /* Shift operations: result has same type as first operand;
7249 always convert second operand to int.
7250 Also set SHORT_SHIFT if shifting rightward. */
7252 case RSHIFT_EXPR:
7253 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7255 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7257 if (tree_int_cst_sgn (op1) < 0)
7258 warning ("right shift count is negative");
7259 else
7261 if (!integer_zerop (op1))
7262 short_shift = 1;
7264 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7265 warning ("right shift count >= width of type");
7269 /* Use the type of the value to be shifted. */
7270 result_type = type0;
7271 /* Convert the shift-count to an integer, regardless of size
7272 of value being shifted. */
7273 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7274 op1 = convert (integer_type_node, op1);
7275 /* Avoid converting op1 to result_type later. */
7276 converted = 1;
7278 break;
7280 case LSHIFT_EXPR:
7281 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7283 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7285 if (tree_int_cst_sgn (op1) < 0)
7286 warning ("left shift count is negative");
7288 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7289 warning ("left shift count >= width of type");
7292 /* Use the type of the value to be shifted. */
7293 result_type = type0;
7294 /* Convert the shift-count to an integer, regardless of size
7295 of value being shifted. */
7296 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7297 op1 = convert (integer_type_node, op1);
7298 /* Avoid converting op1 to result_type later. */
7299 converted = 1;
7301 break;
7303 case RROTATE_EXPR:
7304 case LROTATE_EXPR:
7305 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7307 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7309 if (tree_int_cst_sgn (op1) < 0)
7310 warning ("shift count is negative");
7311 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7312 warning ("shift count >= width of type");
7315 /* Use the type of the value to be shifted. */
7316 result_type = type0;
7317 /* Convert the shift-count to an integer, regardless of size
7318 of value being shifted. */
7319 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7320 op1 = convert (integer_type_node, op1);
7321 /* Avoid converting op1 to result_type later. */
7322 converted = 1;
7324 break;
7326 case EQ_EXPR:
7327 case NE_EXPR:
7328 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
7329 warning ("comparing floating point with == or != is unsafe");
7330 /* Result of comparison is always int,
7331 but don't convert the args to int! */
7332 build_type = integer_type_node;
7333 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7334 || code0 == COMPLEX_TYPE)
7335 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7336 || code1 == COMPLEX_TYPE))
7337 short_compare = 1;
7338 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7340 tree tt0 = TREE_TYPE (type0);
7341 tree tt1 = TREE_TYPE (type1);
7342 /* Anything compares with void *. void * compares with anything.
7343 Otherwise, the targets must be compatible
7344 and both must be object or both incomplete. */
7345 if (comp_target_types (type0, type1, 1))
7346 result_type = common_pointer_type (type0, type1);
7347 else if (VOID_TYPE_P (tt0))
7349 /* op0 != orig_op0 detects the case of something
7350 whose value is 0 but which isn't a valid null ptr const. */
7351 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
7352 && TREE_CODE (tt1) == FUNCTION_TYPE)
7353 pedwarn ("ISO C forbids comparison of %<void *%>"
7354 " with function pointer");
7356 else if (VOID_TYPE_P (tt1))
7358 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
7359 && TREE_CODE (tt0) == FUNCTION_TYPE)
7360 pedwarn ("ISO C forbids comparison of %<void *%>"
7361 " with function pointer");
7363 else
7364 pedwarn ("comparison of distinct pointer types lacks a cast");
7366 if (result_type == NULL_TREE)
7367 result_type = ptr_type_node;
7369 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7370 && integer_zerop (op1))
7371 result_type = type0;
7372 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7373 && integer_zerop (op0))
7374 result_type = type1;
7375 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7377 result_type = type0;
7378 pedwarn ("comparison between pointer and integer");
7380 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7382 result_type = type1;
7383 pedwarn ("comparison between pointer and integer");
7385 break;
7387 case MAX_EXPR:
7388 case MIN_EXPR:
7389 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7390 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7391 shorten = 1;
7392 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7394 if (comp_target_types (type0, type1, 1))
7396 result_type = common_pointer_type (type0, type1);
7397 if (pedantic
7398 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7399 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7401 else
7403 result_type = ptr_type_node;
7404 pedwarn ("comparison of distinct pointer types lacks a cast");
7407 break;
7409 case LE_EXPR:
7410 case GE_EXPR:
7411 case LT_EXPR:
7412 case GT_EXPR:
7413 build_type = integer_type_node;
7414 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7415 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7416 short_compare = 1;
7417 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7419 if (comp_target_types (type0, type1, 1))
7421 result_type = common_pointer_type (type0, type1);
7422 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
7423 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
7424 pedwarn ("comparison of complete and incomplete pointers");
7425 else if (pedantic
7426 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7427 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7429 else
7431 result_type = ptr_type_node;
7432 pedwarn ("comparison of distinct pointer types lacks a cast");
7435 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7436 && integer_zerop (op1))
7438 result_type = type0;
7439 if (pedantic || extra_warnings)
7440 pedwarn ("ordered comparison of pointer with integer zero");
7442 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7443 && integer_zerop (op0))
7445 result_type = type1;
7446 if (pedantic)
7447 pedwarn ("ordered comparison of pointer with integer zero");
7449 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7451 result_type = type0;
7452 pedwarn ("comparison between pointer and integer");
7454 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7456 result_type = type1;
7457 pedwarn ("comparison between pointer and integer");
7459 break;
7461 case UNORDERED_EXPR:
7462 case ORDERED_EXPR:
7463 case UNLT_EXPR:
7464 case UNLE_EXPR:
7465 case UNGT_EXPR:
7466 case UNGE_EXPR:
7467 case UNEQ_EXPR:
7468 case LTGT_EXPR:
7469 build_type = integer_type_node;
7470 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
7472 error ("unordered comparison on non-floating point argument");
7473 return error_mark_node;
7475 common = 1;
7476 break;
7478 default:
7479 break;
7482 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7483 return error_mark_node;
7485 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
7486 || code0 == VECTOR_TYPE)
7488 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
7489 || code1 == VECTOR_TYPE))
7491 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
7493 if (shorten || common || short_compare)
7494 result_type = common_type (type0, type1);
7496 /* For certain operations (which identify themselves by shorten != 0)
7497 if both args were extended from the same smaller type,
7498 do the arithmetic in that type and then extend.
7500 shorten !=0 and !=1 indicates a bitwise operation.
7501 For them, this optimization is safe only if
7502 both args are zero-extended or both are sign-extended.
7503 Otherwise, we might change the result.
7504 Eg, (short)-1 | (unsigned short)-1 is (int)-1
7505 but calculated in (unsigned short) it would be (unsigned short)-1. */
7507 if (shorten && none_complex)
7509 int unsigned0, unsigned1;
7510 tree arg0 = get_narrower (op0, &unsigned0);
7511 tree arg1 = get_narrower (op1, &unsigned1);
7512 /* UNS is 1 if the operation to be done is an unsigned one. */
7513 int uns = TYPE_UNSIGNED (result_type);
7514 tree type;
7516 final_type = result_type;
7518 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
7519 but it *requires* conversion to FINAL_TYPE. */
7521 if ((TYPE_PRECISION (TREE_TYPE (op0))
7522 == TYPE_PRECISION (TREE_TYPE (arg0)))
7523 && TREE_TYPE (op0) != final_type)
7524 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
7525 if ((TYPE_PRECISION (TREE_TYPE (op1))
7526 == TYPE_PRECISION (TREE_TYPE (arg1)))
7527 && TREE_TYPE (op1) != final_type)
7528 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
7530 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
7532 /* For bitwise operations, signedness of nominal type
7533 does not matter. Consider only how operands were extended. */
7534 if (shorten == -1)
7535 uns = unsigned0;
7537 /* Note that in all three cases below we refrain from optimizing
7538 an unsigned operation on sign-extended args.
7539 That would not be valid. */
7541 /* Both args variable: if both extended in same way
7542 from same width, do it in that width.
7543 Do it unsigned if args were zero-extended. */
7544 if ((TYPE_PRECISION (TREE_TYPE (arg0))
7545 < TYPE_PRECISION (result_type))
7546 && (TYPE_PRECISION (TREE_TYPE (arg1))
7547 == TYPE_PRECISION (TREE_TYPE (arg0)))
7548 && unsigned0 == unsigned1
7549 && (unsigned0 || !uns))
7550 result_type
7551 = c_common_signed_or_unsigned_type
7552 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
7553 else if (TREE_CODE (arg0) == INTEGER_CST
7554 && (unsigned1 || !uns)
7555 && (TYPE_PRECISION (TREE_TYPE (arg1))
7556 < TYPE_PRECISION (result_type))
7557 && (type
7558 = c_common_signed_or_unsigned_type (unsigned1,
7559 TREE_TYPE (arg1)),
7560 int_fits_type_p (arg0, type)))
7561 result_type = type;
7562 else if (TREE_CODE (arg1) == INTEGER_CST
7563 && (unsigned0 || !uns)
7564 && (TYPE_PRECISION (TREE_TYPE (arg0))
7565 < TYPE_PRECISION (result_type))
7566 && (type
7567 = c_common_signed_or_unsigned_type (unsigned0,
7568 TREE_TYPE (arg0)),
7569 int_fits_type_p (arg1, type)))
7570 result_type = type;
7573 /* Shifts can be shortened if shifting right. */
7575 if (short_shift)
7577 int unsigned_arg;
7578 tree arg0 = get_narrower (op0, &unsigned_arg);
7580 final_type = result_type;
7582 if (arg0 == op0 && final_type == TREE_TYPE (op0))
7583 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
7585 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7586 /* We can shorten only if the shift count is less than the
7587 number of bits in the smaller type size. */
7588 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7589 /* We cannot drop an unsigned shift after sign-extension. */
7590 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
7592 /* Do an unsigned shift if the operand was zero-extended. */
7593 result_type
7594 = c_common_signed_or_unsigned_type (unsigned_arg,
7595 TREE_TYPE (arg0));
7596 /* Convert value-to-be-shifted to that type. */
7597 if (TREE_TYPE (op0) != result_type)
7598 op0 = convert (result_type, op0);
7599 converted = 1;
7603 /* Comparison operations are shortened too but differently.
7604 They identify themselves by setting short_compare = 1. */
7606 if (short_compare)
7608 /* Don't write &op0, etc., because that would prevent op0
7609 from being kept in a register.
7610 Instead, make copies of the our local variables and
7611 pass the copies by reference, then copy them back afterward. */
7612 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
7613 enum tree_code xresultcode = resultcode;
7614 tree val
7615 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
7617 if (val != 0)
7618 return val;
7620 op0 = xop0, op1 = xop1;
7621 converted = 1;
7622 resultcode = xresultcode;
7624 if (warn_sign_compare && skip_evaluation == 0)
7626 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
7627 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
7628 int unsignedp0, unsignedp1;
7629 tree primop0 = get_narrower (op0, &unsignedp0);
7630 tree primop1 = get_narrower (op1, &unsignedp1);
7632 xop0 = orig_op0;
7633 xop1 = orig_op1;
7634 STRIP_TYPE_NOPS (xop0);
7635 STRIP_TYPE_NOPS (xop1);
7637 /* Give warnings for comparisons between signed and unsigned
7638 quantities that may fail.
7640 Do the checking based on the original operand trees, so that
7641 casts will be considered, but default promotions won't be.
7643 Do not warn if the comparison is being done in a signed type,
7644 since the signed type will only be chosen if it can represent
7645 all the values of the unsigned type. */
7646 if (!TYPE_UNSIGNED (result_type))
7647 /* OK */;
7648 /* Do not warn if both operands are the same signedness. */
7649 else if (op0_signed == op1_signed)
7650 /* OK */;
7651 else
7653 tree sop, uop;
7655 if (op0_signed)
7656 sop = xop0, uop = xop1;
7657 else
7658 sop = xop1, uop = xop0;
7660 /* Do not warn if the signed quantity is an
7661 unsuffixed integer literal (or some static
7662 constant expression involving such literals or a
7663 conditional expression involving such literals)
7664 and it is non-negative. */
7665 if (tree_expr_nonnegative_p (sop))
7666 /* OK */;
7667 /* Do not warn if the comparison is an equality operation,
7668 the unsigned quantity is an integral constant, and it
7669 would fit in the result if the result were signed. */
7670 else if (TREE_CODE (uop) == INTEGER_CST
7671 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
7672 && int_fits_type_p
7673 (uop, c_common_signed_type (result_type)))
7674 /* OK */;
7675 /* Do not warn if the unsigned quantity is an enumeration
7676 constant and its maximum value would fit in the result
7677 if the result were signed. */
7678 else if (TREE_CODE (uop) == INTEGER_CST
7679 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
7680 && int_fits_type_p
7681 (TYPE_MAX_VALUE (TREE_TYPE (uop)),
7682 c_common_signed_type (result_type)))
7683 /* OK */;
7684 else
7685 warning ("comparison between signed and unsigned");
7688 /* Warn if two unsigned values are being compared in a size
7689 larger than their original size, and one (and only one) is the
7690 result of a `~' operator. This comparison will always fail.
7692 Also warn if one operand is a constant, and the constant
7693 does not have all bits set that are set in the ~ operand
7694 when it is extended. */
7696 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
7697 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
7699 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
7700 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
7701 &unsignedp0);
7702 else
7703 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
7704 &unsignedp1);
7706 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
7708 tree primop;
7709 HOST_WIDE_INT constant, mask;
7710 int unsignedp, bits;
7712 if (host_integerp (primop0, 0))
7714 primop = primop1;
7715 unsignedp = unsignedp1;
7716 constant = tree_low_cst (primop0, 0);
7718 else
7720 primop = primop0;
7721 unsignedp = unsignedp0;
7722 constant = tree_low_cst (primop1, 0);
7725 bits = TYPE_PRECISION (TREE_TYPE (primop));
7726 if (bits < TYPE_PRECISION (result_type)
7727 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
7729 mask = (~(HOST_WIDE_INT) 0) << bits;
7730 if ((mask & constant) != mask)
7731 warning ("comparison of promoted ~unsigned with constant");
7734 else if (unsignedp0 && unsignedp1
7735 && (TYPE_PRECISION (TREE_TYPE (primop0))
7736 < TYPE_PRECISION (result_type))
7737 && (TYPE_PRECISION (TREE_TYPE (primop1))
7738 < TYPE_PRECISION (result_type)))
7739 warning ("comparison of promoted ~unsigned with unsigned");
7745 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
7746 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
7747 Then the expression will be built.
7748 It will be given type FINAL_TYPE if that is nonzero;
7749 otherwise, it will be given type RESULT_TYPE. */
7751 if (!result_type)
7753 binary_op_error (code);
7754 return error_mark_node;
7757 if (!converted)
7759 if (TREE_TYPE (op0) != result_type)
7760 op0 = convert (result_type, op0);
7761 if (TREE_TYPE (op1) != result_type)
7762 op1 = convert (result_type, op1);
7764 /* This can happen if one operand has a vector type, and the other
7765 has a different type. */
7766 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
7767 return error_mark_node;
7770 if (build_type == NULL_TREE)
7771 build_type = result_type;
7774 tree result = build2 (resultcode, build_type, op0, op1);
7776 /* Treat expressions in initializers specially as they can't trap. */
7777 result = require_constant_value ? fold_initializer (result)
7778 : fold (result);
7780 if (final_type != 0)
7781 result = convert (final_type, result);
7782 return result;