* ginclude/stdarg.h: Include va-mn10300.h.
[official-gcc.git] / gcc / c-typeck.c
blob32d5c27a0cffc09379ff7b21efbddd18aa9da276
1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 88, 91, 92-6, 1997 Free Software Foundation, Inc.
4 This file is part of GNU CC.
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
22 /* This file is part of the C front end.
23 It contains routines to build C expressions given their operands,
24 including computing the types of the result, C-specific error checks,
25 and some optimization.
27 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
28 and to process initializations in declarations (since they work
29 like a strange sort of assignment). */
31 #include "config.h"
32 #include <stdio.h>
33 #include "tree.h"
34 #include "c-tree.h"
35 #include "flags.h"
36 #include "output.h"
38 /* Nonzero if we've already printed a "missing braces around initializer"
39 message within this initializer. */
40 static int missing_braces_mentioned;
42 extern char *index ();
43 extern char *rindex ();
45 static tree qualify_type PROTO((tree, tree));
46 static int comp_target_types PROTO((tree, tree));
47 static int function_types_compatible_p PROTO((tree, tree));
48 static int type_lists_compatible_p PROTO((tree, tree));
49 static int self_promoting_type_p PROTO((tree));
50 static tree decl_constant_value PROTO((tree));
51 static tree lookup_field PROTO((tree, tree, tree *));
52 static tree convert_arguments PROTO((tree, tree, tree, tree));
53 static tree pointer_int_sum PROTO((enum tree_code, tree, tree));
54 static tree pointer_diff PROTO((tree, tree));
55 static tree unary_complex_lvalue PROTO((enum tree_code, tree));
56 static void pedantic_lvalue_warning PROTO((enum tree_code));
57 static tree internal_build_compound_expr PROTO((tree, int));
58 static tree convert_for_assignment PROTO((tree, tree, char *, tree,
59 tree, int));
60 static void warn_for_assignment PROTO((char *, char *, tree, int));
61 static tree valid_compound_expr_initializer PROTO((tree, tree));
62 static void push_string PROTO((char *));
63 static void push_member_name PROTO((tree));
64 static void push_array_bounds PROTO((int));
65 static int spelling_length PROTO((void));
66 static char *print_spelling PROTO((char *));
67 static char *get_spelling PROTO((char *));
68 static void warning_init PROTO((char *, char *,
69 char *));
70 static tree digest_init PROTO((tree, tree, int, int));
71 static void check_init_type_bitfields PROTO((tree));
72 static void output_init_element PROTO((tree, tree, tree, int));
73 static void output_pending_init_elements PROTO((int));
75 /* Do `exp = require_complete_type (exp);' to make sure exp
76 does not have an incomplete type. (That includes void types.) */
78 tree
79 require_complete_type (value)
80 tree value;
82 tree type = TREE_TYPE (value);
84 /* First, detect a valid value with a complete type. */
85 if (TYPE_SIZE (type) != 0
86 && type != void_type_node)
87 return value;
89 incomplete_type_error (value, type);
90 return error_mark_node;
93 /* Print an error message for invalid use of an incomplete type.
94 VALUE is the expression that was used (or 0 if that isn't known)
95 and TYPE is the type that was invalid. */
97 void
98 incomplete_type_error (value, type)
99 tree value;
100 tree type;
102 char *errmsg;
104 /* Avoid duplicate error message. */
105 if (TREE_CODE (type) == ERROR_MARK)
106 return;
108 if (value != 0 && (TREE_CODE (value) == VAR_DECL
109 || TREE_CODE (value) == PARM_DECL))
110 error ("`%s' has an incomplete type",
111 IDENTIFIER_POINTER (DECL_NAME (value)));
112 else
114 retry:
115 /* We must print an error message. Be clever about what it says. */
117 switch (TREE_CODE (type))
119 case RECORD_TYPE:
120 errmsg = "invalid use of undefined type `struct %s'";
121 break;
123 case UNION_TYPE:
124 errmsg = "invalid use of undefined type `union %s'";
125 break;
127 case ENUMERAL_TYPE:
128 errmsg = "invalid use of undefined type `enum %s'";
129 break;
131 case VOID_TYPE:
132 error ("invalid use of void expression");
133 return;
135 case ARRAY_TYPE:
136 if (TYPE_DOMAIN (type))
138 type = TREE_TYPE (type);
139 goto retry;
141 error ("invalid use of array with unspecified bounds");
142 return;
144 default:
145 abort ();
148 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
149 error (errmsg, IDENTIFIER_POINTER (TYPE_NAME (type)));
150 else
151 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
152 error ("invalid use of incomplete typedef `%s'",
153 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
157 /* Return a variant of TYPE which has all the type qualifiers of LIKE
158 as well as those of TYPE. */
160 static tree
161 qualify_type (type, like)
162 tree type, like;
164 int constflag = TYPE_READONLY (type) || TYPE_READONLY (like);
165 int volflag = TYPE_VOLATILE (type) || TYPE_VOLATILE (like);
166 return c_build_type_variant (type, constflag, volflag);
169 /* Return the common type of two types.
170 We assume that comptypes has already been done and returned 1;
171 if that isn't so, this may crash. In particular, we assume that qualifiers
172 match.
174 This is the type for the result of most arithmetic operations
175 if the operands have the given two types. */
177 tree
178 common_type (t1, t2)
179 tree t1, t2;
181 register enum tree_code code1;
182 register enum tree_code code2;
183 tree attributes;
185 /* Save time if the two types are the same. */
187 if (t1 == t2) return t1;
189 /* If one type is nonsense, use the other. */
190 if (t1 == error_mark_node)
191 return t2;
192 if (t2 == error_mark_node)
193 return t1;
195 /* Merge the attributes */
196 attributes = merge_attributes (TYPE_ATTRIBUTES (t1), TYPE_ATTRIBUTES (t2));
198 /* Treat an enum type as the unsigned integer type of the same width. */
200 if (TREE_CODE (t1) == ENUMERAL_TYPE)
201 t1 = type_for_size (TYPE_PRECISION (t1), 1);
202 if (TREE_CODE (t2) == ENUMERAL_TYPE)
203 t2 = type_for_size (TYPE_PRECISION (t2), 1);
205 code1 = TREE_CODE (t1);
206 code2 = TREE_CODE (t2);
208 /* If one type is complex, form the common type of the non-complex
209 components, then make that complex. Use T1 or T2 if it is the
210 required type. */
211 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
213 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
214 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
215 tree subtype = common_type (subtype1, subtype2);
217 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
218 return build_type_attribute_variant (t1, attributes);
219 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
220 return build_type_attribute_variant (t2, attributes);
221 else
222 return build_type_attribute_variant (build_complex_type (subtype),
223 attributes);
226 switch (code1)
228 case INTEGER_TYPE:
229 case REAL_TYPE:
230 /* If only one is real, use it as the result. */
232 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
233 return build_type_attribute_variant (t1, attributes);
235 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
236 return build_type_attribute_variant (t2, attributes);
238 /* Both real or both integers; use the one with greater precision. */
240 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
241 return build_type_attribute_variant (t1, attributes);
242 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
243 return build_type_attribute_variant (t2, attributes);
245 /* Same precision. Prefer longs to ints even when same size. */
247 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
248 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
249 return build_type_attribute_variant (long_unsigned_type_node,
250 attributes);
252 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
253 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
255 /* But preserve unsignedness from the other type,
256 since long cannot hold all the values of an unsigned int. */
257 if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
258 t1 = long_unsigned_type_node;
259 else
260 t1 = long_integer_type_node;
261 return build_type_attribute_variant (t1, attributes);
264 /* Otherwise prefer the unsigned one. */
266 if (TREE_UNSIGNED (t1))
267 return build_type_attribute_variant (t1, attributes);
268 else
269 return build_type_attribute_variant (t2, attributes);
271 case POINTER_TYPE:
272 /* For two pointers, do this recursively on the target type,
273 and combine the qualifiers of the two types' targets. */
274 /* This code was turned off; I don't know why.
275 But ANSI C specifies doing this with the qualifiers.
276 So I turned it on again. */
278 tree target = common_type (TYPE_MAIN_VARIANT (TREE_TYPE (t1)),
279 TYPE_MAIN_VARIANT (TREE_TYPE (t2)));
280 int constp
281 = TYPE_READONLY (TREE_TYPE (t1)) || TYPE_READONLY (TREE_TYPE (t2));
282 int volatilep
283 = TYPE_VOLATILE (TREE_TYPE (t1)) || TYPE_VOLATILE (TREE_TYPE (t2));
284 t1 = build_pointer_type (c_build_type_variant (target, constp,
285 volatilep));
286 return build_type_attribute_variant (t1, attributes);
288 #if 0
289 t1 = build_pointer_type (common_type (TREE_TYPE (t1), TREE_TYPE (t2)));
290 return build_type_attribute_variant (t1, attributes);
291 #endif
293 case ARRAY_TYPE:
295 tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
296 /* Save space: see if the result is identical to one of the args. */
297 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
298 return build_type_attribute_variant (t1, attributes);
299 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
300 return build_type_attribute_variant (t2, attributes);
301 /* Merge the element types, and have a size if either arg has one. */
302 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
303 return build_type_attribute_variant (t1, attributes);
306 case FUNCTION_TYPE:
307 /* Function types: prefer the one that specified arg types.
308 If both do, merge the arg types. Also merge the return types. */
310 tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
311 tree p1 = TYPE_ARG_TYPES (t1);
312 tree p2 = TYPE_ARG_TYPES (t2);
313 int len;
314 tree newargs, n;
315 int i;
317 /* Save space: see if the result is identical to one of the args. */
318 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
319 return build_type_attribute_variant (t1, attributes);
320 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
321 return build_type_attribute_variant (t2, attributes);
323 /* Simple way if one arg fails to specify argument types. */
324 if (TYPE_ARG_TYPES (t1) == 0)
326 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
327 return build_type_attribute_variant (t1, attributes);
329 if (TYPE_ARG_TYPES (t2) == 0)
331 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
332 return build_type_attribute_variant (t1, attributes);
335 /* If both args specify argument types, we must merge the two
336 lists, argument by argument. */
338 len = list_length (p1);
339 newargs = 0;
341 for (i = 0; i < len; i++)
342 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
344 n = newargs;
346 for (; p1;
347 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
349 /* A null type means arg type is not specified.
350 Take whatever the other function type has. */
351 if (TREE_VALUE (p1) == 0)
353 TREE_VALUE (n) = TREE_VALUE (p2);
354 goto parm_done;
356 if (TREE_VALUE (p2) == 0)
358 TREE_VALUE (n) = TREE_VALUE (p1);
359 goto parm_done;
362 /* Given wait (union {union wait *u; int *i} *)
363 and wait (union wait *),
364 prefer union wait * as type of parm. */
365 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
366 && TREE_VALUE (p1) != TREE_VALUE (p2))
368 tree memb;
369 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
370 memb; memb = TREE_CHAIN (memb))
371 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
373 TREE_VALUE (n) = TREE_VALUE (p2);
374 if (pedantic)
375 pedwarn ("function types not truly compatible in ANSI C");
376 goto parm_done;
379 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
380 && TREE_VALUE (p2) != TREE_VALUE (p1))
382 tree memb;
383 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
384 memb; memb = TREE_CHAIN (memb))
385 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
387 TREE_VALUE (n) = TREE_VALUE (p1);
388 if (pedantic)
389 pedwarn ("function types not truly compatible in ANSI C");
390 goto parm_done;
393 TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
394 parm_done: ;
397 t1 = build_function_type (valtype, newargs);
398 /* ... falls through ... */
401 default:
402 return build_type_attribute_variant (t1, attributes);
407 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
408 or various other operations. Return 2 if they are compatible
409 but a warning may be needed if you use them together. */
412 comptypes (type1, type2)
413 tree type1, type2;
415 register tree t1 = type1;
416 register tree t2 = type2;
417 int attrval, val;
419 /* Suppress errors caused by previously reported errors. */
421 if (t1 == t2 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
422 return 1;
424 /* Treat an enum type as the integer type of the same width and
425 signedness. */
427 if (TREE_CODE (t1) == ENUMERAL_TYPE)
428 t1 = type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
429 if (TREE_CODE (t2) == ENUMERAL_TYPE)
430 t2 = type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
432 if (t1 == t2)
433 return 1;
435 /* Different classes of types can't be compatible. */
437 if (TREE_CODE (t1) != TREE_CODE (t2)) return 0;
439 /* Qualifiers must match. */
441 if (TYPE_READONLY (t1) != TYPE_READONLY (t2))
442 return 0;
443 if (TYPE_VOLATILE (t1) != TYPE_VOLATILE (t2))
444 return 0;
446 /* Allow for two different type nodes which have essentially the same
447 definition. Note that we already checked for equality of the type
448 type qualifiers (just above). */
450 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
451 return 1;
453 #ifndef COMP_TYPE_ATTRIBUTES
454 #define COMP_TYPE_ATTRIBUTES(t1,t2) 1
455 #endif
457 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
458 if (! (attrval = COMP_TYPE_ATTRIBUTES (t1, t2)))
459 return 0;
461 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
462 val = 0;
464 switch (TREE_CODE (t1))
466 case POINTER_TYPE:
467 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
468 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
469 break;
471 case FUNCTION_TYPE:
472 val = function_types_compatible_p (t1, t2);
473 break;
475 case ARRAY_TYPE:
477 tree d1 = TYPE_DOMAIN (t1);
478 tree d2 = TYPE_DOMAIN (t2);
479 val = 1;
481 /* Target types must match incl. qualifiers. */
482 if (TREE_TYPE (t1) != TREE_TYPE (t2)
483 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
484 return 0;
486 /* Sizes must match unless one is missing or variable. */
487 if (d1 == 0 || d2 == 0 || d1 == d2
488 || TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
489 || TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
490 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST
491 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST)
492 break;
494 if (! ((TREE_INT_CST_LOW (TYPE_MIN_VALUE (d1))
495 == TREE_INT_CST_LOW (TYPE_MIN_VALUE (d2)))
496 && (TREE_INT_CST_HIGH (TYPE_MIN_VALUE (d1))
497 == TREE_INT_CST_HIGH (TYPE_MIN_VALUE (d2)))
498 && (TREE_INT_CST_LOW (TYPE_MAX_VALUE (d1))
499 == TREE_INT_CST_LOW (TYPE_MAX_VALUE (d2)))
500 && (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (d1))
501 == TREE_INT_CST_HIGH (TYPE_MAX_VALUE (d2)))))
502 val = 0;
503 break;
506 case RECORD_TYPE:
507 if (maybe_objc_comptypes (t1, t2, 0) == 1)
508 val = 1;
509 break;
511 return attrval == 2 && val == 1 ? 2 : val;
514 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
515 ignoring their qualifiers. */
517 static int
518 comp_target_types (ttl, ttr)
519 tree ttl, ttr;
521 int val;
523 /* Give maybe_objc_comptypes a crack at letting these types through. */
524 if (val = maybe_objc_comptypes (ttl, ttr, 1) >= 0)
525 return val;
527 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
528 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
530 if (val == 2 && pedantic)
531 pedwarn ("types are not quite compatible");
532 return val;
535 /* Subroutines of `comptypes'. */
537 /* Return 1 if two function types F1 and F2 are compatible.
538 If either type specifies no argument types,
539 the other must specify a fixed number of self-promoting arg types.
540 Otherwise, if one type specifies only the number of arguments,
541 the other must specify that number of self-promoting arg types.
542 Otherwise, the argument types must match. */
544 static int
545 function_types_compatible_p (f1, f2)
546 tree f1, f2;
548 tree args1, args2;
549 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
550 int val = 1;
551 int val1;
553 if (!(TREE_TYPE (f1) == TREE_TYPE (f2)
554 || (val = comptypes (TREE_TYPE (f1), TREE_TYPE (f2)))))
555 return 0;
557 args1 = TYPE_ARG_TYPES (f1);
558 args2 = TYPE_ARG_TYPES (f2);
560 /* An unspecified parmlist matches any specified parmlist
561 whose argument types don't need default promotions. */
563 if (args1 == 0)
565 if (!self_promoting_args_p (args2))
566 return 0;
567 /* If one of these types comes from a non-prototype fn definition,
568 compare that with the other type's arglist.
569 If they don't match, ask for a warning (but no error). */
570 if (TYPE_ACTUAL_ARG_TYPES (f1)
571 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
572 val = 2;
573 return val;
575 if (args2 == 0)
577 if (!self_promoting_args_p (args1))
578 return 0;
579 if (TYPE_ACTUAL_ARG_TYPES (f2)
580 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
581 val = 2;
582 return val;
585 /* Both types have argument lists: compare them and propagate results. */
586 val1 = type_lists_compatible_p (args1, args2);
587 return val1 != 1 ? val1 : val;
590 /* Check two lists of types for compatibility,
591 returning 0 for incompatible, 1 for compatible,
592 or 2 for compatible with warning. */
594 static int
595 type_lists_compatible_p (args1, args2)
596 tree args1, args2;
598 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
599 int val = 1;
600 int newval = 0;
602 while (1)
604 if (args1 == 0 && args2 == 0)
605 return val;
606 /* If one list is shorter than the other,
607 they fail to match. */
608 if (args1 == 0 || args2 == 0)
609 return 0;
610 /* A null pointer instead of a type
611 means there is supposed to be an argument
612 but nothing is specified about what type it has.
613 So match anything that self-promotes. */
614 if (TREE_VALUE (args1) == 0)
616 if (! self_promoting_type_p (TREE_VALUE (args2)))
617 return 0;
619 else if (TREE_VALUE (args2) == 0)
621 if (! self_promoting_type_p (TREE_VALUE (args1)))
622 return 0;
624 else if (! (newval = comptypes (TREE_VALUE (args1), TREE_VALUE (args2))))
626 /* Allow wait (union {union wait *u; int *i} *)
627 and wait (union wait *) to be compatible. */
628 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
629 && (TYPE_NAME (TREE_VALUE (args1)) == 0
630 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
631 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
632 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
633 TYPE_SIZE (TREE_VALUE (args2))))
635 tree memb;
636 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
637 memb; memb = TREE_CHAIN (memb))
638 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
639 break;
640 if (memb == 0)
641 return 0;
643 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
644 && (TYPE_NAME (TREE_VALUE (args2)) == 0
645 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
646 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
647 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
648 TYPE_SIZE (TREE_VALUE (args1))))
650 tree memb;
651 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
652 memb; memb = TREE_CHAIN (memb))
653 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
654 break;
655 if (memb == 0)
656 return 0;
658 else
659 return 0;
662 /* comptypes said ok, but record if it said to warn. */
663 if (newval > val)
664 val = newval;
666 args1 = TREE_CHAIN (args1);
667 args2 = TREE_CHAIN (args2);
671 /* Return 1 if PARMS specifies a fixed number of parameters
672 and none of their types is affected by default promotions. */
675 self_promoting_args_p (parms)
676 tree parms;
678 register tree t;
679 for (t = parms; t; t = TREE_CHAIN (t))
681 register tree type = TREE_VALUE (t);
683 if (TREE_CHAIN (t) == 0 && type != void_type_node)
684 return 0;
686 if (type == 0)
687 return 0;
689 if (TYPE_MAIN_VARIANT (type) == float_type_node)
690 return 0;
692 if (C_PROMOTING_INTEGER_TYPE_P (type))
693 return 0;
695 return 1;
698 /* Return 1 if TYPE is not affected by default promotions. */
700 static int
701 self_promoting_type_p (type)
702 tree type;
704 if (TYPE_MAIN_VARIANT (type) == float_type_node)
705 return 0;
707 if (C_PROMOTING_INTEGER_TYPE_P (type))
708 return 0;
710 return 1;
713 /* Return an unsigned type the same as TYPE in other respects. */
715 tree
716 unsigned_type (type)
717 tree type;
719 tree type1 = TYPE_MAIN_VARIANT (type);
720 if (type1 == signed_char_type_node || type1 == char_type_node)
721 return unsigned_char_type_node;
722 if (type1 == integer_type_node)
723 return unsigned_type_node;
724 if (type1 == short_integer_type_node)
725 return short_unsigned_type_node;
726 if (type1 == long_integer_type_node)
727 return long_unsigned_type_node;
728 if (type1 == long_long_integer_type_node)
729 return long_long_unsigned_type_node;
730 if (type1 == intDI_type_node)
731 return unsigned_intDI_type_node;
732 if (type1 == intSI_type_node)
733 return unsigned_intSI_type_node;
734 if (type1 == intHI_type_node)
735 return unsigned_intHI_type_node;
736 if (type1 == intQI_type_node)
737 return unsigned_intQI_type_node;
739 return signed_or_unsigned_type (1, type);
742 /* Return a signed type the same as TYPE in other respects. */
744 tree
745 signed_type (type)
746 tree type;
748 tree type1 = TYPE_MAIN_VARIANT (type);
749 if (type1 == unsigned_char_type_node || type1 == char_type_node)
750 return signed_char_type_node;
751 if (type1 == unsigned_type_node)
752 return integer_type_node;
753 if (type1 == short_unsigned_type_node)
754 return short_integer_type_node;
755 if (type1 == long_unsigned_type_node)
756 return long_integer_type_node;
757 if (type1 == long_long_unsigned_type_node)
758 return long_long_integer_type_node;
759 if (type1 == unsigned_intDI_type_node)
760 return intDI_type_node;
761 if (type1 == unsigned_intSI_type_node)
762 return intSI_type_node;
763 if (type1 == unsigned_intHI_type_node)
764 return intHI_type_node;
765 if (type1 == unsigned_intQI_type_node)
766 return intQI_type_node;
768 return signed_or_unsigned_type (0, type);
771 /* Return a type the same as TYPE except unsigned or
772 signed according to UNSIGNEDP. */
774 tree
775 signed_or_unsigned_type (unsignedp, type)
776 int unsignedp;
777 tree type;
779 if (! INTEGRAL_TYPE_P (type)
780 || TREE_UNSIGNED (type) == unsignedp)
781 return type;
782 if (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node))
783 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
784 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
785 return unsignedp ? unsigned_type_node : integer_type_node;
786 if (TYPE_PRECISION (type) == TYPE_PRECISION (short_integer_type_node))
787 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
788 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_integer_type_node))
789 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
790 if (TYPE_PRECISION (type) == TYPE_PRECISION (long_long_integer_type_node))
791 return (unsignedp ? long_long_unsigned_type_node
792 : long_long_integer_type_node);
793 return type;
796 /* Compute the value of the `sizeof' operator. */
798 tree
799 c_sizeof (type)
800 tree type;
802 enum tree_code code = TREE_CODE (type);
803 tree t;
805 if (code == FUNCTION_TYPE)
807 if (pedantic || warn_pointer_arith)
808 pedwarn ("sizeof applied to a function type");
809 return size_int (1);
811 if (code == VOID_TYPE)
813 if (pedantic || warn_pointer_arith)
814 pedwarn ("sizeof applied to a void type");
815 return size_int (1);
817 if (code == ERROR_MARK)
818 return size_int (1);
819 if (TYPE_SIZE (type) == 0)
821 error ("sizeof applied to an incomplete type");
822 return size_int (0);
825 /* Convert in case a char is more than one unit. */
826 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
827 size_int (TYPE_PRECISION (char_type_node)));
828 /* size_binop does not put the constant in range, so do it now. */
829 if (TREE_CODE (t) == INTEGER_CST && force_fit_type (t, 0))
830 TREE_CONSTANT_OVERFLOW (t) = TREE_OVERFLOW (t) = 1;
831 return t;
834 tree
835 c_sizeof_nowarn (type)
836 tree type;
838 enum tree_code code = TREE_CODE (type);
839 tree t;
841 if (code == FUNCTION_TYPE
842 || code == VOID_TYPE
843 || code == ERROR_MARK)
844 return size_int (1);
845 if (TYPE_SIZE (type) == 0)
846 return size_int (0);
848 /* Convert in case a char is more than one unit. */
849 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
850 size_int (TYPE_PRECISION (char_type_node)));
851 force_fit_type (t, 0);
852 return t;
855 /* Compute the size to increment a pointer by. */
857 tree
858 c_size_in_bytes (type)
859 tree type;
861 enum tree_code code = TREE_CODE (type);
862 tree t;
864 if (code == FUNCTION_TYPE)
865 return size_int (1);
866 if (code == VOID_TYPE)
867 return size_int (1);
868 if (code == ERROR_MARK)
869 return size_int (1);
870 if (TYPE_SIZE (type) == 0)
872 error ("arithmetic on pointer to an incomplete type");
873 return size_int (1);
876 /* Convert in case a char is more than one unit. */
877 t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
878 size_int (BITS_PER_UNIT));
879 force_fit_type (t, 0);
880 return t;
883 /* Implement the __alignof keyword: Return the minimum required
884 alignment of TYPE, measured in bytes. */
886 tree
887 c_alignof (type)
888 tree type;
890 enum tree_code code = TREE_CODE (type);
892 if (code == FUNCTION_TYPE)
893 return size_int (FUNCTION_BOUNDARY / BITS_PER_UNIT);
895 if (code == VOID_TYPE || code == ERROR_MARK)
896 return size_int (1);
898 return size_int (TYPE_ALIGN (type) / BITS_PER_UNIT);
901 /* Implement the __alignof keyword: Return the minimum required
902 alignment of EXPR, measured in bytes. For VAR_DECL's and
903 FIELD_DECL's return DECL_ALIGN (which can be set from an
904 "aligned" __attribute__ specification). */
906 tree
907 c_alignof_expr (expr)
908 tree expr;
910 if (TREE_CODE (expr) == VAR_DECL)
911 return size_int (DECL_ALIGN (expr) / BITS_PER_UNIT);
913 if (TREE_CODE (expr) == COMPONENT_REF
914 && DECL_C_BIT_FIELD (TREE_OPERAND (expr, 1)))
916 error ("`__alignof' applied to a bit-field");
917 return size_int (1);
919 else if (TREE_CODE (expr) == COMPONENT_REF
920 && TREE_CODE (TREE_OPERAND (expr, 1)) == FIELD_DECL)
921 return size_int (DECL_ALIGN (TREE_OPERAND (expr, 1)) / BITS_PER_UNIT);
923 if (TREE_CODE (expr) == INDIRECT_REF)
925 tree t = TREE_OPERAND (expr, 0);
926 tree best = t;
927 int bestalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
929 while (TREE_CODE (t) == NOP_EXPR
930 && TREE_CODE (TREE_TYPE (TREE_OPERAND (t, 0))) == POINTER_TYPE)
932 int thisalign;
934 t = TREE_OPERAND (t, 0);
935 thisalign = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (t)));
936 if (thisalign > bestalign)
937 best = t, bestalign = thisalign;
939 return c_alignof (TREE_TYPE (TREE_TYPE (best)));
941 else
942 return c_alignof (TREE_TYPE (expr));
945 /* Return either DECL or its known constant value (if it has one). */
947 static tree
948 decl_constant_value (decl)
949 tree decl;
951 if (/* Don't change a variable array bound or initial value to a constant
952 in a place where a variable is invalid. */
953 current_function_decl != 0
954 && ! pedantic
955 && ! TREE_THIS_VOLATILE (decl)
956 && TREE_READONLY (decl) && ! ITERATOR_P (decl)
957 && DECL_INITIAL (decl) != 0
958 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
959 /* This is invalid if initial value is not constant.
960 If it has either a function call, a memory reference,
961 or a variable, then re-evaluating it could give different results. */
962 && TREE_CONSTANT (DECL_INITIAL (decl))
963 /* Check for cases where this is sub-optimal, even though valid. */
964 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR
965 && DECL_MODE (decl) != BLKmode)
966 return DECL_INITIAL (decl);
967 return decl;
970 /* Perform default promotions for C data used in expressions.
971 Arrays and functions are converted to pointers;
972 enumeral types or short or char, to int.
973 In addition, manifest constants symbols are replaced by their values. */
975 tree
976 default_conversion (exp)
977 tree exp;
979 register tree type = TREE_TYPE (exp);
980 register enum tree_code code = TREE_CODE (type);
982 /* Constants can be used directly unless they're not loadable. */
983 if (TREE_CODE (exp) == CONST_DECL)
984 exp = DECL_INITIAL (exp);
986 /* Replace a nonvolatile const static variable with its value unless
987 it is an array, in which case we must be sure that taking the
988 address of the array produces consistent results. */
989 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
991 exp = decl_constant_value (exp);
992 type = TREE_TYPE (exp);
995 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
996 an lvalue. */
997 /* Do not use STRIP_NOPS here! It will remove conversions from pointer
998 to integer and cause infinite recursion. */
999 while (TREE_CODE (exp) == NON_LVALUE_EXPR
1000 || (TREE_CODE (exp) == NOP_EXPR
1001 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
1002 exp = TREE_OPERAND (exp, 0);
1004 /* Normally convert enums to int,
1005 but convert wide enums to something wider. */
1006 if (code == ENUMERAL_TYPE)
1008 type = type_for_size (MAX (TYPE_PRECISION (type),
1009 TYPE_PRECISION (integer_type_node)),
1010 ((flag_traditional
1011 || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node))
1012 && TREE_UNSIGNED (type)));
1013 return convert (type, exp);
1016 if (TREE_CODE (exp) == COMPONENT_REF
1017 && DECL_BIT_FIELD (TREE_OPERAND (exp, 1)))
1019 tree width = DECL_SIZE (TREE_OPERAND (exp, 1));
1020 HOST_WIDE_INT low = TREE_INT_CST_LOW (width);
1022 /* If it's thinner than an int, promote it like a
1023 C_PROMOTING_INTEGER_TYPE_P, otherwise leave it alone. */
1025 if (low < TYPE_PRECISION (integer_type_node))
1027 if ( flag_traditional && TREE_UNSIGNED (type))
1028 return convert (unsigned_type_node, exp);
1029 else
1030 return convert (integer_type_node, exp);
1034 if (C_PROMOTING_INTEGER_TYPE_P (type))
1036 /* Traditionally, unsignedness is preserved in default promotions.
1037 Also preserve unsignedness if not really getting any wider. */
1038 if (TREE_UNSIGNED (type)
1039 && (flag_traditional
1040 || TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
1041 return convert (unsigned_type_node, exp);
1042 return convert (integer_type_node, exp);
1044 if (flag_traditional && !flag_allow_single_precision
1045 && TYPE_MAIN_VARIANT (type) == float_type_node)
1046 return convert (double_type_node, exp);
1047 if (code == VOID_TYPE)
1049 error ("void value not ignored as it ought to be");
1050 return error_mark_node;
1052 if (code == FUNCTION_TYPE)
1054 return build_unary_op (ADDR_EXPR, exp, 0);
1056 if (code == ARRAY_TYPE)
1058 register tree adr;
1059 tree restype = TREE_TYPE (type);
1060 tree ptrtype;
1061 int constp = 0;
1062 int volatilep = 0;
1064 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r'
1065 || TREE_CODE_CLASS (TREE_CODE (exp)) == 'd')
1067 constp = TREE_READONLY (exp);
1068 volatilep = TREE_THIS_VOLATILE (exp);
1071 if (TYPE_READONLY (type) || TYPE_VOLATILE (type)
1072 || constp || volatilep)
1073 restype = c_build_type_variant (restype,
1074 TYPE_READONLY (type) || constp,
1075 TYPE_VOLATILE (type) || volatilep);
1077 if (TREE_CODE (exp) == INDIRECT_REF)
1078 return convert (TYPE_POINTER_TO (restype),
1079 TREE_OPERAND (exp, 0));
1081 if (TREE_CODE (exp) == COMPOUND_EXPR)
1083 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
1084 return build (COMPOUND_EXPR, TREE_TYPE (op1),
1085 TREE_OPERAND (exp, 0), op1);
1088 if (!lvalue_p (exp)
1089 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp)))
1091 error ("invalid use of non-lvalue array");
1092 return error_mark_node;
1095 ptrtype = build_pointer_type (restype);
1097 if (TREE_CODE (exp) == VAR_DECL)
1099 /* ??? This is not really quite correct
1100 in that the type of the operand of ADDR_EXPR
1101 is not the target type of the type of the ADDR_EXPR itself.
1102 Question is, can this lossage be avoided? */
1103 adr = build1 (ADDR_EXPR, ptrtype, exp);
1104 if (mark_addressable (exp) == 0)
1105 return error_mark_node;
1106 TREE_CONSTANT (adr) = staticp (exp);
1107 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1108 return adr;
1110 /* This way is better for a COMPONENT_REF since it can
1111 simplify the offset for a component. */
1112 adr = build_unary_op (ADDR_EXPR, exp, 1);
1113 return convert (ptrtype, adr);
1115 return exp;
1118 /* Look up component name in the structure type definition.
1120 If this component name is found indirectly within an anonymous union,
1121 store in *INDIRECT the component which directly contains
1122 that anonymous union. Otherwise, set *INDIRECT to 0. */
1124 static tree
1125 lookup_field (type, component, indirect)
1126 tree type, component;
1127 tree *indirect;
1129 tree field;
1131 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1132 to the field elements. Use a binary search on this array to quickly
1133 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1134 will always be set for structures which have many elements. */
1136 if (TYPE_LANG_SPECIFIC (type))
1138 int bot, top, half;
1139 tree *field_array = &TYPE_LANG_SPECIFIC (type)->elts[0];
1141 field = TYPE_FIELDS (type);
1142 bot = 0;
1143 top = TYPE_LANG_SPECIFIC (type)->len;
1144 while (top - bot > 1)
1146 half = (top - bot + 1) >> 1;
1147 field = field_array[bot+half];
1149 if (DECL_NAME (field) == NULL_TREE)
1151 /* Step through all anon unions in linear fashion. */
1152 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1154 tree anon, junk;
1156 field = field_array[bot++];
1157 anon = lookup_field (TREE_TYPE (field), component, &junk);
1158 if (anon != NULL_TREE)
1160 *indirect = field;
1161 return anon;
1165 /* Entire record is only anon unions. */
1166 if (bot > top)
1167 return NULL_TREE;
1169 /* Restart the binary search, with new lower bound. */
1170 continue;
1173 if (DECL_NAME (field) == component)
1174 break;
1175 if (DECL_NAME (field) < component)
1176 bot += half;
1177 else
1178 top = bot + half;
1181 if (DECL_NAME (field_array[bot]) == component)
1182 field = field_array[bot];
1183 else if (DECL_NAME (field) != component)
1184 field = 0;
1186 else
1188 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1190 if (DECL_NAME (field) == NULL_TREE)
1192 tree junk;
1193 tree anon = lookup_field (TREE_TYPE (field), component, &junk);
1194 if (anon != NULL_TREE)
1196 *indirect = field;
1197 return anon;
1201 if (DECL_NAME (field) == component)
1202 break;
1206 *indirect = NULL_TREE;
1207 return field;
1210 /* Make an expression to refer to the COMPONENT field of
1211 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1213 tree
1214 build_component_ref (datum, component)
1215 tree datum, component;
1217 register tree type = TREE_TYPE (datum);
1218 register enum tree_code code = TREE_CODE (type);
1219 register tree field = NULL;
1220 register tree ref;
1222 /* If DATUM is a COMPOUND_EXPR or COND_EXPR, move our reference inside it
1223 unless we are not to support things not strictly ANSI. */
1224 switch (TREE_CODE (datum))
1226 case COMPOUND_EXPR:
1228 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
1229 return build (COMPOUND_EXPR, TREE_TYPE (value),
1230 TREE_OPERAND (datum, 0), value);
1232 case COND_EXPR:
1233 return build_conditional_expr
1234 (TREE_OPERAND (datum, 0),
1235 build_component_ref (TREE_OPERAND (datum, 1), component),
1236 build_component_ref (TREE_OPERAND (datum, 2), component));
1239 /* See if there is a field or component with name COMPONENT. */
1241 if (code == RECORD_TYPE || code == UNION_TYPE)
1243 tree indirect = 0;
1245 if (TYPE_SIZE (type) == 0)
1247 incomplete_type_error (NULL_TREE, type);
1248 return error_mark_node;
1251 field = lookup_field (type, component, &indirect);
1253 if (!field)
1255 error (code == RECORD_TYPE
1256 ? "structure has no member named `%s'"
1257 : "union has no member named `%s'",
1258 IDENTIFIER_POINTER (component));
1259 return error_mark_node;
1261 if (TREE_TYPE (field) == error_mark_node)
1262 return error_mark_node;
1264 /* If FIELD was found buried within an anonymous union,
1265 make one COMPONENT_REF to get that anonymous union,
1266 then fall thru to make a second COMPONENT_REF to get FIELD. */
1267 if (indirect != 0)
1269 ref = build (COMPONENT_REF, TREE_TYPE (indirect), datum, indirect);
1270 if (TREE_READONLY (datum) || TREE_READONLY (indirect))
1271 TREE_READONLY (ref) = 1;
1272 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (indirect))
1273 TREE_THIS_VOLATILE (ref) = 1;
1274 datum = ref;
1277 ref = build (COMPONENT_REF, TREE_TYPE (field), datum, field);
1279 if (TREE_READONLY (datum) || TREE_READONLY (field))
1280 TREE_READONLY (ref) = 1;
1281 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (field))
1282 TREE_THIS_VOLATILE (ref) = 1;
1284 return ref;
1286 else if (code != ERROR_MARK)
1287 error ("request for member `%s' in something not a structure or union",
1288 IDENTIFIER_POINTER (component));
1290 return error_mark_node;
1293 /* Given an expression PTR for a pointer, return an expression
1294 for the value pointed to.
1295 ERRORSTRING is the name of the operator to appear in error messages. */
1297 tree
1298 build_indirect_ref (ptr, errorstring)
1299 tree ptr;
1300 char *errorstring;
1302 register tree pointer = default_conversion (ptr);
1303 register tree type = TREE_TYPE (pointer);
1305 if (TREE_CODE (type) == POINTER_TYPE)
1307 if (TREE_CODE (pointer) == ADDR_EXPR
1308 && !flag_volatile
1309 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1310 == TREE_TYPE (type)))
1311 return TREE_OPERAND (pointer, 0);
1312 else
1314 tree t = TREE_TYPE (type);
1315 register tree ref = build1 (INDIRECT_REF,
1316 TYPE_MAIN_VARIANT (t), pointer);
1318 if (TYPE_SIZE (t) == 0 && TREE_CODE (t) != ARRAY_TYPE)
1320 error ("dereferencing pointer to incomplete type");
1321 return error_mark_node;
1323 if (TREE_CODE (t) == VOID_TYPE && skip_evaluation == 0)
1324 warning ("dereferencing `void *' pointer");
1326 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1327 so that we get the proper error message if the result is used
1328 to assign to. Also, &* is supposed to be a no-op.
1329 And ANSI C seems to specify that the type of the result
1330 should be the const type. */
1331 /* A de-reference of a pointer to const is not a const. It is valid
1332 to change it via some other pointer. */
1333 TREE_READONLY (ref) = TYPE_READONLY (t);
1334 TREE_SIDE_EFFECTS (ref)
1335 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer) || flag_volatile;
1336 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1337 return ref;
1340 else if (TREE_CODE (pointer) != ERROR_MARK)
1341 error ("invalid type argument of `%s'", errorstring);
1342 return error_mark_node;
1345 /* This handles expressions of the form "a[i]", which denotes
1346 an array reference.
1348 This is logically equivalent in C to *(a+i), but we may do it differently.
1349 If A is a variable or a member, we generate a primitive ARRAY_REF.
1350 This avoids forcing the array out of registers, and can work on
1351 arrays that are not lvalues (for example, members of structures returned
1352 by functions). */
1354 tree
1355 build_array_ref (array, index)
1356 tree array, index;
1358 if (index == 0)
1360 error ("subscript missing in array reference");
1361 return error_mark_node;
1364 if (TREE_TYPE (array) == error_mark_node
1365 || TREE_TYPE (index) == error_mark_node)
1366 return error_mark_node;
1368 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
1369 && TREE_CODE (array) != INDIRECT_REF)
1371 tree rval, type;
1373 /* Subscripting with type char is likely to lose
1374 on a machine where chars are signed.
1375 So warn on any machine, but optionally.
1376 Don't warn for unsigned char since that type is safe.
1377 Don't warn for signed char because anyone who uses that
1378 must have done so deliberately. */
1379 if (warn_char_subscripts
1380 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1381 warning ("array subscript has type `char'");
1383 /* Apply default promotions *after* noticing character types. */
1384 index = default_conversion (index);
1386 /* Require integer *after* promotion, for sake of enums. */
1387 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1389 error ("array subscript is not an integer");
1390 return error_mark_node;
1393 /* An array that is indexed by a non-constant
1394 cannot be stored in a register; we must be able to do
1395 address arithmetic on its address.
1396 Likewise an array of elements of variable size. */
1397 if (TREE_CODE (index) != INTEGER_CST
1398 || (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))) != 0
1399 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1401 if (mark_addressable (array) == 0)
1402 return error_mark_node;
1404 /* An array that is indexed by a constant value which is not within
1405 the array bounds cannot be stored in a register either; because we
1406 would get a crash in store_bit_field/extract_bit_field when trying
1407 to access a non-existent part of the register. */
1408 if (TREE_CODE (index) == INTEGER_CST
1409 && TYPE_VALUES (TREE_TYPE (array))
1410 && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
1412 if (mark_addressable (array) == 0)
1413 return error_mark_node;
1416 if (pedantic && !lvalue_p (array))
1418 if (DECL_REGISTER (array))
1419 pedwarn ("ANSI C forbids subscripting `register' array");
1420 else
1421 pedwarn ("ANSI C forbids subscripting non-lvalue array");
1424 if (pedantic)
1426 tree foo = array;
1427 while (TREE_CODE (foo) == COMPONENT_REF)
1428 foo = TREE_OPERAND (foo, 0);
1429 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
1430 pedwarn ("ANSI C forbids subscripting non-lvalue array");
1433 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1434 rval = build (ARRAY_REF, type, array, index);
1435 /* Array ref is const/volatile if the array elements are
1436 or if the array is. */
1437 TREE_READONLY (rval)
1438 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1439 | TREE_READONLY (array));
1440 TREE_SIDE_EFFECTS (rval)
1441 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1442 | TREE_SIDE_EFFECTS (array));
1443 TREE_THIS_VOLATILE (rval)
1444 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1445 /* This was added by rms on 16 Nov 91.
1446 It fixes vol struct foo *a; a->elts[1]
1447 in an inline function.
1448 Hope it doesn't break something else. */
1449 | TREE_THIS_VOLATILE (array));
1450 return require_complete_type (fold (rval));
1454 tree ar = default_conversion (array);
1455 tree ind = default_conversion (index);
1457 /* Do the same warning check as above, but only on the part that's
1458 syntactically the index and only if it is also semantically
1459 the index. */
1460 if (warn_char_subscripts
1461 && TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
1462 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1463 warning ("subscript has type `char'");
1465 /* Put the integer in IND to simplify error checking. */
1466 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1468 tree temp = ar;
1469 ar = ind;
1470 ind = temp;
1473 if (ar == error_mark_node)
1474 return ar;
1476 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
1477 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
1479 error ("subscripted value is neither array nor pointer");
1480 return error_mark_node;
1482 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1484 error ("array subscript is not an integer");
1485 return error_mark_node;
1488 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1489 "array indexing");
1493 /* Build a function call to function FUNCTION with parameters PARAMS.
1494 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1495 TREE_VALUE of each node is a parameter-expression.
1496 FUNCTION's data type may be a function type or a pointer-to-function. */
1498 tree
1499 build_function_call (function, params)
1500 tree function, params;
1502 register tree fntype, fundecl = 0;
1503 register tree coerced_params;
1504 tree name = NULL_TREE, assembler_name = NULL_TREE;
1506 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1507 STRIP_TYPE_NOPS (function);
1509 /* Convert anything with function type to a pointer-to-function. */
1510 if (TREE_CODE (function) == FUNCTION_DECL)
1512 name = DECL_NAME (function);
1513 assembler_name = DECL_ASSEMBLER_NAME (function);
1515 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1516 (because calling an inline function does not mean the function
1517 needs to be separately compiled). */
1518 fntype = build_type_variant (TREE_TYPE (function),
1519 TREE_READONLY (function),
1520 TREE_THIS_VOLATILE (function));
1521 fundecl = function;
1522 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1524 else
1525 function = default_conversion (function);
1527 fntype = TREE_TYPE (function);
1529 if (TREE_CODE (fntype) == ERROR_MARK)
1530 return error_mark_node;
1532 if (!(TREE_CODE (fntype) == POINTER_TYPE
1533 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1535 error ("called object is not a function");
1536 return error_mark_node;
1539 /* fntype now gets the type of function pointed to. */
1540 fntype = TREE_TYPE (fntype);
1542 /* Convert the parameters to the types declared in the
1543 function prototype, or apply default promotions. */
1545 coerced_params
1546 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
1548 /* Check for errors in format strings. */
1550 if (warn_format && (name || assembler_name))
1551 check_function_format (name, assembler_name, coerced_params);
1553 /* Recognize certain built-in functions so we can make tree-codes
1554 other than CALL_EXPR. We do this when it enables fold-const.c
1555 to do something useful. */
1557 if (TREE_CODE (function) == ADDR_EXPR
1558 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1559 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
1560 switch (DECL_FUNCTION_CODE (TREE_OPERAND (function, 0)))
1562 case BUILT_IN_ABS:
1563 case BUILT_IN_LABS:
1564 case BUILT_IN_FABS:
1565 if (coerced_params == 0)
1566 return integer_zero_node;
1567 return build_unary_op (ABS_EXPR, TREE_VALUE (coerced_params), 0);
1571 register tree result
1572 = build (CALL_EXPR, TREE_TYPE (fntype),
1573 function, coerced_params, NULL_TREE);
1575 TREE_SIDE_EFFECTS (result) = 1;
1576 if (TREE_TYPE (result) == void_type_node)
1577 return result;
1578 return require_complete_type (result);
1582 /* Convert the argument expressions in the list VALUES
1583 to the types in the list TYPELIST. The result is a list of converted
1584 argument expressions.
1586 If TYPELIST is exhausted, or when an element has NULL as its type,
1587 perform the default conversions.
1589 PARMLIST is the chain of parm decls for the function being called.
1590 It may be 0, if that info is not available.
1591 It is used only for generating error messages.
1593 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1595 This is also where warnings about wrong number of args are generated.
1597 Both VALUES and the returned value are chains of TREE_LIST nodes
1598 with the elements of the list in the TREE_VALUE slots of those nodes. */
1600 static tree
1601 convert_arguments (typelist, values, name, fundecl)
1602 tree typelist, values, name, fundecl;
1604 register tree typetail, valtail;
1605 register tree result = NULL;
1606 int parmnum;
1608 /* Scan the given expressions and types, producing individual
1609 converted arguments and pushing them on RESULT in reverse order. */
1611 for (valtail = values, typetail = typelist, parmnum = 0;
1612 valtail;
1613 valtail = TREE_CHAIN (valtail), parmnum++)
1615 register tree type = typetail ? TREE_VALUE (typetail) : 0;
1616 register tree val = TREE_VALUE (valtail);
1618 if (type == void_type_node)
1620 if (name)
1621 error ("too many arguments to function `%s'",
1622 IDENTIFIER_POINTER (name));
1623 else
1624 error ("too many arguments to function");
1625 break;
1628 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1629 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1630 to convert automatically to a pointer. */
1631 if (TREE_CODE (val) == NON_LVALUE_EXPR)
1632 val = TREE_OPERAND (val, 0);
1634 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE
1635 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE)
1636 val = default_conversion (val);
1638 val = require_complete_type (val);
1640 if (type != 0)
1642 /* Formal parm type is specified by a function prototype. */
1643 tree parmval;
1645 if (TYPE_SIZE (type) == 0)
1647 error ("type of formal parameter %d is incomplete", parmnum + 1);
1648 parmval = val;
1650 else
1652 /* Optionally warn about conversions that
1653 differ from the default conversions. */
1654 if (warn_conversion)
1656 int formal_prec = TYPE_PRECISION (type);
1658 if (INTEGRAL_TYPE_P (type)
1659 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1660 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1661 else if (TREE_CODE (type) == COMPLEX_TYPE
1662 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1663 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1664 else if (TREE_CODE (type) == REAL_TYPE
1665 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1666 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1667 else if (TREE_CODE (type) == REAL_TYPE
1668 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1669 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1670 /* ??? At some point, messages should be written about
1671 conversions between complex types, but that's too messy
1672 to do now. */
1673 else if (TREE_CODE (type) == REAL_TYPE
1674 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1676 /* Warn if any argument is passed as `float',
1677 since without a prototype it would be `double'. */
1678 if (formal_prec == TYPE_PRECISION (float_type_node))
1679 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
1681 /* Detect integer changing in width or signedness. */
1682 else if (INTEGRAL_TYPE_P (type)
1683 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1685 tree would_have_been = default_conversion (val);
1686 tree type1 = TREE_TYPE (would_have_been);
1688 if (TREE_CODE (type) == ENUMERAL_TYPE
1689 && type == TREE_TYPE (val))
1690 /* No warning if function asks for enum
1691 and the actual arg is that enum type. */
1693 else if (formal_prec != TYPE_PRECISION (type1))
1694 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
1695 else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
1697 /* Don't complain if the formal parameter type
1698 is an enum, because we can't tell now whether
1699 the value was an enum--even the same enum. */
1700 else if (TREE_CODE (type) == ENUMERAL_TYPE)
1702 else if (TREE_CODE (val) == INTEGER_CST
1703 && int_fits_type_p (val, type))
1704 /* Change in signedness doesn't matter
1705 if a constant value is unaffected. */
1707 /* Likewise for a constant in a NOP_EXPR. */
1708 else if (TREE_CODE (val) == NOP_EXPR
1709 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
1710 && int_fits_type_p (TREE_OPERAND (val, 0), type))
1712 #if 0 /* We never get such tree structure here. */
1713 else if (TREE_CODE (TREE_TYPE (val)) == ENUMERAL_TYPE
1714 && int_fits_type_p (TYPE_MIN_VALUE (TREE_TYPE (val)), type)
1715 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (val)), type))
1716 /* Change in signedness doesn't matter
1717 if an enum value is unaffected. */
1719 #endif
1720 /* If the value is extended from a narrower
1721 unsigned type, it doesn't matter whether we
1722 pass it as signed or unsigned; the value
1723 certainly is the same either way. */
1724 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
1725 && TREE_UNSIGNED (TREE_TYPE (val)))
1727 else if (TREE_UNSIGNED (type))
1728 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
1729 else
1730 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
1734 parmval = convert_for_assignment (type, val,
1735 (char *) 0, /* arg passing */
1736 fundecl, name, parmnum + 1);
1738 #ifdef PROMOTE_PROTOTYPES
1739 if ((TREE_CODE (type) == INTEGER_TYPE
1740 || TREE_CODE (type) == ENUMERAL_TYPE)
1741 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
1742 parmval = default_conversion (parmval);
1743 #endif
1745 result = tree_cons (NULL_TREE, parmval, result);
1747 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
1748 && (TYPE_PRECISION (TREE_TYPE (val))
1749 < TYPE_PRECISION (double_type_node)))
1750 /* Convert `float' to `double'. */
1751 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
1752 else
1753 /* Convert `short' and `char' to full-size `int'. */
1754 result = tree_cons (NULL_TREE, default_conversion (val), result);
1756 if (typetail)
1757 typetail = TREE_CHAIN (typetail);
1760 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
1762 if (name)
1763 error ("too few arguments to function `%s'",
1764 IDENTIFIER_POINTER (name));
1765 else
1766 error ("too few arguments to function");
1769 return nreverse (result);
1772 /* This is the entry point used by the parser
1773 for binary operators in the input.
1774 In addition to constructing the expression,
1775 we check for operands that were written with other binary operators
1776 in a way that is likely to confuse the user. */
1778 tree
1779 parser_build_binary_op (code, arg1, arg2)
1780 enum tree_code code;
1781 tree arg1, arg2;
1783 tree result = build_binary_op (code, arg1, arg2, 1);
1785 char class;
1786 char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
1787 char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
1788 enum tree_code code1 = ERROR_MARK;
1789 enum tree_code code2 = ERROR_MARK;
1791 if (class1 == 'e' || class1 == '1'
1792 || class1 == '2' || class1 == '<')
1793 code1 = C_EXP_ORIGINAL_CODE (arg1);
1794 if (class2 == 'e' || class2 == '1'
1795 || class2 == '2' || class2 == '<')
1796 code2 = C_EXP_ORIGINAL_CODE (arg2);
1798 /* Check for cases such as x+y<<z which users are likely
1799 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1800 is cleared to prevent these warnings. */
1801 if (warn_parentheses)
1803 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
1805 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1806 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1807 warning ("suggest parentheses around + or - inside shift");
1810 if (code == TRUTH_ORIF_EXPR)
1812 if (code1 == TRUTH_ANDIF_EXPR
1813 || code2 == TRUTH_ANDIF_EXPR)
1814 warning ("suggest parentheses around && within ||");
1817 if (code == BIT_IOR_EXPR)
1819 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
1820 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1821 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
1822 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1823 warning ("suggest parentheses around arithmetic in operand of |");
1824 /* Check cases like x|y==z */
1825 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1826 warning ("suggest parentheses around comparison in operand of |");
1829 if (code == BIT_XOR_EXPR)
1831 if (code1 == BIT_AND_EXPR
1832 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1833 || code2 == BIT_AND_EXPR
1834 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1835 warning ("suggest parentheses around arithmetic in operand of ^");
1836 /* Check cases like x^y==z */
1837 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1838 warning ("suggest parentheses around comparison in operand of ^");
1841 if (code == BIT_AND_EXPR)
1843 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1844 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1845 warning ("suggest parentheses around + or - in operand of &");
1846 /* Check cases like x&y==z */
1847 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1848 warning ("suggest parentheses around comparison in operand of &");
1852 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
1853 if (TREE_CODE_CLASS (code) == '<' && extra_warnings
1854 && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
1855 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1857 unsigned_conversion_warning (result, arg1);
1858 unsigned_conversion_warning (result, arg2);
1859 overflow_warning (result);
1861 class = TREE_CODE_CLASS (TREE_CODE (result));
1863 /* Record the code that was specified in the source,
1864 for the sake of warnings about confusing nesting. */
1865 if (class == 'e' || class == '1'
1866 || class == '2' || class == '<')
1867 C_SET_EXP_ORIGINAL_CODE (result, code);
1868 else
1870 int flag = TREE_CONSTANT (result);
1871 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
1872 so that convert_for_assignment wouldn't strip it.
1873 That way, we got warnings for things like p = (1 - 1).
1874 But it turns out we should not get those warnings. */
1875 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
1876 C_SET_EXP_ORIGINAL_CODE (result, code);
1877 TREE_CONSTANT (result) = flag;
1880 return result;
1883 /* Build a binary-operation expression without default conversions.
1884 CODE is the kind of expression to build.
1885 This function differs from `build' in several ways:
1886 the data type of the result is computed and recorded in it,
1887 warnings are generated if arg data types are invalid,
1888 special handling for addition and subtraction of pointers is known,
1889 and some optimization is done (operations on narrow ints
1890 are done in the narrower type when that gives the same result).
1891 Constant folding is also done before the result is returned.
1893 Note that the operands will never have enumeral types, or function
1894 or array types, because either they will have the default conversions
1895 performed or they have both just been converted to some other type in which
1896 the arithmetic is to be done. */
1898 tree
1899 build_binary_op (code, orig_op0, orig_op1, convert_p)
1900 enum tree_code code;
1901 tree orig_op0, orig_op1;
1902 int convert_p;
1904 tree type0, type1;
1905 register enum tree_code code0, code1;
1906 tree op0, op1;
1908 /* Expression code to give to the expression when it is built.
1909 Normally this is CODE, which is what the caller asked for,
1910 but in some special cases we change it. */
1911 register enum tree_code resultcode = code;
1913 /* Data type in which the computation is to be performed.
1914 In the simplest cases this is the common type of the arguments. */
1915 register tree result_type = NULL;
1917 /* Nonzero means operands have already been type-converted
1918 in whatever way is necessary.
1919 Zero means they need to be converted to RESULT_TYPE. */
1920 int converted = 0;
1922 /* Nonzero means create the expression with this type, rather than
1923 RESULT_TYPE. */
1924 tree build_type = 0;
1926 /* Nonzero means after finally constructing the expression
1927 convert it to this type. */
1928 tree final_type = 0;
1930 /* Nonzero if this is an operation like MIN or MAX which can
1931 safely be computed in short if both args are promoted shorts.
1932 Also implies COMMON.
1933 -1 indicates a bitwise operation; this makes a difference
1934 in the exact conditions for when it is safe to do the operation
1935 in a narrower mode. */
1936 int shorten = 0;
1938 /* Nonzero if this is a comparison operation;
1939 if both args are promoted shorts, compare the original shorts.
1940 Also implies COMMON. */
1941 int short_compare = 0;
1943 /* Nonzero if this is a right-shift operation, which can be computed on the
1944 original short and then promoted if the operand is a promoted short. */
1945 int short_shift = 0;
1947 /* Nonzero means set RESULT_TYPE to the common type of the args. */
1948 int common = 0;
1950 if (convert_p)
1952 op0 = default_conversion (orig_op0);
1953 op1 = default_conversion (orig_op1);
1955 else
1957 op0 = orig_op0;
1958 op1 = orig_op1;
1961 type0 = TREE_TYPE (op0);
1962 type1 = TREE_TYPE (op1);
1964 /* The expression codes of the data types of the arguments tell us
1965 whether the arguments are integers, floating, pointers, etc. */
1966 code0 = TREE_CODE (type0);
1967 code1 = TREE_CODE (type1);
1969 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1970 STRIP_TYPE_NOPS (op0);
1971 STRIP_TYPE_NOPS (op1);
1973 /* If an error was already reported for one of the arguments,
1974 avoid reporting another error. */
1976 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
1977 return error_mark_node;
1979 switch (code)
1981 case PLUS_EXPR:
1982 /* Handle the pointer + int case. */
1983 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1984 return pointer_int_sum (PLUS_EXPR, op0, op1);
1985 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
1986 return pointer_int_sum (PLUS_EXPR, op1, op0);
1987 else
1988 common = 1;
1989 break;
1991 case MINUS_EXPR:
1992 /* Subtraction of two similar pointers.
1993 We must subtract them as integers, then divide by object size. */
1994 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
1995 && comp_target_types (type0, type1))
1996 return pointer_diff (op0, op1);
1997 /* Handle pointer minus int. Just like pointer plus int. */
1998 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1999 return pointer_int_sum (MINUS_EXPR, op0, op1);
2000 else
2001 common = 1;
2002 break;
2004 case MULT_EXPR:
2005 common = 1;
2006 break;
2008 case TRUNC_DIV_EXPR:
2009 case CEIL_DIV_EXPR:
2010 case FLOOR_DIV_EXPR:
2011 case ROUND_DIV_EXPR:
2012 case EXACT_DIV_EXPR:
2013 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2014 || code0 == COMPLEX_TYPE)
2015 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2016 || code1 == COMPLEX_TYPE))
2018 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
2019 resultcode = RDIV_EXPR;
2020 else
2022 /* Although it would be tempting to shorten always here, that
2023 loses on some targets, since the modulo instruction is
2024 undefined if the quotient can't be represented in the
2025 computation mode. We shorten only if unsigned or if
2026 dividing by something we know != -1. */
2027 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2028 || (TREE_CODE (op1) == INTEGER_CST
2029 && (TREE_INT_CST_LOW (op1) != -1
2030 || TREE_INT_CST_HIGH (op1) != -1)));
2032 common = 1;
2034 break;
2036 case BIT_AND_EXPR:
2037 case BIT_ANDTC_EXPR:
2038 case BIT_IOR_EXPR:
2039 case BIT_XOR_EXPR:
2040 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2041 shorten = -1;
2042 /* If one operand is a constant, and the other is a short type
2043 that has been converted to an int,
2044 really do the work in the short type and then convert the
2045 result to int. If we are lucky, the constant will be 0 or 1
2046 in the short type, making the entire operation go away. */
2047 if (TREE_CODE (op0) == INTEGER_CST
2048 && TREE_CODE (op1) == NOP_EXPR
2049 && TYPE_PRECISION (type1) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1, 0)))
2050 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op1, 0))))
2052 final_type = result_type;
2053 op1 = TREE_OPERAND (op1, 0);
2054 result_type = TREE_TYPE (op1);
2056 if (TREE_CODE (op1) == INTEGER_CST
2057 && TREE_CODE (op0) == NOP_EXPR
2058 && TYPE_PRECISION (type0) > TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0)))
2059 && TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0))))
2061 final_type = result_type;
2062 op0 = TREE_OPERAND (op0, 0);
2063 result_type = TREE_TYPE (op0);
2065 break;
2067 case TRUNC_MOD_EXPR:
2068 case FLOOR_MOD_EXPR:
2069 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2071 /* Although it would be tempting to shorten always here, that loses
2072 on some targets, since the modulo instruction is undefined if the
2073 quotient can't be represented in the computation mode. We shorten
2074 only if unsigned or if dividing by something we know != -1. */
2075 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2076 || (TREE_CODE (op1) == INTEGER_CST
2077 && (TREE_INT_CST_LOW (op1) != -1
2078 || TREE_INT_CST_HIGH (op1) != -1)));
2079 common = 1;
2081 break;
2083 case TRUTH_ANDIF_EXPR:
2084 case TRUTH_ORIF_EXPR:
2085 case TRUTH_AND_EXPR:
2086 case TRUTH_OR_EXPR:
2087 case TRUTH_XOR_EXPR:
2088 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
2089 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2090 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
2091 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2093 /* Result of these operations is always an int,
2094 but that does not mean the operands should be
2095 converted to ints! */
2096 result_type = integer_type_node;
2097 op0 = truthvalue_conversion (op0);
2098 op1 = truthvalue_conversion (op1);
2099 converted = 1;
2101 break;
2103 /* Shift operations: result has same type as first operand;
2104 always convert second operand to int.
2105 Also set SHORT_SHIFT if shifting rightward. */
2107 case RSHIFT_EXPR:
2108 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2110 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2112 if (tree_int_cst_sgn (op1) < 0)
2113 warning ("right shift count is negative");
2114 else
2116 if (TREE_INT_CST_LOW (op1) | TREE_INT_CST_HIGH (op1))
2117 short_shift = 1;
2118 if (TREE_INT_CST_HIGH (op1) != 0
2119 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2120 >= TYPE_PRECISION (type0)))
2121 warning ("right shift count >= width of type");
2124 /* Use the type of the value to be shifted.
2125 This is what most traditional C compilers do. */
2126 result_type = type0;
2127 /* Unless traditional, convert the shift-count to an integer,
2128 regardless of size of value being shifted. */
2129 if (! flag_traditional)
2131 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2132 op1 = convert (integer_type_node, op1);
2133 /* Avoid converting op1 to result_type later. */
2134 converted = 1;
2137 break;
2139 case LSHIFT_EXPR:
2140 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2142 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2144 if (tree_int_cst_sgn (op1) < 0)
2145 warning ("left shift count is negative");
2146 else if (TREE_INT_CST_HIGH (op1) != 0
2147 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2148 >= TYPE_PRECISION (type0)))
2149 warning ("left shift count >= width of type");
2151 /* Use the type of the value to be shifted.
2152 This is what most traditional C compilers do. */
2153 result_type = type0;
2154 /* Unless traditional, convert the shift-count to an integer,
2155 regardless of size of value being shifted. */
2156 if (! flag_traditional)
2158 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2159 op1 = convert (integer_type_node, op1);
2160 /* Avoid converting op1 to result_type later. */
2161 converted = 1;
2164 break;
2166 case RROTATE_EXPR:
2167 case LROTATE_EXPR:
2168 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2170 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2172 if (tree_int_cst_sgn (op1) < 0)
2173 warning ("shift count is negative");
2174 else if (TREE_INT_CST_HIGH (op1) != 0
2175 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (op1)
2176 >= TYPE_PRECISION (type0)))
2177 warning ("shift count >= width of type");
2179 /* Use the type of the value to be shifted.
2180 This is what most traditional C compilers do. */
2181 result_type = type0;
2182 /* Unless traditional, convert the shift-count to an integer,
2183 regardless of size of value being shifted. */
2184 if (! flag_traditional)
2186 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2187 op1 = convert (integer_type_node, op1);
2188 /* Avoid converting op1 to result_type later. */
2189 converted = 1;
2192 break;
2194 case EQ_EXPR:
2195 case NE_EXPR:
2196 /* Result of comparison is always int,
2197 but don't convert the args to int! */
2198 build_type = integer_type_node;
2199 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2200 || code0 == COMPLEX_TYPE)
2201 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2202 || code1 == COMPLEX_TYPE))
2203 short_compare = 1;
2204 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2206 register tree tt0 = TREE_TYPE (type0);
2207 register tree tt1 = TREE_TYPE (type1);
2208 /* Anything compares with void *. void * compares with anything.
2209 Otherwise, the targets must be compatible
2210 and both must be object or both incomplete. */
2211 if (comp_target_types (type0, type1))
2212 result_type = common_type (type0, type1);
2213 else if (TYPE_MAIN_VARIANT (tt0) == void_type_node)
2215 /* op0 != orig_op0 detects the case of something
2216 whose value is 0 but which isn't a valid null ptr const. */
2217 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
2218 && TREE_CODE (tt1) == FUNCTION_TYPE)
2219 pedwarn ("ANSI C forbids comparison of `void *' with function pointer");
2221 else if (TYPE_MAIN_VARIANT (tt1) == void_type_node)
2223 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
2224 && TREE_CODE (tt0) == FUNCTION_TYPE)
2225 pedwarn ("ANSI C forbids comparison of `void *' with function pointer");
2227 else
2228 pedwarn ("comparison of distinct pointer types lacks a cast");
2230 if (result_type == NULL_TREE)
2231 result_type = ptr_type_node;
2233 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2234 && integer_zerop (op1))
2235 result_type = type0;
2236 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2237 && integer_zerop (op0))
2238 result_type = type1;
2239 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2241 result_type = type0;
2242 if (! flag_traditional)
2243 pedwarn ("comparison between pointer and integer");
2245 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2247 result_type = type1;
2248 if (! flag_traditional)
2249 pedwarn ("comparison between pointer and integer");
2251 break;
2253 case MAX_EXPR:
2254 case MIN_EXPR:
2255 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2256 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2257 shorten = 1;
2258 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2260 if (comp_target_types (type0, type1))
2262 result_type = common_type (type0, type1);
2263 if (pedantic
2264 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2265 pedwarn ("ANSI C forbids ordered comparisons of pointers to functions");
2267 else
2269 result_type = ptr_type_node;
2270 pedwarn ("comparison of distinct pointer types lacks a cast");
2273 break;
2275 case LE_EXPR:
2276 case GE_EXPR:
2277 case LT_EXPR:
2278 case GT_EXPR:
2279 build_type = integer_type_node;
2280 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2281 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2282 short_compare = 1;
2283 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2285 if (comp_target_types (type0, type1))
2287 result_type = common_type (type0, type1);
2288 if ((TYPE_SIZE (TREE_TYPE (type0)) != 0)
2289 != (TYPE_SIZE (TREE_TYPE (type1)) != 0))
2290 pedwarn ("comparison of complete and incomplete pointers");
2291 else if (pedantic
2292 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2293 pedwarn ("ANSI C forbids ordered comparisons of pointers to functions");
2295 else
2297 result_type = ptr_type_node;
2298 pedwarn ("comparison of distinct pointer types lacks a cast");
2301 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2302 && integer_zerop (op1))
2304 result_type = type0;
2305 if (pedantic || extra_warnings)
2306 pedwarn ("ordered comparison of pointer with integer zero");
2308 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2309 && integer_zerop (op0))
2311 result_type = type1;
2312 if (pedantic)
2313 pedwarn ("ordered comparison of pointer with integer zero");
2315 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2317 result_type = type0;
2318 if (! flag_traditional)
2319 pedwarn ("comparison between pointer and integer");
2321 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2323 result_type = type1;
2324 if (! flag_traditional)
2325 pedwarn ("comparison between pointer and integer");
2327 break;
2330 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2332 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2334 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
2336 if (shorten || common || short_compare)
2337 result_type = common_type (type0, type1);
2339 /* For certain operations (which identify themselves by shorten != 0)
2340 if both args were extended from the same smaller type,
2341 do the arithmetic in that type and then extend.
2343 shorten !=0 and !=1 indicates a bitwise operation.
2344 For them, this optimization is safe only if
2345 both args are zero-extended or both are sign-extended.
2346 Otherwise, we might change the result.
2347 Eg, (short)-1 | (unsigned short)-1 is (int)-1
2348 but calculated in (unsigned short) it would be (unsigned short)-1. */
2350 if (shorten && none_complex)
2352 int unsigned0, unsigned1;
2353 tree arg0 = get_narrower (op0, &unsigned0);
2354 tree arg1 = get_narrower (op1, &unsigned1);
2355 /* UNS is 1 if the operation to be done is an unsigned one. */
2356 int uns = TREE_UNSIGNED (result_type);
2357 tree type;
2359 final_type = result_type;
2361 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
2362 but it *requires* conversion to FINAL_TYPE. */
2364 if ((TYPE_PRECISION (TREE_TYPE (op0))
2365 == TYPE_PRECISION (TREE_TYPE (arg0)))
2366 && TREE_TYPE (op0) != final_type)
2367 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
2368 if ((TYPE_PRECISION (TREE_TYPE (op1))
2369 == TYPE_PRECISION (TREE_TYPE (arg1)))
2370 && TREE_TYPE (op1) != final_type)
2371 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
2373 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
2375 /* For bitwise operations, signedness of nominal type
2376 does not matter. Consider only how operands were extended. */
2377 if (shorten == -1)
2378 uns = unsigned0;
2380 /* Note that in all three cases below we refrain from optimizing
2381 an unsigned operation on sign-extended args.
2382 That would not be valid. */
2384 /* Both args variable: if both extended in same way
2385 from same width, do it in that width.
2386 Do it unsigned if args were zero-extended. */
2387 if ((TYPE_PRECISION (TREE_TYPE (arg0))
2388 < TYPE_PRECISION (result_type))
2389 && (TYPE_PRECISION (TREE_TYPE (arg1))
2390 == TYPE_PRECISION (TREE_TYPE (arg0)))
2391 && unsigned0 == unsigned1
2392 && (unsigned0 || !uns))
2393 result_type
2394 = signed_or_unsigned_type (unsigned0,
2395 common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
2396 else if (TREE_CODE (arg0) == INTEGER_CST
2397 && (unsigned1 || !uns)
2398 && (TYPE_PRECISION (TREE_TYPE (arg1))
2399 < TYPE_PRECISION (result_type))
2400 && (type = signed_or_unsigned_type (unsigned1,
2401 TREE_TYPE (arg1)),
2402 int_fits_type_p (arg0, type)))
2403 result_type = type;
2404 else if (TREE_CODE (arg1) == INTEGER_CST
2405 && (unsigned0 || !uns)
2406 && (TYPE_PRECISION (TREE_TYPE (arg0))
2407 < TYPE_PRECISION (result_type))
2408 && (type = signed_or_unsigned_type (unsigned0,
2409 TREE_TYPE (arg0)),
2410 int_fits_type_p (arg1, type)))
2411 result_type = type;
2414 /* Shifts can be shortened if shifting right. */
2416 if (short_shift)
2418 int unsigned_arg;
2419 tree arg0 = get_narrower (op0, &unsigned_arg);
2421 final_type = result_type;
2423 if (arg0 == op0 && final_type == TREE_TYPE (op0))
2424 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
2426 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
2427 /* We can shorten only if the shift count is less than the
2428 number of bits in the smaller type size. */
2429 && TREE_INT_CST_HIGH (op1) == 0
2430 && TYPE_PRECISION (TREE_TYPE (arg0)) > TREE_INT_CST_LOW (op1)
2431 /* If arg is sign-extended and then unsigned-shifted,
2432 we can simulate this with a signed shift in arg's type
2433 only if the extended result is at least twice as wide
2434 as the arg. Otherwise, the shift could use up all the
2435 ones made by sign-extension and bring in zeros.
2436 We can't optimize that case at all, but in most machines
2437 it never happens because available widths are 2**N. */
2438 && (!TREE_UNSIGNED (final_type)
2439 || unsigned_arg
2440 || 2 * TYPE_PRECISION (TREE_TYPE (arg0)) <= TYPE_PRECISION (result_type)))
2442 /* Do an unsigned shift if the operand was zero-extended. */
2443 result_type
2444 = signed_or_unsigned_type (unsigned_arg,
2445 TREE_TYPE (arg0));
2446 /* Convert value-to-be-shifted to that type. */
2447 if (TREE_TYPE (op0) != result_type)
2448 op0 = convert (result_type, op0);
2449 converted = 1;
2453 /* Comparison operations are shortened too but differently.
2454 They identify themselves by setting short_compare = 1. */
2456 if (short_compare)
2458 /* Don't write &op0, etc., because that would prevent op0
2459 from being kept in a register.
2460 Instead, make copies of the our local variables and
2461 pass the copies by reference, then copy them back afterward. */
2462 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
2463 enum tree_code xresultcode = resultcode;
2464 tree val
2465 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
2466 if (val != 0)
2467 return val;
2468 op0 = xop0, op1 = xop1;
2469 converted = 1;
2470 resultcode = xresultcode;
2472 if (warn_sign_compare && skip_evaluation == 0)
2474 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
2475 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
2477 int unsignedp0, unsignedp1;
2478 tree primop0 = get_narrower (op0, &unsignedp0);
2479 tree primop1 = get_narrower (op1, &unsignedp1);
2481 /* Avoid spurious warnings for comparison with enumerators. */
2483 xop0 = orig_op0;
2484 xop1 = orig_op1;
2485 STRIP_TYPE_NOPS (xop0);
2486 STRIP_TYPE_NOPS (xop1);
2488 /* Give warnings for comparisons between signed and unsigned
2489 quantities that may fail. */
2490 /* Do the checking based on the original operand trees, so that
2491 casts will be considered, but default promotions won't be. */
2493 /* Do not warn if the comparison is being done in a signed type,
2494 since the signed type will only be chosen if it can represent
2495 all the values of the unsigned type. */
2496 if (! TREE_UNSIGNED (result_type))
2497 /* OK */;
2498 /* Do not warn if both operands are unsigned. */
2499 else if (op0_signed == op1_signed)
2500 /* OK */;
2501 /* Do not warn if the signed quantity is an unsuffixed
2502 integer literal (or some static constant expression
2503 involving such literals) and it is non-negative. */
2504 else if ((op0_signed && TREE_CODE (xop0) == INTEGER_CST
2505 && tree_int_cst_sgn (xop0) >= 0)
2506 || (op1_signed && TREE_CODE (xop1) == INTEGER_CST
2507 && tree_int_cst_sgn (xop1) >= 0))
2508 /* OK */;
2509 /* Do not warn if the comparison is an equality operation,
2510 the unsigned quantity is an integral constant and it does
2511 not use the most significant bit of result_type. */
2512 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR)
2513 && ((op0_signed && TREE_CODE (xop1) == INTEGER_CST
2514 && int_fits_type_p (xop1, signed_type (result_type)))
2515 || (op1_signed && TREE_CODE (xop0) == INTEGER_CST
2516 && int_fits_type_p (xop0, signed_type (result_type)))))
2517 /* OK */;
2518 else
2519 warning ("comparison between signed and unsigned");
2521 /* Warn if two unsigned values are being compared in a size
2522 larger than their original size, and one (and only one) is the
2523 result of a `~' operator. This comparison will always fail.
2525 Also warn if one operand is a constant, and the constant
2526 does not have all bits set that are set in the ~ operand
2527 when it is extended. */
2529 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
2530 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
2532 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
2533 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
2534 &unsignedp0);
2535 else
2536 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
2537 &unsignedp1);
2539 if (TREE_CODE (primop0) == INTEGER_CST
2540 || TREE_CODE (primop1) == INTEGER_CST)
2542 tree primop;
2543 long constant, mask;
2544 int unsignedp, bits;
2546 if (TREE_CODE (primop0) == INTEGER_CST)
2548 primop = primop1;
2549 unsignedp = unsignedp1;
2550 constant = TREE_INT_CST_LOW (primop0);
2552 else
2554 primop = primop0;
2555 unsignedp = unsignedp0;
2556 constant = TREE_INT_CST_LOW (primop1);
2559 bits = TYPE_PRECISION (TREE_TYPE (primop));
2560 if (bits < TYPE_PRECISION (result_type)
2561 && bits < HOST_BITS_PER_LONG && unsignedp)
2563 mask = (~0L) << bits;
2564 if ((mask & constant) != mask)
2565 warning ("comparison of promoted ~unsigned with constant");
2568 else if (unsignedp0 && unsignedp1
2569 && (TYPE_PRECISION (TREE_TYPE (primop0))
2570 < TYPE_PRECISION (result_type))
2571 && (TYPE_PRECISION (TREE_TYPE (primop1))
2572 < TYPE_PRECISION (result_type)))
2573 warning ("comparison of promoted ~unsigned with unsigned");
2579 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
2580 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
2581 Then the expression will be built.
2582 It will be given type FINAL_TYPE if that is nonzero;
2583 otherwise, it will be given type RESULT_TYPE. */
2585 if (!result_type)
2587 binary_op_error (code);
2588 return error_mark_node;
2591 if (! converted)
2593 if (TREE_TYPE (op0) != result_type)
2594 op0 = convert (result_type, op0);
2595 if (TREE_TYPE (op1) != result_type)
2596 op1 = convert (result_type, op1);
2599 if (build_type == NULL_TREE)
2600 build_type = result_type;
2603 register tree result = build (resultcode, build_type, op0, op1);
2604 register tree folded;
2606 folded = fold (result);
2607 if (folded == result)
2608 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2609 if (final_type != 0)
2610 return convert (final_type, folded);
2611 return folded;
2615 /* Return a tree for the sum or difference (RESULTCODE says which)
2616 of pointer PTROP and integer INTOP. */
2618 static tree
2619 pointer_int_sum (resultcode, ptrop, intop)
2620 enum tree_code resultcode;
2621 register tree ptrop, intop;
2623 tree size_exp;
2625 register tree result;
2626 register tree folded;
2628 /* The result is a pointer of the same type that is being added. */
2630 register tree result_type = TREE_TYPE (ptrop);
2632 if (TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE)
2634 if (pedantic || warn_pointer_arith)
2635 pedwarn ("pointer of type `void *' used in arithmetic");
2636 size_exp = integer_one_node;
2638 else if (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE)
2640 if (pedantic || warn_pointer_arith)
2641 pedwarn ("pointer to a function used in arithmetic");
2642 size_exp = integer_one_node;
2644 else
2645 size_exp = c_size_in_bytes (TREE_TYPE (result_type));
2647 /* If what we are about to multiply by the size of the elements
2648 contains a constant term, apply distributive law
2649 and multiply that constant term separately.
2650 This helps produce common subexpressions. */
2652 if ((TREE_CODE (intop) == PLUS_EXPR || TREE_CODE (intop) == MINUS_EXPR)
2653 && ! TREE_CONSTANT (intop)
2654 && TREE_CONSTANT (TREE_OPERAND (intop, 1))
2655 && TREE_CONSTANT (size_exp)
2656 /* If the constant comes from pointer subtraction,
2657 skip this optimization--it would cause an error. */
2658 && TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
2659 /* If the constant is unsigned, and smaller than the pointer size,
2660 then we must skip this optimization. This is because it could cause
2661 an overflow error if the constant is negative but INTOP is not. */
2662 && (! TREE_UNSIGNED (TREE_TYPE (intop))
2663 || (TYPE_PRECISION (TREE_TYPE (intop))
2664 == TYPE_PRECISION (TREE_TYPE (ptrop)))))
2666 enum tree_code subcode = resultcode;
2667 tree int_type = TREE_TYPE (intop);
2668 if (TREE_CODE (intop) == MINUS_EXPR)
2669 subcode = (subcode == PLUS_EXPR ? MINUS_EXPR : PLUS_EXPR);
2670 /* Convert both subexpression types to the type of intop,
2671 because weird cases involving pointer arithmetic
2672 can result in a sum or difference with different type args. */
2673 ptrop = build_binary_op (subcode, ptrop,
2674 convert (int_type, TREE_OPERAND (intop, 1)), 1);
2675 intop = convert (int_type, TREE_OPERAND (intop, 0));
2678 /* Convert the integer argument to a type the same size as sizetype
2679 so the multiply won't overflow spuriously. */
2681 if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
2682 || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
2683 intop = convert (type_for_size (TYPE_PRECISION (sizetype),
2684 TREE_UNSIGNED (sizetype)), intop);
2686 /* Replace the integer argument with a suitable product by the object size.
2687 Do this multiplication as signed, then convert to the appropriate
2688 pointer type (actually unsigned integral). */
2690 intop = convert (result_type,
2691 build_binary_op (MULT_EXPR, intop,
2692 convert (TREE_TYPE (intop), size_exp), 1));
2694 /* Create the sum or difference. */
2696 result = build (resultcode, result_type, ptrop, intop);
2698 folded = fold (result);
2699 if (folded == result)
2700 TREE_CONSTANT (folded) = TREE_CONSTANT (ptrop) & TREE_CONSTANT (intop);
2701 return folded;
2704 /* Return a tree for the difference of pointers OP0 and OP1.
2705 The resulting tree has type int. */
2707 static tree
2708 pointer_diff (op0, op1)
2709 register tree op0, op1;
2711 register tree result, folded;
2712 tree restype = ptrdiff_type_node;
2714 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2716 if (pedantic || warn_pointer_arith)
2718 if (TREE_CODE (target_type) == VOID_TYPE)
2719 pedwarn ("pointer of type `void *' used in subtraction");
2720 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2721 pedwarn ("pointer to a function used in subtraction");
2724 /* First do the subtraction as integers;
2725 then drop through to build the divide operator.
2726 Do not do default conversions on the minus operator
2727 in case restype is a short type. */
2729 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2730 convert (restype, op1), 0);
2731 /* This generates an error if op1 is pointer to incomplete type. */
2732 if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (op1))) == 0)
2733 error ("arithmetic on pointer to an incomplete type");
2735 /* This generates an error if op0 is pointer to incomplete type. */
2736 op1 = c_size_in_bytes (target_type);
2738 /* Divide by the size, in easiest possible way. */
2740 result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2742 folded = fold (result);
2743 if (folded == result)
2744 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2745 return folded;
2748 /* Construct and perhaps optimize a tree representation
2749 for a unary operation. CODE, a tree_code, specifies the operation
2750 and XARG is the operand. NOCONVERT nonzero suppresses
2751 the default promotions (such as from short to int). */
2753 tree
2754 build_unary_op (code, xarg, noconvert)
2755 enum tree_code code;
2756 tree xarg;
2757 int noconvert;
2759 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2760 register tree arg = xarg;
2761 register tree argtype = 0;
2762 register enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2763 char *errstring = NULL;
2764 tree val;
2766 if (typecode == ERROR_MARK)
2767 return error_mark_node;
2768 if (typecode == ENUMERAL_TYPE)
2769 typecode = INTEGER_TYPE;
2771 switch (code)
2773 case CONVERT_EXPR:
2774 /* This is used for unary plus, because a CONVERT_EXPR
2775 is enough to prevent anybody from looking inside for
2776 associativity, but won't generate any code. */
2777 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2778 || typecode == COMPLEX_TYPE))
2779 errstring = "wrong type argument to unary plus";
2780 else if (!noconvert)
2781 arg = default_conversion (arg);
2782 break;
2784 case NEGATE_EXPR:
2785 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2786 || typecode == COMPLEX_TYPE))
2787 errstring = "wrong type argument to unary minus";
2788 else if (!noconvert)
2789 arg = default_conversion (arg);
2790 break;
2792 case BIT_NOT_EXPR:
2793 if (typecode == COMPLEX_TYPE)
2795 code = CONJ_EXPR;
2796 if (!noconvert)
2797 arg = default_conversion (arg);
2799 else if (typecode != INTEGER_TYPE)
2800 errstring = "wrong type argument to bit-complement";
2801 else if (!noconvert)
2802 arg = default_conversion (arg);
2803 break;
2805 case ABS_EXPR:
2806 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2807 || typecode == COMPLEX_TYPE))
2808 errstring = "wrong type argument to abs";
2809 else if (!noconvert)
2810 arg = default_conversion (arg);
2811 break;
2813 case CONJ_EXPR:
2814 /* Conjugating a real value is a no-op, but allow it anyway. */
2815 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2816 || typecode == COMPLEX_TYPE))
2817 errstring = "wrong type argument to conjugation";
2818 else if (!noconvert)
2819 arg = default_conversion (arg);
2820 break;
2822 case TRUTH_NOT_EXPR:
2823 if (typecode != INTEGER_TYPE
2824 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2825 && typecode != COMPLEX_TYPE
2826 /* These will convert to a pointer. */
2827 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2829 errstring = "wrong type argument to unary exclamation mark";
2830 break;
2832 arg = truthvalue_conversion (arg);
2833 return invert_truthvalue (arg);
2835 case NOP_EXPR:
2836 break;
2838 case REALPART_EXPR:
2839 if (TREE_CODE (arg) == COMPLEX_CST)
2840 return TREE_REALPART (arg);
2841 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2842 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2843 else
2844 return arg;
2846 case IMAGPART_EXPR:
2847 if (TREE_CODE (arg) == COMPLEX_CST)
2848 return TREE_IMAGPART (arg);
2849 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2850 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2851 else
2852 return convert (TREE_TYPE (arg), integer_zero_node);
2854 case PREINCREMENT_EXPR:
2855 case POSTINCREMENT_EXPR:
2856 case PREDECREMENT_EXPR:
2857 case POSTDECREMENT_EXPR:
2858 /* Handle complex lvalues (when permitted)
2859 by reduction to simpler cases. */
2861 val = unary_complex_lvalue (code, arg);
2862 if (val != 0)
2863 return val;
2865 /* Increment or decrement the real part of the value,
2866 and don't change the imaginary part. */
2867 if (typecode == COMPLEX_TYPE)
2869 tree real, imag;
2871 arg = stabilize_reference (arg);
2872 real = build_unary_op (REALPART_EXPR, arg, 1);
2873 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2874 return build (COMPLEX_EXPR, TREE_TYPE (arg),
2875 build_unary_op (code, real, 1), imag);
2878 /* Report invalid types. */
2880 if (typecode != POINTER_TYPE
2881 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2883 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2884 errstring ="wrong type argument to increment";
2885 else
2886 errstring ="wrong type argument to decrement";
2887 break;
2891 register tree inc;
2892 tree result_type = TREE_TYPE (arg);
2894 arg = get_unwidened (arg, 0);
2895 argtype = TREE_TYPE (arg);
2897 /* Compute the increment. */
2899 if (typecode == POINTER_TYPE)
2901 /* If pointer target is an undefined struct,
2902 we just cannot know how to do the arithmetic. */
2903 if (TYPE_SIZE (TREE_TYPE (result_type)) == 0)
2904 error ("%s of pointer to unknown structure",
2905 ((code == PREINCREMENT_EXPR
2906 || code == POSTINCREMENT_EXPR)
2907 ? "increment" : "decrement"));
2908 else if ((pedantic || warn_pointer_arith)
2909 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2910 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2911 pedwarn ("wrong type argument to %s",
2912 ((code == PREINCREMENT_EXPR
2913 || code == POSTINCREMENT_EXPR)
2914 ? "increment" : "decrement"));
2915 inc = c_size_in_bytes (TREE_TYPE (result_type));
2917 else
2918 inc = integer_one_node;
2920 inc = convert (argtype, inc);
2922 /* Handle incrementing a cast-expression. */
2924 while (1)
2925 switch (TREE_CODE (arg))
2927 case NOP_EXPR:
2928 case CONVERT_EXPR:
2929 case FLOAT_EXPR:
2930 case FIX_TRUNC_EXPR:
2931 case FIX_FLOOR_EXPR:
2932 case FIX_ROUND_EXPR:
2933 case FIX_CEIL_EXPR:
2934 pedantic_lvalue_warning (CONVERT_EXPR);
2935 /* If the real type has the same machine representation
2936 as the type it is cast to, we can make better output
2937 by adding directly to the inside of the cast. */
2938 if ((TREE_CODE (TREE_TYPE (arg))
2939 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
2940 && (TYPE_MODE (TREE_TYPE (arg))
2941 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
2942 arg = TREE_OPERAND (arg, 0);
2943 else
2945 tree incremented, modify, value;
2946 arg = stabilize_reference (arg);
2947 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
2948 value = arg;
2949 else
2950 value = save_expr (arg);
2951 incremented = build (((code == PREINCREMENT_EXPR
2952 || code == POSTINCREMENT_EXPR)
2953 ? PLUS_EXPR : MINUS_EXPR),
2954 argtype, value, inc);
2955 TREE_SIDE_EFFECTS (incremented) = 1;
2956 modify = build_modify_expr (arg, NOP_EXPR, incremented);
2957 value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
2958 TREE_USED (value) = 1;
2959 return value;
2961 break;
2963 default:
2964 goto give_up;
2966 give_up:
2968 /* Complain about anything else that is not a true lvalue. */
2969 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2970 || code == POSTINCREMENT_EXPR)
2971 ? "increment" : "decrement")))
2972 return error_mark_node;
2974 /* Report a read-only lvalue. */
2975 if (TREE_READONLY (arg))
2976 readonly_warning (arg,
2977 ((code == PREINCREMENT_EXPR
2978 || code == POSTINCREMENT_EXPR)
2979 ? "increment" : "decrement"));
2981 val = build (code, TREE_TYPE (arg), arg, inc);
2982 TREE_SIDE_EFFECTS (val) = 1;
2983 val = convert (result_type, val);
2984 if (TREE_CODE (val) != code)
2985 TREE_NO_UNUSED_WARNING (val) = 1;
2986 return val;
2989 case ADDR_EXPR:
2990 /* Note that this operation never does default_conversion
2991 regardless of NOCONVERT. */
2993 /* Let &* cancel out to simplify resulting code. */
2994 if (TREE_CODE (arg) == INDIRECT_REF)
2996 /* Don't let this be an lvalue. */
2997 if (lvalue_p (TREE_OPERAND (arg, 0)))
2998 return non_lvalue (TREE_OPERAND (arg, 0));
2999 return TREE_OPERAND (arg, 0);
3002 /* For &x[y], return x+y */
3003 if (TREE_CODE (arg) == ARRAY_REF)
3005 if (mark_addressable (TREE_OPERAND (arg, 0)) == 0)
3006 return error_mark_node;
3007 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
3008 TREE_OPERAND (arg, 1), 1);
3011 /* Handle complex lvalues (when permitted)
3012 by reduction to simpler cases. */
3013 val = unary_complex_lvalue (code, arg);
3014 if (val != 0)
3015 return val;
3017 #if 0 /* Turned off because inconsistent;
3018 float f; *&(int)f = 3.4 stores in int format
3019 whereas (int)f = 3.4 stores in float format. */
3020 /* Address of a cast is just a cast of the address
3021 of the operand of the cast. */
3022 switch (TREE_CODE (arg))
3024 case NOP_EXPR:
3025 case CONVERT_EXPR:
3026 case FLOAT_EXPR:
3027 case FIX_TRUNC_EXPR:
3028 case FIX_FLOOR_EXPR:
3029 case FIX_ROUND_EXPR:
3030 case FIX_CEIL_EXPR:
3031 if (pedantic)
3032 pedwarn ("ANSI C forbids the address of a cast expression");
3033 return convert (build_pointer_type (TREE_TYPE (arg)),
3034 build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0),
3035 0));
3037 #endif
3039 /* Allow the address of a constructor if all the elements
3040 are constant. */
3041 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_CONSTANT (arg))
3043 /* Anything not already handled and not a true memory reference
3044 is an error. */
3045 else if (typecode != FUNCTION_TYPE && !lvalue_or_else (arg, "unary `&'"))
3046 return error_mark_node;
3048 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
3049 argtype = TREE_TYPE (arg);
3050 /* If the lvalue is const or volatile,
3051 merge that into the type that the address will point to. */
3052 if (TREE_CODE_CLASS (TREE_CODE (arg)) == 'd'
3053 || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
3055 if (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg))
3056 argtype = c_build_type_variant (argtype,
3057 TREE_READONLY (arg),
3058 TREE_THIS_VOLATILE (arg));
3061 argtype = build_pointer_type (argtype);
3063 if (mark_addressable (arg) == 0)
3064 return error_mark_node;
3067 tree addr;
3069 if (TREE_CODE (arg) == COMPONENT_REF)
3071 tree field = TREE_OPERAND (arg, 1);
3073 addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), 0);
3075 if (DECL_C_BIT_FIELD (field))
3077 error ("attempt to take address of bit-field structure member `%s'",
3078 IDENTIFIER_POINTER (DECL_NAME (field)));
3079 return error_mark_node;
3082 addr = convert (argtype, addr);
3084 if (! integer_zerop (DECL_FIELD_BITPOS (field)))
3086 tree offset
3087 = size_binop (EASY_DIV_EXPR, DECL_FIELD_BITPOS (field),
3088 size_int (BITS_PER_UNIT));
3089 int flag = TREE_CONSTANT (addr);
3090 addr = fold (build (PLUS_EXPR, argtype,
3091 addr, convert (argtype, offset)));
3092 TREE_CONSTANT (addr) = flag;
3095 else
3096 addr = build1 (code, argtype, arg);
3098 /* Address of a static or external variable or
3099 file-scope function counts as a constant. */
3100 if (staticp (arg)
3101 && ! (TREE_CODE (arg) == FUNCTION_DECL
3102 && DECL_CONTEXT (arg) != 0))
3103 TREE_CONSTANT (addr) = 1;
3104 return addr;
3108 if (!errstring)
3110 if (argtype == 0)
3111 argtype = TREE_TYPE (arg);
3112 return fold (build1 (code, argtype, arg));
3115 error (errstring);
3116 return error_mark_node;
3119 #if 0
3120 /* If CONVERSIONS is a conversion expression or a nested sequence of such,
3121 convert ARG with the same conversions in the same order
3122 and return the result. */
3124 static tree
3125 convert_sequence (conversions, arg)
3126 tree conversions;
3127 tree arg;
3129 switch (TREE_CODE (conversions))
3131 case NOP_EXPR:
3132 case CONVERT_EXPR:
3133 case FLOAT_EXPR:
3134 case FIX_TRUNC_EXPR:
3135 case FIX_FLOOR_EXPR:
3136 case FIX_ROUND_EXPR:
3137 case FIX_CEIL_EXPR:
3138 return convert (TREE_TYPE (conversions),
3139 convert_sequence (TREE_OPERAND (conversions, 0),
3140 arg));
3142 default:
3143 return arg;
3146 #endif /* 0 */
3148 /* Return nonzero if REF is an lvalue valid for this language.
3149 Lvalues can be assigned, unless their type has TYPE_READONLY.
3150 Lvalues can have their address taken, unless they have DECL_REGISTER. */
3153 lvalue_p (ref)
3154 tree ref;
3156 register enum tree_code code = TREE_CODE (ref);
3158 switch (code)
3160 case REALPART_EXPR:
3161 case IMAGPART_EXPR:
3162 case COMPONENT_REF:
3163 return lvalue_p (TREE_OPERAND (ref, 0));
3165 case STRING_CST:
3166 return 1;
3168 case INDIRECT_REF:
3169 case ARRAY_REF:
3170 case VAR_DECL:
3171 case PARM_DECL:
3172 case RESULT_DECL:
3173 case ERROR_MARK:
3174 if (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3175 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
3176 return 1;
3177 break;
3179 return 0;
3182 /* Return nonzero if REF is an lvalue valid for this language;
3183 otherwise, print an error message and return zero. */
3186 lvalue_or_else (ref, string)
3187 tree ref;
3188 char *string;
3190 int win = lvalue_p (ref);
3191 if (! win)
3192 error ("invalid lvalue in %s", string);
3193 return win;
3196 /* Apply unary lvalue-demanding operator CODE to the expression ARG
3197 for certain kinds of expressions which are not really lvalues
3198 but which we can accept as lvalues.
3200 If ARG is not a kind of expression we can handle, return zero. */
3202 static tree
3203 unary_complex_lvalue (code, arg)
3204 enum tree_code code;
3205 tree arg;
3207 /* Handle (a, b) used as an "lvalue". */
3208 if (TREE_CODE (arg) == COMPOUND_EXPR)
3210 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
3211 pedantic_lvalue_warning (COMPOUND_EXPR);
3212 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
3213 TREE_OPERAND (arg, 0), real_result);
3216 /* Handle (a ? b : c) used as an "lvalue". */
3217 if (TREE_CODE (arg) == COND_EXPR)
3219 pedantic_lvalue_warning (COND_EXPR);
3220 return (build_conditional_expr
3221 (TREE_OPERAND (arg, 0),
3222 build_unary_op (code, TREE_OPERAND (arg, 1), 0),
3223 build_unary_op (code, TREE_OPERAND (arg, 2), 0)));
3226 return 0;
3229 /* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
3230 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
3232 static void
3233 pedantic_lvalue_warning (code)
3234 enum tree_code code;
3236 if (pedantic)
3237 pedwarn ("ANSI C forbids use of %s expressions as lvalues",
3238 code == COND_EXPR ? "conditional"
3239 : code == COMPOUND_EXPR ? "compound" : "cast");
3242 /* Warn about storing in something that is `const'. */
3244 void
3245 readonly_warning (arg, string)
3246 tree arg;
3247 char *string;
3249 char buf[80];
3250 strcpy (buf, string);
3252 /* Forbid assignments to iterators. */
3253 if (TREE_CODE (arg) == VAR_DECL && ITERATOR_P (arg))
3255 strcat (buf, " of iterator `%s'");
3256 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (arg)));
3259 if (TREE_CODE (arg) == COMPONENT_REF)
3261 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3262 readonly_warning (TREE_OPERAND (arg, 0), string);
3263 else
3265 strcat (buf, " of read-only member `%s'");
3266 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
3269 else if (TREE_CODE (arg) == VAR_DECL)
3271 strcat (buf, " of read-only variable `%s'");
3272 pedwarn (buf, IDENTIFIER_POINTER (DECL_NAME (arg)));
3274 else
3276 pedwarn ("%s of read-only location", buf);
3280 /* Mark EXP saying that we need to be able to take the
3281 address of it; it should not be allocated in a register.
3282 Value is 1 if successful. */
3285 mark_addressable (exp)
3286 tree exp;
3288 register tree x = exp;
3289 while (1)
3290 switch (TREE_CODE (x))
3292 case COMPONENT_REF:
3293 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
3295 error ("cannot take address of bitfield `%s'",
3296 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
3297 return 0;
3300 /* ... fall through ... */
3302 case ADDR_EXPR:
3303 case ARRAY_REF:
3304 case REALPART_EXPR:
3305 case IMAGPART_EXPR:
3306 x = TREE_OPERAND (x, 0);
3307 break;
3309 case CONSTRUCTOR:
3310 TREE_ADDRESSABLE (x) = 1;
3311 return 1;
3313 case VAR_DECL:
3314 case CONST_DECL:
3315 case PARM_DECL:
3316 case RESULT_DECL:
3317 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
3318 && DECL_NONLOCAL (x))
3320 if (TREE_PUBLIC (x))
3322 error ("global register variable `%s' used in nested function",
3323 IDENTIFIER_POINTER (DECL_NAME (x)));
3324 return 0;
3326 pedwarn ("register variable `%s' used in nested function",
3327 IDENTIFIER_POINTER (DECL_NAME (x)));
3329 else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
3331 if (TREE_PUBLIC (x))
3333 error ("address of global register variable `%s' requested",
3334 IDENTIFIER_POINTER (DECL_NAME (x)));
3335 return 0;
3338 /* If we are making this addressable due to its having
3339 volatile components, give a different error message. Also
3340 handle the case of an unnamed parameter by not trying
3341 to give the name. */
3343 else if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (x)))
3345 error ("cannot put object with volatile field into register");
3346 return 0;
3349 pedwarn ("address of register variable `%s' requested",
3350 IDENTIFIER_POINTER (DECL_NAME (x)));
3352 put_var_into_stack (x);
3354 /* drops in */
3355 case FUNCTION_DECL:
3356 TREE_ADDRESSABLE (x) = 1;
3357 #if 0 /* poplevel deals with this now. */
3358 if (DECL_CONTEXT (x) == 0)
3359 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;
3360 #endif
3362 default:
3363 return 1;
3367 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
3369 tree
3370 build_conditional_expr (ifexp, op1, op2)
3371 tree ifexp, op1, op2;
3373 register tree type1;
3374 register tree type2;
3375 register enum tree_code code1;
3376 register enum tree_code code2;
3377 register tree result_type = NULL;
3378 tree orig_op1 = op1, orig_op2 = op2;
3380 ifexp = truthvalue_conversion (default_conversion (ifexp));
3382 #if 0 /* Produces wrong result if within sizeof. */
3383 /* Don't promote the operands separately if they promote
3384 the same way. Return the unpromoted type and let the combined
3385 value get promoted if necessary. */
3387 if (TREE_TYPE (op1) == TREE_TYPE (op2)
3388 && TREE_CODE (TREE_TYPE (op1)) != ARRAY_TYPE
3389 && TREE_CODE (TREE_TYPE (op1)) != ENUMERAL_TYPE
3390 && TREE_CODE (TREE_TYPE (op1)) != FUNCTION_TYPE)
3392 if (TREE_CODE (ifexp) == INTEGER_CST)
3393 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3395 return fold (build (COND_EXPR, TREE_TYPE (op1), ifexp, op1, op2));
3397 #endif
3399 /* Promote both alternatives. */
3401 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3402 op1 = default_conversion (op1);
3403 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3404 op2 = default_conversion (op2);
3406 if (TREE_CODE (ifexp) == ERROR_MARK
3407 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3408 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3409 return error_mark_node;
3411 type1 = TREE_TYPE (op1);
3412 code1 = TREE_CODE (type1);
3413 type2 = TREE_TYPE (op2);
3414 code2 = TREE_CODE (type2);
3416 /* Quickly detect the usual case where op1 and op2 have the same type
3417 after promotion. */
3418 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3420 if (type1 == type2)
3421 result_type = type1;
3422 else
3423 result_type = TYPE_MAIN_VARIANT (type1);
3425 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE)
3426 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE))
3428 result_type = common_type (type1, type2);
3430 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3432 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3433 pedwarn ("ANSI C forbids conditional expr with only one void side");
3434 result_type = void_type_node;
3436 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3438 if (comp_target_types (type1, type2))
3439 result_type = common_type (type1, type2);
3440 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3441 && TREE_CODE (orig_op1) != NOP_EXPR)
3442 result_type = qualify_type (type2, type1);
3443 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3444 && TREE_CODE (orig_op2) != NOP_EXPR)
3445 result_type = qualify_type (type1, type2);
3446 else if (TYPE_MAIN_VARIANT (TREE_TYPE (type1)) == void_type_node)
3448 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3449 pedwarn ("ANSI C forbids conditional expr between `void *' and function pointer");
3450 result_type = qualify_type (type1, type2);
3452 else if (TYPE_MAIN_VARIANT (TREE_TYPE (type2)) == void_type_node)
3454 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3455 pedwarn ("ANSI C forbids conditional expr between `void *' and function pointer");
3456 result_type = qualify_type (type2, type1);
3458 else
3460 pedwarn ("pointer type mismatch in conditional expression");
3461 result_type = build_pointer_type (void_type_node);
3464 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3466 if (! integer_zerop (op2))
3467 pedwarn ("pointer/integer type mismatch in conditional expression");
3468 else
3470 op2 = null_pointer_node;
3471 #if 0 /* The spec seems to say this is permitted. */
3472 if (pedantic && TREE_CODE (type1) == FUNCTION_TYPE)
3473 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3474 #endif
3476 result_type = type1;
3478 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3480 if (!integer_zerop (op1))
3481 pedwarn ("pointer/integer type mismatch in conditional expression");
3482 else
3484 op1 = null_pointer_node;
3485 #if 0 /* The spec seems to say this is permitted. */
3486 if (pedantic && TREE_CODE (type2) == FUNCTION_TYPE)
3487 pedwarn ("ANSI C forbids conditional expr between 0 and function pointer");
3488 #endif
3490 result_type = type2;
3493 if (!result_type)
3495 if (flag_cond_mismatch)
3496 result_type = void_type_node;
3497 else
3499 error ("type mismatch in conditional expression");
3500 return error_mark_node;
3504 /* Merge const and volatile flags of the incoming types. */
3505 result_type
3506 = build_type_variant (result_type,
3507 TREE_READONLY (op1) || TREE_READONLY (op2),
3508 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3510 if (result_type != TREE_TYPE (op1))
3511 op1 = convert_and_check (result_type, op1);
3512 if (result_type != TREE_TYPE (op2))
3513 op2 = convert_and_check (result_type, op2);
3515 #if 0
3516 if (code1 == RECORD_TYPE || code1 == UNION_TYPE)
3518 result_type = TREE_TYPE (op1);
3519 if (TREE_CONSTANT (ifexp))
3520 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3522 if (TYPE_MODE (result_type) == BLKmode)
3524 register tree tempvar
3525 = build_decl (VAR_DECL, NULL_TREE, result_type);
3526 register tree xop1 = build_modify_expr (tempvar, op1);
3527 register tree xop2 = build_modify_expr (tempvar, op2);
3528 register tree result = fold (build (COND_EXPR, result_type,
3529 ifexp, xop1, xop2));
3531 layout_decl (tempvar, TYPE_ALIGN (result_type));
3532 /* No way to handle variable-sized objects here.
3533 I fear that the entire handling of BLKmode conditional exprs
3534 needs to be redone. */
3535 if (TREE_CODE (DECL_SIZE (tempvar)) != INTEGER_CST)
3536 abort ();
3537 DECL_RTL (tempvar)
3538 = assign_stack_local (DECL_MODE (tempvar),
3539 (TREE_INT_CST_LOW (DECL_SIZE (tempvar))
3540 + BITS_PER_UNIT - 1)
3541 / BITS_PER_UNIT,
3544 TREE_SIDE_EFFECTS (result)
3545 = TREE_SIDE_EFFECTS (ifexp) | TREE_SIDE_EFFECTS (op1)
3546 | TREE_SIDE_EFFECTS (op2);
3547 return build (COMPOUND_EXPR, result_type, result, tempvar);
3550 #endif /* 0 */
3552 if (TREE_CODE (ifexp) == INTEGER_CST)
3553 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3555 return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
3558 /* Given a list of expressions, return a compound expression
3559 that performs them all and returns the value of the last of them. */
3561 tree
3562 build_compound_expr (list)
3563 tree list;
3565 return internal_build_compound_expr (list, TRUE);
3568 static tree
3569 internal_build_compound_expr (list, first_p)
3570 tree list;
3571 int first_p;
3573 register tree rest;
3575 if (TREE_CHAIN (list) == 0)
3577 #if 0 /* If something inside inhibited lvalueness, we should not override. */
3578 /* Consider (x, y+0), which is not an lvalue since y+0 is not. */
3580 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3581 if (TREE_CODE (list) == NON_LVALUE_EXPR)
3582 list = TREE_OPERAND (list, 0);
3583 #endif
3585 /* Don't let (0, 0) be null pointer constant. */
3586 if (!first_p && integer_zerop (TREE_VALUE (list)))
3587 return non_lvalue (TREE_VALUE (list));
3588 return TREE_VALUE (list);
3591 if (TREE_CHAIN (list) != 0 && TREE_CHAIN (TREE_CHAIN (list)) == 0)
3593 /* Convert arrays to pointers when there really is a comma operator. */
3594 if (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (list)))) == ARRAY_TYPE)
3595 TREE_VALUE (TREE_CHAIN (list))
3596 = default_conversion (TREE_VALUE (TREE_CHAIN (list)));
3599 rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
3601 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
3603 /* The left-hand operand of a comma expression is like an expression
3604 statement: with -W or -Wunused, we should warn if it doesn't have
3605 any side-effects, unless it was explicitly cast to (void). */
3606 if ((extra_warnings || warn_unused)
3607 && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
3608 && TREE_TYPE (TREE_VALUE (list)) == void_type_node))
3609 warning ("left-hand operand of comma expression has no effect");
3611 /* When pedantic, a compound expression can be neither an lvalue
3612 nor an integer constant expression. */
3613 if (! pedantic)
3614 return rest;
3617 /* With -Wunused, we should also warn if the left-hand operand does have
3618 side-effects, but computes a value which is not used. For example, in
3619 `foo() + bar(), baz()' the result of the `+' operator is not used,
3620 so we should issue a warning. */
3621 else if (warn_unused)
3622 warn_if_unused_value (TREE_VALUE (list));
3624 return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
3627 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3629 tree
3630 build_c_cast (type, expr)
3631 register tree type;
3632 tree expr;
3634 register tree value = expr;
3636 if (type == error_mark_node || expr == error_mark_node)
3637 return error_mark_node;
3638 type = TYPE_MAIN_VARIANT (type);
3640 #if 0
3641 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3642 if (TREE_CODE (value) == NON_LVALUE_EXPR)
3643 value = TREE_OPERAND (value, 0);
3644 #endif
3646 if (TREE_CODE (type) == ARRAY_TYPE)
3648 error ("cast specifies array type");
3649 return error_mark_node;
3652 if (TREE_CODE (type) == FUNCTION_TYPE)
3654 error ("cast specifies function type");
3655 return error_mark_node;
3658 if (type == TREE_TYPE (value))
3660 if (pedantic)
3662 if (TREE_CODE (type) == RECORD_TYPE
3663 || TREE_CODE (type) == UNION_TYPE)
3664 pedwarn ("ANSI C forbids casting nonscalar to the same type");
3667 else if (TREE_CODE (type) == UNION_TYPE)
3669 tree field;
3670 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
3671 || TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE)
3672 value = default_conversion (value);
3674 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3675 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3676 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3677 break;
3679 if (field)
3681 char *name;
3682 tree t;
3684 if (pedantic)
3685 pedwarn ("ANSI C forbids casts to union type");
3686 if (TYPE_NAME (type) != 0)
3688 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
3689 name = IDENTIFIER_POINTER (TYPE_NAME (type));
3690 else
3691 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
3693 else
3694 name = "";
3695 t = digest_init (type, build (CONSTRUCTOR, type, NULL_TREE,
3696 build_tree_list (field, value)),
3697 0, 0);
3698 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3699 return t;
3701 error ("cast to union type from type not present in union");
3702 return error_mark_node;
3704 else
3706 tree otype, ovalue;
3708 /* If casting to void, avoid the error that would come
3709 from default_conversion in the case of a non-lvalue array. */
3710 if (type == void_type_node)
3711 return build1 (CONVERT_EXPR, type, value);
3713 /* Convert functions and arrays to pointers,
3714 but don't convert any other types. */
3715 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
3716 || TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE)
3717 value = default_conversion (value);
3718 otype = TREE_TYPE (value);
3720 /* Optionally warn about potentially worrisome casts. */
3722 if (warn_cast_qual
3723 && TREE_CODE (type) == POINTER_TYPE
3724 && TREE_CODE (otype) == POINTER_TYPE)
3726 if (TYPE_VOLATILE (TREE_TYPE (otype))
3727 && ! TYPE_VOLATILE (TREE_TYPE (type)))
3728 pedwarn ("cast discards `volatile' from pointer target type");
3729 if (TYPE_READONLY (TREE_TYPE (otype))
3730 && ! TYPE_READONLY (TREE_TYPE (type)))
3731 pedwarn ("cast discards `const' from pointer target type");
3734 /* Warn about possible alignment problems. */
3735 if (STRICT_ALIGNMENT && warn_cast_align
3736 && TREE_CODE (type) == POINTER_TYPE
3737 && TREE_CODE (otype) == POINTER_TYPE
3738 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3739 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3740 /* Don't warn about opaque types, where the actual alignment
3741 restriction is unknown. */
3742 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3743 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3744 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3745 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3746 warning ("cast increases required alignment of target type");
3748 if (TREE_CODE (type) == INTEGER_TYPE
3749 && TREE_CODE (otype) == POINTER_TYPE
3750 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3751 && !TREE_CONSTANT (value))
3752 warning ("cast from pointer to integer of different size");
3754 if (warn_bad_function_cast
3755 && TREE_CODE (value) == CALL_EXPR
3756 && TREE_CODE (type) != TREE_CODE (otype))
3757 warning ("cast does not match function type");
3759 if (TREE_CODE (type) == POINTER_TYPE
3760 && TREE_CODE (otype) == INTEGER_TYPE
3761 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3762 #if 0
3763 /* Don't warn about converting 0 to pointer,
3764 provided the 0 was explicit--not cast or made by folding. */
3765 && !(TREE_CODE (value) == INTEGER_CST && integer_zerop (value))
3766 #endif
3767 /* Don't warn about converting any constant. */
3768 && !TREE_CONSTANT (value))
3769 warning ("cast to pointer from integer of different size");
3771 ovalue = value;
3772 value = convert (type, value);
3774 /* Ignore any integer overflow caused by the cast. */
3775 if (TREE_CODE (value) == INTEGER_CST)
3777 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3778 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3782 /* Pedantically, don't ley (void *) (FOO *) 0 be a null pointer constant. */
3783 if (pedantic && TREE_CODE (value) == INTEGER_CST
3784 && TREE_CODE (expr) == INTEGER_CST
3785 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3786 value = non_lvalue (value);
3788 /* If pedantic, don't let a cast be an lvalue. */
3789 if (value == expr && pedantic)
3790 value = non_lvalue (value);
3792 return value;
3795 /* Build an assignment expression of lvalue LHS from value RHS.
3796 MODIFYCODE is the code for a binary operator that we use
3797 to combine the old value of LHS with RHS to get the new value.
3798 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3800 tree
3801 build_modify_expr (lhs, modifycode, rhs)
3802 tree lhs, rhs;
3803 enum tree_code modifycode;
3805 register tree result;
3806 tree newrhs;
3807 tree lhstype = TREE_TYPE (lhs);
3808 tree olhstype = lhstype;
3810 /* Types that aren't fully specified cannot be used in assignments. */
3811 lhs = require_complete_type (lhs);
3813 /* Avoid duplicate error messages from operands that had errors. */
3814 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3815 return error_mark_node;
3817 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3818 /* Do not use STRIP_NOPS here. We do not want an enumerator
3819 whose value is 0 to count as a null pointer constant. */
3820 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3821 rhs = TREE_OPERAND (rhs, 0);
3823 newrhs = rhs;
3825 /* Handle control structure constructs used as "lvalues". */
3827 switch (TREE_CODE (lhs))
3829 /* Handle (a, b) used as an "lvalue". */
3830 case COMPOUND_EXPR:
3831 pedantic_lvalue_warning (COMPOUND_EXPR);
3832 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
3833 modifycode, rhs);
3834 if (TREE_CODE (newrhs) == ERROR_MARK)
3835 return error_mark_node;
3836 return build (COMPOUND_EXPR, lhstype,
3837 TREE_OPERAND (lhs, 0), newrhs);
3839 /* Handle (a ? b : c) used as an "lvalue". */
3840 case COND_EXPR:
3841 pedantic_lvalue_warning (COND_EXPR);
3842 rhs = save_expr (rhs);
3844 /* Produce (a ? (b = rhs) : (c = rhs))
3845 except that the RHS goes through a save-expr
3846 so the code to compute it is only emitted once. */
3847 tree cond
3848 = build_conditional_expr (TREE_OPERAND (lhs, 0),
3849 build_modify_expr (TREE_OPERAND (lhs, 1),
3850 modifycode, rhs),
3851 build_modify_expr (TREE_OPERAND (lhs, 2),
3852 modifycode, rhs));
3853 if (TREE_CODE (cond) == ERROR_MARK)
3854 return cond;
3855 /* Make sure the code to compute the rhs comes out
3856 before the split. */
3857 return build (COMPOUND_EXPR, TREE_TYPE (lhs),
3858 /* But cast it to void to avoid an "unused" error. */
3859 convert (void_type_node, rhs), cond);
3863 /* If a binary op has been requested, combine the old LHS value with the RHS
3864 producing the value we should actually store into the LHS. */
3866 if (modifycode != NOP_EXPR)
3868 lhs = stabilize_reference (lhs);
3869 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3872 /* Handle a cast used as an "lvalue".
3873 We have already performed any binary operator using the value as cast.
3874 Now convert the result to the cast type of the lhs,
3875 and then true type of the lhs and store it there;
3876 then convert result back to the cast type to be the value
3877 of the assignment. */
3879 switch (TREE_CODE (lhs))
3881 case NOP_EXPR:
3882 case CONVERT_EXPR:
3883 case FLOAT_EXPR:
3884 case FIX_TRUNC_EXPR:
3885 case FIX_FLOOR_EXPR:
3886 case FIX_ROUND_EXPR:
3887 case FIX_CEIL_EXPR:
3888 if (TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
3889 || TREE_CODE (TREE_TYPE (newrhs)) == FUNCTION_TYPE)
3890 newrhs = default_conversion (newrhs);
3892 tree inner_lhs = TREE_OPERAND (lhs, 0);
3893 tree result;
3894 result = build_modify_expr (inner_lhs, NOP_EXPR,
3895 convert (TREE_TYPE (inner_lhs),
3896 convert (lhstype, newrhs)));
3897 if (TREE_CODE (result) == ERROR_MARK)
3898 return result;
3899 pedantic_lvalue_warning (CONVERT_EXPR);
3900 return convert (TREE_TYPE (lhs), result);
3904 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3905 Reject anything strange now. */
3907 if (!lvalue_or_else (lhs, "assignment"))
3908 return error_mark_node;
3910 /* Warn about storing in something that is `const'. */
3912 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3913 || ((TREE_CODE (lhstype) == RECORD_TYPE
3914 || TREE_CODE (lhstype) == UNION_TYPE)
3915 && C_TYPE_FIELDS_READONLY (lhstype)))
3916 readonly_warning (lhs, "assignment");
3918 /* If storing into a structure or union member,
3919 it has probably been given type `int'.
3920 Compute the type that would go with
3921 the actual amount of storage the member occupies. */
3923 if (TREE_CODE (lhs) == COMPONENT_REF
3924 && (TREE_CODE (lhstype) == INTEGER_TYPE
3925 || TREE_CODE (lhstype) == REAL_TYPE
3926 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3927 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3929 /* If storing in a field that is in actuality a short or narrower than one,
3930 we must store in the field in its actual type. */
3932 if (lhstype != TREE_TYPE (lhs))
3934 lhs = copy_node (lhs);
3935 TREE_TYPE (lhs) = lhstype;
3938 /* Convert new value to destination type. */
3940 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
3941 NULL_TREE, NULL_TREE, 0);
3942 if (TREE_CODE (newrhs) == ERROR_MARK)
3943 return error_mark_node;
3945 result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
3946 TREE_SIDE_EFFECTS (result) = 1;
3948 /* If we got the LHS in a different type for storing in,
3949 convert the result back to the nominal type of LHS
3950 so that the value we return always has the same type
3951 as the LHS argument. */
3953 if (olhstype == TREE_TYPE (result))
3954 return result;
3955 return convert_for_assignment (olhstype, result, "assignment",
3956 NULL_TREE, NULL_TREE, 0);
3959 /* Convert value RHS to type TYPE as preparation for an assignment
3960 to an lvalue of type TYPE.
3961 The real work of conversion is done by `convert'.
3962 The purpose of this function is to generate error messages
3963 for assignments that are not allowed in C.
3964 ERRTYPE is a string to use in error messages:
3965 "assignment", "return", etc. If it is null, this is parameter passing
3966 for a function call (and different error messages are output). Otherwise,
3967 it may be a name stored in the spelling stack and interpreted by
3968 get_spelling.
3970 FUNNAME is the name of the function being called,
3971 as an IDENTIFIER_NODE, or null.
3972 PARMNUM is the number of the argument, for printing in error messages. */
3974 static tree
3975 convert_for_assignment (type, rhs, errtype, fundecl, funname, parmnum)
3976 tree type, rhs;
3977 char *errtype;
3978 tree fundecl, funname;
3979 int parmnum;
3981 register enum tree_code codel = TREE_CODE (type);
3982 register tree rhstype;
3983 register enum tree_code coder;
3985 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3986 /* Do not use STRIP_NOPS here. We do not want an enumerator
3987 whose value is 0 to count as a null pointer constant. */
3988 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3989 rhs = TREE_OPERAND (rhs, 0);
3991 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
3992 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
3993 rhs = default_conversion (rhs);
3994 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
3995 rhs = decl_constant_value (rhs);
3997 rhstype = TREE_TYPE (rhs);
3998 coder = TREE_CODE (rhstype);
4000 if (coder == ERROR_MARK)
4001 return error_mark_node;
4003 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
4005 overflow_warning (rhs);
4006 /* Check for Objective-C protocols. This will issue a warning if
4007 there are protocol violations. No need to use the return value. */
4008 maybe_objc_comptypes (type, rhstype, 0);
4009 return rhs;
4012 if (coder == VOID_TYPE)
4014 error ("void value not ignored as it ought to be");
4015 return error_mark_node;
4017 /* Arithmetic types all interconvert, and enum is treated like int. */
4018 if ((codel == INTEGER_TYPE || codel == REAL_TYPE || codel == ENUMERAL_TYPE
4019 || codel == COMPLEX_TYPE)
4020 && (coder == INTEGER_TYPE || coder == REAL_TYPE || coder == ENUMERAL_TYPE
4021 || coder == COMPLEX_TYPE))
4022 return convert_and_check (type, rhs);
4024 /* Conversion to a transparent union from its member types.
4025 This applies only to function arguments. */
4026 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && ! errtype)
4028 tree memb_types;
4029 tree marginal_memb_type = 0;
4031 for (memb_types = TYPE_FIELDS (type); memb_types;
4032 memb_types = TREE_CHAIN (memb_types))
4034 tree memb_type = TREE_TYPE (memb_types);
4036 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
4037 TYPE_MAIN_VARIANT (rhstype)))
4038 break;
4040 if (TREE_CODE (memb_type) != POINTER_TYPE)
4041 continue;
4043 if (coder == POINTER_TYPE)
4045 register tree ttl = TREE_TYPE (memb_type);
4046 register tree ttr = TREE_TYPE (rhstype);
4048 /* Any non-function converts to a [const][volatile] void *
4049 and vice versa; otherwise, targets must be the same.
4050 Meanwhile, the lhs target must have all the qualifiers of
4051 the rhs. */
4052 if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4053 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4054 || comp_target_types (memb_type, rhstype))
4056 /* If this type won't generate any warnings, use it. */
4057 if ((TREE_CODE (ttr) == FUNCTION_TYPE
4058 && TREE_CODE (ttl) == FUNCTION_TYPE)
4059 ? ((! TYPE_READONLY (ttl) | TYPE_READONLY (ttr))
4060 & (! TYPE_VOLATILE (ttl) | TYPE_VOLATILE (ttr)))
4061 : ((TYPE_READONLY (ttl) | ! TYPE_READONLY (ttr))
4062 & (TYPE_VOLATILE (ttl) | ! TYPE_VOLATILE (ttr))))
4063 break;
4065 /* Keep looking for a better type, but remember this one. */
4066 if (! marginal_memb_type)
4067 marginal_memb_type = memb_type;
4071 /* Can convert integer zero to any pointer type. */
4072 if (integer_zerop (rhs)
4073 || (TREE_CODE (rhs) == NOP_EXPR
4074 && integer_zerop (TREE_OPERAND (rhs, 0))))
4076 rhs = null_pointer_node;
4077 break;
4081 if (memb_types || marginal_memb_type)
4083 if (! memb_types)
4085 /* We have only a marginally acceptable member type;
4086 it needs a warning. */
4087 register tree ttl = TREE_TYPE (marginal_memb_type);
4088 register tree ttr = TREE_TYPE (rhstype);
4090 /* Const and volatile mean something different for function
4091 types, so the usual warnings are not appropriate. */
4092 if (TREE_CODE (ttr) == FUNCTION_TYPE
4093 && TREE_CODE (ttl) == FUNCTION_TYPE)
4095 /* Because const and volatile on functions are
4096 restrictions that say the function will not do
4097 certain things, it is okay to use a const or volatile
4098 function where an ordinary one is wanted, but not
4099 vice-versa. */
4100 if (TYPE_READONLY (ttl) && ! TYPE_READONLY (ttr))
4101 warn_for_assignment ("%s makes `const *' function pointer from non-const",
4102 get_spelling (errtype), funname,
4103 parmnum);
4104 if (TYPE_VOLATILE (ttl) && ! TYPE_VOLATILE (ttr))
4105 warn_for_assignment ("%s makes `volatile *' function pointer from non-volatile",
4106 get_spelling (errtype), funname,
4107 parmnum);
4109 else
4111 if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
4112 warn_for_assignment ("%s discards `const' from pointer target type",
4113 get_spelling (errtype), funname,
4114 parmnum);
4115 if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
4116 warn_for_assignment ("%s discards `volatile' from pointer target type",
4117 get_spelling (errtype), funname,
4118 parmnum);
4122 if (pedantic && ! DECL_IN_SYSTEM_HEADER (fundecl))
4123 pedwarn ("ANSI C prohibits argument conversion to union type");
4125 return build1 (NOP_EXPR, type, rhs);
4129 /* Conversions among pointers */
4130 else if (codel == POINTER_TYPE && coder == POINTER_TYPE)
4132 register tree ttl = TREE_TYPE (type);
4133 register tree ttr = TREE_TYPE (rhstype);
4135 /* Any non-function converts to a [const][volatile] void *
4136 and vice versa; otherwise, targets must be the same.
4137 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
4138 if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4139 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4140 || comp_target_types (type, rhstype)
4141 || (unsigned_type (TYPE_MAIN_VARIANT (ttl))
4142 == unsigned_type (TYPE_MAIN_VARIANT (ttr))))
4144 if (pedantic
4145 && ((TYPE_MAIN_VARIANT (ttl) == void_type_node
4146 && TREE_CODE (ttr) == FUNCTION_TYPE)
4148 (TYPE_MAIN_VARIANT (ttr) == void_type_node
4149 /* Check TREE_CODE to catch cases like (void *) (char *) 0
4150 which are not ANSI null ptr constants. */
4151 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
4152 && TREE_CODE (ttl) == FUNCTION_TYPE)))
4153 warn_for_assignment ("ANSI forbids %s between function pointer and `void *'",
4154 get_spelling (errtype), funname, parmnum);
4155 /* Const and volatile mean something different for function types,
4156 so the usual warnings are not appropriate. */
4157 else if (TREE_CODE (ttr) != FUNCTION_TYPE
4158 && TREE_CODE (ttl) != FUNCTION_TYPE)
4160 if (! TYPE_READONLY (ttl) && TYPE_READONLY (ttr))
4161 warn_for_assignment ("%s discards `const' from pointer target type",
4162 get_spelling (errtype), funname, parmnum);
4163 else if (! TYPE_VOLATILE (ttl) && TYPE_VOLATILE (ttr))
4164 warn_for_assignment ("%s discards `volatile' from pointer target type",
4165 get_spelling (errtype), funname, parmnum);
4166 /* If this is not a case of ignoring a mismatch in signedness,
4167 no warning. */
4168 else if (TYPE_MAIN_VARIANT (ttl) == void_type_node
4169 || TYPE_MAIN_VARIANT (ttr) == void_type_node
4170 || comp_target_types (type, rhstype))
4172 /* If there is a mismatch, do warn. */
4173 else if (pedantic)
4174 warn_for_assignment ("pointer targets in %s differ in signedness",
4175 get_spelling (errtype), funname, parmnum);
4177 else if (TREE_CODE (ttl) == FUNCTION_TYPE
4178 && TREE_CODE (ttr) == FUNCTION_TYPE)
4180 /* Because const and volatile on functions are restrictions
4181 that say the function will not do certain things,
4182 it is okay to use a const or volatile function
4183 where an ordinary one is wanted, but not vice-versa. */
4184 if (TYPE_READONLY (ttl) && ! TYPE_READONLY (ttr))
4185 warn_for_assignment ("%s makes `const *' function pointer from non-const",
4186 get_spelling (errtype), funname, parmnum);
4187 if (TYPE_VOLATILE (ttl) && ! TYPE_VOLATILE (ttr))
4188 warn_for_assignment ("%s makes `volatile *' function pointer from non-volatile",
4189 get_spelling (errtype), funname, parmnum);
4192 else
4193 warn_for_assignment ("%s from incompatible pointer type",
4194 get_spelling (errtype), funname, parmnum);
4195 return convert (type, rhs);
4197 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
4199 /* An explicit constant 0 can convert to a pointer,
4200 or one that results from arithmetic, even including
4201 a cast to integer type. */
4202 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
4204 ! (TREE_CODE (rhs) == NOP_EXPR
4205 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
4206 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
4207 && integer_zerop (TREE_OPERAND (rhs, 0))))
4209 warn_for_assignment ("%s makes pointer from integer without a cast",
4210 get_spelling (errtype), funname, parmnum);
4211 return convert (type, rhs);
4213 return null_pointer_node;
4215 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
4217 warn_for_assignment ("%s makes integer from pointer without a cast",
4218 get_spelling (errtype), funname, parmnum);
4219 return convert (type, rhs);
4222 if (!errtype)
4224 if (funname)
4226 tree selector = maybe_building_objc_message_expr ();
4228 if (selector && parmnum > 2)
4229 error ("incompatible type for argument %d of `%s'",
4230 parmnum - 2, IDENTIFIER_POINTER (selector));
4231 else
4232 error ("incompatible type for argument %d of `%s'",
4233 parmnum, IDENTIFIER_POINTER (funname));
4235 else
4236 error ("incompatible type for argument %d of indirect function call",
4237 parmnum);
4239 else
4240 error ("incompatible types in %s", get_spelling (errtype));
4242 return error_mark_node;
4245 /* Print a warning using MSG.
4246 It gets OPNAME as its one parameter.
4247 If OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
4248 FUNCTION and ARGNUM are handled specially if we are building an
4249 Objective-C selector. */
4251 static void
4252 warn_for_assignment (msg, opname, function, argnum)
4253 char *msg;
4254 char *opname;
4255 tree function;
4256 int argnum;
4258 static char argstring[] = "passing arg %d of `%s'";
4259 static char argnofun[] = "passing arg %d";
4261 if (opname == 0)
4263 tree selector = maybe_building_objc_message_expr ();
4265 if (selector && argnum > 2)
4267 function = selector;
4268 argnum -= 2;
4270 if (function)
4272 /* Function name is known; supply it. */
4273 opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4274 + sizeof (argstring) + 25 /*%d*/ + 1);
4275 sprintf (opname, argstring, argnum, IDENTIFIER_POINTER (function));
4277 else
4279 /* Function name unknown (call through ptr); just give arg number. */
4280 opname = (char *) alloca (sizeof (argnofun) + 25 /*%d*/ + 1);
4281 sprintf (opname, argnofun, argnum);
4284 pedwarn (msg, opname);
4287 /* Return nonzero if VALUE is a valid constant-valued expression
4288 for use in initializing a static variable; one that can be an
4289 element of a "constant" initializer.
4291 Return null_pointer_node if the value is absolute;
4292 if it is relocatable, return the variable that determines the relocation.
4293 We assume that VALUE has been folded as much as possible;
4294 therefore, we do not need to check for such things as
4295 arithmetic-combinations of integers. */
4297 tree
4298 initializer_constant_valid_p (value, endtype)
4299 tree value;
4300 tree endtype;
4302 switch (TREE_CODE (value))
4304 case CONSTRUCTOR:
4305 if ((TREE_CODE (TREE_TYPE (value)) == UNION_TYPE
4306 || TREE_CODE (TREE_TYPE (value)) == RECORD_TYPE)
4307 && TREE_CONSTANT (value)
4308 && CONSTRUCTOR_ELTS (value))
4309 return
4310 initializer_constant_valid_p (TREE_VALUE (CONSTRUCTOR_ELTS (value)),
4311 endtype);
4313 return TREE_STATIC (value) ? null_pointer_node : 0;
4315 case INTEGER_CST:
4316 case REAL_CST:
4317 case STRING_CST:
4318 case COMPLEX_CST:
4319 return null_pointer_node;
4321 case ADDR_EXPR:
4322 return TREE_OPERAND (value, 0);
4324 case NON_LVALUE_EXPR:
4325 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4327 case CONVERT_EXPR:
4328 case NOP_EXPR:
4329 /* Allow conversions between pointer types. */
4330 if (TREE_CODE (TREE_TYPE (value)) == POINTER_TYPE
4331 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == POINTER_TYPE)
4332 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4334 /* Allow conversions between real types. */
4335 if (TREE_CODE (TREE_TYPE (value)) == REAL_TYPE
4336 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == REAL_TYPE)
4337 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4339 /* Allow length-preserving conversions between integer types. */
4340 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4341 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE
4342 && (TYPE_PRECISION (TREE_TYPE (value))
4343 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4344 return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype);
4346 /* Allow conversions between other integer types only if
4347 explicit value. */
4348 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4349 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE)
4351 tree inner = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4352 endtype);
4353 if (inner == null_pointer_node)
4354 return null_pointer_node;
4355 return 0;
4358 /* Allow (int) &foo provided int is as wide as a pointer. */
4359 if (TREE_CODE (TREE_TYPE (value)) == INTEGER_TYPE
4360 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == POINTER_TYPE
4361 && (TYPE_PRECISION (TREE_TYPE (value))
4362 >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4363 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4364 endtype);
4366 /* Likewise conversions from int to pointers. */
4367 if (TREE_CODE (TREE_TYPE (value)) == POINTER_TYPE
4368 && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE
4369 && (TYPE_PRECISION (TREE_TYPE (value))
4370 <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))))
4371 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4372 endtype);
4374 /* Allow conversions to union types if the value inside is okay. */
4375 if (TREE_CODE (TREE_TYPE (value)) == UNION_TYPE)
4376 return initializer_constant_valid_p (TREE_OPERAND (value, 0),
4377 endtype);
4378 return 0;
4380 case PLUS_EXPR:
4381 if (TREE_CODE (endtype) == INTEGER_TYPE
4382 && TYPE_PRECISION (endtype) < POINTER_SIZE)
4383 return 0;
4385 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4386 endtype);
4387 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4388 endtype);
4389 /* If either term is absolute, use the other terms relocation. */
4390 if (valid0 == null_pointer_node)
4391 return valid1;
4392 if (valid1 == null_pointer_node)
4393 return valid0;
4394 return 0;
4397 case MINUS_EXPR:
4398 if (TREE_CODE (endtype) == INTEGER_TYPE
4399 && TYPE_PRECISION (endtype) < POINTER_SIZE)
4400 return 0;
4402 tree valid0 = initializer_constant_valid_p (TREE_OPERAND (value, 0),
4403 endtype);
4404 tree valid1 = initializer_constant_valid_p (TREE_OPERAND (value, 1),
4405 endtype);
4406 /* Win if second argument is absolute. */
4407 if (valid1 == null_pointer_node)
4408 return valid0;
4409 /* Win if both arguments have the same relocation.
4410 Then the value is absolute. */
4411 if (valid0 == valid1)
4412 return null_pointer_node;
4413 return 0;
4417 return 0;
4420 /* If VALUE is a compound expr all of whose expressions are constant, then
4421 return its value. Otherwise, return error_mark_node.
4423 This is for handling COMPOUND_EXPRs as initializer elements
4424 which is allowed with a warning when -pedantic is specified. */
4426 static tree
4427 valid_compound_expr_initializer (value, endtype)
4428 tree value;
4429 tree endtype;
4431 if (TREE_CODE (value) == COMPOUND_EXPR)
4433 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4434 == error_mark_node)
4435 return error_mark_node;
4436 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4437 endtype);
4439 else if (! TREE_CONSTANT (value)
4440 && ! initializer_constant_valid_p (value, endtype))
4441 return error_mark_node;
4442 else
4443 return value;
4446 /* Perform appropriate conversions on the initial value of a variable,
4447 store it in the declaration DECL,
4448 and print any error messages that are appropriate.
4449 If the init is invalid, store an ERROR_MARK. */
4451 void
4452 store_init_value (decl, init)
4453 tree decl, init;
4455 register tree value, type;
4457 /* If variable's type was invalidly declared, just ignore it. */
4459 type = TREE_TYPE (decl);
4460 if (TREE_CODE (type) == ERROR_MARK)
4461 return;
4463 /* Digest the specified initializer into an expression. */
4465 value = digest_init (type, init, TREE_STATIC (decl),
4466 TREE_STATIC (decl) || pedantic);
4468 /* Store the expression if valid; else report error. */
4470 #if 0
4471 /* Note that this is the only place we can detect the error
4472 in a case such as struct foo bar = (struct foo) { x, y };
4473 where there is one initial value which is a constructor expression. */
4474 if (value == error_mark_node)
4476 else if (TREE_STATIC (decl) && ! TREE_CONSTANT (value))
4478 error ("initializer for static variable is not constant");
4479 value = error_mark_node;
4481 else if (TREE_STATIC (decl)
4482 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
4484 error ("initializer for static variable uses complicated arithmetic");
4485 value = error_mark_node;
4487 else
4489 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
4491 if (! TREE_CONSTANT (value))
4492 pedwarn ("aggregate initializer is not constant");
4493 else if (! TREE_STATIC (value))
4494 pedwarn ("aggregate initializer uses complicated arithmetic");
4497 #endif
4499 DECL_INITIAL (decl) = value;
4501 /* ANSI wants warnings about out-of-range constant initializers. */
4502 STRIP_TYPE_NOPS (value);
4503 constant_expression_warning (value);
4506 /* Methods for storing and printing names for error messages. */
4508 /* Implement a spelling stack that allows components of a name to be pushed
4509 and popped. Each element on the stack is this structure. */
4511 struct spelling
4513 int kind;
4514 union
4516 int i;
4517 char *s;
4518 } u;
4521 #define SPELLING_STRING 1
4522 #define SPELLING_MEMBER 2
4523 #define SPELLING_BOUNDS 3
4525 static struct spelling *spelling; /* Next stack element (unused). */
4526 static struct spelling *spelling_base; /* Spelling stack base. */
4527 static int spelling_size; /* Size of the spelling stack. */
4529 /* Macros to save and restore the spelling stack around push_... functions.
4530 Alternative to SAVE_SPELLING_STACK. */
4532 #define SPELLING_DEPTH() (spelling - spelling_base)
4533 #define RESTORE_SPELLING_DEPTH(depth) (spelling = spelling_base + depth)
4535 /* Save and restore the spelling stack around arbitrary C code. */
4537 #define SAVE_SPELLING_DEPTH(code) \
4539 int __depth = SPELLING_DEPTH (); \
4540 code; \
4541 RESTORE_SPELLING_DEPTH (__depth); \
4544 /* Push an element on the spelling stack with type KIND and assign VALUE
4545 to MEMBER. */
4547 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4549 int depth = SPELLING_DEPTH (); \
4551 if (depth >= spelling_size) \
4553 spelling_size += 10; \
4554 if (spelling_base == 0) \
4555 spelling_base \
4556 = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \
4557 else \
4558 spelling_base \
4559 = (struct spelling *) xrealloc (spelling_base, \
4560 spelling_size * sizeof (struct spelling)); \
4561 RESTORE_SPELLING_DEPTH (depth); \
4564 spelling->kind = (KIND); \
4565 spelling->MEMBER = (VALUE); \
4566 spelling++; \
4569 /* Push STRING on the stack. Printed literally. */
4571 static void
4572 push_string (string)
4573 char *string;
4575 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4578 /* Push a member name on the stack. Printed as '.' STRING. */
4580 static void
4581 push_member_name (decl)
4582 tree decl;
4585 char *string
4586 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4587 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4590 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4592 static void
4593 push_array_bounds (bounds)
4594 int bounds;
4596 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4599 /* Compute the maximum size in bytes of the printed spelling. */
4601 static int
4602 spelling_length ()
4604 register int size = 0;
4605 register struct spelling *p;
4607 for (p = spelling_base; p < spelling; p++)
4609 if (p->kind == SPELLING_BOUNDS)
4610 size += 25;
4611 else
4612 size += strlen (p->u.s) + 1;
4615 return size;
4618 /* Print the spelling to BUFFER and return it. */
4620 static char *
4621 print_spelling (buffer)
4622 register char *buffer;
4624 register char *d = buffer;
4625 register char *s;
4626 register struct spelling *p;
4628 for (p = spelling_base; p < spelling; p++)
4629 if (p->kind == SPELLING_BOUNDS)
4631 sprintf (d, "[%d]", p->u.i);
4632 d += strlen (d);
4634 else
4636 if (p->kind == SPELLING_MEMBER)
4637 *d++ = '.';
4638 for (s = p->u.s; *d = *s++; d++)
4641 *d++ = '\0';
4642 return buffer;
4645 /* Provide a means to pass component names derived from the spelling stack. */
4647 char initialization_message;
4649 /* Interpret the spelling of the given ERRTYPE message. */
4651 static char *
4652 get_spelling (errtype)
4653 char *errtype;
4655 static char *buffer;
4656 static int size = -1;
4658 if (errtype == &initialization_message)
4660 /* Avoid counting chars */
4661 static char message[] = "initialization of `%s'";
4662 register int needed = sizeof (message) + spelling_length () + 1;
4663 char *temp;
4665 if (size < 0)
4666 buffer = (char *) xmalloc (size = needed);
4667 if (needed > size)
4668 buffer = (char *) xrealloc (buffer, size = needed);
4670 temp = (char *) alloca (needed);
4671 sprintf (buffer, message, print_spelling (temp));
4672 return buffer;
4675 return errtype;
4678 /* Issue an error message for a bad initializer component.
4679 FORMAT describes the message. OFWHAT is the name for the component.
4680 LOCAL is a format string for formatting the insertion of the name
4681 into the message.
4683 If OFWHAT is null, the component name is stored on the spelling stack.
4684 If the component name is a null string, then LOCAL is omitted entirely. */
4686 void
4687 error_init (format, local, ofwhat)
4688 char *format, *local, *ofwhat;
4690 char *buffer;
4692 if (ofwhat == 0)
4693 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4694 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4696 if (*ofwhat)
4697 sprintf (buffer, local, ofwhat);
4698 else
4699 buffer[0] = 0;
4701 error (format, buffer);
4704 /* Issue a pedantic warning for a bad initializer component.
4705 FORMAT describes the message. OFWHAT is the name for the component.
4706 LOCAL is a format string for formatting the insertion of the name
4707 into the message.
4709 If OFWHAT is null, the component name is stored on the spelling stack.
4710 If the component name is a null string, then LOCAL is omitted entirely. */
4712 void
4713 pedwarn_init (format, local, ofwhat)
4714 char *format, *local, *ofwhat;
4716 char *buffer;
4718 if (ofwhat == 0)
4719 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4720 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4722 if (*ofwhat)
4723 sprintf (buffer, local, ofwhat);
4724 else
4725 buffer[0] = 0;
4727 pedwarn (format, buffer);
4730 /* Issue a warning for a bad initializer component.
4731 FORMAT describes the message. OFWHAT is the name for the component.
4732 LOCAL is a format string for formatting the insertion of the name
4733 into the message.
4735 If OFWHAT is null, the component name is stored on the spelling stack.
4736 If the component name is a null string, then LOCAL is omitted entirely. */
4738 static void
4739 warning_init (format, local, ofwhat)
4740 char *format, *local, *ofwhat;
4742 char *buffer;
4744 if (ofwhat == 0)
4745 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4746 buffer = (char *) alloca (strlen (local) + strlen (ofwhat) + 2);
4748 if (*ofwhat)
4749 sprintf (buffer, local, ofwhat);
4750 else
4751 buffer[0] = 0;
4753 warning (format, buffer);
4756 /* Digest the parser output INIT as an initializer for type TYPE.
4757 Return a C expression of type TYPE to represent the initial value.
4759 The arguments REQUIRE_CONSTANT and CONSTRUCTOR_CONSTANT request errors
4760 if non-constant initializers or elements are seen. CONSTRUCTOR_CONSTANT
4761 applies only to elements of constructors. */
4763 static tree
4764 digest_init (type, init, require_constant, constructor_constant)
4765 tree type, init;
4766 int require_constant, constructor_constant;
4768 enum tree_code code = TREE_CODE (type);
4769 tree inside_init = init;
4771 if (init == error_mark_node)
4772 return init;
4774 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4775 /* Do not use STRIP_NOPS here. We do not want an enumerator
4776 whose value is 0 to count as a null pointer constant. */
4777 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4778 inside_init = TREE_OPERAND (init, 0);
4780 /* Initialization of an array of chars from a string constant
4781 optionally enclosed in braces. */
4783 if (code == ARRAY_TYPE)
4785 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4786 if ((typ1 == char_type_node
4787 || typ1 == signed_char_type_node
4788 || typ1 == unsigned_char_type_node
4789 || typ1 == unsigned_wchar_type_node
4790 || typ1 == signed_wchar_type_node)
4791 && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
4793 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4794 TYPE_MAIN_VARIANT (type)))
4795 return inside_init;
4797 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4798 != char_type_node)
4799 && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
4801 error_init ("char-array%s initialized from wide string",
4802 " `%s'", NULL);
4803 return error_mark_node;
4805 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4806 == char_type_node)
4807 && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
4809 error_init ("int-array%s initialized from non-wide string",
4810 " `%s'", NULL);
4811 return error_mark_node;
4814 TREE_TYPE (inside_init) = type;
4815 if (TYPE_DOMAIN (type) != 0
4816 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
4818 register int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
4819 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
4820 /* Subtract 1 (or sizeof (wchar_t))
4821 because it's ok to ignore the terminating null char
4822 that is counted in the length of the constant. */
4823 if (size < TREE_STRING_LENGTH (inside_init)
4824 - (TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node)
4825 ? TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT
4826 : 1))
4827 pedwarn_init (
4828 "initializer-string for array of chars%s is too long",
4829 " `%s'", NULL);
4831 return inside_init;
4835 /* Any type can be initialized
4836 from an expression of the same type, optionally with braces. */
4838 if (inside_init && TREE_TYPE (inside_init) != 0
4839 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4840 TYPE_MAIN_VARIANT (type))
4841 || (code == ARRAY_TYPE
4842 && comptypes (TREE_TYPE (inside_init), type))
4843 || (code == POINTER_TYPE
4844 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4845 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)
4846 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4847 TREE_TYPE (type)))))
4849 if (code == POINTER_TYPE
4850 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4851 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE))
4852 inside_init = default_conversion (inside_init);
4853 else if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4854 && TREE_CODE (inside_init) != CONSTRUCTOR)
4856 error_init ("array%s initialized from non-constant array expression",
4857 " `%s'", NULL);
4858 return error_mark_node;
4861 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4862 inside_init = decl_constant_value (inside_init);
4864 /* Compound expressions can only occur here if -pedantic or
4865 -pedantic-errors is specified. In the later case, we always want
4866 an error. In the former case, we simply want a warning. */
4867 if (require_constant && pedantic
4868 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4870 inside_init
4871 = valid_compound_expr_initializer (inside_init,
4872 TREE_TYPE (inside_init));
4873 if (inside_init == error_mark_node)
4874 error_init ("initializer element%s is not constant",
4875 " for `%s'", NULL);
4876 else
4877 pedwarn_init ("initializer element%s is not constant",
4878 " for `%s'", NULL);
4879 if (flag_pedantic_errors)
4880 inside_init = error_mark_node;
4882 else if (require_constant && ! TREE_CONSTANT (inside_init))
4884 error_init ("initializer element%s is not constant",
4885 " for `%s'", NULL);
4886 inside_init = error_mark_node;
4888 else if (require_constant
4889 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4891 error_init ("initializer element%s is not computable at load time",
4892 " for `%s'", NULL);
4893 inside_init = error_mark_node;
4896 return inside_init;
4899 /* Handle scalar types, including conversions. */
4901 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4902 || code == ENUMERAL_TYPE || code == COMPLEX_TYPE)
4904 /* Note that convert_for_assignment calls default_conversion
4905 for arrays and functions. We must not call it in the
4906 case where inside_init is a null pointer constant. */
4907 inside_init
4908 = convert_for_assignment (type, init, "initialization",
4909 NULL_TREE, NULL_TREE, 0);
4911 if (require_constant && ! TREE_CONSTANT (inside_init))
4913 error_init ("initializer element%s is not constant",
4914 " for `%s'", NULL);
4915 inside_init = error_mark_node;
4917 else if (require_constant
4918 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4920 error_init ("initializer element%s is not computable at load time",
4921 " for `%s'", NULL);
4922 inside_init = error_mark_node;
4925 return inside_init;
4928 /* Come here only for records and arrays. */
4930 if (TYPE_SIZE (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4932 error_init ("variable-sized object%s may not be initialized",
4933 " `%s'", NULL);
4934 return error_mark_node;
4937 /* Traditionally, you can write struct foo x = 0;
4938 and it initializes the first element of x to 0. */
4939 if (flag_traditional)
4941 tree top = 0, prev = 0, otype = type;
4942 while (TREE_CODE (type) == RECORD_TYPE
4943 || TREE_CODE (type) == ARRAY_TYPE
4944 || TREE_CODE (type) == QUAL_UNION_TYPE
4945 || TREE_CODE (type) == UNION_TYPE)
4947 tree temp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
4948 if (prev == 0)
4949 top = temp;
4950 else
4951 TREE_OPERAND (prev, 1) = build_tree_list (NULL_TREE, temp);
4952 prev = temp;
4953 if (TREE_CODE (type) == ARRAY_TYPE)
4954 type = TREE_TYPE (type);
4955 else if (TYPE_FIELDS (type))
4956 type = TREE_TYPE (TYPE_FIELDS (type));
4957 else
4959 error_init ("invalid initializer%s", " for `%s'", NULL);
4960 return error_mark_node;
4964 if (otype != type)
4966 TREE_OPERAND (prev, 1)
4967 = build_tree_list (NULL_TREE,
4968 digest_init (type, init, require_constant,
4969 constructor_constant));
4970 return top;
4972 else
4973 return error_mark_node;
4975 error_init ("invalid initializer%s", " for `%s'", NULL);
4976 return error_mark_node;
4979 /* Handle initializers that use braces. */
4981 /* Type of object we are accumulating a constructor for.
4982 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4983 static tree constructor_type;
4985 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4986 left to fill. */
4987 static tree constructor_fields;
4989 /* For an ARRAY_TYPE, this is the specified index
4990 at which to store the next element we get.
4991 This is a special INTEGER_CST node that we modify in place. */
4992 static tree constructor_index;
4994 /* For an ARRAY_TYPE, this is the end index of the range
4995 to initialize with the next element, or NULL in the ordinary case
4996 where the element is used just once. */
4997 static tree constructor_range_end;
4999 /* For an ARRAY_TYPE, this is the maximum index. */
5000 static tree constructor_max_index;
5002 /* For a RECORD_TYPE, this is the first field not yet written out. */
5003 static tree constructor_unfilled_fields;
5005 /* For an ARRAY_TYPE, this is the index of the first element
5006 not yet written out.
5007 This is a special INTEGER_CST node that we modify in place. */
5008 static tree constructor_unfilled_index;
5010 /* In a RECORD_TYPE, the byte index of the next consecutive field.
5011 This is so we can generate gaps between fields, when appropriate.
5012 This is a special INTEGER_CST node that we modify in place. */
5013 static tree constructor_bit_index;
5015 /* If we are saving up the elements rather than allocating them,
5016 this is the list of elements so far (in reverse order,
5017 most recent first). */
5018 static tree constructor_elements;
5020 /* 1 if so far this constructor's elements are all compile-time constants. */
5021 static int constructor_constant;
5023 /* 1 if so far this constructor's elements are all valid address constants. */
5024 static int constructor_simple;
5026 /* 1 if this constructor is erroneous so far. */
5027 static int constructor_erroneous;
5029 /* 1 if have called defer_addressed_constants. */
5030 static int constructor_subconstants_deferred;
5032 /* List of pending elements at this constructor level.
5033 These are elements encountered out of order
5034 which belong at places we haven't reached yet in actually
5035 writing the output. */
5036 static tree constructor_pending_elts;
5038 /* The SPELLING_DEPTH of this constructor. */
5039 static int constructor_depth;
5041 /* 0 if implicitly pushing constructor levels is allowed. */
5042 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
5044 /* 1 if this constructor level was entered implicitly. */
5045 static int constructor_implicit;
5047 static int require_constant_value;
5048 static int require_constant_elements;
5050 /* 1 if it is ok to output this constructor as we read it.
5051 0 means must accumulate a CONSTRUCTOR expression. */
5052 static int constructor_incremental;
5054 /* DECL node for which an initializer is being read.
5055 0 means we are reading a constructor expression
5056 such as (struct foo) {...}. */
5057 static tree constructor_decl;
5059 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
5060 static char *constructor_asmspec;
5062 /* Nonzero if this is an initializer for a top-level decl. */
5063 static int constructor_top_level;
5065 /* When we finish reading a constructor expression
5066 (constructor_decl is 0), the CONSTRUCTOR goes here. */
5067 static tree constructor_result;
5069 /* This stack has a level for each implicit or explicit level of
5070 structuring in the initializer, including the outermost one. It
5071 saves the values of most of the variables above. */
5073 struct constructor_stack
5075 struct constructor_stack *next;
5076 tree type;
5077 tree fields;
5078 tree index;
5079 tree range_end;
5080 tree max_index;
5081 tree unfilled_index;
5082 tree unfilled_fields;
5083 tree bit_index;
5084 tree elements;
5085 int offset;
5086 tree pending_elts;
5087 int depth;
5088 /* If nonzero, this value should replace the entire
5089 constructor at this level. */
5090 tree replacement_value;
5091 char constant;
5092 char simple;
5093 char implicit;
5094 char incremental;
5095 char erroneous;
5096 char outer;
5099 struct constructor_stack *constructor_stack;
5101 /* This stack records separate initializers that are nested.
5102 Nested initializers can't happen in ANSI C, but GNU C allows them
5103 in cases like { ... (struct foo) { ... } ... }. */
5105 struct initializer_stack
5107 struct initializer_stack *next;
5108 tree decl;
5109 char *asmspec;
5110 struct constructor_stack *constructor_stack;
5111 tree elements;
5112 struct spelling *spelling;
5113 struct spelling *spelling_base;
5114 int spelling_size;
5115 char top_level;
5116 char incremental;
5117 char require_constant_value;
5118 char require_constant_elements;
5119 char deferred;
5122 struct initializer_stack *initializer_stack;
5124 /* Prepare to parse and output the initializer for variable DECL. */
5126 void
5127 start_init (decl, asmspec_tree, top_level)
5128 tree decl;
5129 tree asmspec_tree;
5130 int top_level;
5132 char *locus;
5133 struct initializer_stack *p
5134 = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack));
5135 char *asmspec = 0;
5137 if (asmspec_tree)
5138 asmspec = TREE_STRING_POINTER (asmspec_tree);
5140 p->decl = constructor_decl;
5141 p->asmspec = constructor_asmspec;
5142 p->incremental = constructor_incremental;
5143 p->require_constant_value = require_constant_value;
5144 p->require_constant_elements = require_constant_elements;
5145 p->constructor_stack = constructor_stack;
5146 p->elements = constructor_elements;
5147 p->spelling = spelling;
5148 p->spelling_base = spelling_base;
5149 p->spelling_size = spelling_size;
5150 p->deferred = constructor_subconstants_deferred;
5151 p->top_level = constructor_top_level;
5152 p->next = initializer_stack;
5153 initializer_stack = p;
5155 constructor_decl = decl;
5156 constructor_incremental = top_level;
5157 constructor_asmspec = asmspec;
5158 constructor_subconstants_deferred = 0;
5159 constructor_top_level = top_level;
5161 if (decl != 0)
5163 require_constant_value = TREE_STATIC (decl);
5164 require_constant_elements
5165 = ((TREE_STATIC (decl) || pedantic)
5166 /* For a scalar, you can always use any value to initialize,
5167 even within braces. */
5168 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
5169 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5170 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
5171 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
5172 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
5173 constructor_incremental |= TREE_STATIC (decl);
5175 else
5177 require_constant_value = 0;
5178 require_constant_elements = 0;
5179 locus = "(anonymous)";
5182 constructor_stack = 0;
5184 missing_braces_mentioned = 0;
5186 spelling_base = 0;
5187 spelling_size = 0;
5188 RESTORE_SPELLING_DEPTH (0);
5190 if (locus)
5191 push_string (locus);
5194 void
5195 finish_init ()
5197 struct initializer_stack *p = initializer_stack;
5199 /* Output subconstants (string constants, usually)
5200 that were referenced within this initializer and saved up.
5201 Must do this if and only if we called defer_addressed_constants. */
5202 if (constructor_subconstants_deferred)
5203 output_deferred_addressed_constants ();
5205 /* Free the whole constructor stack of this initializer. */
5206 while (constructor_stack)
5208 struct constructor_stack *q = constructor_stack;
5209 constructor_stack = q->next;
5210 free (q);
5213 /* Pop back to the data of the outer initializer (if any). */
5214 constructor_decl = p->decl;
5215 constructor_asmspec = p->asmspec;
5216 constructor_incremental = p->incremental;
5217 require_constant_value = p->require_constant_value;
5218 require_constant_elements = p->require_constant_elements;
5219 constructor_stack = p->constructor_stack;
5220 constructor_elements = p->elements;
5221 spelling = p->spelling;
5222 spelling_base = p->spelling_base;
5223 spelling_size = p->spelling_size;
5224 constructor_subconstants_deferred = p->deferred;
5225 constructor_top_level = p->top_level;
5226 initializer_stack = p->next;
5227 free (p);
5230 /* Call here when we see the initializer is surrounded by braces.
5231 This is instead of a call to push_init_level;
5232 it is matched by a call to pop_init_level.
5234 TYPE is the type to initialize, for a constructor expression.
5235 For an initializer for a decl, TYPE is zero. */
5237 void
5238 really_start_incremental_init (type)
5239 tree type;
5241 struct constructor_stack *p
5242 = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5244 if (type == 0)
5245 type = TREE_TYPE (constructor_decl);
5247 /* Turn off constructor_incremental if type is a struct with bitfields.
5248 Do this before the first push, so that the corrected value
5249 is available in finish_init. */
5250 check_init_type_bitfields (type);
5252 p->type = constructor_type;
5253 p->fields = constructor_fields;
5254 p->index = constructor_index;
5255 p->range_end = constructor_range_end;
5256 p->max_index = constructor_max_index;
5257 p->unfilled_index = constructor_unfilled_index;
5258 p->unfilled_fields = constructor_unfilled_fields;
5259 p->bit_index = constructor_bit_index;
5260 p->elements = constructor_elements;
5261 p->constant = constructor_constant;
5262 p->simple = constructor_simple;
5263 p->erroneous = constructor_erroneous;
5264 p->pending_elts = constructor_pending_elts;
5265 p->depth = constructor_depth;
5266 p->replacement_value = 0;
5267 p->implicit = 0;
5268 p->incremental = constructor_incremental;
5269 p->outer = 0;
5270 p->next = 0;
5271 constructor_stack = p;
5273 constructor_constant = 1;
5274 constructor_simple = 1;
5275 constructor_depth = SPELLING_DEPTH ();
5276 constructor_elements = 0;
5277 constructor_pending_elts = 0;
5278 constructor_type = type;
5280 if (TREE_CODE (constructor_type) == RECORD_TYPE
5281 || TREE_CODE (constructor_type) == UNION_TYPE)
5283 constructor_fields = TYPE_FIELDS (constructor_type);
5284 /* Skip any nameless bit fields at the beginning. */
5285 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5286 && DECL_NAME (constructor_fields) == 0)
5287 constructor_fields = TREE_CHAIN (constructor_fields);
5288 constructor_unfilled_fields = constructor_fields;
5289 constructor_bit_index = copy_node (integer_zero_node);
5291 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5293 constructor_range_end = 0;
5294 if (TYPE_DOMAIN (constructor_type))
5296 constructor_max_index
5297 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5298 constructor_index
5299 = copy_node (TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5301 else
5302 constructor_index = copy_node (integer_zero_node);
5303 constructor_unfilled_index = copy_node (constructor_index);
5305 else
5307 /* Handle the case of int x = {5}; */
5308 constructor_fields = constructor_type;
5309 constructor_unfilled_fields = constructor_type;
5312 if (constructor_incremental)
5314 int momentary = suspend_momentary ();
5315 push_obstacks_nochange ();
5316 if (TREE_PERMANENT (constructor_decl))
5317 end_temporary_allocation ();
5318 make_decl_rtl (constructor_decl, constructor_asmspec,
5319 constructor_top_level);
5320 assemble_variable (constructor_decl, constructor_top_level, 0, 1);
5321 pop_obstacks ();
5322 resume_momentary (momentary);
5325 if (constructor_incremental)
5327 defer_addressed_constants ();
5328 constructor_subconstants_deferred = 1;
5332 /* Push down into a subobject, for initialization.
5333 If this is for an explicit set of braces, IMPLICIT is 0.
5334 If it is because the next element belongs at a lower level,
5335 IMPLICIT is 1. */
5337 void
5338 push_init_level (implicit)
5339 int implicit;
5341 struct constructor_stack *p;
5343 /* If we've exhausted any levels that didn't have braces,
5344 pop them now. */
5345 while (constructor_stack->implicit)
5347 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5348 || TREE_CODE (constructor_type) == UNION_TYPE)
5349 && constructor_fields == 0)
5350 process_init_element (pop_init_level (1));
5351 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5352 && tree_int_cst_lt (constructor_max_index, constructor_index))
5353 process_init_element (pop_init_level (1));
5354 else
5355 break;
5358 /* Structure elements may require alignment. Do this now if necessary
5359 for the subaggregate, and if it comes next in sequence. Don't do
5360 this for subaggregates that will go on the pending list. */
5361 if (constructor_incremental && constructor_type != 0
5362 && TREE_CODE (constructor_type) == RECORD_TYPE && constructor_fields
5363 && constructor_fields == constructor_unfilled_fields)
5365 /* Advance to offset of this element. */
5366 if (! tree_int_cst_equal (constructor_bit_index,
5367 DECL_FIELD_BITPOS (constructor_fields)))
5369 int next = (TREE_INT_CST_LOW
5370 (DECL_FIELD_BITPOS (constructor_fields))
5371 / BITS_PER_UNIT);
5372 int here = (TREE_INT_CST_LOW (constructor_bit_index)
5373 / BITS_PER_UNIT);
5375 assemble_zeros (next - here);
5377 /* Indicate that we have now filled the structure up to the current
5378 field. */
5379 constructor_unfilled_fields = constructor_fields;
5382 p = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5383 p->type = constructor_type;
5384 p->fields = constructor_fields;
5385 p->index = constructor_index;
5386 p->range_end = constructor_range_end;
5387 p->max_index = constructor_max_index;
5388 p->unfilled_index = constructor_unfilled_index;
5389 p->unfilled_fields = constructor_unfilled_fields;
5390 p->bit_index = constructor_bit_index;
5391 p->elements = constructor_elements;
5392 p->constant = constructor_constant;
5393 p->simple = constructor_simple;
5394 p->erroneous = constructor_erroneous;
5395 p->pending_elts = constructor_pending_elts;
5396 p->depth = constructor_depth;
5397 p->replacement_value = 0;
5398 p->implicit = implicit;
5399 p->incremental = constructor_incremental;
5400 p->outer = 0;
5401 p->next = constructor_stack;
5402 constructor_stack = p;
5404 constructor_constant = 1;
5405 constructor_simple = 1;
5406 constructor_depth = SPELLING_DEPTH ();
5407 constructor_elements = 0;
5408 constructor_pending_elts = 0;
5410 /* Don't die if an entire brace-pair level is superfluous
5411 in the containing level. */
5412 if (constructor_type == 0)
5414 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5415 || TREE_CODE (constructor_type) == UNION_TYPE)
5417 /* Don't die if there are extra init elts at the end. */
5418 if (constructor_fields == 0)
5419 constructor_type = 0;
5420 else
5422 constructor_type = TREE_TYPE (constructor_fields);
5423 push_member_name (constructor_fields);
5424 constructor_depth++;
5425 if (constructor_fields != constructor_unfilled_fields)
5426 constructor_incremental = 0;
5429 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5431 constructor_type = TREE_TYPE (constructor_type);
5432 push_array_bounds (TREE_INT_CST_LOW (constructor_index));
5433 constructor_depth++;
5434 if (! tree_int_cst_equal (constructor_index, constructor_unfilled_index)
5435 || constructor_range_end != 0)
5436 constructor_incremental = 0;
5439 if (constructor_type == 0)
5441 error_init ("extra brace group at end of initializer%s",
5442 " for `%s'", NULL);
5443 constructor_fields = 0;
5444 constructor_unfilled_fields = 0;
5445 return;
5448 /* Turn off constructor_incremental if type is a struct with bitfields. */
5449 check_init_type_bitfields (constructor_type);
5451 if (implicit && warn_missing_braces && !missing_braces_mentioned)
5453 missing_braces_mentioned = 1;
5454 warning_init ("missing braces around initializer%s", " for `%s'", NULL);
5457 if (TREE_CODE (constructor_type) == RECORD_TYPE
5458 || TREE_CODE (constructor_type) == UNION_TYPE)
5460 constructor_fields = TYPE_FIELDS (constructor_type);
5461 /* Skip any nameless bit fields at the beginning. */
5462 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5463 && DECL_NAME (constructor_fields) == 0)
5464 constructor_fields = TREE_CHAIN (constructor_fields);
5465 constructor_unfilled_fields = constructor_fields;
5466 constructor_bit_index = copy_node (integer_zero_node);
5468 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5470 constructor_range_end = 0;
5471 if (TYPE_DOMAIN (constructor_type))
5473 constructor_max_index
5474 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5475 constructor_index
5476 = copy_node (TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5478 else
5479 constructor_index = copy_node (integer_zero_node);
5480 constructor_unfilled_index = copy_node (constructor_index);
5482 else
5484 warning_init ("braces around scalar initializer%s", " for `%s'", NULL);
5485 constructor_fields = constructor_type;
5486 constructor_unfilled_fields = constructor_type;
5490 /* Don't read a struct incrementally if it has any bitfields,
5491 because the incremental reading code doesn't know how to
5492 handle bitfields yet. */
5494 static void
5495 check_init_type_bitfields (type)
5496 tree type;
5498 if (TREE_CODE (type) == RECORD_TYPE)
5500 tree tail;
5501 for (tail = TYPE_FIELDS (type); tail;
5502 tail = TREE_CHAIN (tail))
5504 if (DECL_C_BIT_FIELD (tail)
5505 /* This catches cases like `int foo : 8;'. */
5506 || DECL_MODE (tail) != TYPE_MODE (TREE_TYPE (tail)))
5508 constructor_incremental = 0;
5509 break;
5512 check_init_type_bitfields (TREE_TYPE (tail));
5516 else if (TREE_CODE (type) == ARRAY_TYPE)
5517 check_init_type_bitfields (TREE_TYPE (type));
5520 /* At the end of an implicit or explicit brace level,
5521 finish up that level of constructor.
5522 If we were outputting the elements as they are read, return 0
5523 from inner levels (process_init_element ignores that),
5524 but return error_mark_node from the outermost level
5525 (that's what we want to put in DECL_INITIAL).
5526 Otherwise, return a CONSTRUCTOR expression. */
5528 tree
5529 pop_init_level (implicit)
5530 int implicit;
5532 struct constructor_stack *p;
5533 int size = 0;
5534 tree constructor = 0;
5536 if (implicit == 0)
5538 /* When we come to an explicit close brace,
5539 pop any inner levels that didn't have explicit braces. */
5540 while (constructor_stack->implicit)
5541 process_init_element (pop_init_level (1));
5544 p = constructor_stack;
5546 if (constructor_type != 0)
5547 size = int_size_in_bytes (constructor_type);
5549 /* Now output all pending elements. */
5550 output_pending_init_elements (1);
5552 #if 0 /* c-parse.in warns about {}. */
5553 /* In ANSI, each brace level must have at least one element. */
5554 if (! implicit && pedantic
5555 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5556 ? integer_zerop (constructor_unfilled_index)
5557 : constructor_unfilled_fields == TYPE_FIELDS (constructor_type)))
5558 pedwarn_init ("empty braces in initializer%s", " for `%s'", NULL);
5559 #endif
5561 /* Pad out the end of the structure. */
5563 if (p->replacement_value)
5565 /* If this closes a superfluous brace pair,
5566 just pass out the element between them. */
5567 constructor = p->replacement_value;
5568 /* If this is the top level thing within the initializer,
5569 and it's for a variable, then since we already called
5570 assemble_variable, we must output the value now. */
5571 if (p->next == 0 && constructor_decl != 0
5572 && constructor_incremental)
5574 constructor = digest_init (constructor_type, constructor,
5575 require_constant_value,
5576 require_constant_elements);
5578 /* If initializing an array of unknown size,
5579 determine the size now. */
5580 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5581 && TYPE_DOMAIN (constructor_type) == 0)
5583 int failure;
5584 int momentary_p;
5586 push_obstacks_nochange ();
5587 if (TREE_PERMANENT (constructor_type))
5588 end_temporary_allocation ();
5590 momentary_p = suspend_momentary ();
5592 /* We shouldn't have an incomplete array type within
5593 some other type. */
5594 if (constructor_stack->next)
5595 abort ();
5597 failure
5598 = complete_array_type (constructor_type,
5599 constructor, 0);
5600 if (failure)
5601 abort ();
5603 size = int_size_in_bytes (constructor_type);
5604 resume_momentary (momentary_p);
5605 pop_obstacks ();
5608 output_constant (constructor, size);
5611 else if (constructor_type == 0)
5613 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5614 && TREE_CODE (constructor_type) != UNION_TYPE
5615 && TREE_CODE (constructor_type) != ARRAY_TYPE
5616 && ! constructor_incremental)
5618 /* A nonincremental scalar initializer--just return
5619 the element, after verifying there is just one. */
5620 if (constructor_elements == 0)
5622 error_init ("empty scalar initializer%s",
5623 " for `%s'", NULL);
5624 constructor = error_mark_node;
5626 else if (TREE_CHAIN (constructor_elements) != 0)
5628 error_init ("extra elements in scalar initializer%s",
5629 " for `%s'", NULL);
5630 constructor = TREE_VALUE (constructor_elements);
5632 else
5633 constructor = TREE_VALUE (constructor_elements);
5635 else if (! constructor_incremental)
5637 if (constructor_erroneous)
5638 constructor = error_mark_node;
5639 else
5641 int momentary = suspend_momentary ();
5643 constructor = build (CONSTRUCTOR, constructor_type, NULL_TREE,
5644 nreverse (constructor_elements));
5645 if (constructor_constant)
5646 TREE_CONSTANT (constructor) = 1;
5647 if (constructor_constant && constructor_simple)
5648 TREE_STATIC (constructor) = 1;
5650 resume_momentary (momentary);
5653 else
5655 tree filled;
5656 int momentary = suspend_momentary ();
5658 if (TREE_CODE (constructor_type) == RECORD_TYPE
5659 || TREE_CODE (constructor_type) == UNION_TYPE)
5661 /* Find the offset of the end of that field. */
5662 filled = size_binop (CEIL_DIV_EXPR,
5663 constructor_bit_index,
5664 size_int (BITS_PER_UNIT));
5666 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5668 /* If initializing an array of unknown size,
5669 determine the size now. */
5670 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5671 && TYPE_DOMAIN (constructor_type) == 0)
5673 tree maxindex
5674 = size_binop (MINUS_EXPR,
5675 constructor_unfilled_index,
5676 integer_one_node);
5678 push_obstacks_nochange ();
5679 if (TREE_PERMANENT (constructor_type))
5680 end_temporary_allocation ();
5681 maxindex = copy_node (maxindex);
5682 TYPE_DOMAIN (constructor_type) = build_index_type (maxindex);
5683 TREE_TYPE (maxindex) = TYPE_DOMAIN (constructor_type);
5685 /* TYPE_MAX_VALUE is always one less than the number of elements
5686 in the array, because we start counting at zero. Therefore,
5687 warn only if the value is less than zero. */
5688 if (pedantic
5689 && (tree_int_cst_sgn (TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5690 < 0))
5691 error_with_decl (constructor_decl,
5692 "zero or negative array size `%s'");
5693 layout_type (constructor_type);
5694 size = int_size_in_bytes (constructor_type);
5695 pop_obstacks ();
5698 filled = size_binop (MULT_EXPR, constructor_unfilled_index,
5699 size_in_bytes (TREE_TYPE (constructor_type)));
5701 else
5702 filled = 0;
5704 if (filled != 0)
5705 assemble_zeros (size - TREE_INT_CST_LOW (filled));
5707 resume_momentary (momentary);
5711 constructor_type = p->type;
5712 constructor_fields = p->fields;
5713 constructor_index = p->index;
5714 constructor_range_end = p->range_end;
5715 constructor_max_index = p->max_index;
5716 constructor_unfilled_index = p->unfilled_index;
5717 constructor_unfilled_fields = p->unfilled_fields;
5718 constructor_bit_index = p->bit_index;
5719 constructor_elements = p->elements;
5720 constructor_constant = p->constant;
5721 constructor_simple = p->simple;
5722 constructor_erroneous = p->erroneous;
5723 constructor_pending_elts = p->pending_elts;
5724 constructor_depth = p->depth;
5725 constructor_incremental = p->incremental;
5726 RESTORE_SPELLING_DEPTH (constructor_depth);
5728 constructor_stack = p->next;
5729 free (p);
5731 if (constructor == 0)
5733 if (constructor_stack == 0)
5734 return error_mark_node;
5735 return NULL_TREE;
5737 return constructor;
5740 /* Within an array initializer, specify the next index to be initialized.
5741 FIRST is that index. If LAST is nonzero, then initialize a range
5742 of indices, running from FIRST through LAST. */
5744 void
5745 set_init_index (first, last)
5746 tree first, last;
5748 while ((TREE_CODE (first) == NOP_EXPR
5749 || TREE_CODE (first) == CONVERT_EXPR
5750 || TREE_CODE (first) == NON_LVALUE_EXPR)
5751 && (TYPE_MODE (TREE_TYPE (first))
5752 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5753 (first) = TREE_OPERAND (first, 0);
5754 if (last)
5755 while ((TREE_CODE (last) == NOP_EXPR
5756 || TREE_CODE (last) == CONVERT_EXPR
5757 || TREE_CODE (last) == NON_LVALUE_EXPR)
5758 && (TYPE_MODE (TREE_TYPE (last))
5759 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5760 (last) = TREE_OPERAND (last, 0);
5762 if (TREE_CODE (first) != INTEGER_CST)
5763 error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
5764 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5765 error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
5766 else if (! constructor_unfilled_index)
5767 error_init ("array index in non-array initializer%s", " for `%s'", NULL);
5768 else if (tree_int_cst_lt (first, constructor_unfilled_index))
5769 error_init ("duplicate array index in initializer%s", " for `%s'", NULL);
5770 else
5772 TREE_INT_CST_LOW (constructor_index) = TREE_INT_CST_LOW (first);
5773 TREE_INT_CST_HIGH (constructor_index) = TREE_INT_CST_HIGH (first);
5775 if (last != 0 && tree_int_cst_lt (last, first))
5776 error_init ("empty index range in initializer%s", " for `%s'", NULL);
5777 else
5779 if (pedantic)
5780 pedwarn ("ANSI C forbids specifying element to initialize");
5781 constructor_range_end = last;
5786 /* Within a struct initializer, specify the next field to be initialized. */
5788 void
5789 set_init_label (fieldname)
5790 tree fieldname;
5792 tree tail;
5793 int passed = 0;
5795 /* Don't die if an entire brace-pair level is superfluous
5796 in the containing level. */
5797 if (constructor_type == 0)
5798 return;
5800 for (tail = TYPE_FIELDS (constructor_type); tail;
5801 tail = TREE_CHAIN (tail))
5803 if (tail == constructor_unfilled_fields)
5804 passed = 1;
5805 if (DECL_NAME (tail) == fieldname)
5806 break;
5809 if (tail == 0)
5810 error ("unknown field `%s' specified in initializer",
5811 IDENTIFIER_POINTER (fieldname));
5812 else if (!passed)
5813 error ("field `%s' already initialized",
5814 IDENTIFIER_POINTER (fieldname));
5815 else
5817 constructor_fields = tail;
5818 if (pedantic)
5819 pedwarn ("ANSI C forbids specifying structure member to initialize");
5823 /* "Output" the next constructor element.
5824 At top level, really output it to assembler code now.
5825 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5826 TYPE is the data type that the containing data type wants here.
5827 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5829 PENDING if non-nil means output pending elements that belong
5830 right after this element. (PENDING is normally 1;
5831 it is 0 while outputting pending elements, to avoid recursion.) */
5833 static void
5834 output_init_element (value, type, field, pending)
5835 tree value, type, field;
5836 int pending;
5838 int duplicate = 0;
5840 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
5841 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5842 && !(TREE_CODE (value) == STRING_CST
5843 && TREE_CODE (type) == ARRAY_TYPE
5844 && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
5845 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5846 TYPE_MAIN_VARIANT (type))))
5847 value = default_conversion (value);
5849 if (value == error_mark_node)
5850 constructor_erroneous = 1;
5851 else if (!TREE_CONSTANT (value))
5852 constructor_constant = 0;
5853 else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0
5854 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5855 || TREE_CODE (constructor_type) == UNION_TYPE)
5856 && DECL_C_BIT_FIELD (field)
5857 && TREE_CODE (value) != INTEGER_CST))
5858 constructor_simple = 0;
5860 if (require_constant_value && ! TREE_CONSTANT (value))
5862 error_init ("initializer element%s is not constant",
5863 " for `%s'", NULL);
5864 value = error_mark_node;
5866 else if (require_constant_elements
5867 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
5869 error_init ("initializer element%s is not computable at load time",
5870 " for `%s'", NULL);
5871 value = error_mark_node;
5874 /* If this element duplicates one on constructor_pending_elts,
5875 print a message and ignore it. Don't do this when we're
5876 processing elements taken off constructor_pending_elts,
5877 because we'd always get spurious errors. */
5878 if (pending)
5880 if (TREE_CODE (constructor_type) == RECORD_TYPE
5881 || TREE_CODE (constructor_type) == UNION_TYPE)
5883 if (purpose_member (field, constructor_pending_elts))
5885 error_init ("duplicate initializer%s", " for `%s'", NULL);
5886 duplicate = 1;
5889 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5891 tree tail;
5892 for (tail = constructor_pending_elts; tail;
5893 tail = TREE_CHAIN (tail))
5894 if (TREE_PURPOSE (tail) != 0
5895 && TREE_CODE (TREE_PURPOSE (tail)) == INTEGER_CST
5896 && tree_int_cst_equal (TREE_PURPOSE (tail), constructor_index))
5897 break;
5899 if (tail != 0)
5901 error_init ("duplicate initializer%s", " for `%s'", NULL);
5902 duplicate = 1;
5907 /* If this element doesn't come next in sequence,
5908 put it on constructor_pending_elts. */
5909 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5910 && !tree_int_cst_equal (field, constructor_unfilled_index))
5912 if (! duplicate)
5913 /* The copy_node is needed in case field is actually
5914 constructor_index, which is modified in place. */
5915 constructor_pending_elts
5916 = tree_cons (copy_node (field),
5917 digest_init (type, value, require_constant_value,
5918 require_constant_elements),
5919 constructor_pending_elts);
5921 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5922 && field != constructor_unfilled_fields)
5924 /* We do this for records but not for unions. In a union,
5925 no matter which field is specified, it can be initialized
5926 right away since it starts at the beginning of the union. */
5927 if (!duplicate)
5928 constructor_pending_elts
5929 = tree_cons (field,
5930 digest_init (type, value, require_constant_value,
5931 require_constant_elements),
5932 constructor_pending_elts);
5934 else
5936 /* Otherwise, output this element either to
5937 constructor_elements or to the assembler file. */
5939 if (!duplicate)
5941 if (! constructor_incremental)
5943 if (field && TREE_CODE (field) == INTEGER_CST)
5944 field = copy_node (field);
5945 constructor_elements
5946 = tree_cons (field, digest_init (type, value,
5947 require_constant_value,
5948 require_constant_elements),
5949 constructor_elements);
5951 else
5953 /* Structure elements may require alignment.
5954 Do this, if necessary. */
5955 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5957 /* Advance to offset of this element. */
5958 if (! tree_int_cst_equal (constructor_bit_index,
5959 DECL_FIELD_BITPOS (field)))
5961 int next = (TREE_INT_CST_LOW (DECL_FIELD_BITPOS (field))
5962 / BITS_PER_UNIT);
5963 int here = (TREE_INT_CST_LOW (constructor_bit_index)
5964 / BITS_PER_UNIT);
5966 assemble_zeros (next - here);
5969 output_constant (digest_init (type, value,
5970 require_constant_value,
5971 require_constant_elements),
5972 int_size_in_bytes (type));
5974 /* For a record or union,
5975 keep track of end position of last field. */
5976 if (TREE_CODE (constructor_type) == RECORD_TYPE
5977 || TREE_CODE (constructor_type) == UNION_TYPE)
5979 tree temp = size_binop (PLUS_EXPR, DECL_FIELD_BITPOS (field),
5980 DECL_SIZE (field));
5981 TREE_INT_CST_LOW (constructor_bit_index)
5982 = TREE_INT_CST_LOW (temp);
5983 TREE_INT_CST_HIGH (constructor_bit_index)
5984 = TREE_INT_CST_HIGH (temp);
5989 /* Advance the variable that indicates sequential elements output. */
5990 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5992 tree tem = size_binop (PLUS_EXPR, constructor_unfilled_index,
5993 integer_one_node);
5994 TREE_INT_CST_LOW (constructor_unfilled_index)
5995 = TREE_INT_CST_LOW (tem);
5996 TREE_INT_CST_HIGH (constructor_unfilled_index)
5997 = TREE_INT_CST_HIGH (tem);
5999 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6000 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
6001 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6002 constructor_unfilled_fields = 0;
6004 /* Now output any pending elements which have become next. */
6005 if (pending)
6006 output_pending_init_elements (0);
6010 /* Output any pending elements which have become next.
6011 As we output elements, constructor_unfilled_{fields,index}
6012 advances, which may cause other elements to become next;
6013 if so, they too are output.
6015 If ALL is 0, we return when there are
6016 no more pending elements to output now.
6018 If ALL is 1, we output space as necessary so that
6019 we can output all the pending elements. */
6021 static void
6022 output_pending_init_elements (all)
6023 int all;
6025 tree tail;
6026 tree next;
6028 retry:
6030 /* Look thru the whole pending list.
6031 If we find an element that should be output now,
6032 output it. Otherwise, set NEXT to the element
6033 that comes first among those still pending. */
6035 next = 0;
6036 for (tail = constructor_pending_elts; tail;
6037 tail = TREE_CHAIN (tail))
6039 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6041 if (tree_int_cst_equal (TREE_PURPOSE (tail),
6042 constructor_unfilled_index))
6044 output_init_element (TREE_VALUE (tail),
6045 TREE_TYPE (constructor_type),
6046 constructor_unfilled_index, 0);
6047 goto retry;
6049 else if (tree_int_cst_lt (TREE_PURPOSE (tail),
6050 constructor_unfilled_index))
6052 else if (next == 0
6053 || tree_int_cst_lt (TREE_PURPOSE (tail), next))
6054 next = TREE_PURPOSE (tail);
6056 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6057 || TREE_CODE (constructor_type) == UNION_TYPE)
6059 if (TREE_PURPOSE (tail) == constructor_unfilled_fields)
6061 output_init_element (TREE_VALUE (tail),
6062 TREE_TYPE (constructor_unfilled_fields),
6063 constructor_unfilled_fields,
6065 goto retry;
6067 else if (constructor_unfilled_fields == 0
6068 || tree_int_cst_lt (DECL_FIELD_BITPOS (TREE_PURPOSE (tail)),
6069 DECL_FIELD_BITPOS (constructor_unfilled_fields)))
6071 else if (next == 0
6072 || tree_int_cst_lt (DECL_FIELD_BITPOS (TREE_PURPOSE (tail)),
6073 DECL_FIELD_BITPOS (next)))
6074 next = TREE_PURPOSE (tail);
6078 /* Ordinarily return, but not if we want to output all
6079 and there are elements left. */
6080 if (! (all && next != 0))
6081 return;
6083 /* Generate space up to the position of NEXT. */
6084 if (constructor_incremental)
6086 tree filled;
6087 tree nextpos_tree = size_int (0);
6089 if (TREE_CODE (constructor_type) == RECORD_TYPE
6090 || TREE_CODE (constructor_type) == UNION_TYPE)
6092 /* Find the last field written out, if any. */
6093 for (tail = TYPE_FIELDS (constructor_type); tail;
6094 tail = TREE_CHAIN (tail))
6095 if (TREE_CHAIN (tail) == constructor_unfilled_fields)
6096 break;
6098 if (tail)
6099 /* Find the offset of the end of that field. */
6100 filled = size_binop (CEIL_DIV_EXPR,
6101 size_binop (PLUS_EXPR,
6102 DECL_FIELD_BITPOS (tail),
6103 DECL_SIZE (tail)),
6104 size_int (BITS_PER_UNIT));
6105 else
6106 filled = size_int (0);
6108 nextpos_tree = size_binop (CEIL_DIV_EXPR,
6109 DECL_FIELD_BITPOS (next),
6110 size_int (BITS_PER_UNIT));
6112 TREE_INT_CST_HIGH (constructor_bit_index)
6113 = TREE_INT_CST_HIGH (DECL_FIELD_BITPOS (next));
6114 TREE_INT_CST_LOW (constructor_bit_index)
6115 = TREE_INT_CST_LOW (DECL_FIELD_BITPOS (next));
6116 constructor_unfilled_fields = next;
6118 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6120 filled = size_binop (MULT_EXPR, constructor_unfilled_index,
6121 size_in_bytes (TREE_TYPE (constructor_type)));
6122 nextpos_tree
6123 = size_binop (MULT_EXPR, next,
6124 size_in_bytes (TREE_TYPE (constructor_type)));
6125 TREE_INT_CST_LOW (constructor_unfilled_index)
6126 = TREE_INT_CST_LOW (next);
6127 TREE_INT_CST_HIGH (constructor_unfilled_index)
6128 = TREE_INT_CST_HIGH (next);
6130 else
6131 filled = 0;
6133 if (filled)
6135 int nextpos = TREE_INT_CST_LOW (nextpos_tree);
6137 assemble_zeros (nextpos - TREE_INT_CST_LOW (filled));
6140 else
6142 /* If it's not incremental, just skip over the gap,
6143 so that after jumping to retry we will output the next
6144 successive element. */
6145 if (TREE_CODE (constructor_type) == RECORD_TYPE
6146 || TREE_CODE (constructor_type) == UNION_TYPE)
6147 constructor_unfilled_fields = next;
6148 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6150 TREE_INT_CST_LOW (constructor_unfilled_index)
6151 = TREE_INT_CST_LOW (next);
6152 TREE_INT_CST_HIGH (constructor_unfilled_index)
6153 = TREE_INT_CST_HIGH (next);
6157 goto retry;
6160 /* Add one non-braced element to the current constructor level.
6161 This adjusts the current position within the constructor's type.
6162 This may also start or terminate implicit levels
6163 to handle a partly-braced initializer.
6165 Once this has found the correct level for the new element,
6166 it calls output_init_element.
6168 Note: if we are incrementally outputting this constructor,
6169 this function may be called with a null argument
6170 representing a sub-constructor that was already incrementally output.
6171 When that happens, we output nothing, but we do the bookkeeping
6172 to skip past that element of the current constructor. */
6174 void
6175 process_init_element (value)
6176 tree value;
6178 tree orig_value = value;
6179 int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
6181 /* Handle superfluous braces around string cst as in
6182 char x[] = {"foo"}; */
6183 if (string_flag
6184 && constructor_type
6185 && TREE_CODE (constructor_type) == ARRAY_TYPE
6186 && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
6187 && integer_zerop (constructor_unfilled_index))
6189 constructor_stack->replacement_value = value;
6190 return;
6193 if (constructor_stack->replacement_value != 0)
6195 error_init ("excess elements in struct initializer%s",
6196 " after `%s'", NULL_PTR);
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%s",
6232 " after `%s'", NULL_PTR);
6233 break;
6236 fieldtype = TREE_TYPE (constructor_fields);
6237 if (fieldtype != error_mark_node)
6238 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6239 fieldcode = TREE_CODE (fieldtype);
6241 /* Accept a string constant to initialize a subarray. */
6242 if (value != 0
6243 && fieldcode == ARRAY_TYPE
6244 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6245 && string_flag)
6246 value = orig_value;
6247 /* Otherwise, if we have come to a subaggregate,
6248 and we don't have an element of its type, push into it. */
6249 else if (value != 0 && !constructor_no_implicit
6250 && value != error_mark_node
6251 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6252 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6253 || fieldcode == UNION_TYPE))
6255 push_init_level (1);
6256 continue;
6259 if (value)
6261 push_member_name (constructor_fields);
6262 output_init_element (value, fieldtype, constructor_fields, 1);
6263 RESTORE_SPELLING_DEPTH (constructor_depth);
6265 else
6266 /* Do the bookkeeping for an element that was
6267 directly output as a constructor. */
6269 /* For a record, keep track of end position of last field. */
6270 tree temp = size_binop (PLUS_EXPR,
6271 DECL_FIELD_BITPOS (constructor_fields),
6272 DECL_SIZE (constructor_fields));
6273 TREE_INT_CST_LOW (constructor_bit_index)
6274 = TREE_INT_CST_LOW (temp);
6275 TREE_INT_CST_HIGH (constructor_bit_index)
6276 = TREE_INT_CST_HIGH (temp);
6278 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6281 constructor_fields = TREE_CHAIN (constructor_fields);
6282 /* Skip any nameless bit fields at the beginning. */
6283 while (constructor_fields != 0
6284 && DECL_C_BIT_FIELD (constructor_fields)
6285 && DECL_NAME (constructor_fields) == 0)
6286 constructor_fields = TREE_CHAIN (constructor_fields);
6287 break;
6289 if (TREE_CODE (constructor_type) == UNION_TYPE)
6291 tree fieldtype;
6292 enum tree_code fieldcode;
6294 if (constructor_fields == 0)
6296 pedwarn_init ("excess elements in union initializer%s",
6297 " after `%s'", NULL_PTR);
6298 break;
6301 fieldtype = TREE_TYPE (constructor_fields);
6302 if (fieldtype != error_mark_node)
6303 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6304 fieldcode = TREE_CODE (fieldtype);
6306 /* Accept a string constant to initialize a subarray. */
6307 if (value != 0
6308 && fieldcode == ARRAY_TYPE
6309 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6310 && string_flag)
6311 value = orig_value;
6312 /* Otherwise, if we have come to a subaggregate,
6313 and we don't have an element of its type, push into it. */
6314 else if (value != 0 && !constructor_no_implicit
6315 && value != error_mark_node
6316 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6317 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6318 || fieldcode == UNION_TYPE))
6320 push_init_level (1);
6321 continue;
6324 if (value)
6326 push_member_name (constructor_fields);
6327 output_init_element (value, fieldtype, constructor_fields, 1);
6328 RESTORE_SPELLING_DEPTH (constructor_depth);
6330 else
6331 /* Do the bookkeeping for an element that was
6332 directly output as a constructor. */
6334 TREE_INT_CST_LOW (constructor_bit_index)
6335 = TREE_INT_CST_LOW (DECL_SIZE (constructor_fields));
6336 TREE_INT_CST_HIGH (constructor_bit_index)
6337 = TREE_INT_CST_HIGH (DECL_SIZE (constructor_fields));
6339 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6342 constructor_fields = 0;
6343 break;
6345 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6347 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6348 enum tree_code eltcode = TREE_CODE (elttype);
6350 /* Accept a string constant to initialize a subarray. */
6351 if (value != 0
6352 && eltcode == ARRAY_TYPE
6353 && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
6354 && string_flag)
6355 value = orig_value;
6356 /* Otherwise, if we have come to a subaggregate,
6357 and we don't have an element of its type, push into it. */
6358 else if (value != 0 && !constructor_no_implicit
6359 && value != error_mark_node
6360 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
6361 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6362 || eltcode == UNION_TYPE))
6364 push_init_level (1);
6365 continue;
6368 if (constructor_max_index != 0
6369 && tree_int_cst_lt (constructor_max_index, constructor_index))
6371 pedwarn_init ("excess elements in array initializer%s",
6372 " after `%s'", NULL_PTR);
6373 break;
6376 /* In the case of [LO .. HI] = VALUE, only evaluate VALUE once. */
6377 if (constructor_range_end)
6379 if (constructor_max_index != 0
6380 && tree_int_cst_lt (constructor_max_index,
6381 constructor_range_end))
6383 pedwarn_init ("excess elements in array initializer%s",
6384 " after `%s'", NULL_PTR);
6385 TREE_INT_CST_HIGH (constructor_range_end)
6386 = TREE_INT_CST_HIGH (constructor_max_index);
6387 TREE_INT_CST_LOW (constructor_range_end)
6388 = TREE_INT_CST_LOW (constructor_max_index);
6391 value = save_expr (value);
6394 /* Now output the actual element.
6395 Ordinarily, output once.
6396 If there is a range, repeat it till we advance past the range. */
6399 tree tem;
6401 if (value)
6403 push_array_bounds (TREE_INT_CST_LOW (constructor_index));
6404 output_init_element (value, elttype, constructor_index, 1);
6405 RESTORE_SPELLING_DEPTH (constructor_depth);
6408 tem = size_binop (PLUS_EXPR, constructor_index,
6409 integer_one_node);
6410 TREE_INT_CST_LOW (constructor_index) = TREE_INT_CST_LOW (tem);
6411 TREE_INT_CST_HIGH (constructor_index) = TREE_INT_CST_HIGH (tem);
6413 if (!value)
6414 /* If we are doing the bookkeeping for an element that was
6415 directly output as a constructor,
6416 we must update constructor_unfilled_index. */
6418 TREE_INT_CST_LOW (constructor_unfilled_index)
6419 = TREE_INT_CST_LOW (constructor_index);
6420 TREE_INT_CST_HIGH (constructor_unfilled_index)
6421 = TREE_INT_CST_HIGH (constructor_index);
6424 while (! (constructor_range_end == 0
6425 || tree_int_cst_lt (constructor_range_end,
6426 constructor_index)));
6428 break;
6431 /* Handle the sole element allowed in a braced initializer
6432 for a scalar variable. */
6433 if (constructor_fields == 0)
6435 pedwarn_init ("excess elements in scalar initializer%s",
6436 " after `%s'", NULL_PTR);
6437 break;
6440 if (value)
6441 output_init_element (value, constructor_type, NULL_TREE, 1);
6442 constructor_fields = 0;
6443 break;
6446 /* If the (lexically) previous elments are not now saved,
6447 we can discard the storage for them. */
6448 if (constructor_incremental && constructor_pending_elts == 0 && value != 0
6449 && constructor_stack == 0)
6450 clear_momentary ();
6453 /* Expand an ASM statement with operands, handling output operands
6454 that are not variables or INDIRECT_REFS by transforming such
6455 cases into cases that expand_asm_operands can handle.
6457 Arguments are same as for expand_asm_operands. */
6459 void
6460 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
6461 tree string, outputs, inputs, clobbers;
6462 int vol;
6463 char *filename;
6464 int line;
6466 int noutputs = list_length (outputs);
6467 register int i;
6468 /* o[I] is the place that output number I should be written. */
6469 register tree *o = (tree *) alloca (noutputs * sizeof (tree));
6470 register tree tail;
6472 if (TREE_CODE (string) == ADDR_EXPR)
6473 string = TREE_OPERAND (string, 0);
6474 if (TREE_CODE (string) != STRING_CST)
6476 error ("asm template is not a string constant");
6477 return;
6480 /* Record the contents of OUTPUTS before it is modified. */
6481 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6482 o[i] = TREE_VALUE (tail);
6484 /* Perform default conversions on array and function inputs. */
6485 /* Don't do this for other types--
6486 it would screw up operands expected to be in memory. */
6487 for (i = 0, tail = inputs; tail; tail = TREE_CHAIN (tail), i++)
6488 if (TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == ARRAY_TYPE
6489 || TREE_CODE (TREE_TYPE (TREE_VALUE (tail))) == FUNCTION_TYPE)
6490 TREE_VALUE (tail) = default_conversion (TREE_VALUE (tail));
6492 /* Generate the ASM_OPERANDS insn;
6493 store into the TREE_VALUEs of OUTPUTS some trees for
6494 where the values were actually stored. */
6495 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
6497 /* Copy all the intermediate outputs into the specified outputs. */
6498 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6500 if (o[i] != TREE_VALUE (tail))
6502 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
6503 0, VOIDmode, 0);
6504 free_temp_slots ();
6506 /* Detect modification of read-only values.
6507 (Otherwise done by build_modify_expr.) */
6508 else
6510 tree type = TREE_TYPE (o[i]);
6511 if (TREE_READONLY (o[i])
6512 || TYPE_READONLY (type)
6513 || ((TREE_CODE (type) == RECORD_TYPE
6514 || TREE_CODE (type) == UNION_TYPE)
6515 && C_TYPE_FIELDS_READONLY (type)))
6516 readonly_warning (o[i], "modification by `asm'");
6520 /* Those MODIFY_EXPRs could do autoincrements. */
6521 emit_queue ();
6524 /* Expand a C `return' statement.
6525 RETVAL is the expression for what to return,
6526 or a null pointer for `return;' with no value. */
6528 void
6529 c_expand_return (retval)
6530 tree retval;
6532 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6534 if (TREE_THIS_VOLATILE (current_function_decl))
6535 warning ("function declared `noreturn' has a `return' statement");
6537 if (!retval)
6539 current_function_returns_null = 1;
6540 if (warn_return_type && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6541 warning ("`return' with no value, in function returning non-void");
6542 expand_null_return ();
6544 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6546 current_function_returns_null = 1;
6547 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6548 pedwarn ("`return' with a value, in function returning void");
6549 expand_return (retval);
6551 else
6553 tree t = convert_for_assignment (valtype, retval, "return",
6554 NULL_TREE, NULL_TREE, 0);
6555 tree res = DECL_RESULT (current_function_decl);
6556 tree inner;
6558 if (t == error_mark_node)
6559 return;
6561 inner = t = convert (TREE_TYPE (res), t);
6563 /* Strip any conversions, additions, and subtractions, and see if
6564 we are returning the address of a local variable. Warn if so. */
6565 while (1)
6567 switch (TREE_CODE (inner))
6569 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6570 case PLUS_EXPR:
6571 inner = TREE_OPERAND (inner, 0);
6572 continue;
6574 case MINUS_EXPR:
6575 /* If the second operand of the MINUS_EXPR has a pointer
6576 type (or is converted from it), this may be valid, so
6577 don't give a warning. */
6579 tree op1 = TREE_OPERAND (inner, 1);
6581 while (! POINTER_TYPE_P (TREE_TYPE (op1))
6582 && (TREE_CODE (op1) == NOP_EXPR
6583 || TREE_CODE (op1) == NON_LVALUE_EXPR
6584 || TREE_CODE (op1) == CONVERT_EXPR))
6585 op1 = TREE_OPERAND (op1, 0);
6587 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6588 break;
6590 inner = TREE_OPERAND (inner, 0);
6591 continue;
6594 case ADDR_EXPR:
6595 inner = TREE_OPERAND (inner, 0);
6597 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
6598 inner = TREE_OPERAND (inner, 0);
6600 if (TREE_CODE (inner) == VAR_DECL
6601 && ! DECL_EXTERNAL (inner)
6602 && ! TREE_STATIC (inner)
6603 && DECL_CONTEXT (inner) == current_function_decl)
6604 warning ("function returns address of local variable");
6605 break;
6608 break;
6611 t = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
6612 TREE_SIDE_EFFECTS (t) = 1;
6613 expand_return (t);
6614 current_function_returns_value = 1;
6618 /* Start a C switch statement, testing expression EXP.
6619 Return EXP if it is valid, an error node otherwise. */
6621 tree
6622 c_expand_start_case (exp)
6623 tree exp;
6625 register enum tree_code code = TREE_CODE (TREE_TYPE (exp));
6626 tree type = TREE_TYPE (exp);
6628 if (code != INTEGER_TYPE && code != ENUMERAL_TYPE && code != ERROR_MARK)
6630 error ("switch quantity not an integer");
6631 exp = error_mark_node;
6633 else
6635 tree index;
6636 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6638 if (warn_traditional
6639 && (type == long_integer_type_node
6640 || type == long_unsigned_type_node))
6641 pedwarn ("`long' switch expression not converted to `int' in ANSI C");
6643 exp = default_conversion (exp);
6644 type = TREE_TYPE (exp);
6645 index = get_unwidened (exp, NULL_TREE);
6646 /* We can't strip a conversion from a signed type to an unsigned,
6647 because if we did, int_fits_type_p would do the wrong thing
6648 when checking case values for being in range,
6649 and it's too hard to do the right thing. */
6650 if (TREE_UNSIGNED (TREE_TYPE (exp))
6651 == TREE_UNSIGNED (TREE_TYPE (index)))
6652 exp = index;
6655 expand_start_case (1, exp, type, "switch statement");
6657 return exp;