* c-common.c (catenate_strings): New.
[official-gcc.git] / gcc / c-typeck.c
blob7d599bce05ca58fe12666689a8936f8bcda025a1
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
2822 ("cannot take address of bit-field %qD", 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
2850 ("global register variable %qD used in nested function", x);
2851 return false;
2853 pedwarn ("register variable %qD used in nested function", x);
2855 else if (C_DECL_REGISTER (x))
2857 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2858 error ("address of global register variable %qD requested", x);
2859 else
2860 error ("address of register variable %qD requested", x);
2861 return false;
2864 /* drops in */
2865 case FUNCTION_DECL:
2866 TREE_ADDRESSABLE (x) = 1;
2867 /* drops out */
2868 default:
2869 return true;
2873 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
2875 tree
2876 build_conditional_expr (tree ifexp, tree op1, tree op2)
2878 tree type1;
2879 tree type2;
2880 enum tree_code code1;
2881 enum tree_code code2;
2882 tree result_type = NULL;
2883 tree orig_op1 = op1, orig_op2 = op2;
2885 ifexp = lang_hooks.truthvalue_conversion (default_conversion (ifexp));
2887 /* Promote both alternatives. */
2889 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
2890 op1 = default_conversion (op1);
2891 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
2892 op2 = default_conversion (op2);
2894 if (TREE_CODE (ifexp) == ERROR_MARK
2895 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
2896 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
2897 return error_mark_node;
2899 type1 = TREE_TYPE (op1);
2900 code1 = TREE_CODE (type1);
2901 type2 = TREE_TYPE (op2);
2902 code2 = TREE_CODE (type2);
2904 /* C90 does not permit non-lvalue arrays in conditional expressions.
2905 In C99 they will be pointers by now. */
2906 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
2908 error ("non-lvalue array in conditional expression");
2909 return error_mark_node;
2912 /* Quickly detect the usual case where op1 and op2 have the same type
2913 after promotion. */
2914 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
2916 if (type1 == type2)
2917 result_type = type1;
2918 else
2919 result_type = TYPE_MAIN_VARIANT (type1);
2921 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
2922 || code1 == COMPLEX_TYPE)
2923 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
2924 || code2 == COMPLEX_TYPE))
2926 result_type = common_type (type1, type2);
2928 /* If -Wsign-compare, warn here if type1 and type2 have
2929 different signedness. We'll promote the signed to unsigned
2930 and later code won't know it used to be different.
2931 Do this check on the original types, so that explicit casts
2932 will be considered, but default promotions won't. */
2933 if (warn_sign_compare && !skip_evaluation)
2935 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
2936 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
2938 if (unsigned_op1 ^ unsigned_op2)
2940 /* Do not warn if the result type is signed, since the
2941 signed type will only be chosen if it can represent
2942 all the values of the unsigned type. */
2943 if (!TYPE_UNSIGNED (result_type))
2944 /* OK */;
2945 /* Do not warn if the signed quantity is an unsuffixed
2946 integer literal (or some static constant expression
2947 involving such literals) and it is non-negative. */
2948 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
2949 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
2950 /* OK */;
2951 else
2952 warning ("signed and unsigned type in conditional expression");
2956 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
2958 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
2959 pedwarn ("ISO C forbids conditional expr with only one void side");
2960 result_type = void_type_node;
2962 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
2964 if (comp_target_types (type1, type2, 1))
2965 result_type = common_pointer_type (type1, type2);
2966 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
2967 && TREE_CODE (orig_op1) != NOP_EXPR)
2968 result_type = qualify_type (type2, type1);
2969 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
2970 && TREE_CODE (orig_op2) != NOP_EXPR)
2971 result_type = qualify_type (type1, type2);
2972 else if (VOID_TYPE_P (TREE_TYPE (type1)))
2974 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
2975 pedwarn ("ISO C forbids conditional expr between "
2976 "%<void *%> and function pointer");
2977 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
2978 TREE_TYPE (type2)));
2980 else if (VOID_TYPE_P (TREE_TYPE (type2)))
2982 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
2983 pedwarn ("ISO C forbids conditional expr between "
2984 "%<void *%> and function pointer");
2985 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
2986 TREE_TYPE (type1)));
2988 else
2990 pedwarn ("pointer type mismatch in conditional expression");
2991 result_type = build_pointer_type (void_type_node);
2994 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
2996 if (!integer_zerop (op2))
2997 pedwarn ("pointer/integer type mismatch in conditional expression");
2998 else
3000 op2 = null_pointer_node;
3002 result_type = type1;
3004 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3006 if (!integer_zerop (op1))
3007 pedwarn ("pointer/integer type mismatch in conditional expression");
3008 else
3010 op1 = null_pointer_node;
3012 result_type = type2;
3015 if (!result_type)
3017 if (flag_cond_mismatch)
3018 result_type = void_type_node;
3019 else
3021 error ("type mismatch in conditional expression");
3022 return error_mark_node;
3026 /* Merge const and volatile flags of the incoming types. */
3027 result_type
3028 = build_type_variant (result_type,
3029 TREE_READONLY (op1) || TREE_READONLY (op2),
3030 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3032 if (result_type != TREE_TYPE (op1))
3033 op1 = convert_and_check (result_type, op1);
3034 if (result_type != TREE_TYPE (op2))
3035 op2 = convert_and_check (result_type, op2);
3037 if (TREE_CODE (ifexp) == INTEGER_CST)
3038 return non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3040 return fold (build3 (COND_EXPR, result_type, ifexp, op1, op2));
3043 /* Return a compound expression that performs two expressions and
3044 returns the value of the second of them. */
3046 tree
3047 build_compound_expr (tree expr1, tree expr2)
3049 /* Convert arrays and functions to pointers. */
3050 expr2 = default_function_array_conversion (expr2);
3052 if (!TREE_SIDE_EFFECTS (expr1))
3054 /* The left-hand operand of a comma expression is like an expression
3055 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3056 any side-effects, unless it was explicitly cast to (void). */
3057 if (warn_unused_value
3058 && !(TREE_CODE (expr1) == CONVERT_EXPR
3059 && VOID_TYPE_P (TREE_TYPE (expr1))))
3060 warning ("left-hand operand of comma expression has no effect");
3063 /* With -Wunused, we should also warn if the left-hand operand does have
3064 side-effects, but computes a value which is not used. For example, in
3065 `foo() + bar(), baz()' the result of the `+' operator is not used,
3066 so we should issue a warning. */
3067 else if (warn_unused_value)
3068 warn_if_unused_value (expr1, input_location);
3070 return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
3073 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3075 tree
3076 build_c_cast (tree type, tree expr)
3078 tree value = expr;
3080 if (type == error_mark_node || expr == error_mark_node)
3081 return error_mark_node;
3083 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3084 only in <protocol> qualifications. But when constructing cast expressions,
3085 the protocols do matter and must be kept around. */
3086 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
3087 return build1 (NOP_EXPR, type, expr);
3089 type = TYPE_MAIN_VARIANT (type);
3091 if (TREE_CODE (type) == ARRAY_TYPE)
3093 error ("cast specifies array type");
3094 return error_mark_node;
3097 if (TREE_CODE (type) == FUNCTION_TYPE)
3099 error ("cast specifies function type");
3100 return error_mark_node;
3103 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3105 if (pedantic)
3107 if (TREE_CODE (type) == RECORD_TYPE
3108 || TREE_CODE (type) == UNION_TYPE)
3109 pedwarn ("ISO C forbids casting nonscalar to the same type");
3112 else if (TREE_CODE (type) == UNION_TYPE)
3114 tree field;
3115 value = default_function_array_conversion (value);
3117 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3118 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3119 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3120 break;
3122 if (field)
3124 tree t;
3126 if (pedantic)
3127 pedwarn ("ISO C forbids casts to union type");
3128 t = digest_init (type,
3129 build_constructor (type,
3130 build_tree_list (field, value)),
3131 true, 0);
3132 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3133 TREE_INVARIANT (t) = TREE_INVARIANT (value);
3134 return t;
3136 error ("cast to union type from type not present in union");
3137 return error_mark_node;
3139 else
3141 tree otype, ovalue;
3143 /* If casting to void, avoid the error that would come
3144 from default_conversion in the case of a non-lvalue array. */
3145 if (type == void_type_node)
3146 return build1 (CONVERT_EXPR, type, value);
3148 /* Convert functions and arrays to pointers,
3149 but don't convert any other types. */
3150 value = default_function_array_conversion (value);
3151 otype = TREE_TYPE (value);
3153 /* Optionally warn about potentially worrisome casts. */
3155 if (warn_cast_qual
3156 && TREE_CODE (type) == POINTER_TYPE
3157 && TREE_CODE (otype) == POINTER_TYPE)
3159 tree in_type = type;
3160 tree in_otype = otype;
3161 int added = 0;
3162 int discarded = 0;
3164 /* Check that the qualifiers on IN_TYPE are a superset of
3165 the qualifiers of IN_OTYPE. The outermost level of
3166 POINTER_TYPE nodes is uninteresting and we stop as soon
3167 as we hit a non-POINTER_TYPE node on either type. */
3170 in_otype = TREE_TYPE (in_otype);
3171 in_type = TREE_TYPE (in_type);
3173 /* GNU C allows cv-qualified function types. 'const'
3174 means the function is very pure, 'volatile' means it
3175 can't return. We need to warn when such qualifiers
3176 are added, not when they're taken away. */
3177 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3178 && TREE_CODE (in_type) == FUNCTION_TYPE)
3179 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3180 else
3181 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3183 while (TREE_CODE (in_type) == POINTER_TYPE
3184 && TREE_CODE (in_otype) == POINTER_TYPE);
3186 if (added)
3187 warning ("cast adds new qualifiers to function type");
3189 if (discarded)
3190 /* There are qualifiers present in IN_OTYPE that are not
3191 present in IN_TYPE. */
3192 warning ("cast discards qualifiers from pointer target type");
3195 /* Warn about possible alignment problems. */
3196 if (STRICT_ALIGNMENT && warn_cast_align
3197 && TREE_CODE (type) == POINTER_TYPE
3198 && TREE_CODE (otype) == POINTER_TYPE
3199 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3200 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3201 /* Don't warn about opaque types, where the actual alignment
3202 restriction is unknown. */
3203 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3204 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3205 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3206 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3207 warning ("cast increases required alignment of target type");
3209 if (TREE_CODE (type) == INTEGER_TYPE
3210 && TREE_CODE (otype) == POINTER_TYPE
3211 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3212 && !TREE_CONSTANT (value))
3213 warning ("cast from pointer to integer of different size");
3215 if (warn_bad_function_cast
3216 && TREE_CODE (value) == CALL_EXPR
3217 && TREE_CODE (type) != TREE_CODE (otype))
3218 warning ("cast from function call of type %qT to non-matching "
3219 "type %qT", otype, type);
3221 if (TREE_CODE (type) == POINTER_TYPE
3222 && TREE_CODE (otype) == INTEGER_TYPE
3223 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3224 /* Don't warn about converting any constant. */
3225 && !TREE_CONSTANT (value))
3226 warning ("cast to pointer from integer of different size");
3228 if (TREE_CODE (type) == POINTER_TYPE
3229 && TREE_CODE (otype) == POINTER_TYPE
3230 && TREE_CODE (expr) == ADDR_EXPR
3231 && DECL_P (TREE_OPERAND (expr, 0))
3232 && flag_strict_aliasing && warn_strict_aliasing
3233 && !VOID_TYPE_P (TREE_TYPE (type)))
3235 /* Casting the address of a decl to non void pointer. Warn
3236 if the cast breaks type based aliasing. */
3237 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3238 warning ("type-punning to incomplete type might break strict-aliasing rules");
3239 else
3241 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
3242 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
3244 if (!alias_sets_conflict_p (set1, set2))
3245 warning ("dereferencing type-punned pointer will break strict-aliasing rules");
3246 else if (warn_strict_aliasing > 1
3247 && !alias_sets_might_conflict_p (set1, set2))
3248 warning ("dereferencing type-punned pointer might break strict-aliasing rules");
3252 /* If pedantic, warn for conversions between function and object
3253 pointer types, except for converting a null pointer constant
3254 to function pointer type. */
3255 if (pedantic
3256 && TREE_CODE (type) == POINTER_TYPE
3257 && TREE_CODE (otype) == POINTER_TYPE
3258 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3259 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3260 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3262 if (pedantic
3263 && TREE_CODE (type) == POINTER_TYPE
3264 && TREE_CODE (otype) == POINTER_TYPE
3265 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3266 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3267 && !(integer_zerop (value) && TREE_TYPE (otype) == void_type_node
3268 && TREE_CODE (expr) != NOP_EXPR))
3269 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3271 ovalue = value;
3272 /* Replace a nonvolatile const static variable with its value. */
3273 if (optimize && TREE_CODE (value) == VAR_DECL)
3274 value = decl_constant_value (value);
3275 value = convert (type, value);
3277 /* Ignore any integer overflow caused by the cast. */
3278 if (TREE_CODE (value) == INTEGER_CST)
3280 if (EXPR_P (ovalue))
3281 /* If OVALUE had overflow set, then so will VALUE, so it
3282 is safe to overwrite. */
3283 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3284 else
3285 TREE_OVERFLOW (value) = 0;
3287 if (CONSTANT_CLASS_P (ovalue))
3288 /* Similarly, constant_overflow cannot have become
3289 cleared. */
3290 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3294 /* Don't let a cast be an lvalue. */
3295 if (value == expr)
3296 value = non_lvalue (value);
3298 return value;
3301 /* Interpret a cast of expression EXPR to type TYPE. */
3302 tree
3303 c_cast_expr (struct c_type_name *type_name, tree expr)
3305 tree type;
3306 int saved_wsp = warn_strict_prototypes;
3308 /* This avoids warnings about unprototyped casts on
3309 integers. E.g. "#define SIG_DFL (void(*)())0". */
3310 if (TREE_CODE (expr) == INTEGER_CST)
3311 warn_strict_prototypes = 0;
3312 type = groktypename (type_name);
3313 warn_strict_prototypes = saved_wsp;
3315 return build_c_cast (type, expr);
3319 /* Build an assignment expression of lvalue LHS from value RHS.
3320 MODIFYCODE is the code for a binary operator that we use
3321 to combine the old value of LHS with RHS to get the new value.
3322 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3324 tree
3325 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3327 tree result;
3328 tree newrhs;
3329 tree lhstype = TREE_TYPE (lhs);
3330 tree olhstype = lhstype;
3332 /* Types that aren't fully specified cannot be used in assignments. */
3333 lhs = require_complete_type (lhs);
3335 /* Avoid duplicate error messages from operands that had errors. */
3336 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3337 return error_mark_node;
3339 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3340 /* Do not use STRIP_NOPS here. We do not want an enumerator
3341 whose value is 0 to count as a null pointer constant. */
3342 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3343 rhs = TREE_OPERAND (rhs, 0);
3345 newrhs = rhs;
3347 /* If a binary op has been requested, combine the old LHS value with the RHS
3348 producing the value we should actually store into the LHS. */
3350 if (modifycode != NOP_EXPR)
3352 lhs = stabilize_reference (lhs);
3353 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3356 if (!lvalue_or_else (lhs, lv_assign))
3357 return error_mark_node;
3359 /* Give an error for storing in something that is 'const'. */
3361 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3362 || ((TREE_CODE (lhstype) == RECORD_TYPE
3363 || TREE_CODE (lhstype) == UNION_TYPE)
3364 && C_TYPE_FIELDS_READONLY (lhstype)))
3365 readonly_error (lhs, lv_assign);
3367 /* If storing into a structure or union member,
3368 it has probably been given type `int'.
3369 Compute the type that would go with
3370 the actual amount of storage the member occupies. */
3372 if (TREE_CODE (lhs) == COMPONENT_REF
3373 && (TREE_CODE (lhstype) == INTEGER_TYPE
3374 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3375 || TREE_CODE (lhstype) == REAL_TYPE
3376 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3377 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3379 /* If storing in a field that is in actuality a short or narrower than one,
3380 we must store in the field in its actual type. */
3382 if (lhstype != TREE_TYPE (lhs))
3384 lhs = copy_node (lhs);
3385 TREE_TYPE (lhs) = lhstype;
3388 /* Convert new value to destination type. */
3390 newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
3391 NULL_TREE, NULL_TREE, 0);
3392 if (TREE_CODE (newrhs) == ERROR_MARK)
3393 return error_mark_node;
3395 /* Scan operands. */
3397 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3398 TREE_SIDE_EFFECTS (result) = 1;
3400 /* If we got the LHS in a different type for storing in,
3401 convert the result back to the nominal type of LHS
3402 so that the value we return always has the same type
3403 as the LHS argument. */
3405 if (olhstype == TREE_TYPE (result))
3406 return result;
3407 return convert_for_assignment (olhstype, result, ic_assign,
3408 NULL_TREE, NULL_TREE, 0);
3411 /* Convert value RHS to type TYPE as preparation for an assignment
3412 to an lvalue of type TYPE.
3413 The real work of conversion is done by `convert'.
3414 The purpose of this function is to generate error messages
3415 for assignments that are not allowed in C.
3416 ERRTYPE says whether it is argument passing, assignment,
3417 initialization or return.
3419 FUNCTION is a tree for the function being called.
3420 PARMNUM is the number of the argument, for printing in error messages. */
3422 static tree
3423 convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
3424 tree fundecl, tree function, int parmnum)
3426 enum tree_code codel = TREE_CODE (type);
3427 tree rhstype;
3428 enum tree_code coder;
3429 tree rname = NULL_TREE;
3431 if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
3433 tree selector;
3434 /* Change pointer to function to the function itself for
3435 diagnostics. */
3436 if (TREE_CODE (function) == ADDR_EXPR
3437 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3438 function = TREE_OPERAND (function, 0);
3440 /* Handle an ObjC selector specially for diagnostics. */
3441 selector = objc_message_selector ();
3442 rname = function;
3443 if (selector && parmnum > 2)
3445 rname = selector;
3446 parmnum -= 2;
3450 /* This macro is used to emit diagnostics to ensure that all format
3451 strings are complete sentences, visible to gettext and checked at
3452 compile time. */
3453 #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE) \
3454 do { \
3455 switch (errtype) \
3457 case ic_argpass: \
3458 pedwarn (AR, parmnum, rname); \
3459 break; \
3460 case ic_argpass_nonproto: \
3461 warning (AR, parmnum, rname); \
3462 break; \
3463 case ic_assign: \
3464 pedwarn (AS); \
3465 break; \
3466 case ic_init: \
3467 pedwarn (IN); \
3468 break; \
3469 case ic_return: \
3470 pedwarn (RE); \
3471 break; \
3472 default: \
3473 gcc_unreachable (); \
3475 } while (0)
3477 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3478 /* Do not use STRIP_NOPS here. We do not want an enumerator
3479 whose value is 0 to count as a null pointer constant. */
3480 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3481 rhs = TREE_OPERAND (rhs, 0);
3483 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3484 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3485 rhs = default_conversion (rhs);
3486 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3487 rhs = decl_constant_value_for_broken_optimization (rhs);
3489 rhstype = TREE_TYPE (rhs);
3490 coder = TREE_CODE (rhstype);
3492 if (coder == ERROR_MARK)
3493 return error_mark_node;
3495 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3497 overflow_warning (rhs);
3498 /* Check for Objective-C protocols. This will automatically
3499 issue a warning if there are protocol violations. No need to
3500 use the return value. */
3501 if (c_dialect_objc ())
3502 objc_comptypes (type, rhstype, 0);
3503 return rhs;
3506 if (coder == VOID_TYPE)
3508 /* Except for passing an argument to an unprototyped function,
3509 this is a constraint violation. When passing an argument to
3510 an unprototyped function, it is compile-time undefined;
3511 making it a constraint in that case was rejected in
3512 DR#252. */
3513 error ("void value not ignored as it ought to be");
3514 return error_mark_node;
3516 /* A type converts to a reference to it.
3517 This code doesn't fully support references, it's just for the
3518 special case of va_start and va_copy. */
3519 if (codel == REFERENCE_TYPE
3520 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3522 if (!lvalue_p (rhs))
3524 error ("cannot pass rvalue to reference parameter");
3525 return error_mark_node;
3527 if (!c_mark_addressable (rhs))
3528 return error_mark_node;
3529 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3531 /* We already know that these two types are compatible, but they
3532 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3533 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3534 likely to be va_list, a typedef to __builtin_va_list, which
3535 is different enough that it will cause problems later. */
3536 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3537 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3539 rhs = build1 (NOP_EXPR, type, rhs);
3540 return rhs;
3542 /* Some types can interconvert without explicit casts. */
3543 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
3544 && vector_types_convertible_p (type, TREE_TYPE (rhs)))
3545 return convert (type, rhs);
3546 /* Arithmetic types all interconvert, and enum is treated like int. */
3547 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3548 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3549 || codel == BOOLEAN_TYPE)
3550 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3551 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3552 || coder == BOOLEAN_TYPE))
3553 return convert_and_check (type, rhs);
3555 /* Conversion to a transparent union from its member types.
3556 This applies only to function arguments. */
3557 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
3558 && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
3560 tree memb_types;
3561 tree marginal_memb_type = 0;
3563 for (memb_types = TYPE_FIELDS (type); memb_types;
3564 memb_types = TREE_CHAIN (memb_types))
3566 tree memb_type = TREE_TYPE (memb_types);
3568 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3569 TYPE_MAIN_VARIANT (rhstype)))
3570 break;
3572 if (TREE_CODE (memb_type) != POINTER_TYPE)
3573 continue;
3575 if (coder == POINTER_TYPE)
3577 tree ttl = TREE_TYPE (memb_type);
3578 tree ttr = TREE_TYPE (rhstype);
3580 /* Any non-function converts to a [const][volatile] void *
3581 and vice versa; otherwise, targets must be the same.
3582 Meanwhile, the lhs target must have all the qualifiers of
3583 the rhs. */
3584 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3585 || comp_target_types (memb_type, rhstype, 0))
3587 /* If this type won't generate any warnings, use it. */
3588 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3589 || ((TREE_CODE (ttr) == FUNCTION_TYPE
3590 && TREE_CODE (ttl) == FUNCTION_TYPE)
3591 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3592 == TYPE_QUALS (ttr))
3593 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3594 == TYPE_QUALS (ttl))))
3595 break;
3597 /* Keep looking for a better type, but remember this one. */
3598 if (!marginal_memb_type)
3599 marginal_memb_type = memb_type;
3603 /* Can convert integer zero to any pointer type. */
3604 if (integer_zerop (rhs)
3605 || (TREE_CODE (rhs) == NOP_EXPR
3606 && integer_zerop (TREE_OPERAND (rhs, 0))))
3608 rhs = null_pointer_node;
3609 break;
3613 if (memb_types || marginal_memb_type)
3615 if (!memb_types)
3617 /* We have only a marginally acceptable member type;
3618 it needs a warning. */
3619 tree ttl = TREE_TYPE (marginal_memb_type);
3620 tree ttr = TREE_TYPE (rhstype);
3622 /* Const and volatile mean something different for function
3623 types, so the usual warnings are not appropriate. */
3624 if (TREE_CODE (ttr) == FUNCTION_TYPE
3625 && TREE_CODE (ttl) == FUNCTION_TYPE)
3627 /* Because const and volatile on functions are
3628 restrictions that say the function will not do
3629 certain things, it is okay to use a const or volatile
3630 function where an ordinary one is wanted, but not
3631 vice-versa. */
3632 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3633 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE "
3634 "makes qualified function "
3635 "pointer from unqualified"),
3636 N_("assignment makes qualified "
3637 "function pointer from "
3638 "unqualified"),
3639 N_("initialization makes qualified "
3640 "function pointer from "
3641 "unqualified"),
3642 N_("return makes qualified function "
3643 "pointer from unqualified"));
3645 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3646 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
3647 "qualifiers from pointer target type"),
3648 N_("assignment discards qualifiers "
3649 "from pointer target type"),
3650 N_("initialization discards qualifiers "
3651 "from pointer target type"),
3652 N_("return discards qualifiers from "
3653 "pointer target type"));
3656 if (pedantic && !DECL_IN_SYSTEM_HEADER (fundecl))
3657 pedwarn ("ISO C prohibits argument conversion to union type");
3659 return build1 (NOP_EXPR, type, rhs);
3663 /* Conversions among pointers */
3664 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3665 && (coder == codel))
3667 tree ttl = TREE_TYPE (type);
3668 tree ttr = TREE_TYPE (rhstype);
3669 bool is_opaque_pointer;
3670 int target_cmp = 0; /* Cache comp_target_types () result. */
3672 /* Opaque pointers are treated like void pointers. */
3673 is_opaque_pointer = (targetm.vector_opaque_p (type)
3674 || targetm.vector_opaque_p (rhstype))
3675 && TREE_CODE (ttl) == VECTOR_TYPE
3676 && TREE_CODE (ttr) == VECTOR_TYPE;
3678 /* Any non-function converts to a [const][volatile] void *
3679 and vice versa; otherwise, targets must be the same.
3680 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3681 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3682 || (target_cmp = comp_target_types (type, rhstype, 0))
3683 || is_opaque_pointer
3684 || (c_common_unsigned_type (TYPE_MAIN_VARIANT (ttl))
3685 == c_common_unsigned_type (TYPE_MAIN_VARIANT (ttr))))
3687 if (pedantic
3688 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3690 (VOID_TYPE_P (ttr)
3691 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3692 which are not ANSI null ptr constants. */
3693 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3694 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3695 WARN_FOR_ASSIGNMENT (N_("ISO C forbids passing argument %d of "
3696 "%qE between function pointer "
3697 "and %<void *%>"),
3698 N_("ISO C forbids assignment between "
3699 "function pointer and %<void *%>"),
3700 N_("ISO C forbids initialization between "
3701 "function pointer and %<void *%>"),
3702 N_("ISO C forbids return between function "
3703 "pointer and %<void *%>"));
3704 /* Const and volatile mean something different for function types,
3705 so the usual warnings are not appropriate. */
3706 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3707 && TREE_CODE (ttl) != FUNCTION_TYPE)
3709 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3710 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE discards "
3711 "qualifiers from pointer target type"),
3712 N_("assignment discards qualifiers "
3713 "from pointer target type"),
3714 N_("initialization discards qualifiers "
3715 "from pointer target type"),
3716 N_("return discards qualifiers from "
3717 "pointer target type"));
3718 /* If this is not a case of ignoring a mismatch in signedness,
3719 no warning. */
3720 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3721 || target_cmp)
3723 /* If there is a mismatch, do warn. */
3724 else
3725 WARN_FOR_ASSIGNMENT (N_("pointer targets in passing argument "
3726 "%d of %qE differ in signedness"),
3727 N_("pointer targets in assignment "
3728 "differ in signedness"),
3729 N_("pointer targets in initialization "
3730 "differ in signedness"),
3731 N_("pointer targets in return differ "
3732 "in signedness"));
3734 else if (TREE_CODE (ttl) == FUNCTION_TYPE
3735 && TREE_CODE (ttr) == FUNCTION_TYPE)
3737 /* Because const and volatile on functions are restrictions
3738 that say the function will not do certain things,
3739 it is okay to use a const or volatile function
3740 where an ordinary one is wanted, but not vice-versa. */
3741 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3742 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
3743 "qualified function pointer "
3744 "from unqualified"),
3745 N_("assignment makes qualified function "
3746 "pointer from unqualified"),
3747 N_("initialization makes qualified "
3748 "function pointer from unqualified"),
3749 N_("return makes qualified function "
3750 "pointer from unqualified"));
3753 else
3754 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE from "
3755 "incompatible pointer type"),
3756 N_("assignment from incompatible pointer type"),
3757 N_("initialization from incompatible "
3758 "pointer type"),
3759 N_("return from incompatible pointer type"));
3760 return convert (type, rhs);
3762 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
3764 /* ??? This should not be an error when inlining calls to
3765 unprototyped functions. */
3766 error ("invalid use of non-lvalue array");
3767 return error_mark_node;
3769 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
3771 /* An explicit constant 0 can convert to a pointer,
3772 or one that results from arithmetic, even including
3773 a cast to integer type. */
3774 if (!(TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3776 !(TREE_CODE (rhs) == NOP_EXPR
3777 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3778 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3779 && integer_zerop (TREE_OPERAND (rhs, 0))))
3780 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes "
3781 "pointer from integer without a cast"),
3782 N_("assignment makes pointer from integer "
3783 "without a cast"),
3784 N_("initialization makes pointer from "
3785 "integer without a cast"),
3786 N_("return makes pointer from integer "
3787 "without a cast"));
3789 return convert (type, rhs);
3791 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
3793 WARN_FOR_ASSIGNMENT (N_("passing argument %d of %qE makes integer "
3794 "from pointer without a cast"),
3795 N_("assignment makes integer from pointer "
3796 "without a cast"),
3797 N_("initialization makes integer from pointer "
3798 "without a cast"),
3799 N_("return makes integer from pointer "
3800 "without a cast"));
3801 return convert (type, rhs);
3803 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3804 return convert (type, rhs);
3806 switch (errtype)
3808 case ic_argpass:
3809 case ic_argpass_nonproto:
3810 /* ??? This should not be an error when inlining calls to
3811 unprototyped functions. */
3812 error ("incompatible type for argument %d of %qE", parmnum, rname);
3813 break;
3814 case ic_assign:
3815 error ("incompatible types in assignment");
3816 break;
3817 case ic_init:
3818 error ("incompatible types in initialization");
3819 break;
3820 case ic_return:
3821 error ("incompatible types in return");
3822 break;
3823 default:
3824 gcc_unreachable ();
3827 return error_mark_node;
3830 /* Convert VALUE for assignment into inlined parameter PARM. ARGNUM
3831 is used for error and waring reporting and indicates which argument
3832 is being processed. */
3834 tree
3835 c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
3837 tree ret, type;
3839 /* If FN was prototyped, the value has been converted already
3840 in convert_arguments. */
3841 if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
3842 return value;
3844 type = TREE_TYPE (parm);
3845 ret = convert_for_assignment (type, value,
3846 ic_argpass_nonproto, fn,
3847 fn, argnum);
3848 if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
3849 && INTEGRAL_TYPE_P (type)
3850 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
3851 ret = default_conversion (ret);
3852 return ret;
3855 /* If VALUE is a compound expr all of whose expressions are constant, then
3856 return its value. Otherwise, return error_mark_node.
3858 This is for handling COMPOUND_EXPRs as initializer elements
3859 which is allowed with a warning when -pedantic is specified. */
3861 static tree
3862 valid_compound_expr_initializer (tree value, tree endtype)
3864 if (TREE_CODE (value) == COMPOUND_EXPR)
3866 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
3867 == error_mark_node)
3868 return error_mark_node;
3869 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
3870 endtype);
3872 else if (!initializer_constant_valid_p (value, endtype))
3873 return error_mark_node;
3874 else
3875 return value;
3878 /* Perform appropriate conversions on the initial value of a variable,
3879 store it in the declaration DECL,
3880 and print any error messages that are appropriate.
3881 If the init is invalid, store an ERROR_MARK. */
3883 void
3884 store_init_value (tree decl, tree init)
3886 tree value, type;
3888 /* If variable's type was invalidly declared, just ignore it. */
3890 type = TREE_TYPE (decl);
3891 if (TREE_CODE (type) == ERROR_MARK)
3892 return;
3894 /* Digest the specified initializer into an expression. */
3896 value = digest_init (type, init, true, TREE_STATIC (decl));
3898 /* Store the expression if valid; else report error. */
3900 if (warn_traditional && !in_system_header
3901 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
3902 warning ("traditional C rejects automatic aggregate initialization");
3904 DECL_INITIAL (decl) = value;
3906 /* ANSI wants warnings about out-of-range constant initializers. */
3907 STRIP_TYPE_NOPS (value);
3908 constant_expression_warning (value);
3910 /* Check if we need to set array size from compound literal size. */
3911 if (TREE_CODE (type) == ARRAY_TYPE
3912 && TYPE_DOMAIN (type) == 0
3913 && value != error_mark_node)
3915 tree inside_init = init;
3917 if (TREE_CODE (init) == NON_LVALUE_EXPR)
3918 inside_init = TREE_OPERAND (init, 0);
3919 inside_init = fold (inside_init);
3921 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
3923 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
3925 if (TYPE_DOMAIN (TREE_TYPE (decl)))
3927 /* For int foo[] = (int [3]){1}; we need to set array size
3928 now since later on array initializer will be just the
3929 brace enclosed list of the compound literal. */
3930 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
3931 layout_type (type);
3932 layout_decl (decl, 0);
3938 /* Methods for storing and printing names for error messages. */
3940 /* Implement a spelling stack that allows components of a name to be pushed
3941 and popped. Each element on the stack is this structure. */
3943 struct spelling
3945 int kind;
3946 union
3948 int i;
3949 const char *s;
3950 } u;
3953 #define SPELLING_STRING 1
3954 #define SPELLING_MEMBER 2
3955 #define SPELLING_BOUNDS 3
3957 static struct spelling *spelling; /* Next stack element (unused). */
3958 static struct spelling *spelling_base; /* Spelling stack base. */
3959 static int spelling_size; /* Size of the spelling stack. */
3961 /* Macros to save and restore the spelling stack around push_... functions.
3962 Alternative to SAVE_SPELLING_STACK. */
3964 #define SPELLING_DEPTH() (spelling - spelling_base)
3965 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
3967 /* Push an element on the spelling stack with type KIND and assign VALUE
3968 to MEMBER. */
3970 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
3972 int depth = SPELLING_DEPTH (); \
3974 if (depth >= spelling_size) \
3976 spelling_size += 10; \
3977 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
3978 spelling_size); \
3979 RESTORE_SPELLING_DEPTH (depth); \
3982 spelling->kind = (KIND); \
3983 spelling->MEMBER = (VALUE); \
3984 spelling++; \
3987 /* Push STRING on the stack. Printed literally. */
3989 static void
3990 push_string (const char *string)
3992 PUSH_SPELLING (SPELLING_STRING, string, u.s);
3995 /* Push a member name on the stack. Printed as '.' STRING. */
3997 static void
3998 push_member_name (tree decl)
4000 const char *const string
4001 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4002 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4005 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4007 static void
4008 push_array_bounds (int bounds)
4010 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4013 /* Compute the maximum size in bytes of the printed spelling. */
4015 static int
4016 spelling_length (void)
4018 int size = 0;
4019 struct spelling *p;
4021 for (p = spelling_base; p < spelling; p++)
4023 if (p->kind == SPELLING_BOUNDS)
4024 size += 25;
4025 else
4026 size += strlen (p->u.s) + 1;
4029 return size;
4032 /* Print the spelling to BUFFER and return it. */
4034 static char *
4035 print_spelling (char *buffer)
4037 char *d = buffer;
4038 struct spelling *p;
4040 for (p = spelling_base; p < spelling; p++)
4041 if (p->kind == SPELLING_BOUNDS)
4043 sprintf (d, "[%d]", p->u.i);
4044 d += strlen (d);
4046 else
4048 const char *s;
4049 if (p->kind == SPELLING_MEMBER)
4050 *d++ = '.';
4051 for (s = p->u.s; (*d = *s++); d++)
4054 *d++ = '\0';
4055 return buffer;
4058 /* Issue an error message for a bad initializer component.
4059 MSGID identifies the message.
4060 The component name is taken from the spelling stack. */
4062 void
4063 error_init (const char *msgid)
4065 char *ofwhat;
4067 error ("%s", _(msgid));
4068 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4069 if (*ofwhat)
4070 error ("(near initialization for %qs)", ofwhat);
4073 /* Issue a pedantic warning for a bad initializer component.
4074 MSGID identifies the message.
4075 The component name is taken from the spelling stack. */
4077 void
4078 pedwarn_init (const char *msgid)
4080 char *ofwhat;
4082 pedwarn ("%s", _(msgid));
4083 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4084 if (*ofwhat)
4085 pedwarn ("(near initialization for %qs)", ofwhat);
4088 /* Issue a warning for a bad initializer component.
4089 MSGID identifies the message.
4090 The component name is taken from the spelling stack. */
4092 static void
4093 warning_init (const char *msgid)
4095 char *ofwhat;
4097 warning ("%s", _(msgid));
4098 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4099 if (*ofwhat)
4100 warning ("(near initialization for %qs)", ofwhat);
4103 /* If TYPE is an array type and EXPR is a parenthesized string
4104 constant, warn if pedantic that EXPR is being used to initialize an
4105 object of type TYPE. */
4107 void
4108 maybe_warn_string_init (tree type, struct c_expr expr)
4110 if (pedantic
4111 && TREE_CODE (type) == ARRAY_TYPE
4112 && TREE_CODE (expr.value) == STRING_CST
4113 && expr.original_code != STRING_CST)
4114 pedwarn_init ("array initialized from parenthesized string constant");
4117 /* Digest the parser output INIT as an initializer for type TYPE.
4118 Return a C expression of type TYPE to represent the initial value.
4120 If INIT is a string constant, STRICT_STRING is true if it is
4121 unparenthesized or we should not warn here for it being parenthesized.
4122 For other types of INIT, STRICT_STRING is not used.
4124 REQUIRE_CONSTANT requests an error if non-constant initializers or
4125 elements are seen. */
4127 static tree
4128 digest_init (tree type, tree init, bool strict_string, int require_constant)
4130 enum tree_code code = TREE_CODE (type);
4131 tree inside_init = init;
4133 if (type == error_mark_node
4134 || init == error_mark_node
4135 || TREE_TYPE (init) == error_mark_node)
4136 return error_mark_node;
4138 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4139 /* Do not use STRIP_NOPS here. We do not want an enumerator
4140 whose value is 0 to count as a null pointer constant. */
4141 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4142 inside_init = TREE_OPERAND (init, 0);
4144 inside_init = fold (inside_init);
4146 /* Initialization of an array of chars from a string constant
4147 optionally enclosed in braces. */
4149 if (code == ARRAY_TYPE && inside_init
4150 && TREE_CODE (inside_init) == STRING_CST)
4152 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4153 /* Note that an array could be both an array of character type
4154 and an array of wchar_t if wchar_t is signed char or unsigned
4155 char. */
4156 bool char_array = (typ1 == char_type_node
4157 || typ1 == signed_char_type_node
4158 || typ1 == unsigned_char_type_node);
4159 bool wchar_array = !!comptypes (typ1, wchar_type_node);
4160 if (char_array || wchar_array)
4162 struct c_expr expr;
4163 bool char_string;
4164 expr.value = inside_init;
4165 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4166 maybe_warn_string_init (type, expr);
4168 char_string
4169 = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4170 == char_type_node);
4172 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4173 TYPE_MAIN_VARIANT (type)))
4174 return inside_init;
4176 if (!wchar_array && !char_string)
4178 error_init ("char-array initialized from wide string");
4179 return error_mark_node;
4181 if (char_string && !char_array)
4183 error_init ("wchar_t-array initialized from non-wide string");
4184 return error_mark_node;
4187 TREE_TYPE (inside_init) = type;
4188 if (TYPE_DOMAIN (type) != 0
4189 && TYPE_SIZE (type) != 0
4190 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4191 /* Subtract 1 (or sizeof (wchar_t))
4192 because it's ok to ignore the terminating null char
4193 that is counted in the length of the constant. */
4194 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4195 TREE_STRING_LENGTH (inside_init)
4196 - ((TYPE_PRECISION (typ1)
4197 != TYPE_PRECISION (char_type_node))
4198 ? (TYPE_PRECISION (wchar_type_node)
4199 / BITS_PER_UNIT)
4200 : 1)))
4201 pedwarn_init ("initializer-string for array of chars is too long");
4203 return inside_init;
4205 else if (INTEGRAL_TYPE_P (typ1))
4207 error_init ("array of inappropriate type initialized "
4208 "from string constant");
4209 return error_mark_node;
4213 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4214 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4215 below and handle as a constructor. */
4216 if (code == VECTOR_TYPE
4217 && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
4218 && vector_types_convertible_p (TREE_TYPE (inside_init), type)
4219 && TREE_CONSTANT (inside_init))
4221 if (TREE_CODE (inside_init) == VECTOR_CST
4222 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4223 TYPE_MAIN_VARIANT (type)))
4224 return inside_init;
4225 else
4226 return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
4229 /* Any type can be initialized
4230 from an expression of the same type, optionally with braces. */
4232 if (inside_init && TREE_TYPE (inside_init) != 0
4233 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4234 TYPE_MAIN_VARIANT (type))
4235 || (code == ARRAY_TYPE
4236 && comptypes (TREE_TYPE (inside_init), type))
4237 || (code == VECTOR_TYPE
4238 && comptypes (TREE_TYPE (inside_init), type))
4239 || (code == POINTER_TYPE
4240 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4241 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4242 TREE_TYPE (type)))
4243 || (code == POINTER_TYPE
4244 && TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE
4245 && comptypes (TREE_TYPE (inside_init),
4246 TREE_TYPE (type)))))
4248 if (code == POINTER_TYPE)
4250 inside_init = default_function_array_conversion (inside_init);
4252 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4254 error_init ("invalid use of non-lvalue array");
4255 return error_mark_node;
4259 if (code == VECTOR_TYPE)
4260 /* Although the types are compatible, we may require a
4261 conversion. */
4262 inside_init = convert (type, inside_init);
4264 if (require_constant && !flag_isoc99
4265 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4267 /* As an extension, allow initializing objects with static storage
4268 duration with compound literals (which are then treated just as
4269 the brace enclosed list they contain). */
4270 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4271 inside_init = DECL_INITIAL (decl);
4274 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4275 && TREE_CODE (inside_init) != CONSTRUCTOR)
4277 error_init ("array initialized from non-constant array expression");
4278 return error_mark_node;
4281 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4282 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4284 /* Compound expressions can only occur here if -pedantic or
4285 -pedantic-errors is specified. In the later case, we always want
4286 an error. In the former case, we simply want a warning. */
4287 if (require_constant && pedantic
4288 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4290 inside_init
4291 = valid_compound_expr_initializer (inside_init,
4292 TREE_TYPE (inside_init));
4293 if (inside_init == error_mark_node)
4294 error_init ("initializer element is not constant");
4295 else
4296 pedwarn_init ("initializer element is not constant");
4297 if (flag_pedantic_errors)
4298 inside_init = error_mark_node;
4300 else if (require_constant
4301 && !initializer_constant_valid_p (inside_init,
4302 TREE_TYPE (inside_init)))
4304 error_init ("initializer element is not constant");
4305 inside_init = error_mark_node;
4308 return inside_init;
4311 /* Handle scalar types, including conversions. */
4313 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4314 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
4315 || code == VECTOR_TYPE)
4317 /* Note that convert_for_assignment calls default_conversion
4318 for arrays and functions. We must not call it in the
4319 case where inside_init is a null pointer constant. */
4320 inside_init
4321 = convert_for_assignment (type, init, ic_init,
4322 NULL_TREE, NULL_TREE, 0);
4324 /* Check to see if we have already given an error message. */
4325 if (inside_init == error_mark_node)
4327 else if (require_constant && !TREE_CONSTANT (inside_init))
4329 error_init ("initializer element is not constant");
4330 inside_init = error_mark_node;
4332 else if (require_constant
4333 && !initializer_constant_valid_p (inside_init,
4334 TREE_TYPE (inside_init)))
4336 error_init ("initializer element is not computable at load time");
4337 inside_init = error_mark_node;
4340 return inside_init;
4343 /* Come here only for records and arrays. */
4345 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4347 error_init ("variable-sized object may not be initialized");
4348 return error_mark_node;
4351 error_init ("invalid initializer");
4352 return error_mark_node;
4355 /* Handle initializers that use braces. */
4357 /* Type of object we are accumulating a constructor for.
4358 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4359 static tree constructor_type;
4361 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4362 left to fill. */
4363 static tree constructor_fields;
4365 /* For an ARRAY_TYPE, this is the specified index
4366 at which to store the next element we get. */
4367 static tree constructor_index;
4369 /* For an ARRAY_TYPE, this is the maximum index. */
4370 static tree constructor_max_index;
4372 /* For a RECORD_TYPE, this is the first field not yet written out. */
4373 static tree constructor_unfilled_fields;
4375 /* For an ARRAY_TYPE, this is the index of the first element
4376 not yet written out. */
4377 static tree constructor_unfilled_index;
4379 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4380 This is so we can generate gaps between fields, when appropriate. */
4381 static tree constructor_bit_index;
4383 /* If we are saving up the elements rather than allocating them,
4384 this is the list of elements so far (in reverse order,
4385 most recent first). */
4386 static tree constructor_elements;
4388 /* 1 if constructor should be incrementally stored into a constructor chain,
4389 0 if all the elements should be kept in AVL tree. */
4390 static int constructor_incremental;
4392 /* 1 if so far this constructor's elements are all compile-time constants. */
4393 static int constructor_constant;
4395 /* 1 if so far this constructor's elements are all valid address constants. */
4396 static int constructor_simple;
4398 /* 1 if this constructor is erroneous so far. */
4399 static int constructor_erroneous;
4401 /* Structure for managing pending initializer elements, organized as an
4402 AVL tree. */
4404 struct init_node
4406 struct init_node *left, *right;
4407 struct init_node *parent;
4408 int balance;
4409 tree purpose;
4410 tree value;
4413 /* Tree of pending elements at this constructor level.
4414 These are elements encountered out of order
4415 which belong at places we haven't reached yet in actually
4416 writing the output.
4417 Will never hold tree nodes across GC runs. */
4418 static struct init_node *constructor_pending_elts;
4420 /* The SPELLING_DEPTH of this constructor. */
4421 static int constructor_depth;
4423 /* 0 if implicitly pushing constructor levels is allowed. */
4424 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4426 /* DECL node for which an initializer is being read.
4427 0 means we are reading a constructor expression
4428 such as (struct foo) {...}. */
4429 static tree constructor_decl;
4431 /* Nonzero if this is an initializer for a top-level decl. */
4432 static int constructor_top_level;
4434 /* Nonzero if there were any member designators in this initializer. */
4435 static int constructor_designated;
4437 /* Nesting depth of designator list. */
4438 static int designator_depth;
4440 /* Nonzero if there were diagnosed errors in this designator list. */
4441 static int designator_errorneous;
4444 /* This stack has a level for each implicit or explicit level of
4445 structuring in the initializer, including the outermost one. It
4446 saves the values of most of the variables above. */
4448 struct constructor_range_stack;
4450 struct constructor_stack
4452 struct constructor_stack *next;
4453 tree type;
4454 tree fields;
4455 tree index;
4456 tree max_index;
4457 tree unfilled_index;
4458 tree unfilled_fields;
4459 tree bit_index;
4460 tree elements;
4461 struct init_node *pending_elts;
4462 int offset;
4463 int depth;
4464 /* If value nonzero, this value should replace the entire
4465 constructor at this level. */
4466 struct c_expr replacement_value;
4467 struct constructor_range_stack *range_stack;
4468 char constant;
4469 char simple;
4470 char implicit;
4471 char erroneous;
4472 char outer;
4473 char incremental;
4474 char designated;
4477 struct constructor_stack *constructor_stack;
4479 /* This stack represents designators from some range designator up to
4480 the last designator in the list. */
4482 struct constructor_range_stack
4484 struct constructor_range_stack *next, *prev;
4485 struct constructor_stack *stack;
4486 tree range_start;
4487 tree index;
4488 tree range_end;
4489 tree fields;
4492 struct constructor_range_stack *constructor_range_stack;
4494 /* This stack records separate initializers that are nested.
4495 Nested initializers can't happen in ANSI C, but GNU C allows them
4496 in cases like { ... (struct foo) { ... } ... }. */
4498 struct initializer_stack
4500 struct initializer_stack *next;
4501 tree decl;
4502 struct constructor_stack *constructor_stack;
4503 struct constructor_range_stack *constructor_range_stack;
4504 tree elements;
4505 struct spelling *spelling;
4506 struct spelling *spelling_base;
4507 int spelling_size;
4508 char top_level;
4509 char require_constant_value;
4510 char require_constant_elements;
4513 struct initializer_stack *initializer_stack;
4515 /* Prepare to parse and output the initializer for variable DECL. */
4517 void
4518 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
4520 const char *locus;
4521 struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
4523 p->decl = constructor_decl;
4524 p->require_constant_value = require_constant_value;
4525 p->require_constant_elements = require_constant_elements;
4526 p->constructor_stack = constructor_stack;
4527 p->constructor_range_stack = constructor_range_stack;
4528 p->elements = constructor_elements;
4529 p->spelling = spelling;
4530 p->spelling_base = spelling_base;
4531 p->spelling_size = spelling_size;
4532 p->top_level = constructor_top_level;
4533 p->next = initializer_stack;
4534 initializer_stack = p;
4536 constructor_decl = decl;
4537 constructor_designated = 0;
4538 constructor_top_level = top_level;
4540 if (decl != 0)
4542 require_constant_value = TREE_STATIC (decl);
4543 require_constant_elements
4544 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4545 /* For a scalar, you can always use any value to initialize,
4546 even within braces. */
4547 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4548 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4549 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4550 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4551 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4553 else
4555 require_constant_value = 0;
4556 require_constant_elements = 0;
4557 locus = "(anonymous)";
4560 constructor_stack = 0;
4561 constructor_range_stack = 0;
4563 missing_braces_mentioned = 0;
4565 spelling_base = 0;
4566 spelling_size = 0;
4567 RESTORE_SPELLING_DEPTH (0);
4569 if (locus)
4570 push_string (locus);
4573 void
4574 finish_init (void)
4576 struct initializer_stack *p = initializer_stack;
4578 /* Free the whole constructor stack of this initializer. */
4579 while (constructor_stack)
4581 struct constructor_stack *q = constructor_stack;
4582 constructor_stack = q->next;
4583 free (q);
4586 gcc_assert (!constructor_range_stack);
4588 /* Pop back to the data of the outer initializer (if any). */
4589 free (spelling_base);
4591 constructor_decl = p->decl;
4592 require_constant_value = p->require_constant_value;
4593 require_constant_elements = p->require_constant_elements;
4594 constructor_stack = p->constructor_stack;
4595 constructor_range_stack = p->constructor_range_stack;
4596 constructor_elements = p->elements;
4597 spelling = p->spelling;
4598 spelling_base = p->spelling_base;
4599 spelling_size = p->spelling_size;
4600 constructor_top_level = p->top_level;
4601 initializer_stack = p->next;
4602 free (p);
4605 /* Call here when we see the initializer is surrounded by braces.
4606 This is instead of a call to push_init_level;
4607 it is matched by a call to pop_init_level.
4609 TYPE is the type to initialize, for a constructor expression.
4610 For an initializer for a decl, TYPE is zero. */
4612 void
4613 really_start_incremental_init (tree type)
4615 struct constructor_stack *p = XNEW (struct constructor_stack);
4617 if (type == 0)
4618 type = TREE_TYPE (constructor_decl);
4620 if (targetm.vector_opaque_p (type))
4621 error ("opaque vector types cannot be initialized");
4623 p->type = constructor_type;
4624 p->fields = constructor_fields;
4625 p->index = constructor_index;
4626 p->max_index = constructor_max_index;
4627 p->unfilled_index = constructor_unfilled_index;
4628 p->unfilled_fields = constructor_unfilled_fields;
4629 p->bit_index = constructor_bit_index;
4630 p->elements = constructor_elements;
4631 p->constant = constructor_constant;
4632 p->simple = constructor_simple;
4633 p->erroneous = constructor_erroneous;
4634 p->pending_elts = constructor_pending_elts;
4635 p->depth = constructor_depth;
4636 p->replacement_value.value = 0;
4637 p->replacement_value.original_code = ERROR_MARK;
4638 p->implicit = 0;
4639 p->range_stack = 0;
4640 p->outer = 0;
4641 p->incremental = constructor_incremental;
4642 p->designated = constructor_designated;
4643 p->next = 0;
4644 constructor_stack = p;
4646 constructor_constant = 1;
4647 constructor_simple = 1;
4648 constructor_depth = SPELLING_DEPTH ();
4649 constructor_elements = 0;
4650 constructor_pending_elts = 0;
4651 constructor_type = type;
4652 constructor_incremental = 1;
4653 constructor_designated = 0;
4654 designator_depth = 0;
4655 designator_errorneous = 0;
4657 if (TREE_CODE (constructor_type) == RECORD_TYPE
4658 || TREE_CODE (constructor_type) == UNION_TYPE)
4660 constructor_fields = TYPE_FIELDS (constructor_type);
4661 /* Skip any nameless bit fields at the beginning. */
4662 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4663 && DECL_NAME (constructor_fields) == 0)
4664 constructor_fields = TREE_CHAIN (constructor_fields);
4666 constructor_unfilled_fields = constructor_fields;
4667 constructor_bit_index = bitsize_zero_node;
4669 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4671 if (TYPE_DOMAIN (constructor_type))
4673 constructor_max_index
4674 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4676 /* Detect non-empty initializations of zero-length arrays. */
4677 if (constructor_max_index == NULL_TREE
4678 && TYPE_SIZE (constructor_type))
4679 constructor_max_index = build_int_cst (NULL_TREE, -1);
4681 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4682 to initialize VLAs will cause a proper error; avoid tree
4683 checking errors as well by setting a safe value. */
4684 if (constructor_max_index
4685 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4686 constructor_max_index = build_int_cst (NULL_TREE, -1);
4688 constructor_index
4689 = convert (bitsizetype,
4690 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4692 else
4693 constructor_index = bitsize_zero_node;
4695 constructor_unfilled_index = constructor_index;
4697 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4699 /* Vectors are like simple fixed-size arrays. */
4700 constructor_max_index =
4701 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4702 constructor_index = convert (bitsizetype, bitsize_zero_node);
4703 constructor_unfilled_index = constructor_index;
4705 else
4707 /* Handle the case of int x = {5}; */
4708 constructor_fields = constructor_type;
4709 constructor_unfilled_fields = constructor_type;
4713 /* Push down into a subobject, for initialization.
4714 If this is for an explicit set of braces, IMPLICIT is 0.
4715 If it is because the next element belongs at a lower level,
4716 IMPLICIT is 1 (or 2 if the push is because of designator list). */
4718 void
4719 push_init_level (int implicit)
4721 struct constructor_stack *p;
4722 tree value = NULL_TREE;
4724 /* If we've exhausted any levels that didn't have braces,
4725 pop them now. */
4726 while (constructor_stack->implicit)
4728 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4729 || TREE_CODE (constructor_type) == UNION_TYPE)
4730 && constructor_fields == 0)
4731 process_init_element (pop_init_level (1));
4732 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4733 && constructor_max_index
4734 && tree_int_cst_lt (constructor_max_index, constructor_index))
4735 process_init_element (pop_init_level (1));
4736 else
4737 break;
4740 /* Unless this is an explicit brace, we need to preserve previous
4741 content if any. */
4742 if (implicit)
4744 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4745 || TREE_CODE (constructor_type) == UNION_TYPE)
4746 && constructor_fields)
4747 value = find_init_member (constructor_fields);
4748 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4749 value = find_init_member (constructor_index);
4752 p = XNEW (struct constructor_stack);
4753 p->type = constructor_type;
4754 p->fields = constructor_fields;
4755 p->index = constructor_index;
4756 p->max_index = constructor_max_index;
4757 p->unfilled_index = constructor_unfilled_index;
4758 p->unfilled_fields = constructor_unfilled_fields;
4759 p->bit_index = constructor_bit_index;
4760 p->elements = constructor_elements;
4761 p->constant = constructor_constant;
4762 p->simple = constructor_simple;
4763 p->erroneous = constructor_erroneous;
4764 p->pending_elts = constructor_pending_elts;
4765 p->depth = constructor_depth;
4766 p->replacement_value.value = 0;
4767 p->replacement_value.original_code = ERROR_MARK;
4768 p->implicit = implicit;
4769 p->outer = 0;
4770 p->incremental = constructor_incremental;
4771 p->designated = constructor_designated;
4772 p->next = constructor_stack;
4773 p->range_stack = 0;
4774 constructor_stack = p;
4776 constructor_constant = 1;
4777 constructor_simple = 1;
4778 constructor_depth = SPELLING_DEPTH ();
4779 constructor_elements = 0;
4780 constructor_incremental = 1;
4781 constructor_designated = 0;
4782 constructor_pending_elts = 0;
4783 if (!implicit)
4785 p->range_stack = constructor_range_stack;
4786 constructor_range_stack = 0;
4787 designator_depth = 0;
4788 designator_errorneous = 0;
4791 /* Don't die if an entire brace-pair level is superfluous
4792 in the containing level. */
4793 if (constructor_type == 0)
4795 else if (TREE_CODE (constructor_type) == RECORD_TYPE
4796 || TREE_CODE (constructor_type) == UNION_TYPE)
4798 /* Don't die if there are extra init elts at the end. */
4799 if (constructor_fields == 0)
4800 constructor_type = 0;
4801 else
4803 constructor_type = TREE_TYPE (constructor_fields);
4804 push_member_name (constructor_fields);
4805 constructor_depth++;
4808 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4810 constructor_type = TREE_TYPE (constructor_type);
4811 push_array_bounds (tree_low_cst (constructor_index, 0));
4812 constructor_depth++;
4815 if (constructor_type == 0)
4817 error_init ("extra brace group at end of initializer");
4818 constructor_fields = 0;
4819 constructor_unfilled_fields = 0;
4820 return;
4823 if (value && TREE_CODE (value) == CONSTRUCTOR)
4825 constructor_constant = TREE_CONSTANT (value);
4826 constructor_simple = TREE_STATIC (value);
4827 constructor_elements = CONSTRUCTOR_ELTS (value);
4828 if (constructor_elements
4829 && (TREE_CODE (constructor_type) == RECORD_TYPE
4830 || TREE_CODE (constructor_type) == ARRAY_TYPE))
4831 set_nonincremental_init ();
4834 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
4836 missing_braces_mentioned = 1;
4837 warning_init ("missing braces around initializer");
4840 if (TREE_CODE (constructor_type) == RECORD_TYPE
4841 || TREE_CODE (constructor_type) == UNION_TYPE)
4843 constructor_fields = TYPE_FIELDS (constructor_type);
4844 /* Skip any nameless bit fields at the beginning. */
4845 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4846 && DECL_NAME (constructor_fields) == 0)
4847 constructor_fields = TREE_CHAIN (constructor_fields);
4849 constructor_unfilled_fields = constructor_fields;
4850 constructor_bit_index = bitsize_zero_node;
4852 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4854 /* Vectors are like simple fixed-size arrays. */
4855 constructor_max_index =
4856 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4857 constructor_index = convert (bitsizetype, integer_zero_node);
4858 constructor_unfilled_index = constructor_index;
4860 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4862 if (TYPE_DOMAIN (constructor_type))
4864 constructor_max_index
4865 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4867 /* Detect non-empty initializations of zero-length arrays. */
4868 if (constructor_max_index == NULL_TREE
4869 && TYPE_SIZE (constructor_type))
4870 constructor_max_index = build_int_cst (NULL_TREE, -1);
4872 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4873 to initialize VLAs will cause a proper error; avoid tree
4874 checking errors as well by setting a safe value. */
4875 if (constructor_max_index
4876 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4877 constructor_max_index = build_int_cst (NULL_TREE, -1);
4879 constructor_index
4880 = convert (bitsizetype,
4881 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4883 else
4884 constructor_index = bitsize_zero_node;
4886 constructor_unfilled_index = constructor_index;
4887 if (value && TREE_CODE (value) == STRING_CST)
4889 /* We need to split the char/wchar array into individual
4890 characters, so that we don't have to special case it
4891 everywhere. */
4892 set_nonincremental_init_from_string (value);
4895 else
4897 warning_init ("braces around scalar initializer");
4898 constructor_fields = constructor_type;
4899 constructor_unfilled_fields = constructor_type;
4903 /* At the end of an implicit or explicit brace level,
4904 finish up that level of constructor. If a single expression
4905 with redundant braces initialized that level, return the
4906 c_expr structure for that expression. Otherwise, the original_code
4907 element is set to ERROR_MARK.
4908 If we were outputting the elements as they are read, return 0 as the value
4909 from inner levels (process_init_element ignores that),
4910 but return error_mark_node as the value from the outermost level
4911 (that's what we want to put in DECL_INITIAL).
4912 Otherwise, return a CONSTRUCTOR expression as the value. */
4914 struct c_expr
4915 pop_init_level (int implicit)
4917 struct constructor_stack *p;
4918 struct c_expr ret;
4919 ret.value = 0;
4920 ret.original_code = ERROR_MARK;
4922 if (implicit == 0)
4924 /* When we come to an explicit close brace,
4925 pop any inner levels that didn't have explicit braces. */
4926 while (constructor_stack->implicit)
4927 process_init_element (pop_init_level (1));
4929 gcc_assert (!constructor_range_stack);
4932 /* Now output all pending elements. */
4933 constructor_incremental = 1;
4934 output_pending_init_elements (1);
4936 p = constructor_stack;
4938 /* Error for initializing a flexible array member, or a zero-length
4939 array member in an inappropriate context. */
4940 if (constructor_type && constructor_fields
4941 && TREE_CODE (constructor_type) == ARRAY_TYPE
4942 && TYPE_DOMAIN (constructor_type)
4943 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
4945 /* Silently discard empty initializations. The parser will
4946 already have pedwarned for empty brackets. */
4947 if (integer_zerop (constructor_unfilled_index))
4948 constructor_type = NULL_TREE;
4949 else
4951 gcc_assert (!TYPE_SIZE (constructor_type));
4953 if (constructor_depth > 2)
4954 error_init ("initialization of flexible array member in a nested context");
4955 else if (pedantic)
4956 pedwarn_init ("initialization of a flexible array member");
4958 /* We have already issued an error message for the existence
4959 of a flexible array member not at the end of the structure.
4960 Discard the initializer so that we do not abort later. */
4961 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
4962 constructor_type = NULL_TREE;
4966 /* Warn when some struct elements are implicitly initialized to zero. */
4967 if (warn_missing_field_initializers
4968 && constructor_type
4969 && TREE_CODE (constructor_type) == RECORD_TYPE
4970 && constructor_unfilled_fields)
4972 /* Do not warn for flexible array members or zero-length arrays. */
4973 while (constructor_unfilled_fields
4974 && (!DECL_SIZE (constructor_unfilled_fields)
4975 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
4976 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
4978 /* Do not warn if this level of the initializer uses member
4979 designators; it is likely to be deliberate. */
4980 if (constructor_unfilled_fields && !constructor_designated)
4982 push_member_name (constructor_unfilled_fields);
4983 warning_init ("missing initializer");
4984 RESTORE_SPELLING_DEPTH (constructor_depth);
4988 /* Pad out the end of the structure. */
4989 if (p->replacement_value.value)
4990 /* If this closes a superfluous brace pair,
4991 just pass out the element between them. */
4992 ret = p->replacement_value;
4993 else if (constructor_type == 0)
4995 else if (TREE_CODE (constructor_type) != RECORD_TYPE
4996 && TREE_CODE (constructor_type) != UNION_TYPE
4997 && TREE_CODE (constructor_type) != ARRAY_TYPE
4998 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5000 /* A nonincremental scalar initializer--just return
5001 the element, after verifying there is just one. */
5002 if (constructor_elements == 0)
5004 if (!constructor_erroneous)
5005 error_init ("empty scalar initializer");
5006 ret.value = error_mark_node;
5008 else if (TREE_CHAIN (constructor_elements) != 0)
5010 error_init ("extra elements in scalar initializer");
5011 ret.value = TREE_VALUE (constructor_elements);
5013 else
5014 ret.value = TREE_VALUE (constructor_elements);
5016 else
5018 if (constructor_erroneous)
5019 ret.value = error_mark_node;
5020 else
5022 ret.value = build_constructor (constructor_type,
5023 nreverse (constructor_elements));
5024 if (constructor_constant)
5025 TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
5026 if (constructor_constant && constructor_simple)
5027 TREE_STATIC (ret.value) = 1;
5031 constructor_type = p->type;
5032 constructor_fields = p->fields;
5033 constructor_index = p->index;
5034 constructor_max_index = p->max_index;
5035 constructor_unfilled_index = p->unfilled_index;
5036 constructor_unfilled_fields = p->unfilled_fields;
5037 constructor_bit_index = p->bit_index;
5038 constructor_elements = p->elements;
5039 constructor_constant = p->constant;
5040 constructor_simple = p->simple;
5041 constructor_erroneous = p->erroneous;
5042 constructor_incremental = p->incremental;
5043 constructor_designated = p->designated;
5044 constructor_pending_elts = p->pending_elts;
5045 constructor_depth = p->depth;
5046 if (!p->implicit)
5047 constructor_range_stack = p->range_stack;
5048 RESTORE_SPELLING_DEPTH (constructor_depth);
5050 constructor_stack = p->next;
5051 free (p);
5053 if (ret.value == 0)
5055 if (constructor_stack == 0)
5057 ret.value = error_mark_node;
5058 return ret;
5060 return ret;
5062 return ret;
5065 /* Common handling for both array range and field name designators.
5066 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5068 static int
5069 set_designator (int array)
5071 tree subtype;
5072 enum tree_code subcode;
5074 /* Don't die if an entire brace-pair level is superfluous
5075 in the containing level. */
5076 if (constructor_type == 0)
5077 return 1;
5079 /* If there were errors in this designator list already, bail out
5080 silently. */
5081 if (designator_errorneous)
5082 return 1;
5084 if (!designator_depth)
5086 gcc_assert (!constructor_range_stack);
5088 /* Designator list starts at the level of closest explicit
5089 braces. */
5090 while (constructor_stack->implicit)
5091 process_init_element (pop_init_level (1));
5092 constructor_designated = 1;
5093 return 0;
5096 if (constructor_no_implicit)
5098 error_init ("initialization designators may not nest");
5099 return 1;
5102 switch (TREE_CODE (constructor_type))
5104 case RECORD_TYPE:
5105 case UNION_TYPE:
5106 subtype = TREE_TYPE (constructor_fields);
5107 if (subtype != error_mark_node)
5108 subtype = TYPE_MAIN_VARIANT (subtype);
5109 break;
5110 case ARRAY_TYPE:
5111 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5112 break;
5113 default:
5114 gcc_unreachable ();
5117 subcode = TREE_CODE (subtype);
5118 if (array && subcode != ARRAY_TYPE)
5120 error_init ("array index in non-array initializer");
5121 return 1;
5123 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5125 error_init ("field name not in record or union initializer");
5126 return 1;
5129 constructor_designated = 1;
5130 push_init_level (2);
5131 return 0;
5134 /* If there are range designators in designator list, push a new designator
5135 to constructor_range_stack. RANGE_END is end of such stack range or
5136 NULL_TREE if there is no range designator at this level. */
5138 static void
5139 push_range_stack (tree range_end)
5141 struct constructor_range_stack *p;
5143 p = GGC_NEW (struct constructor_range_stack);
5144 p->prev = constructor_range_stack;
5145 p->next = 0;
5146 p->fields = constructor_fields;
5147 p->range_start = constructor_index;
5148 p->index = constructor_index;
5149 p->stack = constructor_stack;
5150 p->range_end = range_end;
5151 if (constructor_range_stack)
5152 constructor_range_stack->next = p;
5153 constructor_range_stack = p;
5156 /* Within an array initializer, specify the next index to be initialized.
5157 FIRST is that index. If LAST is nonzero, then initialize a range
5158 of indices, running from FIRST through LAST. */
5160 void
5161 set_init_index (tree first, tree last)
5163 if (set_designator (1))
5164 return;
5166 designator_errorneous = 1;
5168 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5169 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5171 error_init ("array index in initializer not of integer type");
5172 return;
5175 while ((TREE_CODE (first) == NOP_EXPR
5176 || TREE_CODE (first) == CONVERT_EXPR
5177 || TREE_CODE (first) == NON_LVALUE_EXPR)
5178 && (TYPE_MODE (TREE_TYPE (first))
5179 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5180 first = TREE_OPERAND (first, 0);
5182 if (last)
5183 while ((TREE_CODE (last) == NOP_EXPR
5184 || TREE_CODE (last) == CONVERT_EXPR
5185 || TREE_CODE (last) == NON_LVALUE_EXPR)
5186 && (TYPE_MODE (TREE_TYPE (last))
5187 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5188 last = TREE_OPERAND (last, 0);
5190 if (TREE_CODE (first) != INTEGER_CST)
5191 error_init ("nonconstant array index in initializer");
5192 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5193 error_init ("nonconstant array index in initializer");
5194 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5195 error_init ("array index in non-array initializer");
5196 else if (tree_int_cst_sgn (first) == -1)
5197 error_init ("array index in initializer exceeds array bounds");
5198 else if (constructor_max_index
5199 && tree_int_cst_lt (constructor_max_index, first))
5200 error_init ("array index in initializer exceeds array bounds");
5201 else
5203 constructor_index = convert (bitsizetype, first);
5205 if (last)
5207 if (tree_int_cst_equal (first, last))
5208 last = 0;
5209 else if (tree_int_cst_lt (last, first))
5211 error_init ("empty index range in initializer");
5212 last = 0;
5214 else
5216 last = convert (bitsizetype, last);
5217 if (constructor_max_index != 0
5218 && tree_int_cst_lt (constructor_max_index, last))
5220 error_init ("array index range in initializer exceeds array bounds");
5221 last = 0;
5226 designator_depth++;
5227 designator_errorneous = 0;
5228 if (constructor_range_stack || last)
5229 push_range_stack (last);
5233 /* Within a struct initializer, specify the next field to be initialized. */
5235 void
5236 set_init_label (tree fieldname)
5238 tree tail;
5240 if (set_designator (0))
5241 return;
5243 designator_errorneous = 1;
5245 if (TREE_CODE (constructor_type) != RECORD_TYPE
5246 && TREE_CODE (constructor_type) != UNION_TYPE)
5248 error_init ("field name not in record or union initializer");
5249 return;
5252 for (tail = TYPE_FIELDS (constructor_type); tail;
5253 tail = TREE_CHAIN (tail))
5255 if (DECL_NAME (tail) == fieldname)
5256 break;
5259 if (tail == 0)
5260 error ("unknown field %qs specified in initializer",
5261 IDENTIFIER_POINTER (fieldname));
5262 else
5264 constructor_fields = tail;
5265 designator_depth++;
5266 designator_errorneous = 0;
5267 if (constructor_range_stack)
5268 push_range_stack (NULL_TREE);
5272 /* Add a new initializer to the tree of pending initializers. PURPOSE
5273 identifies the initializer, either array index or field in a structure.
5274 VALUE is the value of that index or field. */
5276 static void
5277 add_pending_init (tree purpose, tree value)
5279 struct init_node *p, **q, *r;
5281 q = &constructor_pending_elts;
5282 p = 0;
5284 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5286 while (*q != 0)
5288 p = *q;
5289 if (tree_int_cst_lt (purpose, p->purpose))
5290 q = &p->left;
5291 else if (tree_int_cst_lt (p->purpose, purpose))
5292 q = &p->right;
5293 else
5295 if (TREE_SIDE_EFFECTS (p->value))
5296 warning_init ("initialized field with side-effects overwritten");
5297 p->value = value;
5298 return;
5302 else
5304 tree bitpos;
5306 bitpos = bit_position (purpose);
5307 while (*q != NULL)
5309 p = *q;
5310 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5311 q = &p->left;
5312 else if (p->purpose != purpose)
5313 q = &p->right;
5314 else
5316 if (TREE_SIDE_EFFECTS (p->value))
5317 warning_init ("initialized field with side-effects overwritten");
5318 p->value = value;
5319 return;
5324 r = GGC_NEW (struct init_node);
5325 r->purpose = purpose;
5326 r->value = value;
5328 *q = r;
5329 r->parent = p;
5330 r->left = 0;
5331 r->right = 0;
5332 r->balance = 0;
5334 while (p)
5336 struct init_node *s;
5338 if (r == p->left)
5340 if (p->balance == 0)
5341 p->balance = -1;
5342 else if (p->balance < 0)
5344 if (r->balance < 0)
5346 /* L rotation. */
5347 p->left = r->right;
5348 if (p->left)
5349 p->left->parent = p;
5350 r->right = p;
5352 p->balance = 0;
5353 r->balance = 0;
5355 s = p->parent;
5356 p->parent = r;
5357 r->parent = s;
5358 if (s)
5360 if (s->left == p)
5361 s->left = r;
5362 else
5363 s->right = r;
5365 else
5366 constructor_pending_elts = r;
5368 else
5370 /* LR rotation. */
5371 struct init_node *t = r->right;
5373 r->right = t->left;
5374 if (r->right)
5375 r->right->parent = r;
5376 t->left = r;
5378 p->left = t->right;
5379 if (p->left)
5380 p->left->parent = p;
5381 t->right = p;
5383 p->balance = t->balance < 0;
5384 r->balance = -(t->balance > 0);
5385 t->balance = 0;
5387 s = p->parent;
5388 p->parent = t;
5389 r->parent = t;
5390 t->parent = s;
5391 if (s)
5393 if (s->left == p)
5394 s->left = t;
5395 else
5396 s->right = t;
5398 else
5399 constructor_pending_elts = t;
5401 break;
5403 else
5405 /* p->balance == +1; growth of left side balances the node. */
5406 p->balance = 0;
5407 break;
5410 else /* r == p->right */
5412 if (p->balance == 0)
5413 /* Growth propagation from right side. */
5414 p->balance++;
5415 else if (p->balance > 0)
5417 if (r->balance > 0)
5419 /* R rotation. */
5420 p->right = r->left;
5421 if (p->right)
5422 p->right->parent = p;
5423 r->left = p;
5425 p->balance = 0;
5426 r->balance = 0;
5428 s = p->parent;
5429 p->parent = r;
5430 r->parent = s;
5431 if (s)
5433 if (s->left == p)
5434 s->left = r;
5435 else
5436 s->right = r;
5438 else
5439 constructor_pending_elts = r;
5441 else /* r->balance == -1 */
5443 /* RL rotation */
5444 struct init_node *t = r->left;
5446 r->left = t->right;
5447 if (r->left)
5448 r->left->parent = r;
5449 t->right = r;
5451 p->right = t->left;
5452 if (p->right)
5453 p->right->parent = p;
5454 t->left = p;
5456 r->balance = (t->balance < 0);
5457 p->balance = -(t->balance > 0);
5458 t->balance = 0;
5460 s = p->parent;
5461 p->parent = t;
5462 r->parent = t;
5463 t->parent = s;
5464 if (s)
5466 if (s->left == p)
5467 s->left = t;
5468 else
5469 s->right = t;
5471 else
5472 constructor_pending_elts = t;
5474 break;
5476 else
5478 /* p->balance == -1; growth of right side balances the node. */
5479 p->balance = 0;
5480 break;
5484 r = p;
5485 p = p->parent;
5489 /* Build AVL tree from a sorted chain. */
5491 static void
5492 set_nonincremental_init (void)
5494 tree chain;
5496 if (TREE_CODE (constructor_type) != RECORD_TYPE
5497 && TREE_CODE (constructor_type) != ARRAY_TYPE)
5498 return;
5500 for (chain = constructor_elements; chain; chain = TREE_CHAIN (chain))
5501 add_pending_init (TREE_PURPOSE (chain), TREE_VALUE (chain));
5502 constructor_elements = 0;
5503 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5505 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5506 /* Skip any nameless bit fields at the beginning. */
5507 while (constructor_unfilled_fields != 0
5508 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5509 && DECL_NAME (constructor_unfilled_fields) == 0)
5510 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5513 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5515 if (TYPE_DOMAIN (constructor_type))
5516 constructor_unfilled_index
5517 = convert (bitsizetype,
5518 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5519 else
5520 constructor_unfilled_index = bitsize_zero_node;
5522 constructor_incremental = 0;
5525 /* Build AVL tree from a string constant. */
5527 static void
5528 set_nonincremental_init_from_string (tree str)
5530 tree value, purpose, type;
5531 HOST_WIDE_INT val[2];
5532 const char *p, *end;
5533 int byte, wchar_bytes, charwidth, bitpos;
5535 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
5537 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5538 == TYPE_PRECISION (char_type_node))
5539 wchar_bytes = 1;
5540 else
5542 gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5543 == TYPE_PRECISION (wchar_type_node));
5544 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5546 charwidth = TYPE_PRECISION (char_type_node);
5547 type = TREE_TYPE (constructor_type);
5548 p = TREE_STRING_POINTER (str);
5549 end = p + TREE_STRING_LENGTH (str);
5551 for (purpose = bitsize_zero_node;
5552 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5553 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
5555 if (wchar_bytes == 1)
5557 val[1] = (unsigned char) *p++;
5558 val[0] = 0;
5560 else
5562 val[0] = 0;
5563 val[1] = 0;
5564 for (byte = 0; byte < wchar_bytes; byte++)
5566 if (BYTES_BIG_ENDIAN)
5567 bitpos = (wchar_bytes - byte - 1) * charwidth;
5568 else
5569 bitpos = byte * charwidth;
5570 val[bitpos < HOST_BITS_PER_WIDE_INT]
5571 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5572 << (bitpos % HOST_BITS_PER_WIDE_INT);
5576 if (!TYPE_UNSIGNED (type))
5578 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5579 if (bitpos < HOST_BITS_PER_WIDE_INT)
5581 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5583 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5584 val[0] = -1;
5587 else if (bitpos == HOST_BITS_PER_WIDE_INT)
5589 if (val[1] < 0)
5590 val[0] = -1;
5592 else if (val[0] & (((HOST_WIDE_INT) 1)
5593 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5594 val[0] |= ((HOST_WIDE_INT) -1)
5595 << (bitpos - HOST_BITS_PER_WIDE_INT);
5598 value = build_int_cst_wide (type, val[1], val[0]);
5599 add_pending_init (purpose, value);
5602 constructor_incremental = 0;
5605 /* Return value of FIELD in pending initializer or zero if the field was
5606 not initialized yet. */
5608 static tree
5609 find_init_member (tree field)
5611 struct init_node *p;
5613 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5615 if (constructor_incremental
5616 && tree_int_cst_lt (field, constructor_unfilled_index))
5617 set_nonincremental_init ();
5619 p = constructor_pending_elts;
5620 while (p)
5622 if (tree_int_cst_lt (field, p->purpose))
5623 p = p->left;
5624 else if (tree_int_cst_lt (p->purpose, field))
5625 p = p->right;
5626 else
5627 return p->value;
5630 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5632 tree bitpos = bit_position (field);
5634 if (constructor_incremental
5635 && (!constructor_unfilled_fields
5636 || tree_int_cst_lt (bitpos,
5637 bit_position (constructor_unfilled_fields))))
5638 set_nonincremental_init ();
5640 p = constructor_pending_elts;
5641 while (p)
5643 if (field == p->purpose)
5644 return p->value;
5645 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5646 p = p->left;
5647 else
5648 p = p->right;
5651 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5653 if (constructor_elements
5654 && TREE_PURPOSE (constructor_elements) == field)
5655 return TREE_VALUE (constructor_elements);
5657 return 0;
5660 /* "Output" the next constructor element.
5661 At top level, really output it to assembler code now.
5662 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5663 TYPE is the data type that the containing data type wants here.
5664 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5665 If VALUE is a string constant, STRICT_STRING is true if it is
5666 unparenthesized or we should not warn here for it being parenthesized.
5667 For other types of VALUE, STRICT_STRING is not used.
5669 PENDING if non-nil means output pending elements that belong
5670 right after this element. (PENDING is normally 1;
5671 it is 0 while outputting pending elements, to avoid recursion.) */
5673 static void
5674 output_init_element (tree value, bool strict_string, tree type, tree field,
5675 int pending)
5677 if (type == error_mark_node)
5679 constructor_erroneous = 1;
5680 return;
5682 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5683 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5684 && !(TREE_CODE (value) == STRING_CST
5685 && TREE_CODE (type) == ARRAY_TYPE
5686 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
5687 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5688 TYPE_MAIN_VARIANT (type))))
5689 value = default_conversion (value);
5691 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5692 && require_constant_value && !flag_isoc99 && pending)
5694 /* As an extension, allow initializing objects with static storage
5695 duration with compound literals (which are then treated just as
5696 the brace enclosed list they contain). */
5697 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5698 value = DECL_INITIAL (decl);
5701 if (value == error_mark_node)
5702 constructor_erroneous = 1;
5703 else if (!TREE_CONSTANT (value))
5704 constructor_constant = 0;
5705 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
5706 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5707 || TREE_CODE (constructor_type) == UNION_TYPE)
5708 && DECL_C_BIT_FIELD (field)
5709 && TREE_CODE (value) != INTEGER_CST))
5710 constructor_simple = 0;
5712 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
5714 if (require_constant_value)
5716 error_init ("initializer element is not constant");
5717 value = error_mark_node;
5719 else if (require_constant_elements)
5720 pedwarn ("initializer element is not computable at load time");
5723 /* If this field is empty (and not at the end of structure),
5724 don't do anything other than checking the initializer. */
5725 if (field
5726 && (TREE_TYPE (field) == error_mark_node
5727 || (COMPLETE_TYPE_P (TREE_TYPE (field))
5728 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5729 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5730 || TREE_CHAIN (field)))))
5731 return;
5733 value = digest_init (type, value, strict_string, require_constant_value);
5734 if (value == error_mark_node)
5736 constructor_erroneous = 1;
5737 return;
5740 /* If this element doesn't come next in sequence,
5741 put it on constructor_pending_elts. */
5742 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5743 && (!constructor_incremental
5744 || !tree_int_cst_equal (field, constructor_unfilled_index)))
5746 if (constructor_incremental
5747 && tree_int_cst_lt (field, constructor_unfilled_index))
5748 set_nonincremental_init ();
5750 add_pending_init (field, value);
5751 return;
5753 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5754 && (!constructor_incremental
5755 || field != constructor_unfilled_fields))
5757 /* We do this for records but not for unions. In a union,
5758 no matter which field is specified, it can be initialized
5759 right away since it starts at the beginning of the union. */
5760 if (constructor_incremental)
5762 if (!constructor_unfilled_fields)
5763 set_nonincremental_init ();
5764 else
5766 tree bitpos, unfillpos;
5768 bitpos = bit_position (field);
5769 unfillpos = bit_position (constructor_unfilled_fields);
5771 if (tree_int_cst_lt (bitpos, unfillpos))
5772 set_nonincremental_init ();
5776 add_pending_init (field, value);
5777 return;
5779 else if (TREE_CODE (constructor_type) == UNION_TYPE
5780 && constructor_elements)
5782 if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements)))
5783 warning_init ("initialized field with side-effects overwritten");
5785 /* We can have just one union field set. */
5786 constructor_elements = 0;
5789 /* Otherwise, output this element either to
5790 constructor_elements or to the assembler file. */
5792 if (field && TREE_CODE (field) == INTEGER_CST)
5793 field = copy_node (field);
5794 constructor_elements
5795 = tree_cons (field, value, constructor_elements);
5797 /* Advance the variable that indicates sequential elements output. */
5798 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5799 constructor_unfilled_index
5800 = size_binop (PLUS_EXPR, constructor_unfilled_index,
5801 bitsize_one_node);
5802 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5804 constructor_unfilled_fields
5805 = TREE_CHAIN (constructor_unfilled_fields);
5807 /* Skip any nameless bit fields. */
5808 while (constructor_unfilled_fields != 0
5809 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5810 && DECL_NAME (constructor_unfilled_fields) == 0)
5811 constructor_unfilled_fields =
5812 TREE_CHAIN (constructor_unfilled_fields);
5814 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5815 constructor_unfilled_fields = 0;
5817 /* Now output any pending elements which have become next. */
5818 if (pending)
5819 output_pending_init_elements (0);
5822 /* Output any pending elements which have become next.
5823 As we output elements, constructor_unfilled_{fields,index}
5824 advances, which may cause other elements to become next;
5825 if so, they too are output.
5827 If ALL is 0, we return when there are
5828 no more pending elements to output now.
5830 If ALL is 1, we output space as necessary so that
5831 we can output all the pending elements. */
5833 static void
5834 output_pending_init_elements (int all)
5836 struct init_node *elt = constructor_pending_elts;
5837 tree next;
5839 retry:
5841 /* Look through the whole pending tree.
5842 If we find an element that should be output now,
5843 output it. Otherwise, set NEXT to the element
5844 that comes first among those still pending. */
5846 next = 0;
5847 while (elt)
5849 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5851 if (tree_int_cst_equal (elt->purpose,
5852 constructor_unfilled_index))
5853 output_init_element (elt->value, true,
5854 TREE_TYPE (constructor_type),
5855 constructor_unfilled_index, 0);
5856 else if (tree_int_cst_lt (constructor_unfilled_index,
5857 elt->purpose))
5859 /* Advance to the next smaller node. */
5860 if (elt->left)
5861 elt = elt->left;
5862 else
5864 /* We have reached the smallest node bigger than the
5865 current unfilled index. Fill the space first. */
5866 next = elt->purpose;
5867 break;
5870 else
5872 /* Advance to the next bigger node. */
5873 if (elt->right)
5874 elt = elt->right;
5875 else
5877 /* We have reached the biggest node in a subtree. Find
5878 the parent of it, which is the next bigger node. */
5879 while (elt->parent && elt->parent->right == elt)
5880 elt = elt->parent;
5881 elt = elt->parent;
5882 if (elt && tree_int_cst_lt (constructor_unfilled_index,
5883 elt->purpose))
5885 next = elt->purpose;
5886 break;
5891 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5892 || TREE_CODE (constructor_type) == UNION_TYPE)
5894 tree ctor_unfilled_bitpos, elt_bitpos;
5896 /* If the current record is complete we are done. */
5897 if (constructor_unfilled_fields == 0)
5898 break;
5900 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
5901 elt_bitpos = bit_position (elt->purpose);
5902 /* We can't compare fields here because there might be empty
5903 fields in between. */
5904 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
5906 constructor_unfilled_fields = elt->purpose;
5907 output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
5908 elt->purpose, 0);
5910 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
5912 /* Advance to the next smaller node. */
5913 if (elt->left)
5914 elt = elt->left;
5915 else
5917 /* We have reached the smallest node bigger than the
5918 current unfilled field. Fill the space first. */
5919 next = elt->purpose;
5920 break;
5923 else
5925 /* Advance to the next bigger node. */
5926 if (elt->right)
5927 elt = elt->right;
5928 else
5930 /* We have reached the biggest node in a subtree. Find
5931 the parent of it, which is the next bigger node. */
5932 while (elt->parent && elt->parent->right == elt)
5933 elt = elt->parent;
5934 elt = elt->parent;
5935 if (elt
5936 && (tree_int_cst_lt (ctor_unfilled_bitpos,
5937 bit_position (elt->purpose))))
5939 next = elt->purpose;
5940 break;
5947 /* Ordinarily return, but not if we want to output all
5948 and there are elements left. */
5949 if (!(all && next != 0))
5950 return;
5952 /* If it's not incremental, just skip over the gap, so that after
5953 jumping to retry we will output the next successive element. */
5954 if (TREE_CODE (constructor_type) == RECORD_TYPE
5955 || TREE_CODE (constructor_type) == UNION_TYPE)
5956 constructor_unfilled_fields = next;
5957 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5958 constructor_unfilled_index = next;
5960 /* ELT now points to the node in the pending tree with the next
5961 initializer to output. */
5962 goto retry;
5965 /* Add one non-braced element to the current constructor level.
5966 This adjusts the current position within the constructor's type.
5967 This may also start or terminate implicit levels
5968 to handle a partly-braced initializer.
5970 Once this has found the correct level for the new element,
5971 it calls output_init_element. */
5973 void
5974 process_init_element (struct c_expr value)
5976 tree orig_value = value.value;
5977 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
5978 bool strict_string = value.original_code == STRING_CST;
5980 designator_depth = 0;
5981 designator_errorneous = 0;
5983 /* Handle superfluous braces around string cst as in
5984 char x[] = {"foo"}; */
5985 if (string_flag
5986 && constructor_type
5987 && TREE_CODE (constructor_type) == ARRAY_TYPE
5988 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
5989 && integer_zerop (constructor_unfilled_index))
5991 if (constructor_stack->replacement_value.value)
5992 error_init ("excess elements in char array initializer");
5993 constructor_stack->replacement_value = value;
5994 return;
5997 if (constructor_stack->replacement_value.value != 0)
5999 error_init ("excess elements in struct initializer");
6000 return;
6003 /* Ignore elements of a brace group if it is entirely superfluous
6004 and has already been diagnosed. */
6005 if (constructor_type == 0)
6006 return;
6008 /* If we've exhausted any levels that didn't have braces,
6009 pop them now. */
6010 while (constructor_stack->implicit)
6012 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6013 || TREE_CODE (constructor_type) == UNION_TYPE)
6014 && constructor_fields == 0)
6015 process_init_element (pop_init_level (1));
6016 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6017 && (constructor_max_index == 0
6018 || tree_int_cst_lt (constructor_max_index,
6019 constructor_index)))
6020 process_init_element (pop_init_level (1));
6021 else
6022 break;
6025 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6026 if (constructor_range_stack)
6028 /* If value is a compound literal and we'll be just using its
6029 content, don't put it into a SAVE_EXPR. */
6030 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
6031 || !require_constant_value
6032 || flag_isoc99)
6033 value.value = save_expr (value.value);
6036 while (1)
6038 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6040 tree fieldtype;
6041 enum tree_code fieldcode;
6043 if (constructor_fields == 0)
6045 pedwarn_init ("excess elements in struct initializer");
6046 break;
6049 fieldtype = TREE_TYPE (constructor_fields);
6050 if (fieldtype != error_mark_node)
6051 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6052 fieldcode = TREE_CODE (fieldtype);
6054 /* Error for non-static initialization of a flexible array member. */
6055 if (fieldcode == ARRAY_TYPE
6056 && !require_constant_value
6057 && TYPE_SIZE (fieldtype) == NULL_TREE
6058 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6060 error_init ("non-static initialization of a flexible array member");
6061 break;
6064 /* Accept a string constant to initialize a subarray. */
6065 if (value.value != 0
6066 && fieldcode == ARRAY_TYPE
6067 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6068 && string_flag)
6069 value.value = orig_value;
6070 /* Otherwise, if we have come to a subaggregate,
6071 and we don't have an element of its type, push into it. */
6072 else if (value.value != 0 && !constructor_no_implicit
6073 && value.value != error_mark_node
6074 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6075 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6076 || fieldcode == UNION_TYPE))
6078 push_init_level (1);
6079 continue;
6082 if (value.value)
6084 push_member_name (constructor_fields);
6085 output_init_element (value.value, strict_string,
6086 fieldtype, constructor_fields, 1);
6087 RESTORE_SPELLING_DEPTH (constructor_depth);
6089 else
6090 /* Do the bookkeeping for an element that was
6091 directly output as a constructor. */
6093 /* For a record, keep track of end position of last field. */
6094 if (DECL_SIZE (constructor_fields))
6095 constructor_bit_index
6096 = size_binop (PLUS_EXPR,
6097 bit_position (constructor_fields),
6098 DECL_SIZE (constructor_fields));
6100 /* If the current field was the first one not yet written out,
6101 it isn't now, so update. */
6102 if (constructor_unfilled_fields == constructor_fields)
6104 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6105 /* Skip any nameless bit fields. */
6106 while (constructor_unfilled_fields != 0
6107 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6108 && DECL_NAME (constructor_unfilled_fields) == 0)
6109 constructor_unfilled_fields =
6110 TREE_CHAIN (constructor_unfilled_fields);
6114 constructor_fields = TREE_CHAIN (constructor_fields);
6115 /* Skip any nameless bit fields at the beginning. */
6116 while (constructor_fields != 0
6117 && DECL_C_BIT_FIELD (constructor_fields)
6118 && DECL_NAME (constructor_fields) == 0)
6119 constructor_fields = TREE_CHAIN (constructor_fields);
6121 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6123 tree fieldtype;
6124 enum tree_code fieldcode;
6126 if (constructor_fields == 0)
6128 pedwarn_init ("excess elements in union initializer");
6129 break;
6132 fieldtype = TREE_TYPE (constructor_fields);
6133 if (fieldtype != error_mark_node)
6134 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6135 fieldcode = TREE_CODE (fieldtype);
6137 /* Warn that traditional C rejects initialization of unions.
6138 We skip the warning if the value is zero. This is done
6139 under the assumption that the zero initializer in user
6140 code appears conditioned on e.g. __STDC__ to avoid
6141 "missing initializer" warnings and relies on default
6142 initialization to zero in the traditional C case.
6143 We also skip the warning if the initializer is designated,
6144 again on the assumption that this must be conditional on
6145 __STDC__ anyway (and we've already complained about the
6146 member-designator already). */
6147 if (warn_traditional && !in_system_header && !constructor_designated
6148 && !(value.value && (integer_zerop (value.value)
6149 || real_zerop (value.value))))
6150 warning ("traditional C rejects initialization of unions");
6152 /* Accept a string constant to initialize a subarray. */
6153 if (value.value != 0
6154 && fieldcode == ARRAY_TYPE
6155 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6156 && string_flag)
6157 value.value = orig_value;
6158 /* Otherwise, if we have come to a subaggregate,
6159 and we don't have an element of its type, push into it. */
6160 else if (value.value != 0 && !constructor_no_implicit
6161 && value.value != error_mark_node
6162 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6163 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6164 || fieldcode == UNION_TYPE))
6166 push_init_level (1);
6167 continue;
6170 if (value.value)
6172 push_member_name (constructor_fields);
6173 output_init_element (value.value, strict_string,
6174 fieldtype, constructor_fields, 1);
6175 RESTORE_SPELLING_DEPTH (constructor_depth);
6177 else
6178 /* Do the bookkeeping for an element that was
6179 directly output as a constructor. */
6181 constructor_bit_index = DECL_SIZE (constructor_fields);
6182 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6185 constructor_fields = 0;
6187 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6189 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6190 enum tree_code eltcode = TREE_CODE (elttype);
6192 /* Accept a string constant to initialize a subarray. */
6193 if (value.value != 0
6194 && eltcode == ARRAY_TYPE
6195 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6196 && string_flag)
6197 value.value = orig_value;
6198 /* Otherwise, if we have come to a subaggregate,
6199 and we don't have an element of its type, push into it. */
6200 else if (value.value != 0 && !constructor_no_implicit
6201 && value.value != error_mark_node
6202 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6203 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6204 || eltcode == UNION_TYPE))
6206 push_init_level (1);
6207 continue;
6210 if (constructor_max_index != 0
6211 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6212 || integer_all_onesp (constructor_max_index)))
6214 pedwarn_init ("excess elements in array initializer");
6215 break;
6218 /* Now output the actual element. */
6219 if (value.value)
6221 push_array_bounds (tree_low_cst (constructor_index, 0));
6222 output_init_element (value.value, strict_string,
6223 elttype, constructor_index, 1);
6224 RESTORE_SPELLING_DEPTH (constructor_depth);
6227 constructor_index
6228 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6230 if (!value.value)
6231 /* If we are doing the bookkeeping for an element that was
6232 directly output as a constructor, we must update
6233 constructor_unfilled_index. */
6234 constructor_unfilled_index = constructor_index;
6236 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6238 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6240 /* Do a basic check of initializer size. Note that vectors
6241 always have a fixed size derived from their type. */
6242 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6244 pedwarn_init ("excess elements in vector initializer");
6245 break;
6248 /* Now output the actual element. */
6249 if (value.value)
6250 output_init_element (value.value, strict_string,
6251 elttype, constructor_index, 1);
6253 constructor_index
6254 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6256 if (!value.value)
6257 /* If we are doing the bookkeeping for an element that was
6258 directly output as a constructor, we must update
6259 constructor_unfilled_index. */
6260 constructor_unfilled_index = constructor_index;
6263 /* Handle the sole element allowed in a braced initializer
6264 for a scalar variable. */
6265 else if (constructor_fields == 0)
6267 pedwarn_init ("excess elements in scalar initializer");
6268 break;
6270 else
6272 if (value.value)
6273 output_init_element (value.value, strict_string,
6274 constructor_type, NULL_TREE, 1);
6275 constructor_fields = 0;
6278 /* Handle range initializers either at this level or anywhere higher
6279 in the designator stack. */
6280 if (constructor_range_stack)
6282 struct constructor_range_stack *p, *range_stack;
6283 int finish = 0;
6285 range_stack = constructor_range_stack;
6286 constructor_range_stack = 0;
6287 while (constructor_stack != range_stack->stack)
6289 gcc_assert (constructor_stack->implicit);
6290 process_init_element (pop_init_level (1));
6292 for (p = range_stack;
6293 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6294 p = p->prev)
6296 gcc_assert (constructor_stack->implicit);
6297 process_init_element (pop_init_level (1));
6300 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6301 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6302 finish = 1;
6304 while (1)
6306 constructor_index = p->index;
6307 constructor_fields = p->fields;
6308 if (finish && p->range_end && p->index == p->range_start)
6310 finish = 0;
6311 p->prev = 0;
6313 p = p->next;
6314 if (!p)
6315 break;
6316 push_init_level (2);
6317 p->stack = constructor_stack;
6318 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6319 p->index = p->range_start;
6322 if (!finish)
6323 constructor_range_stack = range_stack;
6324 continue;
6327 break;
6330 constructor_range_stack = 0;
6333 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6334 (guaranteed to be 'volatile' or null) and ARGS (represented using
6335 an ASM_EXPR node). */
6336 tree
6337 build_asm_stmt (tree cv_qualifier, tree args)
6339 if (!ASM_VOLATILE_P (args) && cv_qualifier)
6340 ASM_VOLATILE_P (args) = 1;
6341 return add_stmt (args);
6344 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6345 some INPUTS, and some CLOBBERS. The latter three may be NULL.
6346 SIMPLE indicates whether there was anything at all after the
6347 string in the asm expression -- asm("blah") and asm("blah" : )
6348 are subtly different. We use a ASM_EXPR node to represent this. */
6349 tree
6350 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6351 bool simple)
6353 tree tail;
6354 tree args;
6355 int i;
6356 const char *constraint;
6357 bool allows_mem, allows_reg, is_inout;
6358 int ninputs;
6359 int noutputs;
6361 ninputs = list_length (inputs);
6362 noutputs = list_length (outputs);
6364 /* Remove output conversions that change the type but not the mode. */
6365 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6367 tree output = TREE_VALUE (tail);
6368 STRIP_NOPS (output);
6369 TREE_VALUE (tail) = output;
6370 lvalue_or_else (output, lv_asm);
6372 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6374 if (!parse_output_constraint (&constraint, i, ninputs, noutputs,
6375 &allows_mem, &allows_reg, &is_inout))
6377 /* By marking this operand as erroneous, we will not try
6378 to process this operand again in expand_asm_operands. */
6379 TREE_VALUE (tail) = error_mark_node;
6380 continue;
6383 /* If the operand is a DECL that is going to end up in
6384 memory, assume it is addressable. This is a bit more
6385 conservative than it would ideally be; the exact test is
6386 buried deep in expand_asm_operands and depends on the
6387 DECL_RTL for the OPERAND -- which we don't have at this
6388 point. */
6389 if (!allows_reg && DECL_P (output))
6390 c_mark_addressable (output);
6393 /* Perform default conversions on array and function inputs.
6394 Don't do this for other types as it would screw up operands
6395 expected to be in memory. */
6396 for (tail = inputs; tail; tail = TREE_CHAIN (tail))
6397 TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail));
6399 args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6401 /* Simple asm statements are treated as volatile. */
6402 if (simple)
6404 ASM_VOLATILE_P (args) = 1;
6405 ASM_INPUT_P (args) = 1;
6407 return args;
6410 /* Generate a goto statement to LABEL. */
6412 tree
6413 c_finish_goto_label (tree label)
6415 tree decl = lookup_label (label);
6416 if (!decl)
6417 return NULL_TREE;
6419 TREE_USED (decl) = 1;
6420 return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
6423 /* Generate a computed goto statement to EXPR. */
6425 tree
6426 c_finish_goto_ptr (tree expr)
6428 if (pedantic)
6429 pedwarn ("ISO C forbids %<goto *expr;%>");
6430 expr = convert (ptr_type_node, expr);
6431 return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
6434 /* Generate a C `return' statement. RETVAL is the expression for what
6435 to return, or a null pointer for `return;' with no value. */
6437 tree
6438 c_finish_return (tree retval)
6440 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6442 if (TREE_THIS_VOLATILE (current_function_decl))
6443 warning ("function declared %<noreturn%> has a %<return%> statement");
6445 if (!retval)
6447 current_function_returns_null = 1;
6448 if ((warn_return_type || flag_isoc99)
6449 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6450 pedwarn_c99 ("%<return%> with no value, in "
6451 "function returning non-void");
6453 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6455 current_function_returns_null = 1;
6456 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6457 pedwarn ("%<return%> with a value, in function returning void");
6459 else
6461 tree t = convert_for_assignment (valtype, retval, ic_return,
6462 NULL_TREE, NULL_TREE, 0);
6463 tree res = DECL_RESULT (current_function_decl);
6464 tree inner;
6466 current_function_returns_value = 1;
6467 if (t == error_mark_node)
6468 return NULL_TREE;
6470 inner = t = convert (TREE_TYPE (res), t);
6472 /* Strip any conversions, additions, and subtractions, and see if
6473 we are returning the address of a local variable. Warn if so. */
6474 while (1)
6476 switch (TREE_CODE (inner))
6478 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6479 case PLUS_EXPR:
6480 inner = TREE_OPERAND (inner, 0);
6481 continue;
6483 case MINUS_EXPR:
6484 /* If the second operand of the MINUS_EXPR has a pointer
6485 type (or is converted from it), this may be valid, so
6486 don't give a warning. */
6488 tree op1 = TREE_OPERAND (inner, 1);
6490 while (!POINTER_TYPE_P (TREE_TYPE (op1))
6491 && (TREE_CODE (op1) == NOP_EXPR
6492 || TREE_CODE (op1) == NON_LVALUE_EXPR
6493 || TREE_CODE (op1) == CONVERT_EXPR))
6494 op1 = TREE_OPERAND (op1, 0);
6496 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6497 break;
6499 inner = TREE_OPERAND (inner, 0);
6500 continue;
6503 case ADDR_EXPR:
6504 inner = TREE_OPERAND (inner, 0);
6506 while (REFERENCE_CLASS_P (inner)
6507 && TREE_CODE (inner) != INDIRECT_REF)
6508 inner = TREE_OPERAND (inner, 0);
6510 if (DECL_P (inner)
6511 && !DECL_EXTERNAL (inner)
6512 && !TREE_STATIC (inner)
6513 && DECL_CONTEXT (inner) == current_function_decl)
6514 warning ("function returns address of local variable");
6515 break;
6517 default:
6518 break;
6521 break;
6524 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
6527 return add_stmt (build_stmt (RETURN_EXPR, retval));
6530 struct c_switch {
6531 /* The SWITCH_STMT being built. */
6532 tree switch_stmt;
6534 /* The original type of the testing expression, i.e. before the
6535 default conversion is applied. */
6536 tree orig_type;
6538 /* A splay-tree mapping the low element of a case range to the high
6539 element, or NULL_TREE if there is no high element. Used to
6540 determine whether or not a new case label duplicates an old case
6541 label. We need a tree, rather than simply a hash table, because
6542 of the GNU case range extension. */
6543 splay_tree cases;
6545 /* The next node on the stack. */
6546 struct c_switch *next;
6549 /* A stack of the currently active switch statements. The innermost
6550 switch statement is on the top of the stack. There is no need to
6551 mark the stack for garbage collection because it is only active
6552 during the processing of the body of a function, and we never
6553 collect at that point. */
6555 struct c_switch *c_switch_stack;
6557 /* Start a C switch statement, testing expression EXP. Return the new
6558 SWITCH_STMT. */
6560 tree
6561 c_start_case (tree exp)
6563 enum tree_code code;
6564 tree type, orig_type = error_mark_node;
6565 struct c_switch *cs;
6567 if (exp != error_mark_node)
6569 code = TREE_CODE (TREE_TYPE (exp));
6570 orig_type = TREE_TYPE (exp);
6572 if (!INTEGRAL_TYPE_P (orig_type)
6573 && code != ERROR_MARK)
6575 error ("switch quantity not an integer");
6576 exp = integer_zero_node;
6578 else
6580 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6582 if (warn_traditional && !in_system_header
6583 && (type == long_integer_type_node
6584 || type == long_unsigned_type_node))
6585 warning ("%<long%> switch expression not converted to "
6586 "%<int%> in ISO C");
6588 exp = default_conversion (exp);
6589 type = TREE_TYPE (exp);
6593 /* Add this new SWITCH_STMT to the stack. */
6594 cs = XNEW (struct c_switch);
6595 cs->switch_stmt = build_stmt ((enum tree_code) SWITCH_STMT, exp, NULL_TREE,
6596 orig_type);
6597 cs->orig_type = orig_type;
6598 cs->cases = splay_tree_new (case_compare, NULL, NULL);
6599 cs->next = c_switch_stack;
6600 c_switch_stack = cs;
6602 return add_stmt (cs->switch_stmt);
6605 /* Process a case label. */
6607 tree
6608 do_case (tree low_value, tree high_value)
6610 tree label = NULL_TREE;
6612 if (c_switch_stack)
6614 label = c_add_case_label (c_switch_stack->cases,
6615 SWITCH_COND (c_switch_stack->switch_stmt),
6616 c_switch_stack->orig_type,
6617 low_value, high_value);
6618 if (label == error_mark_node)
6619 label = NULL_TREE;
6621 else if (low_value)
6622 error ("case label not within a switch statement");
6623 else
6624 error ("%<default%> label not within a switch statement");
6626 return label;
6629 /* Finish the switch statement. */
6631 void
6632 c_finish_case (tree body)
6634 struct c_switch *cs = c_switch_stack;
6636 SWITCH_BODY (cs->switch_stmt) = body;
6638 /* Emit warnings as needed. */
6639 c_do_switch_warnings (cs->cases, cs->switch_stmt);
6641 /* Pop the stack. */
6642 c_switch_stack = cs->next;
6643 splay_tree_delete (cs->cases);
6644 XDELETE (cs);
6647 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
6648 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
6649 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
6650 statement, and was not surrounded with parenthesis. */
6652 void
6653 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
6654 tree else_block, bool nested_if)
6656 tree stmt;
6658 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
6659 if (warn_parentheses && nested_if && else_block == NULL)
6661 tree inner_if = then_block;
6663 /* We know from the grammar productions that there is an IF nested
6664 within THEN_BLOCK. Due to labels and c99 conditional declarations,
6665 it might not be exactly THEN_BLOCK, but should be the last
6666 non-container statement within. */
6667 while (1)
6668 switch (TREE_CODE (inner_if))
6670 case COND_EXPR:
6671 goto found;
6672 case BIND_EXPR:
6673 inner_if = BIND_EXPR_BODY (inner_if);
6674 break;
6675 case STATEMENT_LIST:
6676 inner_if = expr_last (then_block);
6677 break;
6678 case TRY_FINALLY_EXPR:
6679 case TRY_CATCH_EXPR:
6680 inner_if = TREE_OPERAND (inner_if, 0);
6681 break;
6682 default:
6683 gcc_unreachable ();
6685 found:
6687 if (COND_EXPR_ELSE (inner_if))
6688 warning ("%Hsuggest explicit braces to avoid ambiguous %<else%>",
6689 &if_locus);
6692 /* Diagnose ";" via the special empty statement node that we create. */
6693 if (extra_warnings)
6695 if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
6697 if (!else_block)
6698 warning ("%Hempty body in an if-statement",
6699 EXPR_LOCUS (then_block));
6700 then_block = alloc_stmt_list ();
6702 if (else_block
6703 && TREE_CODE (else_block) == NOP_EXPR
6704 && !TREE_TYPE (else_block))
6706 warning ("%Hempty body in an else-statement",
6707 EXPR_LOCUS (else_block));
6708 else_block = alloc_stmt_list ();
6712 stmt = build3 (COND_EXPR, NULL_TREE, cond, then_block, else_block);
6713 SET_EXPR_LOCATION (stmt, if_locus);
6714 add_stmt (stmt);
6717 /* Emit a general-purpose loop construct. START_LOCUS is the location of
6718 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
6719 is false for DO loops. INCR is the FOR increment expression. BODY is
6720 the statement controlled by the loop. BLAB is the break label. CLAB is
6721 the continue label. Everything is allowed to be NULL. */
6723 void
6724 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
6725 tree blab, tree clab, bool cond_is_first)
6727 tree entry = NULL, exit = NULL, t;
6729 /* Detect do { ... } while (0) and don't generate loop construct. */
6730 if (cond && !cond_is_first && integer_zerop (cond))
6731 cond = NULL;
6732 if (cond_is_first || cond)
6734 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6736 /* If we have an exit condition, then we build an IF with gotos either
6737 out of the loop, or to the top of it. If there's no exit condition,
6738 then we just build a jump back to the top. */
6739 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
6741 if (cond)
6743 /* Canonicalize the loop condition to the end. This means
6744 generating a branch to the loop condition. Reuse the
6745 continue label, if possible. */
6746 if (cond_is_first)
6748 if (incr || !clab)
6750 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
6751 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
6753 else
6754 t = build1 (GOTO_EXPR, void_type_node, clab);
6755 SET_EXPR_LOCATION (t, start_locus);
6756 add_stmt (t);
6759 t = build_and_jump (&blab);
6760 exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
6761 exit = fold (exit);
6762 if (cond_is_first)
6763 SET_EXPR_LOCATION (exit, start_locus);
6764 else
6765 SET_EXPR_LOCATION (exit, input_location);
6768 add_stmt (top);
6771 if (body)
6772 add_stmt (body);
6773 if (clab)
6774 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
6775 if (incr)
6776 add_stmt (incr);
6777 if (entry)
6778 add_stmt (entry);
6779 if (exit)
6780 add_stmt (exit);
6781 if (blab)
6782 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
6785 tree
6786 c_finish_bc_stmt (tree *label_p, bool is_break)
6788 tree label = *label_p;
6790 if (!label)
6791 *label_p = label = create_artificial_label ();
6792 else if (TREE_CODE (label) != LABEL_DECL)
6794 if (is_break)
6795 error ("break statement not within loop or switch");
6796 else
6797 error ("continue statement not within a loop");
6798 return NULL_TREE;
6801 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
6804 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
6806 static void
6807 emit_side_effect_warnings (tree expr)
6809 if (expr == error_mark_node)
6811 else if (!TREE_SIDE_EFFECTS (expr))
6813 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
6814 warning ("%Hstatement with no effect",
6815 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
6817 else if (warn_unused_value)
6818 warn_if_unused_value (expr, input_location);
6821 /* Process an expression as if it were a complete statement. Emit
6822 diagnostics, but do not call ADD_STMT. */
6824 tree
6825 c_process_expr_stmt (tree expr)
6827 if (!expr)
6828 return NULL_TREE;
6830 /* Do default conversion if safe and possibly important,
6831 in case within ({...}). */
6832 if ((TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE
6833 && (flag_isoc99 || lvalue_p (expr)))
6834 || TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE)
6835 expr = default_conversion (expr);
6837 if (warn_sequence_point)
6838 verify_sequence_points (expr);
6840 if (TREE_TYPE (expr) != error_mark_node
6841 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
6842 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
6843 error ("expression statement has incomplete type");
6845 /* If we're not processing a statement expression, warn about unused values.
6846 Warnings for statement expressions will be emitted later, once we figure
6847 out which is the result. */
6848 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
6849 && (extra_warnings || warn_unused_value))
6850 emit_side_effect_warnings (expr);
6852 /* If the expression is not of a type to which we cannot assign a line
6853 number, wrap the thing in a no-op NOP_EXPR. */
6854 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
6855 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
6857 if (EXPR_P (expr))
6858 SET_EXPR_LOCATION (expr, input_location);
6860 return expr;
6863 /* Emit an expression as a statement. */
6865 tree
6866 c_finish_expr_stmt (tree expr)
6868 if (expr)
6869 return add_stmt (c_process_expr_stmt (expr));
6870 else
6871 return NULL;
6874 /* Do the opposite and emit a statement as an expression. To begin,
6875 create a new binding level and return it. */
6877 tree
6878 c_begin_stmt_expr (void)
6880 tree ret;
6882 /* We must force a BLOCK for this level so that, if it is not expanded
6883 later, there is a way to turn off the entire subtree of blocks that
6884 are contained in it. */
6885 keep_next_level ();
6886 ret = c_begin_compound_stmt (true);
6888 /* Mark the current statement list as belonging to a statement list. */
6889 STATEMENT_LIST_STMT_EXPR (ret) = 1;
6891 return ret;
6894 tree
6895 c_finish_stmt_expr (tree body)
6897 tree last, type, tmp, val;
6898 tree *last_p;
6900 body = c_end_compound_stmt (body, true);
6902 /* Locate the last statement in BODY. See c_end_compound_stmt
6903 about always returning a BIND_EXPR. */
6904 last_p = &BIND_EXPR_BODY (body);
6905 last = BIND_EXPR_BODY (body);
6907 continue_searching:
6908 if (TREE_CODE (last) == STATEMENT_LIST)
6910 tree_stmt_iterator i;
6912 /* This can happen with degenerate cases like ({ }). No value. */
6913 if (!TREE_SIDE_EFFECTS (last))
6914 return body;
6916 /* If we're supposed to generate side effects warnings, process
6917 all of the statements except the last. */
6918 if (extra_warnings || warn_unused_value)
6920 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
6921 emit_side_effect_warnings (tsi_stmt (i));
6923 else
6924 i = tsi_last (last);
6925 last_p = tsi_stmt_ptr (i);
6926 last = *last_p;
6929 /* If the end of the list is exception related, then the list was split
6930 by a call to push_cleanup. Continue searching. */
6931 if (TREE_CODE (last) == TRY_FINALLY_EXPR
6932 || TREE_CODE (last) == TRY_CATCH_EXPR)
6934 last_p = &TREE_OPERAND (last, 0);
6935 last = *last_p;
6936 goto continue_searching;
6939 /* In the case that the BIND_EXPR is not necessary, return the
6940 expression out from inside it. */
6941 if (last == error_mark_node
6942 || (last == BIND_EXPR_BODY (body)
6943 && BIND_EXPR_VARS (body) == NULL))
6944 return last;
6946 /* Extract the type of said expression. */
6947 type = TREE_TYPE (last);
6949 /* If we're not returning a value at all, then the BIND_EXPR that
6950 we already have is a fine expression to return. */
6951 if (!type || VOID_TYPE_P (type))
6952 return body;
6954 /* Now that we've located the expression containing the value, it seems
6955 silly to make voidify_wrapper_expr repeat the process. Create a
6956 temporary of the appropriate type and stick it in a TARGET_EXPR. */
6957 tmp = create_tmp_var_raw (type, NULL);
6959 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
6960 tree_expr_nonnegative_p giving up immediately. */
6961 val = last;
6962 if (TREE_CODE (val) == NOP_EXPR
6963 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
6964 val = TREE_OPERAND (val, 0);
6966 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
6967 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
6969 return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
6972 /* Begin and end compound statements. This is as simple as pushing
6973 and popping new statement lists from the tree. */
6975 tree
6976 c_begin_compound_stmt (bool do_scope)
6978 tree stmt = push_stmt_list ();
6979 if (do_scope)
6980 push_scope ();
6981 return stmt;
6984 tree
6985 c_end_compound_stmt (tree stmt, bool do_scope)
6987 tree block = NULL;
6989 if (do_scope)
6991 if (c_dialect_objc ())
6992 objc_clear_super_receiver ();
6993 block = pop_scope ();
6996 stmt = pop_stmt_list (stmt);
6997 stmt = c_build_bind_expr (block, stmt);
6999 /* If this compound statement is nested immediately inside a statement
7000 expression, then force a BIND_EXPR to be created. Otherwise we'll
7001 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
7002 STATEMENT_LISTs merge, and thus we can lose track of what statement
7003 was really last. */
7004 if (cur_stmt_list
7005 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7006 && TREE_CODE (stmt) != BIND_EXPR)
7008 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
7009 TREE_SIDE_EFFECTS (stmt) = 1;
7012 return stmt;
7015 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
7016 when the current scope is exited. EH_ONLY is true when this is not
7017 meant to apply to normal control flow transfer. */
7019 void
7020 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
7022 enum tree_code code;
7023 tree stmt, list;
7024 bool stmt_expr;
7026 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
7027 stmt = build_stmt (code, NULL, cleanup);
7028 add_stmt (stmt);
7029 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
7030 list = push_stmt_list ();
7031 TREE_OPERAND (stmt, 0) = list;
7032 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
7035 /* Build a binary-operation expression without default conversions.
7036 CODE is the kind of expression to build.
7037 This function differs from `build' in several ways:
7038 the data type of the result is computed and recorded in it,
7039 warnings are generated if arg data types are invalid,
7040 special handling for addition and subtraction of pointers is known,
7041 and some optimization is done (operations on narrow ints
7042 are done in the narrower type when that gives the same result).
7043 Constant folding is also done before the result is returned.
7045 Note that the operands will never have enumeral types, or function
7046 or array types, because either they will have the default conversions
7047 performed or they have both just been converted to some other type in which
7048 the arithmetic is to be done. */
7050 tree
7051 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
7052 int convert_p)
7054 tree type0, type1;
7055 enum tree_code code0, code1;
7056 tree op0, op1;
7058 /* Expression code to give to the expression when it is built.
7059 Normally this is CODE, which is what the caller asked for,
7060 but in some special cases we change it. */
7061 enum tree_code resultcode = code;
7063 /* Data type in which the computation is to be performed.
7064 In the simplest cases this is the common type of the arguments. */
7065 tree result_type = NULL;
7067 /* Nonzero means operands have already been type-converted
7068 in whatever way is necessary.
7069 Zero means they need to be converted to RESULT_TYPE. */
7070 int converted = 0;
7072 /* Nonzero means create the expression with this type, rather than
7073 RESULT_TYPE. */
7074 tree build_type = 0;
7076 /* Nonzero means after finally constructing the expression
7077 convert it to this type. */
7078 tree final_type = 0;
7080 /* Nonzero if this is an operation like MIN or MAX which can
7081 safely be computed in short if both args are promoted shorts.
7082 Also implies COMMON.
7083 -1 indicates a bitwise operation; this makes a difference
7084 in the exact conditions for when it is safe to do the operation
7085 in a narrower mode. */
7086 int shorten = 0;
7088 /* Nonzero if this is a comparison operation;
7089 if both args are promoted shorts, compare the original shorts.
7090 Also implies COMMON. */
7091 int short_compare = 0;
7093 /* Nonzero if this is a right-shift operation, which can be computed on the
7094 original short and then promoted if the operand is a promoted short. */
7095 int short_shift = 0;
7097 /* Nonzero means set RESULT_TYPE to the common type of the args. */
7098 int common = 0;
7100 if (convert_p)
7102 op0 = default_conversion (orig_op0);
7103 op1 = default_conversion (orig_op1);
7105 else
7107 op0 = orig_op0;
7108 op1 = orig_op1;
7111 type0 = TREE_TYPE (op0);
7112 type1 = TREE_TYPE (op1);
7114 /* The expression codes of the data types of the arguments tell us
7115 whether the arguments are integers, floating, pointers, etc. */
7116 code0 = TREE_CODE (type0);
7117 code1 = TREE_CODE (type1);
7119 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
7120 STRIP_TYPE_NOPS (op0);
7121 STRIP_TYPE_NOPS (op1);
7123 /* If an error was already reported for one of the arguments,
7124 avoid reporting another error. */
7126 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7127 return error_mark_node;
7129 switch (code)
7131 case PLUS_EXPR:
7132 /* Handle the pointer + int case. */
7133 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7134 return pointer_int_sum (PLUS_EXPR, op0, op1);
7135 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7136 return pointer_int_sum (PLUS_EXPR, op1, op0);
7137 else
7138 common = 1;
7139 break;
7141 case MINUS_EXPR:
7142 /* Subtraction of two similar pointers.
7143 We must subtract them as integers, then divide by object size. */
7144 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7145 && comp_target_types (type0, type1, 1))
7146 return pointer_diff (op0, op1);
7147 /* Handle pointer minus int. Just like pointer plus int. */
7148 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7149 return pointer_int_sum (MINUS_EXPR, op0, op1);
7150 else
7151 common = 1;
7152 break;
7154 case MULT_EXPR:
7155 common = 1;
7156 break;
7158 case TRUNC_DIV_EXPR:
7159 case CEIL_DIV_EXPR:
7160 case FLOOR_DIV_EXPR:
7161 case ROUND_DIV_EXPR:
7162 case EXACT_DIV_EXPR:
7163 /* Floating point division by zero is a legitimate way to obtain
7164 infinities and NaNs. */
7165 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7166 warning ("division by zero");
7168 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7169 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7170 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7171 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7173 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7174 code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
7175 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
7176 code1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
7178 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
7179 resultcode = RDIV_EXPR;
7180 else
7181 /* Although it would be tempting to shorten always here, that
7182 loses on some targets, since the modulo instruction is
7183 undefined if the quotient can't be represented in the
7184 computation mode. We shorten only if unsigned or if
7185 dividing by something we know != -1. */
7186 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7187 || (TREE_CODE (op1) == INTEGER_CST
7188 && !integer_all_onesp (op1)));
7189 common = 1;
7191 break;
7193 case BIT_AND_EXPR:
7194 case BIT_IOR_EXPR:
7195 case BIT_XOR_EXPR:
7196 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7197 shorten = -1;
7198 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
7199 common = 1;
7200 break;
7202 case TRUNC_MOD_EXPR:
7203 case FLOOR_MOD_EXPR:
7204 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
7205 warning ("division by zero");
7207 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7209 /* Although it would be tempting to shorten always here, that loses
7210 on some targets, since the modulo instruction is undefined if the
7211 quotient can't be represented in the computation mode. We shorten
7212 only if unsigned or if dividing by something we know != -1. */
7213 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7214 || (TREE_CODE (op1) == INTEGER_CST
7215 && !integer_all_onesp (op1)));
7216 common = 1;
7218 break;
7220 case TRUTH_ANDIF_EXPR:
7221 case TRUTH_ORIF_EXPR:
7222 case TRUTH_AND_EXPR:
7223 case TRUTH_OR_EXPR:
7224 case TRUTH_XOR_EXPR:
7225 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
7226 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
7227 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
7228 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
7230 /* Result of these operations is always an int,
7231 but that does not mean the operands should be
7232 converted to ints! */
7233 result_type = integer_type_node;
7234 op0 = lang_hooks.truthvalue_conversion (op0);
7235 op1 = lang_hooks.truthvalue_conversion (op1);
7236 converted = 1;
7238 break;
7240 /* Shift operations: result has same type as first operand;
7241 always convert second operand to int.
7242 Also set SHORT_SHIFT if shifting rightward. */
7244 case RSHIFT_EXPR:
7245 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7247 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7249 if (tree_int_cst_sgn (op1) < 0)
7250 warning ("right shift count is negative");
7251 else
7253 if (!integer_zerop (op1))
7254 short_shift = 1;
7256 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7257 warning ("right shift count >= width of type");
7261 /* Use the type of the value to be shifted. */
7262 result_type = type0;
7263 /* Convert the shift-count to an integer, regardless of size
7264 of value being shifted. */
7265 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7266 op1 = convert (integer_type_node, op1);
7267 /* Avoid converting op1 to result_type later. */
7268 converted = 1;
7270 break;
7272 case LSHIFT_EXPR:
7273 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7275 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7277 if (tree_int_cst_sgn (op1) < 0)
7278 warning ("left shift count is negative");
7280 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7281 warning ("left shift count >= width of type");
7284 /* Use the type of the value to be shifted. */
7285 result_type = type0;
7286 /* Convert the shift-count to an integer, regardless of size
7287 of value being shifted. */
7288 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7289 op1 = convert (integer_type_node, op1);
7290 /* Avoid converting op1 to result_type later. */
7291 converted = 1;
7293 break;
7295 case RROTATE_EXPR:
7296 case LROTATE_EXPR:
7297 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7299 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7301 if (tree_int_cst_sgn (op1) < 0)
7302 warning ("shift count is negative");
7303 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7304 warning ("shift count >= width of type");
7307 /* Use the type of the value to be shifted. */
7308 result_type = type0;
7309 /* Convert the shift-count to an integer, regardless of size
7310 of value being shifted. */
7311 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7312 op1 = convert (integer_type_node, op1);
7313 /* Avoid converting op1 to result_type later. */
7314 converted = 1;
7316 break;
7318 case EQ_EXPR:
7319 case NE_EXPR:
7320 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
7321 warning ("comparing floating point with == or != is unsafe");
7322 /* Result of comparison is always int,
7323 but don't convert the args to int! */
7324 build_type = integer_type_node;
7325 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7326 || code0 == COMPLEX_TYPE)
7327 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7328 || code1 == COMPLEX_TYPE))
7329 short_compare = 1;
7330 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7332 tree tt0 = TREE_TYPE (type0);
7333 tree tt1 = TREE_TYPE (type1);
7334 /* Anything compares with void *. void * compares with anything.
7335 Otherwise, the targets must be compatible
7336 and both must be object or both incomplete. */
7337 if (comp_target_types (type0, type1, 1))
7338 result_type = common_pointer_type (type0, type1);
7339 else if (VOID_TYPE_P (tt0))
7341 /* op0 != orig_op0 detects the case of something
7342 whose value is 0 but which isn't a valid null ptr const. */
7343 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
7344 && TREE_CODE (tt1) == FUNCTION_TYPE)
7345 pedwarn ("ISO C forbids comparison of %<void *%>"
7346 " with function pointer");
7348 else if (VOID_TYPE_P (tt1))
7350 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
7351 && TREE_CODE (tt0) == FUNCTION_TYPE)
7352 pedwarn ("ISO C forbids comparison of %<void *%>"
7353 " with function pointer");
7355 else
7356 pedwarn ("comparison of distinct pointer types lacks a cast");
7358 if (result_type == NULL_TREE)
7359 result_type = ptr_type_node;
7361 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7362 && integer_zerop (op1))
7363 result_type = type0;
7364 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7365 && integer_zerop (op0))
7366 result_type = type1;
7367 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7369 result_type = type0;
7370 pedwarn ("comparison between pointer and integer");
7372 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7374 result_type = type1;
7375 pedwarn ("comparison between pointer and integer");
7377 break;
7379 case MAX_EXPR:
7380 case MIN_EXPR:
7381 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7382 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7383 shorten = 1;
7384 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7386 if (comp_target_types (type0, type1, 1))
7388 result_type = common_pointer_type (type0, type1);
7389 if (pedantic
7390 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7391 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7393 else
7395 result_type = ptr_type_node;
7396 pedwarn ("comparison of distinct pointer types lacks a cast");
7399 break;
7401 case LE_EXPR:
7402 case GE_EXPR:
7403 case LT_EXPR:
7404 case GT_EXPR:
7405 build_type = integer_type_node;
7406 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7407 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7408 short_compare = 1;
7409 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7411 if (comp_target_types (type0, type1, 1))
7413 result_type = common_pointer_type (type0, type1);
7414 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
7415 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
7416 pedwarn ("comparison of complete and incomplete pointers");
7417 else if (pedantic
7418 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7419 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7421 else
7423 result_type = ptr_type_node;
7424 pedwarn ("comparison of distinct pointer types lacks a cast");
7427 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7428 && integer_zerop (op1))
7430 result_type = type0;
7431 if (pedantic || extra_warnings)
7432 pedwarn ("ordered comparison of pointer with integer zero");
7434 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7435 && integer_zerop (op0))
7437 result_type = type1;
7438 if (pedantic)
7439 pedwarn ("ordered comparison of pointer with integer zero");
7441 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7443 result_type = type0;
7444 pedwarn ("comparison between pointer and integer");
7446 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7448 result_type = type1;
7449 pedwarn ("comparison between pointer and integer");
7451 break;
7453 case UNORDERED_EXPR:
7454 case ORDERED_EXPR:
7455 case UNLT_EXPR:
7456 case UNLE_EXPR:
7457 case UNGT_EXPR:
7458 case UNGE_EXPR:
7459 case UNEQ_EXPR:
7460 case LTGT_EXPR:
7461 build_type = integer_type_node;
7462 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
7464 error ("unordered comparison on non-floating point argument");
7465 return error_mark_node;
7467 common = 1;
7468 break;
7470 default:
7471 break;
7474 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7475 return error_mark_node;
7477 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
7478 || code0 == VECTOR_TYPE)
7480 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
7481 || code1 == VECTOR_TYPE))
7483 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
7485 if (shorten || common || short_compare)
7486 result_type = common_type (type0, type1);
7488 /* For certain operations (which identify themselves by shorten != 0)
7489 if both args were extended from the same smaller type,
7490 do the arithmetic in that type and then extend.
7492 shorten !=0 and !=1 indicates a bitwise operation.
7493 For them, this optimization is safe only if
7494 both args are zero-extended or both are sign-extended.
7495 Otherwise, we might change the result.
7496 Eg, (short)-1 | (unsigned short)-1 is (int)-1
7497 but calculated in (unsigned short) it would be (unsigned short)-1. */
7499 if (shorten && none_complex)
7501 int unsigned0, unsigned1;
7502 tree arg0 = get_narrower (op0, &unsigned0);
7503 tree arg1 = get_narrower (op1, &unsigned1);
7504 /* UNS is 1 if the operation to be done is an unsigned one. */
7505 int uns = TYPE_UNSIGNED (result_type);
7506 tree type;
7508 final_type = result_type;
7510 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
7511 but it *requires* conversion to FINAL_TYPE. */
7513 if ((TYPE_PRECISION (TREE_TYPE (op0))
7514 == TYPE_PRECISION (TREE_TYPE (arg0)))
7515 && TREE_TYPE (op0) != final_type)
7516 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
7517 if ((TYPE_PRECISION (TREE_TYPE (op1))
7518 == TYPE_PRECISION (TREE_TYPE (arg1)))
7519 && TREE_TYPE (op1) != final_type)
7520 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
7522 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
7524 /* For bitwise operations, signedness of nominal type
7525 does not matter. Consider only how operands were extended. */
7526 if (shorten == -1)
7527 uns = unsigned0;
7529 /* Note that in all three cases below we refrain from optimizing
7530 an unsigned operation on sign-extended args.
7531 That would not be valid. */
7533 /* Both args variable: if both extended in same way
7534 from same width, do it in that width.
7535 Do it unsigned if args were zero-extended. */
7536 if ((TYPE_PRECISION (TREE_TYPE (arg0))
7537 < TYPE_PRECISION (result_type))
7538 && (TYPE_PRECISION (TREE_TYPE (arg1))
7539 == TYPE_PRECISION (TREE_TYPE (arg0)))
7540 && unsigned0 == unsigned1
7541 && (unsigned0 || !uns))
7542 result_type
7543 = c_common_signed_or_unsigned_type
7544 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
7545 else if (TREE_CODE (arg0) == INTEGER_CST
7546 && (unsigned1 || !uns)
7547 && (TYPE_PRECISION (TREE_TYPE (arg1))
7548 < TYPE_PRECISION (result_type))
7549 && (type
7550 = c_common_signed_or_unsigned_type (unsigned1,
7551 TREE_TYPE (arg1)),
7552 int_fits_type_p (arg0, type)))
7553 result_type = type;
7554 else if (TREE_CODE (arg1) == INTEGER_CST
7555 && (unsigned0 || !uns)
7556 && (TYPE_PRECISION (TREE_TYPE (arg0))
7557 < TYPE_PRECISION (result_type))
7558 && (type
7559 = c_common_signed_or_unsigned_type (unsigned0,
7560 TREE_TYPE (arg0)),
7561 int_fits_type_p (arg1, type)))
7562 result_type = type;
7565 /* Shifts can be shortened if shifting right. */
7567 if (short_shift)
7569 int unsigned_arg;
7570 tree arg0 = get_narrower (op0, &unsigned_arg);
7572 final_type = result_type;
7574 if (arg0 == op0 && final_type == TREE_TYPE (op0))
7575 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
7577 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7578 /* We can shorten only if the shift count is less than the
7579 number of bits in the smaller type size. */
7580 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7581 /* We cannot drop an unsigned shift after sign-extension. */
7582 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
7584 /* Do an unsigned shift if the operand was zero-extended. */
7585 result_type
7586 = c_common_signed_or_unsigned_type (unsigned_arg,
7587 TREE_TYPE (arg0));
7588 /* Convert value-to-be-shifted to that type. */
7589 if (TREE_TYPE (op0) != result_type)
7590 op0 = convert (result_type, op0);
7591 converted = 1;
7595 /* Comparison operations are shortened too but differently.
7596 They identify themselves by setting short_compare = 1. */
7598 if (short_compare)
7600 /* Don't write &op0, etc., because that would prevent op0
7601 from being kept in a register.
7602 Instead, make copies of the our local variables and
7603 pass the copies by reference, then copy them back afterward. */
7604 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
7605 enum tree_code xresultcode = resultcode;
7606 tree val
7607 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
7609 if (val != 0)
7610 return val;
7612 op0 = xop0, op1 = xop1;
7613 converted = 1;
7614 resultcode = xresultcode;
7616 if (warn_sign_compare && skip_evaluation == 0)
7618 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
7619 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
7620 int unsignedp0, unsignedp1;
7621 tree primop0 = get_narrower (op0, &unsignedp0);
7622 tree primop1 = get_narrower (op1, &unsignedp1);
7624 xop0 = orig_op0;
7625 xop1 = orig_op1;
7626 STRIP_TYPE_NOPS (xop0);
7627 STRIP_TYPE_NOPS (xop1);
7629 /* Give warnings for comparisons between signed and unsigned
7630 quantities that may fail.
7632 Do the checking based on the original operand trees, so that
7633 casts will be considered, but default promotions won't be.
7635 Do not warn if the comparison is being done in a signed type,
7636 since the signed type will only be chosen if it can represent
7637 all the values of the unsigned type. */
7638 if (!TYPE_UNSIGNED (result_type))
7639 /* OK */;
7640 /* Do not warn if both operands are the same signedness. */
7641 else if (op0_signed == op1_signed)
7642 /* OK */;
7643 else
7645 tree sop, uop;
7647 if (op0_signed)
7648 sop = xop0, uop = xop1;
7649 else
7650 sop = xop1, uop = xop0;
7652 /* Do not warn if the signed quantity is an
7653 unsuffixed integer literal (or some static
7654 constant expression involving such literals or a
7655 conditional expression involving such literals)
7656 and it is non-negative. */
7657 if (tree_expr_nonnegative_p (sop))
7658 /* OK */;
7659 /* Do not warn if the comparison is an equality operation,
7660 the unsigned quantity is an integral constant, and it
7661 would fit in the result if the result were signed. */
7662 else if (TREE_CODE (uop) == INTEGER_CST
7663 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
7664 && int_fits_type_p
7665 (uop, c_common_signed_type (result_type)))
7666 /* OK */;
7667 /* Do not warn if the unsigned quantity is an enumeration
7668 constant and its maximum value would fit in the result
7669 if the result were signed. */
7670 else if (TREE_CODE (uop) == INTEGER_CST
7671 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
7672 && int_fits_type_p
7673 (TYPE_MAX_VALUE (TREE_TYPE (uop)),
7674 c_common_signed_type (result_type)))
7675 /* OK */;
7676 else
7677 warning ("comparison between signed and unsigned");
7680 /* Warn if two unsigned values are being compared in a size
7681 larger than their original size, and one (and only one) is the
7682 result of a `~' operator. This comparison will always fail.
7684 Also warn if one operand is a constant, and the constant
7685 does not have all bits set that are set in the ~ operand
7686 when it is extended. */
7688 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
7689 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
7691 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
7692 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
7693 &unsignedp0);
7694 else
7695 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
7696 &unsignedp1);
7698 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
7700 tree primop;
7701 HOST_WIDE_INT constant, mask;
7702 int unsignedp, bits;
7704 if (host_integerp (primop0, 0))
7706 primop = primop1;
7707 unsignedp = unsignedp1;
7708 constant = tree_low_cst (primop0, 0);
7710 else
7712 primop = primop0;
7713 unsignedp = unsignedp0;
7714 constant = tree_low_cst (primop1, 0);
7717 bits = TYPE_PRECISION (TREE_TYPE (primop));
7718 if (bits < TYPE_PRECISION (result_type)
7719 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
7721 mask = (~(HOST_WIDE_INT) 0) << bits;
7722 if ((mask & constant) != mask)
7723 warning ("comparison of promoted ~unsigned with constant");
7726 else if (unsignedp0 && unsignedp1
7727 && (TYPE_PRECISION (TREE_TYPE (primop0))
7728 < TYPE_PRECISION (result_type))
7729 && (TYPE_PRECISION (TREE_TYPE (primop1))
7730 < TYPE_PRECISION (result_type)))
7731 warning ("comparison of promoted ~unsigned with unsigned");
7737 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
7738 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
7739 Then the expression will be built.
7740 It will be given type FINAL_TYPE if that is nonzero;
7741 otherwise, it will be given type RESULT_TYPE. */
7743 if (!result_type)
7745 binary_op_error (code);
7746 return error_mark_node;
7749 if (!converted)
7751 if (TREE_TYPE (op0) != result_type)
7752 op0 = convert (result_type, op0);
7753 if (TREE_TYPE (op1) != result_type)
7754 op1 = convert (result_type, op1);
7756 /* This can happen if one operand has a vector type, and the other
7757 has a different type. */
7758 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
7759 return error_mark_node;
7762 if (build_type == NULL_TREE)
7763 build_type = result_type;
7766 tree result = build2 (resultcode, build_type, op0, op1);
7768 /* Treat expressions in initializers specially as they can't trap. */
7769 result = require_constant_value ? fold_initializer (result)
7770 : fold (result);
7772 if (final_type != 0)
7773 result = convert (final_type, result);
7774 return result;