fix typo
[official-gcc.git] / gcc / c-typeck.c
blob1d8624241c6fa55e01740d835541eae496304f5f
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 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 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 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
29 and to process initializations in declarations (since they work
30 like a strange sort of assignment). */
32 #include "config.h"
33 #include "system.h"
34 #include "tree.h"
35 #include "c-tree.h"
36 #include "tm_p.h"
37 #include "flags.h"
38 #include "output.h"
39 #include "rtl.h"
40 #include "expr.h"
41 #include "toplev.h"
42 #include "intl.h"
43 #include "defaults.h"
44 #include "ggc.h"
46 /* Nonzero if we've already printed a "missing braces around initializer"
47 message within this initializer. */
48 static int missing_braces_mentioned;
50 static tree qualify_type PARAMS ((tree, tree));
51 static int comp_target_types PARAMS ((tree, tree));
52 static int function_types_compatible_p PARAMS ((tree, tree));
53 static int type_lists_compatible_p PARAMS ((tree, tree));
54 static tree decl_constant_value PARAMS ((tree));
55 static tree lookup_field PARAMS ((tree, tree, tree *));
56 static tree convert_arguments PARAMS ((tree, tree, tree, tree));
57 static tree pointer_int_sum PARAMS ((enum tree_code, tree, tree));
58 static tree pointer_diff PARAMS ((tree, tree));
59 static tree unary_complex_lvalue PARAMS ((enum tree_code, tree));
60 static void pedantic_lvalue_warning PARAMS ((enum tree_code));
61 static tree internal_build_compound_expr PARAMS ((tree, int));
62 static tree convert_for_assignment PARAMS ((tree, tree, const char *,
63 tree, tree, int));
64 static void warn_for_assignment PARAMS ((const char *, const char *,
65 tree, int));
66 static tree valid_compound_expr_initializer PARAMS ((tree, tree));
67 static void push_string PARAMS ((const char *));
68 static void push_member_name PARAMS ((tree));
69 static void push_array_bounds PARAMS ((int));
70 static int spelling_length PARAMS ((void));
71 static char *print_spelling PARAMS ((char *));
72 static void warning_init PARAMS ((const char *));
73 static tree digest_init PARAMS ((tree, tree, int, int));
74 static void check_init_type_bitfields PARAMS ((tree));
75 static void output_init_element PARAMS ((tree, tree, tree, int));
76 static void output_pending_init_elements PARAMS ((int));
77 static void add_pending_init PARAMS ((tree, tree));
78 static int pending_init_member PARAMS ((tree));
80 /* Do `exp = require_complete_type (exp);' to make sure exp
81 does not have an incomplete type. (That includes void types.) */
83 tree
84 require_complete_type (value)
85 tree value;
87 tree type = TREE_TYPE (value);
89 if (TREE_CODE (value) == ERROR_MARK)
90 return error_mark_node;
92 /* First, detect a valid value with a complete type. */
93 if (COMPLETE_TYPE_P (type))
94 return value;
96 incomplete_type_error (value, type);
97 return error_mark_node;
100 /* Print an error message for invalid use of an incomplete type.
101 VALUE is the expression that was used (or 0 if that isn't known)
102 and TYPE is the type that was invalid. */
104 void
105 incomplete_type_error (value, type)
106 tree value;
107 tree type;
109 const char *type_code_string;
111 /* Avoid duplicate error message. */
112 if (TREE_CODE (type) == ERROR_MARK)
113 return;
115 if (value != 0 && (TREE_CODE (value) == VAR_DECL
116 || TREE_CODE (value) == PARM_DECL))
117 error ("`%s' has an incomplete type",
118 IDENTIFIER_POINTER (DECL_NAME (value)));
119 else
121 retry:
122 /* We must print an error message. Be clever about what it says. */
124 switch (TREE_CODE (type))
126 case RECORD_TYPE:
127 type_code_string = "struct";
128 break;
130 case UNION_TYPE:
131 type_code_string = "union";
132 break;
134 case ENUMERAL_TYPE:
135 type_code_string = "enum";
136 break;
138 case VOID_TYPE:
139 error ("invalid use of void expression");
140 return;
142 case ARRAY_TYPE:
143 if (TYPE_DOMAIN (type))
145 type = TREE_TYPE (type);
146 goto retry;
148 error ("invalid use of array with unspecified bounds");
149 return;
151 default:
152 abort ();
155 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
156 error ("invalid use of undefined type `%s %s'",
157 type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
158 else
159 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
160 error ("invalid use of incomplete typedef `%s'",
161 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
165 /* Return a variant of TYPE which has all the type qualifiers of LIKE
166 as well as those of TYPE. */
168 static tree
169 qualify_type (type, like)
170 tree type, like;
172 return c_build_qualified_type (type,
173 TYPE_QUALS (type) | TYPE_QUALS (like));
176 /* Return the common type of two types.
177 We assume that comptypes has already been done and returned 1;
178 if that isn't so, this may crash. In particular, we assume that qualifiers
179 match.
181 This is the type for the result of most arithmetic operations
182 if the operands have the given two types. */
184 tree
185 common_type (t1, t2)
186 tree t1, t2;
188 register enum tree_code code1;
189 register enum tree_code code2;
190 tree attributes;
192 /* Save time if the two types are the same. */
194 if (t1 == t2) return t1;
196 /* If one type is nonsense, use the other. */
197 if (t1 == error_mark_node)
198 return t2;
199 if (t2 == error_mark_node)
200 return t1;
202 /* Merge the attributes. */
203 attributes = merge_machine_type_attributes (t1, t2);
205 /* Treat an enum type as the unsigned integer type of the same width. */
207 if (TREE_CODE (t1) == ENUMERAL_TYPE)
208 t1 = type_for_size (TYPE_PRECISION (t1), 1);
209 if (TREE_CODE (t2) == ENUMERAL_TYPE)
210 t2 = type_for_size (TYPE_PRECISION (t2), 1);
212 code1 = TREE_CODE (t1);
213 code2 = TREE_CODE (t2);
215 /* If one type is complex, form the common type of the non-complex
216 components, then make that complex. Use T1 or T2 if it is the
217 required type. */
218 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
220 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
221 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
222 tree subtype = common_type (subtype1, subtype2);
224 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
225 return build_type_attribute_variant (t1, attributes);
226 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
227 return build_type_attribute_variant (t2, attributes);
228 else
229 return build_type_attribute_variant (build_complex_type (subtype),
230 attributes);
233 switch (code1)
235 case INTEGER_TYPE:
236 case REAL_TYPE:
237 /* If only one is real, use it as the result. */
239 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
240 return build_type_attribute_variant (t1, attributes);
242 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
243 return build_type_attribute_variant (t2, attributes);
245 /* Both real or both integers; use the one with greater precision. */
247 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
248 return build_type_attribute_variant (t1, attributes);
249 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
250 return build_type_attribute_variant (t2, attributes);
252 /* Same precision. Prefer longs to ints even when same size. */
254 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
255 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
256 return build_type_attribute_variant (long_unsigned_type_node,
257 attributes);
259 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
260 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
262 /* But preserve unsignedness from the other type,
263 since long cannot hold all the values of an unsigned int. */
264 if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
265 t1 = long_unsigned_type_node;
266 else
267 t1 = long_integer_type_node;
268 return build_type_attribute_variant (t1, attributes);
271 /* Likewise, prefer long double to double even if same size. */
272 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
273 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
274 return build_type_attribute_variant (long_double_type_node,
275 attributes);
277 /* Otherwise prefer the unsigned one. */
279 if (TREE_UNSIGNED (t1))
280 return build_type_attribute_variant (t1, attributes);
281 else
282 return build_type_attribute_variant (t2, attributes);
284 case POINTER_TYPE:
285 /* For two pointers, do this recursively on the target type,
286 and combine the qualifiers of the two types' targets. */
287 /* This code was turned off; I don't know why.
288 But ANSI C specifies doing this with the qualifiers.
289 So I turned it on again. */
291 tree pointed_to_1 = TREE_TYPE (t1);
292 tree pointed_to_2 = TREE_TYPE (t2);
293 tree target = common_type (TYPE_MAIN_VARIANT (pointed_to_1),
294 TYPE_MAIN_VARIANT (pointed_to_2));
295 t1 = build_pointer_type (c_build_qualified_type
296 (target,
297 TYPE_QUALS (pointed_to_1) |
298 TYPE_QUALS (pointed_to_2)));
299 return build_type_attribute_variant (t1, attributes);
301 #if 0
302 t1 = build_pointer_type (common_type (TREE_TYPE (t1), TREE_TYPE (t2)));
303 return build_type_attribute_variant (t1, attributes);
304 #endif
306 case ARRAY_TYPE:
308 tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
309 /* Save space: see if the result is identical to one of the args. */
310 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
311 return build_type_attribute_variant (t1, attributes);
312 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
313 return build_type_attribute_variant (t2, attributes);
314 /* Merge the element types, and have a size if either arg has one. */
315 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
316 record_component_aliases (t1);
317 return build_type_attribute_variant (t1, attributes);
320 case FUNCTION_TYPE:
321 /* Function types: prefer the one that specified arg types.
322 If both do, merge the arg types. Also merge the return types. */
324 tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
325 tree p1 = TYPE_ARG_TYPES (t1);
326 tree p2 = TYPE_ARG_TYPES (t2);
327 int len;
328 tree newargs, n;
329 int i;
331 /* Save space: see if the result is identical to one of the args. */
332 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
333 return build_type_attribute_variant (t1, attributes);
334 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
335 return build_type_attribute_variant (t2, attributes);
337 /* Simple way if one arg fails to specify argument types. */
338 if (TYPE_ARG_TYPES (t1) == 0)
340 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
341 return build_type_attribute_variant (t1, attributes);
343 if (TYPE_ARG_TYPES (t2) == 0)
345 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
346 return build_type_attribute_variant (t1, attributes);
349 /* If both args specify argument types, we must merge the two
350 lists, argument by argument. */
352 len = list_length (p1);
353 newargs = 0;
355 for (i = 0; i < len; i++)
356 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
358 n = newargs;
360 for (; p1;
361 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
363 /* A null type means arg type is not specified.
364 Take whatever the other function type has. */
365 if (TREE_VALUE (p1) == 0)
367 TREE_VALUE (n) = TREE_VALUE (p2);
368 goto parm_done;
370 if (TREE_VALUE (p2) == 0)
372 TREE_VALUE (n) = TREE_VALUE (p1);
373 goto parm_done;
376 /* Given wait (union {union wait *u; int *i} *)
377 and wait (union wait *),
378 prefer union wait * as type of parm. */
379 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
380 && TREE_VALUE (p1) != TREE_VALUE (p2))
382 tree memb;
383 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
384 memb; memb = TREE_CHAIN (memb))
385 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
387 TREE_VALUE (n) = TREE_VALUE (p2);
388 if (pedantic)
389 pedwarn ("function types not truly compatible in ANSI C");
390 goto parm_done;
393 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
394 && TREE_VALUE (p2) != TREE_VALUE (p1))
396 tree memb;
397 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
398 memb; memb = TREE_CHAIN (memb))
399 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
401 TREE_VALUE (n) = TREE_VALUE (p1);
402 if (pedantic)
403 pedwarn ("function types not truly compatible in ANSI C");
404 goto parm_done;
407 TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
408 parm_done: ;
411 t1 = build_function_type (valtype, newargs);
412 /* ... falls through ... */
415 default:
416 return build_type_attribute_variant (t1, attributes);
421 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
422 or various other operations. Return 2 if they are compatible
423 but a warning may be needed if you use them together. */
426 comptypes (type1, type2)
427 tree type1, type2;
429 register tree t1 = type1;
430 register tree t2 = type2;
431 int attrval, val;
433 /* Suppress errors caused by previously reported errors. */
435 if (t1 == t2 || !t1 || !t2
436 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
437 return 1;
439 /* If either type is the internal version of sizetype, return the
440 language version. */
441 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
442 && TYPE_DOMAIN (t1) != 0)
443 t1 = TYPE_DOMAIN (t1);
445 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
446 && TYPE_DOMAIN (t2) != 0)
447 t2 = TYPE_DOMAIN (t2);
449 /* Treat an enum type as the integer type of the same width and
450 signedness. */
452 if (TREE_CODE (t1) == ENUMERAL_TYPE)
453 t1 = type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
454 if (TREE_CODE (t2) == ENUMERAL_TYPE)
455 t2 = type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
457 if (t1 == t2)
458 return 1;
460 /* Different classes of types can't be compatible. */
462 if (TREE_CODE (t1) != TREE_CODE (t2)) return 0;
464 /* Qualifiers must match. */
466 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
467 return 0;
469 /* Allow for two different type nodes which have essentially the same
470 definition. Note that we already checked for equality of the type
471 qualifiers (just above). */
473 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
474 return 1;
476 #ifndef COMP_TYPE_ATTRIBUTES
477 #define COMP_TYPE_ATTRIBUTES(t1,t2) 1
478 #endif
480 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
481 if (! (attrval = COMP_TYPE_ATTRIBUTES (t1, t2)))
482 return 0;
484 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
485 val = 0;
487 switch (TREE_CODE (t1))
489 case POINTER_TYPE:
490 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
491 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
492 break;
494 case FUNCTION_TYPE:
495 val = function_types_compatible_p (t1, t2);
496 break;
498 case ARRAY_TYPE:
500 tree d1 = TYPE_DOMAIN (t1);
501 tree d2 = TYPE_DOMAIN (t2);
502 val = 1;
504 /* Target types must match incl. qualifiers. */
505 if (TREE_TYPE (t1) != TREE_TYPE (t2)
506 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
507 return 0;
509 /* Sizes must match unless one is missing or variable. */
510 if (d1 == 0 || d2 == 0 || d1 == d2
511 || TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
512 || TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
513 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST
514 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST)
515 break;
517 if (! tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
518 || ! tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
519 val = 0;
521 break;
524 case RECORD_TYPE:
525 if (maybe_objc_comptypes (t1, t2, 0) == 1)
526 val = 1;
527 break;
529 default:
530 break;
532 return attrval == 2 && val == 1 ? 2 : val;
535 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
536 ignoring their qualifiers. */
538 static int
539 comp_target_types (ttl, ttr)
540 tree ttl, ttr;
542 int val;
544 /* Give maybe_objc_comptypes a crack at letting these types through. */
545 if ((val = maybe_objc_comptypes (ttl, ttr, 1)) >= 0)
546 return val;
548 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
549 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
551 if (val == 2 && pedantic)
552 pedwarn ("types are not quite compatible");
553 return val;
556 /* Subroutines of `comptypes'. */
558 /* Return 1 if two function types F1 and F2 are compatible.
559 If either type specifies no argument types,
560 the other must specify a fixed number of self-promoting arg types.
561 Otherwise, if one type specifies only the number of arguments,
562 the other must specify that number of self-promoting arg types.
563 Otherwise, the argument types must match. */
565 static int
566 function_types_compatible_p (f1, f2)
567 tree f1, f2;
569 tree args1, args2;
570 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
571 int val = 1;
572 int val1;
574 if (!(TREE_TYPE (f1) == TREE_TYPE (f2)
575 || (val = comptypes (TREE_TYPE (f1), TREE_TYPE (f2)))))
576 return 0;
578 args1 = TYPE_ARG_TYPES (f1);
579 args2 = TYPE_ARG_TYPES (f2);
581 /* An unspecified parmlist matches any specified parmlist
582 whose argument types don't need default promotions. */
584 if (args1 == 0)
586 if (!self_promoting_args_p (args2))
587 return 0;
588 /* If one of these types comes from a non-prototype fn definition,
589 compare that with the other type's arglist.
590 If they don't match, ask for a warning (but no error). */
591 if (TYPE_ACTUAL_ARG_TYPES (f1)
592 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
593 val = 2;
594 return val;
596 if (args2 == 0)
598 if (!self_promoting_args_p (args1))
599 return 0;
600 if (TYPE_ACTUAL_ARG_TYPES (f2)
601 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
602 val = 2;
603 return val;
606 /* Both types have argument lists: compare them and propagate results. */
607 val1 = type_lists_compatible_p (args1, args2);
608 return val1 != 1 ? val1 : val;
611 /* Check two lists of types for compatibility,
612 returning 0 for incompatible, 1 for compatible,
613 or 2 for compatible with warning. */
615 static int
616 type_lists_compatible_p (args1, args2)
617 tree args1, args2;
619 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
620 int val = 1;
621 int newval = 0;
623 while (1)
625 if (args1 == 0 && args2 == 0)
626 return val;
627 /* If one list is shorter than the other,
628 they fail to match. */
629 if (args1 == 0 || args2 == 0)
630 return 0;
631 /* A null pointer instead of a type
632 means there is supposed to be an argument
633 but nothing is specified about what type it has.
634 So match anything that self-promotes. */
635 if (TREE_VALUE (args1) == 0)
637 if (simple_type_promotes_to (TREE_VALUE (args2)) != NULL_TREE)
638 return 0;
640 else if (TREE_VALUE (args2) == 0)
642 if (simple_type_promotes_to (TREE_VALUE (args1)) != NULL_TREE)
643 return 0;
645 else if (! (newval = comptypes (TREE_VALUE (args1), TREE_VALUE (args2))))
647 /* Allow wait (union {union wait *u; int *i} *)
648 and wait (union wait *) to be compatible. */
649 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
650 && (TYPE_NAME (TREE_VALUE (args1)) == 0
651 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
652 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
653 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
654 TYPE_SIZE (TREE_VALUE (args2))))
656 tree memb;
657 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
658 memb; memb = TREE_CHAIN (memb))
659 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
660 break;
661 if (memb == 0)
662 return 0;
664 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
665 && (TYPE_NAME (TREE_VALUE (args2)) == 0
666 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
667 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
668 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
669 TYPE_SIZE (TREE_VALUE (args1))))
671 tree memb;
672 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
673 memb; memb = TREE_CHAIN (memb))
674 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
675 break;
676 if (memb == 0)
677 return 0;
679 else
680 return 0;
683 /* comptypes said ok, but record if it said to warn. */
684 if (newval > val)
685 val = newval;
687 args1 = TREE_CHAIN (args1);
688 args2 = TREE_CHAIN (args2);
692 /* Compute the value of the `sizeof' operator. */
694 tree
695 c_sizeof (type)
696 tree type;
698 enum tree_code code = TREE_CODE (type);
700 if (code == FUNCTION_TYPE)
702 if (pedantic || warn_pointer_arith)
703 pedwarn ("sizeof applied to a function type");
704 return size_one_node;
706 if (code == VOID_TYPE)
708 if (pedantic || warn_pointer_arith)
709 pedwarn ("sizeof applied to a void type");
710 return size_one_node;
713 if (code == ERROR_MARK)
714 return size_one_node;
716 if (!COMPLETE_TYPE_P (type))
718 error ("sizeof applied to an incomplete type");
719 return size_zero_node;
722 /* Convert in case a char is more than one unit. */
723 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
724 size_int (TYPE_PRECISION (char_type_node)
725 / BITS_PER_UNIT));
728 tree
729 c_sizeof_nowarn (type)
730 tree type;
732 enum tree_code code = TREE_CODE (type);
734 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
735 return size_one_node;
737 if (!COMPLETE_TYPE_P (type))
738 return size_zero_node;
740 /* Convert in case a char is more than one unit. */
741 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
742 size_int (TYPE_PRECISION (char_type_node)
743 / BITS_PER_UNIT));
746 /* Compute the size to increment a pointer by. */
748 tree
749 c_size_in_bytes (type)
750 tree type;
752 enum tree_code code = TREE_CODE (type);
754 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
755 return size_one_node;
757 if (!COMPLETE_OR_VOID_TYPE_P (type))
759 error ("arithmetic on pointer to an incomplete type");
760 return size_one_node;
763 /* Convert in case a char is more than one unit. */
764 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
765 size_int (TYPE_PRECISION (char_type_node)
766 / BITS_PER_UNIT));
769 /* Implement the __alignof keyword: Return the minimum required
770 alignment of TYPE, measured in bytes. */
772 tree
773 c_alignof (type)
774 tree type;
776 enum tree_code code = TREE_CODE (type);
778 if (code == FUNCTION_TYPE)
779 return size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
781 if (code == VOID_TYPE || code == ERROR_MARK)
782 return size_one_node;
784 if (!COMPLETE_TYPE_P (type))
786 error ("__alignof__ applied to an incomplete type");
787 return size_zero_node;
790 return size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
793 /* Implement the __alignof keyword: Return the minimum required
794 alignment of EXPR, measured in bytes. For VAR_DECL's and
795 FIELD_DECL's return DECL_ALIGN (which can be set from an
796 "aligned" __attribute__ specification). */
798 tree
799 c_alignof_expr (expr)
800 tree expr;
802 if (TREE_CODE (expr) == VAR_DECL)
803 return size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
805 if (TREE_CODE (expr) == COMPONENT_REF
806 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
808 error ("`__alignof' applied to a bit-field");
809 return size_one_node;
811 else if (TREE_CODE (expr) == COMPONENT_REF
812 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
813 return size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
815 if (TREE_CODE (expr) == INDIRECT_REF)
817 tree t = TREE_OPERAND (expr, 0);
818 tree best = t;
819 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
821 while (TREE_CODE (t) == NOP_EXPR
822 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
824 int thisalign;
826 t = TREE_OPERAND (t, 0);
827 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
828 if (thisalign > bestalign)
829 best = t, bestalign = thisalign;
831 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
833 else
834 return c_alignof (TREE_TYPE (expr));
837 /* Return either DECL or its known constant value (if it has one). */
839 static tree
840 decl_constant_value (decl)
841 tree decl;
843 if (/* Don't change a variable array bound or initial value to a constant
844 in a place where a variable is invalid. */
845 current_function_decl != 0
846 && ! pedantic
847 && ! TREE_THIS_VOLATILE (decl)
848 && TREE_READONLY (decl) && ! ITERATOR_P (decl)
849 && DECL_INITIAL (decl) != 0
850 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
851 /* This is invalid if initial value is not constant.
852 If it has either a function call, a memory reference,
853 or a variable, then re-evaluating it could give different results. */
854 && TREE_CONSTANT (DECL_INITIAL (decl))
855 /* Check for cases where this is sub-optimal, even though valid. */
856 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR
857 && DECL_MODE (decl) != BLKmode)
858 return DECL_INITIAL (decl);
859 return decl;
862 /* Perform default promotions for C data used in expressions.
863 Arrays and functions are converted to pointers;
864 enumeral types or short or char, to int.
865 In addition, manifest constants symbols are replaced by their values. */
867 tree
868 default_conversion (exp)
869 tree exp;
871 register tree type = TREE_TYPE (exp);
872 register enum tree_code code = TREE_CODE (type);
874 /* Constants can be used directly unless they're not loadable. */
875 if (TREE_CODE (exp) == CONST_DECL)
876 exp = DECL_INITIAL (exp);
878 /* Replace a nonvolatile const static variable with its value unless
879 it is an array, in which case we must be sure that taking the
880 address of the array produces consistent results. */
881 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
883 exp = decl_constant_value (exp);
884 type = TREE_TYPE (exp);
887 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
888 an lvalue.
890 Do not use STRIP_NOPS here! It will remove conversions from pointer
891 to integer and cause infinite recursion. */
892 while (TREE_CODE (exp) == NON_LVALUE_EXPR
893 || (TREE_CODE (exp) == NOP_EXPR
894 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
895 exp = TREE_OPERAND (exp, 0);
897 /* Normally convert enums to int,
898 but convert wide enums to something wider. */
899 if (code == ENUMERAL_TYPE)
901 type = type_for_size (MAX (TYPE_PRECISION (type),
902 TYPE_PRECISION (integer_type_node)),
903 ((flag_traditional
904 || (TYPE_PRECISION (type)
905 >= TYPE_PRECISION (integer_type_node)))
906 && TREE_UNSIGNED (type)));
908 return convert (type, exp);
911 if (TREE_CODE (exp) == COMPONENT_REF
912 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
913 /* If it's thinner than an int, promote it like a
914 C_PROMOTING_INTEGER_TYPE_P, otherwise leave it alone. */
915 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
916 TYPE_PRECISION (integer_type_node)))
917 return convert (flag_traditional && TREE_UNSIGNED (type)
918 ? unsigned_type_node : integer_type_node,
919 exp);
921 if (C_PROMOTING_INTEGER_TYPE_P (type))
923 /* Traditionally, unsignedness is preserved in default promotions.
924 Also preserve unsignedness if not really getting any wider. */
925 if (TREE_UNSIGNED (type)
926 && (flag_traditional
927 || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
928 return convert (unsigned_type_node, exp);
930 return convert (integer_type_node, exp);
933 if (flag_traditional && !flag_allow_single_precision
934 && TYPE_MAIN_VARIANT (type) == float_type_node)
935 return convert (double_type_node, exp);
937 if (code == VOID_TYPE)
939 error ("void value not ignored as it ought to be");
940 return error_mark_node;
942 if (code == FUNCTION_TYPE)
944 return build_unary_op (ADDR_EXPR, exp, 0);
946 if (code == ARRAY_TYPE)
948 register tree adr;
949 tree restype = TREE_TYPE (type);
950 tree ptrtype;
951 int constp = 0;
952 int volatilep = 0;
954 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp))
956 constp = TREE_READONLY (exp);
957 volatilep = TREE_THIS_VOLATILE (exp);
960 if (TYPE_QUALS (type) || constp || volatilep)
961 restype
962 = c_build_qualified_type (restype,
963 TYPE_QUALS (type)
964 | (constp * TYPE_QUAL_CONST)
965 | (volatilep * TYPE_QUAL_VOLATILE));
967 if (TREE_CODE (exp) == INDIRECT_REF)
968 return convert (TYPE_POINTER_TO (restype),
969 TREE_OPERAND (exp, 0));
971 if (TREE_CODE (exp) == COMPOUND_EXPR)
973 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
974 return build (COMPOUND_EXPR, TREE_TYPE (op1),
975 TREE_OPERAND (exp, 0), op1);
978 if (! lvalue_p (exp)
979 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
981 error ("invalid use of non-lvalue array");
982 return error_mark_node;
985 ptrtype = build_pointer_type (restype);
987 if (TREE_CODE (exp) == VAR_DECL)
989 /* ??? This is not really quite correct
990 in that the type of the operand of ADDR_EXPR
991 is not the target type of the type of the ADDR_EXPR itself.
992 Question is, can this lossage be avoided? */
993 adr = build1 (ADDR_EXPR, ptrtype, exp);
994 if (mark_addressable (exp) == 0)
995 return error_mark_node;
996 TREE_CONSTANT (adr) = staticp (exp);
997 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
998 return adr;
1000 /* This way is better for a COMPONENT_REF since it can
1001 simplify the offset for a component. */
1002 adr = build_unary_op (ADDR_EXPR, exp, 1);
1003 return convert (ptrtype, adr);
1005 return exp;
1008 /* Look up component name in the structure type definition.
1010 If this component name is found indirectly within an anonymous union,
1011 store in *INDIRECT the component which directly contains
1012 that anonymous union. Otherwise, set *INDIRECT to 0. */
1014 static tree
1015 lookup_field (type, component, indirect)
1016 tree type, component;
1017 tree *indirect;
1019 tree field;
1021 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1022 to the field elements. Use a binary search on this array to quickly
1023 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1024 will always be set for structures which have many elements. */
1026 if (TYPE_LANG_SPECIFIC (type))
1028 int bot, top, half;
1029 tree *field_array = &TYPE_LANG_SPECIFIC (type)->elts[0];
1031 field = TYPE_FIELDS (type);
1032 bot = 0;
1033 top = TYPE_LANG_SPECIFIC (type)->len;
1034 while (top - bot > 1)
1036 half = (top - bot + 1) >> 1;
1037 field = field_array[bot+half];
1039 if (DECL_NAME (field) == NULL_TREE)
1041 /* Step through all anon unions in linear fashion. */
1042 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1044 tree anon = 0, junk;
1046 field = field_array[bot++];
1047 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1048 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1049 anon = lookup_field (TREE_TYPE (field), component, &junk);
1051 if (anon != NULL_TREE)
1053 *indirect = field;
1054 return anon;
1058 /* Entire record is only anon unions. */
1059 if (bot > top)
1060 return NULL_TREE;
1062 /* Restart the binary search, with new lower bound. */
1063 continue;
1066 if (DECL_NAME (field) == component)
1067 break;
1068 if (DECL_NAME (field) < component)
1069 bot += half;
1070 else
1071 top = bot + half;
1074 if (DECL_NAME (field_array[bot]) == component)
1075 field = field_array[bot];
1076 else if (DECL_NAME (field) != component)
1077 field = 0;
1079 else
1081 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1083 if (DECL_NAME (field) == NULL_TREE)
1085 tree junk;
1086 tree anon = 0;
1088 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1089 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1090 anon = lookup_field (TREE_TYPE (field), component, &junk);
1092 if (anon != NULL_TREE)
1094 *indirect = field;
1095 return anon;
1099 if (DECL_NAME (field) == component)
1100 break;
1104 *indirect = NULL_TREE;
1105 return field;
1108 /* Make an expression to refer to the COMPONENT field of
1109 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1111 tree
1112 build_component_ref (datum, component)
1113 tree datum, component;
1115 register tree type = TREE_TYPE (datum);
1116 register enum tree_code code = TREE_CODE (type);
1117 register tree field = NULL;
1118 register tree ref;
1120 /* If DATUM is a COMPOUND_EXPR or COND_EXPR, move our reference inside it
1121 unless we are not to support things not strictly ANSI. */
1122 switch (TREE_CODE (datum))
1124 case COMPOUND_EXPR:
1126 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
1127 return build (COMPOUND_EXPR, TREE_TYPE (value),
1128 TREE_OPERAND (datum, 0), value);
1130 case COND_EXPR:
1131 return build_conditional_expr
1132 (TREE_OPERAND (datum, 0),
1133 build_component_ref (TREE_OPERAND (datum, 1), component),
1134 build_component_ref (TREE_OPERAND (datum, 2), component));
1136 default:
1137 break;
1140 /* See if there is a field or component with name COMPONENT. */
1142 if (code == RECORD_TYPE || code == UNION_TYPE)
1144 tree indirect = 0;
1146 if (!COMPLETE_TYPE_P (type))
1148 incomplete_type_error (NULL_TREE, type);
1149 return error_mark_node;
1152 field = lookup_field (type, component, &indirect);
1154 if (!field)
1156 error ("%s has no member named `%s'",
1157 code == RECORD_TYPE ? "structure" : "union",
1158 IDENTIFIER_POINTER (component));
1159 return error_mark_node;
1161 if (TREE_TYPE (field) == error_mark_node)
1162 return error_mark_node;
1164 /* If FIELD was found buried within an anonymous union,
1165 make one COMPONENT_REF to get that anonymous union,
1166 then fall thru to make a second COMPONENT_REF to get FIELD. */
1167 if (indirect != 0)
1169 ref = build (COMPONENT_REF, TREE_TYPE (indirect), datum, indirect);
1170 if (TREE_READONLY (datum) || TREE_READONLY (indirect))
1171 TREE_READONLY (ref) = 1;
1172 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (indirect))
1173 TREE_THIS_VOLATILE (ref) = 1;
1174 datum = ref;
1177 ref = build (COMPONENT_REF, TREE_TYPE (field), datum, field);
1179 if (TREE_READONLY (datum) || TREE_READONLY (field))
1180 TREE_READONLY (ref) = 1;
1181 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (field))
1182 TREE_THIS_VOLATILE (ref) = 1;
1184 return ref;
1186 else if (code != ERROR_MARK)
1187 error ("request for member `%s' in something not a structure or union",
1188 IDENTIFIER_POINTER (component));
1190 return error_mark_node;
1193 /* Given an expression PTR for a pointer, return an expression
1194 for the value pointed to.
1195 ERRORSTRING is the name of the operator to appear in error messages. */
1197 tree
1198 build_indirect_ref (ptr, errorstring)
1199 tree ptr;
1200 const char *errorstring;
1202 register tree pointer = default_conversion (ptr);
1203 register tree type = TREE_TYPE (pointer);
1205 if (TREE_CODE (type) == POINTER_TYPE)
1207 if (TREE_CODE (pointer) == ADDR_EXPR
1208 && !flag_volatile
1209 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1210 == TREE_TYPE (type)))
1211 return TREE_OPERAND (pointer, 0);
1212 else
1214 tree t = TREE_TYPE (type);
1215 register tree ref = build1 (INDIRECT_REF,
1216 TYPE_MAIN_VARIANT (t), pointer);
1218 if (!COMPLETE_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1220 error ("dereferencing pointer to incomplete type");
1221 return error_mark_node;
1223 if (TREE_CODE (t) == VOID_TYPE && skip_evaluation == 0)
1224 warning ("dereferencing `void *' pointer");
1226 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1227 so that we get the proper error message if the result is used
1228 to assign to. Also, &* is supposed to be a no-op.
1229 And ANSI C seems to specify that the type of the result
1230 should be the const type. */
1231 /* A de-reference of a pointer to const is not a const. It is valid
1232 to change it via some other pointer. */
1233 TREE_READONLY (ref) = TYPE_READONLY (t);
1234 TREE_SIDE_EFFECTS (ref)
1235 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer) || flag_volatile;
1236 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1237 return ref;
1240 else if (TREE_CODE (pointer) != ERROR_MARK)
1241 error ("invalid type argument of `%s'", errorstring);
1242 return error_mark_node;
1245 /* This handles expressions of the form "a[i]", which denotes
1246 an array reference.
1248 This is logically equivalent in C to *(a+i), but we may do it differently.
1249 If A is a variable or a member, we generate a primitive ARRAY_REF.
1250 This avoids forcing the array out of registers, and can work on
1251 arrays that are not lvalues (for example, members of structures returned
1252 by functions). */
1254 tree
1255 build_array_ref (array, index)
1256 tree array, index;
1258 if (index == 0)
1260 error ("subscript missing in array reference");
1261 return error_mark_node;
1264 if (TREE_TYPE (array) == error_mark_node
1265 || TREE_TYPE (index) == error_mark_node)
1266 return error_mark_node;
1268 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
1269 && TREE_CODE (array) != INDIRECT_REF)
1271 tree rval, type;
1273 /* Subscripting with type char is likely to lose
1274 on a machine where chars are signed.
1275 So warn on any machine, but optionally.
1276 Don't warn for unsigned char since that type is safe.
1277 Don't warn for signed char because anyone who uses that
1278 must have done so deliberately. */
1279 if (warn_char_subscripts
1280 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1281 warning ("array subscript has type `char'");
1283 /* Apply default promotions *after* noticing character types. */
1284 index = default_conversion (index);
1286 /* Require integer *after* promotion, for sake of enums. */
1287 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1289 error ("array subscript is not an integer");
1290 return error_mark_node;
1293 /* An array that is indexed by a non-constant
1294 cannot be stored in a register; we must be able to do
1295 address arithmetic on its address.
1296 Likewise an array of elements of variable size. */
1297 if (TREE_CODE (index) != INTEGER_CST
1298 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1299 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1301 if (mark_addressable (array) == 0)
1302 return error_mark_node;
1304 /* An array that is indexed by a constant value which is not within
1305 the array bounds cannot be stored in a register either; because we
1306 would get a crash in store_bit_field/extract_bit_field when trying
1307 to access a non-existent part of the register. */
1308 if (TREE_CODE (index) == INTEGER_CST
1309 && TYPE_VALUES (TREE_TYPE (array))
1310 && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
1312 if (mark_addressable (array) == 0)
1313 return error_mark_node;
1316 if (pedantic && !lvalue_p (array))
1318 if (DECL_REGISTER (array))
1319 pedwarn ("ANSI C forbids subscripting `register' array");
1320 else
1321 pedwarn ("ANSI C forbids subscripting non-lvalue array");
1324 if (pedantic)
1326 tree foo = array;
1327 while (TREE_CODE (foo) == COMPONENT_REF)
1328 foo = TREE_OPERAND (foo, 0);
1329 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
1330 pedwarn ("ANSI C forbids subscripting non-lvalue array");
1333 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1334 rval = build (ARRAY_REF, type, array, index);
1335 /* Array ref is const/volatile if the array elements are
1336 or if the array is. */
1337 TREE_READONLY (rval)
1338 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1339 | TREE_READONLY (array));
1340 TREE_SIDE_EFFECTS (rval)
1341 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1342 | TREE_SIDE_EFFECTS (array));
1343 TREE_THIS_VOLATILE (rval)
1344 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1345 /* This was added by rms on 16 Nov 91.
1346 It fixes vol struct foo *a; a->elts[1]
1347 in an inline function.
1348 Hope it doesn't break something else. */
1349 | TREE_THIS_VOLATILE (array));
1350 return require_complete_type (fold (rval));
1354 tree ar = default_conversion (array);
1355 tree ind = default_conversion (index);
1357 /* Do the same warning check as above, but only on the part that's
1358 syntactically the index and only if it is also semantically
1359 the index. */
1360 if (warn_char_subscripts
1361 && TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
1362 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1363 warning ("subscript has type `char'");
1365 /* Put the integer in IND to simplify error checking. */
1366 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1368 tree temp = ar;
1369 ar = ind;
1370 ind = temp;
1373 if (ar == error_mark_node)
1374 return ar;
1376 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
1377 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
1379 error ("subscripted value is neither array nor pointer");
1380 return error_mark_node;
1382 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1384 error ("array subscript is not an integer");
1385 return error_mark_node;
1388 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1389 "array indexing");
1393 /* Build a function call to function FUNCTION with parameters PARAMS.
1394 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1395 TREE_VALUE of each node is a parameter-expression.
1396 FUNCTION's data type may be a function type or a pointer-to-function. */
1398 tree
1399 build_function_call (function, params)
1400 tree function, params;
1402 register tree fntype, fundecl = 0;
1403 register tree coerced_params;
1404 tree name = NULL_TREE, assembler_name = NULL_TREE, result;
1406 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1407 STRIP_TYPE_NOPS (function);
1409 /* Convert anything with function type to a pointer-to-function. */
1410 if (TREE_CODE (function) == FUNCTION_DECL)
1412 name = DECL_NAME (function);
1413 assembler_name = DECL_ASSEMBLER_NAME (function);
1415 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1416 (because calling an inline function does not mean the function
1417 needs to be separately compiled). */
1418 fntype = build_type_variant (TREE_TYPE (function),
1419 TREE_READONLY (function),
1420 TREE_THIS_VOLATILE (function));
1421 fundecl = function;
1422 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1424 else
1425 function = default_conversion (function);
1427 fntype = TREE_TYPE (function);
1429 if (TREE_CODE (fntype) == ERROR_MARK)
1430 return error_mark_node;
1432 if (!(TREE_CODE (fntype) == POINTER_TYPE
1433 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1435 error ("called object is not a function");
1436 return error_mark_node;
1439 /* fntype now gets the type of function pointed to. */
1440 fntype = TREE_TYPE (fntype);
1442 /* Convert the parameters to the types declared in the
1443 function prototype, or apply default promotions. */
1445 coerced_params
1446 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
1448 /* Check for errors in format strings. */
1450 if (warn_format && (name || assembler_name))
1451 check_function_format (name, assembler_name, coerced_params);
1453 /* Recognize certain built-in functions so we can make tree-codes
1454 other than CALL_EXPR. We do this when it enables fold-const.c
1455 to do something useful. */
1457 if (TREE_CODE (function) == ADDR_EXPR
1458 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1459 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
1461 result = expand_tree_builtin (TREE_OPERAND (function, 0),
1462 params, coerced_params);
1463 if (result)
1464 return result;
1467 result = build (CALL_EXPR, TREE_TYPE (fntype),
1468 function, coerced_params, NULL_TREE);
1470 TREE_SIDE_EFFECTS (result) = 1;
1471 if (TREE_TYPE (result) == void_type_node)
1472 return result;
1473 return require_complete_type (result);
1476 /* Convert the argument expressions in the list VALUES
1477 to the types in the list TYPELIST. The result is a list of converted
1478 argument expressions.
1480 If TYPELIST is exhausted, or when an element has NULL as its type,
1481 perform the default conversions.
1483 PARMLIST is the chain of parm decls for the function being called.
1484 It may be 0, if that info is not available.
1485 It is used only for generating error messages.
1487 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1489 This is also where warnings about wrong number of args are generated.
1491 Both VALUES and the returned value are chains of TREE_LIST nodes
1492 with the elements of the list in the TREE_VALUE slots of those nodes. */
1494 static tree
1495 convert_arguments (typelist, values, name, fundecl)
1496 tree typelist, values, name, fundecl;
1498 register tree typetail, valtail;
1499 register tree result = NULL;
1500 int parmnum;
1502 /* Scan the given expressions and types, producing individual
1503 converted arguments and pushing them on RESULT in reverse order. */
1505 for (valtail = values, typetail = typelist, parmnum = 0;
1506 valtail;
1507 valtail = TREE_CHAIN (valtail), parmnum++)
1509 register tree type = typetail ? TREE_VALUE (typetail) : 0;
1510 register tree val = TREE_VALUE (valtail);
1512 if (type == void_type_node)
1514 if (name)
1515 error ("too many arguments to function `%s'",
1516 IDENTIFIER_POINTER (name));
1517 else
1518 error ("too many arguments to function");
1519 break;
1522 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1523 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1524 to convert automatically to a pointer. */
1525 if (TREE_CODE (val) == NON_LVALUE_EXPR)
1526 val = TREE_OPERAND (val, 0);
1528 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
1529 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE)
1530 val = default_conversion (val);
1532 val = require_complete_type (val);
1534 if (type != 0)
1536 /* Formal parm type is specified by a function prototype. */
1537 tree parmval;
1539 if (!COMPLETE_TYPE_P (type))
1541 error ("type of formal parameter %d is incomplete", parmnum + 1);
1542 parmval = val;
1544 else
1546 /* Optionally warn about conversions that
1547 differ from the default conversions. */
1548 if (warn_conversion)
1550 int formal_prec = TYPE_PRECISION (type);
1552 if (INTEGRAL_TYPE_P (type)
1553 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1554 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1555 else if (TREE_CODE (type) == COMPLEX_TYPE
1556 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1557 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1558 else if (TREE_CODE (type) == REAL_TYPE
1559 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1560 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1561 else if (TREE_CODE (type) == REAL_TYPE
1562 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1563 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1564 /* ??? At some point, messages should be written about
1565 conversions between complex types, but that's too messy
1566 to do now. */
1567 else if (TREE_CODE (type) == REAL_TYPE
1568 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1570 /* Warn if any argument is passed as `float',
1571 since without a prototype it would be `double'. */
1572 if (formal_prec == TYPE_PRECISION (float_type_node))
1573 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
1575 /* Detect integer changing in width or signedness. */
1576 else if (INTEGRAL_TYPE_P (type)
1577 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1579 tree would_have_been = default_conversion (val);
1580 tree type1 = TREE_TYPE (would_have_been);
1582 if (TREE_CODE (type) == ENUMERAL_TYPE
1583 && type == TREE_TYPE (val))
1584 /* No warning if function asks for enum
1585 and the actual arg is that enum type. */
1587 else if (formal_prec != TYPE_PRECISION (type1))
1588 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
1589 else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
1591 /* Don't complain if the formal parameter type
1592 is an enum, because we can't tell now whether
1593 the value was an enum--even the same enum. */
1594 else if (TREE_CODE (type) == ENUMERAL_TYPE)
1596 else if (TREE_CODE (val) == INTEGER_CST
1597 && int_fits_type_p (val, type))
1598 /* Change in signedness doesn't matter
1599 if a constant value is unaffected. */
1601 /* Likewise for a constant in a NOP_EXPR. */
1602 else if (TREE_CODE (val) == NOP_EXPR
1603 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
1604 && int_fits_type_p (TREE_OPERAND (val, 0), type))
1606 #if 0 /* We never get such tree structure here. */
1607 else if (TREE_CODE (TREE_TYPE (val)) == ENUMERAL_TYPE
1608 && int_fits_type_p (TYPE_MIN_VALUE (TREE_TYPE (val)), type)
1609 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (val)), type))
1610 /* Change in signedness doesn't matter
1611 if an enum value is unaffected. */
1613 #endif
1614 /* If the value is extended from a narrower
1615 unsigned type, it doesn't matter whether we
1616 pass it as signed or unsigned; the value
1617 certainly is the same either way. */
1618 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
1619 && TREE_UNSIGNED (TREE_TYPE (val)))
1621 else if (TREE_UNSIGNED (type))
1622 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
1623 else
1624 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
1628 parmval = convert_for_assignment (type, val,
1629 (char *) 0, /* arg passing */
1630 fundecl, name, parmnum + 1);
1632 if (PROMOTE_PROTOTYPES
1633 && (TREE_CODE (type) == INTEGER_TYPE
1634 || TREE_CODE (type) == ENUMERAL_TYPE)
1635 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
1636 parmval = default_conversion (parmval);
1638 result = tree_cons (NULL_TREE, parmval, result);
1640 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
1641 && (TYPE_PRECISION (TREE_TYPE (val))
1642 < TYPE_PRECISION (double_type_node)))
1643 /* Convert `float' to `double'. */
1644 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
1645 else
1646 /* Convert `short' and `char' to full-size `int'. */
1647 result = tree_cons (NULL_TREE, default_conversion (val), result);
1649 if (typetail)
1650 typetail = TREE_CHAIN (typetail);
1653 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
1655 if (name)
1656 error ("too few arguments to function `%s'",
1657 IDENTIFIER_POINTER (name));
1658 else
1659 error ("too few arguments to function");
1662 return nreverse (result);
1665 /* This is the entry point used by the parser
1666 for binary operators in the input.
1667 In addition to constructing the expression,
1668 we check for operands that were written with other binary operators
1669 in a way that is likely to confuse the user. */
1671 tree
1672 parser_build_binary_op (code, arg1, arg2)
1673 enum tree_code code;
1674 tree arg1, arg2;
1676 tree result = build_binary_op (code, arg1, arg2, 1);
1678 char class;
1679 char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
1680 char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
1681 enum tree_code code1 = ERROR_MARK;
1682 enum tree_code code2 = ERROR_MARK;
1684 if (class1 == 'e' || class1 == '1'
1685 || class1 == '2' || class1 == '<')
1686 code1 = C_EXP_ORIGINAL_CODE (arg1);
1687 if (class2 == 'e' || class2 == '1'
1688 || class2 == '2' || class2 == '<')
1689 code2 = C_EXP_ORIGINAL_CODE (arg2);
1691 /* Check for cases such as x+y<<z which users are likely
1692 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1693 is cleared to prevent these warnings. */
1694 if (warn_parentheses)
1696 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
1698 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1699 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1700 warning ("suggest parentheses around + or - inside shift");
1703 if (code == TRUTH_ORIF_EXPR)
1705 if (code1 == TRUTH_ANDIF_EXPR
1706 || code2 == TRUTH_ANDIF_EXPR)
1707 warning ("suggest parentheses around && within ||");
1710 if (code == BIT_IOR_EXPR)
1712 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
1713 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1714 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
1715 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1716 warning ("suggest parentheses around arithmetic in operand of |");
1717 /* Check cases like x|y==z */
1718 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1719 warning ("suggest parentheses around comparison in operand of |");
1722 if (code == BIT_XOR_EXPR)
1724 if (code1 == BIT_AND_EXPR
1725 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1726 || code2 == BIT_AND_EXPR
1727 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1728 warning ("suggest parentheses around arithmetic in operand of ^");
1729 /* Check cases like x^y==z */
1730 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1731 warning ("suggest parentheses around comparison in operand of ^");
1734 if (code == BIT_AND_EXPR)
1736 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1737 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1738 warning ("suggest parentheses around + or - in operand of &");
1739 /* Check cases like x&y==z */
1740 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1741 warning ("suggest parentheses around comparison in operand of &");
1745 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
1746 if (TREE_CODE_CLASS (code) == '<' && extra_warnings
1747 && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
1748 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1750 unsigned_conversion_warning (result, arg1);
1751 unsigned_conversion_warning (result, arg2);
1752 overflow_warning (result);
1754 class = TREE_CODE_CLASS (TREE_CODE (result));
1756 /* Record the code that was specified in the source,
1757 for the sake of warnings about confusing nesting. */
1758 if (class == 'e' || class == '1'
1759 || class == '2' || class == '<')
1760 C_SET_EXP_ORIGINAL_CODE (result, code);
1761 else
1763 int flag = TREE_CONSTANT (result);
1764 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
1765 so that convert_for_assignment wouldn't strip it.
1766 That way, we got warnings for things like p = (1 - 1).
1767 But it turns out we should not get those warnings. */
1768 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
1769 C_SET_EXP_ORIGINAL_CODE (result, code);
1770 TREE_CONSTANT (result) = flag;
1773 return result;
1776 /* Build a binary-operation expression without default conversions.
1777 CODE is the kind of expression to build.
1778 This function differs from `build' in several ways:
1779 the data type of the result is computed and recorded in it,
1780 warnings are generated if arg data types are invalid,
1781 special handling for addition and subtraction of pointers is known,
1782 and some optimization is done (operations on narrow ints
1783 are done in the narrower type when that gives the same result).
1784 Constant folding is also done before the result is returned.
1786 Note that the operands will never have enumeral types, or function
1787 or array types, because either they will have the default conversions
1788 performed or they have both just been converted to some other type in which
1789 the arithmetic is to be done. */
1791 tree
1792 build_binary_op (code, orig_op0, orig_op1, convert_p)
1793 enum tree_code code;
1794 tree orig_op0, orig_op1;
1795 int convert_p;
1797 tree type0, type1;
1798 register enum tree_code code0, code1;
1799 tree op0, op1;
1801 /* Expression code to give to the expression when it is built.
1802 Normally this is CODE, which is what the caller asked for,
1803 but in some special cases we change it. */
1804 register enum tree_code resultcode = code;
1806 /* Data type in which the computation is to be performed.
1807 In the simplest cases this is the common type of the arguments. */
1808 register tree result_type = NULL;
1810 /* Nonzero means operands have already been type-converted
1811 in whatever way is necessary.
1812 Zero means they need to be converted to RESULT_TYPE. */
1813 int converted = 0;
1815 /* Nonzero means create the expression with this type, rather than
1816 RESULT_TYPE. */
1817 tree build_type = 0;
1819 /* Nonzero means after finally constructing the expression
1820 convert it to this type. */
1821 tree final_type = 0;
1823 /* Nonzero if this is an operation like MIN or MAX which can
1824 safely be computed in short if both args are promoted shorts.
1825 Also implies COMMON.
1826 -1 indicates a bitwise operation; this makes a difference
1827 in the exact conditions for when it is safe to do the operation
1828 in a narrower mode. */
1829 int shorten = 0;
1831 /* Nonzero if this is a comparison operation;
1832 if both args are promoted shorts, compare the original shorts.
1833 Also implies COMMON. */
1834 int short_compare = 0;
1836 /* Nonzero if this is a right-shift operation, which can be computed on the
1837 original short and then promoted if the operand is a promoted short. */
1838 int short_shift = 0;
1840 /* Nonzero means set RESULT_TYPE to the common type of the args. */
1841 int common = 0;
1843 if (convert_p)
1845 op0 = default_conversion (orig_op0);
1846 op1 = default_conversion (orig_op1);
1848 else
1850 op0 = orig_op0;
1851 op1 = orig_op1;
1854 type0 = TREE_TYPE (op0);
1855 type1 = TREE_TYPE (op1);
1857 /* The expression codes of the data types of the arguments tell us
1858 whether the arguments are integers, floating, pointers, etc. */
1859 code0 = TREE_CODE (type0);
1860 code1 = TREE_CODE (type1);
1862 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1863 STRIP_TYPE_NOPS (op0);
1864 STRIP_TYPE_NOPS (op1);
1866 /* If an error was already reported for one of the arguments,
1867 avoid reporting another error. */
1869 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
1870 return error_mark_node;
1872 switch (code)
1874 case PLUS_EXPR:
1875 /* Handle the pointer + int case. */
1876 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1877 return pointer_int_sum (PLUS_EXPR, op0, op1);
1878 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
1879 return pointer_int_sum (PLUS_EXPR, op1, op0);
1880 else
1881 common = 1;
1882 break;
1884 case MINUS_EXPR:
1885 /* Subtraction of two similar pointers.
1886 We must subtract them as integers, then divide by object size. */
1887 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
1888 && comp_target_types (type0, type1))
1889 return pointer_diff (op0, op1);
1890 /* Handle pointer minus int. Just like pointer plus int. */
1891 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1892 return pointer_int_sum (MINUS_EXPR, op0, op1);
1893 else
1894 common = 1;
1895 break;
1897 case MULT_EXPR:
1898 common = 1;
1899 break;
1901 case TRUNC_DIV_EXPR:
1902 case CEIL_DIV_EXPR:
1903 case FLOOR_DIV_EXPR:
1904 case ROUND_DIV_EXPR:
1905 case EXACT_DIV_EXPR:
1906 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
1907 || code0 == COMPLEX_TYPE)
1908 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
1909 || code1 == COMPLEX_TYPE))
1911 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
1912 resultcode = RDIV_EXPR;
1913 else
1914 /* Although it would be tempting to shorten always here, that
1915 loses on some targets, since the modulo instruction is
1916 undefined if the quotient can't be represented in the
1917 computation mode. We shorten only if unsigned or if
1918 dividing by something we know != -1. */
1919 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
1920 || (TREE_CODE (op1) == INTEGER_CST
1921 && ! integer_all_onesp (op1)));
1922 common = 1;
1924 break;
1926 case BIT_AND_EXPR:
1927 case BIT_ANDTC_EXPR:
1928 case BIT_IOR_EXPR:
1929 case BIT_XOR_EXPR:
1930 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
1931 shorten = -1;
1932 /* If one operand is a constant, and the other is a short type
1933 that has been converted to an int,
1934 really do the work in the short type and then convert the
1935 result to int. If we are lucky, the constant will be 0 or 1
1936 in the short type, making the entire operation go away. */
1937 if (TREE_CODE (op0) == INTEGER_CST
1938 && TREE_CODE (op1) == NOP_EXPR
1939 && TYPE_PRECISION (type1) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1, 0)))
1940 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op1, 0))))
1942 final_type = result_type;
1943 op1 = TREE_OPERAND (op1, 0);
1944 result_type = TREE_TYPE (op1);
1946 if (TREE_CODE (op1) == INTEGER_CST
1947 && TREE_CODE (op0) == NOP_EXPR
1948 && TYPE_PRECISION (type0) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0)))
1949 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
1951 final_type = result_type;
1952 op0 = TREE_OPERAND (op0, 0);
1953 result_type = TREE_TYPE (op0);
1955 break;
1957 case TRUNC_MOD_EXPR:
1958 case FLOOR_MOD_EXPR:
1959 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
1961 /* Although it would be tempting to shorten always here, that loses
1962 on some targets, since the modulo instruction is undefined if the
1963 quotient can't be represented in the computation mode. We shorten
1964 only if unsigned or if dividing by something we know != -1. */
1965 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
1966 || (TREE_CODE (op1) == INTEGER_CST
1967 && ! integer_all_onesp (op1)));
1968 common = 1;
1970 break;
1972 case TRUTH_ANDIF_EXPR:
1973 case TRUTH_ORIF_EXPR:
1974 case TRUTH_AND_EXPR:
1975 case TRUTH_OR_EXPR:
1976 case TRUTH_XOR_EXPR:
1977 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
1978 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
1979 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
1980 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
1982 /* Result of these operations is always an int,
1983 but that does not mean the operands should be
1984 converted to ints! */
1985 result_type = integer_type_node;
1986 op0 = truthvalue_conversion (op0);
1987 op1 = truthvalue_conversion (op1);
1988 converted = 1;
1990 break;
1992 /* Shift operations: result has same type as first operand;
1993 always convert second operand to int.
1994 Also set SHORT_SHIFT if shifting rightward. */
1996 case RSHIFT_EXPR:
1997 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
1999 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2001 if (tree_int_cst_sgn (op1) < 0)
2002 warning ("right shift count is negative");
2003 else
2005 if (! integer_zerop (op1))
2006 short_shift = 1;
2008 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2009 warning ("right shift count >= width of type");
2013 /* Use the type of the value to be shifted.
2014 This is what most traditional C compilers do. */
2015 result_type = type0;
2016 /* Unless traditional, convert the shift-count to an integer,
2017 regardless of size of value being shifted. */
2018 if (! flag_traditional)
2020 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2021 op1 = convert (integer_type_node, op1);
2022 /* Avoid converting op1 to result_type later. */
2023 converted = 1;
2026 break;
2028 case LSHIFT_EXPR:
2029 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2031 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2033 if (tree_int_cst_sgn (op1) < 0)
2034 warning ("left shift count is negative");
2036 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2037 warning ("left shift count >= width of type");
2040 /* Use the type of the value to be shifted.
2041 This is what most traditional C compilers do. */
2042 result_type = type0;
2043 /* Unless traditional, convert the shift-count to an integer,
2044 regardless of size of value being shifted. */
2045 if (! flag_traditional)
2047 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2048 op1 = convert (integer_type_node, op1);
2049 /* Avoid converting op1 to result_type later. */
2050 converted = 1;
2053 break;
2055 case RROTATE_EXPR:
2056 case LROTATE_EXPR:
2057 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2059 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2061 if (tree_int_cst_sgn (op1) < 0)
2062 warning ("shift count is negative");
2063 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2064 warning ("shift count >= width of type");
2067 /* Use the type of the value to be shifted.
2068 This is what most traditional C compilers do. */
2069 result_type = type0;
2070 /* Unless traditional, convert the shift-count to an integer,
2071 regardless of size of value being shifted. */
2072 if (! flag_traditional)
2074 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2075 op1 = convert (integer_type_node, op1);
2076 /* Avoid converting op1 to result_type later. */
2077 converted = 1;
2080 break;
2082 case EQ_EXPR:
2083 case NE_EXPR:
2084 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
2085 warning ("comparing floating point with == or != is unsafe");
2086 /* Result of comparison is always int,
2087 but don't convert the args to int! */
2088 build_type = integer_type_node;
2089 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2090 || code0 == COMPLEX_TYPE)
2091 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2092 || code1 == COMPLEX_TYPE))
2093 short_compare = 1;
2094 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2096 register tree tt0 = TREE_TYPE (type0);
2097 register tree tt1 = TREE_TYPE (type1);
2098 /* Anything compares with void *. void * compares with anything.
2099 Otherwise, the targets must be compatible
2100 and both must be object or both incomplete. */
2101 if (comp_target_types (type0, type1))
2102 result_type = common_type (type0, type1);
2103 else if (TYPE_MAIN_VARIANT (tt0) == void_type_node)
2105 /* op0 != orig_op0 detects the case of something
2106 whose value is 0 but which isn't a valid null ptr const. */
2107 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
2108 && TREE_CODE (tt1) == FUNCTION_TYPE)
2109 pedwarn ("ANSI C forbids comparison of `void *' with function pointer");
2111 else if (TYPE_MAIN_VARIANT (tt1) == void_type_node)
2113 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
2114 && TREE_CODE (tt0) == FUNCTION_TYPE)
2115 pedwarn ("ANSI C forbids comparison of `void *' with function pointer");
2117 else
2118 pedwarn ("comparison of distinct pointer types lacks a cast");
2120 if (result_type == NULL_TREE)
2121 result_type = ptr_type_node;
2123 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2124 && integer_zerop (op1))
2125 result_type = type0;
2126 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2127 && integer_zerop (op0))
2128 result_type = type1;
2129 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2131 result_type = type0;
2132 if (! flag_traditional)
2133 pedwarn ("comparison between pointer and integer");
2135 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2137 result_type = type1;
2138 if (! flag_traditional)
2139 pedwarn ("comparison between pointer and integer");
2141 break;
2143 case MAX_EXPR:
2144 case MIN_EXPR:
2145 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2146 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2147 shorten = 1;
2148 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2150 if (comp_target_types (type0, type1))
2152 result_type = common_type (type0, type1);
2153 if (pedantic
2154 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2155 pedwarn ("ANSI C forbids ordered comparisons of pointers to functions");
2157 else
2159 result_type = ptr_type_node;
2160 pedwarn ("comparison of distinct pointer types lacks a cast");
2163 break;
2165 case LE_EXPR:
2166 case GE_EXPR:
2167 case LT_EXPR:
2168 case GT_EXPR:
2169 build_type = integer_type_node;
2170 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2171 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2172 short_compare = 1;
2173 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2175 if (comp_target_types (type0, type1))
2177 result_type = common_type (type0, type1);
2178 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
2179 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
2180 pedwarn ("comparison of complete and incomplete pointers");
2181 else if (pedantic
2182 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2183 pedwarn ("ANSI C forbids ordered comparisons of pointers to functions");
2185 else
2187 result_type = ptr_type_node;
2188 pedwarn ("comparison of distinct pointer types lacks a cast");
2191 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2192 && integer_zerop (op1))
2194 result_type = type0;
2195 if (pedantic || extra_warnings)
2196 pedwarn ("ordered comparison of pointer with integer zero");
2198 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2199 && integer_zerop (op0))
2201 result_type = type1;
2202 if (pedantic)
2203 pedwarn ("ordered comparison of pointer with integer zero");
2205 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2207 result_type = type0;
2208 if (! flag_traditional)
2209 pedwarn ("comparison between pointer and integer");
2211 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2213 result_type = type1;
2214 if (! flag_traditional)
2215 pedwarn ("comparison between pointer and integer");
2217 break;
2219 case UNORDERED_EXPR:
2220 case ORDERED_EXPR:
2221 case UNLT_EXPR:
2222 case UNLE_EXPR:
2223 case UNGT_EXPR:
2224 case UNGE_EXPR:
2225 case UNEQ_EXPR:
2226 build_type = integer_type_node;
2227 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
2229 error ("unordered comparison on non-floating point argument");
2230 return error_mark_node;
2232 common = 1;
2233 break;
2235 default:
2236 break;
2239 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2241 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2243 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
2245 if (shorten || common || short_compare)
2246 result_type = common_type (type0, type1);
2248 /* For certain operations (which identify themselves by shorten != 0)
2249 if both args were extended from the same smaller type,
2250 do the arithmetic in that type and then extend.
2252 shorten !=0 and !=1 indicates a bitwise operation.
2253 For them, this optimization is safe only if
2254 both args are zero-extended or both are sign-extended.
2255 Otherwise, we might change the result.
2256 Eg, (short)-1 | (unsigned short)-1 is (int)-1
2257 but calculated in (unsigned short) it would be (unsigned short)-1. */
2259 if (shorten && none_complex)
2261 int unsigned0, unsigned1;
2262 tree arg0 = get_narrower (op0, &unsigned0);
2263 tree arg1 = get_narrower (op1, &unsigned1);
2264 /* UNS is 1 if the operation to be done is an unsigned one. */
2265 int uns = TREE_UNSIGNED (result_type);
2266 tree type;
2268 final_type = result_type;
2270 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
2271 but it *requires* conversion to FINAL_TYPE. */
2273 if ((TYPE_PRECISION (TREE_TYPE (op0))
2274 == TYPE_PRECISION (TREE_TYPE (arg0)))
2275 && TREE_TYPE (op0) != final_type)
2276 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
2277 if ((TYPE_PRECISION (TREE_TYPE (op1))
2278 == TYPE_PRECISION (TREE_TYPE (arg1)))
2279 && TREE_TYPE (op1) != final_type)
2280 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
2282 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
2284 /* For bitwise operations, signedness of nominal type
2285 does not matter. Consider only how operands were extended. */
2286 if (shorten == -1)
2287 uns = unsigned0;
2289 /* Note that in all three cases below we refrain from optimizing
2290 an unsigned operation on sign-extended args.
2291 That would not be valid. */
2293 /* Both args variable: if both extended in same way
2294 from same width, do it in that width.
2295 Do it unsigned if args were zero-extended. */
2296 if ((TYPE_PRECISION (TREE_TYPE (arg0))
2297 < TYPE_PRECISION (result_type))
2298 && (TYPE_PRECISION (TREE_TYPE (arg1))
2299 == TYPE_PRECISION (TREE_TYPE (arg0)))
2300 && unsigned0 == unsigned1
2301 && (unsigned0 || !uns))
2302 result_type
2303 = signed_or_unsigned_type (unsigned0,
2304 common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
2305 else if (TREE_CODE (arg0) == INTEGER_CST
2306 && (unsigned1 || !uns)
2307 && (TYPE_PRECISION (TREE_TYPE (arg1))
2308 < TYPE_PRECISION (result_type))
2309 && (type = signed_or_unsigned_type (unsigned1,
2310 TREE_TYPE (arg1)),
2311 int_fits_type_p (arg0, type)))
2312 result_type = type;
2313 else if (TREE_CODE (arg1) == INTEGER_CST
2314 && (unsigned0 || !uns)
2315 && (TYPE_PRECISION (TREE_TYPE (arg0))
2316 < TYPE_PRECISION (result_type))
2317 && (type = signed_or_unsigned_type (unsigned0,
2318 TREE_TYPE (arg0)),
2319 int_fits_type_p (arg1, type)))
2320 result_type = type;
2323 /* Shifts can be shortened if shifting right. */
2325 if (short_shift)
2327 int unsigned_arg;
2328 tree arg0 = get_narrower (op0, &unsigned_arg);
2330 final_type = result_type;
2332 if (arg0 == op0 && final_type == TREE_TYPE (op0))
2333 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
2335 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
2336 /* We can shorten only if the shift count is less than the
2337 number of bits in the smaller type size. */
2338 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
2339 /* If arg is sign-extended and then unsigned-shifted,
2340 we can simulate this with a signed shift in arg's type
2341 only if the extended result is at least twice as wide
2342 as the arg. Otherwise, the shift could use up all the
2343 ones made by sign-extension and bring in zeros.
2344 We can't optimize that case at all, but in most machines
2345 it never happens because available widths are 2**N. */
2346 && (!TREE_UNSIGNED (final_type)
2347 || unsigned_arg
2348 || (2 * TYPE_PRECISION (TREE_TYPE (arg0))
2349 <= TYPE_PRECISION (result_type))))
2351 /* Do an unsigned shift if the operand was zero-extended. */
2352 result_type
2353 = signed_or_unsigned_type (unsigned_arg,
2354 TREE_TYPE (arg0));
2355 /* Convert value-to-be-shifted to that type. */
2356 if (TREE_TYPE (op0) != result_type)
2357 op0 = convert (result_type, op0);
2358 converted = 1;
2362 /* Comparison operations are shortened too but differently.
2363 They identify themselves by setting short_compare = 1. */
2365 if (short_compare)
2367 /* Don't write &op0, etc., because that would prevent op0
2368 from being kept in a register.
2369 Instead, make copies of the our local variables and
2370 pass the copies by reference, then copy them back afterward. */
2371 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
2372 enum tree_code xresultcode = resultcode;
2373 tree val
2374 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
2376 if (val != 0)
2377 return val;
2379 op0 = xop0, op1 = xop1;
2380 converted = 1;
2381 resultcode = xresultcode;
2383 if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare != 0)
2384 && skip_evaluation == 0)
2386 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
2387 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
2388 int unsignedp0, unsignedp1;
2389 tree primop0 = get_narrower (op0, &unsignedp0);
2390 tree primop1 = get_narrower (op1, &unsignedp1);
2392 xop0 = orig_op0;
2393 xop1 = orig_op1;
2394 STRIP_TYPE_NOPS (xop0);
2395 STRIP_TYPE_NOPS (xop1);
2397 /* Give warnings for comparisons between signed and unsigned
2398 quantities that may fail.
2400 Do the checking based on the original operand trees, so that
2401 casts will be considered, but default promotions won't be.
2403 Do not warn if the comparison is being done in a signed type,
2404 since the signed type will only be chosen if it can represent
2405 all the values of the unsigned type. */
2406 if (! TREE_UNSIGNED (result_type))
2407 /* OK */;
2408 /* Do not warn if both operands are the same signedness. */
2409 else if (op0_signed == op1_signed)
2410 /* OK */;
2411 else
2413 tree sop, uop;
2415 if (op0_signed)
2416 sop = xop0, uop = xop1;
2417 else
2418 sop = xop1, uop = xop0;
2420 /* Do not warn if the signed quantity is an
2421 unsuffixed integer literal (or some static
2422 constant expression involving such literals or a
2423 conditional expression involving such literals)
2424 and it is non-negative. */
2425 if (tree_expr_nonnegative_p (sop))
2426 /* OK */;
2427 /* Do not warn if the comparison is an equality operation,
2428 the unsigned quantity is an integral constant, and it
2429 would fit in the result if the result were signed. */
2430 else if (TREE_CODE (uop) == INTEGER_CST
2431 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
2432 && int_fits_type_p (uop, signed_type (result_type)))
2433 /* OK */;
2434 /* Do not warn if the unsigned quantity is an enumeration
2435 constant and its maximum value would fit in the result
2436 if the result were signed. */
2437 else if (TREE_CODE (uop) == INTEGER_CST
2438 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
2439 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE(uop)),
2440 signed_type (result_type)))
2441 /* OK */;
2442 else
2443 warning ("comparison between signed and unsigned");
2446 /* Warn if two unsigned values are being compared in a size
2447 larger than their original size, and one (and only one) is the
2448 result of a `~' operator. This comparison will always fail.
2450 Also warn if one operand is a constant, and the constant
2451 does not have all bits set that are set in the ~ operand
2452 when it is extended. */
2454 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
2455 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
2457 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
2458 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
2459 &unsignedp0);
2460 else
2461 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
2462 &unsignedp1);
2464 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
2466 tree primop;
2467 HOST_WIDE_INT constant, mask;
2468 int unsignedp, bits;
2470 if (host_integerp (primop0, 0))
2472 primop = primop1;
2473 unsignedp = unsignedp1;
2474 constant = tree_low_cst (primop0, 0);
2476 else
2478 primop = primop0;
2479 unsignedp = unsignedp0;
2480 constant = tree_low_cst (primop1, 0);
2483 bits = TYPE_PRECISION (TREE_TYPE (primop));
2484 if (bits < TYPE_PRECISION (result_type)
2485 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
2487 mask = (~ (HOST_WIDE_INT) 0) << bits;
2488 if ((mask & constant) != mask)
2489 warning ("comparison of promoted ~unsigned with constant");
2492 else if (unsignedp0 && unsignedp1
2493 && (TYPE_PRECISION (TREE_TYPE (primop0))
2494 < TYPE_PRECISION (result_type))
2495 && (TYPE_PRECISION (TREE_TYPE (primop1))
2496 < TYPE_PRECISION (result_type)))
2497 warning ("comparison of promoted ~unsigned with unsigned");
2503 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
2504 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
2505 Then the expression will be built.
2506 It will be given type FINAL_TYPE if that is nonzero;
2507 otherwise, it will be given type RESULT_TYPE. */
2509 if (!result_type)
2511 binary_op_error (code);
2512 return error_mark_node;
2515 if (! converted)
2517 if (TREE_TYPE (op0) != result_type)
2518 op0 = convert (result_type, op0);
2519 if (TREE_TYPE (op1) != result_type)
2520 op1 = convert (result_type, op1);
2523 if (build_type == NULL_TREE)
2524 build_type = result_type;
2527 register tree result = build (resultcode, build_type, op0, op1);
2528 register tree folded;
2530 folded = fold (result);
2531 if (folded == result)
2532 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2533 if (final_type != 0)
2534 return convert (final_type, folded);
2535 return folded;
2539 /* Return a tree for the sum or difference (RESULTCODE says which)
2540 of pointer PTROP and integer INTOP. */
2542 static tree
2543 pointer_int_sum (resultcode, ptrop, intop)
2544 enum tree_code resultcode;
2545 register tree ptrop, intop;
2547 tree size_exp;
2549 register tree result;
2550 register tree folded;
2552 /* The result is a pointer of the same type that is being added. */
2554 register tree result_type = TREE_TYPE (ptrop);
2556 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2558 if (pedantic || warn_pointer_arith)
2559 pedwarn ("pointer of type `void *' used in arithmetic");
2560 size_exp = integer_one_node;
2562 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2564 if (pedantic || warn_pointer_arith)
2565 pedwarn ("pointer to a function used in arithmetic");
2566 size_exp = integer_one_node;
2568 else
2569 size_exp = c_size_in_bytes (TREE_TYPE (result_type));
2571 /* If what we are about to multiply by the size of the elements
2572 contains a constant term, apply distributive law
2573 and multiply that constant term separately.
2574 This helps produce common subexpressions. */
2576 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2577 && ! TREE_CONSTANT (intop)
2578 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2579 && TREE_CONSTANT (size_exp)
2580 /* If the constant comes from pointer subtraction,
2581 skip this optimization--it would cause an error. */
2582 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2583 /* If the constant is unsigned, and smaller than the pointer size,
2584 then we must skip this optimization. This is because it could cause
2585 an overflow error if the constant is negative but INTOP is not. */
2586 && (! TREE_UNSIGNED (TREE_TYPE (intop))
2587 || (TYPE_PRECISION (TREE_TYPE (intop))
2588 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2590 enum tree_code subcode = resultcode;
2591 tree int_type = TREE_TYPE (intop);
2592 if (TREE_CODE (intop) == MINUS_EXPR)
2593 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2594 /* Convert both subexpression types to the type of intop,
2595 because weird cases involving pointer arithmetic
2596 can result in a sum or difference with different type args. */
2597 ptrop = build_binary_op (subcode, ptrop,
2598 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2599 intop = convert (int_type, TREE_OPERAND (intop, 0));
2602 /* Convert the integer argument to a type the same size as sizetype
2603 so the multiply won't overflow spuriously. */
2605 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2606 || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
2607 intop = convert (type_for_size (TYPE_PRECISION (sizetype),
2608 TREE_UNSIGNED (sizetype)), intop);
2610 /* Replace the integer argument with a suitable product by the object size.
2611 Do this multiplication as signed, then convert to the appropriate
2612 pointer type (actually unsigned integral). */
2614 intop = convert (result_type,
2615 build_binary_op (MULT_EXPR, intop,
2616 convert (TREE_TYPE (intop), size_exp), 1));
2618 /* Create the sum or difference. */
2620 result = build (resultcode, result_type, ptrop, intop);
2622 folded = fold (result);
2623 if (folded == result)
2624 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2625 return folded;
2628 /* Return a tree for the difference of pointers OP0 and OP1.
2629 The resulting tree has type int. */
2631 static tree
2632 pointer_diff (op0, op1)
2633 register tree op0, op1;
2635 register tree result, folded;
2636 tree restype = ptrdiff_type_node;
2638 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2640 if (pedantic || warn_pointer_arith)
2642 if (TREE_CODE (target_type) == VOID_TYPE)
2643 pedwarn ("pointer of type `void *' used in subtraction");
2644 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2645 pedwarn ("pointer to a function used in subtraction");
2648 /* First do the subtraction as integers;
2649 then drop through to build the divide operator.
2650 Do not do default conversions on the minus operator
2651 in case restype is a short type. */
2653 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2654 convert (restype, op1), 0);
2655 /* This generates an error if op1 is pointer to incomplete type. */
2656 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (op1))))
2657 error ("arithmetic on pointer to an incomplete type");
2659 /* This generates an error if op0 is pointer to incomplete type. */
2660 op1 = c_size_in_bytes (target_type);
2662 /* Divide by the size, in easiest possible way. */
2664 result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2666 folded = fold (result);
2667 if (folded == result)
2668 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2669 return folded;
2672 /* Construct and perhaps optimize a tree representation
2673 for a unary operation. CODE, a tree_code, specifies the operation
2674 and XARG is the operand. NOCONVERT nonzero suppresses
2675 the default promotions (such as from short to int). */
2677 tree
2678 build_unary_op (code, xarg, noconvert)
2679 enum tree_code code;
2680 tree xarg;
2681 int noconvert;
2683 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2684 register tree arg = xarg;
2685 register tree argtype = 0;
2686 register enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2687 tree val;
2689 if (typecode == ERROR_MARK)
2690 return error_mark_node;
2691 if (typecode == ENUMERAL_TYPE)
2692 typecode = INTEGER_TYPE;
2694 switch (code)
2696 case CONVERT_EXPR:
2697 /* This is used for unary plus, because a CONVERT_EXPR
2698 is enough to prevent anybody from looking inside for
2699 associativity, but won't generate any code. */
2700 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2701 || typecode == COMPLEX_TYPE))
2703 error ("wrong type argument to unary plus");
2704 return error_mark_node;
2706 else if (!noconvert)
2707 arg = default_conversion (arg);
2708 break;
2710 case NEGATE_EXPR:
2711 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2712 || typecode == COMPLEX_TYPE))
2714 error ("wrong type argument to unary minus");
2715 return error_mark_node;
2717 else if (!noconvert)
2718 arg = default_conversion (arg);
2719 break;
2721 case BIT_NOT_EXPR:
2722 if (typecode == COMPLEX_TYPE)
2724 code = CONJ_EXPR;
2725 if (!noconvert)
2726 arg = default_conversion (arg);
2728 else if (typecode != INTEGER_TYPE)
2730 error ("wrong type argument to bit-complement");
2731 return error_mark_node;
2733 else if (!noconvert)
2734 arg = default_conversion (arg);
2735 break;
2737 case ABS_EXPR:
2738 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2739 || typecode == COMPLEX_TYPE))
2741 error ("wrong type argument to abs");
2742 return error_mark_node;
2744 else if (!noconvert)
2745 arg = default_conversion (arg);
2746 break;
2748 case CONJ_EXPR:
2749 /* Conjugating a real value is a no-op, but allow it anyway. */
2750 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2751 || typecode == COMPLEX_TYPE))
2753 error ("wrong type argument to conjugation");
2754 return error_mark_node;
2756 else if (!noconvert)
2757 arg = default_conversion (arg);
2758 break;
2760 case TRUTH_NOT_EXPR:
2761 if (typecode != INTEGER_TYPE
2762 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2763 && typecode != COMPLEX_TYPE
2764 /* These will convert to a pointer. */
2765 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2767 error ("wrong type argument to unary exclamation mark");
2768 return error_mark_node;
2770 arg = truthvalue_conversion (arg);
2771 return invert_truthvalue (arg);
2773 case NOP_EXPR:
2774 break;
2776 case REALPART_EXPR:
2777 if (TREE_CODE (arg) == COMPLEX_CST)
2778 return TREE_REALPART (arg);
2779 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2780 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2781 else
2782 return arg;
2784 case IMAGPART_EXPR:
2785 if (TREE_CODE (arg) == COMPLEX_CST)
2786 return TREE_IMAGPART (arg);
2787 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2788 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2789 else
2790 return convert (TREE_TYPE (arg), integer_zero_node);
2792 case PREINCREMENT_EXPR:
2793 case POSTINCREMENT_EXPR:
2794 case PREDECREMENT_EXPR:
2795 case POSTDECREMENT_EXPR:
2796 /* Handle complex lvalues (when permitted)
2797 by reduction to simpler cases. */
2799 val = unary_complex_lvalue (code, arg);
2800 if (val != 0)
2801 return val;
2803 /* Increment or decrement the real part of the value,
2804 and don't change the imaginary part. */
2805 if (typecode == COMPLEX_TYPE)
2807 tree real, imag;
2809 arg = stabilize_reference (arg);
2810 real = build_unary_op (REALPART_EXPR, arg, 1);
2811 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2812 return build (COMPLEX_EXPR, TREE_TYPE (arg),
2813 build_unary_op (code, real, 1), imag);
2816 /* Report invalid types. */
2818 if (typecode != POINTER_TYPE
2819 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2821 error ("wrong type argument to %s",
2822 code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR
2823 ? "increment" : "decrement");
2824 return error_mark_node;
2828 register tree inc;
2829 tree result_type = TREE_TYPE (arg);
2831 arg = get_unwidened (arg, 0);
2832 argtype = TREE_TYPE (arg);
2834 /* Compute the increment. */
2836 if (typecode == POINTER_TYPE)
2838 /* If pointer target is an undefined struct,
2839 we just cannot know how to do the arithmetic. */
2840 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2841 error ("%s of pointer to unknown structure",
2842 code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR
2843 ? "increment" : "decrement");
2844 else if ((pedantic || warn_pointer_arith)
2845 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2846 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2847 pedwarn ("wrong type argument to %s",
2848 code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR
2849 ? "increment" : "decrement");
2850 inc = c_size_in_bytes (TREE_TYPE (result_type));
2852 else
2853 inc = integer_one_node;
2855 inc = convert (argtype, inc);
2857 /* Handle incrementing a cast-expression. */
2859 while (1)
2860 switch (TREE_CODE (arg))
2862 case NOP_EXPR:
2863 case CONVERT_EXPR:
2864 case FLOAT_EXPR:
2865 case FIX_TRUNC_EXPR:
2866 case FIX_FLOOR_EXPR:
2867 case FIX_ROUND_EXPR:
2868 case FIX_CEIL_EXPR:
2869 pedantic_lvalue_warning (CONVERT_EXPR);
2870 /* If the real type has the same machine representation
2871 as the type it is cast to, we can make better output
2872 by adding directly to the inside of the cast. */
2873 if ((TREE_CODE (TREE_TYPE (arg))
2874 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
2875 && (TYPE_MODE (TREE_TYPE (arg))
2876 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
2877 arg = TREE_OPERAND (arg, 0);
2878 else
2880 tree incremented, modify, value;
2881 arg = stabilize_reference (arg);
2882 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
2883 value = arg;
2884 else
2885 value = save_expr (arg);
2886 incremented = build (((code == PREINCREMENT_EXPR
2887 || code == POSTINCREMENT_EXPR)
2888 ? PLUS_EXPR : MINUS_EXPR),
2889 argtype, value, inc);
2890 TREE_SIDE_EFFECTS (incremented) = 1;
2891 modify = build_modify_expr (arg, NOP_EXPR, incremented);
2892 value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
2893 TREE_USED (value) = 1;
2894 return value;
2896 break;
2898 default:
2899 goto give_up;
2901 give_up:
2903 /* Complain about anything else that is not a true lvalue. */
2904 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2905 || code == POSTINCREMENT_EXPR)
2906 ? "invalid lvalue in increment"
2907 : "invalid lvalue in decrement")))
2908 return error_mark_node;
2910 /* Report a read-only lvalue. */
2911 if (TREE_READONLY (arg))
2912 readonly_warning (arg,
2913 ((code == PREINCREMENT_EXPR
2914 || code == POSTINCREMENT_EXPR)
2915 ? "increment" : "decrement"));
2917 val = build (code, TREE_TYPE (arg), arg, inc);
2918 TREE_SIDE_EFFECTS (val) = 1;
2919 val = convert (result_type, val);
2920 if (TREE_CODE (val) != code)
2921 TREE_NO_UNUSED_WARNING (val) = 1;
2922 return val;
2925 case ADDR_EXPR:
2926 /* Note that this operation never does default_conversion
2927 regardless of NOCONVERT. */
2929 /* Let &* cancel out to simplify resulting code. */
2930 if (TREE_CODE (arg) == INDIRECT_REF)
2932 /* Don't let this be an lvalue. */
2933 if (lvalue_p (TREE_OPERAND (arg, 0)))
2934 return non_lvalue (TREE_OPERAND (arg, 0));
2935 return TREE_OPERAND (arg, 0);
2938 /* For &x[y], return x+y */
2939 if (TREE_CODE (arg) == ARRAY_REF)
2941 if (mark_addressable (TREE_OPERAND (arg, 0)) == 0)
2942 return error_mark_node;
2943 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
2944 TREE_OPERAND (arg, 1), 1);
2947 /* Handle complex lvalues (when permitted)
2948 by reduction to simpler cases. */
2949 val = unary_complex_lvalue (code, arg);
2950 if (val != 0)
2951 return val;
2953 #if 0 /* Turned off because inconsistent;
2954 float f; *&(int)f = 3.4 stores in int format
2955 whereas (int)f = 3.4 stores in float format. */
2956 /* Address of a cast is just a cast of the address
2957 of the operand of the cast. */
2958 switch (TREE_CODE (arg))
2960 case NOP_EXPR:
2961 case CONVERT_EXPR:
2962 case FLOAT_EXPR:
2963 case FIX_TRUNC_EXPR:
2964 case FIX_FLOOR_EXPR:
2965 case FIX_ROUND_EXPR:
2966 case FIX_CEIL_EXPR:
2967 if (pedantic)
2968 pedwarn ("ANSI C forbids the address of a cast expression");
2969 return convert (build_pointer_type (TREE_TYPE (arg)),
2970 build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0),
2971 0));
2973 #endif
2975 /* Allow the address of a constructor if all the elements
2976 are constant. */
2977 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_CONSTANT (arg))
2979 /* Anything not already handled and not a true memory reference
2980 is an error. */
2981 else if (typecode != FUNCTION_TYPE
2982 && !lvalue_or_else (arg, "invalid lvalue in unary `&'"))
2983 return error_mark_node;
2985 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2986 argtype = TREE_TYPE (arg);
2988 /* If the lvalue is const or volatile, merge that into the type
2989 to which the address will point. Note that you can't get a
2990 restricted pointer by taking the address of something, so we
2991 only have to deal with `const' and `volatile' here. */
2992 if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
2993 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
2994 argtype = c_build_type_variant (argtype,
2995 TREE_READONLY (arg),
2996 TREE_THIS_VOLATILE (arg));
2998 argtype = build_pointer_type (argtype);
3000 if (mark_addressable (arg) == 0)
3001 return error_mark_node;
3004 tree addr;
3006 if (TREE_CODE (arg) == COMPONENT_REF)
3008 tree field = TREE_OPERAND (arg, 1);
3010 addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
3012 if (DECL_C_BIT_FIELD (field))
3014 error ("attempt to take address of bit-field structure member `%s'",
3015 IDENTIFIER_POINTER (DECL_NAME (field)));
3016 return error_mark_node;
3019 addr = fold (build (PLUS_EXPR, argtype,
3020 convert (argtype, addr),
3021 convert (argtype, byte_position (field))));
3023 else
3024 addr = build1 (code, argtype, arg);
3026 /* Address of a static or external variable or
3027 file-scope function counts as a constant. */
3028 if (staticp (arg)
3029 && ! (TREE_CODE (arg) == FUNCTION_DECL
3030 && DECL_CONTEXT (arg) != 0))
3031 TREE_CONSTANT (addr) = 1;
3032 return addr;
3035 default:
3036 break;
3039 if (argtype == 0)
3040 argtype = TREE_TYPE (arg);
3041 return fold (build1 (code, argtype, arg));
3044 #if 0
3045 /* If CONVERSIONS is a conversion expression or a nested sequence of such,
3046 convert ARG with the same conversions in the same order
3047 and return the result. */
3049 static tree
3050 convert_sequence (conversions, arg)
3051 tree conversions;
3052 tree arg;
3054 switch (TREE_CODE (conversions))
3056 case NOP_EXPR:
3057 case CONVERT_EXPR:
3058 case FLOAT_EXPR:
3059 case FIX_TRUNC_EXPR:
3060 case FIX_FLOOR_EXPR:
3061 case FIX_ROUND_EXPR:
3062 case FIX_CEIL_EXPR:
3063 return convert (TREE_TYPE (conversions),
3064 convert_sequence (TREE_OPERAND (conversions, 0),
3065 arg));
3067 default:
3068 return arg;
3071 #endif /* 0 */
3073 /* Return nonzero if REF is an lvalue valid for this language.
3074 Lvalues can be assigned, unless their type has TYPE_READONLY.
3075 Lvalues can have their address taken, unless they have DECL_REGISTER. */
3078 lvalue_p (ref)
3079 tree ref;
3081 register enum tree_code code = TREE_CODE (ref);
3083 switch (code)
3085 case REALPART_EXPR:
3086 case IMAGPART_EXPR:
3087 case COMPONENT_REF:
3088 return lvalue_p (TREE_OPERAND (ref, 0));
3090 case STRING_CST:
3091 return 1;
3093 case INDIRECT_REF:
3094 case ARRAY_REF:
3095 case VAR_DECL:
3096 case PARM_DECL:
3097 case RESULT_DECL:
3098 case ERROR_MARK:
3099 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3100 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
3102 case BIND_EXPR:
3103 case RTL_EXPR:
3104 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
3106 default:
3107 return 0;
3111 /* Return nonzero if REF is an lvalue valid for this language;
3112 otherwise, print an error message and return zero. */
3115 lvalue_or_else (ref, msgid)
3116 tree ref;
3117 const char *msgid;
3119 int win = lvalue_p (ref);
3121 if (! win)
3122 error ("%s", msgid);
3124 return win;
3127 /* Apply unary lvalue-demanding operator CODE to the expression ARG
3128 for certain kinds of expressions which are not really lvalues
3129 but which we can accept as lvalues.
3131 If ARG is not a kind of expression we can handle, return zero. */
3133 static tree
3134 unary_complex_lvalue (code, arg)
3135 enum tree_code code;
3136 tree arg;
3138 /* Handle (a, b) used as an "lvalue". */
3139 if (TREE_CODE (arg) == COMPOUND_EXPR)
3141 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
3143 /* If this returns a function type, it isn't really being used as
3144 an lvalue, so don't issue a warning about it. */
3145 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE)
3146 pedantic_lvalue_warning (COMPOUND_EXPR);
3148 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
3149 TREE_OPERAND (arg, 0), real_result);
3152 /* Handle (a ? b : c) used as an "lvalue". */
3153 if (TREE_CODE (arg) == COND_EXPR)
3155 pedantic_lvalue_warning (COND_EXPR);
3156 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE)
3157 pedantic_lvalue_warning (COMPOUND_EXPR);
3159 return (build_conditional_expr
3160 (TREE_OPERAND (arg, 0),
3161 build_unary_op (code, TREE_OPERAND (arg, 1), 0),
3162 build_unary_op (code, TREE_OPERAND (arg, 2), 0)));
3165 return 0;
3168 /* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
3169 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
3171 static void
3172 pedantic_lvalue_warning (code)
3173 enum tree_code code;
3175 if (pedantic)
3176 switch (code)
3178 case COND_EXPR:
3179 pedwarn ("ANSI C forbids use of conditional expressions as lvalues");
3180 break;
3181 case COMPOUND_EXPR:
3182 pedwarn ("ANSI C forbids use of compound expressions as lvalues");
3183 break;
3184 default:
3185 pedwarn ("ANSI C forbids use of cast expressions as lvalues");
3186 break;
3190 /* Warn about storing in something that is `const'. */
3192 void
3193 readonly_warning (arg, msgid)
3194 tree arg;
3195 const char *msgid;
3197 /* Forbid assignments to iterators. */
3198 if (TREE_CODE (arg) == VAR_DECL && ITERATOR_P (arg))
3199 pedwarn ("%s of iterator `%s'", _(msgid),
3200 IDENTIFIER_POINTER (DECL_NAME (arg)));
3202 if (TREE_CODE (arg) == COMPONENT_REF)
3204 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3205 readonly_warning (TREE_OPERAND (arg, 0), msgid);
3206 else
3207 pedwarn ("%s of read-only member `%s'", _(msgid),
3208 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
3210 else if (TREE_CODE (arg) == VAR_DECL)
3211 pedwarn ("%s of read-only variable `%s'", _(msgid),
3212 IDENTIFIER_POINTER (DECL_NAME (arg)));
3213 else
3214 pedwarn ("%s of read-only location", _(msgid));
3217 /* Mark EXP saying that we need to be able to take the
3218 address of it; it should not be allocated in a register.
3219 Value is 1 if successful. */
3222 mark_addressable (exp)
3223 tree exp;
3225 register tree x = exp;
3226 while (1)
3227 switch (TREE_CODE (x))
3229 case COMPONENT_REF:
3230 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
3232 error ("cannot take address of bitfield `%s'",
3233 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
3234 return 0;
3237 /* ... fall through ... */
3239 case ADDR_EXPR:
3240 case ARRAY_REF:
3241 case REALPART_EXPR:
3242 case IMAGPART_EXPR:
3243 x = TREE_OPERAND (x, 0);
3244 break;
3246 case CONSTRUCTOR:
3247 TREE_ADDRESSABLE (x) = 1;
3248 return 1;
3250 case VAR_DECL:
3251 case CONST_DECL:
3252 case PARM_DECL:
3253 case RESULT_DECL:
3254 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
3255 && DECL_NONLOCAL (x))
3257 if (TREE_PUBLIC (x))
3259 error ("global register variable `%s' used in nested function",
3260 IDENTIFIER_POINTER (DECL_NAME (x)));
3261 return 0;
3263 pedwarn ("register variable `%s' used in nested function",
3264 IDENTIFIER_POINTER (DECL_NAME (x)));
3266 else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
3268 if (TREE_PUBLIC (x))
3270 error ("address of global register variable `%s' requested",
3271 IDENTIFIER_POINTER (DECL_NAME (x)));
3272 return 0;
3275 /* If we are making this addressable due to its having
3276 volatile components, give a different error message. Also
3277 handle the case of an unnamed parameter by not trying
3278 to give the name. */
3280 else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x)))
3282 error ("cannot put object with volatile field into register");
3283 return 0;
3286 pedwarn ("address of register variable `%s' requested",
3287 IDENTIFIER_POINTER (DECL_NAME (x)));
3289 put_var_into_stack (x);
3291 /* drops in */
3292 case FUNCTION_DECL:
3293 TREE_ADDRESSABLE (x) = 1;
3294 #if 0 /* poplevel deals with this now. */
3295 if (DECL_CONTEXT (x) == 0)
3296 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
3297 #endif
3299 default:
3300 return 1;
3304 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
3306 tree
3307 build_conditional_expr (ifexp, op1, op2)
3308 tree ifexp, op1, op2;
3310 register tree type1;
3311 register tree type2;
3312 register enum tree_code code1;
3313 register enum tree_code code2;
3314 register tree result_type = NULL;
3315 tree orig_op1 = op1, orig_op2 = op2;
3317 ifexp = truthvalue_conversion (default_conversion (ifexp));
3319 #if 0 /* Produces wrong result if within sizeof. */
3320 /* Don't promote the operands separately if they promote
3321 the same way. Return the unpromoted type and let the combined
3322 value get promoted if necessary. */
3324 if (TREE_TYPE (op1) == TREE_TYPE (op2)
3325 && TREE_CODE (TREE_TYPE (op1)) != ARRAY_TYPE
3326 && TREE_CODE (TREE_TYPE (op1)) != ENUMERAL_TYPE
3327 && TREE_CODE (TREE_TYPE (op1)) != FUNCTION_TYPE)
3329 if (TREE_CODE (ifexp) == INTEGER_CST)
3330 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3332 return fold (build (COND_EXPR, TREE_TYPE (op1), ifexp, op1, op2));
3334 #endif
3336 /* Promote both alternatives. */
3338 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3339 op1 = default_conversion (op1);
3340 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3341 op2 = default_conversion (op2);
3343 if (TREE_CODE (ifexp) == ERROR_MARK
3344 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3345 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3346 return error_mark_node;
3348 type1 = TREE_TYPE (op1);
3349 code1 = TREE_CODE (type1);
3350 type2 = TREE_TYPE (op2);
3351 code2 = TREE_CODE (type2);
3353 /* Quickly detect the usual case where op1 and op2 have the same type
3354 after promotion. */
3355 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3357 if (type1 == type2)
3358 result_type = type1;
3359 else
3360 result_type = TYPE_MAIN_VARIANT (type1);
3362 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE)
3363 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE))
3365 result_type = common_type (type1, type2);
3367 /* If -Wsign-compare, warn here if type1 and type2 have
3368 different signedness. We'll promote the signed to unsigned
3369 and later code won't know it used to be different.
3370 Do this check on the original types, so that explicit casts
3371 will be considered, but default promotions won't. */
3372 if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare)
3373 && !skip_evaluation)
3375 int unsigned_op1 = TREE_UNSIGNED (TREE_TYPE (orig_op1));
3376 int unsigned_op2 = TREE_UNSIGNED (TREE_TYPE (orig_op2));
3378 if (unsigned_op1 ^ unsigned_op2)
3380 /* Do not warn if the result type is signed, since the
3381 signed type will only be chosen if it can represent
3382 all the values of the unsigned type. */
3383 if (! TREE_UNSIGNED (result_type))
3384 /* OK */;
3385 /* Do not warn if the signed quantity is an unsuffixed
3386 integer literal (or some static constant expression
3387 involving such literals) and it is non-negative. */
3388 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
3389 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
3390 /* OK */;
3391 else
3392 warning ("signed and unsigned type in conditional expression");
3396 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3398 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3399 pedwarn ("ANSI C forbids conditional expr with only one void side");
3400 result_type = void_type_node;
3402 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3404 if (comp_target_types (type1, type2))
3405 result_type = common_type (type1, type2);
3406 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3407 && TREE_CODE (orig_op1) != NOP_EXPR)
3408 result_type = qualify_type (type2, type1);
3409 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3410 && TREE_CODE (orig_op2) != NOP_EXPR)
3411 result_type = qualify_type (type1, type2);
3412 else if (TYPE_MAIN_VARIANT (TREE_TYPE (type1)) == void_type_node)
3414 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3415 pedwarn ("ANSI C forbids conditional expr between `void *' and function pointer");
3416 result_type = qualify_type (type1, type2);
3418 else if (TYPE_MAIN_VARIANT (TREE_TYPE (type2)) == void_type_node)
3420 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3421 pedwarn ("ANSI C forbids conditional expr between `void *' and function pointer");
3422 result_type = qualify_type (type2, type1);
3424 else
3426 pedwarn ("pointer type mismatch in conditional expression");
3427 result_type = build_pointer_type (void_type_node);
3430 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3432 if (! integer_zerop (op2))
3433 pedwarn ("pointer/integer type mismatch in conditional expression");
3434 else
3436 op2 = null_pointer_node;
3437 #if 0 /* The spec seems to say this is permitted. */
3438 if (pedantic && TREE_CODE (type1) == FUNCTION_TYPE)
3439 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3440 #endif
3442 result_type = type1;
3444 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3446 if (!integer_zerop (op1))
3447 pedwarn ("pointer/integer type mismatch in conditional expression");
3448 else
3450 op1 = null_pointer_node;
3451 #if 0 /* The spec seems to say this is permitted. */
3452 if (pedantic && TREE_CODE (type2) == FUNCTION_TYPE)
3453 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3454 #endif
3456 result_type = type2;
3459 if (!result_type)
3461 if (flag_cond_mismatch)
3462 result_type = void_type_node;
3463 else
3465 error ("type mismatch in conditional expression");
3466 return error_mark_node;
3470 /* Merge const and volatile flags of the incoming types. */
3471 result_type
3472 = build_type_variant (result_type,
3473 TREE_READONLY (op1) || TREE_READONLY (op2),
3474 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3476 if (result_type != TREE_TYPE (op1))
3477 op1 = convert_and_check (result_type, op1);
3478 if (result_type != TREE_TYPE (op2))
3479 op2 = convert_and_check (result_type, op2);
3481 if (TREE_CODE (ifexp) == INTEGER_CST)
3482 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3484 return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
3487 /* Given a list of expressions, return a compound expression
3488 that performs them all and returns the value of the last of them. */
3490 tree
3491 build_compound_expr (list)
3492 tree list;
3494 return internal_build_compound_expr (list, TRUE);
3497 static tree
3498 internal_build_compound_expr (list, first_p)
3499 tree list;
3500 int first_p;
3502 register tree rest;
3504 if (TREE_CHAIN (list) == 0)
3506 #if 0 /* If something inside inhibited lvalueness, we should not override. */
3507 /* Consider (x, y+0), which is not an lvalue since y+0 is not. */
3509 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3510 if (TREE_CODE (list) == NON_LVALUE_EXPR)
3511 list = TREE_OPERAND (list, 0);
3512 #endif
3514 /* Don't let (0, 0) be null pointer constant. */
3515 if (!first_p && integer_zerop (TREE_VALUE (list)))
3516 return non_lvalue (TREE_VALUE (list));
3517 return TREE_VALUE (list);
3520 if (TREE_CHAIN (list) != 0 && TREE_CHAIN (TREE_CHAIN (list)) == 0)
3522 /* Convert arrays to pointers when there really is a comma operator. */
3523 if (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (list)))) == ARRAY_TYPE)
3524 TREE_VALUE (TREE_CHAIN (list))
3525 = default_conversion (TREE_VALUE (TREE_CHAIN (list)));
3528 rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
3530 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
3532 /* The left-hand operand of a comma expression is like an expression
3533 statement: with -W or -Wunused, we should warn if it doesn't have
3534 any side-effects, unless it was explicitly cast to (void). */
3535 if ((extra_warnings || warn_unused_value)
3536 && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
3537 && TREE_TYPE (TREE_VALUE (list)) == void_type_node))
3538 warning ("left-hand operand of comma expression has no effect");
3540 /* When pedantic, a compound expression can be neither an lvalue
3541 nor an integer constant expression. */
3542 if (! pedantic)
3543 return rest;
3546 /* With -Wunused, we should also warn if the left-hand operand does have
3547 side-effects, but computes a value which is not used. For example, in
3548 `foo() + bar(), baz()' the result of the `+' operator is not used,
3549 so we should issue a warning. */
3550 else if (warn_unused_value)
3551 warn_if_unused_value (TREE_VALUE (list));
3553 return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
3556 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3558 tree
3559 build_c_cast (type, expr)
3560 register tree type;
3561 tree expr;
3563 register tree value = expr;
3565 if (type == error_mark_node || expr == error_mark_node)
3566 return error_mark_node;
3567 type = TYPE_MAIN_VARIANT (type);
3569 #if 0
3570 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3571 if (TREE_CODE (value) == NON_LVALUE_EXPR)
3572 value = TREE_OPERAND (value, 0);
3573 #endif
3575 if (TREE_CODE (type) == ARRAY_TYPE)
3577 error ("cast specifies array type");
3578 return error_mark_node;
3581 if (TREE_CODE (type) == FUNCTION_TYPE)
3583 error ("cast specifies function type");
3584 return error_mark_node;
3587 if (type == TREE_TYPE (value))
3589 if (pedantic)
3591 if (TREE_CODE (type) == RECORD_TYPE
3592 || TREE_CODE (type) == UNION_TYPE)
3593 pedwarn ("ANSI C forbids casting nonscalar to the same type");
3596 else if (TREE_CODE (type) == UNION_TYPE)
3598 tree field;
3599 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
3600 || TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE)
3601 value = default_conversion (value);
3603 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3604 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3605 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3606 break;
3608 if (field)
3610 const char *name;
3611 tree t;
3613 if (pedantic)
3614 pedwarn ("ANSI C forbids casts to union type");
3615 if (TYPE_NAME (type) != 0)
3617 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
3618 name = IDENTIFIER_POINTER (TYPE_NAME (type));
3619 else
3620 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
3622 else
3623 name = "";
3624 t = digest_init (type, build (CONSTRUCTOR, type, NULL_TREE,
3625 build_tree_list (field, value)),
3626 0, 0);
3627 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3628 return t;
3630 error ("cast to union type from type not present in union");
3631 return error_mark_node;
3633 else
3635 tree otype, ovalue;
3637 /* If casting to void, avoid the error that would come
3638 from default_conversion in the case of a non-lvalue array. */
3639 if (type == void_type_node)
3640 return build1 (CONVERT_EXPR, type, value);
3642 /* Convert functions and arrays to pointers,
3643 but don't convert any other types. */
3644 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
3645 || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE)
3646 value = default_conversion (value);
3647 otype = TREE_TYPE (value);
3649 /* Optionally warn about potentially worrisome casts. */
3651 if (warn_cast_qual
3652 && TREE_CODE (type) == POINTER_TYPE
3653 && TREE_CODE (otype) == POINTER_TYPE)
3655 tree in_type = type;
3656 tree in_otype = otype;
3657 int warn = 0;
3659 /* Check that the qualifiers on IN_TYPE are a superset of
3660 the qualifiers of IN_OTYPE. The outermost level of
3661 POINTER_TYPE nodes is uninteresting and we stop as soon
3662 as we hit a non-POINTER_TYPE node on either type. */
3665 in_otype = TREE_TYPE (in_otype);
3666 in_type = TREE_TYPE (in_type);
3667 warn |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3669 while (TREE_CODE (in_type) == POINTER_TYPE
3670 && TREE_CODE (in_otype) == POINTER_TYPE);
3672 if (warn)
3673 /* There are qualifiers present in IN_OTYPE that are not
3674 present in IN_TYPE. */
3675 pedwarn ("cast discards qualifiers from pointer target type");
3678 /* Warn about possible alignment problems. */
3679 if (STRICT_ALIGNMENT && warn_cast_align
3680 && TREE_CODE (type) == POINTER_TYPE
3681 && TREE_CODE (otype) == POINTER_TYPE
3682 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3683 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3684 /* Don't warn about opaque types, where the actual alignment
3685 restriction is unknown. */
3686 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3687 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3688 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3689 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3690 warning ("cast increases required alignment of target type");
3692 if (TREE_CODE (type) == INTEGER_TYPE
3693 && TREE_CODE (otype) == POINTER_TYPE
3694 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3695 && !TREE_CONSTANT (value))
3696 warning ("cast from pointer to integer of different size");
3698 if (warn_bad_function_cast
3699 && TREE_CODE (value) == CALL_EXPR
3700 && TREE_CODE (type) != TREE_CODE (otype))
3701 warning ("cast does not match function type");
3703 if (TREE_CODE (type) == POINTER_TYPE
3704 && TREE_CODE (otype) == INTEGER_TYPE
3705 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3706 /* Don't warn about converting any constant. */
3707 && !TREE_CONSTANT (value))
3708 warning ("cast to pointer from integer of different size");
3710 ovalue = value;
3711 value = convert (type, value);
3713 /* Ignore any integer overflow caused by the cast. */
3714 if (TREE_CODE (value) == INTEGER_CST)
3716 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3717 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3721 /* Pedantically, don't ley (void *) (FOO *) 0 be a null pointer constant. */
3722 if (pedantic && TREE_CODE (value) == INTEGER_CST
3723 && TREE_CODE (expr) == INTEGER_CST
3724 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3725 value = non_lvalue (value);
3727 /* If pedantic, don't let a cast be an lvalue. */
3728 if (value == expr && pedantic)
3729 value = non_lvalue (value);
3731 return value;
3734 /* Build an assignment expression of lvalue LHS from value RHS.
3735 MODIFYCODE is the code for a binary operator that we use
3736 to combine the old value of LHS with RHS to get the new value.
3737 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3739 tree
3740 build_modify_expr (lhs, modifycode, rhs)
3741 tree lhs, rhs;
3742 enum tree_code modifycode;
3744 register tree result;
3745 tree newrhs;
3746 tree lhstype = TREE_TYPE (lhs);
3747 tree olhstype = lhstype;
3749 /* Types that aren't fully specified cannot be used in assignments. */
3750 lhs = require_complete_type (lhs);
3752 /* Avoid duplicate error messages from operands that had errors. */
3753 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3754 return error_mark_node;
3756 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3757 /* Do not use STRIP_NOPS here. We do not want an enumerator
3758 whose value is 0 to count as a null pointer constant. */
3759 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3760 rhs = TREE_OPERAND (rhs, 0);
3762 newrhs = rhs;
3764 /* Handle control structure constructs used as "lvalues". */
3766 switch (TREE_CODE (lhs))
3768 /* Handle (a, b) used as an "lvalue". */
3769 case COMPOUND_EXPR:
3770 pedantic_lvalue_warning (COMPOUND_EXPR);
3771 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1), modifycode, rhs);
3772 if (TREE_CODE (newrhs) == ERROR_MARK)
3773 return error_mark_node;
3774 return build (COMPOUND_EXPR, lhstype,
3775 TREE_OPERAND (lhs, 0), newrhs);
3777 /* Handle (a ? b : c) used as an "lvalue". */
3778 case COND_EXPR:
3779 pedantic_lvalue_warning (COND_EXPR);
3780 rhs = save_expr (rhs);
3782 /* Produce (a ? (b = rhs) : (c = rhs))
3783 except that the RHS goes through a save-expr
3784 so the code to compute it is only emitted once. */
3785 tree cond
3786 = build_conditional_expr (TREE_OPERAND (lhs, 0),
3787 build_modify_expr (TREE_OPERAND (lhs, 1),
3788 modifycode, rhs),
3789 build_modify_expr (TREE_OPERAND (lhs, 2),
3790 modifycode, rhs));
3791 if (TREE_CODE (cond) == ERROR_MARK)
3792 return cond;
3793 /* Make sure the code to compute the rhs comes out
3794 before the split. */
3795 return build (COMPOUND_EXPR, TREE_TYPE (lhs),
3796 /* But cast it to void to avoid an "unused" error. */
3797 convert (void_type_node, rhs), cond);
3799 default:
3800 break;
3803 /* If a binary op has been requested, combine the old LHS value with the RHS
3804 producing the value we should actually store into the LHS. */
3806 if (modifycode != NOP_EXPR)
3808 lhs = stabilize_reference (lhs);
3809 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3812 /* Handle a cast used as an "lvalue".
3813 We have already performed any binary operator using the value as cast.
3814 Now convert the result to the cast type of the lhs,
3815 and then true type of the lhs and store it there;
3816 then convert result back to the cast type to be the value
3817 of the assignment. */
3819 switch (TREE_CODE (lhs))
3821 case NOP_EXPR:
3822 case CONVERT_EXPR:
3823 case FLOAT_EXPR:
3824 case FIX_TRUNC_EXPR:
3825 case FIX_FLOOR_EXPR:
3826 case FIX_ROUND_EXPR:
3827 case FIX_CEIL_EXPR:
3828 if (TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
3829 || TREE_CODE (TREE_TYPE (newrhs)) == FUNCTION_TYPE)
3830 newrhs = default_conversion (newrhs);
3832 tree inner_lhs = TREE_OPERAND (lhs, 0);
3833 tree result;
3834 result = build_modify_expr (inner_lhs, NOP_EXPR,
3835 convert (TREE_TYPE (inner_lhs),
3836 convert (lhstype, newrhs)));
3837 if (TREE_CODE (result) == ERROR_MARK)
3838 return result;
3839 pedantic_lvalue_warning (CONVERT_EXPR);
3840 return convert (TREE_TYPE (lhs), result);
3843 default:
3844 break;
3847 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3848 Reject anything strange now. */
3850 if (!lvalue_or_else (lhs, "invalid lvalue in assignment"))
3851 return error_mark_node;
3853 /* Warn about storing in something that is `const'. */
3855 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3856 || ((TREE_CODE (lhstype) == RECORD_TYPE
3857 || TREE_CODE (lhstype) == UNION_TYPE)
3858 && C_TYPE_FIELDS_READONLY (lhstype)))
3859 readonly_warning (lhs, "assignment");
3861 /* If storing into a structure or union member,
3862 it has probably been given type `int'.
3863 Compute the type that would go with
3864 the actual amount of storage the member occupies. */
3866 if (TREE_CODE (lhs) == COMPONENT_REF
3867 && (TREE_CODE (lhstype) == INTEGER_TYPE
3868 || TREE_CODE (lhstype) == REAL_TYPE
3869 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3870 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3872 /* If storing in a field that is in actuality a short or narrower than one,
3873 we must store in the field in its actual type. */
3875 if (lhstype != TREE_TYPE (lhs))
3877 lhs = copy_node (lhs);
3878 TREE_TYPE (lhs) = lhstype;
3881 /* Convert new value to destination type. */
3883 newrhs = convert_for_assignment (lhstype, newrhs, _("assignment"),
3884 NULL_TREE, NULL_TREE, 0);
3885 if (TREE_CODE (newrhs) == ERROR_MARK)
3886 return error_mark_node;
3888 result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
3889 TREE_SIDE_EFFECTS (result) = 1;
3891 /* If we got the LHS in a different type for storing in,
3892 convert the result back to the nominal type of LHS
3893 so that the value we return always has the same type
3894 as the LHS argument. */
3896 if (olhstype == TREE_TYPE (result))
3897 return result;
3898 return convert_for_assignment (olhstype, result, _("assignment"),
3899 NULL_TREE, NULL_TREE, 0);
3902 /* Convert value RHS to type TYPE as preparation for an assignment
3903 to an lvalue of type TYPE.
3904 The real work of conversion is done by `convert'.
3905 The purpose of this function is to generate error messages
3906 for assignments that are not allowed in C.
3907 ERRTYPE is a string to use in error messages:
3908 "assignment", "return", etc. If it is null, this is parameter passing
3909 for a function call (and different error messages are output).
3911 FUNNAME is the name of the function being called,
3912 as an IDENTIFIER_NODE, or null.
3913 PARMNUM is the number of the argument, for printing in error messages. */
3915 static tree
3916 convert_for_assignment (type, rhs, errtype, fundecl, funname, parmnum)
3917 tree type, rhs;
3918 const char *errtype;
3919 tree fundecl, funname;
3920 int parmnum;
3922 register enum tree_code codel = TREE_CODE (type);
3923 register tree rhstype;
3924 register enum tree_code coder;
3926 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3927 /* Do not use STRIP_NOPS here. We do not want an enumerator
3928 whose value is 0 to count as a null pointer constant. */
3929 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3930 rhs = TREE_OPERAND (rhs, 0);
3932 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3933 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3934 rhs = default_conversion (rhs);
3935 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3936 rhs = decl_constant_value (rhs);
3938 rhstype = TREE_TYPE (rhs);
3939 coder = TREE_CODE (rhstype);
3941 if (coder == ERROR_MARK)
3942 return error_mark_node;
3944 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3946 overflow_warning (rhs);
3947 /* Check for Objective-C protocols. This will issue a warning if
3948 there are protocol violations. No need to use the return value. */
3949 maybe_objc_comptypes (type, rhstype, 0);
3950 return rhs;
3953 if (coder == VOID_TYPE)
3955 error ("void value not ignored as it ought to be");
3956 return error_mark_node;
3958 /* A type converts to a reference to it.
3959 This code doesn't fully support references, it's just for the
3960 special case of va_start and va_copy. */
3961 if (codel == REFERENCE_TYPE
3962 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3964 if (mark_addressable (rhs) == 0)
3965 return error_mark_node;
3966 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3968 /* We already know that these two types are compatible, but they
3969 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3970 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3971 likely to be va_list, a typedef to __builtin_va_list, which
3972 is different enough that it will cause problems later. */
3973 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3974 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3976 rhs = build1 (NOP_EXPR, type, rhs);
3977 return rhs;
3979 /* Arithmetic types all interconvert, and enum is treated like int. */
3980 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3981 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE)
3982 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3983 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE))
3984 return convert_and_check (type, rhs);
3986 /* Conversion to a transparent union from its member types.
3987 This applies only to function arguments. */
3988 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && ! errtype)
3990 tree memb_types;
3991 tree marginal_memb_type = 0;
3993 for (memb_types = TYPE_FIELDS (type); memb_types;
3994 memb_types = TREE_CHAIN (memb_types))
3996 tree memb_type = TREE_TYPE (memb_types);
3998 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3999 TYPE_MAIN_VARIANT (rhstype)))
4000 break;
4002 if (TREE_CODE (memb_type) != POINTER_TYPE)
4003 continue;
4005 if (coder == POINTER_TYPE)
4007 register tree ttl = TREE_TYPE (memb_type);
4008 register tree ttr = TREE_TYPE (rhstype);
4010 /* Any non-function converts to a [const][volatile] void *
4011 and vice versa; otherwise, targets must be the same.
4012 Meanwhile, the lhs target must have all the qualifiers of
4013 the rhs. */
4014 if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4015 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4016 || comp_target_types (memb_type, rhstype))
4018 /* If this type won't generate any warnings, use it. */
4019 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
4020 || ((TREE_CODE (ttr) == FUNCTION_TYPE
4021 && TREE_CODE (ttl) == FUNCTION_TYPE)
4022 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4023 == TYPE_QUALS (ttr))
4024 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4025 == TYPE_QUALS (ttl))))
4026 break;
4028 /* Keep looking for a better type, but remember this one. */
4029 if (! marginal_memb_type)
4030 marginal_memb_type = memb_type;
4034 /* Can convert integer zero to any pointer type. */
4035 if (integer_zerop (rhs)
4036 || (TREE_CODE (rhs) == NOP_EXPR
4037 && integer_zerop (TREE_OPERAND (rhs, 0))))
4039 rhs = null_pointer_node;
4040 break;
4044 if (memb_types || marginal_memb_type)
4046 if (! memb_types)
4048 /* We have only a marginally acceptable member type;
4049 it needs a warning. */
4050 register tree ttl = TREE_TYPE (marginal_memb_type);
4051 register tree ttr = TREE_TYPE (rhstype);
4053 /* Const and volatile mean something different for function
4054 types, so the usual warnings are not appropriate. */
4055 if (TREE_CODE (ttr) == FUNCTION_TYPE
4056 && TREE_CODE (ttl) == FUNCTION_TYPE)
4058 /* Because const and volatile on functions are
4059 restrictions that say the function will not do
4060 certain things, it is okay to use a const or volatile
4061 function where an ordinary one is wanted, but not
4062 vice-versa. */
4063 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4064 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4065 errtype, funname, parmnum);
4067 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4068 warn_for_assignment ("%s discards qualifiers from pointer target type",
4069 errtype, funname,
4070 parmnum);
4073 if (pedantic && ! DECL_IN_SYSTEM_HEADER (fundecl))
4074 pedwarn ("ANSI C prohibits argument conversion to union type");
4076 return build1 (NOP_EXPR, type, rhs);
4080 /* Conversions among pointers */
4081 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4082 && (coder == POINTER_TYPE || coder == REFERENCE_TYPE))
4084 register tree ttl = TREE_TYPE (type);
4085 register tree ttr = TREE_TYPE (rhstype);
4087 /* Any non-function converts to a [const][volatile] void *
4088 and vice versa; otherwise, targets must be the same.
4089 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
4090 if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4091 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4092 || comp_target_types (type, rhstype)
4093 || (unsigned_type (TYPE_MAIN_VARIANT (ttl))
4094 == unsigned_type (TYPE_MAIN_VARIANT (ttr))))
4096 if (pedantic
4097 && ((TYPE_MAIN_VARIANT (ttl) == void_type_node
4098 && TREE_CODE (ttr) == FUNCTION_TYPE)
4100 (TYPE_MAIN_VARIANT (ttr) == void_type_node
4101 /* Check TREE_CODE to catch cases like (void *) (char *) 0
4102 which are not ANSI null ptr constants. */
4103 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
4104 && TREE_CODE (ttl) == FUNCTION_TYPE)))
4105 warn_for_assignment ("ANSI forbids %s between function pointer and `void *'",
4106 errtype, funname, parmnum);
4107 /* Const and volatile mean something different for function types,
4108 so the usual warnings are not appropriate. */
4109 else if (TREE_CODE (ttr) != FUNCTION_TYPE
4110 && TREE_CODE (ttl) != FUNCTION_TYPE)
4112 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4113 warn_for_assignment ("%s discards qualifiers from pointer target type",
4114 errtype, funname, parmnum);
4115 /* If this is not a case of ignoring a mismatch in signedness,
4116 no warning. */
4117 else if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4118 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4119 || comp_target_types (type, rhstype))
4121 /* If there is a mismatch, do warn. */
4122 else if (pedantic)
4123 warn_for_assignment ("pointer targets in %s differ in signedness",
4124 errtype, funname, parmnum);
4126 else if (TREE_CODE (ttl) == FUNCTION_TYPE
4127 && TREE_CODE (ttr) == FUNCTION_TYPE)
4129 /* Because const and volatile on functions are restrictions
4130 that say the function will not do certain things,
4131 it is okay to use a const or volatile function
4132 where an ordinary one is wanted, but not vice-versa. */
4133 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4134 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4135 errtype, funname, parmnum);
4138 else
4139 warn_for_assignment ("%s from incompatible pointer type",
4140 errtype, funname, parmnum);
4141 return convert (type, rhs);
4143 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
4145 /* An explicit constant 0 can convert to a pointer,
4146 or one that results from arithmetic, even including
4147 a cast to integer type. */
4148 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
4150 ! (TREE_CODE (rhs) == NOP_EXPR
4151 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
4152 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
4153 && integer_zerop (TREE_OPERAND (rhs, 0))))
4155 warn_for_assignment ("%s makes pointer from integer without a cast",
4156 errtype, funname, parmnum);
4157 return convert (type, rhs);
4159 return null_pointer_node;
4161 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
4163 warn_for_assignment ("%s makes integer from pointer without a cast",
4164 errtype, funname, parmnum);
4165 return convert (type, rhs);
4168 if (!errtype)
4170 if (funname)
4172 tree selector = maybe_building_objc_message_expr ();
4174 if (selector && parmnum > 2)
4175 error ("incompatible type for argument %d of `%s'",
4176 parmnum - 2, IDENTIFIER_POINTER (selector));
4177 else
4178 error ("incompatible type for argument %d of `%s'",
4179 parmnum, IDENTIFIER_POINTER (funname));
4181 else
4182 error ("incompatible type for argument %d of indirect function call",
4183 parmnum);
4185 else
4186 error ("incompatible types in %s", errtype);
4188 return error_mark_node;
4191 /* Print a warning using MSGID.
4192 It gets OPNAME as its one parameter.
4193 If OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
4194 FUNCTION and ARGNUM are handled specially if we are building an
4195 Objective-C selector. */
4197 static void
4198 warn_for_assignment (msgid, opname, function, argnum)
4199 const char *msgid;
4200 const char *opname;
4201 tree function;
4202 int argnum;
4204 if (opname == 0)
4206 tree selector = maybe_building_objc_message_expr ();
4207 char * new_opname;
4209 if (selector && argnum > 2)
4211 function = selector;
4212 argnum -= 2;
4214 if (function)
4216 /* Function name is known; supply it. */
4217 const char *argstring = _("passing arg %d of `%s'");
4218 new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4219 + strlen (argstring) + 1 + 25
4220 /*%d*/ + 1);
4221 sprintf (new_opname, argstring, argnum,
4222 IDENTIFIER_POINTER (function));
4224 else
4226 /* Function name unknown (call through ptr); just give arg number.*/
4227 const char *argnofun = _("passing arg %d of pointer to function");
4228 new_opname = (char *) alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1);
4229 sprintf (new_opname, argnofun, argnum);
4231 opname = new_opname;
4233 pedwarn (msgid, opname);
4236 /* If VALUE is a compound expr all of whose expressions are constant, then
4237 return its value. Otherwise, return error_mark_node.
4239 This is for handling COMPOUND_EXPRs as initializer elements
4240 which is allowed with a warning when -pedantic is specified. */
4242 static tree
4243 valid_compound_expr_initializer (value, endtype)
4244 tree value;
4245 tree endtype;
4247 if (TREE_CODE (value) == COMPOUND_EXPR)
4249 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4250 == error_mark_node)
4251 return error_mark_node;
4252 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4253 endtype);
4255 else if (! TREE_CONSTANT (value)
4256 && ! initializer_constant_valid_p (value, endtype))
4257 return error_mark_node;
4258 else
4259 return value;
4262 /* Perform appropriate conversions on the initial value of a variable,
4263 store it in the declaration DECL,
4264 and print any error messages that are appropriate.
4265 If the init is invalid, store an ERROR_MARK. */
4267 void
4268 store_init_value (decl, init)
4269 tree decl, init;
4271 register tree value, type;
4273 /* If variable's type was invalidly declared, just ignore it. */
4275 type = TREE_TYPE (decl);
4276 if (TREE_CODE (type) == ERROR_MARK)
4277 return;
4279 /* Digest the specified initializer into an expression. */
4281 value = digest_init (type, init, TREE_STATIC (decl),
4282 TREE_STATIC (decl) || pedantic);
4284 /* Store the expression if valid; else report error. */
4286 #if 0
4287 /* Note that this is the only place we can detect the error
4288 in a case such as struct foo bar = (struct foo) { x, y };
4289 where there is one initial value which is a constructor expression. */
4290 if (value == error_mark_node)
4292 else if (TREE_STATIC (decl) && ! TREE_CONSTANT (value))
4294 error ("initializer for static variable is not constant");
4295 value = error_mark_node;
4297 else if (TREE_STATIC (decl)
4298 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
4300 error ("initializer for static variable uses complicated arithmetic");
4301 value = error_mark_node;
4303 else
4305 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
4307 if (! TREE_CONSTANT (value))
4308 pedwarn ("aggregate initializer is not constant");
4309 else if (! TREE_STATIC (value))
4310 pedwarn ("aggregate initializer uses complicated arithmetic");
4313 #endif
4315 DECL_INITIAL (decl) = value;
4317 /* ANSI wants warnings about out-of-range constant initializers. */
4318 STRIP_TYPE_NOPS (value);
4319 constant_expression_warning (value);
4322 /* Methods for storing and printing names for error messages. */
4324 /* Implement a spelling stack that allows components of a name to be pushed
4325 and popped. Each element on the stack is this structure. */
4327 struct spelling
4329 int kind;
4330 union
4332 int i;
4333 const char *s;
4334 } u;
4337 #define SPELLING_STRING 1
4338 #define SPELLING_MEMBER 2
4339 #define SPELLING_BOUNDS 3
4341 static struct spelling *spelling; /* Next stack element (unused). */
4342 static struct spelling *spelling_base; /* Spelling stack base. */
4343 static int spelling_size; /* Size of the spelling stack. */
4345 /* Macros to save and restore the spelling stack around push_... functions.
4346 Alternative to SAVE_SPELLING_STACK. */
4348 #define SPELLING_DEPTH() (spelling - spelling_base)
4349 #define RESTORE_SPELLING_DEPTH(depth) (spelling = spelling_base + depth)
4351 /* Save and restore the spelling stack around arbitrary C code. */
4353 #define SAVE_SPELLING_DEPTH(code) \
4355 int __depth = SPELLING_DEPTH (); \
4356 code; \
4357 RESTORE_SPELLING_DEPTH (__depth); \
4360 /* Push an element on the spelling stack with type KIND and assign VALUE
4361 to MEMBER. */
4363 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4365 int depth = SPELLING_DEPTH (); \
4367 if (depth >= spelling_size) \
4369 spelling_size += 10; \
4370 if (spelling_base == 0) \
4371 spelling_base \
4372 = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \
4373 else \
4374 spelling_base \
4375 = (struct spelling *) xrealloc (spelling_base, \
4376 spelling_size * sizeof (struct spelling)); \
4377 RESTORE_SPELLING_DEPTH (depth); \
4380 spelling->kind = (KIND); \
4381 spelling->MEMBER = (VALUE); \
4382 spelling++; \
4385 /* Push STRING on the stack. Printed literally. */
4387 static void
4388 push_string (string)
4389 const char *string;
4391 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4394 /* Push a member name on the stack. Printed as '.' STRING. */
4396 static void
4397 push_member_name (decl)
4398 tree decl;
4401 const char *string
4402 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4403 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4406 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4408 static void
4409 push_array_bounds (bounds)
4410 int bounds;
4412 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4415 /* Compute the maximum size in bytes of the printed spelling. */
4417 static int
4418 spelling_length ()
4420 register int size = 0;
4421 register struct spelling *p;
4423 for (p = spelling_base; p < spelling; p++)
4425 if (p->kind == SPELLING_BOUNDS)
4426 size += 25;
4427 else
4428 size += strlen (p->u.s) + 1;
4431 return size;
4434 /* Print the spelling to BUFFER and return it. */
4436 static char *
4437 print_spelling (buffer)
4438 register char *buffer;
4440 register char *d = buffer;
4441 register struct spelling *p;
4443 for (p = spelling_base; p < spelling; p++)
4444 if (p->kind == SPELLING_BOUNDS)
4446 sprintf (d, "[%d]", p->u.i);
4447 d += strlen (d);
4449 else
4451 register const char *s;
4452 if (p->kind == SPELLING_MEMBER)
4453 *d++ = '.';
4454 for (s = p->u.s; (*d = *s++); d++)
4457 *d++ = '\0';
4458 return buffer;
4461 /* Issue an error message for a bad initializer component.
4462 MSGID identifies the message.
4463 The component name is taken from the spelling stack. */
4465 void
4466 error_init (msgid)
4467 const char *msgid;
4469 char *ofwhat;
4471 error ("%s", msgid);
4472 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4473 if (*ofwhat)
4474 error ("(near initialization for `%s')", ofwhat);
4477 /* Issue a pedantic warning for a bad initializer component.
4478 MSGID identifies the message.
4479 The component name is taken from the spelling stack. */
4481 void
4482 pedwarn_init (msgid)
4483 const char *msgid;
4485 char *ofwhat;
4487 pedwarn ("%s", msgid);
4488 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4489 if (*ofwhat)
4490 pedwarn ("(near initialization for `%s')", ofwhat);
4493 /* Issue a warning for a bad initializer component.
4494 MSGID identifies the message.
4495 The component name is taken from the spelling stack. */
4497 static void
4498 warning_init (msgid)
4499 const char *msgid;
4501 char *ofwhat;
4503 warning ("%s", msgid);
4504 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4505 if (*ofwhat)
4506 warning ("(near initialization for `%s')", ofwhat);
4509 /* Digest the parser output INIT as an initializer for type TYPE.
4510 Return a C expression of type TYPE to represent the initial value.
4512 The arguments REQUIRE_CONSTANT and CONSTRUCTOR_CONSTANT request errors
4513 if non-constant initializers or elements are seen. CONSTRUCTOR_CONSTANT
4514 applies only to elements of constructors. */
4516 static tree
4517 digest_init (type, init, require_constant, constructor_constant)
4518 tree type, init;
4519 int require_constant, constructor_constant;
4521 enum tree_code code = TREE_CODE (type);
4522 tree inside_init = init;
4524 if (type == error_mark_node || init == error_mark_node)
4525 return error_mark_node;
4527 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4528 /* Do not use STRIP_NOPS here. We do not want an enumerator
4529 whose value is 0 to count as a null pointer constant. */
4530 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4531 inside_init = TREE_OPERAND (init, 0);
4533 /* Initialization of an array of chars from a string constant
4534 optionally enclosed in braces. */
4536 if (code == ARRAY_TYPE)
4538 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4539 if ((typ1 == char_type_node
4540 || typ1 == signed_char_type_node
4541 || typ1 == unsigned_char_type_node
4542 || typ1 == unsigned_wchar_type_node
4543 || typ1 == signed_wchar_type_node)
4544 && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
4546 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4547 TYPE_MAIN_VARIANT (type)))
4548 return inside_init;
4550 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4551 != char_type_node)
4552 && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
4554 error_init ("char-array initialized from wide string");
4555 return error_mark_node;
4557 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4558 == char_type_node)
4559 && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
4561 error_init ("int-array initialized from non-wide string");
4562 return error_mark_node;
4565 TREE_TYPE (inside_init) = type;
4566 if (TYPE_DOMAIN (type) != 0
4567 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4568 /* Subtract 1 (or sizeof (wchar_t))
4569 because it's ok to ignore the terminating null char
4570 that is counted in the length of the constant. */
4571 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4572 TREE_STRING_LENGTH (inside_init)
4573 - ((TYPE_PRECISION (typ1)
4574 != TYPE_PRECISION (char_type_node))
4575 ? (TYPE_PRECISION (wchar_type_node)
4576 / BITS_PER_UNIT)
4577 : 1)))
4578 pedwarn_init ("initializer-string for array of chars is too long");
4580 return inside_init;
4584 /* Any type can be initialized
4585 from an expression of the same type, optionally with braces. */
4587 if (inside_init && TREE_TYPE (inside_init) != 0
4588 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4589 TYPE_MAIN_VARIANT (type))
4590 || (code == ARRAY_TYPE
4591 && comptypes (TREE_TYPE (inside_init), type))
4592 || (code == POINTER_TYPE
4593 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4594 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)
4595 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4596 TREE_TYPE (type)))))
4598 if (code == POINTER_TYPE
4599 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4600 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE))
4601 inside_init = default_conversion (inside_init);
4602 else if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4603 && TREE_CODE (inside_init) != CONSTRUCTOR)
4605 error_init ("array initialized from non-constant array expression");
4606 return error_mark_node;
4609 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4610 inside_init = decl_constant_value (inside_init);
4612 /* Compound expressions can only occur here if -pedantic or
4613 -pedantic-errors is specified. In the later case, we always want
4614 an error. In the former case, we simply want a warning. */
4615 if (require_constant && pedantic
4616 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4618 inside_init
4619 = valid_compound_expr_initializer (inside_init,
4620 TREE_TYPE (inside_init));
4621 if (inside_init == error_mark_node)
4622 error_init ("initializer element is not constant");
4623 else
4624 pedwarn_init ("initializer element is not constant");
4625 if (flag_pedantic_errors)
4626 inside_init = error_mark_node;
4628 else if (require_constant && ! TREE_CONSTANT (inside_init))
4630 error_init ("initializer element is not constant");
4631 inside_init = error_mark_node;
4633 else if (require_constant
4634 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4636 error_init ("initializer element is not computable at load time");
4637 inside_init = error_mark_node;
4640 return inside_init;
4643 /* Handle scalar types, including conversions. */
4645 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4646 || code == ENUMERAL_TYPE || code == COMPLEX_TYPE)
4648 /* Note that convert_for_assignment calls default_conversion
4649 for arrays and functions. We must not call it in the
4650 case where inside_init is a null pointer constant. */
4651 inside_init
4652 = convert_for_assignment (type, init, _("initialization"),
4653 NULL_TREE, NULL_TREE, 0);
4655 if (require_constant && ! TREE_CONSTANT (inside_init))
4657 error_init ("initializer element is not constant");
4658 inside_init = error_mark_node;
4660 else if (require_constant
4661 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4663 error_init ("initializer element is not computable at load time");
4664 inside_init = error_mark_node;
4667 return inside_init;
4670 /* Come here only for records and arrays. */
4672 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4674 error_init ("variable-sized object may not be initialized");
4675 return error_mark_node;
4678 /* Traditionally, you can write struct foo x = 0;
4679 and it initializes the first element of x to 0. */
4680 if (flag_traditional)
4682 tree top = 0, prev = 0, otype = type;
4683 while (TREE_CODE (type) == RECORD_TYPE
4684 || TREE_CODE (type) == ARRAY_TYPE
4685 || TREE_CODE (type) == QUAL_UNION_TYPE
4686 || TREE_CODE (type) == UNION_TYPE)
4688 tree temp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
4689 if (prev == 0)
4690 top = temp;
4691 else
4692 TREE_OPERAND (prev, 1) = build_tree_list (NULL_TREE, temp);
4693 prev = temp;
4694 if (TREE_CODE (type) == ARRAY_TYPE)
4695 type = TREE_TYPE (type);
4696 else if (TYPE_FIELDS (type))
4697 type = TREE_TYPE (TYPE_FIELDS (type));
4698 else
4700 error_init ("invalid initializer");
4701 return error_mark_node;
4705 if (otype != type)
4707 TREE_OPERAND (prev, 1)
4708 = build_tree_list (NULL_TREE,
4709 digest_init (type, init, require_constant,
4710 constructor_constant));
4711 return top;
4713 else
4714 return error_mark_node;
4716 error_init ("invalid initializer");
4717 return error_mark_node;
4720 /* Handle initializers that use braces. */
4722 /* Type of object we are accumulating a constructor for.
4723 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4724 static tree constructor_type;
4726 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4727 left to fill. */
4728 static tree constructor_fields;
4730 /* For an ARRAY_TYPE, this is the specified index
4731 at which to store the next element we get. */
4732 static tree constructor_index;
4734 /* For an ARRAY_TYPE, this is the end index of the range
4735 to initialize with the next element, or NULL in the ordinary case
4736 where the element is used just once. */
4737 static tree constructor_range_end;
4739 /* For an ARRAY_TYPE, this is the maximum index. */
4740 static tree constructor_max_index;
4742 /* For a RECORD_TYPE, this is the first field not yet written out. */
4743 static tree constructor_unfilled_fields;
4745 /* For an ARRAY_TYPE, this is the index of the first element
4746 not yet written out. */
4747 static tree constructor_unfilled_index;
4749 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4750 This is so we can generate gaps between fields, when appropriate. */
4751 static tree constructor_bit_index;
4753 /* If we are saving up the elements rather than allocating them,
4754 this is the list of elements so far (in reverse order,
4755 most recent first). */
4756 static tree constructor_elements;
4758 /* 1 if so far this constructor's elements are all compile-time constants. */
4759 static int constructor_constant;
4761 /* 1 if so far this constructor's elements are all valid address constants. */
4762 static int constructor_simple;
4764 /* 1 if this constructor is erroneous so far. */
4765 static int constructor_erroneous;
4767 /* 1 if have called defer_addressed_constants. */
4768 static int constructor_subconstants_deferred;
4770 /* Structure for managing pending initializer elements, organized as an
4771 AVL tree. */
4773 struct init_node
4775 struct init_node *left, *right;
4776 struct init_node *parent;
4777 int balance;
4778 tree purpose;
4779 tree value;
4782 /* Tree of pending elements at this constructor level.
4783 These are elements encountered out of order
4784 which belong at places we haven't reached yet in actually
4785 writing the output.
4786 Will never hold tree nodes across GC runs. */
4787 static struct init_node *constructor_pending_elts;
4789 /* The SPELLING_DEPTH of this constructor. */
4790 static int constructor_depth;
4792 /* 0 if implicitly pushing constructor levels is allowed. */
4793 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4795 static int require_constant_value;
4796 static int require_constant_elements;
4798 /* 1 if it is ok to output this constructor as we read it.
4799 0 means must accumulate a CONSTRUCTOR expression. */
4800 static int constructor_incremental;
4802 /* DECL node for which an initializer is being read.
4803 0 means we are reading a constructor expression
4804 such as (struct foo) {...}. */
4805 static tree constructor_decl;
4807 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4808 static char *constructor_asmspec;
4810 /* Nonzero if this is an initializer for a top-level decl. */
4811 static int constructor_top_level;
4814 /* This stack has a level for each implicit or explicit level of
4815 structuring in the initializer, including the outermost one. It
4816 saves the values of most of the variables above. */
4818 struct constructor_stack
4820 struct constructor_stack *next;
4821 tree type;
4822 tree fields;
4823 tree index;
4824 tree range_end;
4825 tree max_index;
4826 tree unfilled_index;
4827 tree unfilled_fields;
4828 tree bit_index;
4829 tree elements;
4830 int offset;
4831 struct init_node *pending_elts;
4832 int depth;
4833 /* If nonzero, this value should replace the entire
4834 constructor at this level. */
4835 tree replacement_value;
4836 char constant;
4837 char simple;
4838 char implicit;
4839 char incremental;
4840 char erroneous;
4841 char outer;
4844 struct constructor_stack *constructor_stack;
4846 /* This stack records separate initializers that are nested.
4847 Nested initializers can't happen in ANSI C, but GNU C allows them
4848 in cases like { ... (struct foo) { ... } ... }. */
4850 struct initializer_stack
4852 struct initializer_stack *next;
4853 tree decl;
4854 char *asmspec;
4855 struct constructor_stack *constructor_stack;
4856 tree elements;
4857 struct spelling *spelling;
4858 struct spelling *spelling_base;
4859 int spelling_size;
4860 char top_level;
4861 char incremental;
4862 char require_constant_value;
4863 char require_constant_elements;
4864 char deferred;
4867 struct initializer_stack *initializer_stack;
4869 /* Prepare to parse and output the initializer for variable DECL. */
4871 void
4872 start_init (decl, asmspec_tree, top_level)
4873 tree decl;
4874 tree asmspec_tree;
4875 int top_level;
4877 const char *locus;
4878 struct initializer_stack *p
4879 = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack));
4880 char *asmspec = 0;
4882 if (asmspec_tree)
4883 asmspec = TREE_STRING_POINTER (asmspec_tree);
4885 p->decl = constructor_decl;
4886 p->asmspec = constructor_asmspec;
4887 p->incremental = constructor_incremental;
4888 p->require_constant_value = require_constant_value;
4889 p->require_constant_elements = require_constant_elements;
4890 p->constructor_stack = constructor_stack;
4891 p->elements = constructor_elements;
4892 p->spelling = spelling;
4893 p->spelling_base = spelling_base;
4894 p->spelling_size = spelling_size;
4895 p->deferred = constructor_subconstants_deferred;
4896 p->top_level = constructor_top_level;
4897 p->next = initializer_stack;
4898 initializer_stack = p;
4900 constructor_decl = decl;
4901 constructor_incremental = top_level;
4902 constructor_asmspec = asmspec;
4903 constructor_subconstants_deferred = 0;
4904 constructor_top_level = top_level;
4906 if (decl != 0)
4908 require_constant_value = TREE_STATIC (decl);
4909 require_constant_elements
4910 = ((TREE_STATIC (decl) || pedantic)
4911 /* For a scalar, you can always use any value to initialize,
4912 even within braces. */
4913 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4914 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4915 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4916 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4917 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4918 constructor_incremental |= TREE_STATIC (decl);
4920 else
4922 require_constant_value = 0;
4923 require_constant_elements = 0;
4924 locus = "(anonymous)";
4927 constructor_stack = 0;
4929 missing_braces_mentioned = 0;
4931 spelling_base = 0;
4932 spelling_size = 0;
4933 RESTORE_SPELLING_DEPTH (0);
4935 if (locus)
4936 push_string (locus);
4939 void
4940 finish_init ()
4942 struct initializer_stack *p = initializer_stack;
4944 /* Output subconstants (string constants, usually)
4945 that were referenced within this initializer and saved up.
4946 Must do this if and only if we called defer_addressed_constants. */
4947 if (constructor_subconstants_deferred)
4948 output_deferred_addressed_constants ();
4950 /* Free the whole constructor stack of this initializer. */
4951 while (constructor_stack)
4953 struct constructor_stack *q = constructor_stack;
4954 constructor_stack = q->next;
4955 free (q);
4958 /* Pop back to the data of the outer initializer (if any). */
4959 constructor_decl = p->decl;
4960 constructor_asmspec = p->asmspec;
4961 constructor_incremental = p->incremental;
4962 require_constant_value = p->require_constant_value;
4963 require_constant_elements = p->require_constant_elements;
4964 constructor_stack = p->constructor_stack;
4965 constructor_elements = p->elements;
4966 spelling = p->spelling;
4967 spelling_base = p->spelling_base;
4968 spelling_size = p->spelling_size;
4969 constructor_subconstants_deferred = p->deferred;
4970 constructor_top_level = p->top_level;
4971 initializer_stack = p->next;
4972 free (p);
4975 /* Call here when we see the initializer is surrounded by braces.
4976 This is instead of a call to push_init_level;
4977 it is matched by a call to pop_init_level.
4979 TYPE is the type to initialize, for a constructor expression.
4980 For an initializer for a decl, TYPE is zero. */
4982 void
4983 really_start_incremental_init (type)
4984 tree type;
4986 struct constructor_stack *p
4987 = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
4989 if (type == 0)
4990 type = TREE_TYPE (constructor_decl);
4992 /* Turn off constructor_incremental if type is a struct with bitfields.
4993 Do this before the first push, so that the corrected value
4994 is available in finish_init. */
4995 check_init_type_bitfields (type);
4997 p->type = constructor_type;
4998 p->fields = constructor_fields;
4999 p->index = constructor_index;
5000 p->range_end = constructor_range_end;
5001 p->max_index = constructor_max_index;
5002 p->unfilled_index = constructor_unfilled_index;
5003 p->unfilled_fields = constructor_unfilled_fields;
5004 p->bit_index = constructor_bit_index;
5005 p->elements = constructor_elements;
5006 p->constant = constructor_constant;
5007 p->simple = constructor_simple;
5008 p->erroneous = constructor_erroneous;
5009 p->pending_elts = constructor_pending_elts;
5010 p->depth = constructor_depth;
5011 p->replacement_value = 0;
5012 p->implicit = 0;
5013 p->incremental = constructor_incremental;
5014 p->outer = 0;
5015 p->next = 0;
5016 constructor_stack = p;
5018 constructor_constant = 1;
5019 constructor_simple = 1;
5020 constructor_depth = SPELLING_DEPTH ();
5021 constructor_elements = 0;
5022 constructor_pending_elts = 0;
5023 constructor_type = type;
5025 if (TREE_CODE (constructor_type) == RECORD_TYPE
5026 || TREE_CODE (constructor_type) == UNION_TYPE)
5028 constructor_fields = TYPE_FIELDS (constructor_type);
5029 /* Skip any nameless bit fields at the beginning. */
5030 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5031 && DECL_NAME (constructor_fields) == 0)
5032 constructor_fields = TREE_CHAIN (constructor_fields);
5034 constructor_unfilled_fields = constructor_fields;
5035 constructor_bit_index = bitsize_zero_node;
5037 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5039 constructor_range_end = 0;
5040 if (TYPE_DOMAIN (constructor_type))
5042 constructor_max_index
5043 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5044 constructor_index
5045 = convert (bitsizetype,
5046 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5048 else
5049 constructor_index = bitsize_zero_node;
5051 constructor_unfilled_index = constructor_index;
5053 else
5055 /* Handle the case of int x = {5}; */
5056 constructor_fields = constructor_type;
5057 constructor_unfilled_fields = constructor_type;
5060 if (constructor_incremental)
5062 make_decl_rtl (constructor_decl, constructor_asmspec,
5063 constructor_top_level);
5064 assemble_variable (constructor_decl, constructor_top_level, 0, 1);
5066 defer_addressed_constants ();
5067 constructor_subconstants_deferred = 1;
5071 /* Push down into a subobject, for initialization.
5072 If this is for an explicit set of braces, IMPLICIT is 0.
5073 If it is because the next element belongs at a lower level,
5074 IMPLICIT is 1. */
5076 void
5077 push_init_level (implicit)
5078 int implicit;
5080 struct constructor_stack *p;
5082 /* If we've exhausted any levels that didn't have braces,
5083 pop them now. */
5084 while (constructor_stack->implicit)
5086 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5087 || TREE_CODE (constructor_type) == UNION_TYPE)
5088 && constructor_fields == 0)
5089 process_init_element (pop_init_level (1));
5090 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5091 && tree_int_cst_lt (constructor_max_index, constructor_index))
5092 process_init_element (pop_init_level (1));
5093 else
5094 break;
5097 /* Structure elements may require alignment. Do this now if necessary
5098 for the subaggregate, and if it comes next in sequence. Don't do
5099 this for subaggregates that will go on the pending list. */
5100 if (constructor_incremental && constructor_type != 0
5101 && TREE_CODE (constructor_type) == RECORD_TYPE && constructor_fields
5102 && constructor_fields == constructor_unfilled_fields)
5104 /* Advance to offset of this element. */
5105 if (! tree_int_cst_equal (constructor_bit_index,
5106 bit_position (constructor_fields)))
5107 assemble_zeros
5108 (tree_low_cst
5109 (size_binop (TRUNC_DIV_EXPR,
5110 size_binop (MINUS_EXPR,
5111 bit_position (constructor_fields),
5112 constructor_bit_index),
5113 bitsize_unit_node),
5114 1));
5116 /* Indicate that we have now filled the structure up to the current
5117 field. */
5118 constructor_unfilled_fields = constructor_fields;
5121 p = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5122 p->type = constructor_type;
5123 p->fields = constructor_fields;
5124 p->index = constructor_index;
5125 p->range_end = constructor_range_end;
5126 p->max_index = constructor_max_index;
5127 p->unfilled_index = constructor_unfilled_index;
5128 p->unfilled_fields = constructor_unfilled_fields;
5129 p->bit_index = constructor_bit_index;
5130 p->elements = constructor_elements;
5131 p->constant = constructor_constant;
5132 p->simple = constructor_simple;
5133 p->erroneous = constructor_erroneous;
5134 p->pending_elts = constructor_pending_elts;
5135 p->depth = constructor_depth;
5136 p->replacement_value = 0;
5137 p->implicit = implicit;
5138 p->incremental = constructor_incremental;
5139 p->outer = 0;
5140 p->next = constructor_stack;
5141 constructor_stack = p;
5143 constructor_constant = 1;
5144 constructor_simple = 1;
5145 constructor_depth = SPELLING_DEPTH ();
5146 constructor_elements = 0;
5147 constructor_pending_elts = 0;
5149 /* Don't die if an entire brace-pair level is superfluous
5150 in the containing level. */
5151 if (constructor_type == 0)
5153 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5154 || TREE_CODE (constructor_type) == UNION_TYPE)
5156 /* Don't die if there are extra init elts at the end. */
5157 if (constructor_fields == 0)
5158 constructor_type = 0;
5159 else
5161 constructor_type = TREE_TYPE (constructor_fields);
5162 push_member_name (constructor_fields);
5163 constructor_depth++;
5164 if (constructor_fields != constructor_unfilled_fields)
5165 constructor_incremental = 0;
5168 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5170 constructor_type = TREE_TYPE (constructor_type);
5171 push_array_bounds (tree_low_cst (constructor_index, 0));
5172 constructor_depth++;
5173 if (! tree_int_cst_equal (constructor_index, constructor_unfilled_index)
5174 || constructor_range_end != 0)
5175 constructor_incremental = 0;
5178 if (constructor_type == 0)
5180 error_init ("extra brace group at end of initializer");
5181 constructor_fields = 0;
5182 constructor_unfilled_fields = 0;
5183 return;
5186 /* Turn off constructor_incremental if type is a struct with bitfields. */
5187 check_init_type_bitfields (constructor_type);
5189 if (implicit && warn_missing_braces && !missing_braces_mentioned)
5191 missing_braces_mentioned = 1;
5192 warning_init ("missing braces around initializer");
5195 if (TREE_CODE (constructor_type) == RECORD_TYPE
5196 || TREE_CODE (constructor_type) == UNION_TYPE)
5198 constructor_fields = TYPE_FIELDS (constructor_type);
5199 /* Skip any nameless bit fields at the beginning. */
5200 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5201 && DECL_NAME (constructor_fields) == 0)
5202 constructor_fields = TREE_CHAIN (constructor_fields);
5204 constructor_unfilled_fields = constructor_fields;
5205 constructor_bit_index = bitsize_zero_node;
5207 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5209 constructor_range_end = 0;
5210 if (TYPE_DOMAIN (constructor_type))
5212 constructor_max_index
5213 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5214 constructor_index
5215 = convert (bitsizetype,
5216 TYPE_MIN_VALUE
5217 (TYPE_DOMAIN (constructor_type)));
5219 else
5220 constructor_index = bitsize_zero_node;
5222 constructor_unfilled_index = constructor_index;
5224 else
5226 warning_init ("braces around scalar initializer");
5227 constructor_fields = constructor_type;
5228 constructor_unfilled_fields = constructor_type;
5232 /* Don't read a struct incrementally if it has any bitfields,
5233 because the incremental reading code doesn't know how to
5234 handle bitfields yet. */
5236 static void
5237 check_init_type_bitfields (type)
5238 tree type;
5240 if (TREE_CODE (type) == RECORD_TYPE)
5242 tree tail;
5243 for (tail = TYPE_FIELDS (type); tail;
5244 tail = TREE_CHAIN (tail))
5246 if (DECL_C_BIT_FIELD (tail))
5248 constructor_incremental = 0;
5249 break;
5252 check_init_type_bitfields (TREE_TYPE (tail));
5256 else if (TREE_CODE (type) == UNION_TYPE)
5258 tree tail = TYPE_FIELDS (type);
5259 if (tail && DECL_C_BIT_FIELD (tail))
5260 /* We also use the nonincremental algorithm for initiliazation
5261 of unions whose first member is a bitfield, becuase the
5262 incremental algorithm has no code for dealing with
5263 bitfields. */
5264 constructor_incremental = 0;
5267 else if (TREE_CODE (type) == ARRAY_TYPE)
5268 check_init_type_bitfields (TREE_TYPE (type));
5271 /* At the end of an implicit or explicit brace level,
5272 finish up that level of constructor.
5273 If we were outputting the elements as they are read, return 0
5274 from inner levels (process_init_element ignores that),
5275 but return error_mark_node from the outermost level
5276 (that's what we want to put in DECL_INITIAL).
5277 Otherwise, return a CONSTRUCTOR expression. */
5279 tree
5280 pop_init_level (implicit)
5281 int implicit;
5283 struct constructor_stack *p;
5284 HOST_WIDE_INT size = 0;
5285 tree constructor = 0;
5287 if (implicit == 0)
5289 /* When we come to an explicit close brace,
5290 pop any inner levels that didn't have explicit braces. */
5291 while (constructor_stack->implicit)
5292 process_init_element (pop_init_level (1));
5295 p = constructor_stack;
5297 if (constructor_type != 0)
5298 size = int_size_in_bytes (constructor_type);
5300 /* Warn when some struct elements are implicitly initialized to zero. */
5301 if (extra_warnings
5302 && constructor_type
5303 && TREE_CODE (constructor_type) == RECORD_TYPE
5304 && constructor_unfilled_fields)
5306 push_member_name (constructor_unfilled_fields);
5307 warning_init ("missing initializer");
5308 RESTORE_SPELLING_DEPTH (constructor_depth);
5311 /* Now output all pending elements. */
5312 output_pending_init_elements (1);
5314 #if 0 /* c-parse.in warns about {}. */
5315 /* In ANSI, each brace level must have at least one element. */
5316 if (! implicit && pedantic
5317 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5318 ? integer_zerop (constructor_unfilled_index)
5319 : constructor_unfilled_fields == TYPE_FIELDS (constructor_type)))
5320 pedwarn_init ("empty braces in initializer");
5321 #endif
5323 /* Pad out the end of the structure. */
5325 if (p->replacement_value)
5327 /* If this closes a superfluous brace pair,
5328 just pass out the element between them. */
5329 constructor = p->replacement_value;
5330 /* If this is the top level thing within the initializer,
5331 and it's for a variable, then since we already called
5332 assemble_variable, we must output the value now. */
5333 if (p->next == 0 && constructor_decl != 0
5334 && constructor_incremental)
5336 constructor = digest_init (constructor_type, constructor,
5337 require_constant_value,
5338 require_constant_elements);
5340 /* If initializing an array of unknown size,
5341 determine the size now. */
5342 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5343 && TYPE_DOMAIN (constructor_type) == 0)
5345 /* We shouldn't have an incomplete array type within
5346 some other type. */
5347 if (constructor_stack->next)
5348 abort ();
5350 if (complete_array_type (constructor_type, constructor, 0))
5351 abort ();
5353 size = int_size_in_bytes (constructor_type);
5356 output_constant (constructor, size);
5359 else if (constructor_type == 0)
5361 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5362 && TREE_CODE (constructor_type) != UNION_TYPE
5363 && TREE_CODE (constructor_type) != ARRAY_TYPE
5364 && ! constructor_incremental)
5366 /* A nonincremental scalar initializer--just return
5367 the element, after verifying there is just one. */
5368 if (constructor_elements == 0)
5370 error_init ("empty scalar initializer");
5371 constructor = error_mark_node;
5373 else if (TREE_CHAIN (constructor_elements) != 0)
5375 error_init ("extra elements in scalar initializer");
5376 constructor = TREE_VALUE (constructor_elements);
5378 else
5379 constructor = TREE_VALUE (constructor_elements);
5381 else if (! constructor_incremental)
5383 if (constructor_erroneous)
5384 constructor = error_mark_node;
5385 else
5387 constructor = build (CONSTRUCTOR, constructor_type, NULL_TREE,
5388 nreverse (constructor_elements));
5389 if (constructor_constant)
5390 TREE_CONSTANT (constructor) = 1;
5391 if (constructor_constant && constructor_simple)
5392 TREE_STATIC (constructor) = 1;
5395 else
5397 tree filled;
5399 if (TREE_CODE (constructor_type) == RECORD_TYPE
5400 || TREE_CODE (constructor_type) == UNION_TYPE)
5401 /* Find the offset of the end of that field. */
5402 filled = size_binop (CEIL_DIV_EXPR, constructor_bit_index,
5403 bitsize_unit_node);
5405 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5407 /* If initializing an array of unknown size,
5408 determine the size now. */
5409 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5410 && TYPE_DOMAIN (constructor_type) == 0)
5412 tree maxindex
5413 = copy_node (size_diffop (constructor_unfilled_index,
5414 bitsize_one_node));
5416 TYPE_DOMAIN (constructor_type) = build_index_type (maxindex);
5417 TREE_TYPE (maxindex) = TYPE_DOMAIN (constructor_type);
5419 /* TYPE_MAX_VALUE is always one less than the number of elements
5420 in the array, because we start counting at zero. Therefore,
5421 warn only if the value is less than zero. */
5422 if (pedantic
5423 && (tree_int_cst_sgn
5424 (TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5425 < 0))
5426 error_with_decl (constructor_decl,
5427 "zero or negative array size `%s'");
5429 layout_type (constructor_type);
5430 size = int_size_in_bytes (constructor_type);
5433 filled
5434 = size_binop (MULT_EXPR, constructor_unfilled_index,
5435 convert (bitsizetype,
5436 TYPE_SIZE_UNIT
5437 (TREE_TYPE (constructor_type))));
5439 else
5440 filled = 0;
5442 if (filled != 0)
5443 assemble_zeros (size - tree_low_cst (filled, 1));
5447 constructor_type = p->type;
5448 constructor_fields = p->fields;
5449 constructor_index = p->index;
5450 constructor_range_end = p->range_end;
5451 constructor_max_index = p->max_index;
5452 constructor_unfilled_index = p->unfilled_index;
5453 constructor_unfilled_fields = p->unfilled_fields;
5454 constructor_bit_index = p->bit_index;
5455 constructor_elements = p->elements;
5456 constructor_constant = p->constant;
5457 constructor_simple = p->simple;
5458 constructor_erroneous = p->erroneous;
5459 constructor_pending_elts = p->pending_elts;
5460 constructor_depth = p->depth;
5461 constructor_incremental = p->incremental;
5462 RESTORE_SPELLING_DEPTH (constructor_depth);
5464 constructor_stack = p->next;
5465 free (p);
5467 if (constructor == 0)
5469 if (constructor_stack == 0)
5470 return error_mark_node;
5471 return NULL_TREE;
5473 return constructor;
5476 /* Within an array initializer, specify the next index to be initialized.
5477 FIRST is that index. If LAST is nonzero, then initialize a range
5478 of indices, running from FIRST through LAST. */
5480 void
5481 set_init_index (first, last)
5482 tree first, last;
5484 while ((TREE_CODE (first) == NOP_EXPR
5485 || TREE_CODE (first) == CONVERT_EXPR
5486 || TREE_CODE (first) == NON_LVALUE_EXPR)
5487 && (TYPE_MODE (TREE_TYPE (first))
5488 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5489 first = TREE_OPERAND (first, 0);
5491 if (last)
5492 while ((TREE_CODE (last) == NOP_EXPR
5493 || TREE_CODE (last) == CONVERT_EXPR
5494 || TREE_CODE (last) == NON_LVALUE_EXPR)
5495 && (TYPE_MODE (TREE_TYPE (last))
5496 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5497 last = TREE_OPERAND (last, 0);
5499 if (TREE_CODE (first) != INTEGER_CST)
5500 error_init ("nonconstant array index in initializer");
5501 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5502 error_init ("nonconstant array index in initializer");
5503 else if (! constructor_unfilled_index)
5504 error_init ("array index in non-array initializer");
5505 else if (tree_int_cst_lt (first, constructor_unfilled_index))
5506 error_init ("duplicate array index in initializer");
5507 else
5509 constructor_index = convert (bitsizetype, first);
5511 if (last != 0 && tree_int_cst_lt (last, first))
5512 error_init ("empty index range in initializer");
5513 else
5515 if (pedantic)
5516 pedwarn ("ANSI C forbids specifying element to initialize");
5518 constructor_range_end = last ? convert (bitsizetype, last) : 0;
5523 /* Within a struct initializer, specify the next field to be initialized. */
5525 void
5526 set_init_label (fieldname)
5527 tree fieldname;
5529 tree tail;
5530 int passed = 0;
5532 /* Don't die if an entire brace-pair level is superfluous
5533 in the containing level. */
5534 if (constructor_type == 0)
5535 return;
5537 for (tail = TYPE_FIELDS (constructor_type); tail;
5538 tail = TREE_CHAIN (tail))
5540 if (tail == constructor_unfilled_fields)
5541 passed = 1;
5542 if (DECL_NAME (tail) == fieldname)
5543 break;
5546 if (tail == 0)
5547 error ("unknown field `%s' specified in initializer",
5548 IDENTIFIER_POINTER (fieldname));
5549 else if (!passed)
5550 error ("field `%s' already initialized",
5551 IDENTIFIER_POINTER (fieldname));
5552 else
5554 constructor_fields = tail;
5555 if (pedantic)
5556 pedwarn ("ANSI C forbids specifying structure member to initialize");
5560 /* Add a new initializer to the tree of pending initializers. PURPOSE
5561 indentifies the initializer, either array index or field in a structure.
5562 VALUE is the value of that index or field. */
5564 static void
5565 add_pending_init (purpose, value)
5566 tree purpose, value;
5568 struct init_node *p, **q, *r;
5570 q = &constructor_pending_elts;
5571 p = 0;
5573 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5575 while (*q != 0)
5577 p = *q;
5578 if (tree_int_cst_lt (purpose, p->purpose))
5579 q = &p->left;
5580 else if (p->purpose != purpose)
5581 q = &p->right;
5582 else
5583 abort ();
5586 else
5588 while (*q != NULL)
5590 p = *q;
5591 if (tree_int_cst_lt (bit_position (purpose),
5592 bit_position (p->purpose)))
5593 q = &p->left;
5594 else if (p->purpose != purpose)
5595 q = &p->right;
5596 else
5597 abort ();
5601 r = (struct init_node *) ggc_alloc_obj (sizeof (struct init_node), 0);
5602 r->purpose = purpose;
5603 r->value = value;
5605 *q = r;
5606 r->parent = p;
5607 r->left = 0;
5608 r->right = 0;
5609 r->balance = 0;
5611 while (p)
5613 struct init_node *s;
5615 if (r == p->left)
5617 if (p->balance == 0)
5618 p->balance = -1;
5619 else if (p->balance < 0)
5621 if (r->balance < 0)
5623 /* L rotation. */
5624 p->left = r->right;
5625 if (p->left)
5626 p->left->parent = p;
5627 r->right = p;
5629 p->balance = 0;
5630 r->balance = 0;
5632 s = p->parent;
5633 p->parent = r;
5634 r->parent = s;
5635 if (s)
5637 if (s->left == p)
5638 s->left = r;
5639 else
5640 s->right = r;
5642 else
5643 constructor_pending_elts = r;
5645 else
5647 /* LR rotation. */
5648 struct init_node *t = r->right;
5650 r->right = t->left;
5651 if (r->right)
5652 r->right->parent = r;
5653 t->left = r;
5655 p->left = t->right;
5656 if (p->left)
5657 p->left->parent = p;
5658 t->right = p;
5660 p->balance = t->balance < 0;
5661 r->balance = -(t->balance > 0);
5662 t->balance = 0;
5664 s = p->parent;
5665 p->parent = t;
5666 r->parent = t;
5667 t->parent = s;
5668 if (s)
5670 if (s->left == p)
5671 s->left = t;
5672 else
5673 s->right = t;
5675 else
5676 constructor_pending_elts = t;
5678 break;
5680 else
5682 /* p->balance == +1; growth of left side balances the node. */
5683 p->balance = 0;
5684 break;
5687 else /* r == p->right */
5689 if (p->balance == 0)
5690 /* Growth propagation from right side. */
5691 p->balance++;
5692 else if (p->balance > 0)
5694 if (r->balance > 0)
5696 /* R rotation. */
5697 p->right = r->left;
5698 if (p->right)
5699 p->right->parent = p;
5700 r->left = p;
5702 p->balance = 0;
5703 r->balance = 0;
5705 s = p->parent;
5706 p->parent = r;
5707 r->parent = s;
5708 if (s)
5710 if (s->left == p)
5711 s->left = r;
5712 else
5713 s->right = r;
5715 else
5716 constructor_pending_elts = r;
5718 else /* r->balance == -1 */
5720 /* RL rotation */
5721 struct init_node *t = r->left;
5723 r->left = t->right;
5724 if (r->left)
5725 r->left->parent = r;
5726 t->right = r;
5728 p->right = t->left;
5729 if (p->right)
5730 p->right->parent = p;
5731 t->left = p;
5733 r->balance = (t->balance < 0);
5734 p->balance = -(t->balance > 0);
5735 t->balance = 0;
5737 s = p->parent;
5738 p->parent = t;
5739 r->parent = t;
5740 t->parent = s;
5741 if (s)
5743 if (s->left == p)
5744 s->left = t;
5745 else
5746 s->right = t;
5748 else
5749 constructor_pending_elts = t;
5751 break;
5753 else
5755 /* p->balance == -1; growth of right side balances the node. */
5756 p->balance = 0;
5757 break;
5761 r = p;
5762 p = p->parent;
5766 /* Return nonzero if FIELD is equal to the index of a pending initializer. */
5768 static int
5769 pending_init_member (field)
5770 tree field;
5772 struct init_node *p;
5774 p = constructor_pending_elts;
5775 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5777 while (p)
5779 if (field == p->purpose)
5780 return 1;
5781 else if (tree_int_cst_lt (field, p->purpose))
5782 p = p->left;
5783 else
5784 p = p->right;
5787 else
5789 while (p)
5791 if (field == p->purpose)
5792 return 1;
5793 else if (tree_int_cst_lt (bit_position (field),
5794 bit_position (p->purpose)))
5795 p = p->left;
5796 else
5797 p = p->right;
5801 return 0;
5804 /* "Output" the next constructor element.
5805 At top level, really output it to assembler code now.
5806 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5807 TYPE is the data type that the containing data type wants here.
5808 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5810 PENDING if non-nil means output pending elements that belong
5811 right after this element. (PENDING is normally 1;
5812 it is 0 while outputting pending elements, to avoid recursion.) */
5814 static void
5815 output_init_element (value, type, field, pending)
5816 tree value, type, field;
5817 int pending;
5819 int duplicate = 0;
5821 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5822 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5823 && !(TREE_CODE (value) == STRING_CST
5824 && TREE_CODE (type) == ARRAY_TYPE
5825 && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
5826 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5827 TYPE_MAIN_VARIANT (type))))
5828 value = default_conversion (value);
5830 if (value == error_mark_node)
5831 constructor_erroneous = 1;
5832 else if (!TREE_CONSTANT (value))
5833 constructor_constant = 0;
5834 else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0
5835 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5836 || TREE_CODE (constructor_type) == UNION_TYPE)
5837 && DECL_C_BIT_FIELD (field)
5838 && TREE_CODE (value) != INTEGER_CST))
5839 constructor_simple = 0;
5841 if (require_constant_value && ! TREE_CONSTANT (value))
5843 error_init ("initializer element is not constant");
5844 value = error_mark_node;
5846 else if (require_constant_elements
5847 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
5849 error_init ("initializer element is not computable at load time");
5850 value = error_mark_node;
5853 /* If this element duplicates one on constructor_pending_elts,
5854 print a message and ignore it. Don't do this when we're
5855 processing elements taken off constructor_pending_elts,
5856 because we'd always get spurious errors. */
5857 if (pending)
5859 if (TREE_CODE (constructor_type) == RECORD_TYPE
5860 || TREE_CODE (constructor_type) == UNION_TYPE
5861 || TREE_CODE (constructor_type) == ARRAY_TYPE)
5863 if (pending_init_member (field))
5865 error_init ("duplicate initializer");
5866 duplicate = 1;
5871 /* If this element doesn't come next in sequence,
5872 put it on constructor_pending_elts. */
5873 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5874 && ! tree_int_cst_equal (field, constructor_unfilled_index))
5876 if (! duplicate)
5877 add_pending_init (field,
5878 digest_init (type, value, require_constant_value,
5879 require_constant_elements));
5881 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5882 && field != constructor_unfilled_fields)
5884 /* We do this for records but not for unions. In a union,
5885 no matter which field is specified, it can be initialized
5886 right away since it starts at the beginning of the union. */
5887 if (!duplicate)
5888 add_pending_init (field,
5889 digest_init (type, value, require_constant_value,
5890 require_constant_elements));
5892 else
5894 /* Otherwise, output this element either to
5895 constructor_elements or to the assembler file. */
5897 if (!duplicate)
5899 if (! constructor_incremental)
5901 if (field && TREE_CODE (field) == INTEGER_CST)
5902 field = copy_node (field);
5903 constructor_elements
5904 = tree_cons (field, digest_init (type, value,
5905 require_constant_value,
5906 require_constant_elements),
5907 constructor_elements);
5909 else
5911 /* Structure elements may require alignment.
5912 Do this, if necessary. */
5913 if (TREE_CODE (constructor_type) == RECORD_TYPE
5914 && ! tree_int_cst_equal (constructor_bit_index,
5915 bit_position (field)))
5916 /* Advance to offset of this element. */
5917 assemble_zeros
5918 (tree_low_cst
5919 (size_binop (TRUNC_DIV_EXPR,
5920 size_binop (MINUS_EXPR, bit_position (field),
5921 constructor_bit_index),
5922 bitsize_unit_node),
5923 0));
5925 output_constant (digest_init (type, value,
5926 require_constant_value,
5927 require_constant_elements),
5928 int_size_in_bytes (type));
5930 /* For a record or union,
5931 keep track of end position of last field. */
5932 if (TREE_CODE (constructor_type) == RECORD_TYPE
5933 || TREE_CODE (constructor_type) == UNION_TYPE)
5934 constructor_bit_index
5935 = size_binop (PLUS_EXPR, bit_position (field),
5936 DECL_SIZE (field));
5940 /* Advance the variable that indicates sequential elements output. */
5941 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5942 constructor_unfilled_index
5943 = size_binop (PLUS_EXPR, constructor_unfilled_index,
5944 bitsize_one_node);
5945 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5947 constructor_unfilled_fields
5948 = TREE_CHAIN (constructor_unfilled_fields);
5950 /* Skip any nameless bit fields. */
5951 while (constructor_unfilled_fields != 0
5952 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5953 && DECL_NAME (constructor_unfilled_fields) == 0)
5954 constructor_unfilled_fields =
5955 TREE_CHAIN (constructor_unfilled_fields);
5957 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5958 constructor_unfilled_fields = 0;
5960 /* Now output any pending elements which have become next. */
5961 if (pending)
5962 output_pending_init_elements (0);
5966 /* Output any pending elements which have become next.
5967 As we output elements, constructor_unfilled_{fields,index}
5968 advances, which may cause other elements to become next;
5969 if so, they too are output.
5971 If ALL is 0, we return when there are
5972 no more pending elements to output now.
5974 If ALL is 1, we output space as necessary so that
5975 we can output all the pending elements. */
5977 static void
5978 output_pending_init_elements (all)
5979 int all;
5981 struct init_node *elt = constructor_pending_elts;
5982 tree next;
5984 retry:
5986 /* Look thru the whole pending tree.
5987 If we find an element that should be output now,
5988 output it. Otherwise, set NEXT to the element
5989 that comes first among those still pending. */
5991 next = 0;
5992 while (elt)
5994 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5996 if (tree_int_cst_equal (elt->purpose,
5997 constructor_unfilled_index))
5998 output_init_element (elt->value,
5999 TREE_TYPE (constructor_type),
6000 constructor_unfilled_index, 0);
6001 else if (tree_int_cst_lt (constructor_unfilled_index,
6002 elt->purpose))
6004 /* Advance to the next smaller node. */
6005 if (elt->left)
6006 elt = elt->left;
6007 else
6009 /* We have reached the smallest node bigger than the
6010 current unfilled index. Fill the space first. */
6011 next = elt->purpose;
6012 break;
6015 else
6017 /* Advance to the next bigger node. */
6018 if (elt->right)
6019 elt = elt->right;
6020 else
6022 /* We have reached the biggest node in a subtree. Find
6023 the parent of it, which is the next bigger node. */
6024 while (elt->parent && elt->parent->right == elt)
6025 elt = elt->parent;
6026 elt = elt->parent;
6027 if (elt && tree_int_cst_lt (constructor_unfilled_index,
6028 elt->purpose))
6030 next = elt->purpose;
6031 break;
6036 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6037 || TREE_CODE (constructor_type) == UNION_TYPE)
6039 /* If the current record is complete we are done. */
6040 if (constructor_unfilled_fields == 0)
6041 break;
6042 if (elt->purpose == constructor_unfilled_fields)
6044 output_init_element (elt->value,
6045 TREE_TYPE (constructor_unfilled_fields),
6046 constructor_unfilled_fields,
6049 else if (tree_int_cst_lt (bit_position (constructor_unfilled_fields),
6050 bit_position (elt->purpose)))
6052 /* Advance to the next smaller node. */
6053 if (elt->left)
6054 elt = elt->left;
6055 else
6057 /* We have reached the smallest node bigger than the
6058 current unfilled field. Fill the space first. */
6059 next = elt->purpose;
6060 break;
6063 else
6065 /* Advance to the next bigger node. */
6066 if (elt->right)
6067 elt = elt->right;
6068 else
6070 /* We have reached the biggest node in a subtree. Find
6071 the parent of it, which is the next bigger node. */
6072 while (elt->parent && elt->parent->right == elt)
6073 elt = elt->parent;
6074 elt = elt->parent;
6075 if (elt
6076 && (tree_int_cst_lt
6077 (bit_position (constructor_unfilled_fields),
6078 bit_position (elt->purpose))))
6080 next = elt->purpose;
6081 break;
6088 /* Ordinarily return, but not if we want to output all
6089 and there are elements left. */
6090 if (! (all && next != 0))
6091 return;
6093 /* Generate space up to the position of NEXT. */
6094 if (constructor_incremental)
6096 tree filled;
6097 tree nextpos_tree = bitsize_zero_node;
6099 if (TREE_CODE (constructor_type) == RECORD_TYPE
6100 || TREE_CODE (constructor_type) == UNION_TYPE)
6102 tree tail;
6104 /* Find the last field written out, if any. */
6105 for (tail = TYPE_FIELDS (constructor_type); tail;
6106 tail = TREE_CHAIN (tail))
6107 if (TREE_CHAIN (tail) == constructor_unfilled_fields)
6108 break;
6110 if (tail)
6111 /* Find the offset of the end of that field. */
6112 filled = size_binop (CEIL_DIV_EXPR,
6113 size_binop (PLUS_EXPR, bit_position (tail),
6114 DECL_SIZE (tail)),
6115 bitsize_unit_node);
6116 else
6117 filled = bitsize_zero_node;
6119 nextpos_tree = convert (bitsizetype, byte_position (next));
6120 constructor_bit_index = bit_position (next);
6121 constructor_unfilled_fields = next;
6123 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6125 filled
6126 = size_binop (MULT_EXPR, constructor_unfilled_index,
6127 convert (bitsizetype,
6128 TYPE_SIZE_UNIT
6129 (TREE_TYPE (constructor_type))));
6130 nextpos_tree
6131 = size_binop (MULT_EXPR, next,
6132 convert (bitsizetype, TYPE_SIZE_UNIT
6133 (TREE_TYPE (constructor_type))));
6134 constructor_unfilled_index = next;
6136 else
6137 filled = 0;
6139 if (filled)
6140 assemble_zeros (tree_low_cst (size_diffop (nextpos_tree, filled), 1));
6142 else
6144 /* If it's not incremental, just skip over the gap,
6145 so that after jumping to retry we will output the next
6146 successive element. */
6147 if (TREE_CODE (constructor_type) == RECORD_TYPE
6148 || TREE_CODE (constructor_type) == UNION_TYPE)
6149 constructor_unfilled_fields = next;
6150 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6151 constructor_unfilled_index = next;
6154 /* ELT now points to the node in the pending tree with the next
6155 initializer to output. */
6156 goto retry;
6159 /* Add one non-braced element to the current constructor level.
6160 This adjusts the current position within the constructor's type.
6161 This may also start or terminate implicit levels
6162 to handle a partly-braced initializer.
6164 Once this has found the correct level for the new element,
6165 it calls output_init_element.
6167 Note: if we are incrementally outputting this constructor,
6168 this function may be called with a null argument
6169 representing a sub-constructor that was already incrementally output.
6170 When that happens, we output nothing, but we do the bookkeeping
6171 to skip past that element of the current constructor. */
6173 void
6174 process_init_element (value)
6175 tree value;
6177 tree orig_value = value;
6178 int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
6180 /* Handle superfluous braces around string cst as in
6181 char x[] = {"foo"}; */
6182 if (string_flag
6183 && constructor_type
6184 && TREE_CODE (constructor_type) == ARRAY_TYPE
6185 && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
6186 && integer_zerop (constructor_unfilled_index))
6188 if (constructor_stack->replacement_value)
6189 error_init ("excess elements in char array initializer");
6190 constructor_stack->replacement_value = value;
6191 return;
6194 if (constructor_stack->replacement_value != 0)
6196 error_init ("excess elements in struct initializer");
6197 return;
6200 /* Ignore elements of a brace group if it is entirely superfluous
6201 and has already been diagnosed. */
6202 if (constructor_type == 0)
6203 return;
6205 /* If we've exhausted any levels that didn't have braces,
6206 pop them now. */
6207 while (constructor_stack->implicit)
6209 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6210 || TREE_CODE (constructor_type) == UNION_TYPE)
6211 && constructor_fields == 0)
6212 process_init_element (pop_init_level (1));
6213 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6214 && (constructor_max_index == 0
6215 || tree_int_cst_lt (constructor_max_index,
6216 constructor_index)))
6217 process_init_element (pop_init_level (1));
6218 else
6219 break;
6222 while (1)
6224 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6226 tree fieldtype;
6227 enum tree_code fieldcode;
6229 if (constructor_fields == 0)
6231 pedwarn_init ("excess elements in struct initializer");
6232 break;
6235 fieldtype = TREE_TYPE (constructor_fields);
6236 if (fieldtype != error_mark_node)
6237 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6238 fieldcode = TREE_CODE (fieldtype);
6240 /* Accept a string constant to initialize a subarray. */
6241 if (value != 0
6242 && fieldcode == ARRAY_TYPE
6243 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6244 && string_flag)
6245 value = orig_value;
6246 /* Otherwise, if we have come to a subaggregate,
6247 and we don't have an element of its type, push into it. */
6248 else if (value != 0 && !constructor_no_implicit
6249 && value != error_mark_node
6250 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6251 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6252 || fieldcode == UNION_TYPE))
6254 push_init_level (1);
6255 continue;
6258 if (value)
6260 push_member_name (constructor_fields);
6261 output_init_element (value, fieldtype, constructor_fields, 1);
6262 RESTORE_SPELLING_DEPTH (constructor_depth);
6264 else
6265 /* Do the bookkeeping for an element that was
6266 directly output as a constructor. */
6268 /* For a record, keep track of end position of last field. */
6269 constructor_bit_index
6270 = size_binop (PLUS_EXPR,
6271 bit_position (constructor_fields),
6272 DECL_SIZE (constructor_fields));
6274 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6275 /* Skip any nameless bit fields. */
6276 while (constructor_unfilled_fields != 0
6277 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6278 && DECL_NAME (constructor_unfilled_fields) == 0)
6279 constructor_unfilled_fields =
6280 TREE_CHAIN (constructor_unfilled_fields);
6283 constructor_fields = TREE_CHAIN (constructor_fields);
6284 /* Skip any nameless bit fields at the beginning. */
6285 while (constructor_fields != 0
6286 && DECL_C_BIT_FIELD (constructor_fields)
6287 && DECL_NAME (constructor_fields) == 0)
6288 constructor_fields = TREE_CHAIN (constructor_fields);
6289 break;
6291 if (TREE_CODE (constructor_type) == UNION_TYPE)
6293 tree fieldtype;
6294 enum tree_code fieldcode;
6296 if (constructor_fields == 0)
6298 pedwarn_init ("excess elements in union initializer");
6299 break;
6302 fieldtype = TREE_TYPE (constructor_fields);
6303 if (fieldtype != error_mark_node)
6304 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6305 fieldcode = TREE_CODE (fieldtype);
6307 /* Accept a string constant to initialize a subarray. */
6308 if (value != 0
6309 && fieldcode == ARRAY_TYPE
6310 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6311 && string_flag)
6312 value = orig_value;
6313 /* Otherwise, if we have come to a subaggregate,
6314 and we don't have an element of its type, push into it. */
6315 else if (value != 0 && !constructor_no_implicit
6316 && value != error_mark_node
6317 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6318 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6319 || fieldcode == UNION_TYPE))
6321 push_init_level (1);
6322 continue;
6325 if (value)
6327 push_member_name (constructor_fields);
6328 output_init_element (value, fieldtype, constructor_fields, 1);
6329 RESTORE_SPELLING_DEPTH (constructor_depth);
6331 else
6332 /* Do the bookkeeping for an element that was
6333 directly output as a constructor. */
6335 constructor_bit_index = DECL_SIZE (constructor_fields);
6336 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6339 constructor_fields = 0;
6340 break;
6342 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6344 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6345 enum tree_code eltcode = TREE_CODE (elttype);
6347 /* Accept a string constant to initialize a subarray. */
6348 if (value != 0
6349 && eltcode == ARRAY_TYPE
6350 && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
6351 && string_flag)
6352 value = orig_value;
6353 /* Otherwise, if we have come to a subaggregate,
6354 and we don't have an element of its type, push into it. */
6355 else if (value != 0 && !constructor_no_implicit
6356 && value != error_mark_node
6357 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
6358 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6359 || eltcode == UNION_TYPE))
6361 push_init_level (1);
6362 continue;
6365 if (constructor_max_index != 0
6366 && tree_int_cst_lt (constructor_max_index, constructor_index))
6368 pedwarn_init ("excess elements in array initializer");
6369 break;
6372 /* In the case of [LO .. HI] = VALUE, only evaluate VALUE once. */
6373 if (constructor_range_end)
6375 if (constructor_max_index != 0
6376 && tree_int_cst_lt (constructor_max_index,
6377 constructor_range_end))
6379 pedwarn_init ("excess elements in array initializer");
6380 constructor_range_end = constructor_max_index;
6383 value = save_expr (value);
6386 /* Now output the actual element.
6387 Ordinarily, output once.
6388 If there is a range, repeat it till we advance past the range. */
6391 if (value)
6393 push_array_bounds (tree_low_cst (constructor_index, 0));
6394 output_init_element (value, elttype, constructor_index, 1);
6395 RESTORE_SPELLING_DEPTH (constructor_depth);
6398 constructor_index
6399 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6401 if (! value)
6402 /* If we are doing the bookkeeping for an element that was
6403 directly output as a constructor, we must update
6404 constructor_unfilled_index. */
6405 constructor_unfilled_index = constructor_index;
6407 while (! (constructor_range_end == 0
6408 || tree_int_cst_lt (constructor_range_end,
6409 constructor_index)));
6411 break;
6414 /* Handle the sole element allowed in a braced initializer
6415 for a scalar variable. */
6416 if (constructor_fields == 0)
6418 pedwarn_init ("excess elements in scalar initializer");
6419 break;
6422 if (value)
6423 output_init_element (value, constructor_type, NULL_TREE, 1);
6424 constructor_fields = 0;
6425 break;
6429 /* Expand an ASM statement with operands, handling output operands
6430 that are not variables or INDIRECT_REFS by transforming such
6431 cases into cases that expand_asm_operands can handle.
6433 Arguments are same as for expand_asm_operands. */
6435 void
6436 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
6437 tree string, outputs, inputs, clobbers;
6438 int vol;
6439 const char *filename;
6440 int line;
6442 int noutputs = list_length (outputs);
6443 register int i;
6444 /* o[I] is the place that output number I should be written. */
6445 register tree *o = (tree *) alloca (noutputs * sizeof (tree));
6446 register tree tail;
6448 if (TREE_CODE (string) == ADDR_EXPR)
6449 string = TREE_OPERAND (string, 0);
6450 if (TREE_CODE (string) != STRING_CST)
6452 error ("asm template is not a string constant");
6453 return;
6456 /* Record the contents of OUTPUTS before it is modified. */
6457 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6459 tree output = TREE_VALUE (tail);
6461 /* We can remove conversions that just change the type, not the mode. */
6462 STRIP_NOPS (output);
6463 o[i] = output;
6465 /* Allow conversions as LHS here. build_modify_expr as called below
6466 will do the right thing with them. */
6467 while (TREE_CODE (output) == NOP_EXPR
6468 || TREE_CODE (output) == CONVERT_EXPR
6469 || TREE_CODE (output) == FLOAT_EXPR
6470 || TREE_CODE (output) == FIX_TRUNC_EXPR
6471 || TREE_CODE (output) == FIX_FLOOR_EXPR
6472 || TREE_CODE (output) == FIX_ROUND_EXPR
6473 || TREE_CODE (output) == FIX_CEIL_EXPR)
6474 output = TREE_OPERAND (output, 0);
6476 lvalue_or_else (o[i], "invalid lvalue in asm statement");
6479 /* Perform default conversions on array and function inputs. */
6480 /* Don't do this for other types--
6481 it would screw up operands expected to be in memory. */
6482 for (i = 0, tail = inputs; tail; tail = TREE_CHAIN (tail), i++)
6483 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == ARRAY_TYPE
6484 || TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == FUNCTION_TYPE)
6485 TREE_VALUE (tail) = default_conversion (TREE_VALUE (tail));
6487 /* Generate the ASM_OPERANDS insn;
6488 store into the TREE_VALUEs of OUTPUTS some trees for
6489 where the values were actually stored. */
6490 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
6492 /* Copy all the intermediate outputs into the specified outputs. */
6493 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6495 if (o[i] != TREE_VALUE (tail))
6497 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
6498 NULL_RTX, VOIDmode, EXPAND_NORMAL);
6499 free_temp_slots ();
6501 /* Detect modification of read-only values.
6502 (Otherwise done by build_modify_expr.) */
6503 else
6505 tree type = TREE_TYPE (o[i]);
6506 if (TREE_READONLY (o[i])
6507 || TYPE_READONLY (type)
6508 || ((TREE_CODE (type) == RECORD_TYPE
6509 || TREE_CODE (type) == UNION_TYPE)
6510 && C_TYPE_FIELDS_READONLY (type)))
6511 readonly_warning (o[i], "modification by `asm'");
6515 /* Those MODIFY_EXPRs could do autoincrements. */
6516 emit_queue ();
6519 /* Expand a C `return' statement.
6520 RETVAL is the expression for what to return,
6521 or a null pointer for `return;' with no value. */
6523 void
6524 c_expand_return (retval)
6525 tree retval;
6527 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6529 if (TREE_THIS_VOLATILE (current_function_decl))
6530 warning ("function declared `noreturn' has a `return' statement");
6532 if (!retval)
6534 current_function_returns_null = 1;
6535 if (warn_return_type && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6536 warning ("`return' with no value, in function returning non-void");
6537 expand_null_return ();
6539 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6541 current_function_returns_null = 1;
6542 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6543 pedwarn ("`return' with a value, in function returning void");
6544 expand_return (retval);
6546 else
6548 tree t = convert_for_assignment (valtype, retval, _("return"),
6549 NULL_TREE, NULL_TREE, 0);
6550 tree res = DECL_RESULT (current_function_decl);
6551 tree inner;
6553 if (t == error_mark_node)
6554 return;
6556 inner = t = convert (TREE_TYPE (res), t);
6558 /* Strip any conversions, additions, and subtractions, and see if
6559 we are returning the address of a local variable. Warn if so. */
6560 while (1)
6562 switch (TREE_CODE (inner))
6564 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6565 case PLUS_EXPR:
6566 inner = TREE_OPERAND (inner, 0);
6567 continue;
6569 case MINUS_EXPR:
6570 /* If the second operand of the MINUS_EXPR has a pointer
6571 type (or is converted from it), this may be valid, so
6572 don't give a warning. */
6574 tree op1 = TREE_OPERAND (inner, 1);
6576 while (! POINTER_TYPE_P (TREE_TYPE (op1))
6577 && (TREE_CODE (op1) == NOP_EXPR
6578 || TREE_CODE (op1) == NON_LVALUE_EXPR
6579 || TREE_CODE (op1) == CONVERT_EXPR))
6580 op1 = TREE_OPERAND (op1, 0);
6582 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6583 break;
6585 inner = TREE_OPERAND (inner, 0);
6586 continue;
6589 case ADDR_EXPR:
6590 inner = TREE_OPERAND (inner, 0);
6592 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
6593 inner = TREE_OPERAND (inner, 0);
6595 if (TREE_CODE (inner) == VAR_DECL
6596 && ! DECL_EXTERNAL (inner)
6597 && ! TREE_STATIC (inner)
6598 && DECL_CONTEXT (inner) == current_function_decl)
6599 warning ("function returns address of local variable");
6600 break;
6602 default:
6603 break;
6606 break;
6609 t = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
6610 TREE_SIDE_EFFECTS (t) = 1;
6611 expand_return (t);
6612 current_function_returns_value = 1;
6616 /* Start a C switch statement, testing expression EXP.
6617 Return EXP if it is valid, an error node otherwise. */
6619 tree
6620 c_expand_start_case (exp)
6621 tree exp;
6623 register enum tree_code code;
6624 tree type;
6626 if (TREE_CODE (exp) == ERROR_MARK)
6627 return exp;
6629 code = TREE_CODE (TREE_TYPE (exp));
6630 type = TREE_TYPE (exp);
6632 if (code != INTEGER_TYPE && code != ENUMERAL_TYPE && code != ERROR_MARK)
6634 error ("switch quantity not an integer");
6635 exp = error_mark_node;
6637 else
6639 tree index;
6640 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6642 if (warn_traditional
6643 && ! in_system_header
6644 && (type == long_integer_type_node
6645 || type == long_unsigned_type_node))
6646 pedwarn ("`long' switch expression not converted to `int' in ANSI C");
6648 exp = default_conversion (exp);
6649 type = TREE_TYPE (exp);
6650 index = get_unwidened (exp, NULL_TREE);
6651 /* We can't strip a conversion from a signed type to an unsigned,
6652 because if we did, int_fits_type_p would do the wrong thing
6653 when checking case values for being in range,
6654 and it's too hard to do the right thing. */
6655 if (TREE_UNSIGNED (TREE_TYPE (exp))
6656 == TREE_UNSIGNED (TREE_TYPE (index)))
6657 exp = index;
6660 expand_start_case (1, exp, type, "switch statement");
6662 return exp;