* class.c (ident_subst): Always alloca buffer.
[official-gcc.git] / gcc / c-typeck.c
blob9e4f0fb1501261328a318d858854a419ab69fe91
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 if (coerced_params == error_mark_node)
1991 return error_mark_node;
1993 /* Check that the arguments to the function are valid. */
1995 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
1997 result = build3 (CALL_EXPR, TREE_TYPE (fntype),
1998 function, coerced_params, NULL_TREE);
1999 TREE_SIDE_EFFECTS (result) = 1;
2001 if (require_constant_value)
2003 result = fold_initializer (result);
2005 if (TREE_CONSTANT (result)
2006 && (name == NULL_TREE
2007 || strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10) != 0))
2008 pedwarn_init ("initializer element is not constant");
2010 else
2011 result = fold (result);
2013 if (VOID_TYPE_P (TREE_TYPE (result)))
2014 return result;
2015 return require_complete_type (result);
2018 /* Convert the argument expressions in the list VALUES
2019 to the types in the list TYPELIST. The result is a list of converted
2020 argument expressions, unless there are too few arguments in which
2021 case it is error_mark_node.
2023 If TYPELIST is exhausted, or when an element has NULL as its type,
2024 perform the default conversions.
2026 PARMLIST is the chain of parm decls for the function being called.
2027 It may be 0, if that info is not available.
2028 It is used only for generating error messages.
2030 FUNCTION is a tree for the called function. It is used only for
2031 error messages, where it is formatted with %qE.
2033 This is also where warnings about wrong number of args are generated.
2035 Both VALUES and the returned value are chains of TREE_LIST nodes
2036 with the elements of the list in the TREE_VALUE slots of those nodes. */
2038 static tree
2039 convert_arguments (tree typelist, tree values, tree function, tree fundecl)
2041 tree typetail, valtail;
2042 tree result = NULL;
2043 int parmnum;
2044 tree selector;
2046 /* Change pointer to function to the function itself for
2047 diagnostics. */
2048 if (TREE_CODE (function) == ADDR_EXPR
2049 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
2050 function = TREE_OPERAND (function, 0);
2052 /* Handle an ObjC selector specially for diagnostics. */
2053 selector = objc_message_selector ();
2055 /* Scan the given expressions and types, producing individual
2056 converted arguments and pushing them on RESULT in reverse order. */
2058 for (valtail = values, typetail = typelist, parmnum = 0;
2059 valtail;
2060 valtail = TREE_CHAIN (valtail), parmnum++)
2062 tree type = typetail ? TREE_VALUE (typetail) : 0;
2063 tree val = TREE_VALUE (valtail);
2064 tree rname = function;
2065 int argnum = parmnum + 1;
2067 if (type == void_type_node)
2069 error ("too many arguments to function %qE", function);
2070 break;
2073 if (selector && argnum > 2)
2075 rname = selector;
2076 argnum -= 2;
2079 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
2080 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
2081 to convert automatically to a pointer. */
2082 if (TREE_CODE (val) == NON_LVALUE_EXPR)
2083 val = TREE_OPERAND (val, 0);
2085 val = default_function_array_conversion (val);
2087 val = require_complete_type (val);
2089 if (type != 0)
2091 /* Formal parm type is specified by a function prototype. */
2092 tree parmval;
2094 if (!COMPLETE_TYPE_P (type))
2096 error ("type of formal parameter %d is incomplete", parmnum + 1);
2097 parmval = val;
2099 else
2101 /* Optionally warn about conversions that
2102 differ from the default conversions. */
2103 if (warn_conversion || warn_traditional)
2105 unsigned int formal_prec = TYPE_PRECISION (type);
2107 if (INTEGRAL_TYPE_P (type)
2108 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2109 warning ("passing argument %d of %qE as integer "
2110 "rather than floating due to prototype",
2111 argnum, rname);
2112 if (INTEGRAL_TYPE_P (type)
2113 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2114 warning ("passing argument %d of %qE as integer "
2115 "rather than complex due to prototype",
2116 argnum, rname);
2117 else if (TREE_CODE (type) == COMPLEX_TYPE
2118 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2119 warning ("passing argument %d of %qE as complex "
2120 "rather than floating due to prototype",
2121 argnum, rname);
2122 else if (TREE_CODE (type) == REAL_TYPE
2123 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2124 warning ("passing argument %d of %qE as floating "
2125 "rather than integer due to prototype",
2126 argnum, rname);
2127 else if (TREE_CODE (type) == COMPLEX_TYPE
2128 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2129 warning ("passing argument %d of %qE as complex "
2130 "rather than integer due to prototype",
2131 argnum, rname);
2132 else if (TREE_CODE (type) == REAL_TYPE
2133 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2134 warning ("passing argument %d of %qE as floating "
2135 "rather than complex due to prototype",
2136 argnum, rname);
2137 /* ??? At some point, messages should be written about
2138 conversions between complex types, but that's too messy
2139 to do now. */
2140 else if (TREE_CODE (type) == REAL_TYPE
2141 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2143 /* Warn if any argument is passed as `float',
2144 since without a prototype it would be `double'. */
2145 if (formal_prec == TYPE_PRECISION (float_type_node))
2146 warning ("passing argument %d of %qE as %<float%> "
2147 "rather than %<double%> due to prototype",
2148 argnum, rname);
2150 /* Detect integer changing in width or signedness.
2151 These warnings are only activated with
2152 -Wconversion, not with -Wtraditional. */
2153 else if (warn_conversion && INTEGRAL_TYPE_P (type)
2154 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2156 tree would_have_been = default_conversion (val);
2157 tree type1 = TREE_TYPE (would_have_been);
2159 if (TREE_CODE (type) == ENUMERAL_TYPE
2160 && (TYPE_MAIN_VARIANT (type)
2161 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
2162 /* No warning if function asks for enum
2163 and the actual arg is that enum type. */
2165 else if (formal_prec != TYPE_PRECISION (type1))
2166 warning ("passing argument %d of %qE with different "
2167 "width due to prototype", argnum, rname);
2168 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
2170 /* Don't complain if the formal parameter type
2171 is an enum, because we can't tell now whether
2172 the value was an enum--even the same enum. */
2173 else if (TREE_CODE (type) == ENUMERAL_TYPE)
2175 else if (TREE_CODE (val) == INTEGER_CST
2176 && int_fits_type_p (val, type))
2177 /* Change in signedness doesn't matter
2178 if a constant value is unaffected. */
2180 /* Likewise for a constant in a NOP_EXPR. */
2181 else if (TREE_CODE (val) == NOP_EXPR
2182 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
2183 && int_fits_type_p (TREE_OPERAND (val, 0), type))
2185 /* If the value is extended from a narrower
2186 unsigned type, it doesn't matter whether we
2187 pass it as signed or unsigned; the value
2188 certainly is the same either way. */
2189 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
2190 && TYPE_UNSIGNED (TREE_TYPE (val)))
2192 else if (TYPE_UNSIGNED (type))
2193 warning ("passing argument %d of %qE as unsigned "
2194 "due to prototype", argnum, rname);
2195 else
2196 warning ("passing argument %d of %qE as signed "
2197 "due to prototype", argnum, rname);
2201 parmval = convert_for_assignment (type, val, ic_argpass,
2202 fundecl, function,
2203 parmnum + 1);
2205 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
2206 && INTEGRAL_TYPE_P (type)
2207 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
2208 parmval = default_conversion (parmval);
2210 result = tree_cons (NULL_TREE, parmval, result);
2212 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
2213 && (TYPE_PRECISION (TREE_TYPE (val))
2214 < TYPE_PRECISION (double_type_node)))
2215 /* Convert `float' to `double'. */
2216 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
2217 else
2218 /* Convert `short' and `char' to full-size `int'. */
2219 result = tree_cons (NULL_TREE, default_conversion (val), result);
2221 if (typetail)
2222 typetail = TREE_CHAIN (typetail);
2225 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
2227 error ("too few arguments to function %qE", function);
2228 return error_mark_node;
2231 return nreverse (result);
2234 /* This is the entry point used by the parser
2235 for binary operators in the input.
2236 In addition to constructing the expression,
2237 we check for operands that were written with other binary operators
2238 in a way that is likely to confuse the user. */
2240 struct c_expr
2241 parser_build_binary_op (enum tree_code code, struct c_expr arg1,
2242 struct c_expr arg2)
2244 struct c_expr result;
2246 enum tree_code code1 = arg1.original_code;
2247 enum tree_code code2 = arg2.original_code;
2249 result.value = build_binary_op (code, arg1.value, arg2.value, 1);
2250 result.original_code = code;
2252 if (TREE_CODE (result.value) == ERROR_MARK)
2253 return result;
2255 /* Check for cases such as x+y<<z which users are likely
2256 to misinterpret. */
2257 if (warn_parentheses)
2259 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
2261 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2262 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2263 warning ("suggest parentheses around + or - inside shift");
2266 if (code == TRUTH_ORIF_EXPR)
2268 if (code1 == TRUTH_ANDIF_EXPR
2269 || code2 == TRUTH_ANDIF_EXPR)
2270 warning ("suggest parentheses around && within ||");
2273 if (code == BIT_IOR_EXPR)
2275 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
2276 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2277 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
2278 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2279 warning ("suggest parentheses around arithmetic in operand of |");
2280 /* Check cases like x|y==z */
2281 if (TREE_CODE_CLASS (code1) == tcc_comparison
2282 || TREE_CODE_CLASS (code2) == tcc_comparison)
2283 warning ("suggest parentheses around comparison in operand of |");
2286 if (code == BIT_XOR_EXPR)
2288 if (code1 == BIT_AND_EXPR
2289 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2290 || code2 == BIT_AND_EXPR
2291 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2292 warning ("suggest parentheses around arithmetic in operand of ^");
2293 /* Check cases like x^y==z */
2294 if (TREE_CODE_CLASS (code1) == tcc_comparison
2295 || TREE_CODE_CLASS (code2) == tcc_comparison)
2296 warning ("suggest parentheses around comparison in operand of ^");
2299 if (code == BIT_AND_EXPR)
2301 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2302 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2303 warning ("suggest parentheses around + or - in operand of &");
2304 /* Check cases like x&y==z */
2305 if (TREE_CODE_CLASS (code1) == tcc_comparison
2306 || TREE_CODE_CLASS (code2) == tcc_comparison)
2307 warning ("suggest parentheses around comparison in operand of &");
2309 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
2310 if (TREE_CODE_CLASS (code) == tcc_comparison
2311 && (TREE_CODE_CLASS (code1) == tcc_comparison
2312 || TREE_CODE_CLASS (code2) == tcc_comparison))
2313 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
2317 unsigned_conversion_warning (result.value, arg1.value);
2318 unsigned_conversion_warning (result.value, arg2.value);
2319 overflow_warning (result.value);
2321 return result;
2324 /* Return a tree for the difference of pointers OP0 and OP1.
2325 The resulting tree has type int. */
2327 static tree
2328 pointer_diff (tree op0, tree op1)
2330 tree restype = ptrdiff_type_node;
2332 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2333 tree con0, con1, lit0, lit1;
2334 tree orig_op1 = op1;
2336 if (pedantic || warn_pointer_arith)
2338 if (TREE_CODE (target_type) == VOID_TYPE)
2339 pedwarn ("pointer of type %<void *%> used in subtraction");
2340 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2341 pedwarn ("pointer to a function used in subtraction");
2344 /* If the conversion to ptrdiff_type does anything like widening or
2345 converting a partial to an integral mode, we get a convert_expression
2346 that is in the way to do any simplifications.
2347 (fold-const.c doesn't know that the extra bits won't be needed.
2348 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2349 different mode in place.)
2350 So first try to find a common term here 'by hand'; we want to cover
2351 at least the cases that occur in legal static initializers. */
2352 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2353 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
2355 if (TREE_CODE (con0) == PLUS_EXPR)
2357 lit0 = TREE_OPERAND (con0, 1);
2358 con0 = TREE_OPERAND (con0, 0);
2360 else
2361 lit0 = integer_zero_node;
2363 if (TREE_CODE (con1) == PLUS_EXPR)
2365 lit1 = TREE_OPERAND (con1, 1);
2366 con1 = TREE_OPERAND (con1, 0);
2368 else
2369 lit1 = integer_zero_node;
2371 if (operand_equal_p (con0, con1, 0))
2373 op0 = lit0;
2374 op1 = lit1;
2378 /* First do the subtraction as integers;
2379 then drop through to build the divide operator.
2380 Do not do default conversions on the minus operator
2381 in case restype is a short type. */
2383 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2384 convert (restype, op1), 0);
2385 /* This generates an error if op1 is pointer to incomplete type. */
2386 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2387 error ("arithmetic on pointer to an incomplete type");
2389 /* This generates an error if op0 is pointer to incomplete type. */
2390 op1 = c_size_in_bytes (target_type);
2392 /* Divide by the size, in easiest possible way. */
2393 return fold (build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1)));
2396 /* Construct and perhaps optimize a tree representation
2397 for a unary operation. CODE, a tree_code, specifies the operation
2398 and XARG is the operand.
2399 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2400 the default promotions (such as from short to int).
2401 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2402 allows non-lvalues; this is only used to handle conversion of non-lvalue
2403 arrays to pointers in C99. */
2405 tree
2406 build_unary_op (enum tree_code code, tree xarg, int flag)
2408 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2409 tree arg = xarg;
2410 tree argtype = 0;
2411 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2412 tree val;
2413 int noconvert = flag;
2415 if (typecode == ERROR_MARK)
2416 return error_mark_node;
2417 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2418 typecode = INTEGER_TYPE;
2420 switch (code)
2422 case CONVERT_EXPR:
2423 /* This is used for unary plus, because a CONVERT_EXPR
2424 is enough to prevent anybody from looking inside for
2425 associativity, but won't generate any code. */
2426 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2427 || typecode == COMPLEX_TYPE
2428 || typecode == VECTOR_TYPE))
2430 error ("wrong type argument to unary plus");
2431 return error_mark_node;
2433 else if (!noconvert)
2434 arg = default_conversion (arg);
2435 arg = non_lvalue (arg);
2436 break;
2438 case NEGATE_EXPR:
2439 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2440 || typecode == COMPLEX_TYPE
2441 || typecode == VECTOR_TYPE))
2443 error ("wrong type argument to unary minus");
2444 return error_mark_node;
2446 else if (!noconvert)
2447 arg = default_conversion (arg);
2448 break;
2450 case BIT_NOT_EXPR:
2451 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
2453 if (!noconvert)
2454 arg = default_conversion (arg);
2456 else if (typecode == COMPLEX_TYPE)
2458 code = CONJ_EXPR;
2459 if (pedantic)
2460 pedwarn ("ISO C does not support %<~%> for complex conjugation");
2461 if (!noconvert)
2462 arg = default_conversion (arg);
2464 else
2466 error ("wrong type argument to bit-complement");
2467 return error_mark_node;
2469 break;
2471 case ABS_EXPR:
2472 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
2474 error ("wrong type argument to abs");
2475 return error_mark_node;
2477 else if (!noconvert)
2478 arg = default_conversion (arg);
2479 break;
2481 case CONJ_EXPR:
2482 /* Conjugating a real value is a no-op, but allow it anyway. */
2483 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2484 || typecode == COMPLEX_TYPE))
2486 error ("wrong type argument to conjugation");
2487 return error_mark_node;
2489 else if (!noconvert)
2490 arg = default_conversion (arg);
2491 break;
2493 case TRUTH_NOT_EXPR:
2494 if (typecode != INTEGER_TYPE
2495 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2496 && typecode != COMPLEX_TYPE
2497 /* These will convert to a pointer. */
2498 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2500 error ("wrong type argument to unary exclamation mark");
2501 return error_mark_node;
2503 arg = lang_hooks.truthvalue_conversion (arg);
2504 return invert_truthvalue (arg);
2506 case NOP_EXPR:
2507 break;
2509 case REALPART_EXPR:
2510 if (TREE_CODE (arg) == COMPLEX_CST)
2511 return TREE_REALPART (arg);
2512 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2513 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2514 else
2515 return arg;
2517 case IMAGPART_EXPR:
2518 if (TREE_CODE (arg) == COMPLEX_CST)
2519 return TREE_IMAGPART (arg);
2520 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2521 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2522 else
2523 return convert (TREE_TYPE (arg), integer_zero_node);
2525 case PREINCREMENT_EXPR:
2526 case POSTINCREMENT_EXPR:
2527 case PREDECREMENT_EXPR:
2528 case POSTDECREMENT_EXPR:
2530 /* Increment or decrement the real part of the value,
2531 and don't change the imaginary part. */
2532 if (typecode == COMPLEX_TYPE)
2534 tree real, imag;
2536 if (pedantic)
2537 pedwarn ("ISO C does not support %<++%> and %<--%>"
2538 " on complex types");
2540 arg = stabilize_reference (arg);
2541 real = build_unary_op (REALPART_EXPR, arg, 1);
2542 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2543 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
2544 build_unary_op (code, real, 1), imag);
2547 /* Report invalid types. */
2549 if (typecode != POINTER_TYPE
2550 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2552 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2553 error ("wrong type argument to increment");
2554 else
2555 error ("wrong type argument to decrement");
2557 return error_mark_node;
2561 tree inc;
2562 tree result_type = TREE_TYPE (arg);
2564 arg = get_unwidened (arg, 0);
2565 argtype = TREE_TYPE (arg);
2567 /* Compute the increment. */
2569 if (typecode == POINTER_TYPE)
2571 /* If pointer target is an undefined struct,
2572 we just cannot know how to do the arithmetic. */
2573 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2575 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2576 error ("increment of pointer to unknown structure");
2577 else
2578 error ("decrement of pointer to unknown structure");
2580 else if ((pedantic || warn_pointer_arith)
2581 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2582 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2584 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2585 pedwarn ("wrong type argument to increment");
2586 else
2587 pedwarn ("wrong type argument to decrement");
2590 inc = c_size_in_bytes (TREE_TYPE (result_type));
2592 else
2593 inc = integer_one_node;
2595 inc = convert (argtype, inc);
2597 /* Complain about anything else that is not a true lvalue. */
2598 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2599 || code == POSTINCREMENT_EXPR)
2600 ? lv_increment
2601 : lv_decrement)))
2602 return error_mark_node;
2604 /* Report a read-only lvalue. */
2605 if (TREE_READONLY (arg))
2606 readonly_error (arg,
2607 ((code == PREINCREMENT_EXPR
2608 || code == POSTINCREMENT_EXPR)
2609 ? lv_increment : lv_decrement));
2611 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2612 val = boolean_increment (code, arg);
2613 else
2614 val = build2 (code, TREE_TYPE (arg), arg, inc);
2615 TREE_SIDE_EFFECTS (val) = 1;
2616 val = convert (result_type, val);
2617 if (TREE_CODE (val) != code)
2618 TREE_NO_WARNING (val) = 1;
2619 return val;
2622 case ADDR_EXPR:
2623 /* Note that this operation never does default_conversion. */
2625 /* Let &* cancel out to simplify resulting code. */
2626 if (TREE_CODE (arg) == INDIRECT_REF)
2628 /* Don't let this be an lvalue. */
2629 if (lvalue_p (TREE_OPERAND (arg, 0)))
2630 return non_lvalue (TREE_OPERAND (arg, 0));
2631 return TREE_OPERAND (arg, 0);
2634 /* For &x[y], return x+y */
2635 if (TREE_CODE (arg) == ARRAY_REF)
2637 if (!c_mark_addressable (TREE_OPERAND (arg, 0)))
2638 return error_mark_node;
2639 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
2640 TREE_OPERAND (arg, 1), 1);
2643 /* Anything not already handled and not a true memory reference
2644 or a non-lvalue array is an error. */
2645 else if (typecode != FUNCTION_TYPE && !flag
2646 && !lvalue_or_else (arg, lv_addressof))
2647 return error_mark_node;
2649 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2650 argtype = TREE_TYPE (arg);
2652 /* If the lvalue is const or volatile, merge that into the type
2653 to which the address will point. Note that you can't get a
2654 restricted pointer by taking the address of something, so we
2655 only have to deal with `const' and `volatile' here. */
2656 if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
2657 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
2658 argtype = c_build_type_variant (argtype,
2659 TREE_READONLY (arg),
2660 TREE_THIS_VOLATILE (arg));
2662 if (!c_mark_addressable (arg))
2663 return error_mark_node;
2665 if (TREE_CODE (arg) == COMPONENT_REF
2666 && DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
2668 error ("attempt to take address of bit-field structure member %qD",
2669 TREE_OPERAND (arg, 1));
2670 return error_mark_node;
2673 argtype = build_pointer_type (argtype);
2675 /* ??? Cope with user tricks that amount to offsetof. Delete this
2676 when we have proper support for integer constant expressions. */
2677 val = get_base_address (arg);
2678 if (val && TREE_CODE (val) == INDIRECT_REF
2679 && integer_zerop (TREE_OPERAND (val, 0)))
2680 return fold_convert (argtype, fold_offsetof (arg));
2682 val = build1 (ADDR_EXPR, argtype, arg);
2684 if (TREE_CODE (arg) == COMPOUND_LITERAL_EXPR)
2685 TREE_INVARIANT (val) = TREE_CONSTANT (val) = 1;
2687 return val;
2689 default:
2690 break;
2693 if (argtype == 0)
2694 argtype = TREE_TYPE (arg);
2695 val = build1 (code, argtype, arg);
2696 return require_constant_value ? fold_initializer (val) : fold (val);
2699 /* Return nonzero if REF is an lvalue valid for this language.
2700 Lvalues can be assigned, unless their type has TYPE_READONLY.
2701 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
2704 lvalue_p (tree ref)
2706 enum tree_code code = TREE_CODE (ref);
2708 switch (code)
2710 case REALPART_EXPR:
2711 case IMAGPART_EXPR:
2712 case COMPONENT_REF:
2713 return lvalue_p (TREE_OPERAND (ref, 0));
2715 case COMPOUND_LITERAL_EXPR:
2716 case STRING_CST:
2717 return 1;
2719 case INDIRECT_REF:
2720 case ARRAY_REF:
2721 case VAR_DECL:
2722 case PARM_DECL:
2723 case RESULT_DECL:
2724 case ERROR_MARK:
2725 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
2726 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
2728 case BIND_EXPR:
2729 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
2731 default:
2732 return 0;
2736 /* Return nonzero if REF is an lvalue valid for this language;
2737 otherwise, print an error message and return zero. USE says
2738 how the lvalue is being used and so selects the error message. */
2740 static int
2741 lvalue_or_else (tree ref, enum lvalue_use use)
2743 int win = lvalue_p (ref);
2745 if (!win)
2747 switch (use)
2749 case lv_assign:
2750 error ("invalid lvalue in assignment");
2751 break;
2752 case lv_increment:
2753 error ("invalid lvalue in increment");
2754 break;
2755 case lv_decrement:
2756 error ("invalid lvalue in decrement");
2757 break;
2758 case lv_addressof:
2759 error ("invalid lvalue in unary %<&%>");
2760 break;
2761 case lv_asm:
2762 error ("invalid lvalue in asm statement");
2763 break;
2764 default:
2765 gcc_unreachable ();
2769 return win;
2773 /* Give an error for storing in something that is 'const'. */
2775 static void
2776 readonly_error (tree arg, enum lvalue_use use)
2778 gcc_assert (use == lv_assign || use == lv_increment || use == lv_decrement);
2779 /* Using this macro rather than (for example) arrays of messages
2780 ensures that all the format strings are checked at compile
2781 time. */
2782 #define READONLY_MSG(A, I, D) (use == lv_assign \
2783 ? (A) \
2784 : (use == lv_increment ? (I) : (D)))
2785 if (TREE_CODE (arg) == COMPONENT_REF)
2787 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
2788 readonly_error (TREE_OPERAND (arg, 0), use);
2789 else
2790 error (READONLY_MSG (N_("assignment of read-only member %qs"),
2791 N_("increment of read-only member %qs"),
2792 N_("decrement of read-only member %qs")),
2793 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
2795 else if (TREE_CODE (arg) == VAR_DECL)
2796 error (READONLY_MSG (N_("assignment of read-only variable %qs"),
2797 N_("increment of read-only variable %qs"),
2798 N_("decrement of read-only variable %qs")),
2799 IDENTIFIER_POINTER (DECL_NAME (arg)));
2800 else
2801 error (READONLY_MSG (N_("assignment of read-only location"),
2802 N_("increment of read-only location"),
2803 N_("decrement of read-only location")));
2806 /* Mark EXP saying that we need to be able to take the
2807 address of it; it should not be allocated in a register.
2808 Returns true if successful. */
2810 bool
2811 c_mark_addressable (tree exp)
2813 tree x = exp;
2815 while (1)
2816 switch (TREE_CODE (x))
2818 case COMPONENT_REF:
2819 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
2821 error ("cannot take address of bit-field %qs",
2822 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
2823 return false;
2826 /* ... fall through ... */
2828 case ADDR_EXPR:
2829 case ARRAY_REF:
2830 case REALPART_EXPR:
2831 case IMAGPART_EXPR:
2832 x = TREE_OPERAND (x, 0);
2833 break;
2835 case COMPOUND_LITERAL_EXPR:
2836 case CONSTRUCTOR:
2837 TREE_ADDRESSABLE (x) = 1;
2838 return true;
2840 case VAR_DECL:
2841 case CONST_DECL:
2842 case PARM_DECL:
2843 case RESULT_DECL:
2844 if (C_DECL_REGISTER (x)
2845 && DECL_NONLOCAL (x))
2847 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2849 error ("global register variable %qs used in nested function",
2850 IDENTIFIER_POINTER (DECL_NAME (x)));
2851 return false;
2853 pedwarn ("register variable %qs used in nested function",
2854 IDENTIFIER_POINTER (DECL_NAME (x)));
2856 else if (C_DECL_REGISTER (x))
2858 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2860 error ("address of global register variable %qs requested",
2861 IDENTIFIER_POINTER (DECL_NAME (x)));
2862 return false;
2865 pedwarn ("address of register variable %qs requested",
2866 IDENTIFIER_POINTER (DECL_NAME (x)));
2869 /* drops in */
2870 case FUNCTION_DECL:
2871 TREE_ADDRESSABLE (x) = 1;
2872 /* drops out */
2873 default:
2874 return true;
2878 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
2880 tree
2881 build_conditional_expr (tree ifexp, tree op1, tree op2)
2883 tree type1;
2884 tree type2;
2885 enum tree_code code1;
2886 enum tree_code code2;
2887 tree result_type = NULL;
2888 tree orig_op1 = op1, orig_op2 = op2;
2890 ifexp = lang_hooks.truthvalue_conversion (default_conversion (ifexp));
2892 /* Promote both alternatives. */
2894 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
2895 op1 = default_conversion (op1);
2896 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
2897 op2 = default_conversion (op2);
2899 if (TREE_CODE (ifexp) == ERROR_MARK
2900 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
2901 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
2902 return error_mark_node;
2904 type1 = TREE_TYPE (op1);
2905 code1 = TREE_CODE (type1);
2906 type2 = TREE_TYPE (op2);
2907 code2 = TREE_CODE (type2);
2909 /* C90 does not permit non-lvalue arrays in conditional expressions.
2910 In C99 they will be pointers by now. */
2911 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
2913 error ("non-lvalue array in conditional expression");
2914 return error_mark_node;
2917 /* Quickly detect the usual case where op1 and op2 have the same type
2918 after promotion. */
2919 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
2921 if (type1 == type2)
2922 result_type = type1;
2923 else
2924 result_type = TYPE_MAIN_VARIANT (type1);
2926 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
2927 || code1 == COMPLEX_TYPE)
2928 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
2929 || code2 == COMPLEX_TYPE))
2931 result_type = common_type (type1, type2);
2933 /* If -Wsign-compare, warn here if type1 and type2 have
2934 different signedness. We'll promote the signed to unsigned
2935 and later code won't know it used to be different.
2936 Do this check on the original types, so that explicit casts
2937 will be considered, but default promotions won't. */
2938 if (warn_sign_compare && !skip_evaluation)
2940 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
2941 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
2943 if (unsigned_op1 ^ unsigned_op2)
2945 /* Do not warn if the result type is signed, since the
2946 signed type will only be chosen if it can represent
2947 all the values of the unsigned type. */
2948 if (!TYPE_UNSIGNED (result_type))
2949 /* OK */;
2950 /* Do not warn if the signed quantity is an unsuffixed
2951 integer literal (or some static constant expression
2952 involving such literals) and it is non-negative. */
2953 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
2954 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
2955 /* OK */;
2956 else
2957 warning ("signed and unsigned type in conditional expression");
2961 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
2963 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
2964 pedwarn ("ISO C forbids conditional expr with only one void side");
2965 result_type = void_type_node;
2967 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
2969 if (comp_target_types (type1, type2, 1))
2970 result_type = common_pointer_type (type1, type2);
2971 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
2972 && TREE_CODE (orig_op1) != NOP_EXPR)
2973 result_type = qualify_type (type2, type1);
2974 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
2975 && TREE_CODE (orig_op2) != NOP_EXPR)
2976 result_type = qualify_type (type1, type2);
2977 else if (VOID_TYPE_P (TREE_TYPE (type1)))
2979 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
2980 pedwarn ("ISO C forbids conditional expr between "
2981 "%<void *%> and function pointer");
2982 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
2983 TREE_TYPE (type2)));
2985 else if (VOID_TYPE_P (TREE_TYPE (type2)))
2987 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
2988 pedwarn ("ISO C forbids conditional expr between "
2989 "%<void *%> and function pointer");
2990 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
2991 TREE_TYPE (type1)));
2993 else
2995 pedwarn ("pointer type mismatch in conditional expression");
2996 result_type = build_pointer_type (void_type_node);
2999 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3001 if (!integer_zerop (op2))
3002 pedwarn ("pointer/integer type mismatch in conditional expression");
3003 else
3005 op2 = null_pointer_node;
3007 result_type = type1;
3009 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3011 if (!integer_zerop (op1))
3012 pedwarn ("pointer/integer type mismatch in conditional expression");
3013 else
3015 op1 = null_pointer_node;
3017 result_type = type2;
3020 if (!result_type)
3022 if (flag_cond_mismatch)
3023 result_type = void_type_node;
3024 else
3026 error ("type mismatch in conditional expression");
3027 return error_mark_node;
3031 /* Merge const and volatile flags of the incoming types. */
3032 result_type
3033 = build_type_variant (result_type,
3034 TREE_READONLY (op1) || TREE_READONLY (op2),
3035 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3037 if (result_type != TREE_TYPE (op1))
3038 op1 = convert_and_check (result_type, op1);
3039 if (result_type != TREE_TYPE (op2))
3040 op2 = convert_and_check (result_type, op2);
3042 if (TREE_CODE (ifexp) == INTEGER_CST)
3043 return non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3045 return fold (build3 (COND_EXPR, result_type, ifexp, op1, op2));
3048 /* Return a compound expression that performs two expressions and
3049 returns the value of the second of them. */
3051 tree
3052 build_compound_expr (tree expr1, tree expr2)
3054 /* Convert arrays and functions to pointers. */
3055 expr2 = default_function_array_conversion (expr2);
3057 if (!TREE_SIDE_EFFECTS (expr1))
3059 /* The left-hand operand of a comma expression is like an expression
3060 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3061 any side-effects, unless it was explicitly cast to (void). */
3062 if (warn_unused_value
3063 && !(TREE_CODE (expr1) == CONVERT_EXPR
3064 && VOID_TYPE_P (TREE_TYPE (expr1))))
3065 warning ("left-hand operand of comma expression has no effect");
3068 /* With -Wunused, we should also warn if the left-hand operand does have
3069 side-effects, but computes a value which is not used. For example, in
3070 `foo() + bar(), baz()' the result of the `+' operator is not used,
3071 so we should issue a warning. */
3072 else if (warn_unused_value)
3073 warn_if_unused_value (expr1, input_location);
3075 return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
3078 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3080 tree
3081 build_c_cast (tree type, tree expr)
3083 tree value = expr;
3085 if (type == error_mark_node || expr == error_mark_node)
3086 return error_mark_node;
3088 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3089 only in <protocol> qualifications. But when constructing cast expressions,
3090 the protocols do matter and must be kept around. */
3091 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
3092 return build1 (NOP_EXPR, type, expr);
3094 type = TYPE_MAIN_VARIANT (type);
3096 if (TREE_CODE (type) == ARRAY_TYPE)
3098 error ("cast specifies array type");
3099 return error_mark_node;
3102 if (TREE_CODE (type) == FUNCTION_TYPE)
3104 error ("cast specifies function type");
3105 return error_mark_node;
3108 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3110 if (pedantic)
3112 if (TREE_CODE (type) == RECORD_TYPE
3113 || TREE_CODE (type) == UNION_TYPE)
3114 pedwarn ("ISO C forbids casting nonscalar to the same type");
3117 else if (TREE_CODE (type) == UNION_TYPE)
3119 tree field;
3120 value = default_function_array_conversion (value);
3122 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3123 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3124 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3125 break;
3127 if (field)
3129 tree t;
3131 if (pedantic)
3132 pedwarn ("ISO C forbids casts to union type");
3133 t = digest_init (type,
3134 build_constructor (type,
3135 build_tree_list (field, value)),
3136 true, 0);
3137 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3138 TREE_INVARIANT (t) = TREE_INVARIANT (value);
3139 return t;
3141 error ("cast to union type from type not present in union");
3142 return error_mark_node;
3144 else
3146 tree otype, ovalue;
3148 /* If casting to void, avoid the error that would come
3149 from default_conversion in the case of a non-lvalue array. */
3150 if (type == void_type_node)
3151 return build1 (CONVERT_EXPR, type, value);
3153 /* Convert functions and arrays to pointers,
3154 but don't convert any other types. */
3155 value = default_function_array_conversion (value);
3156 otype = TREE_TYPE (value);
3158 /* Optionally warn about potentially worrisome casts. */
3160 if (warn_cast_qual
3161 && TREE_CODE (type) == POINTER_TYPE
3162 && TREE_CODE (otype) == POINTER_TYPE)
3164 tree in_type = type;
3165 tree in_otype = otype;
3166 int added = 0;
3167 int discarded = 0;
3169 /* Check that the qualifiers on IN_TYPE are a superset of
3170 the qualifiers of IN_OTYPE. The outermost level of
3171 POINTER_TYPE nodes is uninteresting and we stop as soon
3172 as we hit a non-POINTER_TYPE node on either type. */
3175 in_otype = TREE_TYPE (in_otype);
3176 in_type = TREE_TYPE (in_type);
3178 /* GNU C allows cv-qualified function types. 'const'
3179 means the function is very pure, 'volatile' means it
3180 can't return. We need to warn when such qualifiers
3181 are added, not when they're taken away. */
3182 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3183 && TREE_CODE (in_type) == FUNCTION_TYPE)
3184 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3185 else
3186 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3188 while (TREE_CODE (in_type) == POINTER_TYPE
3189 && TREE_CODE (in_otype) == POINTER_TYPE);
3191 if (added)
3192 warning ("cast adds new qualifiers to function type");
3194 if (discarded)
3195 /* There are qualifiers present in IN_OTYPE that are not
3196 present in IN_TYPE. */
3197 warning ("cast discards qualifiers from pointer target type");
3200 /* Warn about possible alignment problems. */
3201 if (STRICT_ALIGNMENT && warn_cast_align
3202 && TREE_CODE (type) == POINTER_TYPE
3203 && TREE_CODE (otype) == POINTER_TYPE
3204 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3205 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3206 /* Don't warn about opaque types, where the actual alignment
3207 restriction is unknown. */
3208 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3209 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3210 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3211 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3212 warning ("cast increases required alignment of target type");
3214 if (TREE_CODE (type) == INTEGER_TYPE
3215 && TREE_CODE (otype) == POINTER_TYPE
3216 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3217 && !TREE_CONSTANT (value))
3218 warning ("cast from pointer to integer of different size");
3220 if (warn_bad_function_cast
3221 && TREE_CODE (value) == CALL_EXPR
3222 && TREE_CODE (type) != TREE_CODE (otype))
3223 warning ("cast from function call of type %qT to non-matching "
3224 "type %qT", otype, type);
3226 if (TREE_CODE (type) == POINTER_TYPE
3227 && TREE_CODE (otype) == INTEGER_TYPE
3228 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3229 /* Don't warn about converting any constant. */
3230 && !TREE_CONSTANT (value))
3231 warning ("cast to pointer from integer of different size");
3233 if (TREE_CODE (type) == POINTER_TYPE
3234 && TREE_CODE (otype) == POINTER_TYPE
3235 && TREE_CODE (expr) == ADDR_EXPR
3236 && DECL_P (TREE_OPERAND (expr, 0))
3237 && flag_strict_aliasing && warn_strict_aliasing
3238 && !VOID_TYPE_P (TREE_TYPE (type)))
3240 /* Casting the address of a decl to non void pointer. Warn
3241 if the cast breaks type based aliasing. */
3242 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3243 warning ("type-punning to incomplete type might break strict-aliasing rules");
3244 else
3246 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
3247 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
3249 if (!alias_sets_conflict_p (set1, set2))
3250 warning ("dereferencing type-punned pointer will break strict-aliasing rules");
3251 else if (warn_strict_aliasing > 1
3252 && !alias_sets_might_conflict_p (set1, set2))
3253 warning ("dereferencing type-punned pointer might break strict-aliasing rules");
3257 /* If pedantic, warn for conversions between function and object
3258 pointer types, except for converting a null pointer constant
3259 to function pointer type. */
3260 if (pedantic
3261 && TREE_CODE (type) == POINTER_TYPE
3262 && TREE_CODE (otype) == POINTER_TYPE
3263 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3264 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3265 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3267 if (pedantic
3268 && TREE_CODE (type) == POINTER_TYPE
3269 && TREE_CODE (otype) == POINTER_TYPE
3270 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3271 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3272 && !(integer_zerop (value) && TREE_TYPE (otype) == void_type_node
3273 && TREE_CODE (expr) != NOP_EXPR))
3274 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3276 ovalue = value;
3277 /* Replace a nonvolatile const static variable with its value. */
3278 if (optimize && TREE_CODE (value) == VAR_DECL)
3279 value = decl_constant_value (value);
3280 value = convert (type, value);
3282 /* Ignore any integer overflow caused by the cast. */
3283 if (TREE_CODE (value) == INTEGER_CST)
3285 if (EXPR_P (ovalue))
3286 /* If OVALUE had overflow set, then so will VALUE, so it
3287 is safe to overwrite. */
3288 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3289 else
3290 TREE_OVERFLOW (value) = 0;
3292 if (CONSTANT_CLASS_P (ovalue))
3293 /* Similarly, constant_overflow cannot have become
3294 cleared. */
3295 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3299 /* Don't let a cast be an lvalue. */
3300 if (value == expr)
3301 value = non_lvalue (value);
3303 return value;
3306 /* Interpret a cast of expression EXPR to type TYPE. */
3307 tree
3308 c_cast_expr (struct c_type_name *type_name, tree expr)
3310 tree type;
3311 int saved_wsp = warn_strict_prototypes;
3313 /* This avoids warnings about unprototyped casts on
3314 integers. E.g. "#define SIG_DFL (void(*)())0". */
3315 if (TREE_CODE (expr) == INTEGER_CST)
3316 warn_strict_prototypes = 0;
3317 type = groktypename (type_name);
3318 warn_strict_prototypes = saved_wsp;
3320 return build_c_cast (type, expr);
3324 /* Build an assignment expression of lvalue LHS from value RHS.
3325 MODIFYCODE is the code for a binary operator that we use
3326 to combine the old value of LHS with RHS to get the new value.
3327 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3329 tree
3330 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3332 tree result;
3333 tree newrhs;
3334 tree lhstype = TREE_TYPE (lhs);
3335 tree olhstype = lhstype;
3337 /* Types that aren't fully specified cannot be used in assignments. */
3338 lhs = require_complete_type (lhs);
3340 /* Avoid duplicate error messages from operands that had errors. */
3341 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3342 return error_mark_node;
3344 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3345 /* Do not use STRIP_NOPS here. We do not want an enumerator
3346 whose value is 0 to count as a null pointer constant. */
3347 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3348 rhs = TREE_OPERAND (rhs, 0);
3350 newrhs = rhs;
3352 /* If a binary op has been requested, combine the old LHS value with the RHS
3353 producing the value we should actually store into the LHS. */
3355 if (modifycode != NOP_EXPR)
3357 lhs = stabilize_reference (lhs);
3358 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3361 if (!lvalue_or_else (lhs, lv_assign))
3362 return error_mark_node;
3364 /* Give an error for storing in something that is 'const'. */
3366 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3367 || ((TREE_CODE (lhstype) == RECORD_TYPE
3368 || TREE_CODE (lhstype) == UNION_TYPE)
3369 && C_TYPE_FIELDS_READONLY (lhstype)))
3370 readonly_error (lhs, lv_assign);
3372 /* If storing into a structure or union member,
3373 it has probably been given type `int'.
3374 Compute the type that would go with
3375 the actual amount of storage the member occupies. */
3377 if (TREE_CODE (lhs) == COMPONENT_REF
3378 && (TREE_CODE (lhstype) == INTEGER_TYPE
3379 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3380 || TREE_CODE (lhstype) == REAL_TYPE
3381 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3382 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3384 /* If storing in a field that is in actuality a short or narrower than one,
3385 we must store in the field in its actual type. */
3387 if (lhstype != TREE_TYPE (lhs))
3389 lhs = copy_node (lhs);
3390 TREE_TYPE (lhs) = lhstype;
3393 /* Convert new value to destination type. */
3395 newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
3396 NULL_TREE, NULL_TREE, 0);
3397 if (TREE_CODE (newrhs) == ERROR_MARK)
3398 return error_mark_node;
3400 /* Scan operands. */
3402 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3403 TREE_SIDE_EFFECTS (result) = 1;
3405 /* If we got the LHS in a different type for storing in,
3406 convert the result back to the nominal type of LHS
3407 so that the value we return always has the same type
3408 as the LHS argument. */
3410 if (olhstype == TREE_TYPE (result))
3411 return result;
3412 return convert_for_assignment (olhstype, result, ic_assign,
3413 NULL_TREE, NULL_TREE, 0);
3416 /* Convert value RHS to type TYPE as preparation for an assignment
3417 to an lvalue of type TYPE.
3418 The real work of conversion is done by `convert'.
3419 The purpose of this function is to generate error messages
3420 for assignments that are not allowed in C.
3421 ERRTYPE says whether it is argument passing, assignment,
3422 initialization or return.
3424 FUNCTION is a tree for the function being called.
3425 PARMNUM is the number of the argument, for printing in error messages. */
3427 static tree
3428 convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
3429 tree fundecl, tree function, int parmnum)
3431 enum tree_code codel = TREE_CODE (type);
3432 tree rhstype;
3433 enum tree_code coder;
3434 tree rname = NULL_TREE;
3436 if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
3438 tree selector;
3439 /* Change pointer to function to the function itself for
3440 diagnostics. */
3441 if (TREE_CODE (function) == ADDR_EXPR
3442 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3443 function = TREE_OPERAND (function, 0);
3445 /* Handle an ObjC selector specially for diagnostics. */
3446 selector = objc_message_selector ();
3447 rname = function;
3448 if (selector && parmnum > 2)
3450 rname = selector;
3451 parmnum -= 2;
3455 /* This macro is used to emit diagnostics to ensure that all format
3456 strings are complete sentences, visible to gettext and checked at
3457 compile time. */
3458 #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE) \
3459 do { \
3460 switch (errtype) \
3462 case ic_argpass: \
3463 pedwarn (AR, parmnum, rname); \
3464 break; \
3465 case ic_argpass_nonproto: \
3466 warning (AR, parmnum, rname); \
3467 break; \
3468 case ic_assign: \
3469 pedwarn (AS); \
3470 break; \
3471 case ic_init: \
3472 pedwarn (IN); \
3473 break; \
3474 case ic_return: \
3475 pedwarn (RE); \
3476 break; \
3477 default: \
3478 gcc_unreachable (); \
3480 } while (0)
3482 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3483 /* Do not use STRIP_NOPS here. We do not want an enumerator
3484 whose value is 0 to count as a null pointer constant. */
3485 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3486 rhs = TREE_OPERAND (rhs, 0);
3488 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3489 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3490 rhs = default_conversion (rhs);
3491 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3492 rhs = decl_constant_value_for_broken_optimization (rhs);
3494 rhstype = TREE_TYPE (rhs);
3495 coder = TREE_CODE (rhstype);
3497 if (coder == ERROR_MARK)
3498 return error_mark_node;
3500 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3502 overflow_warning (rhs);
3503 /* Check for Objective-C protocols. This will automatically
3504 issue a warning if there are protocol violations. No need to
3505 use the return value. */
3506 if (c_dialect_objc ())
3507 objc_comptypes (type, rhstype, 0);
3508 return rhs;
3511 if (coder == VOID_TYPE)
3513 /* Except for passing an argument to an unprototyped function,
3514 this is a constraint violation. When passing an argument to
3515 an unprototyped function, it is compile-time undefined;
3516 making it a constraint in that case was rejected in
3517 DR#252. */
3518 error ("void value not ignored as it ought to be");
3519 return error_mark_node;
3521 /* A type converts to a reference to it.
3522 This code doesn't fully support references, it's just for the
3523 special case of va_start and va_copy. */
3524 if (codel == REFERENCE_TYPE
3525 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3527 if (!lvalue_p (rhs))
3529 error ("cannot pass rvalue to reference parameter");
3530 return error_mark_node;
3532 if (!c_mark_addressable (rhs))
3533 return error_mark_node;
3534 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3536 /* We already know that these two types are compatible, but they
3537 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3538 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3539 likely to be va_list, a typedef to __builtin_va_list, which
3540 is different enough that it will cause problems later. */
3541 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3542 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3544 rhs = build1 (NOP_EXPR, type, rhs);
3545 return rhs;
3547 /* Some types can interconvert without explicit casts. */
3548 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
3549 && vector_types_convertible_p (type, TREE_TYPE (rhs)))
3550 return convert (type, rhs);
3551 /* Arithmetic types all interconvert, and enum is treated like int. */
3552 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3553 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3554 || codel == BOOLEAN_TYPE)
3555 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3556 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3557 || coder == BOOLEAN_TYPE))
3558 return convert_and_check (type, rhs);
3560 /* Conversion to a transparent union from its member types.
3561 This applies only to function arguments. */
3562 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
3563 && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
3565 tree memb_types;
3566 tree marginal_memb_type = 0;
3568 for (memb_types = TYPE_FIELDS (type); memb_types;
3569 memb_types = TREE_CHAIN (memb_types))
3571 tree memb_type = TREE_TYPE (memb_types);
3573 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3574 TYPE_MAIN_VARIANT (rhstype)))
3575 break;
3577 if (TREE_CODE (memb_type) != POINTER_TYPE)
3578 continue;
3580 if (coder == POINTER_TYPE)
3582 tree ttl = TREE_TYPE (memb_type);
3583 tree ttr = TREE_TYPE (rhstype);
3585 /* Any non-function converts to a [const][volatile] void *
3586 and vice versa; otherwise, targets must be the same.
3587 Meanwhile, the lhs target must have all the qualifiers of
3588 the rhs. */
3589 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3590 || comp_target_types (memb_type, rhstype, 0))
3592 /* If this type won't generate any warnings, use it. */
3593 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3594 || ((TREE_CODE (ttr) == FUNCTION_TYPE
3595 && TREE_CODE (ttl) == FUNCTION_TYPE)
3596 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3597 == TYPE_QUALS (ttr))
3598 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3599 == TYPE_QUALS (ttl))))
3600 break;
3602 /* Keep looking for a better type, but remember this one. */
3603 if (!marginal_memb_type)
3604 marginal_memb_type = memb_type;
3608 /* Can convert integer zero to any pointer type. */
3609 if (integer_zerop (rhs)
3610 || (TREE_CODE (rhs) == NOP_EXPR
3611 && integer_zerop (TREE_OPERAND (rhs, 0))))
3613 rhs = null_pointer_node;
3614 break;
3618 if (memb_types || marginal_memb_type)
3620 if (!memb_types)
3622 /* We have only a marginally acceptable member type;
3623 it needs a warning. */
3624 tree ttl = TREE_TYPE (marginal_memb_type);
3625 tree ttr = TREE_TYPE (rhstype);
3627 /* Const and volatile mean something different for function
3628 types, so the usual warnings are not appropriate. */
3629 if (TREE_CODE (ttr) == FUNCTION_TYPE
3630 && TREE_CODE (ttl) == FUNCTION_TYPE)
3632 /* Because const and volatile on functions are
3633 restrictions that say the function will not do
3634 certain things, it is okay to use a const or volatile
3635 function where an ordinary one is wanted, but not
3636 vice-versa. */
3637 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3638 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE "
3639 "makes qualified function "
3640 "pointer from unqualified"),
3641 N_("assignment makes qualified "
3642 "function pointer from "
3643 "unqualified"),
3644 N_("initialization makes qualified "
3645 "function pointer from "
3646 "unqualified"),
3647 N_("return makes qualified function "
3648 "pointer from unqualified"));
3650 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3651 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
3652 "qualifiers from pointer target type"),
3653 N_("assignment discards qualifiers "
3654 "from pointer target type"),
3655 N_("initialization discards qualifiers "
3656 "from pointer target type"),
3657 N_("return discards qualifiers from "
3658 "pointer target type"));
3661 if (pedantic && !DECL_IN_SYSTEM_HEADER (fundecl))
3662 pedwarn ("ISO C prohibits argument conversion to union type");
3664 return build1 (NOP_EXPR, type, rhs);
3668 /* Conversions among pointers */
3669 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3670 && (coder == codel))
3672 tree ttl = TREE_TYPE (type);
3673 tree ttr = TREE_TYPE (rhstype);
3674 bool is_opaque_pointer;
3675 int target_cmp = 0; /* Cache comp_target_types () result. */
3677 /* Opaque pointers are treated like void pointers. */
3678 is_opaque_pointer = (targetm.vector_opaque_p (type)
3679 || targetm.vector_opaque_p (rhstype))
3680 && TREE_CODE (ttl) == VECTOR_TYPE
3681 && TREE_CODE (ttr) == VECTOR_TYPE;
3683 /* Any non-function converts to a [const][volatile] void *
3684 and vice versa; otherwise, targets must be the same.
3685 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3686 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3687 || (target_cmp = comp_target_types (type, rhstype, 0))
3688 || is_opaque_pointer
3689 || (c_common_unsigned_type (TYPE_MAIN_VARIANT (ttl))
3690 == c_common_unsigned_type (TYPE_MAIN_VARIANT (ttr))))
3692 if (pedantic
3693 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3695 (VOID_TYPE_P (ttr)
3696 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3697 which are not ANSI null ptr constants. */
3698 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3699 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3700 WARN_FOR_ASSIGNMENT (N_("ISO C forbids passing argument %d of "
3701 "%qE between function pointer "
3702 "and %<void *%>"),
3703 N_("ISO C forbids assignment between "
3704 "function pointer and %<void *%>"),
3705 N_("ISO C forbids initialization between "
3706 "function pointer and %<void *%>"),
3707 N_("ISO C forbids return between function "
3708 "pointer and %<void *%>"));
3709 /* Const and volatile mean something different for function types,
3710 so the usual warnings are not appropriate. */
3711 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3712 && TREE_CODE (ttl) != FUNCTION_TYPE)
3714 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3715 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
3716 "qualifiers from pointer target type"),
3717 N_("assignment discards qualifiers "
3718 "from pointer target type"),
3719 N_("initialization discards qualifiers "
3720 "from pointer target type"),
3721 N_("return discards qualifiers from "
3722 "pointer target type"));
3723 /* If this is not a case of ignoring a mismatch in signedness,
3724 no warning. */
3725 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3726 || target_cmp)
3728 /* If there is a mismatch, do warn. */
3729 else
3730 WARN_FOR_ASSIGNMENT (N_("pointer targets in passing argument "
3731 "%d of %qE differ in signedness"),
3732 N_("pointer targets in assignment "
3733 "differ in signedness"),
3734 N_("pointer targets in initialization "
3735 "differ in signedness"),
3736 N_("pointer targets in return differ "
3737 "in signedness"));
3739 else if (TREE_CODE (ttl) == FUNCTION_TYPE
3740 && TREE_CODE (ttr) == FUNCTION_TYPE)
3742 /* Because const and volatile on functions are restrictions
3743 that say the function will not do certain things,
3744 it is okay to use a const or volatile function
3745 where an ordinary one is wanted, but not vice-versa. */
3746 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3747 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
3748 "qualified function pointer "
3749 "from unqualified"),
3750 N_("assignment makes qualified function "
3751 "pointer from unqualified"),
3752 N_("initialization makes qualified "
3753 "function pointer from unqualified"),
3754 N_("return makes qualified function "
3755 "pointer from unqualified"));
3758 else
3759 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE from "
3760 "incompatible pointer type"),
3761 N_("assignment from incompatible pointer type"),
3762 N_("initialization from incompatible "
3763 "pointer type"),
3764 N_("return from incompatible pointer type"));
3765 return convert (type, rhs);
3767 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
3769 /* ??? This should not be an error when inlining calls to
3770 unprototyped functions. */
3771 error ("invalid use of non-lvalue array");
3772 return error_mark_node;
3774 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
3776 /* An explicit constant 0 can convert to a pointer,
3777 or one that results from arithmetic, even including
3778 a cast to integer type. */
3779 if (!(TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3781 !(TREE_CODE (rhs) == NOP_EXPR
3782 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3783 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3784 && integer_zerop (TREE_OPERAND (rhs, 0))))
3785 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
3786 "pointer from integer without a cast"),
3787 N_("assignment makes pointer from integer "
3788 "without a cast"),
3789 N_("initialization makes pointer from "
3790 "integer without a cast"),
3791 N_("return makes pointer from integer "
3792 "without a cast"));
3794 return convert (type, rhs);
3796 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
3798 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes integer "
3799 "from pointer without a cast"),
3800 N_("assignment makes integer from pointer "
3801 "without a cast"),
3802 N_("initialization makes integer from pointer "
3803 "without a cast"),
3804 N_("return makes integer from pointer "
3805 "without a cast"));
3806 return convert (type, rhs);
3808 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3809 return convert (type, rhs);
3811 switch (errtype)
3813 case ic_argpass:
3814 case ic_argpass_nonproto:
3815 /* ??? This should not be an error when inlining calls to
3816 unprototyped functions. */
3817 error ("incompatible type for argument %d of %qE", parmnum, rname);
3818 break;
3819 case ic_assign:
3820 error ("incompatible types in assignment");
3821 break;
3822 case ic_init:
3823 error ("incompatible types in initialization");
3824 break;
3825 case ic_return:
3826 error ("incompatible types in return");
3827 break;
3828 default:
3829 gcc_unreachable ();
3832 return error_mark_node;
3835 /* Convert VALUE for assignment into inlined parameter PARM. ARGNUM
3836 is used for error and waring reporting and indicates which argument
3837 is being processed. */
3839 tree
3840 c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
3842 tree ret, type;
3844 /* If FN was prototyped, the value has been converted already
3845 in convert_arguments. */
3846 if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
3847 return value;
3849 type = TREE_TYPE (parm);
3850 ret = convert_for_assignment (type, value,
3851 ic_argpass_nonproto, fn,
3852 fn, argnum);
3853 if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
3854 && INTEGRAL_TYPE_P (type)
3855 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
3856 ret = default_conversion (ret);
3857 return ret;
3860 /* If VALUE is a compound expr all of whose expressions are constant, then
3861 return its value. Otherwise, return error_mark_node.
3863 This is for handling COMPOUND_EXPRs as initializer elements
3864 which is allowed with a warning when -pedantic is specified. */
3866 static tree
3867 valid_compound_expr_initializer (tree value, tree endtype)
3869 if (TREE_CODE (value) == COMPOUND_EXPR)
3871 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
3872 == error_mark_node)
3873 return error_mark_node;
3874 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
3875 endtype);
3877 else if (!initializer_constant_valid_p (value, endtype))
3878 return error_mark_node;
3879 else
3880 return value;
3883 /* Perform appropriate conversions on the initial value of a variable,
3884 store it in the declaration DECL,
3885 and print any error messages that are appropriate.
3886 If the init is invalid, store an ERROR_MARK. */
3888 void
3889 store_init_value (tree decl, tree init)
3891 tree value, type;
3893 /* If variable's type was invalidly declared, just ignore it. */
3895 type = TREE_TYPE (decl);
3896 if (TREE_CODE (type) == ERROR_MARK)
3897 return;
3899 /* Digest the specified initializer into an expression. */
3901 value = digest_init (type, init, true, TREE_STATIC (decl));
3903 /* Store the expression if valid; else report error. */
3905 if (warn_traditional && !in_system_header
3906 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
3907 warning ("traditional C rejects automatic aggregate initialization");
3909 DECL_INITIAL (decl) = value;
3911 /* ANSI wants warnings about out-of-range constant initializers. */
3912 STRIP_TYPE_NOPS (value);
3913 constant_expression_warning (value);
3915 /* Check if we need to set array size from compound literal size. */
3916 if (TREE_CODE (type) == ARRAY_TYPE
3917 && TYPE_DOMAIN (type) == 0
3918 && value != error_mark_node)
3920 tree inside_init = init;
3922 if (TREE_CODE (init) == NON_LVALUE_EXPR)
3923 inside_init = TREE_OPERAND (init, 0);
3924 inside_init = fold (inside_init);
3926 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
3928 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
3930 if (TYPE_DOMAIN (TREE_TYPE (decl)))
3932 /* For int foo[] = (int [3]){1}; we need to set array size
3933 now since later on array initializer will be just the
3934 brace enclosed list of the compound literal. */
3935 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
3936 layout_type (type);
3937 layout_decl (decl, 0);
3943 /* Methods for storing and printing names for error messages. */
3945 /* Implement a spelling stack that allows components of a name to be pushed
3946 and popped. Each element on the stack is this structure. */
3948 struct spelling
3950 int kind;
3951 union
3953 int i;
3954 const char *s;
3955 } u;
3958 #define SPELLING_STRING 1
3959 #define SPELLING_MEMBER 2
3960 #define SPELLING_BOUNDS 3
3962 static struct spelling *spelling; /* Next stack element (unused). */
3963 static struct spelling *spelling_base; /* Spelling stack base. */
3964 static int spelling_size; /* Size of the spelling stack. */
3966 /* Macros to save and restore the spelling stack around push_... functions.
3967 Alternative to SAVE_SPELLING_STACK. */
3969 #define SPELLING_DEPTH() (spelling - spelling_base)
3970 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
3972 /* Push an element on the spelling stack with type KIND and assign VALUE
3973 to MEMBER. */
3975 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
3977 int depth = SPELLING_DEPTH (); \
3979 if (depth >= spelling_size) \
3981 spelling_size += 10; \
3982 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
3983 spelling_size); \
3984 RESTORE_SPELLING_DEPTH (depth); \
3987 spelling->kind = (KIND); \
3988 spelling->MEMBER = (VALUE); \
3989 spelling++; \
3992 /* Push STRING on the stack. Printed literally. */
3994 static void
3995 push_string (const char *string)
3997 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4000 /* Push a member name on the stack. Printed as '.' STRING. */
4002 static void
4003 push_member_name (tree decl)
4005 const char *const string
4006 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4007 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4010 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4012 static void
4013 push_array_bounds (int bounds)
4015 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4018 /* Compute the maximum size in bytes of the printed spelling. */
4020 static int
4021 spelling_length (void)
4023 int size = 0;
4024 struct spelling *p;
4026 for (p = spelling_base; p < spelling; p++)
4028 if (p->kind == SPELLING_BOUNDS)
4029 size += 25;
4030 else
4031 size += strlen (p->u.s) + 1;
4034 return size;
4037 /* Print the spelling to BUFFER and return it. */
4039 static char *
4040 print_spelling (char *buffer)
4042 char *d = buffer;
4043 struct spelling *p;
4045 for (p = spelling_base; p < spelling; p++)
4046 if (p->kind == SPELLING_BOUNDS)
4048 sprintf (d, "[%d]", p->u.i);
4049 d += strlen (d);
4051 else
4053 const char *s;
4054 if (p->kind == SPELLING_MEMBER)
4055 *d++ = '.';
4056 for (s = p->u.s; (*d = *s++); d++)
4059 *d++ = '\0';
4060 return buffer;
4063 /* Issue an error message for a bad initializer component.
4064 MSGID identifies the message.
4065 The component name is taken from the spelling stack. */
4067 void
4068 error_init (const char *msgid)
4070 char *ofwhat;
4072 error ("%s", _(msgid));
4073 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4074 if (*ofwhat)
4075 error ("(near initialization for %qs)", ofwhat);
4078 /* Issue a pedantic warning for a bad initializer component.
4079 MSGID identifies the message.
4080 The component name is taken from the spelling stack. */
4082 void
4083 pedwarn_init (const char *msgid)
4085 char *ofwhat;
4087 pedwarn ("%s", _(msgid));
4088 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4089 if (*ofwhat)
4090 pedwarn ("(near initialization for %qs)", ofwhat);
4093 /* Issue a warning for a bad initializer component.
4094 MSGID identifies the message.
4095 The component name is taken from the spelling stack. */
4097 static void
4098 warning_init (const char *msgid)
4100 char *ofwhat;
4102 warning ("%s", _(msgid));
4103 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4104 if (*ofwhat)
4105 warning ("(near initialization for %qs)", ofwhat);
4108 /* If TYPE is an array type and EXPR is a parenthesized string
4109 constant, warn if pedantic that EXPR is being used to initialize an
4110 object of type TYPE. */
4112 void
4113 maybe_warn_string_init (tree type, struct c_expr expr)
4115 if (pedantic
4116 && TREE_CODE (type) == ARRAY_TYPE
4117 && TREE_CODE (expr.value) == STRING_CST
4118 && expr.original_code != STRING_CST)
4119 pedwarn_init ("array initialized from parenthesized string constant");
4122 /* Digest the parser output INIT as an initializer for type TYPE.
4123 Return a C expression of type TYPE to represent the initial value.
4125 If INIT is a string constant, STRICT_STRING is true if it is
4126 unparenthesized or we should not warn here for it being parenthesized.
4127 For other types of INIT, STRICT_STRING is not used.
4129 REQUIRE_CONSTANT requests an error if non-constant initializers or
4130 elements are seen. */
4132 static tree
4133 digest_init (tree type, tree init, bool strict_string, int require_constant)
4135 enum tree_code code = TREE_CODE (type);
4136 tree inside_init = init;
4138 if (type == error_mark_node
4139 || init == error_mark_node
4140 || TREE_TYPE (init) == error_mark_node)
4141 return error_mark_node;
4143 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4144 /* Do not use STRIP_NOPS here. We do not want an enumerator
4145 whose value is 0 to count as a null pointer constant. */
4146 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4147 inside_init = TREE_OPERAND (init, 0);
4149 inside_init = fold (inside_init);
4151 /* Initialization of an array of chars from a string constant
4152 optionally enclosed in braces. */
4154 if (code == ARRAY_TYPE && inside_init
4155 && TREE_CODE (inside_init) == STRING_CST)
4157 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4158 /* Note that an array could be both an array of character type
4159 and an array of wchar_t if wchar_t is signed char or unsigned
4160 char. */
4161 bool char_array = (typ1 == char_type_node
4162 || typ1 == signed_char_type_node
4163 || typ1 == unsigned_char_type_node);
4164 bool wchar_array = !!comptypes (typ1, wchar_type_node);
4165 if (char_array || wchar_array)
4167 struct c_expr expr;
4168 bool char_string;
4169 expr.value = inside_init;
4170 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4171 maybe_warn_string_init (type, expr);
4173 char_string
4174 = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4175 == char_type_node);
4177 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4178 TYPE_MAIN_VARIANT (type)))
4179 return inside_init;
4181 if (!wchar_array && !char_string)
4183 error_init ("char-array initialized from wide string");
4184 return error_mark_node;
4186 if (char_string && !char_array)
4188 error_init ("wchar_t-array initialized from non-wide string");
4189 return error_mark_node;
4192 TREE_TYPE (inside_init) = type;
4193 if (TYPE_DOMAIN (type) != 0
4194 && TYPE_SIZE (type) != 0
4195 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4196 /* Subtract 1 (or sizeof (wchar_t))
4197 because it's ok to ignore the terminating null char
4198 that is counted in the length of the constant. */
4199 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4200 TREE_STRING_LENGTH (inside_init)
4201 - ((TYPE_PRECISION (typ1)
4202 != TYPE_PRECISION (char_type_node))
4203 ? (TYPE_PRECISION (wchar_type_node)
4204 / BITS_PER_UNIT)
4205 : 1)))
4206 pedwarn_init ("initializer-string for array of chars is too long");
4208 return inside_init;
4210 else if (INTEGRAL_TYPE_P (typ1))
4212 error_init ("array of inappropriate type initialized "
4213 "from string constant");
4214 return error_mark_node;
4218 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4219 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4220 below and handle as a constructor. */
4221 if (code == VECTOR_TYPE
4222 && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
4223 && vector_types_convertible_p (TREE_TYPE (inside_init), type)
4224 && TREE_CONSTANT (inside_init))
4226 if (TREE_CODE (inside_init) == VECTOR_CST
4227 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4228 TYPE_MAIN_VARIANT (type)))
4229 return inside_init;
4230 else
4231 return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
4234 /* Any type can be initialized
4235 from an expression of the same type, optionally with braces. */
4237 if (inside_init && TREE_TYPE (inside_init) != 0
4238 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4239 TYPE_MAIN_VARIANT (type))
4240 || (code == ARRAY_TYPE
4241 && comptypes (TREE_TYPE (inside_init), type))
4242 || (code == VECTOR_TYPE
4243 && comptypes (TREE_TYPE (inside_init), type))
4244 || (code == POINTER_TYPE
4245 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4246 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4247 TREE_TYPE (type)))
4248 || (code == POINTER_TYPE
4249 && TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE
4250 && comptypes (TREE_TYPE (inside_init),
4251 TREE_TYPE (type)))))
4253 if (code == POINTER_TYPE)
4255 inside_init = default_function_array_conversion (inside_init);
4257 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4259 error_init ("invalid use of non-lvalue array");
4260 return error_mark_node;
4264 if (code == VECTOR_TYPE)
4265 /* Although the types are compatible, we may require a
4266 conversion. */
4267 inside_init = convert (type, inside_init);
4269 if (require_constant && !flag_isoc99
4270 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4272 /* As an extension, allow initializing objects with static storage
4273 duration with compound literals (which are then treated just as
4274 the brace enclosed list they contain). */
4275 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4276 inside_init = DECL_INITIAL (decl);
4279 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4280 && TREE_CODE (inside_init) != CONSTRUCTOR)
4282 error_init ("array initialized from non-constant array expression");
4283 return error_mark_node;
4286 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4287 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4289 /* Compound expressions can only occur here if -pedantic or
4290 -pedantic-errors is specified. In the later case, we always want
4291 an error. In the former case, we simply want a warning. */
4292 if (require_constant && pedantic
4293 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4295 inside_init
4296 = valid_compound_expr_initializer (inside_init,
4297 TREE_TYPE (inside_init));
4298 if (inside_init == error_mark_node)
4299 error_init ("initializer element is not constant");
4300 else
4301 pedwarn_init ("initializer element is not constant");
4302 if (flag_pedantic_errors)
4303 inside_init = error_mark_node;
4305 else if (require_constant
4306 && !initializer_constant_valid_p (inside_init,
4307 TREE_TYPE (inside_init)))
4309 error_init ("initializer element is not constant");
4310 inside_init = error_mark_node;
4313 return inside_init;
4316 /* Handle scalar types, including conversions. */
4318 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4319 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
4320 || code == VECTOR_TYPE)
4322 /* Note that convert_for_assignment calls default_conversion
4323 for arrays and functions. We must not call it in the
4324 case where inside_init is a null pointer constant. */
4325 inside_init
4326 = convert_for_assignment (type, init, ic_init,
4327 NULL_TREE, NULL_TREE, 0);
4329 /* Check to see if we have already given an error message. */
4330 if (inside_init == error_mark_node)
4332 else if (require_constant && !TREE_CONSTANT (inside_init))
4334 error_init ("initializer element is not constant");
4335 inside_init = error_mark_node;
4337 else if (require_constant
4338 && !initializer_constant_valid_p (inside_init,
4339 TREE_TYPE (inside_init)))
4341 error_init ("initializer element is not computable at load time");
4342 inside_init = error_mark_node;
4345 return inside_init;
4348 /* Come here only for records and arrays. */
4350 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4352 error_init ("variable-sized object may not be initialized");
4353 return error_mark_node;
4356 error_init ("invalid initializer");
4357 return error_mark_node;
4360 /* Handle initializers that use braces. */
4362 /* Type of object we are accumulating a constructor for.
4363 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4364 static tree constructor_type;
4366 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4367 left to fill. */
4368 static tree constructor_fields;
4370 /* For an ARRAY_TYPE, this is the specified index
4371 at which to store the next element we get. */
4372 static tree constructor_index;
4374 /* For an ARRAY_TYPE, this is the maximum index. */
4375 static tree constructor_max_index;
4377 /* For a RECORD_TYPE, this is the first field not yet written out. */
4378 static tree constructor_unfilled_fields;
4380 /* For an ARRAY_TYPE, this is the index of the first element
4381 not yet written out. */
4382 static tree constructor_unfilled_index;
4384 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4385 This is so we can generate gaps between fields, when appropriate. */
4386 static tree constructor_bit_index;
4388 /* If we are saving up the elements rather than allocating them,
4389 this is the list of elements so far (in reverse order,
4390 most recent first). */
4391 static tree constructor_elements;
4393 /* 1 if constructor should be incrementally stored into a constructor chain,
4394 0 if all the elements should be kept in AVL tree. */
4395 static int constructor_incremental;
4397 /* 1 if so far this constructor's elements are all compile-time constants. */
4398 static int constructor_constant;
4400 /* 1 if so far this constructor's elements are all valid address constants. */
4401 static int constructor_simple;
4403 /* 1 if this constructor is erroneous so far. */
4404 static int constructor_erroneous;
4406 /* Structure for managing pending initializer elements, organized as an
4407 AVL tree. */
4409 struct init_node
4411 struct init_node *left, *right;
4412 struct init_node *parent;
4413 int balance;
4414 tree purpose;
4415 tree value;
4418 /* Tree of pending elements at this constructor level.
4419 These are elements encountered out of order
4420 which belong at places we haven't reached yet in actually
4421 writing the output.
4422 Will never hold tree nodes across GC runs. */
4423 static struct init_node *constructor_pending_elts;
4425 /* The SPELLING_DEPTH of this constructor. */
4426 static int constructor_depth;
4428 /* 0 if implicitly pushing constructor levels is allowed. */
4429 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4431 /* DECL node for which an initializer is being read.
4432 0 means we are reading a constructor expression
4433 such as (struct foo) {...}. */
4434 static tree constructor_decl;
4436 /* Nonzero if this is an initializer for a top-level decl. */
4437 static int constructor_top_level;
4439 /* Nonzero if there were any member designators in this initializer. */
4440 static int constructor_designated;
4442 /* Nesting depth of designator list. */
4443 static int designator_depth;
4445 /* Nonzero if there were diagnosed errors in this designator list. */
4446 static int designator_errorneous;
4449 /* This stack has a level for each implicit or explicit level of
4450 structuring in the initializer, including the outermost one. It
4451 saves the values of most of the variables above. */
4453 struct constructor_range_stack;
4455 struct constructor_stack
4457 struct constructor_stack *next;
4458 tree type;
4459 tree fields;
4460 tree index;
4461 tree max_index;
4462 tree unfilled_index;
4463 tree unfilled_fields;
4464 tree bit_index;
4465 tree elements;
4466 struct init_node *pending_elts;
4467 int offset;
4468 int depth;
4469 /* If value nonzero, this value should replace the entire
4470 constructor at this level. */
4471 struct c_expr replacement_value;
4472 struct constructor_range_stack *range_stack;
4473 char constant;
4474 char simple;
4475 char implicit;
4476 char erroneous;
4477 char outer;
4478 char incremental;
4479 char designated;
4482 struct constructor_stack *constructor_stack;
4484 /* This stack represents designators from some range designator up to
4485 the last designator in the list. */
4487 struct constructor_range_stack
4489 struct constructor_range_stack *next, *prev;
4490 struct constructor_stack *stack;
4491 tree range_start;
4492 tree index;
4493 tree range_end;
4494 tree fields;
4497 struct constructor_range_stack *constructor_range_stack;
4499 /* This stack records separate initializers that are nested.
4500 Nested initializers can't happen in ANSI C, but GNU C allows them
4501 in cases like { ... (struct foo) { ... } ... }. */
4503 struct initializer_stack
4505 struct initializer_stack *next;
4506 tree decl;
4507 struct constructor_stack *constructor_stack;
4508 struct constructor_range_stack *constructor_range_stack;
4509 tree elements;
4510 struct spelling *spelling;
4511 struct spelling *spelling_base;
4512 int spelling_size;
4513 char top_level;
4514 char require_constant_value;
4515 char require_constant_elements;
4518 struct initializer_stack *initializer_stack;
4520 /* Prepare to parse and output the initializer for variable DECL. */
4522 void
4523 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
4525 const char *locus;
4526 struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
4528 p->decl = constructor_decl;
4529 p->require_constant_value = require_constant_value;
4530 p->require_constant_elements = require_constant_elements;
4531 p->constructor_stack = constructor_stack;
4532 p->constructor_range_stack = constructor_range_stack;
4533 p->elements = constructor_elements;
4534 p->spelling = spelling;
4535 p->spelling_base = spelling_base;
4536 p->spelling_size = spelling_size;
4537 p->top_level = constructor_top_level;
4538 p->next = initializer_stack;
4539 initializer_stack = p;
4541 constructor_decl = decl;
4542 constructor_designated = 0;
4543 constructor_top_level = top_level;
4545 if (decl != 0)
4547 require_constant_value = TREE_STATIC (decl);
4548 require_constant_elements
4549 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4550 /* For a scalar, you can always use any value to initialize,
4551 even within braces. */
4552 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4553 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4554 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4555 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4556 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4558 else
4560 require_constant_value = 0;
4561 require_constant_elements = 0;
4562 locus = "(anonymous)";
4565 constructor_stack = 0;
4566 constructor_range_stack = 0;
4568 missing_braces_mentioned = 0;
4570 spelling_base = 0;
4571 spelling_size = 0;
4572 RESTORE_SPELLING_DEPTH (0);
4574 if (locus)
4575 push_string (locus);
4578 void
4579 finish_init (void)
4581 struct initializer_stack *p = initializer_stack;
4583 /* Free the whole constructor stack of this initializer. */
4584 while (constructor_stack)
4586 struct constructor_stack *q = constructor_stack;
4587 constructor_stack = q->next;
4588 free (q);
4591 gcc_assert (!constructor_range_stack);
4593 /* Pop back to the data of the outer initializer (if any). */
4594 free (spelling_base);
4596 constructor_decl = p->decl;
4597 require_constant_value = p->require_constant_value;
4598 require_constant_elements = p->require_constant_elements;
4599 constructor_stack = p->constructor_stack;
4600 constructor_range_stack = p->constructor_range_stack;
4601 constructor_elements = p->elements;
4602 spelling = p->spelling;
4603 spelling_base = p->spelling_base;
4604 spelling_size = p->spelling_size;
4605 constructor_top_level = p->top_level;
4606 initializer_stack = p->next;
4607 free (p);
4610 /* Call here when we see the initializer is surrounded by braces.
4611 This is instead of a call to push_init_level;
4612 it is matched by a call to pop_init_level.
4614 TYPE is the type to initialize, for a constructor expression.
4615 For an initializer for a decl, TYPE is zero. */
4617 void
4618 really_start_incremental_init (tree type)
4620 struct constructor_stack *p = XNEW (struct constructor_stack);
4622 if (type == 0)
4623 type = TREE_TYPE (constructor_decl);
4625 if (targetm.vector_opaque_p (type))
4626 error ("opaque vector types cannot be initialized");
4628 p->type = constructor_type;
4629 p->fields = constructor_fields;
4630 p->index = constructor_index;
4631 p->max_index = constructor_max_index;
4632 p->unfilled_index = constructor_unfilled_index;
4633 p->unfilled_fields = constructor_unfilled_fields;
4634 p->bit_index = constructor_bit_index;
4635 p->elements = constructor_elements;
4636 p->constant = constructor_constant;
4637 p->simple = constructor_simple;
4638 p->erroneous = constructor_erroneous;
4639 p->pending_elts = constructor_pending_elts;
4640 p->depth = constructor_depth;
4641 p->replacement_value.value = 0;
4642 p->replacement_value.original_code = ERROR_MARK;
4643 p->implicit = 0;
4644 p->range_stack = 0;
4645 p->outer = 0;
4646 p->incremental = constructor_incremental;
4647 p->designated = constructor_designated;
4648 p->next = 0;
4649 constructor_stack = p;
4651 constructor_constant = 1;
4652 constructor_simple = 1;
4653 constructor_depth = SPELLING_DEPTH ();
4654 constructor_elements = 0;
4655 constructor_pending_elts = 0;
4656 constructor_type = type;
4657 constructor_incremental = 1;
4658 constructor_designated = 0;
4659 designator_depth = 0;
4660 designator_errorneous = 0;
4662 if (TREE_CODE (constructor_type) == RECORD_TYPE
4663 || TREE_CODE (constructor_type) == UNION_TYPE)
4665 constructor_fields = TYPE_FIELDS (constructor_type);
4666 /* Skip any nameless bit fields at the beginning. */
4667 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4668 && DECL_NAME (constructor_fields) == 0)
4669 constructor_fields = TREE_CHAIN (constructor_fields);
4671 constructor_unfilled_fields = constructor_fields;
4672 constructor_bit_index = bitsize_zero_node;
4674 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4676 if (TYPE_DOMAIN (constructor_type))
4678 constructor_max_index
4679 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4681 /* Detect non-empty initializations of zero-length arrays. */
4682 if (constructor_max_index == NULL_TREE
4683 && TYPE_SIZE (constructor_type))
4684 constructor_max_index = build_int_cst (NULL_TREE, -1);
4686 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4687 to initialize VLAs will cause a proper error; avoid tree
4688 checking errors as well by setting a safe value. */
4689 if (constructor_max_index
4690 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4691 constructor_max_index = build_int_cst (NULL_TREE, -1);
4693 constructor_index
4694 = convert (bitsizetype,
4695 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4697 else
4698 constructor_index = bitsize_zero_node;
4700 constructor_unfilled_index = constructor_index;
4702 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4704 /* Vectors are like simple fixed-size arrays. */
4705 constructor_max_index =
4706 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4707 constructor_index = convert (bitsizetype, bitsize_zero_node);
4708 constructor_unfilled_index = constructor_index;
4710 else
4712 /* Handle the case of int x = {5}; */
4713 constructor_fields = constructor_type;
4714 constructor_unfilled_fields = constructor_type;
4718 /* Push down into a subobject, for initialization.
4719 If this is for an explicit set of braces, IMPLICIT is 0.
4720 If it is because the next element belongs at a lower level,
4721 IMPLICIT is 1 (or 2 if the push is because of designator list). */
4723 void
4724 push_init_level (int implicit)
4726 struct constructor_stack *p;
4727 tree value = NULL_TREE;
4729 /* If we've exhausted any levels that didn't have braces,
4730 pop them now. */
4731 while (constructor_stack->implicit)
4733 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4734 || TREE_CODE (constructor_type) == UNION_TYPE)
4735 && constructor_fields == 0)
4736 process_init_element (pop_init_level (1));
4737 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4738 && constructor_max_index
4739 && tree_int_cst_lt (constructor_max_index, constructor_index))
4740 process_init_element (pop_init_level (1));
4741 else
4742 break;
4745 /* Unless this is an explicit brace, we need to preserve previous
4746 content if any. */
4747 if (implicit)
4749 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4750 || TREE_CODE (constructor_type) == UNION_TYPE)
4751 && constructor_fields)
4752 value = find_init_member (constructor_fields);
4753 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4754 value = find_init_member (constructor_index);
4757 p = XNEW (struct constructor_stack);
4758 p->type = constructor_type;
4759 p->fields = constructor_fields;
4760 p->index = constructor_index;
4761 p->max_index = constructor_max_index;
4762 p->unfilled_index = constructor_unfilled_index;
4763 p->unfilled_fields = constructor_unfilled_fields;
4764 p->bit_index = constructor_bit_index;
4765 p->elements = constructor_elements;
4766 p->constant = constructor_constant;
4767 p->simple = constructor_simple;
4768 p->erroneous = constructor_erroneous;
4769 p->pending_elts = constructor_pending_elts;
4770 p->depth = constructor_depth;
4771 p->replacement_value.value = 0;
4772 p->replacement_value.original_code = ERROR_MARK;
4773 p->implicit = implicit;
4774 p->outer = 0;
4775 p->incremental = constructor_incremental;
4776 p->designated = constructor_designated;
4777 p->next = constructor_stack;
4778 p->range_stack = 0;
4779 constructor_stack = p;
4781 constructor_constant = 1;
4782 constructor_simple = 1;
4783 constructor_depth = SPELLING_DEPTH ();
4784 constructor_elements = 0;
4785 constructor_incremental = 1;
4786 constructor_designated = 0;
4787 constructor_pending_elts = 0;
4788 if (!implicit)
4790 p->range_stack = constructor_range_stack;
4791 constructor_range_stack = 0;
4792 designator_depth = 0;
4793 designator_errorneous = 0;
4796 /* Don't die if an entire brace-pair level is superfluous
4797 in the containing level. */
4798 if (constructor_type == 0)
4800 else if (TREE_CODE (constructor_type) == RECORD_TYPE
4801 || TREE_CODE (constructor_type) == UNION_TYPE)
4803 /* Don't die if there are extra init elts at the end. */
4804 if (constructor_fields == 0)
4805 constructor_type = 0;
4806 else
4808 constructor_type = TREE_TYPE (constructor_fields);
4809 push_member_name (constructor_fields);
4810 constructor_depth++;
4813 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4815 constructor_type = TREE_TYPE (constructor_type);
4816 push_array_bounds (tree_low_cst (constructor_index, 0));
4817 constructor_depth++;
4820 if (constructor_type == 0)
4822 error_init ("extra brace group at end of initializer");
4823 constructor_fields = 0;
4824 constructor_unfilled_fields = 0;
4825 return;
4828 if (value && TREE_CODE (value) == CONSTRUCTOR)
4830 constructor_constant = TREE_CONSTANT (value);
4831 constructor_simple = TREE_STATIC (value);
4832 constructor_elements = CONSTRUCTOR_ELTS (value);
4833 if (constructor_elements
4834 && (TREE_CODE (constructor_type) == RECORD_TYPE
4835 || TREE_CODE (constructor_type) == ARRAY_TYPE))
4836 set_nonincremental_init ();
4839 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
4841 missing_braces_mentioned = 1;
4842 warning_init ("missing braces around initializer");
4845 if (TREE_CODE (constructor_type) == RECORD_TYPE
4846 || TREE_CODE (constructor_type) == UNION_TYPE)
4848 constructor_fields = TYPE_FIELDS (constructor_type);
4849 /* Skip any nameless bit fields at the beginning. */
4850 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4851 && DECL_NAME (constructor_fields) == 0)
4852 constructor_fields = TREE_CHAIN (constructor_fields);
4854 constructor_unfilled_fields = constructor_fields;
4855 constructor_bit_index = bitsize_zero_node;
4857 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4859 /* Vectors are like simple fixed-size arrays. */
4860 constructor_max_index =
4861 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4862 constructor_index = convert (bitsizetype, integer_zero_node);
4863 constructor_unfilled_index = constructor_index;
4865 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4867 if (TYPE_DOMAIN (constructor_type))
4869 constructor_max_index
4870 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4872 /* Detect non-empty initializations of zero-length arrays. */
4873 if (constructor_max_index == NULL_TREE
4874 && TYPE_SIZE (constructor_type))
4875 constructor_max_index = build_int_cst (NULL_TREE, -1);
4877 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4878 to initialize VLAs will cause a proper error; avoid tree
4879 checking errors as well by setting a safe value. */
4880 if (constructor_max_index
4881 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4882 constructor_max_index = build_int_cst (NULL_TREE, -1);
4884 constructor_index
4885 = convert (bitsizetype,
4886 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4888 else
4889 constructor_index = bitsize_zero_node;
4891 constructor_unfilled_index = constructor_index;
4892 if (value && TREE_CODE (value) == STRING_CST)
4894 /* We need to split the char/wchar array into individual
4895 characters, so that we don't have to special case it
4896 everywhere. */
4897 set_nonincremental_init_from_string (value);
4900 else
4902 warning_init ("braces around scalar initializer");
4903 constructor_fields = constructor_type;
4904 constructor_unfilled_fields = constructor_type;
4908 /* At the end of an implicit or explicit brace level,
4909 finish up that level of constructor. If a single expression
4910 with redundant braces initialized that level, return the
4911 c_expr structure for that expression. Otherwise, the original_code
4912 element is set to ERROR_MARK.
4913 If we were outputting the elements as they are read, return 0 as the value
4914 from inner levels (process_init_element ignores that),
4915 but return error_mark_node as the value from the outermost level
4916 (that's what we want to put in DECL_INITIAL).
4917 Otherwise, return a CONSTRUCTOR expression as the value. */
4919 struct c_expr
4920 pop_init_level (int implicit)
4922 struct constructor_stack *p;
4923 struct c_expr ret;
4924 ret.value = 0;
4925 ret.original_code = ERROR_MARK;
4927 if (implicit == 0)
4929 /* When we come to an explicit close brace,
4930 pop any inner levels that didn't have explicit braces. */
4931 while (constructor_stack->implicit)
4932 process_init_element (pop_init_level (1));
4934 gcc_assert (!constructor_range_stack);
4937 /* Now output all pending elements. */
4938 constructor_incremental = 1;
4939 output_pending_init_elements (1);
4941 p = constructor_stack;
4943 /* Error for initializing a flexible array member, or a zero-length
4944 array member in an inappropriate context. */
4945 if (constructor_type && constructor_fields
4946 && TREE_CODE (constructor_type) == ARRAY_TYPE
4947 && TYPE_DOMAIN (constructor_type)
4948 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
4950 /* Silently discard empty initializations. The parser will
4951 already have pedwarned for empty brackets. */
4952 if (integer_zerop (constructor_unfilled_index))
4953 constructor_type = NULL_TREE;
4954 else
4956 gcc_assert (!TYPE_SIZE (constructor_type));
4958 if (constructor_depth > 2)
4959 error_init ("initialization of flexible array member in a nested context");
4960 else if (pedantic)
4961 pedwarn_init ("initialization of a flexible array member");
4963 /* We have already issued an error message for the existence
4964 of a flexible array member not at the end of the structure.
4965 Discard the initializer so that we do not abort later. */
4966 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
4967 constructor_type = NULL_TREE;
4971 /* Warn when some struct elements are implicitly initialized to zero. */
4972 if (warn_missing_field_initializers
4973 && constructor_type
4974 && TREE_CODE (constructor_type) == RECORD_TYPE
4975 && constructor_unfilled_fields)
4977 /* Do not warn for flexible array members or zero-length arrays. */
4978 while (constructor_unfilled_fields
4979 && (!DECL_SIZE (constructor_unfilled_fields)
4980 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
4981 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
4983 /* Do not warn if this level of the initializer uses member
4984 designators; it is likely to be deliberate. */
4985 if (constructor_unfilled_fields && !constructor_designated)
4987 push_member_name (constructor_unfilled_fields);
4988 warning_init ("missing initializer");
4989 RESTORE_SPELLING_DEPTH (constructor_depth);
4993 /* Pad out the end of the structure. */
4994 if (p->replacement_value.value)
4995 /* If this closes a superfluous brace pair,
4996 just pass out the element between them. */
4997 ret = p->replacement_value;
4998 else if (constructor_type == 0)
5000 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5001 && TREE_CODE (constructor_type) != UNION_TYPE
5002 && TREE_CODE (constructor_type) != ARRAY_TYPE
5003 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5005 /* A nonincremental scalar initializer--just return
5006 the element, after verifying there is just one. */
5007 if (constructor_elements == 0)
5009 if (!constructor_erroneous)
5010 error_init ("empty scalar initializer");
5011 ret.value = error_mark_node;
5013 else if (TREE_CHAIN (constructor_elements) != 0)
5015 error_init ("extra elements in scalar initializer");
5016 ret.value = TREE_VALUE (constructor_elements);
5018 else
5019 ret.value = TREE_VALUE (constructor_elements);
5021 else
5023 if (constructor_erroneous)
5024 ret.value = error_mark_node;
5025 else
5027 ret.value = build_constructor (constructor_type,
5028 nreverse (constructor_elements));
5029 if (constructor_constant)
5030 TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
5031 if (constructor_constant && constructor_simple)
5032 TREE_STATIC (ret.value) = 1;
5036 constructor_type = p->type;
5037 constructor_fields = p->fields;
5038 constructor_index = p->index;
5039 constructor_max_index = p->max_index;
5040 constructor_unfilled_index = p->unfilled_index;
5041 constructor_unfilled_fields = p->unfilled_fields;
5042 constructor_bit_index = p->bit_index;
5043 constructor_elements = p->elements;
5044 constructor_constant = p->constant;
5045 constructor_simple = p->simple;
5046 constructor_erroneous = p->erroneous;
5047 constructor_incremental = p->incremental;
5048 constructor_designated = p->designated;
5049 constructor_pending_elts = p->pending_elts;
5050 constructor_depth = p->depth;
5051 if (!p->implicit)
5052 constructor_range_stack = p->range_stack;
5053 RESTORE_SPELLING_DEPTH (constructor_depth);
5055 constructor_stack = p->next;
5056 free (p);
5058 if (ret.value == 0)
5060 if (constructor_stack == 0)
5062 ret.value = error_mark_node;
5063 return ret;
5065 return ret;
5067 return ret;
5070 /* Common handling for both array range and field name designators.
5071 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5073 static int
5074 set_designator (int array)
5076 tree subtype;
5077 enum tree_code subcode;
5079 /* Don't die if an entire brace-pair level is superfluous
5080 in the containing level. */
5081 if (constructor_type == 0)
5082 return 1;
5084 /* If there were errors in this designator list already, bail out
5085 silently. */
5086 if (designator_errorneous)
5087 return 1;
5089 if (!designator_depth)
5091 gcc_assert (!constructor_range_stack);
5093 /* Designator list starts at the level of closest explicit
5094 braces. */
5095 while (constructor_stack->implicit)
5096 process_init_element (pop_init_level (1));
5097 constructor_designated = 1;
5098 return 0;
5101 if (constructor_no_implicit)
5103 error_init ("initialization designators may not nest");
5104 return 1;
5107 switch (TREE_CODE (constructor_type))
5109 case RECORD_TYPE:
5110 case UNION_TYPE:
5111 subtype = TREE_TYPE (constructor_fields);
5112 if (subtype != error_mark_node)
5113 subtype = TYPE_MAIN_VARIANT (subtype);
5114 break;
5115 case ARRAY_TYPE:
5116 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5117 break;
5118 default:
5119 gcc_unreachable ();
5122 subcode = TREE_CODE (subtype);
5123 if (array && subcode != ARRAY_TYPE)
5125 error_init ("array index in non-array initializer");
5126 return 1;
5128 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5130 error_init ("field name not in record or union initializer");
5131 return 1;
5134 constructor_designated = 1;
5135 push_init_level (2);
5136 return 0;
5139 /* If there are range designators in designator list, push a new designator
5140 to constructor_range_stack. RANGE_END is end of such stack range or
5141 NULL_TREE if there is no range designator at this level. */
5143 static void
5144 push_range_stack (tree range_end)
5146 struct constructor_range_stack *p;
5148 p = GGC_NEW (struct constructor_range_stack);
5149 p->prev = constructor_range_stack;
5150 p->next = 0;
5151 p->fields = constructor_fields;
5152 p->range_start = constructor_index;
5153 p->index = constructor_index;
5154 p->stack = constructor_stack;
5155 p->range_end = range_end;
5156 if (constructor_range_stack)
5157 constructor_range_stack->next = p;
5158 constructor_range_stack = p;
5161 /* Within an array initializer, specify the next index to be initialized.
5162 FIRST is that index. If LAST is nonzero, then initialize a range
5163 of indices, running from FIRST through LAST. */
5165 void
5166 set_init_index (tree first, tree last)
5168 if (set_designator (1))
5169 return;
5171 designator_errorneous = 1;
5173 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5174 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5176 error_init ("array index in initializer not of integer type");
5177 return;
5180 while ((TREE_CODE (first) == NOP_EXPR
5181 || TREE_CODE (first) == CONVERT_EXPR
5182 || TREE_CODE (first) == NON_LVALUE_EXPR)
5183 && (TYPE_MODE (TREE_TYPE (first))
5184 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5185 first = TREE_OPERAND (first, 0);
5187 if (last)
5188 while ((TREE_CODE (last) == NOP_EXPR
5189 || TREE_CODE (last) == CONVERT_EXPR
5190 || TREE_CODE (last) == NON_LVALUE_EXPR)
5191 && (TYPE_MODE (TREE_TYPE (last))
5192 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5193 last = TREE_OPERAND (last, 0);
5195 if (TREE_CODE (first) != INTEGER_CST)
5196 error_init ("nonconstant array index in initializer");
5197 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5198 error_init ("nonconstant array index in initializer");
5199 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5200 error_init ("array index in non-array initializer");
5201 else if (tree_int_cst_sgn (first) == -1)
5202 error_init ("array index in initializer exceeds array bounds");
5203 else if (constructor_max_index
5204 && tree_int_cst_lt (constructor_max_index, first))
5205 error_init ("array index in initializer exceeds array bounds");
5206 else
5208 constructor_index = convert (bitsizetype, first);
5210 if (last)
5212 if (tree_int_cst_equal (first, last))
5213 last = 0;
5214 else if (tree_int_cst_lt (last, first))
5216 error_init ("empty index range in initializer");
5217 last = 0;
5219 else
5221 last = convert (bitsizetype, last);
5222 if (constructor_max_index != 0
5223 && tree_int_cst_lt (constructor_max_index, last))
5225 error_init ("array index range in initializer exceeds array bounds");
5226 last = 0;
5231 designator_depth++;
5232 designator_errorneous = 0;
5233 if (constructor_range_stack || last)
5234 push_range_stack (last);
5238 /* Within a struct initializer, specify the next field to be initialized. */
5240 void
5241 set_init_label (tree fieldname)
5243 tree tail;
5245 if (set_designator (0))
5246 return;
5248 designator_errorneous = 1;
5250 if (TREE_CODE (constructor_type) != RECORD_TYPE
5251 && TREE_CODE (constructor_type) != UNION_TYPE)
5253 error_init ("field name not in record or union initializer");
5254 return;
5257 for (tail = TYPE_FIELDS (constructor_type); tail;
5258 tail = TREE_CHAIN (tail))
5260 if (DECL_NAME (tail) == fieldname)
5261 break;
5264 if (tail == 0)
5265 error ("unknown field %qs specified in initializer",
5266 IDENTIFIER_POINTER (fieldname));
5267 else
5269 constructor_fields = tail;
5270 designator_depth++;
5271 designator_errorneous = 0;
5272 if (constructor_range_stack)
5273 push_range_stack (NULL_TREE);
5277 /* Add a new initializer to the tree of pending initializers. PURPOSE
5278 identifies the initializer, either array index or field in a structure.
5279 VALUE is the value of that index or field. */
5281 static void
5282 add_pending_init (tree purpose, tree value)
5284 struct init_node *p, **q, *r;
5286 q = &constructor_pending_elts;
5287 p = 0;
5289 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5291 while (*q != 0)
5293 p = *q;
5294 if (tree_int_cst_lt (purpose, p->purpose))
5295 q = &p->left;
5296 else if (tree_int_cst_lt (p->purpose, purpose))
5297 q = &p->right;
5298 else
5300 if (TREE_SIDE_EFFECTS (p->value))
5301 warning_init ("initialized field with side-effects overwritten");
5302 p->value = value;
5303 return;
5307 else
5309 tree bitpos;
5311 bitpos = bit_position (purpose);
5312 while (*q != NULL)
5314 p = *q;
5315 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5316 q = &p->left;
5317 else if (p->purpose != purpose)
5318 q = &p->right;
5319 else
5321 if (TREE_SIDE_EFFECTS (p->value))
5322 warning_init ("initialized field with side-effects overwritten");
5323 p->value = value;
5324 return;
5329 r = GGC_NEW (struct init_node);
5330 r->purpose = purpose;
5331 r->value = value;
5333 *q = r;
5334 r->parent = p;
5335 r->left = 0;
5336 r->right = 0;
5337 r->balance = 0;
5339 while (p)
5341 struct init_node *s;
5343 if (r == p->left)
5345 if (p->balance == 0)
5346 p->balance = -1;
5347 else if (p->balance < 0)
5349 if (r->balance < 0)
5351 /* L rotation. */
5352 p->left = r->right;
5353 if (p->left)
5354 p->left->parent = p;
5355 r->right = p;
5357 p->balance = 0;
5358 r->balance = 0;
5360 s = p->parent;
5361 p->parent = r;
5362 r->parent = s;
5363 if (s)
5365 if (s->left == p)
5366 s->left = r;
5367 else
5368 s->right = r;
5370 else
5371 constructor_pending_elts = r;
5373 else
5375 /* LR rotation. */
5376 struct init_node *t = r->right;
5378 r->right = t->left;
5379 if (r->right)
5380 r->right->parent = r;
5381 t->left = r;
5383 p->left = t->right;
5384 if (p->left)
5385 p->left->parent = p;
5386 t->right = p;
5388 p->balance = t->balance < 0;
5389 r->balance = -(t->balance > 0);
5390 t->balance = 0;
5392 s = p->parent;
5393 p->parent = t;
5394 r->parent = t;
5395 t->parent = s;
5396 if (s)
5398 if (s->left == p)
5399 s->left = t;
5400 else
5401 s->right = t;
5403 else
5404 constructor_pending_elts = t;
5406 break;
5408 else
5410 /* p->balance == +1; growth of left side balances the node. */
5411 p->balance = 0;
5412 break;
5415 else /* r == p->right */
5417 if (p->balance == 0)
5418 /* Growth propagation from right side. */
5419 p->balance++;
5420 else if (p->balance > 0)
5422 if (r->balance > 0)
5424 /* R rotation. */
5425 p->right = r->left;
5426 if (p->right)
5427 p->right->parent = p;
5428 r->left = p;
5430 p->balance = 0;
5431 r->balance = 0;
5433 s = p->parent;
5434 p->parent = r;
5435 r->parent = s;
5436 if (s)
5438 if (s->left == p)
5439 s->left = r;
5440 else
5441 s->right = r;
5443 else
5444 constructor_pending_elts = r;
5446 else /* r->balance == -1 */
5448 /* RL rotation */
5449 struct init_node *t = r->left;
5451 r->left = t->right;
5452 if (r->left)
5453 r->left->parent = r;
5454 t->right = r;
5456 p->right = t->left;
5457 if (p->right)
5458 p->right->parent = p;
5459 t->left = p;
5461 r->balance = (t->balance < 0);
5462 p->balance = -(t->balance > 0);
5463 t->balance = 0;
5465 s = p->parent;
5466 p->parent = t;
5467 r->parent = t;
5468 t->parent = s;
5469 if (s)
5471 if (s->left == p)
5472 s->left = t;
5473 else
5474 s->right = t;
5476 else
5477 constructor_pending_elts = t;
5479 break;
5481 else
5483 /* p->balance == -1; growth of right side balances the node. */
5484 p->balance = 0;
5485 break;
5489 r = p;
5490 p = p->parent;
5494 /* Build AVL tree from a sorted chain. */
5496 static void
5497 set_nonincremental_init (void)
5499 tree chain;
5501 if (TREE_CODE (constructor_type) != RECORD_TYPE
5502 && TREE_CODE (constructor_type) != ARRAY_TYPE)
5503 return;
5505 for (chain = constructor_elements; chain; chain = TREE_CHAIN (chain))
5506 add_pending_init (TREE_PURPOSE (chain), TREE_VALUE (chain));
5507 constructor_elements = 0;
5508 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5510 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5511 /* Skip any nameless bit fields at the beginning. */
5512 while (constructor_unfilled_fields != 0
5513 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5514 && DECL_NAME (constructor_unfilled_fields) == 0)
5515 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5518 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5520 if (TYPE_DOMAIN (constructor_type))
5521 constructor_unfilled_index
5522 = convert (bitsizetype,
5523 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5524 else
5525 constructor_unfilled_index = bitsize_zero_node;
5527 constructor_incremental = 0;
5530 /* Build AVL tree from a string constant. */
5532 static void
5533 set_nonincremental_init_from_string (tree str)
5535 tree value, purpose, type;
5536 HOST_WIDE_INT val[2];
5537 const char *p, *end;
5538 int byte, wchar_bytes, charwidth, bitpos;
5540 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
5542 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5543 == TYPE_PRECISION (char_type_node))
5544 wchar_bytes = 1;
5545 else
5547 gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5548 == TYPE_PRECISION (wchar_type_node));
5549 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5551 charwidth = TYPE_PRECISION (char_type_node);
5552 type = TREE_TYPE (constructor_type);
5553 p = TREE_STRING_POINTER (str);
5554 end = p + TREE_STRING_LENGTH (str);
5556 for (purpose = bitsize_zero_node;
5557 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5558 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
5560 if (wchar_bytes == 1)
5562 val[1] = (unsigned char) *p++;
5563 val[0] = 0;
5565 else
5567 val[0] = 0;
5568 val[1] = 0;
5569 for (byte = 0; byte < wchar_bytes; byte++)
5571 if (BYTES_BIG_ENDIAN)
5572 bitpos = (wchar_bytes - byte - 1) * charwidth;
5573 else
5574 bitpos = byte * charwidth;
5575 val[bitpos < HOST_BITS_PER_WIDE_INT]
5576 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5577 << (bitpos % HOST_BITS_PER_WIDE_INT);
5581 if (!TYPE_UNSIGNED (type))
5583 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5584 if (bitpos < HOST_BITS_PER_WIDE_INT)
5586 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5588 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5589 val[0] = -1;
5592 else if (bitpos == HOST_BITS_PER_WIDE_INT)
5594 if (val[1] < 0)
5595 val[0] = -1;
5597 else if (val[0] & (((HOST_WIDE_INT) 1)
5598 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5599 val[0] |= ((HOST_WIDE_INT) -1)
5600 << (bitpos - HOST_BITS_PER_WIDE_INT);
5603 value = build_int_cst_wide (type, val[1], val[0]);
5604 add_pending_init (purpose, value);
5607 constructor_incremental = 0;
5610 /* Return value of FIELD in pending initializer or zero if the field was
5611 not initialized yet. */
5613 static tree
5614 find_init_member (tree field)
5616 struct init_node *p;
5618 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5620 if (constructor_incremental
5621 && tree_int_cst_lt (field, constructor_unfilled_index))
5622 set_nonincremental_init ();
5624 p = constructor_pending_elts;
5625 while (p)
5627 if (tree_int_cst_lt (field, p->purpose))
5628 p = p->left;
5629 else if (tree_int_cst_lt (p->purpose, field))
5630 p = p->right;
5631 else
5632 return p->value;
5635 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5637 tree bitpos = bit_position (field);
5639 if (constructor_incremental
5640 && (!constructor_unfilled_fields
5641 || tree_int_cst_lt (bitpos,
5642 bit_position (constructor_unfilled_fields))))
5643 set_nonincremental_init ();
5645 p = constructor_pending_elts;
5646 while (p)
5648 if (field == p->purpose)
5649 return p->value;
5650 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5651 p = p->left;
5652 else
5653 p = p->right;
5656 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5658 if (constructor_elements
5659 && TREE_PURPOSE (constructor_elements) == field)
5660 return TREE_VALUE (constructor_elements);
5662 return 0;
5665 /* "Output" the next constructor element.
5666 At top level, really output it to assembler code now.
5667 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5668 TYPE is the data type that the containing data type wants here.
5669 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5670 If VALUE is a string constant, STRICT_STRING is true if it is
5671 unparenthesized or we should not warn here for it being parenthesized.
5672 For other types of VALUE, STRICT_STRING is not used.
5674 PENDING if non-nil means output pending elements that belong
5675 right after this element. (PENDING is normally 1;
5676 it is 0 while outputting pending elements, to avoid recursion.) */
5678 static void
5679 output_init_element (tree value, bool strict_string, tree type, tree field,
5680 int pending)
5682 if (type == error_mark_node)
5684 constructor_erroneous = 1;
5685 return;
5687 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5688 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5689 && !(TREE_CODE (value) == STRING_CST
5690 && TREE_CODE (type) == ARRAY_TYPE
5691 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
5692 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5693 TYPE_MAIN_VARIANT (type))))
5694 value = default_conversion (value);
5696 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5697 && require_constant_value && !flag_isoc99 && pending)
5699 /* As an extension, allow initializing objects with static storage
5700 duration with compound literals (which are then treated just as
5701 the brace enclosed list they contain). */
5702 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5703 value = DECL_INITIAL (decl);
5706 if (value == error_mark_node)
5707 constructor_erroneous = 1;
5708 else if (!TREE_CONSTANT (value))
5709 constructor_constant = 0;
5710 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
5711 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5712 || TREE_CODE (constructor_type) == UNION_TYPE)
5713 && DECL_C_BIT_FIELD (field)
5714 && TREE_CODE (value) != INTEGER_CST))
5715 constructor_simple = 0;
5717 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
5719 if (require_constant_value)
5721 error_init ("initializer element is not constant");
5722 value = error_mark_node;
5724 else if (require_constant_elements)
5725 pedwarn ("initializer element is not computable at load time");
5728 /* If this field is empty (and not at the end of structure),
5729 don't do anything other than checking the initializer. */
5730 if (field
5731 && (TREE_TYPE (field) == error_mark_node
5732 || (COMPLETE_TYPE_P (TREE_TYPE (field))
5733 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5734 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5735 || TREE_CHAIN (field)))))
5736 return;
5738 value = digest_init (type, value, strict_string, require_constant_value);
5739 if (value == error_mark_node)
5741 constructor_erroneous = 1;
5742 return;
5745 /* If this element doesn't come next in sequence,
5746 put it on constructor_pending_elts. */
5747 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5748 && (!constructor_incremental
5749 || !tree_int_cst_equal (field, constructor_unfilled_index)))
5751 if (constructor_incremental
5752 && tree_int_cst_lt (field, constructor_unfilled_index))
5753 set_nonincremental_init ();
5755 add_pending_init (field, value);
5756 return;
5758 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5759 && (!constructor_incremental
5760 || field != constructor_unfilled_fields))
5762 /* We do this for records but not for unions. In a union,
5763 no matter which field is specified, it can be initialized
5764 right away since it starts at the beginning of the union. */
5765 if (constructor_incremental)
5767 if (!constructor_unfilled_fields)
5768 set_nonincremental_init ();
5769 else
5771 tree bitpos, unfillpos;
5773 bitpos = bit_position (field);
5774 unfillpos = bit_position (constructor_unfilled_fields);
5776 if (tree_int_cst_lt (bitpos, unfillpos))
5777 set_nonincremental_init ();
5781 add_pending_init (field, value);
5782 return;
5784 else if (TREE_CODE (constructor_type) == UNION_TYPE
5785 && constructor_elements)
5787 if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements)))
5788 warning_init ("initialized field with side-effects overwritten");
5790 /* We can have just one union field set. */
5791 constructor_elements = 0;
5794 /* Otherwise, output this element either to
5795 constructor_elements or to the assembler file. */
5797 if (field && TREE_CODE (field) == INTEGER_CST)
5798 field = copy_node (field);
5799 constructor_elements
5800 = tree_cons (field, value, constructor_elements);
5802 /* Advance the variable that indicates sequential elements output. */
5803 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5804 constructor_unfilled_index
5805 = size_binop (PLUS_EXPR, constructor_unfilled_index,
5806 bitsize_one_node);
5807 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5809 constructor_unfilled_fields
5810 = TREE_CHAIN (constructor_unfilled_fields);
5812 /* Skip any nameless bit fields. */
5813 while (constructor_unfilled_fields != 0
5814 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5815 && DECL_NAME (constructor_unfilled_fields) == 0)
5816 constructor_unfilled_fields =
5817 TREE_CHAIN (constructor_unfilled_fields);
5819 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5820 constructor_unfilled_fields = 0;
5822 /* Now output any pending elements which have become next. */
5823 if (pending)
5824 output_pending_init_elements (0);
5827 /* Output any pending elements which have become next.
5828 As we output elements, constructor_unfilled_{fields,index}
5829 advances, which may cause other elements to become next;
5830 if so, they too are output.
5832 If ALL is 0, we return when there are
5833 no more pending elements to output now.
5835 If ALL is 1, we output space as necessary so that
5836 we can output all the pending elements. */
5838 static void
5839 output_pending_init_elements (int all)
5841 struct init_node *elt = constructor_pending_elts;
5842 tree next;
5844 retry:
5846 /* Look through the whole pending tree.
5847 If we find an element that should be output now,
5848 output it. Otherwise, set NEXT to the element
5849 that comes first among those still pending. */
5851 next = 0;
5852 while (elt)
5854 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5856 if (tree_int_cst_equal (elt->purpose,
5857 constructor_unfilled_index))
5858 output_init_element (elt->value, true,
5859 TREE_TYPE (constructor_type),
5860 constructor_unfilled_index, 0);
5861 else if (tree_int_cst_lt (constructor_unfilled_index,
5862 elt->purpose))
5864 /* Advance to the next smaller node. */
5865 if (elt->left)
5866 elt = elt->left;
5867 else
5869 /* We have reached the smallest node bigger than the
5870 current unfilled index. Fill the space first. */
5871 next = elt->purpose;
5872 break;
5875 else
5877 /* Advance to the next bigger node. */
5878 if (elt->right)
5879 elt = elt->right;
5880 else
5882 /* We have reached the biggest node in a subtree. Find
5883 the parent of it, which is the next bigger node. */
5884 while (elt->parent && elt->parent->right == elt)
5885 elt = elt->parent;
5886 elt = elt->parent;
5887 if (elt && tree_int_cst_lt (constructor_unfilled_index,
5888 elt->purpose))
5890 next = elt->purpose;
5891 break;
5896 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5897 || TREE_CODE (constructor_type) == UNION_TYPE)
5899 tree ctor_unfilled_bitpos, elt_bitpos;
5901 /* If the current record is complete we are done. */
5902 if (constructor_unfilled_fields == 0)
5903 break;
5905 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
5906 elt_bitpos = bit_position (elt->purpose);
5907 /* We can't compare fields here because there might be empty
5908 fields in between. */
5909 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
5911 constructor_unfilled_fields = elt->purpose;
5912 output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
5913 elt->purpose, 0);
5915 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
5917 /* Advance to the next smaller node. */
5918 if (elt->left)
5919 elt = elt->left;
5920 else
5922 /* We have reached the smallest node bigger than the
5923 current unfilled field. Fill the space first. */
5924 next = elt->purpose;
5925 break;
5928 else
5930 /* Advance to the next bigger node. */
5931 if (elt->right)
5932 elt = elt->right;
5933 else
5935 /* We have reached the biggest node in a subtree. Find
5936 the parent of it, which is the next bigger node. */
5937 while (elt->parent && elt->parent->right == elt)
5938 elt = elt->parent;
5939 elt = elt->parent;
5940 if (elt
5941 && (tree_int_cst_lt (ctor_unfilled_bitpos,
5942 bit_position (elt->purpose))))
5944 next = elt->purpose;
5945 break;
5952 /* Ordinarily return, but not if we want to output all
5953 and there are elements left. */
5954 if (!(all && next != 0))
5955 return;
5957 /* If it's not incremental, just skip over the gap, so that after
5958 jumping to retry we will output the next successive element. */
5959 if (TREE_CODE (constructor_type) == RECORD_TYPE
5960 || TREE_CODE (constructor_type) == UNION_TYPE)
5961 constructor_unfilled_fields = next;
5962 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5963 constructor_unfilled_index = next;
5965 /* ELT now points to the node in the pending tree with the next
5966 initializer to output. */
5967 goto retry;
5970 /* Add one non-braced element to the current constructor level.
5971 This adjusts the current position within the constructor's type.
5972 This may also start or terminate implicit levels
5973 to handle a partly-braced initializer.
5975 Once this has found the correct level for the new element,
5976 it calls output_init_element. */
5978 void
5979 process_init_element (struct c_expr value)
5981 tree orig_value = value.value;
5982 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
5983 bool strict_string = value.original_code == STRING_CST;
5985 designator_depth = 0;
5986 designator_errorneous = 0;
5988 /* Handle superfluous braces around string cst as in
5989 char x[] = {"foo"}; */
5990 if (string_flag
5991 && constructor_type
5992 && TREE_CODE (constructor_type) == ARRAY_TYPE
5993 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
5994 && integer_zerop (constructor_unfilled_index))
5996 if (constructor_stack->replacement_value.value)
5997 error_init ("excess elements in char array initializer");
5998 constructor_stack->replacement_value = value;
5999 return;
6002 if (constructor_stack->replacement_value.value != 0)
6004 error_init ("excess elements in struct initializer");
6005 return;
6008 /* Ignore elements of a brace group if it is entirely superfluous
6009 and has already been diagnosed. */
6010 if (constructor_type == 0)
6011 return;
6013 /* If we've exhausted any levels that didn't have braces,
6014 pop them now. */
6015 while (constructor_stack->implicit)
6017 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6018 || TREE_CODE (constructor_type) == UNION_TYPE)
6019 && constructor_fields == 0)
6020 process_init_element (pop_init_level (1));
6021 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6022 && (constructor_max_index == 0
6023 || tree_int_cst_lt (constructor_max_index,
6024 constructor_index)))
6025 process_init_element (pop_init_level (1));
6026 else
6027 break;
6030 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6031 if (constructor_range_stack)
6033 /* If value is a compound literal and we'll be just using its
6034 content, don't put it into a SAVE_EXPR. */
6035 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
6036 || !require_constant_value
6037 || flag_isoc99)
6038 value.value = save_expr (value.value);
6041 while (1)
6043 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6045 tree fieldtype;
6046 enum tree_code fieldcode;
6048 if (constructor_fields == 0)
6050 pedwarn_init ("excess elements in struct initializer");
6051 break;
6054 fieldtype = TREE_TYPE (constructor_fields);
6055 if (fieldtype != error_mark_node)
6056 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6057 fieldcode = TREE_CODE (fieldtype);
6059 /* Error for non-static initialization of a flexible array member. */
6060 if (fieldcode == ARRAY_TYPE
6061 && !require_constant_value
6062 && TYPE_SIZE (fieldtype) == NULL_TREE
6063 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6065 error_init ("non-static initialization of a flexible array member");
6066 break;
6069 /* Accept a string constant to initialize a subarray. */
6070 if (value.value != 0
6071 && fieldcode == ARRAY_TYPE
6072 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6073 && string_flag)
6074 value.value = orig_value;
6075 /* Otherwise, if we have come to a subaggregate,
6076 and we don't have an element of its type, push into it. */
6077 else if (value.value != 0 && !constructor_no_implicit
6078 && value.value != error_mark_node
6079 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6080 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6081 || fieldcode == UNION_TYPE))
6083 push_init_level (1);
6084 continue;
6087 if (value.value)
6089 push_member_name (constructor_fields);
6090 output_init_element (value.value, strict_string,
6091 fieldtype, constructor_fields, 1);
6092 RESTORE_SPELLING_DEPTH (constructor_depth);
6094 else
6095 /* Do the bookkeeping for an element that was
6096 directly output as a constructor. */
6098 /* For a record, keep track of end position of last field. */
6099 if (DECL_SIZE (constructor_fields))
6100 constructor_bit_index
6101 = size_binop (PLUS_EXPR,
6102 bit_position (constructor_fields),
6103 DECL_SIZE (constructor_fields));
6105 /* If the current field was the first one not yet written out,
6106 it isn't now, so update. */
6107 if (constructor_unfilled_fields == constructor_fields)
6109 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6110 /* Skip any nameless bit fields. */
6111 while (constructor_unfilled_fields != 0
6112 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6113 && DECL_NAME (constructor_unfilled_fields) == 0)
6114 constructor_unfilled_fields =
6115 TREE_CHAIN (constructor_unfilled_fields);
6119 constructor_fields = TREE_CHAIN (constructor_fields);
6120 /* Skip any nameless bit fields at the beginning. */
6121 while (constructor_fields != 0
6122 && DECL_C_BIT_FIELD (constructor_fields)
6123 && DECL_NAME (constructor_fields) == 0)
6124 constructor_fields = TREE_CHAIN (constructor_fields);
6126 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6128 tree fieldtype;
6129 enum tree_code fieldcode;
6131 if (constructor_fields == 0)
6133 pedwarn_init ("excess elements in union initializer");
6134 break;
6137 fieldtype = TREE_TYPE (constructor_fields);
6138 if (fieldtype != error_mark_node)
6139 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6140 fieldcode = TREE_CODE (fieldtype);
6142 /* Warn that traditional C rejects initialization of unions.
6143 We skip the warning if the value is zero. This is done
6144 under the assumption that the zero initializer in user
6145 code appears conditioned on e.g. __STDC__ to avoid
6146 "missing initializer" warnings and relies on default
6147 initialization to zero in the traditional C case.
6148 We also skip the warning if the initializer is designated,
6149 again on the assumption that this must be conditional on
6150 __STDC__ anyway (and we've already complained about the
6151 member-designator already). */
6152 if (warn_traditional && !in_system_header && !constructor_designated
6153 && !(value.value && (integer_zerop (value.value)
6154 || real_zerop (value.value))))
6155 warning ("traditional C rejects initialization of unions");
6157 /* Accept a string constant to initialize a subarray. */
6158 if (value.value != 0
6159 && fieldcode == ARRAY_TYPE
6160 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6161 && string_flag)
6162 value.value = orig_value;
6163 /* Otherwise, if we have come to a subaggregate,
6164 and we don't have an element of its type, push into it. */
6165 else if (value.value != 0 && !constructor_no_implicit
6166 && value.value != error_mark_node
6167 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6168 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6169 || fieldcode == UNION_TYPE))
6171 push_init_level (1);
6172 continue;
6175 if (value.value)
6177 push_member_name (constructor_fields);
6178 output_init_element (value.value, strict_string,
6179 fieldtype, constructor_fields, 1);
6180 RESTORE_SPELLING_DEPTH (constructor_depth);
6182 else
6183 /* Do the bookkeeping for an element that was
6184 directly output as a constructor. */
6186 constructor_bit_index = DECL_SIZE (constructor_fields);
6187 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6190 constructor_fields = 0;
6192 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6194 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6195 enum tree_code eltcode = TREE_CODE (elttype);
6197 /* Accept a string constant to initialize a subarray. */
6198 if (value.value != 0
6199 && eltcode == ARRAY_TYPE
6200 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6201 && string_flag)
6202 value.value = orig_value;
6203 /* Otherwise, if we have come to a subaggregate,
6204 and we don't have an element of its type, push into it. */
6205 else if (value.value != 0 && !constructor_no_implicit
6206 && value.value != error_mark_node
6207 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6208 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6209 || eltcode == UNION_TYPE))
6211 push_init_level (1);
6212 continue;
6215 if (constructor_max_index != 0
6216 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6217 || integer_all_onesp (constructor_max_index)))
6219 pedwarn_init ("excess elements in array initializer");
6220 break;
6223 /* Now output the actual element. */
6224 if (value.value)
6226 push_array_bounds (tree_low_cst (constructor_index, 0));
6227 output_init_element (value.value, strict_string,
6228 elttype, constructor_index, 1);
6229 RESTORE_SPELLING_DEPTH (constructor_depth);
6232 constructor_index
6233 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6235 if (!value.value)
6236 /* If we are doing the bookkeeping for an element that was
6237 directly output as a constructor, we must update
6238 constructor_unfilled_index. */
6239 constructor_unfilled_index = constructor_index;
6241 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6243 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6245 /* Do a basic check of initializer size. Note that vectors
6246 always have a fixed size derived from their type. */
6247 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6249 pedwarn_init ("excess elements in vector initializer");
6250 break;
6253 /* Now output the actual element. */
6254 if (value.value)
6255 output_init_element (value.value, strict_string,
6256 elttype, constructor_index, 1);
6258 constructor_index
6259 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6261 if (!value.value)
6262 /* If we are doing the bookkeeping for an element that was
6263 directly output as a constructor, we must update
6264 constructor_unfilled_index. */
6265 constructor_unfilled_index = constructor_index;
6268 /* Handle the sole element allowed in a braced initializer
6269 for a scalar variable. */
6270 else if (constructor_fields == 0)
6272 pedwarn_init ("excess elements in scalar initializer");
6273 break;
6275 else
6277 if (value.value)
6278 output_init_element (value.value, strict_string,
6279 constructor_type, NULL_TREE, 1);
6280 constructor_fields = 0;
6283 /* Handle range initializers either at this level or anywhere higher
6284 in the designator stack. */
6285 if (constructor_range_stack)
6287 struct constructor_range_stack *p, *range_stack;
6288 int finish = 0;
6290 range_stack = constructor_range_stack;
6291 constructor_range_stack = 0;
6292 while (constructor_stack != range_stack->stack)
6294 gcc_assert (constructor_stack->implicit);
6295 process_init_element (pop_init_level (1));
6297 for (p = range_stack;
6298 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6299 p = p->prev)
6301 gcc_assert (constructor_stack->implicit);
6302 process_init_element (pop_init_level (1));
6305 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6306 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6307 finish = 1;
6309 while (1)
6311 constructor_index = p->index;
6312 constructor_fields = p->fields;
6313 if (finish && p->range_end && p->index == p->range_start)
6315 finish = 0;
6316 p->prev = 0;
6318 p = p->next;
6319 if (!p)
6320 break;
6321 push_init_level (2);
6322 p->stack = constructor_stack;
6323 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6324 p->index = p->range_start;
6327 if (!finish)
6328 constructor_range_stack = range_stack;
6329 continue;
6332 break;
6335 constructor_range_stack = 0;
6338 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6339 (guaranteed to be 'volatile' or null) and ARGS (represented using
6340 an ASM_EXPR node). */
6341 tree
6342 build_asm_stmt (tree cv_qualifier, tree args)
6344 if (!ASM_VOLATILE_P (args) && cv_qualifier)
6345 ASM_VOLATILE_P (args) = 1;
6346 return add_stmt (args);
6349 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6350 some INPUTS, and some CLOBBERS. The latter three may be NULL.
6351 SIMPLE indicates whether there was anything at all after the
6352 string in the asm expression -- asm("blah") and asm("blah" : )
6353 are subtly different. We use a ASM_EXPR node to represent this. */
6354 tree
6355 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6356 bool simple)
6358 tree tail;
6359 tree args;
6360 int i;
6361 const char *constraint;
6362 bool allows_mem, allows_reg, is_inout;
6363 int ninputs;
6364 int noutputs;
6366 ninputs = list_length (inputs);
6367 noutputs = list_length (outputs);
6369 /* Remove output conversions that change the type but not the mode. */
6370 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6372 tree output = TREE_VALUE (tail);
6373 STRIP_NOPS (output);
6374 TREE_VALUE (tail) = output;
6375 lvalue_or_else (output, lv_asm);
6377 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6379 if (!parse_output_constraint (&constraint, i, ninputs, noutputs,
6380 &allows_mem, &allows_reg, &is_inout))
6382 /* By marking this operand as erroneous, we will not try
6383 to process this operand again in expand_asm_operands. */
6384 TREE_VALUE (tail) = error_mark_node;
6385 continue;
6388 /* If the operand is a DECL that is going to end up in
6389 memory, assume it is addressable. This is a bit more
6390 conservative than it would ideally be; the exact test is
6391 buried deep in expand_asm_operands and depends on the
6392 DECL_RTL for the OPERAND -- which we don't have at this
6393 point. */
6394 if (!allows_reg && DECL_P (output))
6395 c_mark_addressable (output);
6398 /* Perform default conversions on array and function inputs.
6399 Don't do this for other types as it would screw up operands
6400 expected to be in memory. */
6401 for (tail = inputs; tail; tail = TREE_CHAIN (tail))
6402 TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail));
6404 args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6406 /* Simple asm statements are treated as volatile. */
6407 if (simple)
6409 ASM_VOLATILE_P (args) = 1;
6410 ASM_INPUT_P (args) = 1;
6412 return args;
6415 /* Generate a goto statement to LABEL. */
6417 tree
6418 c_finish_goto_label (tree label)
6420 tree decl = lookup_label (label);
6421 if (!decl)
6422 return NULL_TREE;
6424 TREE_USED (decl) = 1;
6425 return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
6428 /* Generate a computed goto statement to EXPR. */
6430 tree
6431 c_finish_goto_ptr (tree expr)
6433 if (pedantic)
6434 pedwarn ("ISO C forbids %<goto *expr;%>");
6435 expr = convert (ptr_type_node, expr);
6436 return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
6439 /* Generate a C `return' statement. RETVAL is the expression for what
6440 to return, or a null pointer for `return;' with no value. */
6442 tree
6443 c_finish_return (tree retval)
6445 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6447 if (TREE_THIS_VOLATILE (current_function_decl))
6448 warning ("function declared %<noreturn%> has a %<return%> statement");
6450 if (!retval)
6452 current_function_returns_null = 1;
6453 if ((warn_return_type || flag_isoc99)
6454 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6455 pedwarn_c99 ("%<return%> with no value, in "
6456 "function returning non-void");
6458 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6460 current_function_returns_null = 1;
6461 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6462 pedwarn ("%<return%> with a value, in function returning void");
6464 else
6466 tree t = convert_for_assignment (valtype, retval, ic_return,
6467 NULL_TREE, NULL_TREE, 0);
6468 tree res = DECL_RESULT (current_function_decl);
6469 tree inner;
6471 current_function_returns_value = 1;
6472 if (t == error_mark_node)
6473 return NULL_TREE;
6475 inner = t = convert (TREE_TYPE (res), t);
6477 /* Strip any conversions, additions, and subtractions, and see if
6478 we are returning the address of a local variable. Warn if so. */
6479 while (1)
6481 switch (TREE_CODE (inner))
6483 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6484 case PLUS_EXPR:
6485 inner = TREE_OPERAND (inner, 0);
6486 continue;
6488 case MINUS_EXPR:
6489 /* If the second operand of the MINUS_EXPR has a pointer
6490 type (or is converted from it), this may be valid, so
6491 don't give a warning. */
6493 tree op1 = TREE_OPERAND (inner, 1);
6495 while (!POINTER_TYPE_P (TREE_TYPE (op1))
6496 && (TREE_CODE (op1) == NOP_EXPR
6497 || TREE_CODE (op1) == NON_LVALUE_EXPR
6498 || TREE_CODE (op1) == CONVERT_EXPR))
6499 op1 = TREE_OPERAND (op1, 0);
6501 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6502 break;
6504 inner = TREE_OPERAND (inner, 0);
6505 continue;
6508 case ADDR_EXPR:
6509 inner = TREE_OPERAND (inner, 0);
6511 while (REFERENCE_CLASS_P (inner)
6512 && TREE_CODE (inner) != INDIRECT_REF)
6513 inner = TREE_OPERAND (inner, 0);
6515 if (DECL_P (inner)
6516 && !DECL_EXTERNAL (inner)
6517 && !TREE_STATIC (inner)
6518 && DECL_CONTEXT (inner) == current_function_decl)
6519 warning ("function returns address of local variable");
6520 break;
6522 default:
6523 break;
6526 break;
6529 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
6532 return add_stmt (build_stmt (RETURN_EXPR, retval));
6535 struct c_switch {
6536 /* The SWITCH_STMT being built. */
6537 tree switch_stmt;
6539 /* The original type of the testing expression, i.e. before the
6540 default conversion is applied. */
6541 tree orig_type;
6543 /* A splay-tree mapping the low element of a case range to the high
6544 element, or NULL_TREE if there is no high element. Used to
6545 determine whether or not a new case label duplicates an old case
6546 label. We need a tree, rather than simply a hash table, because
6547 of the GNU case range extension. */
6548 splay_tree cases;
6550 /* The next node on the stack. */
6551 struct c_switch *next;
6554 /* A stack of the currently active switch statements. The innermost
6555 switch statement is on the top of the stack. There is no need to
6556 mark the stack for garbage collection because it is only active
6557 during the processing of the body of a function, and we never
6558 collect at that point. */
6560 struct c_switch *c_switch_stack;
6562 /* Start a C switch statement, testing expression EXP. Return the new
6563 SWITCH_STMT. */
6565 tree
6566 c_start_case (tree exp)
6568 enum tree_code code;
6569 tree type, orig_type = error_mark_node;
6570 struct c_switch *cs;
6572 if (exp != error_mark_node)
6574 code = TREE_CODE (TREE_TYPE (exp));
6575 orig_type = TREE_TYPE (exp);
6577 if (!INTEGRAL_TYPE_P (orig_type)
6578 && code != ERROR_MARK)
6580 error ("switch quantity not an integer");
6581 exp = integer_zero_node;
6583 else
6585 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6587 if (warn_traditional && !in_system_header
6588 && (type == long_integer_type_node
6589 || type == long_unsigned_type_node))
6590 warning ("%<long%> switch expression not converted to "
6591 "%<int%> in ISO C");
6593 exp = default_conversion (exp);
6594 type = TREE_TYPE (exp);
6598 /* Add this new SWITCH_STMT to the stack. */
6599 cs = XNEW (struct c_switch);
6600 cs->switch_stmt = build_stmt ((enum tree_code) SWITCH_STMT, exp, NULL_TREE,
6601 orig_type);
6602 cs->orig_type = orig_type;
6603 cs->cases = splay_tree_new (case_compare, NULL, NULL);
6604 cs->next = c_switch_stack;
6605 c_switch_stack = cs;
6607 return add_stmt (cs->switch_stmt);
6610 /* Process a case label. */
6612 tree
6613 do_case (tree low_value, tree high_value)
6615 tree label = NULL_TREE;
6617 if (c_switch_stack)
6619 label = c_add_case_label (c_switch_stack->cases,
6620 SWITCH_COND (c_switch_stack->switch_stmt),
6621 c_switch_stack->orig_type,
6622 low_value, high_value);
6623 if (label == error_mark_node)
6624 label = NULL_TREE;
6626 else if (low_value)
6627 error ("case label not within a switch statement");
6628 else
6629 error ("%<default%> label not within a switch statement");
6631 return label;
6634 /* Finish the switch statement. */
6636 void
6637 c_finish_case (tree body)
6639 struct c_switch *cs = c_switch_stack;
6641 SWITCH_BODY (cs->switch_stmt) = body;
6643 /* Emit warnings as needed. */
6644 c_do_switch_warnings (cs->cases, cs->switch_stmt);
6646 /* Pop the stack. */
6647 c_switch_stack = cs->next;
6648 splay_tree_delete (cs->cases);
6649 XDELETE (cs);
6652 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
6653 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
6654 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
6655 statement, and was not surrounded with parenthesis. */
6657 void
6658 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
6659 tree else_block, bool nested_if)
6661 tree stmt;
6663 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
6664 if (warn_parentheses && nested_if && else_block == NULL)
6666 tree inner_if = then_block;
6668 /* We know from the grammar productions that there is an IF nested
6669 within THEN_BLOCK. Due to labels and c99 conditional declarations,
6670 it might not be exactly THEN_BLOCK, but should be the last
6671 non-container statement within. */
6672 while (1)
6673 switch (TREE_CODE (inner_if))
6675 case COND_EXPR:
6676 goto found;
6677 case BIND_EXPR:
6678 inner_if = BIND_EXPR_BODY (inner_if);
6679 break;
6680 case STATEMENT_LIST:
6681 inner_if = expr_last (then_block);
6682 break;
6683 case TRY_FINALLY_EXPR:
6684 case TRY_CATCH_EXPR:
6685 inner_if = TREE_OPERAND (inner_if, 0);
6686 break;
6687 default:
6688 gcc_unreachable ();
6690 found:
6692 if (COND_EXPR_ELSE (inner_if))
6693 warning ("%Hsuggest explicit braces to avoid ambiguous %<else%>",
6694 &if_locus);
6697 /* Diagnose ";" via the special empty statement node that we create. */
6698 if (extra_warnings)
6700 if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
6702 if (!else_block)
6703 warning ("%Hempty body in an if-statement",
6704 EXPR_LOCUS (then_block));
6705 then_block = alloc_stmt_list ();
6707 if (else_block
6708 && TREE_CODE (else_block) == NOP_EXPR
6709 && !TREE_TYPE (else_block))
6711 warning ("%Hempty body in an else-statement",
6712 EXPR_LOCUS (else_block));
6713 else_block = alloc_stmt_list ();
6717 stmt = build3 (COND_EXPR, NULL_TREE, cond, then_block, else_block);
6718 SET_EXPR_LOCATION (stmt, if_locus);
6719 add_stmt (stmt);
6722 /* Emit a general-purpose loop construct. START_LOCUS is the location of
6723 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
6724 is false for DO loops. INCR is the FOR increment expression. BODY is
6725 the statement controlled by the loop. BLAB is the break label. CLAB is
6726 the continue label. Everything is allowed to be NULL. */
6728 void
6729 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
6730 tree blab, tree clab, bool cond_is_first)
6732 tree entry = NULL, exit = NULL, t;
6734 /* Detect do { ... } while (0) and don't generate loop construct. */
6735 if (cond && !cond_is_first && integer_zerop (cond))
6736 cond = NULL;
6737 if (cond_is_first || cond)
6739 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6741 /* If we have an exit condition, then we build an IF with gotos either
6742 out of the loop, or to the top of it. If there's no exit condition,
6743 then we just build a jump back to the top. */
6744 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
6746 if (cond)
6748 /* Canonicalize the loop condition to the end. This means
6749 generating a branch to the loop condition. Reuse the
6750 continue label, if possible. */
6751 if (cond_is_first)
6753 if (incr || !clab)
6755 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6756 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
6758 else
6759 t = build1 (GOTO_EXPR, void_type_node, clab);
6760 SET_EXPR_LOCATION (t, start_locus);
6761 add_stmt (t);
6764 t = build_and_jump (&blab);
6765 exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
6766 exit = fold (exit);
6767 if (cond_is_first)
6768 SET_EXPR_LOCATION (exit, start_locus);
6769 else
6770 SET_EXPR_LOCATION (exit, input_location);
6773 add_stmt (top);
6776 if (body)
6777 add_stmt (body);
6778 if (clab)
6779 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
6780 if (incr)
6781 add_stmt (incr);
6782 if (entry)
6783 add_stmt (entry);
6784 if (exit)
6785 add_stmt (exit);
6786 if (blab)
6787 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
6790 tree
6791 c_finish_bc_stmt (tree *label_p, bool is_break)
6793 tree label = *label_p;
6795 if (!label)
6796 *label_p = label = create_artificial_label ();
6797 else if (TREE_CODE (label) != LABEL_DECL)
6799 if (is_break)
6800 error ("break statement not within loop or switch");
6801 else
6802 error ("continue statement not within a loop");
6803 return NULL_TREE;
6806 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
6809 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
6811 static void
6812 emit_side_effect_warnings (tree expr)
6814 if (expr == error_mark_node)
6816 else if (!TREE_SIDE_EFFECTS (expr))
6818 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
6819 warning ("%Hstatement with no effect",
6820 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
6822 else if (warn_unused_value)
6823 warn_if_unused_value (expr, input_location);
6826 /* Process an expression as if it were a complete statement. Emit
6827 diagnostics, but do not call ADD_STMT. */
6829 tree
6830 c_process_expr_stmt (tree expr)
6832 if (!expr)
6833 return NULL_TREE;
6835 /* Do default conversion if safe and possibly important,
6836 in case within ({...}). */
6837 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
6838 && (flag_isoc99 || lvalue_p (expr)))
6839 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
6840 expr = default_conversion (expr);
6842 if (warn_sequence_point)
6843 verify_sequence_points (expr);
6845 if (TREE_TYPE (expr) != error_mark_node
6846 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
6847 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
6848 error ("expression statement has incomplete type");
6850 /* If we're not processing a statement expression, warn about unused values.
6851 Warnings for statement expressions will be emitted later, once we figure
6852 out which is the result. */
6853 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
6854 && (extra_warnings || warn_unused_value))
6855 emit_side_effect_warnings (expr);
6857 /* If the expression is not of a type to which we cannot assign a line
6858 number, wrap the thing in a no-op NOP_EXPR. */
6859 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
6860 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
6862 if (EXPR_P (expr))
6863 SET_EXPR_LOCATION (expr, input_location);
6865 return expr;
6868 /* Emit an expression as a statement. */
6870 tree
6871 c_finish_expr_stmt (tree expr)
6873 if (expr)
6874 return add_stmt (c_process_expr_stmt (expr));
6875 else
6876 return NULL;
6879 /* Do the opposite and emit a statement as an expression. To begin,
6880 create a new binding level and return it. */
6882 tree
6883 c_begin_stmt_expr (void)
6885 tree ret;
6887 /* We must force a BLOCK for this level so that, if it is not expanded
6888 later, there is a way to turn off the entire subtree of blocks that
6889 are contained in it. */
6890 keep_next_level ();
6891 ret = c_begin_compound_stmt (true);
6893 /* Mark the current statement list as belonging to a statement list. */
6894 STATEMENT_LIST_STMT_EXPR (ret) = 1;
6896 return ret;
6899 tree
6900 c_finish_stmt_expr (tree body)
6902 tree last, type, tmp, val;
6903 tree *last_p;
6905 body = c_end_compound_stmt (body, true);
6907 /* Locate the last statement in BODY. See c_end_compound_stmt
6908 about always returning a BIND_EXPR. */
6909 last_p = &BIND_EXPR_BODY (body);
6910 last = BIND_EXPR_BODY (body);
6912 continue_searching:
6913 if (TREE_CODE (last) == STATEMENT_LIST)
6915 tree_stmt_iterator i;
6917 /* This can happen with degenerate cases like ({ }). No value. */
6918 if (!TREE_SIDE_EFFECTS (last))
6919 return body;
6921 /* If we're supposed to generate side effects warnings, process
6922 all of the statements except the last. */
6923 if (extra_warnings || warn_unused_value)
6925 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
6926 emit_side_effect_warnings (tsi_stmt (i));
6928 else
6929 i = tsi_last (last);
6930 last_p = tsi_stmt_ptr (i);
6931 last = *last_p;
6934 /* If the end of the list is exception related, then the list was split
6935 by a call to push_cleanup. Continue searching. */
6936 if (TREE_CODE (last) == TRY_FINALLY_EXPR
6937 || TREE_CODE (last) == TRY_CATCH_EXPR)
6939 last_p = &TREE_OPERAND (last, 0);
6940 last = *last_p;
6941 goto continue_searching;
6944 /* In the case that the BIND_EXPR is not necessary, return the
6945 expression out from inside it. */
6946 if (last == error_mark_node
6947 || (last == BIND_EXPR_BODY (body)
6948 && BIND_EXPR_VARS (body) == NULL))
6949 return last;
6951 /* Extract the type of said expression. */
6952 type = TREE_TYPE (last);
6954 /* If we're not returning a value at all, then the BIND_EXPR that
6955 we already have is a fine expression to return. */
6956 if (!type || VOID_TYPE_P (type))
6957 return body;
6959 /* Now that we've located the expression containing the value, it seems
6960 silly to make voidify_wrapper_expr repeat the process. Create a
6961 temporary of the appropriate type and stick it in a TARGET_EXPR. */
6962 tmp = create_tmp_var_raw (type, NULL);
6964 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
6965 tree_expr_nonnegative_p giving up immediately. */
6966 val = last;
6967 if (TREE_CODE (val) == NOP_EXPR
6968 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
6969 val = TREE_OPERAND (val, 0);
6971 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
6972 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
6974 return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
6977 /* Begin and end compound statements. This is as simple as pushing
6978 and popping new statement lists from the tree. */
6980 tree
6981 c_begin_compound_stmt (bool do_scope)
6983 tree stmt = push_stmt_list ();
6984 if (do_scope)
6985 push_scope ();
6986 return stmt;
6989 tree
6990 c_end_compound_stmt (tree stmt, bool do_scope)
6992 tree block = NULL;
6994 if (do_scope)
6996 if (c_dialect_objc ())
6997 objc_clear_super_receiver ();
6998 block = pop_scope ();
7001 stmt = pop_stmt_list (stmt);
7002 stmt = c_build_bind_expr (block, stmt);
7004 /* If this compound statement is nested immediately inside a statement
7005 expression, then force a BIND_EXPR to be created. Otherwise we'll
7006 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
7007 STATEMENT_LISTs merge, and thus we can lose track of what statement
7008 was really last. */
7009 if (cur_stmt_list
7010 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7011 && TREE_CODE (stmt) != BIND_EXPR)
7013 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
7014 TREE_SIDE_EFFECTS (stmt) = 1;
7017 return stmt;
7020 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
7021 when the current scope is exited. EH_ONLY is true when this is not
7022 meant to apply to normal control flow transfer. */
7024 void
7025 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
7027 enum tree_code code;
7028 tree stmt, list;
7029 bool stmt_expr;
7031 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
7032 stmt = build_stmt (code, NULL, cleanup);
7033 add_stmt (stmt);
7034 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
7035 list = push_stmt_list ();
7036 TREE_OPERAND (stmt, 0) = list;
7037 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
7040 /* Build a binary-operation expression without default conversions.
7041 CODE is the kind of expression to build.
7042 This function differs from `build' in several ways:
7043 the data type of the result is computed and recorded in it,
7044 warnings are generated if arg data types are invalid,
7045 special handling for addition and subtraction of pointers is known,
7046 and some optimization is done (operations on narrow ints
7047 are done in the narrower type when that gives the same result).
7048 Constant folding is also done before the result is returned.
7050 Note that the operands will never have enumeral types, or function
7051 or array types, because either they will have the default conversions
7052 performed or they have both just been converted to some other type in which
7053 the arithmetic is to be done. */
7055 tree
7056 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
7057 int convert_p)
7059 tree type0, type1;
7060 enum tree_code code0, code1;
7061 tree op0, op1;
7063 /* Expression code to give to the expression when it is built.
7064 Normally this is CODE, which is what the caller asked for,
7065 but in some special cases we change it. */
7066 enum tree_code resultcode = code;
7068 /* Data type in which the computation is to be performed.
7069 In the simplest cases this is the common type of the arguments. */
7070 tree result_type = NULL;
7072 /* Nonzero means operands have already been type-converted
7073 in whatever way is necessary.
7074 Zero means they need to be converted to RESULT_TYPE. */
7075 int converted = 0;
7077 /* Nonzero means create the expression with this type, rather than
7078 RESULT_TYPE. */
7079 tree build_type = 0;
7081 /* Nonzero means after finally constructing the expression
7082 convert it to this type. */
7083 tree final_type = 0;
7085 /* Nonzero if this is an operation like MIN or MAX which can
7086 safely be computed in short if both args are promoted shorts.
7087 Also implies COMMON.
7088 -1 indicates a bitwise operation; this makes a difference
7089 in the exact conditions for when it is safe to do the operation
7090 in a narrower mode. */
7091 int shorten = 0;
7093 /* Nonzero if this is a comparison operation;
7094 if both args are promoted shorts, compare the original shorts.
7095 Also implies COMMON. */
7096 int short_compare = 0;
7098 /* Nonzero if this is a right-shift operation, which can be computed on the
7099 original short and then promoted if the operand is a promoted short. */
7100 int short_shift = 0;
7102 /* Nonzero means set RESULT_TYPE to the common type of the args. */
7103 int common = 0;
7105 if (convert_p)
7107 op0 = default_conversion (orig_op0);
7108 op1 = default_conversion (orig_op1);
7110 else
7112 op0 = orig_op0;
7113 op1 = orig_op1;
7116 type0 = TREE_TYPE (op0);
7117 type1 = TREE_TYPE (op1);
7119 /* The expression codes of the data types of the arguments tell us
7120 whether the arguments are integers, floating, pointers, etc. */
7121 code0 = TREE_CODE (type0);
7122 code1 = TREE_CODE (type1);
7124 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
7125 STRIP_TYPE_NOPS (op0);
7126 STRIP_TYPE_NOPS (op1);
7128 /* If an error was already reported for one of the arguments,
7129 avoid reporting another error. */
7131 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7132 return error_mark_node;
7134 switch (code)
7136 case PLUS_EXPR:
7137 /* Handle the pointer + int case. */
7138 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7139 return pointer_int_sum (PLUS_EXPR, op0, op1);
7140 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7141 return pointer_int_sum (PLUS_EXPR, op1, op0);
7142 else
7143 common = 1;
7144 break;
7146 case MINUS_EXPR:
7147 /* Subtraction of two similar pointers.
7148 We must subtract them as integers, then divide by object size. */
7149 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7150 && comp_target_types (type0, type1, 1))
7151 return pointer_diff (op0, op1);
7152 /* Handle pointer minus int. Just like pointer plus int. */
7153 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7154 return pointer_int_sum (MINUS_EXPR, op0, op1);
7155 else
7156 common = 1;
7157 break;
7159 case MULT_EXPR:
7160 common = 1;
7161 break;
7163 case TRUNC_DIV_EXPR:
7164 case CEIL_DIV_EXPR:
7165 case FLOOR_DIV_EXPR:
7166 case ROUND_DIV_EXPR:
7167 case EXACT_DIV_EXPR:
7168 /* Floating point division by zero is a legitimate way to obtain
7169 infinities and NaNs. */
7170 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7171 warning ("division by zero");
7173 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7174 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7175 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7176 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7178 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7179 code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
7180 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
7181 code1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
7183 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
7184 resultcode = RDIV_EXPR;
7185 else
7186 /* Although it would be tempting to shorten always here, that
7187 loses on some targets, since the modulo instruction is
7188 undefined if the quotient can't be represented in the
7189 computation mode. We shorten only if unsigned or if
7190 dividing by something we know != -1. */
7191 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7192 || (TREE_CODE (op1) == INTEGER_CST
7193 && !integer_all_onesp (op1)));
7194 common = 1;
7196 break;
7198 case BIT_AND_EXPR:
7199 case BIT_IOR_EXPR:
7200 case BIT_XOR_EXPR:
7201 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7202 shorten = -1;
7203 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
7204 common = 1;
7205 break;
7207 case TRUNC_MOD_EXPR:
7208 case FLOOR_MOD_EXPR:
7209 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7210 warning ("division by zero");
7212 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7214 /* Although it would be tempting to shorten always here, that loses
7215 on some targets, since the modulo instruction is undefined if the
7216 quotient can't be represented in the computation mode. We shorten
7217 only if unsigned or if dividing by something we know != -1. */
7218 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7219 || (TREE_CODE (op1) == INTEGER_CST
7220 && !integer_all_onesp (op1)));
7221 common = 1;
7223 break;
7225 case TRUTH_ANDIF_EXPR:
7226 case TRUTH_ORIF_EXPR:
7227 case TRUTH_AND_EXPR:
7228 case TRUTH_OR_EXPR:
7229 case TRUTH_XOR_EXPR:
7230 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
7231 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
7232 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
7233 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
7235 /* Result of these operations is always an int,
7236 but that does not mean the operands should be
7237 converted to ints! */
7238 result_type = integer_type_node;
7239 op0 = lang_hooks.truthvalue_conversion (op0);
7240 op1 = lang_hooks.truthvalue_conversion (op1);
7241 converted = 1;
7243 break;
7245 /* Shift operations: result has same type as first operand;
7246 always convert second operand to int.
7247 Also set SHORT_SHIFT if shifting rightward. */
7249 case RSHIFT_EXPR:
7250 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7252 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7254 if (tree_int_cst_sgn (op1) < 0)
7255 warning ("right shift count is negative");
7256 else
7258 if (!integer_zerop (op1))
7259 short_shift = 1;
7261 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7262 warning ("right shift count >= width of type");
7266 /* Use the type of the value to be shifted. */
7267 result_type = type0;
7268 /* Convert the shift-count to an integer, regardless of size
7269 of value being shifted. */
7270 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7271 op1 = convert (integer_type_node, op1);
7272 /* Avoid converting op1 to result_type later. */
7273 converted = 1;
7275 break;
7277 case LSHIFT_EXPR:
7278 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7280 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7282 if (tree_int_cst_sgn (op1) < 0)
7283 warning ("left shift count is negative");
7285 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7286 warning ("left shift count >= width of type");
7289 /* Use the type of the value to be shifted. */
7290 result_type = type0;
7291 /* Convert the shift-count to an integer, regardless of size
7292 of value being shifted. */
7293 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7294 op1 = convert (integer_type_node, op1);
7295 /* Avoid converting op1 to result_type later. */
7296 converted = 1;
7298 break;
7300 case RROTATE_EXPR:
7301 case LROTATE_EXPR:
7302 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7304 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7306 if (tree_int_cst_sgn (op1) < 0)
7307 warning ("shift count is negative");
7308 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7309 warning ("shift count >= width of type");
7312 /* Use the type of the value to be shifted. */
7313 result_type = type0;
7314 /* Convert the shift-count to an integer, regardless of size
7315 of value being shifted. */
7316 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7317 op1 = convert (integer_type_node, op1);
7318 /* Avoid converting op1 to result_type later. */
7319 converted = 1;
7321 break;
7323 case EQ_EXPR:
7324 case NE_EXPR:
7325 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
7326 warning ("comparing floating point with == or != is unsafe");
7327 /* Result of comparison is always int,
7328 but don't convert the args to int! */
7329 build_type = integer_type_node;
7330 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7331 || code0 == COMPLEX_TYPE)
7332 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7333 || code1 == COMPLEX_TYPE))
7334 short_compare = 1;
7335 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7337 tree tt0 = TREE_TYPE (type0);
7338 tree tt1 = TREE_TYPE (type1);
7339 /* Anything compares with void *. void * compares with anything.
7340 Otherwise, the targets must be compatible
7341 and both must be object or both incomplete. */
7342 if (comp_target_types (type0, type1, 1))
7343 result_type = common_pointer_type (type0, type1);
7344 else if (VOID_TYPE_P (tt0))
7346 /* op0 != orig_op0 detects the case of something
7347 whose value is 0 but which isn't a valid null ptr const. */
7348 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
7349 && TREE_CODE (tt1) == FUNCTION_TYPE)
7350 pedwarn ("ISO C forbids comparison of %<void *%>"
7351 " with function pointer");
7353 else if (VOID_TYPE_P (tt1))
7355 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
7356 && TREE_CODE (tt0) == FUNCTION_TYPE)
7357 pedwarn ("ISO C forbids comparison of %<void *%>"
7358 " with function pointer");
7360 else
7361 pedwarn ("comparison of distinct pointer types lacks a cast");
7363 if (result_type == NULL_TREE)
7364 result_type = ptr_type_node;
7366 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7367 && integer_zerop (op1))
7368 result_type = type0;
7369 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7370 && integer_zerop (op0))
7371 result_type = type1;
7372 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7374 result_type = type0;
7375 pedwarn ("comparison between pointer and integer");
7377 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7379 result_type = type1;
7380 pedwarn ("comparison between pointer and integer");
7382 break;
7384 case MAX_EXPR:
7385 case MIN_EXPR:
7386 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7387 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7388 shorten = 1;
7389 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7391 if (comp_target_types (type0, type1, 1))
7393 result_type = common_pointer_type (type0, type1);
7394 if (pedantic
7395 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7396 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7398 else
7400 result_type = ptr_type_node;
7401 pedwarn ("comparison of distinct pointer types lacks a cast");
7404 break;
7406 case LE_EXPR:
7407 case GE_EXPR:
7408 case LT_EXPR:
7409 case GT_EXPR:
7410 build_type = integer_type_node;
7411 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7412 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7413 short_compare = 1;
7414 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7416 if (comp_target_types (type0, type1, 1))
7418 result_type = common_pointer_type (type0, type1);
7419 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
7420 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
7421 pedwarn ("comparison of complete and incomplete pointers");
7422 else if (pedantic
7423 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7424 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7426 else
7428 result_type = ptr_type_node;
7429 pedwarn ("comparison of distinct pointer types lacks a cast");
7432 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7433 && integer_zerop (op1))
7435 result_type = type0;
7436 if (pedantic || extra_warnings)
7437 pedwarn ("ordered comparison of pointer with integer zero");
7439 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7440 && integer_zerop (op0))
7442 result_type = type1;
7443 if (pedantic)
7444 pedwarn ("ordered comparison of pointer with integer zero");
7446 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7448 result_type = type0;
7449 pedwarn ("comparison between pointer and integer");
7451 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7453 result_type = type1;
7454 pedwarn ("comparison between pointer and integer");
7456 break;
7458 case UNORDERED_EXPR:
7459 case ORDERED_EXPR:
7460 case UNLT_EXPR:
7461 case UNLE_EXPR:
7462 case UNGT_EXPR:
7463 case UNGE_EXPR:
7464 case UNEQ_EXPR:
7465 case LTGT_EXPR:
7466 build_type = integer_type_node;
7467 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
7469 error ("unordered comparison on non-floating point argument");
7470 return error_mark_node;
7472 common = 1;
7473 break;
7475 default:
7476 break;
7479 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7480 return error_mark_node;
7482 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
7483 || code0 == VECTOR_TYPE)
7485 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
7486 || code1 == VECTOR_TYPE))
7488 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
7490 if (shorten || common || short_compare)
7491 result_type = common_type (type0, type1);
7493 /* For certain operations (which identify themselves by shorten != 0)
7494 if both args were extended from the same smaller type,
7495 do the arithmetic in that type and then extend.
7497 shorten !=0 and !=1 indicates a bitwise operation.
7498 For them, this optimization is safe only if
7499 both args are zero-extended or both are sign-extended.
7500 Otherwise, we might change the result.
7501 Eg, (short)-1 | (unsigned short)-1 is (int)-1
7502 but calculated in (unsigned short) it would be (unsigned short)-1. */
7504 if (shorten && none_complex)
7506 int unsigned0, unsigned1;
7507 tree arg0 = get_narrower (op0, &unsigned0);
7508 tree arg1 = get_narrower (op1, &unsigned1);
7509 /* UNS is 1 if the operation to be done is an unsigned one. */
7510 int uns = TYPE_UNSIGNED (result_type);
7511 tree type;
7513 final_type = result_type;
7515 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
7516 but it *requires* conversion to FINAL_TYPE. */
7518 if ((TYPE_PRECISION (TREE_TYPE (op0))
7519 == TYPE_PRECISION (TREE_TYPE (arg0)))
7520 && TREE_TYPE (op0) != final_type)
7521 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
7522 if ((TYPE_PRECISION (TREE_TYPE (op1))
7523 == TYPE_PRECISION (TREE_TYPE (arg1)))
7524 && TREE_TYPE (op1) != final_type)
7525 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
7527 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
7529 /* For bitwise operations, signedness of nominal type
7530 does not matter. Consider only how operands were extended. */
7531 if (shorten == -1)
7532 uns = unsigned0;
7534 /* Note that in all three cases below we refrain from optimizing
7535 an unsigned operation on sign-extended args.
7536 That would not be valid. */
7538 /* Both args variable: if both extended in same way
7539 from same width, do it in that width.
7540 Do it unsigned if args were zero-extended. */
7541 if ((TYPE_PRECISION (TREE_TYPE (arg0))
7542 < TYPE_PRECISION (result_type))
7543 && (TYPE_PRECISION (TREE_TYPE (arg1))
7544 == TYPE_PRECISION (TREE_TYPE (arg0)))
7545 && unsigned0 == unsigned1
7546 && (unsigned0 || !uns))
7547 result_type
7548 = c_common_signed_or_unsigned_type
7549 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
7550 else if (TREE_CODE (arg0) == INTEGER_CST
7551 && (unsigned1 || !uns)
7552 && (TYPE_PRECISION (TREE_TYPE (arg1))
7553 < TYPE_PRECISION (result_type))
7554 && (type
7555 = c_common_signed_or_unsigned_type (unsigned1,
7556 TREE_TYPE (arg1)),
7557 int_fits_type_p (arg0, type)))
7558 result_type = type;
7559 else if (TREE_CODE (arg1) == INTEGER_CST
7560 && (unsigned0 || !uns)
7561 && (TYPE_PRECISION (TREE_TYPE (arg0))
7562 < TYPE_PRECISION (result_type))
7563 && (type
7564 = c_common_signed_or_unsigned_type (unsigned0,
7565 TREE_TYPE (arg0)),
7566 int_fits_type_p (arg1, type)))
7567 result_type = type;
7570 /* Shifts can be shortened if shifting right. */
7572 if (short_shift)
7574 int unsigned_arg;
7575 tree arg0 = get_narrower (op0, &unsigned_arg);
7577 final_type = result_type;
7579 if (arg0 == op0 && final_type == TREE_TYPE (op0))
7580 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
7582 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7583 /* We can shorten only if the shift count is less than the
7584 number of bits in the smaller type size. */
7585 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7586 /* We cannot drop an unsigned shift after sign-extension. */
7587 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
7589 /* Do an unsigned shift if the operand was zero-extended. */
7590 result_type
7591 = c_common_signed_or_unsigned_type (unsigned_arg,
7592 TREE_TYPE (arg0));
7593 /* Convert value-to-be-shifted to that type. */
7594 if (TREE_TYPE (op0) != result_type)
7595 op0 = convert (result_type, op0);
7596 converted = 1;
7600 /* Comparison operations are shortened too but differently.
7601 They identify themselves by setting short_compare = 1. */
7603 if (short_compare)
7605 /* Don't write &op0, etc., because that would prevent op0
7606 from being kept in a register.
7607 Instead, make copies of the our local variables and
7608 pass the copies by reference, then copy them back afterward. */
7609 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
7610 enum tree_code xresultcode = resultcode;
7611 tree val
7612 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
7614 if (val != 0)
7615 return val;
7617 op0 = xop0, op1 = xop1;
7618 converted = 1;
7619 resultcode = xresultcode;
7621 if (warn_sign_compare && skip_evaluation == 0)
7623 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
7624 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
7625 int unsignedp0, unsignedp1;
7626 tree primop0 = get_narrower (op0, &unsignedp0);
7627 tree primop1 = get_narrower (op1, &unsignedp1);
7629 xop0 = orig_op0;
7630 xop1 = orig_op1;
7631 STRIP_TYPE_NOPS (xop0);
7632 STRIP_TYPE_NOPS (xop1);
7634 /* Give warnings for comparisons between signed and unsigned
7635 quantities that may fail.
7637 Do the checking based on the original operand trees, so that
7638 casts will be considered, but default promotions won't be.
7640 Do not warn if the comparison is being done in a signed type,
7641 since the signed type will only be chosen if it can represent
7642 all the values of the unsigned type. */
7643 if (!TYPE_UNSIGNED (result_type))
7644 /* OK */;
7645 /* Do not warn if both operands are the same signedness. */
7646 else if (op0_signed == op1_signed)
7647 /* OK */;
7648 else
7650 tree sop, uop;
7652 if (op0_signed)
7653 sop = xop0, uop = xop1;
7654 else
7655 sop = xop1, uop = xop0;
7657 /* Do not warn if the signed quantity is an
7658 unsuffixed integer literal (or some static
7659 constant expression involving such literals or a
7660 conditional expression involving such literals)
7661 and it is non-negative. */
7662 if (tree_expr_nonnegative_p (sop))
7663 /* OK */;
7664 /* Do not warn if the comparison is an equality operation,
7665 the unsigned quantity is an integral constant, and it
7666 would fit in the result if the result were signed. */
7667 else if (TREE_CODE (uop) == INTEGER_CST
7668 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
7669 && int_fits_type_p
7670 (uop, c_common_signed_type (result_type)))
7671 /* OK */;
7672 /* Do not warn if the unsigned quantity is an enumeration
7673 constant and its maximum value would fit in the result
7674 if the result were signed. */
7675 else if (TREE_CODE (uop) == INTEGER_CST
7676 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
7677 && int_fits_type_p
7678 (TYPE_MAX_VALUE (TREE_TYPE (uop)),
7679 c_common_signed_type (result_type)))
7680 /* OK */;
7681 else
7682 warning ("comparison between signed and unsigned");
7685 /* Warn if two unsigned values are being compared in a size
7686 larger than their original size, and one (and only one) is the
7687 result of a `~' operator. This comparison will always fail.
7689 Also warn if one operand is a constant, and the constant
7690 does not have all bits set that are set in the ~ operand
7691 when it is extended. */
7693 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
7694 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
7696 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
7697 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
7698 &unsignedp0);
7699 else
7700 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
7701 &unsignedp1);
7703 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
7705 tree primop;
7706 HOST_WIDE_INT constant, mask;
7707 int unsignedp, bits;
7709 if (host_integerp (primop0, 0))
7711 primop = primop1;
7712 unsignedp = unsignedp1;
7713 constant = tree_low_cst (primop0, 0);
7715 else
7717 primop = primop0;
7718 unsignedp = unsignedp0;
7719 constant = tree_low_cst (primop1, 0);
7722 bits = TYPE_PRECISION (TREE_TYPE (primop));
7723 if (bits < TYPE_PRECISION (result_type)
7724 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
7726 mask = (~(HOST_WIDE_INT) 0) << bits;
7727 if ((mask & constant) != mask)
7728 warning ("comparison of promoted ~unsigned with constant");
7731 else if (unsignedp0 && unsignedp1
7732 && (TYPE_PRECISION (TREE_TYPE (primop0))
7733 < TYPE_PRECISION (result_type))
7734 && (TYPE_PRECISION (TREE_TYPE (primop1))
7735 < TYPE_PRECISION (result_type)))
7736 warning ("comparison of promoted ~unsigned with unsigned");
7742 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
7743 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
7744 Then the expression will be built.
7745 It will be given type FINAL_TYPE if that is nonzero;
7746 otherwise, it will be given type RESULT_TYPE. */
7748 if (!result_type)
7750 binary_op_error (code);
7751 return error_mark_node;
7754 if (!converted)
7756 if (TREE_TYPE (op0) != result_type)
7757 op0 = convert (result_type, op0);
7758 if (TREE_TYPE (op1) != result_type)
7759 op1 = convert (result_type, op1);
7761 /* This can happen if one operand has a vector type, and the other
7762 has a different type. */
7763 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
7764 return error_mark_node;
7767 if (build_type == NULL_TREE)
7768 build_type = result_type;
7771 tree result = build2 (resultcode, build_type, op0, op1);
7773 /* Treat expressions in initializers specially as they can't trap. */
7774 result = require_constant_value ? fold_initializer (result)
7775 : fold (result);
7777 if (final_type != 0)
7778 result = convert (final_type, result);
7779 return result;