* config/arm/elf.h (ASM_OUTPUT_ALIGNED_COMMON): Remove definition.
[official-gcc.git] / gcc / c-typeck.c
blob33bce26ede62e16a360534e5285006b45d2fda05
1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
23 /* This file is part of the C front end.
24 It contains routines to build C expressions given their operands,
25 including computing the types of the result, C-specific error checks,
26 and some optimization.
28 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
29 and to process initializations in declarations (since they work
30 like a strange sort of assignment). */
32 #include "config.h"
33 #include "system.h"
34 #include "coretypes.h"
35 #include "tm.h"
36 #include "rtl.h"
37 #include "tree.h"
38 #include "c-tree.h"
39 #include "tm_p.h"
40 #include "flags.h"
41 #include "output.h"
42 #include "expr.h"
43 #include "toplev.h"
44 #include "intl.h"
45 #include "ggc.h"
46 #include "target.h"
48 /* Nonzero if we've already printed a "missing braces around initializer"
49 message within this initializer. */
50 static int missing_braces_mentioned;
52 /* 1 if we explained undeclared var errors. */
53 static int undeclared_variable_notice;
55 static tree qualify_type PARAMS ((tree, tree));
56 static int comp_target_types PARAMS ((tree, tree, int));
57 static int function_types_compatible_p PARAMS ((tree, tree));
58 static int type_lists_compatible_p PARAMS ((tree, tree));
59 static tree decl_constant_value_for_broken_optimization PARAMS ((tree));
60 static tree default_function_array_conversion PARAMS ((tree));
61 static tree lookup_field PARAMS ((tree, tree));
62 static void undeclared_variable PARAMS ((tree));
63 static tree convert_arguments PARAMS ((tree, tree, tree, tree));
64 static tree pointer_diff PARAMS ((tree, tree));
65 static tree unary_complex_lvalue PARAMS ((enum tree_code, tree, int));
66 static void pedantic_lvalue_warning PARAMS ((enum tree_code));
67 static tree internal_build_compound_expr PARAMS ((tree, int));
68 static tree convert_for_assignment PARAMS ((tree, tree, const char *,
69 tree, tree, int));
70 static void warn_for_assignment PARAMS ((const char *, const char *,
71 tree, int));
72 static tree valid_compound_expr_initializer PARAMS ((tree, tree));
73 static void push_string PARAMS ((const char *));
74 static void push_member_name PARAMS ((tree));
75 static void push_array_bounds PARAMS ((int));
76 static int spelling_length PARAMS ((void));
77 static char *print_spelling PARAMS ((char *));
78 static void warning_init PARAMS ((const char *));
79 static tree digest_init PARAMS ((tree, tree, int));
80 static void output_init_element PARAMS ((tree, tree, tree, int));
81 static void output_pending_init_elements PARAMS ((int));
82 static int set_designator PARAMS ((int));
83 static void push_range_stack PARAMS ((tree));
84 static void add_pending_init PARAMS ((tree, tree));
85 static void set_nonincremental_init PARAMS ((void));
86 static void set_nonincremental_init_from_string PARAMS ((tree));
87 static tree find_init_member PARAMS ((tree));
89 /* Do `exp = require_complete_type (exp);' to make sure exp
90 does not have an incomplete type. (That includes void types.) */
92 tree
93 require_complete_type (value)
94 tree value;
96 tree type = TREE_TYPE (value);
98 if (value == error_mark_node || type == error_mark_node)
99 return error_mark_node;
101 /* First, detect a valid value with a complete type. */
102 if (COMPLETE_TYPE_P (type))
103 return value;
105 c_incomplete_type_error (value, type);
106 return error_mark_node;
109 /* Print an error message for invalid use of an incomplete type.
110 VALUE is the expression that was used (or 0 if that isn't known)
111 and TYPE is the type that was invalid. */
113 void
114 c_incomplete_type_error (value, type)
115 tree value;
116 tree type;
118 const char *type_code_string;
120 /* Avoid duplicate error message. */
121 if (TREE_CODE (type) == ERROR_MARK)
122 return;
124 if (value != 0 && (TREE_CODE (value) == VAR_DECL
125 || TREE_CODE (value) == PARM_DECL))
126 error ("`%s' has an incomplete type",
127 IDENTIFIER_POINTER (DECL_NAME (value)));
128 else
130 retry:
131 /* We must print an error message. Be clever about what it says. */
133 switch (TREE_CODE (type))
135 case RECORD_TYPE:
136 type_code_string = "struct";
137 break;
139 case UNION_TYPE:
140 type_code_string = "union";
141 break;
143 case ENUMERAL_TYPE:
144 type_code_string = "enum";
145 break;
147 case VOID_TYPE:
148 error ("invalid use of void expression");
149 return;
151 case ARRAY_TYPE:
152 if (TYPE_DOMAIN (type))
154 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
156 error ("invalid use of flexible array member");
157 return;
159 type = TREE_TYPE (type);
160 goto retry;
162 error ("invalid use of array with unspecified bounds");
163 return;
165 default:
166 abort ();
169 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
170 error ("invalid use of undefined type `%s %s'",
171 type_code_string, IDENTIFIER_POINTER (TYPE_NAME (type)));
172 else
173 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
174 error ("invalid use of incomplete typedef `%s'",
175 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
179 /* Given a type, apply default promotions wrt unnamed function
180 arguments and return the new type. */
182 tree
183 c_type_promotes_to (type)
184 tree type;
186 if (TYPE_MAIN_VARIANT (type) == float_type_node)
187 return double_type_node;
189 if (c_promoting_integer_type_p (type))
191 /* Preserve unsignedness if not really getting any wider. */
192 if (TREE_UNSIGNED (type)
193 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
194 return unsigned_type_node;
195 return integer_type_node;
198 return type;
201 /* Return a variant of TYPE which has all the type qualifiers of LIKE
202 as well as those of TYPE. */
204 static tree
205 qualify_type (type, like)
206 tree type, like;
208 return c_build_qualified_type (type,
209 TYPE_QUALS (type) | TYPE_QUALS (like));
212 /* Return the common type of two types.
213 We assume that comptypes has already been done and returned 1;
214 if that isn't so, this may crash. In particular, we assume that qualifiers
215 match.
217 This is the type for the result of most arithmetic operations
218 if the operands have the given two types. */
220 tree
221 common_type (t1, t2)
222 tree t1, t2;
224 enum tree_code code1;
225 enum tree_code code2;
226 tree attributes;
228 /* Save time if the two types are the same. */
230 if (t1 == t2) return t1;
232 /* If one type is nonsense, use the other. */
233 if (t1 == error_mark_node)
234 return t2;
235 if (t2 == error_mark_node)
236 return t1;
238 /* Merge the attributes. */
239 attributes = (*targetm.merge_type_attributes) (t1, t2);
241 /* Treat an enum type as the unsigned integer type of the same width. */
243 if (TREE_CODE (t1) == ENUMERAL_TYPE)
244 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
245 if (TREE_CODE (t2) == ENUMERAL_TYPE)
246 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
248 code1 = TREE_CODE (t1);
249 code2 = TREE_CODE (t2);
251 /* If one type is complex, form the common type of the non-complex
252 components, then make that complex. Use T1 or T2 if it is the
253 required type. */
254 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
256 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
257 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
258 tree subtype = common_type (subtype1, subtype2);
260 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
261 return build_type_attribute_variant (t1, attributes);
262 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
263 return build_type_attribute_variant (t2, attributes);
264 else
265 return build_type_attribute_variant (build_complex_type (subtype),
266 attributes);
269 switch (code1)
271 case INTEGER_TYPE:
272 case REAL_TYPE:
273 /* If only one is real, use it as the result. */
275 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
276 return build_type_attribute_variant (t1, attributes);
278 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
279 return build_type_attribute_variant (t2, attributes);
281 /* Both real or both integers; use the one with greater precision. */
283 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
284 return build_type_attribute_variant (t1, attributes);
285 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
286 return build_type_attribute_variant (t2, attributes);
288 /* Same precision. Prefer longs to ints even when same size. */
290 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
291 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
292 return build_type_attribute_variant (long_unsigned_type_node,
293 attributes);
295 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
296 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
298 /* But preserve unsignedness from the other type,
299 since long cannot hold all the values of an unsigned int. */
300 if (TREE_UNSIGNED (t1) || TREE_UNSIGNED (t2))
301 t1 = long_unsigned_type_node;
302 else
303 t1 = long_integer_type_node;
304 return build_type_attribute_variant (t1, attributes);
307 /* Likewise, prefer long double to double even if same size. */
308 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
309 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
310 return build_type_attribute_variant (long_double_type_node,
311 attributes);
313 /* Otherwise prefer the unsigned one. */
315 if (TREE_UNSIGNED (t1))
316 return build_type_attribute_variant (t1, attributes);
317 else
318 return build_type_attribute_variant (t2, attributes);
320 case POINTER_TYPE:
321 /* For two pointers, do this recursively on the target type,
322 and combine the qualifiers of the two types' targets. */
323 /* This code was turned off; I don't know why.
324 But ANSI C specifies doing this with the qualifiers.
325 So I turned it on again. */
327 tree pointed_to_1 = TREE_TYPE (t1);
328 tree pointed_to_2 = TREE_TYPE (t2);
329 tree target = common_type (TYPE_MAIN_VARIANT (pointed_to_1),
330 TYPE_MAIN_VARIANT (pointed_to_2));
331 t1 = build_pointer_type (c_build_qualified_type
332 (target,
333 TYPE_QUALS (pointed_to_1) |
334 TYPE_QUALS (pointed_to_2)));
335 return build_type_attribute_variant (t1, attributes);
337 #if 0
338 t1 = build_pointer_type (common_type (TREE_TYPE (t1), TREE_TYPE (t2)));
339 return build_type_attribute_variant (t1, attributes);
340 #endif
342 case ARRAY_TYPE:
344 tree elt = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
345 /* Save space: see if the result is identical to one of the args. */
346 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1))
347 return build_type_attribute_variant (t1, attributes);
348 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2))
349 return build_type_attribute_variant (t2, attributes);
350 /* Merge the element types, and have a size if either arg has one. */
351 t1 = build_array_type (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2));
352 return build_type_attribute_variant (t1, attributes);
355 case FUNCTION_TYPE:
356 /* Function types: prefer the one that specified arg types.
357 If both do, merge the arg types. Also merge the return types. */
359 tree valtype = common_type (TREE_TYPE (t1), TREE_TYPE (t2));
360 tree p1 = TYPE_ARG_TYPES (t1);
361 tree p2 = TYPE_ARG_TYPES (t2);
362 int len;
363 tree newargs, n;
364 int i;
366 /* Save space: see if the result is identical to one of the args. */
367 if (valtype == TREE_TYPE (t1) && ! TYPE_ARG_TYPES (t2))
368 return build_type_attribute_variant (t1, attributes);
369 if (valtype == TREE_TYPE (t2) && ! TYPE_ARG_TYPES (t1))
370 return build_type_attribute_variant (t2, attributes);
372 /* Simple way if one arg fails to specify argument types. */
373 if (TYPE_ARG_TYPES (t1) == 0)
375 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
376 return build_type_attribute_variant (t1, attributes);
378 if (TYPE_ARG_TYPES (t2) == 0)
380 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
381 return build_type_attribute_variant (t1, attributes);
384 /* If both args specify argument types, we must merge the two
385 lists, argument by argument. */
387 pushlevel (0);
388 declare_parm_level (1);
390 len = list_length (p1);
391 newargs = 0;
393 for (i = 0; i < len; i++)
394 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
396 n = newargs;
398 for (; p1;
399 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
401 /* A null type means arg type is not specified.
402 Take whatever the other function type has. */
403 if (TREE_VALUE (p1) == 0)
405 TREE_VALUE (n) = TREE_VALUE (p2);
406 goto parm_done;
408 if (TREE_VALUE (p2) == 0)
410 TREE_VALUE (n) = TREE_VALUE (p1);
411 goto parm_done;
414 /* Given wait (union {union wait *u; int *i} *)
415 and wait (union wait *),
416 prefer union wait * as type of parm. */
417 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
418 && TREE_VALUE (p1) != TREE_VALUE (p2))
420 tree memb;
421 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
422 memb; memb = TREE_CHAIN (memb))
423 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p2)))
425 TREE_VALUE (n) = TREE_VALUE (p2);
426 if (pedantic)
427 pedwarn ("function types not truly compatible in ISO C");
428 goto parm_done;
431 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
432 && TREE_VALUE (p2) != TREE_VALUE (p1))
434 tree memb;
435 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
436 memb; memb = TREE_CHAIN (memb))
437 if (comptypes (TREE_TYPE (memb), TREE_VALUE (p1)))
439 TREE_VALUE (n) = TREE_VALUE (p1);
440 if (pedantic)
441 pedwarn ("function types not truly compatible in ISO C");
442 goto parm_done;
445 TREE_VALUE (n) = common_type (TREE_VALUE (p1), TREE_VALUE (p2));
446 parm_done: ;
449 poplevel (0, 0, 0);
451 t1 = build_function_type (valtype, newargs);
452 /* ... falls through ... */
455 default:
456 return build_type_attribute_variant (t1, attributes);
461 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
462 or various other operations. Return 2 if they are compatible
463 but a warning may be needed if you use them together. */
466 comptypes (type1, type2)
467 tree type1, type2;
469 tree t1 = type1;
470 tree t2 = type2;
471 int attrval, val;
473 /* Suppress errors caused by previously reported errors. */
475 if (t1 == t2 || !t1 || !t2
476 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
477 return 1;
479 /* If either type is the internal version of sizetype, return the
480 language version. */
481 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
482 && TYPE_DOMAIN (t1) != 0)
483 t1 = TYPE_DOMAIN (t1);
485 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
486 && TYPE_DOMAIN (t2) != 0)
487 t2 = TYPE_DOMAIN (t2);
489 /* Treat an enum type as the integer type of the same width and
490 signedness. */
492 if (TREE_CODE (t1) == ENUMERAL_TYPE)
493 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TREE_UNSIGNED (t1));
494 if (TREE_CODE (t2) == ENUMERAL_TYPE)
495 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TREE_UNSIGNED (t2));
497 if (t1 == t2)
498 return 1;
500 /* Different classes of types can't be compatible. */
502 if (TREE_CODE (t1) != TREE_CODE (t2)) return 0;
504 /* Qualifiers must match. */
506 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
507 return 0;
509 /* Allow for two different type nodes which have essentially the same
510 definition. Note that we already checked for equality of the type
511 qualifiers (just above). */
513 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
514 return 1;
516 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
517 if (! (attrval = (*targetm.comp_type_attributes) (t1, t2)))
518 return 0;
520 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
521 val = 0;
523 switch (TREE_CODE (t1))
525 case POINTER_TYPE:
526 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
527 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
528 break;
530 case FUNCTION_TYPE:
531 val = function_types_compatible_p (t1, t2);
532 break;
534 case ARRAY_TYPE:
536 tree d1 = TYPE_DOMAIN (t1);
537 tree d2 = TYPE_DOMAIN (t2);
538 bool d1_variable, d2_variable;
539 bool d1_zero, d2_zero;
540 val = 1;
542 /* Target types must match incl. qualifiers. */
543 if (TREE_TYPE (t1) != TREE_TYPE (t2)
544 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
545 return 0;
547 /* Sizes must match unless one is missing or variable. */
548 if (d1 == 0 || d2 == 0 || d1 == d2)
549 break;
551 d1_zero = ! TYPE_MAX_VALUE (d1);
552 d2_zero = ! TYPE_MAX_VALUE (d2);
554 d1_variable = (! d1_zero
555 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
556 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
557 d2_variable = (! d2_zero
558 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
559 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
561 if (d1_variable || d2_variable)
562 break;
563 if (d1_zero && d2_zero)
564 break;
565 if (d1_zero || d2_zero
566 || ! tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
567 || ! tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
568 val = 0;
570 break;
573 case RECORD_TYPE:
574 if (flag_objc && objc_comptypes (t1, t2, 0) == 1)
575 val = 1;
576 break;
578 case VECTOR_TYPE:
579 /* The target might allow certain vector types to be compatible. */
580 val = (*targetm.vector_opaque_p) (t1)
581 || (*targetm.vector_opaque_p) (t2);
582 break;
584 default:
585 break;
587 return attrval == 2 && val == 1 ? 2 : val;
590 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
591 ignoring their qualifiers. REFLEXIVE is only used by ObjC - set it
592 to 1 or 0 depending if the check of the pointer types is meant to
593 be reflexive or not (typically, assignments are not reflexive,
594 while comparisons are reflexive).
597 static int
598 comp_target_types (ttl, ttr, reflexive)
599 tree ttl, ttr;
600 int reflexive;
602 int val;
604 /* Give objc_comptypes a crack at letting these types through. */
605 if ((val = objc_comptypes (ttl, ttr, reflexive)) >= 0)
606 return val;
608 val = comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (ttl)),
609 TYPE_MAIN_VARIANT (TREE_TYPE (ttr)));
611 if (val == 2 && pedantic)
612 pedwarn ("types are not quite compatible");
613 return val;
616 /* Subroutines of `comptypes'. */
618 /* Return 1 if two function types F1 and F2 are compatible.
619 If either type specifies no argument types,
620 the other must specify a fixed number of self-promoting arg types.
621 Otherwise, if one type specifies only the number of arguments,
622 the other must specify that number of self-promoting arg types.
623 Otherwise, the argument types must match. */
625 static int
626 function_types_compatible_p (f1, f2)
627 tree f1, f2;
629 tree args1, args2;
630 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
631 int val = 1;
632 int val1;
634 if (!(TREE_TYPE (f1) == TREE_TYPE (f2)
635 || (val = comptypes (TREE_TYPE (f1), TREE_TYPE (f2)))))
636 return 0;
638 args1 = TYPE_ARG_TYPES (f1);
639 args2 = TYPE_ARG_TYPES (f2);
641 /* An unspecified parmlist matches any specified parmlist
642 whose argument types don't need default promotions. */
644 if (args1 == 0)
646 if (!self_promoting_args_p (args2))
647 return 0;
648 /* If one of these types comes from a non-prototype fn definition,
649 compare that with the other type's arglist.
650 If they don't match, ask for a warning (but no error). */
651 if (TYPE_ACTUAL_ARG_TYPES (f1)
652 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
653 val = 2;
654 return val;
656 if (args2 == 0)
658 if (!self_promoting_args_p (args1))
659 return 0;
660 if (TYPE_ACTUAL_ARG_TYPES (f2)
661 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
662 val = 2;
663 return val;
666 /* Both types have argument lists: compare them and propagate results. */
667 val1 = type_lists_compatible_p (args1, args2);
668 return val1 != 1 ? val1 : val;
671 /* Check two lists of types for compatibility,
672 returning 0 for incompatible, 1 for compatible,
673 or 2 for compatible with warning. */
675 static int
676 type_lists_compatible_p (args1, args2)
677 tree args1, args2;
679 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
680 int val = 1;
681 int newval = 0;
683 while (1)
685 if (args1 == 0 && args2 == 0)
686 return val;
687 /* If one list is shorter than the other,
688 they fail to match. */
689 if (args1 == 0 || args2 == 0)
690 return 0;
691 /* A null pointer instead of a type
692 means there is supposed to be an argument
693 but nothing is specified about what type it has.
694 So match anything that self-promotes. */
695 if (TREE_VALUE (args1) == 0)
697 if (c_type_promotes_to (TREE_VALUE (args2)) != TREE_VALUE (args2))
698 return 0;
700 else if (TREE_VALUE (args2) == 0)
702 if (c_type_promotes_to (TREE_VALUE (args1)) != TREE_VALUE (args1))
703 return 0;
705 else if (! (newval = comptypes (TYPE_MAIN_VARIANT (TREE_VALUE (args1)),
706 TYPE_MAIN_VARIANT (TREE_VALUE (args2)))))
708 /* Allow wait (union {union wait *u; int *i} *)
709 and wait (union wait *) to be compatible. */
710 if (TREE_CODE (TREE_VALUE (args1)) == UNION_TYPE
711 && (TYPE_NAME (TREE_VALUE (args1)) == 0
712 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args1)))
713 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args1))) == INTEGER_CST
714 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args1)),
715 TYPE_SIZE (TREE_VALUE (args2))))
717 tree memb;
718 for (memb = TYPE_FIELDS (TREE_VALUE (args1));
719 memb; memb = TREE_CHAIN (memb))
720 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args2)))
721 break;
722 if (memb == 0)
723 return 0;
725 else if (TREE_CODE (TREE_VALUE (args2)) == UNION_TYPE
726 && (TYPE_NAME (TREE_VALUE (args2)) == 0
727 || TYPE_TRANSPARENT_UNION (TREE_VALUE (args2)))
728 && TREE_CODE (TYPE_SIZE (TREE_VALUE (args2))) == INTEGER_CST
729 && tree_int_cst_equal (TYPE_SIZE (TREE_VALUE (args2)),
730 TYPE_SIZE (TREE_VALUE (args1))))
732 tree memb;
733 for (memb = TYPE_FIELDS (TREE_VALUE (args2));
734 memb; memb = TREE_CHAIN (memb))
735 if (comptypes (TREE_TYPE (memb), TREE_VALUE (args1)))
736 break;
737 if (memb == 0)
738 return 0;
740 else
741 return 0;
744 /* comptypes said ok, but record if it said to warn. */
745 if (newval > val)
746 val = newval;
748 args1 = TREE_CHAIN (args1);
749 args2 = TREE_CHAIN (args2);
753 /* Compute the size to increment a pointer by. */
755 tree
756 c_size_in_bytes (type)
757 tree type;
759 enum tree_code code = TREE_CODE (type);
761 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
762 return size_one_node;
764 if (!COMPLETE_OR_VOID_TYPE_P (type))
766 error ("arithmetic on pointer to an incomplete type");
767 return size_one_node;
770 /* Convert in case a char is more than one unit. */
771 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
772 size_int (TYPE_PRECISION (char_type_node)
773 / BITS_PER_UNIT));
776 /* Return either DECL or its known constant value (if it has one). */
778 tree
779 decl_constant_value (decl)
780 tree decl;
782 if (/* Don't change a variable array bound or initial value to a constant
783 in a place where a variable is invalid. */
784 current_function_decl != 0
785 && ! TREE_THIS_VOLATILE (decl)
786 && TREE_READONLY (decl)
787 && DECL_INITIAL (decl) != 0
788 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
789 /* This is invalid if initial value is not constant.
790 If it has either a function call, a memory reference,
791 or a variable, then re-evaluating it could give different results. */
792 && TREE_CONSTANT (DECL_INITIAL (decl))
793 /* Check for cases where this is sub-optimal, even though valid. */
794 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
795 return DECL_INITIAL (decl);
796 return decl;
799 /* Return either DECL or its known constant value (if it has one), but
800 return DECL if pedantic or DECL has mode BLKmode. This is for
801 bug-compatibility with the old behavior of decl_constant_value
802 (before GCC 3.0); every use of this function is a bug and it should
803 be removed before GCC 3.1. It is not appropriate to use pedantic
804 in a way that affects optimization, and BLKmode is probably not the
805 right test for avoiding misoptimizations either. */
807 static tree
808 decl_constant_value_for_broken_optimization (decl)
809 tree decl;
811 if (pedantic || DECL_MODE (decl) == BLKmode)
812 return decl;
813 else
814 return decl_constant_value (decl);
818 /* Perform the default conversion of arrays and functions to pointers.
819 Return the result of converting EXP. For any other expression, just
820 return EXP. */
822 static tree
823 default_function_array_conversion (exp)
824 tree exp;
826 tree orig_exp;
827 tree type = TREE_TYPE (exp);
828 enum tree_code code = TREE_CODE (type);
829 int not_lvalue = 0;
831 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
832 an lvalue.
834 Do not use STRIP_NOPS here! It will remove conversions from pointer
835 to integer and cause infinite recursion. */
836 orig_exp = exp;
837 while (TREE_CODE (exp) == NON_LVALUE_EXPR
838 || (TREE_CODE (exp) == NOP_EXPR
839 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
841 if (TREE_CODE (exp) == NON_LVALUE_EXPR)
842 not_lvalue = 1;
843 exp = TREE_OPERAND (exp, 0);
846 /* Preserve the original expression code. */
847 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))))
848 C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp));
850 if (code == FUNCTION_TYPE)
852 return build_unary_op (ADDR_EXPR, exp, 0);
854 if (code == ARRAY_TYPE)
856 tree adr;
857 tree restype = TREE_TYPE (type);
858 tree ptrtype;
859 int constp = 0;
860 int volatilep = 0;
861 int lvalue_array_p;
863 if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'r' || DECL_P (exp))
865 constp = TREE_READONLY (exp);
866 volatilep = TREE_THIS_VOLATILE (exp);
869 if (TYPE_QUALS (type) || constp || volatilep)
870 restype
871 = c_build_qualified_type (restype,
872 TYPE_QUALS (type)
873 | (constp * TYPE_QUAL_CONST)
874 | (volatilep * TYPE_QUAL_VOLATILE));
876 if (TREE_CODE (exp) == INDIRECT_REF)
877 return convert (TYPE_POINTER_TO (restype),
878 TREE_OPERAND (exp, 0));
880 if (TREE_CODE (exp) == COMPOUND_EXPR)
882 tree op1 = default_conversion (TREE_OPERAND (exp, 1));
883 return build (COMPOUND_EXPR, TREE_TYPE (op1),
884 TREE_OPERAND (exp, 0), op1);
887 lvalue_array_p = !not_lvalue && lvalue_p (exp);
888 if (!flag_isoc99 && !lvalue_array_p)
890 /* Before C99, non-lvalue arrays do not decay to pointers.
891 Normally, using such an array would be invalid; but it can
892 be used correctly inside sizeof or as a statement expression.
893 Thus, do not give an error here; an error will result later. */
894 return exp;
897 ptrtype = build_pointer_type (restype);
899 if (TREE_CODE (exp) == VAR_DECL)
901 /* ??? This is not really quite correct
902 in that the type of the operand of ADDR_EXPR
903 is not the target type of the type of the ADDR_EXPR itself.
904 Question is, can this lossage be avoided? */
905 adr = build1 (ADDR_EXPR, ptrtype, exp);
906 if (!c_mark_addressable (exp))
907 return error_mark_node;
908 TREE_CONSTANT (adr) = staticp (exp);
909 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
910 return adr;
912 /* This way is better for a COMPONENT_REF since it can
913 simplify the offset for a component. */
914 adr = build_unary_op (ADDR_EXPR, exp, 1);
915 return convert (ptrtype, adr);
917 return exp;
920 /* Perform default promotions for C data used in expressions.
921 Arrays and functions are converted to pointers;
922 enumeral types or short or char, to int.
923 In addition, manifest constants symbols are replaced by their values. */
925 tree
926 default_conversion (exp)
927 tree exp;
929 tree orig_exp;
930 tree type = TREE_TYPE (exp);
931 enum tree_code code = TREE_CODE (type);
933 if (code == FUNCTION_TYPE || code == ARRAY_TYPE)
934 return default_function_array_conversion (exp);
936 /* Constants can be used directly unless they're not loadable. */
937 if (TREE_CODE (exp) == CONST_DECL)
938 exp = DECL_INITIAL (exp);
940 /* Replace a nonvolatile const static variable with its value unless
941 it is an array, in which case we must be sure that taking the
942 address of the array produces consistent results. */
943 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
945 exp = decl_constant_value_for_broken_optimization (exp);
946 type = TREE_TYPE (exp);
949 /* Strip NON_LVALUE_EXPRs and no-op conversions, since we aren't using as
950 an lvalue.
952 Do not use STRIP_NOPS here! It will remove conversions from pointer
953 to integer and cause infinite recursion. */
954 orig_exp = exp;
955 while (TREE_CODE (exp) == NON_LVALUE_EXPR
956 || (TREE_CODE (exp) == NOP_EXPR
957 && TREE_TYPE (TREE_OPERAND (exp, 0)) == TREE_TYPE (exp)))
958 exp = TREE_OPERAND (exp, 0);
960 /* Preserve the original expression code. */
961 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (exp))))
962 C_SET_EXP_ORIGINAL_CODE (exp, C_EXP_ORIGINAL_CODE (orig_exp));
964 /* Normally convert enums to int,
965 but convert wide enums to something wider. */
966 if (code == ENUMERAL_TYPE)
968 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
969 TYPE_PRECISION (integer_type_node)),
970 ((TYPE_PRECISION (type)
971 >= TYPE_PRECISION (integer_type_node))
972 && TREE_UNSIGNED (type)));
974 return convert (type, exp);
977 if (TREE_CODE (exp) == COMPONENT_REF
978 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
979 /* If it's thinner than an int, promote it like a
980 c_promoting_integer_type_p, otherwise leave it alone. */
981 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
982 TYPE_PRECISION (integer_type_node)))
983 return convert (integer_type_node, exp);
985 if (c_promoting_integer_type_p (type))
987 /* Preserve unsignedness if not really getting any wider. */
988 if (TREE_UNSIGNED (type)
989 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
990 return convert (unsigned_type_node, exp);
992 return convert (integer_type_node, exp);
995 if (code == VOID_TYPE)
997 error ("void value not ignored as it ought to be");
998 return error_mark_node;
1000 return exp;
1003 /* Look up COMPONENT in a structure or union DECL.
1005 If the component name is not found, returns NULL_TREE. Otherwise,
1006 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1007 stepping down the chain to the component, which is in the last
1008 TREE_VALUE of the list. Normally the list is of length one, but if
1009 the component is embedded within (nested) anonymous structures or
1010 unions, the list steps down the chain to the component. */
1012 static tree
1013 lookup_field (decl, component)
1014 tree decl, component;
1016 tree type = TREE_TYPE (decl);
1017 tree field;
1019 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1020 to the field elements. Use a binary search on this array to quickly
1021 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1022 will always be set for structures which have many elements. */
1024 if (TYPE_LANG_SPECIFIC (type))
1026 int bot, top, half;
1027 tree *field_array = &TYPE_LANG_SPECIFIC (type)->elts[0];
1029 field = TYPE_FIELDS (type);
1030 bot = 0;
1031 top = TYPE_LANG_SPECIFIC (type)->len;
1032 while (top - bot > 1)
1034 half = (top - bot + 1) >> 1;
1035 field = field_array[bot+half];
1037 if (DECL_NAME (field) == NULL_TREE)
1039 /* Step through all anon unions in linear fashion. */
1040 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1042 field = field_array[bot++];
1043 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1044 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1046 tree anon = lookup_field (field, component);
1048 if (anon)
1049 return tree_cons (NULL_TREE, field, anon);
1053 /* Entire record is only anon unions. */
1054 if (bot > top)
1055 return NULL_TREE;
1057 /* Restart the binary search, with new lower bound. */
1058 continue;
1061 if (DECL_NAME (field) == component)
1062 break;
1063 if (DECL_NAME (field) < component)
1064 bot += half;
1065 else
1066 top = bot + half;
1069 if (DECL_NAME (field_array[bot]) == component)
1070 field = field_array[bot];
1071 else if (DECL_NAME (field) != component)
1072 return NULL_TREE;
1074 else
1076 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1078 if (DECL_NAME (field) == NULL_TREE
1079 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1080 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1082 tree anon = lookup_field (field, component);
1084 if (anon)
1085 return tree_cons (NULL_TREE, field, anon);
1088 if (DECL_NAME (field) == component)
1089 break;
1092 if (field == NULL_TREE)
1093 return NULL_TREE;
1096 return tree_cons (NULL_TREE, field, NULL_TREE);
1099 /* Make an expression to refer to the COMPONENT field of
1100 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1102 tree
1103 build_component_ref (datum, component)
1104 tree datum, component;
1106 tree type = TREE_TYPE (datum);
1107 enum tree_code code = TREE_CODE (type);
1108 tree field = NULL;
1109 tree ref;
1111 /* If DATUM is a COMPOUND_EXPR, move our reference inside it.
1112 If pedantic ensure that the arguments are not lvalues; otherwise,
1113 if the component is an array, it would wrongly decay to a pointer in
1114 C89 mode.
1115 We cannot do this with a COND_EXPR, because in a conditional expression
1116 the default promotions are applied to both sides, and this would yield
1117 the wrong type of the result; for example, if the components have
1118 type "char". */
1119 switch (TREE_CODE (datum))
1121 case COMPOUND_EXPR:
1123 tree value = build_component_ref (TREE_OPERAND (datum, 1), component);
1124 return build (COMPOUND_EXPR, TREE_TYPE (value),
1125 TREE_OPERAND (datum, 0), pedantic_non_lvalue (value));
1127 default:
1128 break;
1131 /* See if there is a field or component with name COMPONENT. */
1133 if (code == RECORD_TYPE || code == UNION_TYPE)
1135 if (!COMPLETE_TYPE_P (type))
1137 c_incomplete_type_error (NULL_TREE, type);
1138 return error_mark_node;
1141 field = lookup_field (datum, component);
1143 if (!field)
1145 error ("%s has no member named `%s'",
1146 code == RECORD_TYPE ? "structure" : "union",
1147 IDENTIFIER_POINTER (component));
1148 return error_mark_node;
1151 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1152 This might be better solved in future the way the C++ front
1153 end does it - by giving the anonymous entities each a
1154 separate name and type, and then have build_component_ref
1155 recursively call itself. We can't do that here. */
1158 tree subdatum = TREE_VALUE (field);
1160 if (TREE_TYPE (subdatum) == error_mark_node)
1161 return error_mark_node;
1163 ref = build (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum);
1164 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
1165 TREE_READONLY (ref) = 1;
1166 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
1167 TREE_THIS_VOLATILE (ref) = 1;
1169 if (TREE_DEPRECATED (subdatum))
1170 warn_deprecated_use (subdatum);
1172 datum = ref;
1174 field = TREE_CHAIN (field);
1176 while (field);
1178 return ref;
1180 else if (code != ERROR_MARK)
1181 error ("request for member `%s' in something not a structure or union",
1182 IDENTIFIER_POINTER (component));
1184 return error_mark_node;
1187 /* Given an expression PTR for a pointer, return an expression
1188 for the value pointed to.
1189 ERRORSTRING is the name of the operator to appear in error messages. */
1191 tree
1192 build_indirect_ref (ptr, errorstring)
1193 tree ptr;
1194 const char *errorstring;
1196 tree pointer = default_conversion (ptr);
1197 tree type = TREE_TYPE (pointer);
1199 if (TREE_CODE (type) == POINTER_TYPE)
1201 if (TREE_CODE (pointer) == ADDR_EXPR
1202 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1203 == TREE_TYPE (type)))
1204 return TREE_OPERAND (pointer, 0);
1205 else
1207 tree t = TREE_TYPE (type);
1208 tree ref = build1 (INDIRECT_REF, TYPE_MAIN_VARIANT (t), pointer);
1210 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1212 error ("dereferencing pointer to incomplete type");
1213 return error_mark_node;
1215 if (VOID_TYPE_P (t) && skip_evaluation == 0)
1216 warning ("dereferencing `void *' pointer");
1218 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1219 so that we get the proper error message if the result is used
1220 to assign to. Also, &* is supposed to be a no-op.
1221 And ANSI C seems to specify that the type of the result
1222 should be the const type. */
1223 /* A de-reference of a pointer to const is not a const. It is valid
1224 to change it via some other pointer. */
1225 TREE_READONLY (ref) = TYPE_READONLY (t);
1226 TREE_SIDE_EFFECTS (ref)
1227 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
1228 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1229 return ref;
1232 else if (TREE_CODE (pointer) != ERROR_MARK)
1233 error ("invalid type argument of `%s'", errorstring);
1234 return error_mark_node;
1237 /* This handles expressions of the form "a[i]", which denotes
1238 an array reference.
1240 This is logically equivalent in C to *(a+i), but we may do it differently.
1241 If A is a variable or a member, we generate a primitive ARRAY_REF.
1242 This avoids forcing the array out of registers, and can work on
1243 arrays that are not lvalues (for example, members of structures returned
1244 by functions). */
1246 tree
1247 build_array_ref (array, index)
1248 tree array, index;
1250 if (index == 0)
1252 error ("subscript missing in array reference");
1253 return error_mark_node;
1256 if (TREE_TYPE (array) == error_mark_node
1257 || TREE_TYPE (index) == error_mark_node)
1258 return error_mark_node;
1260 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE
1261 && TREE_CODE (array) != INDIRECT_REF)
1263 tree rval, type;
1265 /* Subscripting with type char is likely to lose
1266 on a machine where chars are signed.
1267 So warn on any machine, but optionally.
1268 Don't warn for unsigned char since that type is safe.
1269 Don't warn for signed char because anyone who uses that
1270 must have done so deliberately. */
1271 if (warn_char_subscripts
1272 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1273 warning ("array subscript has type `char'");
1275 /* Apply default promotions *after* noticing character types. */
1276 index = default_conversion (index);
1278 /* Require integer *after* promotion, for sake of enums. */
1279 if (TREE_CODE (TREE_TYPE (index)) != INTEGER_TYPE)
1281 error ("array subscript is not an integer");
1282 return error_mark_node;
1285 /* An array that is indexed by a non-constant
1286 cannot be stored in a register; we must be able to do
1287 address arithmetic on its address.
1288 Likewise an array of elements of variable size. */
1289 if (TREE_CODE (index) != INTEGER_CST
1290 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1291 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1293 if (!c_mark_addressable (array))
1294 return error_mark_node;
1296 /* An array that is indexed by a constant value which is not within
1297 the array bounds cannot be stored in a register either; because we
1298 would get a crash in store_bit_field/extract_bit_field when trying
1299 to access a non-existent part of the register. */
1300 if (TREE_CODE (index) == INTEGER_CST
1301 && TYPE_VALUES (TREE_TYPE (array))
1302 && ! int_fits_type_p (index, TYPE_VALUES (TREE_TYPE (array))))
1304 if (!c_mark_addressable (array))
1305 return error_mark_node;
1308 if (pedantic)
1310 tree foo = array;
1311 while (TREE_CODE (foo) == COMPONENT_REF)
1312 foo = TREE_OPERAND (foo, 0);
1313 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
1314 pedwarn ("ISO C forbids subscripting `register' array");
1315 else if (! flag_isoc99 && ! lvalue_p (foo))
1316 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
1319 type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (array)));
1320 rval = build (ARRAY_REF, type, array, index);
1321 /* Array ref is const/volatile if the array elements are
1322 or if the array is. */
1323 TREE_READONLY (rval)
1324 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1325 | TREE_READONLY (array));
1326 TREE_SIDE_EFFECTS (rval)
1327 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1328 | TREE_SIDE_EFFECTS (array));
1329 TREE_THIS_VOLATILE (rval)
1330 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1331 /* This was added by rms on 16 Nov 91.
1332 It fixes vol struct foo *a; a->elts[1]
1333 in an inline function.
1334 Hope it doesn't break something else. */
1335 | TREE_THIS_VOLATILE (array));
1336 return require_complete_type (fold (rval));
1340 tree ar = default_conversion (array);
1341 tree ind = default_conversion (index);
1343 /* Do the same warning check as above, but only on the part that's
1344 syntactically the index and only if it is also semantically
1345 the index. */
1346 if (warn_char_subscripts
1347 && TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE
1348 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1349 warning ("subscript has type `char'");
1351 /* Put the integer in IND to simplify error checking. */
1352 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE)
1354 tree temp = ar;
1355 ar = ind;
1356 ind = temp;
1359 if (ar == error_mark_node)
1360 return ar;
1362 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE
1363 || TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) == FUNCTION_TYPE)
1365 error ("subscripted value is neither array nor pointer");
1366 return error_mark_node;
1368 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE)
1370 error ("array subscript is not an integer");
1371 return error_mark_node;
1374 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, ind, 0),
1375 "array indexing");
1379 /* Issue an error message for a reference to an undeclared variable ID,
1380 including a reference to a builtin outside of function-call context.
1381 Arrange to suppress further errors for the same identifier. */
1382 static void
1383 undeclared_variable (id)
1384 tree id;
1386 if (current_function_decl == 0)
1388 error ("`%s' undeclared here (not in a function)",
1389 IDENTIFIER_POINTER (id));
1390 IDENTIFIER_SYMBOL_VALUE (id) = error_mark_node;
1392 else
1394 error ("`%s' undeclared (first use in this function)",
1395 IDENTIFIER_POINTER (id));
1397 if (! undeclared_variable_notice)
1399 error ("(Each undeclared identifier is reported only once");
1400 error ("for each function it appears in.)");
1401 undeclared_variable_notice = 1;
1404 /* Set IDENTIFIER_SYMBOL_VALUE (id) to error_mark_node
1405 at function scope. This suppresses further warnings
1406 about this undeclared identifier in this function. */
1407 pushdecl_function_level (error_mark_node, id);
1411 /* Build an external reference to identifier ID. FUN indicates
1412 whether this will be used for a function call. */
1413 tree
1414 build_external_ref (id, fun)
1415 tree id;
1416 int fun;
1418 tree ref;
1419 tree decl = lookup_name (id);
1420 tree objc_ivar = lookup_objc_ivar (id);
1422 if (decl && decl != error_mark_node)
1424 /* Properly declared variable or function reference. */
1425 if (!objc_ivar)
1426 ref = decl;
1427 else if (decl != objc_ivar && DECL_CONTEXT (decl) != 0)
1429 warning ("local declaration of `%s' hides instance variable",
1430 IDENTIFIER_POINTER (id));
1431 ref = decl;
1433 else
1434 ref = objc_ivar;
1436 else if (objc_ivar)
1437 ref = objc_ivar;
1438 else if (fun)
1439 /* Implicit function declaration. */
1440 ref = implicitly_declare (id);
1441 else if (decl == error_mark_node)
1442 /* Don't complain about something that's already been
1443 complained about. */
1444 return error_mark_node;
1445 else
1447 undeclared_variable (id);
1448 return error_mark_node;
1451 if (TREE_TYPE (ref) == error_mark_node)
1452 return error_mark_node;
1454 if (TREE_DEPRECATED (ref))
1455 warn_deprecated_use (ref);
1457 if (!skip_evaluation)
1458 assemble_external (ref);
1459 TREE_USED (ref) = 1;
1461 if (TREE_CODE (ref) == CONST_DECL)
1463 ref = DECL_INITIAL (ref);
1464 TREE_CONSTANT (ref) = 1;
1466 else if (current_function_decl != 0
1467 && DECL_CONTEXT (current_function_decl) != 0
1468 && (TREE_CODE (ref) == VAR_DECL
1469 || TREE_CODE (ref) == PARM_DECL
1470 || TREE_CODE (ref) == FUNCTION_DECL))
1472 tree context = decl_function_context (ref);
1474 if (context != 0 && context != current_function_decl)
1475 DECL_NONLOCAL (ref) = 1;
1478 return ref;
1481 /* Build a function call to function FUNCTION with parameters PARAMS.
1482 PARAMS is a list--a chain of TREE_LIST nodes--in which the
1483 TREE_VALUE of each node is a parameter-expression.
1484 FUNCTION's data type may be a function type or a pointer-to-function. */
1486 tree
1487 build_function_call (function, params)
1488 tree function, params;
1490 tree fntype, fundecl = 0;
1491 tree coerced_params;
1492 tree name = NULL_TREE, result;
1494 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1495 STRIP_TYPE_NOPS (function);
1497 /* Convert anything with function type to a pointer-to-function. */
1498 if (TREE_CODE (function) == FUNCTION_DECL)
1500 name = DECL_NAME (function);
1502 /* Differs from default_conversion by not setting TREE_ADDRESSABLE
1503 (because calling an inline function does not mean the function
1504 needs to be separately compiled). */
1505 fntype = build_type_variant (TREE_TYPE (function),
1506 TREE_READONLY (function),
1507 TREE_THIS_VOLATILE (function));
1508 fundecl = function;
1509 function = build1 (ADDR_EXPR, build_pointer_type (fntype), function);
1511 else
1512 function = default_conversion (function);
1514 fntype = TREE_TYPE (function);
1516 if (TREE_CODE (fntype) == ERROR_MARK)
1517 return error_mark_node;
1519 if (!(TREE_CODE (fntype) == POINTER_TYPE
1520 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
1522 error ("called object is not a function");
1523 return error_mark_node;
1526 if (fundecl && TREE_THIS_VOLATILE (fundecl))
1527 current_function_returns_abnormally = 1;
1529 /* fntype now gets the type of function pointed to. */
1530 fntype = TREE_TYPE (fntype);
1532 /* Convert the parameters to the types declared in the
1533 function prototype, or apply default promotions. */
1535 coerced_params
1536 = convert_arguments (TYPE_ARG_TYPES (fntype), params, name, fundecl);
1538 /* Check that the arguments to the function are valid. */
1540 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params);
1542 /* Recognize certain built-in functions so we can make tree-codes
1543 other than CALL_EXPR. We do this when it enables fold-const.c
1544 to do something useful. */
1546 if (TREE_CODE (function) == ADDR_EXPR
1547 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL
1548 && DECL_BUILT_IN (TREE_OPERAND (function, 0)))
1550 result = expand_tree_builtin (TREE_OPERAND (function, 0),
1551 params, coerced_params);
1552 if (result)
1553 return result;
1556 result = build (CALL_EXPR, TREE_TYPE (fntype),
1557 function, coerced_params, NULL_TREE);
1558 TREE_SIDE_EFFECTS (result) = 1;
1559 result = fold (result);
1561 if (VOID_TYPE_P (TREE_TYPE (result)))
1562 return result;
1563 return require_complete_type (result);
1566 /* Convert the argument expressions in the list VALUES
1567 to the types in the list TYPELIST. The result is a list of converted
1568 argument expressions.
1570 If TYPELIST is exhausted, or when an element has NULL as its type,
1571 perform the default conversions.
1573 PARMLIST is the chain of parm decls for the function being called.
1574 It may be 0, if that info is not available.
1575 It is used only for generating error messages.
1577 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages.
1579 This is also where warnings about wrong number of args are generated.
1581 Both VALUES and the returned value are chains of TREE_LIST nodes
1582 with the elements of the list in the TREE_VALUE slots of those nodes. */
1584 static tree
1585 convert_arguments (typelist, values, name, fundecl)
1586 tree typelist, values, name, fundecl;
1588 tree typetail, valtail;
1589 tree result = NULL;
1590 int parmnum;
1592 /* Scan the given expressions and types, producing individual
1593 converted arguments and pushing them on RESULT in reverse order. */
1595 for (valtail = values, typetail = typelist, parmnum = 0;
1596 valtail;
1597 valtail = TREE_CHAIN (valtail), parmnum++)
1599 tree type = typetail ? TREE_VALUE (typetail) : 0;
1600 tree val = TREE_VALUE (valtail);
1602 if (type == void_type_node)
1604 if (name)
1605 error ("too many arguments to function `%s'",
1606 IDENTIFIER_POINTER (name));
1607 else
1608 error ("too many arguments to function");
1609 break;
1612 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
1613 /* Do not use STRIP_NOPS here! We do not want an enumerator with value 0
1614 to convert automatically to a pointer. */
1615 if (TREE_CODE (val) == NON_LVALUE_EXPR)
1616 val = TREE_OPERAND (val, 0);
1618 val = default_function_array_conversion (val);
1620 val = require_complete_type (val);
1622 if (type != 0)
1624 /* Formal parm type is specified by a function prototype. */
1625 tree parmval;
1627 if (!COMPLETE_TYPE_P (type))
1629 error ("type of formal parameter %d is incomplete", parmnum + 1);
1630 parmval = val;
1632 else
1634 /* Optionally warn about conversions that
1635 differ from the default conversions. */
1636 if (warn_conversion || warn_traditional)
1638 int formal_prec = TYPE_PRECISION (type);
1640 if (INTEGRAL_TYPE_P (type)
1641 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1642 warn_for_assignment ("%s as integer rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1643 if (INTEGRAL_TYPE_P (type)
1644 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1645 warn_for_assignment ("%s as integer rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1646 else if (TREE_CODE (type) == COMPLEX_TYPE
1647 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1648 warn_for_assignment ("%s as complex rather than floating due to prototype", (char *) 0, name, parmnum + 1);
1649 else if (TREE_CODE (type) == REAL_TYPE
1650 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1651 warn_for_assignment ("%s as floating rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1652 else if (TREE_CODE (type) == COMPLEX_TYPE
1653 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1654 warn_for_assignment ("%s as complex rather than integer due to prototype", (char *) 0, name, parmnum + 1);
1655 else if (TREE_CODE (type) == REAL_TYPE
1656 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
1657 warn_for_assignment ("%s as floating rather than complex due to prototype", (char *) 0, name, parmnum + 1);
1658 /* ??? At some point, messages should be written about
1659 conversions between complex types, but that's too messy
1660 to do now. */
1661 else if (TREE_CODE (type) == REAL_TYPE
1662 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
1664 /* Warn if any argument is passed as `float',
1665 since without a prototype it would be `double'. */
1666 if (formal_prec == TYPE_PRECISION (float_type_node))
1667 warn_for_assignment ("%s as `float' rather than `double' due to prototype", (char *) 0, name, parmnum + 1);
1669 /* Detect integer changing in width or signedness.
1670 These warnings are only activated with
1671 -Wconversion, not with -Wtraditional. */
1672 else if (warn_conversion && INTEGRAL_TYPE_P (type)
1673 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
1675 tree would_have_been = default_conversion (val);
1676 tree type1 = TREE_TYPE (would_have_been);
1678 if (TREE_CODE (type) == ENUMERAL_TYPE
1679 && (TYPE_MAIN_VARIANT (type)
1680 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
1681 /* No warning if function asks for enum
1682 and the actual arg is that enum type. */
1684 else if (formal_prec != TYPE_PRECISION (type1))
1685 warn_for_assignment ("%s with different width due to prototype", (char *) 0, name, parmnum + 1);
1686 else if (TREE_UNSIGNED (type) == TREE_UNSIGNED (type1))
1688 /* Don't complain if the formal parameter type
1689 is an enum, because we can't tell now whether
1690 the value was an enum--even the same enum. */
1691 else if (TREE_CODE (type) == ENUMERAL_TYPE)
1693 else if (TREE_CODE (val) == INTEGER_CST
1694 && int_fits_type_p (val, type))
1695 /* Change in signedness doesn't matter
1696 if a constant value is unaffected. */
1698 /* Likewise for a constant in a NOP_EXPR. */
1699 else if (TREE_CODE (val) == NOP_EXPR
1700 && TREE_CODE (TREE_OPERAND (val, 0)) == INTEGER_CST
1701 && int_fits_type_p (TREE_OPERAND (val, 0), type))
1703 #if 0 /* We never get such tree structure here. */
1704 else if (TREE_CODE (TREE_TYPE (val)) == ENUMERAL_TYPE
1705 && int_fits_type_p (TYPE_MIN_VALUE (TREE_TYPE (val)), type)
1706 && int_fits_type_p (TYPE_MAX_VALUE (TREE_TYPE (val)), type))
1707 /* Change in signedness doesn't matter
1708 if an enum value is unaffected. */
1710 #endif
1711 /* If the value is extended from a narrower
1712 unsigned type, it doesn't matter whether we
1713 pass it as signed or unsigned; the value
1714 certainly is the same either way. */
1715 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
1716 && TREE_UNSIGNED (TREE_TYPE (val)))
1718 else if (TREE_UNSIGNED (type))
1719 warn_for_assignment ("%s as unsigned due to prototype", (char *) 0, name, parmnum + 1);
1720 else
1721 warn_for_assignment ("%s as signed due to prototype", (char *) 0, name, parmnum + 1);
1725 parmval = convert_for_assignment (type, val,
1726 (char *) 0, /* arg passing */
1727 fundecl, name, parmnum + 1);
1729 if (PROMOTE_PROTOTYPES
1730 && INTEGRAL_TYPE_P (type)
1731 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
1732 parmval = default_conversion (parmval);
1734 result = tree_cons (NULL_TREE, parmval, result);
1736 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
1737 && (TYPE_PRECISION (TREE_TYPE (val))
1738 < TYPE_PRECISION (double_type_node)))
1739 /* Convert `float' to `double'. */
1740 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
1741 else
1742 /* Convert `short' and `char' to full-size `int'. */
1743 result = tree_cons (NULL_TREE, default_conversion (val), result);
1745 if (typetail)
1746 typetail = TREE_CHAIN (typetail);
1749 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
1751 if (name)
1752 error ("too few arguments to function `%s'",
1753 IDENTIFIER_POINTER (name));
1754 else
1755 error ("too few arguments to function");
1758 return nreverse (result);
1761 /* This is the entry point used by the parser
1762 for binary operators in the input.
1763 In addition to constructing the expression,
1764 we check for operands that were written with other binary operators
1765 in a way that is likely to confuse the user. */
1767 tree
1768 parser_build_binary_op (code, arg1, arg2)
1769 enum tree_code code;
1770 tree arg1, arg2;
1772 tree result = build_binary_op (code, arg1, arg2, 1);
1774 char class;
1775 char class1 = TREE_CODE_CLASS (TREE_CODE (arg1));
1776 char class2 = TREE_CODE_CLASS (TREE_CODE (arg2));
1777 enum tree_code code1 = ERROR_MARK;
1778 enum tree_code code2 = ERROR_MARK;
1780 if (TREE_CODE (result) == ERROR_MARK)
1781 return error_mark_node;
1783 if (IS_EXPR_CODE_CLASS (class1))
1784 code1 = C_EXP_ORIGINAL_CODE (arg1);
1785 if (IS_EXPR_CODE_CLASS (class2))
1786 code2 = C_EXP_ORIGINAL_CODE (arg2);
1788 /* Check for cases such as x+y<<z which users are likely
1789 to misinterpret. If parens are used, C_EXP_ORIGINAL_CODE
1790 is cleared to prevent these warnings. */
1791 if (warn_parentheses)
1793 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
1795 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1796 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1797 warning ("suggest parentheses around + or - inside shift");
1800 if (code == TRUTH_ORIF_EXPR)
1802 if (code1 == TRUTH_ANDIF_EXPR
1803 || code2 == TRUTH_ANDIF_EXPR)
1804 warning ("suggest parentheses around && within ||");
1807 if (code == BIT_IOR_EXPR)
1809 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
1810 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1811 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
1812 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1813 warning ("suggest parentheses around arithmetic in operand of |");
1814 /* Check cases like x|y==z */
1815 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1816 warning ("suggest parentheses around comparison in operand of |");
1819 if (code == BIT_XOR_EXPR)
1821 if (code1 == BIT_AND_EXPR
1822 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
1823 || code2 == BIT_AND_EXPR
1824 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1825 warning ("suggest parentheses around arithmetic in operand of ^");
1826 /* Check cases like x^y==z */
1827 if (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<')
1828 warning ("suggest parentheses around comparison in operand of ^");
1831 if (code == BIT_AND_EXPR)
1833 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
1834 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
1835 warning ("suggest parentheses around + or - 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 &");
1842 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
1843 if (TREE_CODE_CLASS (code) == '<' && extra_warnings
1844 && (TREE_CODE_CLASS (code1) == '<' || TREE_CODE_CLASS (code2) == '<'))
1845 warning ("comparisons like X<=Y<=Z do not have their mathematical meaning");
1847 unsigned_conversion_warning (result, arg1);
1848 unsigned_conversion_warning (result, arg2);
1849 overflow_warning (result);
1851 class = TREE_CODE_CLASS (TREE_CODE (result));
1853 /* Record the code that was specified in the source,
1854 for the sake of warnings about confusing nesting. */
1855 if (IS_EXPR_CODE_CLASS (class))
1856 C_SET_EXP_ORIGINAL_CODE (result, code);
1857 else
1859 int flag = TREE_CONSTANT (result);
1860 /* We used to use NOP_EXPR rather than NON_LVALUE_EXPR
1861 so that convert_for_assignment wouldn't strip it.
1862 That way, we got warnings for things like p = (1 - 1).
1863 But it turns out we should not get those warnings. */
1864 result = build1 (NON_LVALUE_EXPR, TREE_TYPE (result), result);
1865 C_SET_EXP_ORIGINAL_CODE (result, code);
1866 TREE_CONSTANT (result) = flag;
1869 return result;
1872 /* Build a binary-operation expression without default conversions.
1873 CODE is the kind of expression to build.
1874 This function differs from `build' in several ways:
1875 the data type of the result is computed and recorded in it,
1876 warnings are generated if arg data types are invalid,
1877 special handling for addition and subtraction of pointers is known,
1878 and some optimization is done (operations on narrow ints
1879 are done in the narrower type when that gives the same result).
1880 Constant folding is also done before the result is returned.
1882 Note that the operands will never have enumeral types, or function
1883 or array types, because either they will have the default conversions
1884 performed or they have both just been converted to some other type in which
1885 the arithmetic is to be done. */
1887 tree
1888 build_binary_op (code, orig_op0, orig_op1, convert_p)
1889 enum tree_code code;
1890 tree orig_op0, orig_op1;
1891 int convert_p;
1893 tree type0, type1;
1894 enum tree_code code0, code1;
1895 tree op0, op1;
1897 /* Expression code to give to the expression when it is built.
1898 Normally this is CODE, which is what the caller asked for,
1899 but in some special cases we change it. */
1900 enum tree_code resultcode = code;
1902 /* Data type in which the computation is to be performed.
1903 In the simplest cases this is the common type of the arguments. */
1904 tree result_type = NULL;
1906 /* Nonzero means operands have already been type-converted
1907 in whatever way is necessary.
1908 Zero means they need to be converted to RESULT_TYPE. */
1909 int converted = 0;
1911 /* Nonzero means create the expression with this type, rather than
1912 RESULT_TYPE. */
1913 tree build_type = 0;
1915 /* Nonzero means after finally constructing the expression
1916 convert it to this type. */
1917 tree final_type = 0;
1919 /* Nonzero if this is an operation like MIN or MAX which can
1920 safely be computed in short if both args are promoted shorts.
1921 Also implies COMMON.
1922 -1 indicates a bitwise operation; this makes a difference
1923 in the exact conditions for when it is safe to do the operation
1924 in a narrower mode. */
1925 int shorten = 0;
1927 /* Nonzero if this is a comparison operation;
1928 if both args are promoted shorts, compare the original shorts.
1929 Also implies COMMON. */
1930 int short_compare = 0;
1932 /* Nonzero if this is a right-shift operation, which can be computed on the
1933 original short and then promoted if the operand is a promoted short. */
1934 int short_shift = 0;
1936 /* Nonzero means set RESULT_TYPE to the common type of the args. */
1937 int common = 0;
1939 if (convert_p)
1941 op0 = default_conversion (orig_op0);
1942 op1 = default_conversion (orig_op1);
1944 else
1946 op0 = orig_op0;
1947 op1 = orig_op1;
1950 type0 = TREE_TYPE (op0);
1951 type1 = TREE_TYPE (op1);
1953 /* The expression codes of the data types of the arguments tell us
1954 whether the arguments are integers, floating, pointers, etc. */
1955 code0 = TREE_CODE (type0);
1956 code1 = TREE_CODE (type1);
1958 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
1959 STRIP_TYPE_NOPS (op0);
1960 STRIP_TYPE_NOPS (op1);
1962 /* If an error was already reported for one of the arguments,
1963 avoid reporting another error. */
1965 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
1966 return error_mark_node;
1968 switch (code)
1970 case PLUS_EXPR:
1971 /* Handle the pointer + int case. */
1972 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1973 return pointer_int_sum (PLUS_EXPR, op0, op1);
1974 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
1975 return pointer_int_sum (PLUS_EXPR, op1, op0);
1976 else
1977 common = 1;
1978 break;
1980 case MINUS_EXPR:
1981 /* Subtraction of two similar pointers.
1982 We must subtract them as integers, then divide by object size. */
1983 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
1984 && comp_target_types (type0, type1, 1))
1985 return pointer_diff (op0, op1);
1986 /* Handle pointer minus int. Just like pointer plus int. */
1987 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
1988 return pointer_int_sum (MINUS_EXPR, op0, op1);
1989 else
1990 common = 1;
1991 break;
1993 case MULT_EXPR:
1994 common = 1;
1995 break;
1997 case TRUNC_DIV_EXPR:
1998 case CEIL_DIV_EXPR:
1999 case FLOOR_DIV_EXPR:
2000 case ROUND_DIV_EXPR:
2001 case EXACT_DIV_EXPR:
2002 /* Floating point division by zero is a legitimate way to obtain
2003 infinities and NaNs. */
2004 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
2005 warning ("division by zero");
2007 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2008 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
2009 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2010 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
2012 if (!(code0 == INTEGER_TYPE && code1 == INTEGER_TYPE))
2013 resultcode = RDIV_EXPR;
2014 else
2015 /* Although it would be tempting to shorten always here, that
2016 loses on some targets, since the modulo instruction is
2017 undefined if the quotient can't be represented in the
2018 computation mode. We shorten only if unsigned or if
2019 dividing by something we know != -1. */
2020 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2021 || (TREE_CODE (op1) == INTEGER_CST
2022 && ! integer_all_onesp (op1)));
2023 common = 1;
2025 break;
2027 case BIT_AND_EXPR:
2028 case BIT_ANDTC_EXPR:
2029 case BIT_IOR_EXPR:
2030 case BIT_XOR_EXPR:
2031 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2032 shorten = -1;
2033 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
2034 common = 1;
2035 break;
2037 case TRUNC_MOD_EXPR:
2038 case FLOOR_MOD_EXPR:
2039 if (warn_div_by_zero && skip_evaluation == 0 && integer_zerop (op1))
2040 warning ("division by zero");
2042 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2044 /* Although it would be tempting to shorten always here, that loses
2045 on some targets, since the modulo instruction is undefined if the
2046 quotient can't be represented in the computation mode. We shorten
2047 only if unsigned or if dividing by something we know != -1. */
2048 shorten = (TREE_UNSIGNED (TREE_TYPE (orig_op0))
2049 || (TREE_CODE (op1) == INTEGER_CST
2050 && ! integer_all_onesp (op1)));
2051 common = 1;
2053 break;
2055 case TRUTH_ANDIF_EXPR:
2056 case TRUTH_ORIF_EXPR:
2057 case TRUTH_AND_EXPR:
2058 case TRUTH_OR_EXPR:
2059 case TRUTH_XOR_EXPR:
2060 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
2061 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
2062 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
2063 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
2065 /* Result of these operations is always an int,
2066 but that does not mean the operands should be
2067 converted to ints! */
2068 result_type = integer_type_node;
2069 op0 = c_common_truthvalue_conversion (op0);
2070 op1 = c_common_truthvalue_conversion (op1);
2071 converted = 1;
2073 break;
2075 /* Shift operations: result has same type as first operand;
2076 always convert second operand to int.
2077 Also set SHORT_SHIFT if shifting rightward. */
2079 case RSHIFT_EXPR:
2080 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2082 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2084 if (tree_int_cst_sgn (op1) < 0)
2085 warning ("right shift count is negative");
2086 else
2088 if (! integer_zerop (op1))
2089 short_shift = 1;
2091 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2092 warning ("right shift count >= width of type");
2096 /* Use the type of the value to be shifted. */
2097 result_type = type0;
2098 /* Convert the shift-count to an integer, regardless of size
2099 of value being shifted. */
2100 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2101 op1 = convert (integer_type_node, op1);
2102 /* Avoid converting op1 to result_type later. */
2103 converted = 1;
2105 break;
2107 case LSHIFT_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 ("left shift count is negative");
2115 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2116 warning ("left shift count >= width of type");
2119 /* Use the type of the value to be shifted. */
2120 result_type = type0;
2121 /* Convert the shift-count to an integer, regardless of size
2122 of value being shifted. */
2123 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2124 op1 = convert (integer_type_node, op1);
2125 /* Avoid converting op1 to result_type later. */
2126 converted = 1;
2128 break;
2130 case RROTATE_EXPR:
2131 case LROTATE_EXPR:
2132 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
2134 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
2136 if (tree_int_cst_sgn (op1) < 0)
2137 warning ("shift count is negative");
2138 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
2139 warning ("shift count >= width of type");
2142 /* Use the type of the value to be shifted. */
2143 result_type = type0;
2144 /* Convert the shift-count to an integer, regardless of size
2145 of value being shifted. */
2146 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
2147 op1 = convert (integer_type_node, op1);
2148 /* Avoid converting op1 to result_type later. */
2149 converted = 1;
2151 break;
2153 case EQ_EXPR:
2154 case NE_EXPR:
2155 if (warn_float_equal && (code0 == REAL_TYPE || code1 == REAL_TYPE))
2156 warning ("comparing floating point with == or != is unsafe");
2157 /* Result of comparison is always int,
2158 but don't convert the args to int! */
2159 build_type = integer_type_node;
2160 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
2161 || code0 == COMPLEX_TYPE
2162 || code0 == VECTOR_TYPE)
2163 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
2164 || code1 == COMPLEX_TYPE
2165 || code1 == VECTOR_TYPE))
2166 short_compare = 1;
2167 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2169 tree tt0 = TREE_TYPE (type0);
2170 tree tt1 = TREE_TYPE (type1);
2171 /* Anything compares with void *. void * compares with anything.
2172 Otherwise, the targets must be compatible
2173 and both must be object or both incomplete. */
2174 if (comp_target_types (type0, type1, 1))
2175 result_type = common_type (type0, type1);
2176 else if (VOID_TYPE_P (tt0))
2178 /* op0 != orig_op0 detects the case of something
2179 whose value is 0 but which isn't a valid null ptr const. */
2180 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
2181 && TREE_CODE (tt1) == FUNCTION_TYPE)
2182 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
2184 else if (VOID_TYPE_P (tt1))
2186 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
2187 && TREE_CODE (tt0) == FUNCTION_TYPE)
2188 pedwarn ("ISO C forbids comparison of `void *' with function pointer");
2190 else
2191 pedwarn ("comparison of distinct pointer types lacks a cast");
2193 if (result_type == NULL_TREE)
2194 result_type = ptr_type_node;
2196 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2197 && integer_zerop (op1))
2198 result_type = type0;
2199 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2200 && integer_zerop (op0))
2201 result_type = type1;
2202 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2204 result_type = type0;
2205 pedwarn ("comparison between pointer and integer");
2207 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2209 result_type = type1;
2210 pedwarn ("comparison between pointer and integer");
2212 break;
2214 case MAX_EXPR:
2215 case MIN_EXPR:
2216 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2217 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2218 shorten = 1;
2219 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2221 if (comp_target_types (type0, type1, 1))
2223 result_type = common_type (type0, type1);
2224 if (pedantic
2225 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2226 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
2228 else
2230 result_type = ptr_type_node;
2231 pedwarn ("comparison of distinct pointer types lacks a cast");
2234 break;
2236 case LE_EXPR:
2237 case GE_EXPR:
2238 case LT_EXPR:
2239 case GT_EXPR:
2240 build_type = integer_type_node;
2241 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
2242 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
2243 short_compare = 1;
2244 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
2246 if (comp_target_types (type0, type1, 1))
2248 result_type = common_type (type0, type1);
2249 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
2250 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
2251 pedwarn ("comparison of complete and incomplete pointers");
2252 else if (pedantic
2253 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
2254 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
2256 else
2258 result_type = ptr_type_node;
2259 pedwarn ("comparison of distinct pointer types lacks a cast");
2262 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
2263 && integer_zerop (op1))
2265 result_type = type0;
2266 if (pedantic || extra_warnings)
2267 pedwarn ("ordered comparison of pointer with integer zero");
2269 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
2270 && integer_zerop (op0))
2272 result_type = type1;
2273 if (pedantic)
2274 pedwarn ("ordered comparison of pointer with integer zero");
2276 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
2278 result_type = type0;
2279 pedwarn ("comparison between pointer and integer");
2281 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
2283 result_type = type1;
2284 pedwarn ("comparison between pointer and integer");
2286 break;
2288 case UNORDERED_EXPR:
2289 case ORDERED_EXPR:
2290 case UNLT_EXPR:
2291 case UNLE_EXPR:
2292 case UNGT_EXPR:
2293 case UNGE_EXPR:
2294 case UNEQ_EXPR:
2295 build_type = integer_type_node;
2296 if (code0 != REAL_TYPE || code1 != REAL_TYPE)
2298 error ("unordered comparison on non-floating point argument");
2299 return error_mark_node;
2301 common = 1;
2302 break;
2304 default:
2305 break;
2308 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
2309 || code0 == VECTOR_TYPE)
2311 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
2312 || code1 == VECTOR_TYPE))
2314 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
2316 if (shorten || common || short_compare)
2317 result_type = common_type (type0, type1);
2319 /* For certain operations (which identify themselves by shorten != 0)
2320 if both args were extended from the same smaller type,
2321 do the arithmetic in that type and then extend.
2323 shorten !=0 and !=1 indicates a bitwise operation.
2324 For them, this optimization is safe only if
2325 both args are zero-extended or both are sign-extended.
2326 Otherwise, we might change the result.
2327 Eg, (short)-1 | (unsigned short)-1 is (int)-1
2328 but calculated in (unsigned short) it would be (unsigned short)-1. */
2330 if (shorten && none_complex)
2332 int unsigned0, unsigned1;
2333 tree arg0 = get_narrower (op0, &unsigned0);
2334 tree arg1 = get_narrower (op1, &unsigned1);
2335 /* UNS is 1 if the operation to be done is an unsigned one. */
2336 int uns = TREE_UNSIGNED (result_type);
2337 tree type;
2339 final_type = result_type;
2341 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
2342 but it *requires* conversion to FINAL_TYPE. */
2344 if ((TYPE_PRECISION (TREE_TYPE (op0))
2345 == TYPE_PRECISION (TREE_TYPE (arg0)))
2346 && TREE_TYPE (op0) != final_type)
2347 unsigned0 = TREE_UNSIGNED (TREE_TYPE (op0));
2348 if ((TYPE_PRECISION (TREE_TYPE (op1))
2349 == TYPE_PRECISION (TREE_TYPE (arg1)))
2350 && TREE_TYPE (op1) != final_type)
2351 unsigned1 = TREE_UNSIGNED (TREE_TYPE (op1));
2353 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
2355 /* For bitwise operations, signedness of nominal type
2356 does not matter. Consider only how operands were extended. */
2357 if (shorten == -1)
2358 uns = unsigned0;
2360 /* Note that in all three cases below we refrain from optimizing
2361 an unsigned operation on sign-extended args.
2362 That would not be valid. */
2364 /* Both args variable: if both extended in same way
2365 from same width, do it in that width.
2366 Do it unsigned if args were zero-extended. */
2367 if ((TYPE_PRECISION (TREE_TYPE (arg0))
2368 < TYPE_PRECISION (result_type))
2369 && (TYPE_PRECISION (TREE_TYPE (arg1))
2370 == TYPE_PRECISION (TREE_TYPE (arg0)))
2371 && unsigned0 == unsigned1
2372 && (unsigned0 || !uns))
2373 result_type
2374 = c_common_signed_or_unsigned_type
2375 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
2376 else if (TREE_CODE (arg0) == INTEGER_CST
2377 && (unsigned1 || !uns)
2378 && (TYPE_PRECISION (TREE_TYPE (arg1))
2379 < TYPE_PRECISION (result_type))
2380 && (type
2381 = c_common_signed_or_unsigned_type (unsigned1,
2382 TREE_TYPE (arg1)),
2383 int_fits_type_p (arg0, type)))
2384 result_type = type;
2385 else if (TREE_CODE (arg1) == INTEGER_CST
2386 && (unsigned0 || !uns)
2387 && (TYPE_PRECISION (TREE_TYPE (arg0))
2388 < TYPE_PRECISION (result_type))
2389 && (type
2390 = c_common_signed_or_unsigned_type (unsigned0,
2391 TREE_TYPE (arg0)),
2392 int_fits_type_p (arg1, type)))
2393 result_type = type;
2396 /* Shifts can be shortened if shifting right. */
2398 if (short_shift)
2400 int unsigned_arg;
2401 tree arg0 = get_narrower (op0, &unsigned_arg);
2403 final_type = result_type;
2405 if (arg0 == op0 && final_type == TREE_TYPE (op0))
2406 unsigned_arg = TREE_UNSIGNED (TREE_TYPE (op0));
2408 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
2409 /* We can shorten only if the shift count is less than the
2410 number of bits in the smaller type size. */
2411 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
2412 /* We cannot drop an unsigned shift after sign-extension. */
2413 && (!TREE_UNSIGNED (final_type) || unsigned_arg))
2415 /* Do an unsigned shift if the operand was zero-extended. */
2416 result_type
2417 = c_common_signed_or_unsigned_type (unsigned_arg,
2418 TREE_TYPE (arg0));
2419 /* Convert value-to-be-shifted to that type. */
2420 if (TREE_TYPE (op0) != result_type)
2421 op0 = convert (result_type, op0);
2422 converted = 1;
2426 /* Comparison operations are shortened too but differently.
2427 They identify themselves by setting short_compare = 1. */
2429 if (short_compare)
2431 /* Don't write &op0, etc., because that would prevent op0
2432 from being kept in a register.
2433 Instead, make copies of the our local variables and
2434 pass the copies by reference, then copy them back afterward. */
2435 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
2436 enum tree_code xresultcode = resultcode;
2437 tree val
2438 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
2440 if (val != 0)
2441 return val;
2443 op0 = xop0, op1 = xop1;
2444 converted = 1;
2445 resultcode = xresultcode;
2447 if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare != 0)
2448 && skip_evaluation == 0)
2450 int op0_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op0));
2451 int op1_signed = ! TREE_UNSIGNED (TREE_TYPE (orig_op1));
2452 int unsignedp0, unsignedp1;
2453 tree primop0 = get_narrower (op0, &unsignedp0);
2454 tree primop1 = get_narrower (op1, &unsignedp1);
2456 xop0 = orig_op0;
2457 xop1 = orig_op1;
2458 STRIP_TYPE_NOPS (xop0);
2459 STRIP_TYPE_NOPS (xop1);
2461 /* Give warnings for comparisons between signed and unsigned
2462 quantities that may fail.
2464 Do the checking based on the original operand trees, so that
2465 casts will be considered, but default promotions won't be.
2467 Do not warn if the comparison is being done in a signed type,
2468 since the signed type will only be chosen if it can represent
2469 all the values of the unsigned type. */
2470 if (! TREE_UNSIGNED (result_type))
2471 /* OK */;
2472 /* Do not warn if both operands are the same signedness. */
2473 else if (op0_signed == op1_signed)
2474 /* OK */;
2475 else
2477 tree sop, uop;
2479 if (op0_signed)
2480 sop = xop0, uop = xop1;
2481 else
2482 sop = xop1, uop = xop0;
2484 /* Do not warn if the signed quantity is an
2485 unsuffixed integer literal (or some static
2486 constant expression involving such literals or a
2487 conditional expression involving such literals)
2488 and it is non-negative. */
2489 if (c_tree_expr_nonnegative_p (sop))
2490 /* OK */;
2491 /* Do not warn if the comparison is an equality operation,
2492 the unsigned quantity is an integral constant, and it
2493 would fit in the result if the result were signed. */
2494 else if (TREE_CODE (uop) == INTEGER_CST
2495 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
2496 && int_fits_type_p
2497 (uop, c_common_signed_type (result_type)))
2498 /* OK */;
2499 /* Do not warn if the unsigned quantity is an enumeration
2500 constant and its maximum value would fit in the result
2501 if the result were signed. */
2502 else if (TREE_CODE (uop) == INTEGER_CST
2503 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
2504 && int_fits_type_p
2505 (TYPE_MAX_VALUE (TREE_TYPE(uop)),
2506 c_common_signed_type (result_type)))
2507 /* OK */;
2508 else
2509 warning ("comparison between signed and unsigned");
2512 /* Warn if two unsigned values are being compared in a size
2513 larger than their original size, and one (and only one) is the
2514 result of a `~' operator. This comparison will always fail.
2516 Also warn if one operand is a constant, and the constant
2517 does not have all bits set that are set in the ~ operand
2518 when it is extended. */
2520 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
2521 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
2523 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
2524 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
2525 &unsignedp0);
2526 else
2527 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
2528 &unsignedp1);
2530 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
2532 tree primop;
2533 HOST_WIDE_INT constant, mask;
2534 int unsignedp, bits;
2536 if (host_integerp (primop0, 0))
2538 primop = primop1;
2539 unsignedp = unsignedp1;
2540 constant = tree_low_cst (primop0, 0);
2542 else
2544 primop = primop0;
2545 unsignedp = unsignedp0;
2546 constant = tree_low_cst (primop1, 0);
2549 bits = TYPE_PRECISION (TREE_TYPE (primop));
2550 if (bits < TYPE_PRECISION (result_type)
2551 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
2553 mask = (~ (HOST_WIDE_INT) 0) << bits;
2554 if ((mask & constant) != mask)
2555 warning ("comparison of promoted ~unsigned with constant");
2558 else if (unsignedp0 && unsignedp1
2559 && (TYPE_PRECISION (TREE_TYPE (primop0))
2560 < TYPE_PRECISION (result_type))
2561 && (TYPE_PRECISION (TREE_TYPE (primop1))
2562 < TYPE_PRECISION (result_type)))
2563 warning ("comparison of promoted ~unsigned with unsigned");
2569 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
2570 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
2571 Then the expression will be built.
2572 It will be given type FINAL_TYPE if that is nonzero;
2573 otherwise, it will be given type RESULT_TYPE. */
2575 if (!result_type)
2577 binary_op_error (code);
2578 return error_mark_node;
2581 if (! converted)
2583 if (TREE_TYPE (op0) != result_type)
2584 op0 = convert (result_type, op0);
2585 if (TREE_TYPE (op1) != result_type)
2586 op1 = convert (result_type, op1);
2589 if (build_type == NULL_TREE)
2590 build_type = result_type;
2593 tree result = build (resultcode, build_type, op0, op1);
2594 tree folded;
2596 folded = fold (result);
2597 if (folded == result)
2598 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2599 if (final_type != 0)
2600 return convert (final_type, folded);
2601 return folded;
2606 /* Return true if `t' is known to be non-negative. */
2609 c_tree_expr_nonnegative_p (t)
2610 tree t;
2612 if (TREE_CODE (t) == STMT_EXPR)
2614 t = COMPOUND_BODY (STMT_EXPR_STMT (t));
2616 /* Find the last statement in the chain, ignoring the final
2617 * scope statement */
2618 while (TREE_CHAIN (t) != NULL_TREE
2619 && TREE_CODE (TREE_CHAIN (t)) != SCOPE_STMT)
2620 t = TREE_CHAIN (t);
2621 return tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
2623 return tree_expr_nonnegative_p (t);
2626 /* Return a tree for the difference of pointers OP0 and OP1.
2627 The resulting tree has type int. */
2629 static tree
2630 pointer_diff (op0, op1)
2631 tree op0, op1;
2633 tree result, folded;
2634 tree restype = ptrdiff_type_node;
2636 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2637 tree con0, con1, lit0, lit1;
2638 tree orig_op1 = op1;
2640 if (pedantic || warn_pointer_arith)
2642 if (TREE_CODE (target_type) == VOID_TYPE)
2643 pedwarn ("pointer of type `void *' used in subtraction");
2644 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2645 pedwarn ("pointer to a function used in subtraction");
2648 /* If the conversion to ptrdiff_type does anything like widening or
2649 converting a partial to an integral mode, we get a convert_expression
2650 that is in the way to do any simplifications.
2651 (fold-const.c doesn't know that the extra bits won't be needed.
2652 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2653 different mode in place.)
2654 So first try to find a common term here 'by hand'; we want to cover
2655 at least the cases that occur in legal static initializers. */
2656 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2657 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
2659 if (TREE_CODE (con0) == PLUS_EXPR)
2661 lit0 = TREE_OPERAND (con0, 1);
2662 con0 = TREE_OPERAND (con0, 0);
2664 else
2665 lit0 = integer_zero_node;
2667 if (TREE_CODE (con1) == PLUS_EXPR)
2669 lit1 = TREE_OPERAND (con1, 1);
2670 con1 = TREE_OPERAND (con1, 0);
2672 else
2673 lit1 = integer_zero_node;
2675 if (operand_equal_p (con0, con1, 0))
2677 op0 = lit0;
2678 op1 = lit1;
2682 /* First do the subtraction as integers;
2683 then drop through to build the divide operator.
2684 Do not do default conversions on the minus operator
2685 in case restype is a short type. */
2687 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2688 convert (restype, op1), 0);
2689 /* This generates an error if op1 is pointer to incomplete type. */
2690 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2691 error ("arithmetic on pointer to an incomplete type");
2693 /* This generates an error if op0 is pointer to incomplete type. */
2694 op1 = c_size_in_bytes (target_type);
2696 /* Divide by the size, in easiest possible way. */
2698 result = build (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2700 folded = fold (result);
2701 if (folded == result)
2702 TREE_CONSTANT (folded) = TREE_CONSTANT (op0) & TREE_CONSTANT (op1);
2703 return folded;
2706 /* Construct and perhaps optimize a tree representation
2707 for a unary operation. CODE, a tree_code, specifies the operation
2708 and XARG is the operand.
2709 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2710 the default promotions (such as from short to int).
2711 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2712 allows non-lvalues; this is only used to handle conversion of non-lvalue
2713 arrays to pointers in C99. */
2715 tree
2716 build_unary_op (code, xarg, flag)
2717 enum tree_code code;
2718 tree xarg;
2719 int flag;
2721 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2722 tree arg = xarg;
2723 tree argtype = 0;
2724 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2725 tree val;
2726 int noconvert = flag;
2728 if (typecode == ERROR_MARK)
2729 return error_mark_node;
2730 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2731 typecode = INTEGER_TYPE;
2733 switch (code)
2735 case CONVERT_EXPR:
2736 /* This is used for unary plus, because a CONVERT_EXPR
2737 is enough to prevent anybody from looking inside for
2738 associativity, but won't generate any code. */
2739 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2740 || typecode == COMPLEX_TYPE))
2742 error ("wrong type argument to unary plus");
2743 return error_mark_node;
2745 else if (!noconvert)
2746 arg = default_conversion (arg);
2747 arg = non_lvalue (arg);
2748 break;
2750 case NEGATE_EXPR:
2751 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2752 || typecode == COMPLEX_TYPE
2753 || typecode == VECTOR_TYPE))
2755 error ("wrong type argument to unary minus");
2756 return error_mark_node;
2758 else if (!noconvert)
2759 arg = default_conversion (arg);
2760 break;
2762 case BIT_NOT_EXPR:
2763 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
2765 if (!noconvert)
2766 arg = default_conversion (arg);
2768 else if (typecode == COMPLEX_TYPE)
2770 code = CONJ_EXPR;
2771 if (pedantic)
2772 pedwarn ("ISO C does not support `~' for complex conjugation");
2773 if (!noconvert)
2774 arg = default_conversion (arg);
2776 else
2778 error ("wrong type argument to bit-complement");
2779 return error_mark_node;
2781 break;
2783 case ABS_EXPR:
2784 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2785 || typecode == COMPLEX_TYPE))
2787 error ("wrong type argument to abs");
2788 return error_mark_node;
2790 else if (!noconvert)
2791 arg = default_conversion (arg);
2792 break;
2794 case CONJ_EXPR:
2795 /* Conjugating a real value is a no-op, but allow it anyway. */
2796 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2797 || typecode == COMPLEX_TYPE))
2799 error ("wrong type argument to conjugation");
2800 return error_mark_node;
2802 else if (!noconvert)
2803 arg = default_conversion (arg);
2804 break;
2806 case TRUTH_NOT_EXPR:
2807 if (typecode != INTEGER_TYPE
2808 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2809 && typecode != COMPLEX_TYPE
2810 /* These will convert to a pointer. */
2811 && typecode != ARRAY_TYPE && typecode != FUNCTION_TYPE)
2813 error ("wrong type argument to unary exclamation mark");
2814 return error_mark_node;
2816 arg = c_common_truthvalue_conversion (arg);
2817 return invert_truthvalue (arg);
2819 case NOP_EXPR:
2820 break;
2822 case REALPART_EXPR:
2823 if (TREE_CODE (arg) == COMPLEX_CST)
2824 return TREE_REALPART (arg);
2825 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2826 return fold (build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2827 else
2828 return arg;
2830 case IMAGPART_EXPR:
2831 if (TREE_CODE (arg) == COMPLEX_CST)
2832 return TREE_IMAGPART (arg);
2833 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2834 return fold (build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg));
2835 else
2836 return convert (TREE_TYPE (arg), integer_zero_node);
2838 case PREINCREMENT_EXPR:
2839 case POSTINCREMENT_EXPR:
2840 case PREDECREMENT_EXPR:
2841 case POSTDECREMENT_EXPR:
2842 /* Handle complex lvalues (when permitted)
2843 by reduction to simpler cases. */
2845 val = unary_complex_lvalue (code, arg, 0);
2846 if (val != 0)
2847 return val;
2849 /* Increment or decrement the real part of the value,
2850 and don't change the imaginary part. */
2851 if (typecode == COMPLEX_TYPE)
2853 tree real, imag;
2855 if (pedantic)
2856 pedwarn ("ISO C does not support `++' and `--' on complex types");
2858 arg = stabilize_reference (arg);
2859 real = build_unary_op (REALPART_EXPR, arg, 1);
2860 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2861 return build (COMPLEX_EXPR, TREE_TYPE (arg),
2862 build_unary_op (code, real, 1), imag);
2865 /* Report invalid types. */
2867 if (typecode != POINTER_TYPE
2868 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2870 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2871 error ("wrong type argument to increment");
2872 else
2873 error ("wrong type argument to decrement");
2875 return error_mark_node;
2879 tree inc;
2880 tree result_type = TREE_TYPE (arg);
2882 arg = get_unwidened (arg, 0);
2883 argtype = TREE_TYPE (arg);
2885 /* Compute the increment. */
2887 if (typecode == POINTER_TYPE)
2889 /* If pointer target is an undefined struct,
2890 we just cannot know how to do the arithmetic. */
2891 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2893 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2894 error ("increment of pointer to unknown structure");
2895 else
2896 error ("decrement of pointer to unknown structure");
2898 else if ((pedantic || warn_pointer_arith)
2899 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2900 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2902 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2903 pedwarn ("wrong type argument to increment");
2904 else
2905 pedwarn ("wrong type argument to decrement");
2908 inc = c_size_in_bytes (TREE_TYPE (result_type));
2910 else
2911 inc = integer_one_node;
2913 inc = convert (argtype, inc);
2915 /* Handle incrementing a cast-expression. */
2917 while (1)
2918 switch (TREE_CODE (arg))
2920 case NOP_EXPR:
2921 case CONVERT_EXPR:
2922 case FLOAT_EXPR:
2923 case FIX_TRUNC_EXPR:
2924 case FIX_FLOOR_EXPR:
2925 case FIX_ROUND_EXPR:
2926 case FIX_CEIL_EXPR:
2927 pedantic_lvalue_warning (CONVERT_EXPR);
2928 /* If the real type has the same machine representation
2929 as the type it is cast to, we can make better output
2930 by adding directly to the inside of the cast. */
2931 if ((TREE_CODE (TREE_TYPE (arg))
2932 == TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))))
2933 && (TYPE_MODE (TREE_TYPE (arg))
2934 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (arg, 0)))))
2935 arg = TREE_OPERAND (arg, 0);
2936 else
2938 tree incremented, modify, value;
2939 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2940 value = boolean_increment (code, arg);
2941 else
2943 arg = stabilize_reference (arg);
2944 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
2945 value = arg;
2946 else
2947 value = save_expr (arg);
2948 incremented = build (((code == PREINCREMENT_EXPR
2949 || code == POSTINCREMENT_EXPR)
2950 ? PLUS_EXPR : MINUS_EXPR),
2951 argtype, value, inc);
2952 TREE_SIDE_EFFECTS (incremented) = 1;
2953 modify = build_modify_expr (arg, NOP_EXPR, incremented);
2954 value = build (COMPOUND_EXPR, TREE_TYPE (arg), modify, value);
2956 TREE_USED (value) = 1;
2957 return value;
2959 break;
2961 default:
2962 goto give_up;
2964 give_up:
2966 /* Complain about anything else that is not a true lvalue. */
2967 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2968 || code == POSTINCREMENT_EXPR)
2969 ? "invalid lvalue in increment"
2970 : "invalid lvalue in decrement")))
2971 return error_mark_node;
2973 /* Report a read-only lvalue. */
2974 if (TREE_READONLY (arg))
2975 readonly_warning (arg,
2976 ((code == PREINCREMENT_EXPR
2977 || code == POSTINCREMENT_EXPR)
2978 ? "increment" : "decrement"));
2980 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2981 val = boolean_increment (code, arg);
2982 else
2983 val = build (code, TREE_TYPE (arg), arg, inc);
2984 TREE_SIDE_EFFECTS (val) = 1;
2985 val = convert (result_type, val);
2986 if (TREE_CODE (val) != code)
2987 TREE_NO_UNUSED_WARNING (val) = 1;
2988 return val;
2991 case ADDR_EXPR:
2992 /* Note that this operation never does default_conversion. */
2994 /* Let &* cancel out to simplify resulting code. */
2995 if (TREE_CODE (arg) == INDIRECT_REF)
2997 /* Don't let this be an lvalue. */
2998 if (lvalue_p (TREE_OPERAND (arg, 0)))
2999 return non_lvalue (TREE_OPERAND (arg, 0));
3000 return TREE_OPERAND (arg, 0);
3003 /* For &x[y], return x+y */
3004 if (TREE_CODE (arg) == ARRAY_REF)
3006 if (!c_mark_addressable (TREE_OPERAND (arg, 0)))
3007 return error_mark_node;
3008 return build_binary_op (PLUS_EXPR, TREE_OPERAND (arg, 0),
3009 TREE_OPERAND (arg, 1), 1);
3012 /* Handle complex lvalues (when permitted)
3013 by reduction to simpler cases. */
3014 val = unary_complex_lvalue (code, arg, flag);
3015 if (val != 0)
3016 return val;
3018 #if 0 /* Turned off because inconsistent;
3019 float f; *&(int)f = 3.4 stores in int format
3020 whereas (int)f = 3.4 stores in float format. */
3021 /* Address of a cast is just a cast of the address
3022 of the operand of the cast. */
3023 switch (TREE_CODE (arg))
3025 case NOP_EXPR:
3026 case CONVERT_EXPR:
3027 case FLOAT_EXPR:
3028 case FIX_TRUNC_EXPR:
3029 case FIX_FLOOR_EXPR:
3030 case FIX_ROUND_EXPR:
3031 case FIX_CEIL_EXPR:
3032 if (pedantic)
3033 pedwarn ("ISO C forbids the address of a cast expression");
3034 return convert (build_pointer_type (TREE_TYPE (arg)),
3035 build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0),
3036 0));
3038 #endif
3040 /* Anything not already handled and not a true memory reference
3041 or a non-lvalue array is an error. */
3042 else if (typecode != FUNCTION_TYPE && !flag
3043 && !lvalue_or_else (arg, "invalid lvalue in unary `&'"))
3044 return error_mark_node;
3046 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
3047 argtype = TREE_TYPE (arg);
3049 /* If the lvalue is const or volatile, merge that into the type
3050 to which the address will point. Note that you can't get a
3051 restricted pointer by taking the address of something, so we
3052 only have to deal with `const' and `volatile' here. */
3053 if ((DECL_P (arg) || TREE_CODE_CLASS (TREE_CODE (arg)) == 'r')
3054 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
3055 argtype = c_build_type_variant (argtype,
3056 TREE_READONLY (arg),
3057 TREE_THIS_VOLATILE (arg));
3059 argtype = build_pointer_type (argtype);
3061 if (!c_mark_addressable (arg))
3062 return error_mark_node;
3065 tree addr;
3067 if (TREE_CODE (arg) == COMPONENT_REF)
3069 tree field = TREE_OPERAND (arg, 1);
3071 addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (arg, 0), flag);
3073 if (DECL_C_BIT_FIELD (field))
3075 error ("attempt to take address of bit-field structure member `%s'",
3076 IDENTIFIER_POINTER (DECL_NAME (field)));
3077 return error_mark_node;
3080 addr = fold (build (PLUS_EXPR, argtype,
3081 convert (argtype, addr),
3082 convert (argtype, byte_position (field))));
3084 else
3085 addr = build1 (code, argtype, arg);
3087 /* Address of a static or external variable or
3088 file-scope function counts as a constant. */
3089 if (staticp (arg)
3090 && ! (TREE_CODE (arg) == FUNCTION_DECL
3091 && DECL_CONTEXT (arg) != 0))
3092 TREE_CONSTANT (addr) = 1;
3093 return addr;
3096 default:
3097 break;
3100 if (argtype == 0)
3101 argtype = TREE_TYPE (arg);
3102 return fold (build1 (code, argtype, arg));
3105 #if 0
3106 /* If CONVERSIONS is a conversion expression or a nested sequence of such,
3107 convert ARG with the same conversions in the same order
3108 and return the result. */
3110 static tree
3111 convert_sequence (conversions, arg)
3112 tree conversions;
3113 tree arg;
3115 switch (TREE_CODE (conversions))
3117 case NOP_EXPR:
3118 case CONVERT_EXPR:
3119 case FLOAT_EXPR:
3120 case FIX_TRUNC_EXPR:
3121 case FIX_FLOOR_EXPR:
3122 case FIX_ROUND_EXPR:
3123 case FIX_CEIL_EXPR:
3124 return convert (TREE_TYPE (conversions),
3125 convert_sequence (TREE_OPERAND (conversions, 0),
3126 arg));
3128 default:
3129 return arg;
3132 #endif /* 0 */
3134 /* Return nonzero if REF is an lvalue valid for this language.
3135 Lvalues can be assigned, unless their type has TYPE_READONLY.
3136 Lvalues can have their address taken, unless they have DECL_REGISTER. */
3139 lvalue_p (ref)
3140 tree ref;
3142 enum tree_code code = TREE_CODE (ref);
3144 switch (code)
3146 case REALPART_EXPR:
3147 case IMAGPART_EXPR:
3148 case COMPONENT_REF:
3149 return lvalue_p (TREE_OPERAND (ref, 0));
3151 case COMPOUND_LITERAL_EXPR:
3152 case STRING_CST:
3153 return 1;
3155 case INDIRECT_REF:
3156 case ARRAY_REF:
3157 case VAR_DECL:
3158 case PARM_DECL:
3159 case RESULT_DECL:
3160 case ERROR_MARK:
3161 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3162 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
3164 case BIND_EXPR:
3165 case RTL_EXPR:
3166 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
3168 default:
3169 return 0;
3173 /* Return nonzero if REF is an lvalue valid for this language;
3174 otherwise, print an error message and return zero. */
3177 lvalue_or_else (ref, msgid)
3178 tree ref;
3179 const char *msgid;
3181 int win = lvalue_p (ref);
3183 if (! win)
3184 error ("%s", msgid);
3186 return win;
3189 /* Apply unary lvalue-demanding operator CODE to the expression ARG
3190 for certain kinds of expressions which are not really lvalues
3191 but which we can accept as lvalues. If FLAG is nonzero, then
3192 non-lvalues are OK since we may be converting a non-lvalue array to
3193 a pointer in C99.
3195 If ARG is not a kind of expression we can handle, return zero. */
3197 static tree
3198 unary_complex_lvalue (code, arg, flag)
3199 enum tree_code code;
3200 tree arg;
3201 int flag;
3203 /* Handle (a, b) used as an "lvalue". */
3204 if (TREE_CODE (arg) == COMPOUND_EXPR)
3206 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
3208 /* If this returns a function type, it isn't really being used as
3209 an lvalue, so don't issue a warning about it. */
3210 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag)
3211 pedantic_lvalue_warning (COMPOUND_EXPR);
3213 return build (COMPOUND_EXPR, TREE_TYPE (real_result),
3214 TREE_OPERAND (arg, 0), real_result);
3217 /* Handle (a ? b : c) used as an "lvalue". */
3218 if (TREE_CODE (arg) == COND_EXPR)
3220 if (!flag)
3221 pedantic_lvalue_warning (COND_EXPR);
3222 if (TREE_CODE (TREE_TYPE (arg)) != FUNCTION_TYPE && !flag)
3223 pedantic_lvalue_warning (COMPOUND_EXPR);
3225 return (build_conditional_expr
3226 (TREE_OPERAND (arg, 0),
3227 build_unary_op (code, TREE_OPERAND (arg, 1), flag),
3228 build_unary_op (code, TREE_OPERAND (arg, 2), flag)));
3231 return 0;
3234 /* If pedantic, warn about improper lvalue. CODE is either COND_EXPR
3235 COMPOUND_EXPR, or CONVERT_EXPR (for casts). */
3237 static void
3238 pedantic_lvalue_warning (code)
3239 enum tree_code code;
3241 if (pedantic)
3242 switch (code)
3244 case COND_EXPR:
3245 pedwarn ("ISO C forbids use of conditional expressions as lvalues");
3246 break;
3247 case COMPOUND_EXPR:
3248 pedwarn ("ISO C forbids use of compound expressions as lvalues");
3249 break;
3250 default:
3251 pedwarn ("ISO C forbids use of cast expressions as lvalues");
3252 break;
3256 /* Warn about storing in something that is `const'. */
3258 void
3259 readonly_warning (arg, msgid)
3260 tree arg;
3261 const char *msgid;
3263 if (TREE_CODE (arg) == COMPONENT_REF)
3265 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3266 readonly_warning (TREE_OPERAND (arg, 0), msgid);
3267 else
3268 pedwarn ("%s of read-only member `%s'", _(msgid),
3269 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (arg, 1))));
3271 else if (TREE_CODE (arg) == VAR_DECL)
3272 pedwarn ("%s of read-only variable `%s'", _(msgid),
3273 IDENTIFIER_POINTER (DECL_NAME (arg)));
3274 else
3275 pedwarn ("%s of read-only location", _(msgid));
3278 /* Mark EXP saying that we need to be able to take the
3279 address of it; it should not be allocated in a register.
3280 Returns true if successful. */
3282 bool
3283 c_mark_addressable (exp)
3284 tree exp;
3286 tree x = exp;
3288 while (1)
3289 switch (TREE_CODE (x))
3291 case COMPONENT_REF:
3292 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
3294 error ("cannot take address of bit-field `%s'",
3295 IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (x, 1))));
3296 return false;
3299 /* ... fall through ... */
3301 case ADDR_EXPR:
3302 case ARRAY_REF:
3303 case REALPART_EXPR:
3304 case IMAGPART_EXPR:
3305 x = TREE_OPERAND (x, 0);
3306 break;
3308 case COMPOUND_LITERAL_EXPR:
3309 case CONSTRUCTOR:
3310 TREE_ADDRESSABLE (x) = 1;
3311 return true;
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 false;
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 false;
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 false;
3349 pedwarn ("address of register variable `%s' requested",
3350 IDENTIFIER_POINTER (DECL_NAME (x)));
3352 put_var_into_stack (x, /*rescan=*/true);
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 true;
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 tree type1;
3374 tree type2;
3375 enum tree_code code1;
3376 enum tree_code code2;
3377 tree result_type = NULL;
3378 tree orig_op1 = op1, orig_op2 = op2;
3380 ifexp = c_common_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 || code1 == COMPLEX_TYPE)
3427 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3428 || code2 == COMPLEX_TYPE))
3430 result_type = common_type (type1, type2);
3432 /* If -Wsign-compare, warn here if type1 and type2 have
3433 different signedness. We'll promote the signed to unsigned
3434 and later code won't know it used to be different.
3435 Do this check on the original types, so that explicit casts
3436 will be considered, but default promotions won't. */
3437 if ((warn_sign_compare < 0 ? extra_warnings : warn_sign_compare)
3438 && !skip_evaluation)
3440 int unsigned_op1 = TREE_UNSIGNED (TREE_TYPE (orig_op1));
3441 int unsigned_op2 = TREE_UNSIGNED (TREE_TYPE (orig_op2));
3443 if (unsigned_op1 ^ unsigned_op2)
3445 /* Do not warn if the result type is signed, since the
3446 signed type will only be chosen if it can represent
3447 all the values of the unsigned type. */
3448 if (! TREE_UNSIGNED (result_type))
3449 /* OK */;
3450 /* Do not warn if the signed quantity is an unsuffixed
3451 integer literal (or some static constant expression
3452 involving such literals) and it is non-negative. */
3453 else if ((unsigned_op2 && c_tree_expr_nonnegative_p (op1))
3454 || (unsigned_op1 && c_tree_expr_nonnegative_p (op2)))
3455 /* OK */;
3456 else
3457 warning ("signed and unsigned type in conditional expression");
3461 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3463 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3464 pedwarn ("ISO C forbids conditional expr with only one void side");
3465 result_type = void_type_node;
3467 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3469 if (comp_target_types (type1, type2, 1))
3470 result_type = common_type (type1, type2);
3471 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3472 && TREE_CODE (orig_op1) != NOP_EXPR)
3473 result_type = qualify_type (type2, type1);
3474 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3475 && TREE_CODE (orig_op2) != NOP_EXPR)
3476 result_type = qualify_type (type1, type2);
3477 else if (VOID_TYPE_P (TREE_TYPE (type1)))
3479 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3480 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
3481 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
3482 TREE_TYPE (type2)));
3484 else if (VOID_TYPE_P (TREE_TYPE (type2)))
3486 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3487 pedwarn ("ISO C forbids conditional expr between `void *' and function pointer");
3488 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
3489 TREE_TYPE (type1)));
3491 else
3493 pedwarn ("pointer type mismatch in conditional expression");
3494 result_type = build_pointer_type (void_type_node);
3497 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3499 if (! integer_zerop (op2))
3500 pedwarn ("pointer/integer type mismatch in conditional expression");
3501 else
3503 op2 = null_pointer_node;
3505 result_type = type1;
3507 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3509 if (!integer_zerop (op1))
3510 pedwarn ("pointer/integer type mismatch in conditional expression");
3511 else
3513 op1 = null_pointer_node;
3515 result_type = type2;
3518 if (!result_type)
3520 if (flag_cond_mismatch)
3521 result_type = void_type_node;
3522 else
3524 error ("type mismatch in conditional expression");
3525 return error_mark_node;
3529 /* Merge const and volatile flags of the incoming types. */
3530 result_type
3531 = build_type_variant (result_type,
3532 TREE_READONLY (op1) || TREE_READONLY (op2),
3533 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3535 if (result_type != TREE_TYPE (op1))
3536 op1 = convert_and_check (result_type, op1);
3537 if (result_type != TREE_TYPE (op2))
3538 op2 = convert_and_check (result_type, op2);
3540 if (TREE_CODE (ifexp) == INTEGER_CST)
3541 return pedantic_non_lvalue (integer_zerop (ifexp) ? op2 : op1);
3543 return fold (build (COND_EXPR, result_type, ifexp, op1, op2));
3546 /* Given a list of expressions, return a compound expression
3547 that performs them all and returns the value of the last of them. */
3549 tree
3550 build_compound_expr (list)
3551 tree list;
3553 return internal_build_compound_expr (list, TRUE);
3556 static tree
3557 internal_build_compound_expr (list, first_p)
3558 tree list;
3559 int first_p;
3561 tree rest;
3563 if (TREE_CHAIN (list) == 0)
3565 /* Convert arrays and functions to pointers when there
3566 really is a comma operator. */
3567 if (!first_p)
3568 TREE_VALUE (list)
3569 = default_function_array_conversion (TREE_VALUE (list));
3571 #if 0 /* If something inside inhibited lvalueness, we should not override. */
3572 /* Consider (x, y+0), which is not an lvalue since y+0 is not. */
3574 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3575 if (TREE_CODE (list) == NON_LVALUE_EXPR)
3576 list = TREE_OPERAND (list, 0);
3577 #endif
3579 /* Don't let (0, 0) be null pointer constant. */
3580 if (!first_p && integer_zerop (TREE_VALUE (list)))
3581 return non_lvalue (TREE_VALUE (list));
3582 return TREE_VALUE (list);
3585 rest = internal_build_compound_expr (TREE_CHAIN (list), FALSE);
3587 if (! TREE_SIDE_EFFECTS (TREE_VALUE (list)))
3589 /* The left-hand operand of a comma expression is like an expression
3590 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3591 any side-effects, unless it was explicitly cast to (void). */
3592 if ((extra_warnings || warn_unused_value)
3593 && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
3594 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE (list)))))
3595 warning ("left-hand operand of comma expression has no effect");
3597 /* When pedantic, a compound expression can be neither an lvalue
3598 nor an integer constant expression. */
3599 if (! pedantic)
3600 return rest;
3603 /* With -Wunused, we should also warn if the left-hand operand does have
3604 side-effects, but computes a value which is not used. For example, in
3605 `foo() + bar(), baz()' the result of the `+' operator is not used,
3606 so we should issue a warning. */
3607 else if (warn_unused_value)
3608 warn_if_unused_value (TREE_VALUE (list));
3610 return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
3613 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3615 tree
3616 build_c_cast (type, expr)
3617 tree type;
3618 tree expr;
3620 tree value = expr;
3622 if (type == error_mark_node || expr == error_mark_node)
3623 return error_mark_node;
3625 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3626 only in <protocol> qualifications. But when constructing cast expressions,
3627 the protocols do matter and must be kept around. */
3628 if (!flag_objc || !objc_is_id (type))
3629 type = TYPE_MAIN_VARIANT (type);
3631 #if 0
3632 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3633 if (TREE_CODE (value) == NON_LVALUE_EXPR)
3634 value = TREE_OPERAND (value, 0);
3635 #endif
3637 if (TREE_CODE (type) == ARRAY_TYPE)
3639 error ("cast specifies array type");
3640 return error_mark_node;
3643 if (TREE_CODE (type) == FUNCTION_TYPE)
3645 error ("cast specifies function type");
3646 return error_mark_node;
3649 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3651 if (pedantic)
3653 if (TREE_CODE (type) == RECORD_TYPE
3654 || TREE_CODE (type) == UNION_TYPE)
3655 pedwarn ("ISO C forbids casting nonscalar to the same type");
3658 else if (TREE_CODE (type) == UNION_TYPE)
3660 tree field;
3661 value = default_function_array_conversion (value);
3663 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3664 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3665 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3666 break;
3668 if (field)
3670 tree t;
3672 if (pedantic)
3673 pedwarn ("ISO C forbids casts to union type");
3674 t = digest_init (type,
3675 build_constructor (type,
3676 build_tree_list (field, value)),
3678 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3679 return t;
3681 error ("cast to union type from type not present in union");
3682 return error_mark_node;
3684 else
3686 tree otype, ovalue;
3688 /* If casting to void, avoid the error that would come
3689 from default_conversion in the case of a non-lvalue array. */
3690 if (type == void_type_node)
3691 return build1 (CONVERT_EXPR, type, value);
3693 /* Convert functions and arrays to pointers,
3694 but don't convert any other types. */
3695 value = default_function_array_conversion (value);
3696 otype = TREE_TYPE (value);
3698 /* Optionally warn about potentially worrisome casts. */
3700 if (warn_cast_qual
3701 && TREE_CODE (type) == POINTER_TYPE
3702 && TREE_CODE (otype) == POINTER_TYPE)
3704 tree in_type = type;
3705 tree in_otype = otype;
3706 int added = 0;
3707 int discarded = 0;
3709 /* Check that the qualifiers on IN_TYPE are a superset of
3710 the qualifiers of IN_OTYPE. The outermost level of
3711 POINTER_TYPE nodes is uninteresting and we stop as soon
3712 as we hit a non-POINTER_TYPE node on either type. */
3715 in_otype = TREE_TYPE (in_otype);
3716 in_type = TREE_TYPE (in_type);
3718 /* GNU C allows cv-qualified function types. 'const'
3719 means the function is very pure, 'volatile' means it
3720 can't return. We need to warn when such qualifiers
3721 are added, not when they're taken away. */
3722 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3723 && TREE_CODE (in_type) == FUNCTION_TYPE)
3724 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3725 else
3726 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3728 while (TREE_CODE (in_type) == POINTER_TYPE
3729 && TREE_CODE (in_otype) == POINTER_TYPE);
3731 if (added)
3732 warning ("cast adds new qualifiers to function type");
3734 if (discarded)
3735 /* There are qualifiers present in IN_OTYPE that are not
3736 present in IN_TYPE. */
3737 warning ("cast discards qualifiers from pointer target type");
3740 /* Warn about possible alignment problems. */
3741 if (STRICT_ALIGNMENT && warn_cast_align
3742 && TREE_CODE (type) == POINTER_TYPE
3743 && TREE_CODE (otype) == POINTER_TYPE
3744 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3745 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3746 /* Don't warn about opaque types, where the actual alignment
3747 restriction is unknown. */
3748 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3749 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3750 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3751 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3752 warning ("cast increases required alignment of target type");
3754 if (TREE_CODE (type) == INTEGER_TYPE
3755 && TREE_CODE (otype) == POINTER_TYPE
3756 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3757 && !TREE_CONSTANT (value))
3758 warning ("cast from pointer to integer of different size");
3760 if (warn_bad_function_cast
3761 && TREE_CODE (value) == CALL_EXPR
3762 && TREE_CODE (type) != TREE_CODE (otype))
3763 warning ("cast does not match function type");
3765 if (TREE_CODE (type) == POINTER_TYPE
3766 && TREE_CODE (otype) == INTEGER_TYPE
3767 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3768 /* Don't warn about converting any constant. */
3769 && !TREE_CONSTANT (value))
3770 warning ("cast to pointer from integer of different size");
3772 if (TREE_CODE (type) == POINTER_TYPE
3773 && TREE_CODE (otype) == POINTER_TYPE
3774 && TREE_CODE (expr) == ADDR_EXPR
3775 && DECL_P (TREE_OPERAND (expr, 0))
3776 && flag_strict_aliasing && warn_strict_aliasing
3777 && !VOID_TYPE_P (TREE_TYPE (type)))
3779 /* Casting the address of a decl to non void pointer. Warn
3780 if the cast breaks type based aliasing. */
3781 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3782 warning ("type-punning to incomplete type might break strict-aliasing rules");
3783 else if (!alias_sets_conflict_p
3784 (get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0))),
3785 get_alias_set (TREE_TYPE (type))))
3786 warning ("dereferencing type-punned pointer will break strict-aliasing rules");
3789 ovalue = value;
3790 /* Replace a nonvolatile const static variable with its value. */
3791 if (optimize && TREE_CODE (value) == VAR_DECL)
3792 value = decl_constant_value (value);
3793 value = convert (type, value);
3795 /* Ignore any integer overflow caused by the cast. */
3796 if (TREE_CODE (value) == INTEGER_CST)
3798 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3799 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3803 /* Pedantically, don't let (void *) (FOO *) 0 be a null pointer constant. */
3804 if (pedantic && TREE_CODE (value) == INTEGER_CST
3805 && TREE_CODE (expr) == INTEGER_CST
3806 && TREE_CODE (TREE_TYPE (expr)) != INTEGER_TYPE)
3807 value = non_lvalue (value);
3809 /* If pedantic, don't let a cast be an lvalue. */
3810 if (value == expr && pedantic)
3811 value = non_lvalue (value);
3813 return value;
3816 /* Interpret a cast of expression EXPR to type TYPE. */
3817 tree
3818 c_cast_expr (type, expr)
3819 tree type, expr;
3821 int saved_wsp = warn_strict_prototypes;
3823 /* This avoids warnings about unprototyped casts on
3824 integers. E.g. "#define SIG_DFL (void(*)())0". */
3825 if (TREE_CODE (expr) == INTEGER_CST)
3826 warn_strict_prototypes = 0;
3827 type = groktypename (type);
3828 warn_strict_prototypes = saved_wsp;
3830 return build_c_cast (type, expr);
3834 /* Build an assignment expression of lvalue LHS from value RHS.
3835 MODIFYCODE is the code for a binary operator that we use
3836 to combine the old value of LHS with RHS to get the new value.
3837 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3839 tree
3840 build_modify_expr (lhs, modifycode, rhs)
3841 tree lhs, rhs;
3842 enum tree_code modifycode;
3844 tree result;
3845 tree newrhs;
3846 tree lhstype = TREE_TYPE (lhs);
3847 tree olhstype = lhstype;
3849 /* Types that aren't fully specified cannot be used in assignments. */
3850 lhs = require_complete_type (lhs);
3852 /* Avoid duplicate error messages from operands that had errors. */
3853 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3854 return error_mark_node;
3856 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3857 /* Do not use STRIP_NOPS here. We do not want an enumerator
3858 whose value is 0 to count as a null pointer constant. */
3859 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
3860 rhs = TREE_OPERAND (rhs, 0);
3862 newrhs = rhs;
3864 /* Handle control structure constructs used as "lvalues". */
3866 switch (TREE_CODE (lhs))
3868 /* Handle (a, b) used as an "lvalue". */
3869 case COMPOUND_EXPR:
3870 pedantic_lvalue_warning (COMPOUND_EXPR);
3871 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1), modifycode, rhs);
3872 if (TREE_CODE (newrhs) == ERROR_MARK)
3873 return error_mark_node;
3874 return build (COMPOUND_EXPR, lhstype,
3875 TREE_OPERAND (lhs, 0), newrhs);
3877 /* Handle (a ? b : c) used as an "lvalue". */
3878 case COND_EXPR:
3879 pedantic_lvalue_warning (COND_EXPR);
3880 rhs = save_expr (rhs);
3882 /* Produce (a ? (b = rhs) : (c = rhs))
3883 except that the RHS goes through a save-expr
3884 so the code to compute it is only emitted once. */
3885 tree cond
3886 = build_conditional_expr (TREE_OPERAND (lhs, 0),
3887 build_modify_expr (TREE_OPERAND (lhs, 1),
3888 modifycode, rhs),
3889 build_modify_expr (TREE_OPERAND (lhs, 2),
3890 modifycode, rhs));
3891 if (TREE_CODE (cond) == ERROR_MARK)
3892 return cond;
3893 /* Make sure the code to compute the rhs comes out
3894 before the split. */
3895 return build (COMPOUND_EXPR, TREE_TYPE (lhs),
3896 /* But cast it to void to avoid an "unused" error. */
3897 convert (void_type_node, rhs), cond);
3899 default:
3900 break;
3903 /* If a binary op has been requested, combine the old LHS value with the RHS
3904 producing the value we should actually store into the LHS. */
3906 if (modifycode != NOP_EXPR)
3908 lhs = stabilize_reference (lhs);
3909 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3912 /* Handle a cast used as an "lvalue".
3913 We have already performed any binary operator using the value as cast.
3914 Now convert the result to the cast type of the lhs,
3915 and then true type of the lhs and store it there;
3916 then convert result back to the cast type to be the value
3917 of the assignment. */
3919 switch (TREE_CODE (lhs))
3921 case NOP_EXPR:
3922 case CONVERT_EXPR:
3923 case FLOAT_EXPR:
3924 case FIX_TRUNC_EXPR:
3925 case FIX_FLOOR_EXPR:
3926 case FIX_ROUND_EXPR:
3927 case FIX_CEIL_EXPR:
3928 newrhs = default_function_array_conversion (newrhs);
3930 tree inner_lhs = TREE_OPERAND (lhs, 0);
3931 tree result;
3932 result = build_modify_expr (inner_lhs, NOP_EXPR,
3933 convert (TREE_TYPE (inner_lhs),
3934 convert (lhstype, newrhs)));
3935 if (TREE_CODE (result) == ERROR_MARK)
3936 return result;
3937 pedantic_lvalue_warning (CONVERT_EXPR);
3938 return convert (TREE_TYPE (lhs), result);
3941 default:
3942 break;
3945 /* Now we have handled acceptable kinds of LHS that are not truly lvalues.
3946 Reject anything strange now. */
3948 if (!lvalue_or_else (lhs, "invalid lvalue in assignment"))
3949 return error_mark_node;
3951 /* Warn about storing in something that is `const'. */
3953 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3954 || ((TREE_CODE (lhstype) == RECORD_TYPE
3955 || TREE_CODE (lhstype) == UNION_TYPE)
3956 && C_TYPE_FIELDS_READONLY (lhstype)))
3957 readonly_warning (lhs, "assignment");
3959 /* If storing into a structure or union member,
3960 it has probably been given type `int'.
3961 Compute the type that would go with
3962 the actual amount of storage the member occupies. */
3964 if (TREE_CODE (lhs) == COMPONENT_REF
3965 && (TREE_CODE (lhstype) == INTEGER_TYPE
3966 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3967 || TREE_CODE (lhstype) == REAL_TYPE
3968 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3969 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3971 /* If storing in a field that is in actuality a short or narrower than one,
3972 we must store in the field in its actual type. */
3974 if (lhstype != TREE_TYPE (lhs))
3976 lhs = copy_node (lhs);
3977 TREE_TYPE (lhs) = lhstype;
3980 /* Convert new value to destination type. */
3982 newrhs = convert_for_assignment (lhstype, newrhs, _("assignment"),
3983 NULL_TREE, NULL_TREE, 0);
3984 if (TREE_CODE (newrhs) == ERROR_MARK)
3985 return error_mark_node;
3987 /* Scan operands */
3989 result = build (MODIFY_EXPR, lhstype, lhs, newrhs);
3990 TREE_SIDE_EFFECTS (result) = 1;
3992 /* If we got the LHS in a different type for storing in,
3993 convert the result back to the nominal type of LHS
3994 so that the value we return always has the same type
3995 as the LHS argument. */
3997 if (olhstype == TREE_TYPE (result))
3998 return result;
3999 return convert_for_assignment (olhstype, result, _("assignment"),
4000 NULL_TREE, NULL_TREE, 0);
4003 /* Convert value RHS to type TYPE as preparation for an assignment
4004 to an lvalue of type TYPE.
4005 The real work of conversion is done by `convert'.
4006 The purpose of this function is to generate error messages
4007 for assignments that are not allowed in C.
4008 ERRTYPE is a string to use in error messages:
4009 "assignment", "return", etc. If it is null, this is parameter passing
4010 for a function call (and different error messages are output).
4012 FUNNAME is the name of the function being called,
4013 as an IDENTIFIER_NODE, or null.
4014 PARMNUM is the number of the argument, for printing in error messages. */
4016 static tree
4017 convert_for_assignment (type, rhs, errtype, fundecl, funname, parmnum)
4018 tree type, rhs;
4019 const char *errtype;
4020 tree fundecl, funname;
4021 int parmnum;
4023 enum tree_code codel = TREE_CODE (type);
4024 tree rhstype;
4025 enum tree_code coder;
4027 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4028 /* Do not use STRIP_NOPS here. We do not want an enumerator
4029 whose value is 0 to count as a null pointer constant. */
4030 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
4031 rhs = TREE_OPERAND (rhs, 0);
4033 if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
4034 || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE)
4035 rhs = default_conversion (rhs);
4036 else if (optimize && TREE_CODE (rhs) == VAR_DECL)
4037 rhs = decl_constant_value_for_broken_optimization (rhs);
4039 rhstype = TREE_TYPE (rhs);
4040 coder = TREE_CODE (rhstype);
4042 if (coder == ERROR_MARK)
4043 return error_mark_node;
4045 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
4047 overflow_warning (rhs);
4048 /* Check for Objective-C protocols. This will automatically
4049 issue a warning if there are protocol violations. No need to
4050 use the return value. */
4051 if (flag_objc)
4052 objc_comptypes (type, rhstype, 0);
4053 return rhs;
4056 if (coder == VOID_TYPE)
4058 error ("void value not ignored as it ought to be");
4059 return error_mark_node;
4061 /* A type converts to a reference to it.
4062 This code doesn't fully support references, it's just for the
4063 special case of va_start and va_copy. */
4064 if (codel == REFERENCE_TYPE
4065 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
4067 if (!lvalue_p (rhs))
4069 error ("cannot pass rvalue to reference parameter");
4070 return error_mark_node;
4072 if (!c_mark_addressable (rhs))
4073 return error_mark_node;
4074 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
4076 /* We already know that these two types are compatible, but they
4077 may not be exactly identical. In fact, `TREE_TYPE (type)' is
4078 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
4079 likely to be va_list, a typedef to __builtin_va_list, which
4080 is different enough that it will cause problems later. */
4081 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
4082 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
4084 rhs = build1 (NOP_EXPR, type, rhs);
4085 return rhs;
4087 /* Some types can interconvert without explicit casts. */
4088 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
4089 && ((*targetm.vector_opaque_p) (type)
4090 || (*targetm.vector_opaque_p) (rhstype)))
4091 return convert (type, rhs);
4092 /* Arithmetic types all interconvert, and enum is treated like int. */
4093 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
4094 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
4095 || codel == BOOLEAN_TYPE)
4096 && (coder == INTEGER_TYPE || coder == REAL_TYPE
4097 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
4098 || coder == BOOLEAN_TYPE))
4099 return convert_and_check (type, rhs);
4101 /* Conversion to a transparent union from its member types.
4102 This applies only to function arguments. */
4103 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type) && ! errtype)
4105 tree memb_types;
4106 tree marginal_memb_type = 0;
4108 for (memb_types = TYPE_FIELDS (type); memb_types;
4109 memb_types = TREE_CHAIN (memb_types))
4111 tree memb_type = TREE_TYPE (memb_types);
4113 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
4114 TYPE_MAIN_VARIANT (rhstype)))
4115 break;
4117 if (TREE_CODE (memb_type) != POINTER_TYPE)
4118 continue;
4120 if (coder == POINTER_TYPE)
4122 tree ttl = TREE_TYPE (memb_type);
4123 tree ttr = TREE_TYPE (rhstype);
4125 /* Any non-function converts to a [const][volatile] void *
4126 and vice versa; otherwise, targets must be the same.
4127 Meanwhile, the lhs target must have all the qualifiers of
4128 the rhs. */
4129 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4130 || comp_target_types (memb_type, rhstype, 0))
4132 /* If this type won't generate any warnings, use it. */
4133 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
4134 || ((TREE_CODE (ttr) == FUNCTION_TYPE
4135 && TREE_CODE (ttl) == FUNCTION_TYPE)
4136 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4137 == TYPE_QUALS (ttr))
4138 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4139 == TYPE_QUALS (ttl))))
4140 break;
4142 /* Keep looking for a better type, but remember this one. */
4143 if (! marginal_memb_type)
4144 marginal_memb_type = memb_type;
4148 /* Can convert integer zero to any pointer type. */
4149 if (integer_zerop (rhs)
4150 || (TREE_CODE (rhs) == NOP_EXPR
4151 && integer_zerop (TREE_OPERAND (rhs, 0))))
4153 rhs = null_pointer_node;
4154 break;
4158 if (memb_types || marginal_memb_type)
4160 if (! memb_types)
4162 /* We have only a marginally acceptable member type;
4163 it needs a warning. */
4164 tree ttl = TREE_TYPE (marginal_memb_type);
4165 tree ttr = TREE_TYPE (rhstype);
4167 /* Const and volatile mean something different for function
4168 types, so the usual warnings are not appropriate. */
4169 if (TREE_CODE (ttr) == FUNCTION_TYPE
4170 && TREE_CODE (ttl) == FUNCTION_TYPE)
4172 /* Because const and volatile on functions are
4173 restrictions that say the function will not do
4174 certain things, it is okay to use a const or volatile
4175 function where an ordinary one is wanted, but not
4176 vice-versa. */
4177 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4178 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4179 errtype, funname, parmnum);
4181 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4182 warn_for_assignment ("%s discards qualifiers from pointer target type",
4183 errtype, funname,
4184 parmnum);
4187 if (pedantic && ! DECL_IN_SYSTEM_HEADER (fundecl))
4188 pedwarn ("ISO C prohibits argument conversion to union type");
4190 return build1 (NOP_EXPR, type, rhs);
4194 /* Conversions among pointers */
4195 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4196 && (coder == codel))
4198 tree ttl = TREE_TYPE (type);
4199 tree ttr = TREE_TYPE (rhstype);
4201 /* Any non-function converts to a [const][volatile] void *
4202 and vice versa; otherwise, targets must be the same.
4203 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
4204 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4205 || comp_target_types (type, rhstype, 0)
4206 || (c_common_unsigned_type (TYPE_MAIN_VARIANT (ttl))
4207 == c_common_unsigned_type (TYPE_MAIN_VARIANT (ttr))))
4209 if (pedantic
4210 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
4212 (VOID_TYPE_P (ttr)
4213 /* Check TREE_CODE to catch cases like (void *) (char *) 0
4214 which are not ANSI null ptr constants. */
4215 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
4216 && TREE_CODE (ttl) == FUNCTION_TYPE)))
4217 warn_for_assignment ("ISO C forbids %s between function pointer and `void *'",
4218 errtype, funname, parmnum);
4219 /* Const and volatile mean something different for function types,
4220 so the usual warnings are not appropriate. */
4221 else if (TREE_CODE (ttr) != FUNCTION_TYPE
4222 && TREE_CODE (ttl) != FUNCTION_TYPE)
4224 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4225 warn_for_assignment ("%s discards qualifiers from pointer target type",
4226 errtype, funname, parmnum);
4227 /* If this is not a case of ignoring a mismatch in signedness,
4228 no warning. */
4229 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4230 || comp_target_types (type, rhstype, 0))
4232 /* If there is a mismatch, do warn. */
4233 else if (pedantic)
4234 warn_for_assignment ("pointer targets in %s differ in signedness",
4235 errtype, funname, parmnum);
4237 else if (TREE_CODE (ttl) == FUNCTION_TYPE
4238 && TREE_CODE (ttr) == FUNCTION_TYPE)
4240 /* Because const and volatile on functions are restrictions
4241 that say the function will not do certain things,
4242 it is okay to use a const or volatile function
4243 where an ordinary one is wanted, but not vice-versa. */
4244 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4245 warn_for_assignment ("%s makes qualified function pointer from unqualified",
4246 errtype, funname, parmnum);
4249 else
4250 warn_for_assignment ("%s from incompatible pointer type",
4251 errtype, funname, parmnum);
4252 return convert (type, rhs);
4254 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
4256 /* An explicit constant 0 can convert to a pointer,
4257 or one that results from arithmetic, even including
4258 a cast to integer type. */
4259 if (! (TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
4261 ! (TREE_CODE (rhs) == NOP_EXPR
4262 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
4263 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
4264 && integer_zerop (TREE_OPERAND (rhs, 0))))
4266 warn_for_assignment ("%s makes pointer from integer without a cast",
4267 errtype, funname, parmnum);
4268 return convert (type, rhs);
4270 return null_pointer_node;
4272 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
4274 warn_for_assignment ("%s makes integer from pointer without a cast",
4275 errtype, funname, parmnum);
4276 return convert (type, rhs);
4278 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
4279 return convert (type, rhs);
4281 if (!errtype)
4283 if (funname)
4285 tree selector = objc_message_selector ();
4287 if (selector && parmnum > 2)
4288 error ("incompatible type for argument %d of `%s'",
4289 parmnum - 2, IDENTIFIER_POINTER (selector));
4290 else
4291 error ("incompatible type for argument %d of `%s'",
4292 parmnum, IDENTIFIER_POINTER (funname));
4294 else
4295 error ("incompatible type for argument %d of indirect function call",
4296 parmnum);
4298 else
4299 error ("incompatible types in %s", errtype);
4301 return error_mark_node;
4304 /* Convert VALUE for assignment into inlined parameter PARM. */
4306 tree
4307 c_convert_parm_for_inlining (parm, value, fn)
4308 tree parm, value, fn;
4310 tree ret, type;
4312 /* If FN was prototyped, the value has been converted already
4313 in convert_arguments. */
4314 if (! value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
4315 return value;
4317 type = TREE_TYPE (parm);
4318 ret = convert_for_assignment (type, value,
4319 (char *) 0 /* arg passing */, fn,
4320 DECL_NAME (fn), 0);
4321 if (PROMOTE_PROTOTYPES
4322 && INTEGRAL_TYPE_P (type)
4323 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
4324 ret = default_conversion (ret);
4325 return ret;
4328 /* Print a warning using MSGID.
4329 It gets OPNAME as its one parameter.
4330 if OPNAME is null and ARGNUM is 0, it is replaced by "passing arg of `FUNCTION'".
4331 Otherwise if OPNAME is null, it is replaced by "passing arg ARGNUM of `FUNCTION'".
4332 FUNCTION and ARGNUM are handled specially if we are building an
4333 Objective-C selector. */
4335 static void
4336 warn_for_assignment (msgid, opname, function, argnum)
4337 const char *msgid;
4338 const char *opname;
4339 tree function;
4340 int argnum;
4342 if (opname == 0)
4344 tree selector = objc_message_selector ();
4345 char * new_opname;
4347 if (selector && argnum > 2)
4349 function = selector;
4350 argnum -= 2;
4352 if (argnum == 0)
4354 if (function)
4356 /* Function name is known; supply it. */
4357 const char *const argstring = _("passing arg of `%s'");
4358 new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4359 + strlen (argstring) + 1
4360 + 1);
4361 sprintf (new_opname, argstring,
4362 IDENTIFIER_POINTER (function));
4364 else
4366 /* Function name unknown (call through ptr). */
4367 const char *const argnofun = _("passing arg of pointer to function");
4368 new_opname = (char *) alloca (strlen (argnofun) + 1 + 1);
4369 sprintf (new_opname, argnofun);
4372 else if (function)
4374 /* Function name is known; supply it. */
4375 const char *const argstring = _("passing arg %d of `%s'");
4376 new_opname = (char *) alloca (IDENTIFIER_LENGTH (function)
4377 + strlen (argstring) + 1 + 25
4378 /*%d*/ + 1);
4379 sprintf (new_opname, argstring, argnum,
4380 IDENTIFIER_POINTER (function));
4382 else
4384 /* Function name unknown (call through ptr); just give arg number. */
4385 const char *const argnofun = _("passing arg %d of pointer to function");
4386 new_opname = (char *) alloca (strlen (argnofun) + 1 + 25 /*%d*/ + 1);
4387 sprintf (new_opname, argnofun, argnum);
4389 opname = new_opname;
4391 pedwarn (msgid, opname);
4394 /* If VALUE is a compound expr all of whose expressions are constant, then
4395 return its value. Otherwise, return error_mark_node.
4397 This is for handling COMPOUND_EXPRs as initializer elements
4398 which is allowed with a warning when -pedantic is specified. */
4400 static tree
4401 valid_compound_expr_initializer (value, endtype)
4402 tree value;
4403 tree endtype;
4405 if (TREE_CODE (value) == COMPOUND_EXPR)
4407 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4408 == error_mark_node)
4409 return error_mark_node;
4410 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4411 endtype);
4413 else if (! TREE_CONSTANT (value)
4414 && ! initializer_constant_valid_p (value, endtype))
4415 return error_mark_node;
4416 else
4417 return value;
4420 /* Perform appropriate conversions on the initial value of a variable,
4421 store it in the declaration DECL,
4422 and print any error messages that are appropriate.
4423 If the init is invalid, store an ERROR_MARK. */
4425 void
4426 store_init_value (decl, init)
4427 tree decl, init;
4429 tree value, type;
4431 /* If variable's type was invalidly declared, just ignore it. */
4433 type = TREE_TYPE (decl);
4434 if (TREE_CODE (type) == ERROR_MARK)
4435 return;
4437 /* Digest the specified initializer into an expression. */
4439 value = digest_init (type, init, TREE_STATIC (decl));
4441 /* Store the expression if valid; else report error. */
4443 #if 0
4444 /* Note that this is the only place we can detect the error
4445 in a case such as struct foo bar = (struct foo) { x, y };
4446 where there is one initial value which is a constructor expression. */
4447 if (value == error_mark_node)
4449 else if (TREE_STATIC (decl) && ! TREE_CONSTANT (value))
4451 error ("initializer for static variable is not constant");
4452 value = error_mark_node;
4454 else if (TREE_STATIC (decl)
4455 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
4457 error ("initializer for static variable uses complicated arithmetic");
4458 value = error_mark_node;
4460 else
4462 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
4464 if (! TREE_CONSTANT (value))
4465 pedwarn ("aggregate initializer is not constant");
4466 else if (! TREE_STATIC (value))
4467 pedwarn ("aggregate initializer uses complicated arithmetic");
4470 #endif
4472 if (warn_traditional && !in_system_header
4473 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && ! TREE_STATIC (decl))
4474 warning ("traditional C rejects automatic aggregate initialization");
4476 DECL_INITIAL (decl) = value;
4478 /* ANSI wants warnings about out-of-range constant initializers. */
4479 STRIP_TYPE_NOPS (value);
4480 constant_expression_warning (value);
4482 /* Check if we need to set array size from compound literal size. */
4483 if (TREE_CODE (type) == ARRAY_TYPE
4484 && TYPE_DOMAIN (type) == 0
4485 && value != error_mark_node)
4487 tree inside_init = init;
4489 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4490 inside_init = TREE_OPERAND (init, 0);
4491 inside_init = fold (inside_init);
4493 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4495 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4497 if (TYPE_DOMAIN (TREE_TYPE (decl)))
4499 /* For int foo[] = (int [3]){1}; we need to set array size
4500 now since later on array initializer will be just the
4501 brace enclosed list of the compound literal. */
4502 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
4503 layout_type (type);
4504 layout_decl (decl, 0);
4510 /* Methods for storing and printing names for error messages. */
4512 /* Implement a spelling stack that allows components of a name to be pushed
4513 and popped. Each element on the stack is this structure. */
4515 struct spelling
4517 int kind;
4518 union
4520 int i;
4521 const char *s;
4522 } u;
4525 #define SPELLING_STRING 1
4526 #define SPELLING_MEMBER 2
4527 #define SPELLING_BOUNDS 3
4529 static struct spelling *spelling; /* Next stack element (unused). */
4530 static struct spelling *spelling_base; /* Spelling stack base. */
4531 static int spelling_size; /* Size of the spelling stack. */
4533 /* Macros to save and restore the spelling stack around push_... functions.
4534 Alternative to SAVE_SPELLING_STACK. */
4536 #define SPELLING_DEPTH() (spelling - spelling_base)
4537 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
4539 /* Push an element on the spelling stack with type KIND and assign VALUE
4540 to MEMBER. */
4542 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4544 int depth = SPELLING_DEPTH (); \
4546 if (depth >= spelling_size) \
4548 spelling_size += 10; \
4549 if (spelling_base == 0) \
4550 spelling_base \
4551 = (struct spelling *) xmalloc (spelling_size * sizeof (struct spelling)); \
4552 else \
4553 spelling_base \
4554 = (struct spelling *) xrealloc (spelling_base, \
4555 spelling_size * sizeof (struct spelling)); \
4556 RESTORE_SPELLING_DEPTH (depth); \
4559 spelling->kind = (KIND); \
4560 spelling->MEMBER = (VALUE); \
4561 spelling++; \
4564 /* Push STRING on the stack. Printed literally. */
4566 static void
4567 push_string (string)
4568 const char *string;
4570 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4573 /* Push a member name on the stack. Printed as '.' STRING. */
4575 static void
4576 push_member_name (decl)
4577 tree decl;
4580 const char *const string
4581 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4582 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4585 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4587 static void
4588 push_array_bounds (bounds)
4589 int bounds;
4591 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4594 /* Compute the maximum size in bytes of the printed spelling. */
4596 static int
4597 spelling_length ()
4599 int size = 0;
4600 struct spelling *p;
4602 for (p = spelling_base; p < spelling; p++)
4604 if (p->kind == SPELLING_BOUNDS)
4605 size += 25;
4606 else
4607 size += strlen (p->u.s) + 1;
4610 return size;
4613 /* Print the spelling to BUFFER and return it. */
4615 static char *
4616 print_spelling (buffer)
4617 char *buffer;
4619 char *d = buffer;
4620 struct spelling *p;
4622 for (p = spelling_base; p < spelling; p++)
4623 if (p->kind == SPELLING_BOUNDS)
4625 sprintf (d, "[%d]", p->u.i);
4626 d += strlen (d);
4628 else
4630 const char *s;
4631 if (p->kind == SPELLING_MEMBER)
4632 *d++ = '.';
4633 for (s = p->u.s; (*d = *s++); d++)
4636 *d++ = '\0';
4637 return buffer;
4640 /* Issue an error message for a bad initializer component.
4641 MSGID identifies the message.
4642 The component name is taken from the spelling stack. */
4644 void
4645 error_init (msgid)
4646 const char *msgid;
4648 char *ofwhat;
4650 error ("%s", _(msgid));
4651 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4652 if (*ofwhat)
4653 error ("(near initialization for `%s')", ofwhat);
4656 /* Issue a pedantic warning for a bad initializer component.
4657 MSGID identifies the message.
4658 The component name is taken from the spelling stack. */
4660 void
4661 pedwarn_init (msgid)
4662 const char *msgid;
4664 char *ofwhat;
4666 pedwarn ("%s", _(msgid));
4667 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4668 if (*ofwhat)
4669 pedwarn ("(near initialization for `%s')", ofwhat);
4672 /* Issue a warning for a bad initializer component.
4673 MSGID identifies the message.
4674 The component name is taken from the spelling stack. */
4676 static void
4677 warning_init (msgid)
4678 const char *msgid;
4680 char *ofwhat;
4682 warning ("%s", _(msgid));
4683 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4684 if (*ofwhat)
4685 warning ("(near initialization for `%s')", ofwhat);
4688 /* Digest the parser output INIT as an initializer for type TYPE.
4689 Return a C expression of type TYPE to represent the initial value.
4691 REQUIRE_CONSTANT requests an error if non-constant initializers or
4692 elements are seen. */
4694 static tree
4695 digest_init (type, init, require_constant)
4696 tree type, init;
4697 int require_constant;
4699 enum tree_code code = TREE_CODE (type);
4700 tree inside_init = init;
4702 if (type == error_mark_node
4703 || init == error_mark_node
4704 || TREE_TYPE (init) == error_mark_node)
4705 return error_mark_node;
4707 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4708 /* Do not use STRIP_NOPS here. We do not want an enumerator
4709 whose value is 0 to count as a null pointer constant. */
4710 if (TREE_CODE (init) == NON_LVALUE_EXPR)
4711 inside_init = TREE_OPERAND (init, 0);
4713 inside_init = fold (inside_init);
4715 /* Initialization of an array of chars from a string constant
4716 optionally enclosed in braces. */
4718 if (code == ARRAY_TYPE)
4720 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4721 if ((typ1 == char_type_node
4722 || typ1 == signed_char_type_node
4723 || typ1 == unsigned_char_type_node
4724 || typ1 == unsigned_wchar_type_node
4725 || typ1 == signed_wchar_type_node)
4726 && ((inside_init && TREE_CODE (inside_init) == STRING_CST)))
4728 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4729 TYPE_MAIN_VARIANT (type)))
4730 return inside_init;
4732 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4733 != char_type_node)
4734 && TYPE_PRECISION (typ1) == TYPE_PRECISION (char_type_node))
4736 error_init ("char-array initialized from wide string");
4737 return error_mark_node;
4739 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4740 == char_type_node)
4741 && TYPE_PRECISION (typ1) != TYPE_PRECISION (char_type_node))
4743 error_init ("int-array initialized from non-wide string");
4744 return error_mark_node;
4747 TREE_TYPE (inside_init) = type;
4748 if (TYPE_DOMAIN (type) != 0
4749 && TYPE_SIZE (type) != 0
4750 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4751 /* Subtract 1 (or sizeof (wchar_t))
4752 because it's ok to ignore the terminating null char
4753 that is counted in the length of the constant. */
4754 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4755 TREE_STRING_LENGTH (inside_init)
4756 - ((TYPE_PRECISION (typ1)
4757 != TYPE_PRECISION (char_type_node))
4758 ? (TYPE_PRECISION (wchar_type_node)
4759 / BITS_PER_UNIT)
4760 : 1)))
4761 pedwarn_init ("initializer-string for array of chars is too long");
4763 return inside_init;
4767 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4768 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4769 below and handle as a constructor. */
4770 if (code == VECTOR_TYPE
4771 && comptypes (TREE_TYPE (inside_init), type)
4772 && TREE_CONSTANT (inside_init))
4773 return build_vector (type, CONSTRUCTOR_ELTS (inside_init));
4775 /* Any type can be initialized
4776 from an expression of the same type, optionally with braces. */
4778 if (inside_init && TREE_TYPE (inside_init) != 0
4779 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4780 TYPE_MAIN_VARIANT (type))
4781 || (code == ARRAY_TYPE
4782 && comptypes (TREE_TYPE (inside_init), type))
4783 || (code == VECTOR_TYPE
4784 && comptypes (TREE_TYPE (inside_init), type))
4785 || (code == POINTER_TYPE
4786 && (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4787 || TREE_CODE (TREE_TYPE (inside_init)) == FUNCTION_TYPE)
4788 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4789 TREE_TYPE (type)))))
4791 if (code == POINTER_TYPE)
4792 inside_init = default_function_array_conversion (inside_init);
4794 if (require_constant && !flag_isoc99
4795 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4797 /* As an extension, allow initializing objects with static storage
4798 duration with compound literals (which are then treated just as
4799 the brace enclosed list they contain). */
4800 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4801 inside_init = DECL_INITIAL (decl);
4804 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4805 && TREE_CODE (inside_init) != CONSTRUCTOR)
4807 error_init ("array initialized from non-constant array expression");
4808 return error_mark_node;
4811 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4812 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4814 /* Compound expressions can only occur here if -pedantic or
4815 -pedantic-errors is specified. In the later case, we always want
4816 an error. In the former case, we simply want a warning. */
4817 if (require_constant && pedantic
4818 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4820 inside_init
4821 = valid_compound_expr_initializer (inside_init,
4822 TREE_TYPE (inside_init));
4823 if (inside_init == error_mark_node)
4824 error_init ("initializer element is not constant");
4825 else
4826 pedwarn_init ("initializer element is not constant");
4827 if (flag_pedantic_errors)
4828 inside_init = error_mark_node;
4830 else if (require_constant
4831 && (!TREE_CONSTANT (inside_init)
4832 /* This test catches things like `7 / 0' which
4833 result in an expression for which TREE_CONSTANT
4834 is true, but which is not actually something
4835 that is a legal constant. We really should not
4836 be using this function, because it is a part of
4837 the back-end. Instead, the expression should
4838 already have been turned into ERROR_MARK_NODE. */
4839 || !initializer_constant_valid_p (inside_init,
4840 TREE_TYPE (inside_init))))
4842 error_init ("initializer element is not constant");
4843 inside_init = error_mark_node;
4846 return inside_init;
4849 /* Handle scalar types, including conversions. */
4851 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4852 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE)
4854 /* Note that convert_for_assignment calls default_conversion
4855 for arrays and functions. We must not call it in the
4856 case where inside_init is a null pointer constant. */
4857 inside_init
4858 = convert_for_assignment (type, init, _("initialization"),
4859 NULL_TREE, NULL_TREE, 0);
4861 if (require_constant && ! TREE_CONSTANT (inside_init))
4863 error_init ("initializer element is not constant");
4864 inside_init = error_mark_node;
4866 else if (require_constant
4867 && initializer_constant_valid_p (inside_init, TREE_TYPE (inside_init)) == 0)
4869 error_init ("initializer element is not computable at load time");
4870 inside_init = error_mark_node;
4873 return inside_init;
4876 /* Come here only for records and arrays. */
4878 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4880 error_init ("variable-sized object may not be initialized");
4881 return error_mark_node;
4884 error_init ("invalid initializer");
4885 return error_mark_node;
4888 /* Handle initializers that use braces. */
4890 /* Type of object we are accumulating a constructor for.
4891 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4892 static tree constructor_type;
4894 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4895 left to fill. */
4896 static tree constructor_fields;
4898 /* For an ARRAY_TYPE, this is the specified index
4899 at which to store the next element we get. */
4900 static tree constructor_index;
4902 /* For an ARRAY_TYPE, this is the maximum index. */
4903 static tree constructor_max_index;
4905 /* For a RECORD_TYPE, this is the first field not yet written out. */
4906 static tree constructor_unfilled_fields;
4908 /* For an ARRAY_TYPE, this is the index of the first element
4909 not yet written out. */
4910 static tree constructor_unfilled_index;
4912 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4913 This is so we can generate gaps between fields, when appropriate. */
4914 static tree constructor_bit_index;
4916 /* If we are saving up the elements rather than allocating them,
4917 this is the list of elements so far (in reverse order,
4918 most recent first). */
4919 static tree constructor_elements;
4921 /* 1 if constructor should be incrementally stored into a constructor chain,
4922 0 if all the elements should be kept in AVL tree. */
4923 static int constructor_incremental;
4925 /* 1 if so far this constructor's elements are all compile-time constants. */
4926 static int constructor_constant;
4928 /* 1 if so far this constructor's elements are all valid address constants. */
4929 static int constructor_simple;
4931 /* 1 if this constructor is erroneous so far. */
4932 static int constructor_erroneous;
4934 /* Structure for managing pending initializer elements, organized as an
4935 AVL tree. */
4937 struct init_node
4939 struct init_node *left, *right;
4940 struct init_node *parent;
4941 int balance;
4942 tree purpose;
4943 tree value;
4946 /* Tree of pending elements at this constructor level.
4947 These are elements encountered out of order
4948 which belong at places we haven't reached yet in actually
4949 writing the output.
4950 Will never hold tree nodes across GC runs. */
4951 static struct init_node *constructor_pending_elts;
4953 /* The SPELLING_DEPTH of this constructor. */
4954 static int constructor_depth;
4956 /* 0 if implicitly pushing constructor levels is allowed. */
4957 int constructor_no_implicit = 0; /* 0 for C; 1 for some other languages. */
4959 static int require_constant_value;
4960 static int require_constant_elements;
4962 /* DECL node for which an initializer is being read.
4963 0 means we are reading a constructor expression
4964 such as (struct foo) {...}. */
4965 static tree constructor_decl;
4967 /* start_init saves the ASMSPEC arg here for really_start_incremental_init. */
4968 static const char *constructor_asmspec;
4970 /* Nonzero if this is an initializer for a top-level decl. */
4971 static int constructor_top_level;
4973 /* Nonzero if there were any member designators in this initializer. */
4974 static int constructor_designated;
4976 /* Nesting depth of designator list. */
4977 static int designator_depth;
4979 /* Nonzero if there were diagnosed errors in this designator list. */
4980 static int designator_errorneous;
4983 /* This stack has a level for each implicit or explicit level of
4984 structuring in the initializer, including the outermost one. It
4985 saves the values of most of the variables above. */
4987 struct constructor_range_stack;
4989 struct constructor_stack
4991 struct constructor_stack *next;
4992 tree type;
4993 tree fields;
4994 tree index;
4995 tree max_index;
4996 tree unfilled_index;
4997 tree unfilled_fields;
4998 tree bit_index;
4999 tree elements;
5000 struct init_node *pending_elts;
5001 int offset;
5002 int depth;
5003 /* If nonzero, this value should replace the entire
5004 constructor at this level. */
5005 tree replacement_value;
5006 struct constructor_range_stack *range_stack;
5007 char constant;
5008 char simple;
5009 char implicit;
5010 char erroneous;
5011 char outer;
5012 char incremental;
5013 char designated;
5016 struct constructor_stack *constructor_stack;
5018 /* This stack represents designators from some range designator up to
5019 the last designator in the list. */
5021 struct constructor_range_stack
5023 struct constructor_range_stack *next, *prev;
5024 struct constructor_stack *stack;
5025 tree range_start;
5026 tree index;
5027 tree range_end;
5028 tree fields;
5031 struct constructor_range_stack *constructor_range_stack;
5033 /* This stack records separate initializers that are nested.
5034 Nested initializers can't happen in ANSI C, but GNU C allows them
5035 in cases like { ... (struct foo) { ... } ... }. */
5037 struct initializer_stack
5039 struct initializer_stack *next;
5040 tree decl;
5041 const char *asmspec;
5042 struct constructor_stack *constructor_stack;
5043 struct constructor_range_stack *constructor_range_stack;
5044 tree elements;
5045 struct spelling *spelling;
5046 struct spelling *spelling_base;
5047 int spelling_size;
5048 char top_level;
5049 char require_constant_value;
5050 char require_constant_elements;
5053 struct initializer_stack *initializer_stack;
5055 /* Prepare to parse and output the initializer for variable DECL. */
5057 void
5058 start_init (decl, asmspec_tree, top_level)
5059 tree decl;
5060 tree asmspec_tree;
5061 int top_level;
5063 const char *locus;
5064 struct initializer_stack *p
5065 = (struct initializer_stack *) xmalloc (sizeof (struct initializer_stack));
5066 const char *asmspec = 0;
5068 if (asmspec_tree)
5069 asmspec = TREE_STRING_POINTER (asmspec_tree);
5071 p->decl = constructor_decl;
5072 p->asmspec = constructor_asmspec;
5073 p->require_constant_value = require_constant_value;
5074 p->require_constant_elements = require_constant_elements;
5075 p->constructor_stack = constructor_stack;
5076 p->constructor_range_stack = constructor_range_stack;
5077 p->elements = constructor_elements;
5078 p->spelling = spelling;
5079 p->spelling_base = spelling_base;
5080 p->spelling_size = spelling_size;
5081 p->top_level = constructor_top_level;
5082 p->next = initializer_stack;
5083 initializer_stack = p;
5085 constructor_decl = decl;
5086 constructor_asmspec = asmspec;
5087 constructor_designated = 0;
5088 constructor_top_level = top_level;
5090 if (decl != 0)
5092 require_constant_value = TREE_STATIC (decl);
5093 require_constant_elements
5094 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
5095 /* For a scalar, you can always use any value to initialize,
5096 even within braces. */
5097 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
5098 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5099 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
5100 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
5101 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
5103 else
5105 require_constant_value = 0;
5106 require_constant_elements = 0;
5107 locus = "(anonymous)";
5110 constructor_stack = 0;
5111 constructor_range_stack = 0;
5113 missing_braces_mentioned = 0;
5115 spelling_base = 0;
5116 spelling_size = 0;
5117 RESTORE_SPELLING_DEPTH (0);
5119 if (locus)
5120 push_string (locus);
5123 void
5124 finish_init ()
5126 struct initializer_stack *p = initializer_stack;
5128 /* Free the whole constructor stack of this initializer. */
5129 while (constructor_stack)
5131 struct constructor_stack *q = constructor_stack;
5132 constructor_stack = q->next;
5133 free (q);
5136 if (constructor_range_stack)
5137 abort ();
5139 /* Pop back to the data of the outer initializer (if any). */
5140 constructor_decl = p->decl;
5141 constructor_asmspec = p->asmspec;
5142 require_constant_value = p->require_constant_value;
5143 require_constant_elements = p->require_constant_elements;
5144 constructor_stack = p->constructor_stack;
5145 constructor_range_stack = p->constructor_range_stack;
5146 constructor_elements = p->elements;
5147 spelling = p->spelling;
5148 spelling_base = p->spelling_base;
5149 spelling_size = p->spelling_size;
5150 constructor_top_level = p->top_level;
5151 initializer_stack = p->next;
5152 free (p);
5155 /* Call here when we see the initializer is surrounded by braces.
5156 This is instead of a call to push_init_level;
5157 it is matched by a call to pop_init_level.
5159 TYPE is the type to initialize, for a constructor expression.
5160 For an initializer for a decl, TYPE is zero. */
5162 void
5163 really_start_incremental_init (type)
5164 tree type;
5166 struct constructor_stack *p
5167 = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5169 if (type == 0)
5170 type = TREE_TYPE (constructor_decl);
5172 if ((*targetm.vector_opaque_p) (type))
5173 error ("opaque vector types cannot be initialized");
5175 p->type = constructor_type;
5176 p->fields = constructor_fields;
5177 p->index = constructor_index;
5178 p->max_index = constructor_max_index;
5179 p->unfilled_index = constructor_unfilled_index;
5180 p->unfilled_fields = constructor_unfilled_fields;
5181 p->bit_index = constructor_bit_index;
5182 p->elements = constructor_elements;
5183 p->constant = constructor_constant;
5184 p->simple = constructor_simple;
5185 p->erroneous = constructor_erroneous;
5186 p->pending_elts = constructor_pending_elts;
5187 p->depth = constructor_depth;
5188 p->replacement_value = 0;
5189 p->implicit = 0;
5190 p->range_stack = 0;
5191 p->outer = 0;
5192 p->incremental = constructor_incremental;
5193 p->designated = constructor_designated;
5194 p->next = 0;
5195 constructor_stack = p;
5197 constructor_constant = 1;
5198 constructor_simple = 1;
5199 constructor_depth = SPELLING_DEPTH ();
5200 constructor_elements = 0;
5201 constructor_pending_elts = 0;
5202 constructor_type = type;
5203 constructor_incremental = 1;
5204 constructor_designated = 0;
5205 designator_depth = 0;
5206 designator_errorneous = 0;
5208 if (TREE_CODE (constructor_type) == RECORD_TYPE
5209 || TREE_CODE (constructor_type) == UNION_TYPE)
5211 constructor_fields = TYPE_FIELDS (constructor_type);
5212 /* Skip any nameless bit fields at the beginning. */
5213 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5214 && DECL_NAME (constructor_fields) == 0)
5215 constructor_fields = TREE_CHAIN (constructor_fields);
5217 constructor_unfilled_fields = constructor_fields;
5218 constructor_bit_index = bitsize_zero_node;
5220 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5222 if (TYPE_DOMAIN (constructor_type))
5224 constructor_max_index
5225 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5227 /* Detect non-empty initializations of zero-length arrays. */
5228 if (constructor_max_index == NULL_TREE
5229 && TYPE_SIZE (constructor_type))
5230 constructor_max_index = build_int_2 (-1, -1);
5232 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5233 to initialize VLAs will cause a proper error; avoid tree
5234 checking errors as well by setting a safe value. */
5235 if (constructor_max_index
5236 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5237 constructor_max_index = build_int_2 (-1, -1);
5239 constructor_index
5240 = convert (bitsizetype,
5241 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5243 else
5244 constructor_index = bitsize_zero_node;
5246 constructor_unfilled_index = constructor_index;
5248 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5250 /* Vectors are like simple fixed-size arrays. */
5251 constructor_max_index =
5252 build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0);
5253 constructor_index = convert (bitsizetype, bitsize_zero_node);
5254 constructor_unfilled_index = constructor_index;
5256 else
5258 /* Handle the case of int x = {5}; */
5259 constructor_fields = constructor_type;
5260 constructor_unfilled_fields = constructor_type;
5264 /* Push down into a subobject, for initialization.
5265 If this is for an explicit set of braces, IMPLICIT is 0.
5266 If it is because the next element belongs at a lower level,
5267 IMPLICIT is 1 (or 2 if the push is because of designator list). */
5269 void
5270 push_init_level (implicit)
5271 int implicit;
5273 struct constructor_stack *p;
5274 tree value = NULL_TREE;
5276 /* If we've exhausted any levels that didn't have braces,
5277 pop them now. */
5278 while (constructor_stack->implicit)
5280 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5281 || TREE_CODE (constructor_type) == UNION_TYPE)
5282 && constructor_fields == 0)
5283 process_init_element (pop_init_level (1));
5284 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5285 && constructor_max_index
5286 && tree_int_cst_lt (constructor_max_index, constructor_index))
5287 process_init_element (pop_init_level (1));
5288 else
5289 break;
5292 /* Unless this is an explicit brace, we need to preserve previous
5293 content if any. */
5294 if (implicit)
5296 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5297 || TREE_CODE (constructor_type) == UNION_TYPE)
5298 && constructor_fields)
5299 value = find_init_member (constructor_fields);
5300 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5301 value = find_init_member (constructor_index);
5304 p = (struct constructor_stack *) xmalloc (sizeof (struct constructor_stack));
5305 p->type = constructor_type;
5306 p->fields = constructor_fields;
5307 p->index = constructor_index;
5308 p->max_index = constructor_max_index;
5309 p->unfilled_index = constructor_unfilled_index;
5310 p->unfilled_fields = constructor_unfilled_fields;
5311 p->bit_index = constructor_bit_index;
5312 p->elements = constructor_elements;
5313 p->constant = constructor_constant;
5314 p->simple = constructor_simple;
5315 p->erroneous = constructor_erroneous;
5316 p->pending_elts = constructor_pending_elts;
5317 p->depth = constructor_depth;
5318 p->replacement_value = 0;
5319 p->implicit = implicit;
5320 p->outer = 0;
5321 p->incremental = constructor_incremental;
5322 p->designated = constructor_designated;
5323 p->next = constructor_stack;
5324 p->range_stack = 0;
5325 constructor_stack = p;
5327 constructor_constant = 1;
5328 constructor_simple = 1;
5329 constructor_depth = SPELLING_DEPTH ();
5330 constructor_elements = 0;
5331 constructor_incremental = 1;
5332 constructor_designated = 0;
5333 constructor_pending_elts = 0;
5334 if (!implicit)
5336 p->range_stack = constructor_range_stack;
5337 constructor_range_stack = 0;
5338 designator_depth = 0;
5339 designator_errorneous = 0;
5342 /* Don't die if an entire brace-pair level is superfluous
5343 in the containing level. */
5344 if (constructor_type == 0)
5346 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5347 || TREE_CODE (constructor_type) == UNION_TYPE)
5349 /* Don't die if there are extra init elts at the end. */
5350 if (constructor_fields == 0)
5351 constructor_type = 0;
5352 else
5354 constructor_type = TREE_TYPE (constructor_fields);
5355 push_member_name (constructor_fields);
5356 constructor_depth++;
5359 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5361 constructor_type = TREE_TYPE (constructor_type);
5362 push_array_bounds (tree_low_cst (constructor_index, 0));
5363 constructor_depth++;
5366 if (constructor_type == 0)
5368 error_init ("extra brace group at end of initializer");
5369 constructor_fields = 0;
5370 constructor_unfilled_fields = 0;
5371 return;
5374 if (value && TREE_CODE (value) == CONSTRUCTOR)
5376 constructor_constant = TREE_CONSTANT (value);
5377 constructor_simple = TREE_STATIC (value);
5378 constructor_elements = CONSTRUCTOR_ELTS (value);
5379 if (constructor_elements
5380 && (TREE_CODE (constructor_type) == RECORD_TYPE
5381 || TREE_CODE (constructor_type) == ARRAY_TYPE))
5382 set_nonincremental_init ();
5385 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
5387 missing_braces_mentioned = 1;
5388 warning_init ("missing braces around initializer");
5391 if (TREE_CODE (constructor_type) == RECORD_TYPE
5392 || TREE_CODE (constructor_type) == UNION_TYPE)
5394 constructor_fields = TYPE_FIELDS (constructor_type);
5395 /* Skip any nameless bit fields at the beginning. */
5396 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5397 && DECL_NAME (constructor_fields) == 0)
5398 constructor_fields = TREE_CHAIN (constructor_fields);
5400 constructor_unfilled_fields = constructor_fields;
5401 constructor_bit_index = bitsize_zero_node;
5403 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5405 /* Vectors are like simple fixed-size arrays. */
5406 constructor_max_index =
5407 build_int_2 (TYPE_VECTOR_SUBPARTS (constructor_type) - 1, 0);
5408 constructor_index = convert (bitsizetype, integer_zero_node);
5409 constructor_unfilled_index = constructor_index;
5411 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5413 if (TYPE_DOMAIN (constructor_type))
5415 constructor_max_index
5416 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5418 /* Detect non-empty initializations of zero-length arrays. */
5419 if (constructor_max_index == NULL_TREE
5420 && TYPE_SIZE (constructor_type))
5421 constructor_max_index = build_int_2 (-1, -1);
5423 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5424 to initialize VLAs will cause a proper error; avoid tree
5425 checking errors as well by setting a safe value. */
5426 if (constructor_max_index
5427 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5428 constructor_max_index = build_int_2 (-1, -1);
5430 constructor_index
5431 = convert (bitsizetype,
5432 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5434 else
5435 constructor_index = bitsize_zero_node;
5437 constructor_unfilled_index = constructor_index;
5438 if (value && TREE_CODE (value) == STRING_CST)
5440 /* We need to split the char/wchar array into individual
5441 characters, so that we don't have to special case it
5442 everywhere. */
5443 set_nonincremental_init_from_string (value);
5446 else
5448 warning_init ("braces around scalar initializer");
5449 constructor_fields = constructor_type;
5450 constructor_unfilled_fields = constructor_type;
5454 /* At the end of an implicit or explicit brace level,
5455 finish up that level of constructor.
5456 If we were outputting the elements as they are read, return 0
5457 from inner levels (process_init_element ignores that),
5458 but return error_mark_node from the outermost level
5459 (that's what we want to put in DECL_INITIAL).
5460 Otherwise, return a CONSTRUCTOR expression. */
5462 tree
5463 pop_init_level (implicit)
5464 int implicit;
5466 struct constructor_stack *p;
5467 tree constructor = 0;
5469 if (implicit == 0)
5471 /* When we come to an explicit close brace,
5472 pop any inner levels that didn't have explicit braces. */
5473 while (constructor_stack->implicit)
5474 process_init_element (pop_init_level (1));
5476 if (constructor_range_stack)
5477 abort ();
5480 p = constructor_stack;
5482 /* Error for initializing a flexible array member, or a zero-length
5483 array member in an inappropriate context. */
5484 if (constructor_type && constructor_fields
5485 && TREE_CODE (constructor_type) == ARRAY_TYPE
5486 && TYPE_DOMAIN (constructor_type)
5487 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5489 /* Silently discard empty initializations. The parser will
5490 already have pedwarned for empty brackets. */
5491 if (integer_zerop (constructor_unfilled_index))
5492 constructor_type = NULL_TREE;
5493 else if (! TYPE_SIZE (constructor_type))
5495 if (constructor_depth > 2)
5496 error_init ("initialization of flexible array member in a nested context");
5497 else if (pedantic)
5498 pedwarn_init ("initialization of a flexible array member");
5500 /* We have already issued an error message for the existence
5501 of a flexible array member not at the end of the structure.
5502 Discard the initializer so that we do not abort later. */
5503 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
5504 constructor_type = NULL_TREE;
5506 else
5507 /* Zero-length arrays are no longer special, so we should no longer
5508 get here. */
5509 abort ();
5512 /* Warn when some struct elements are implicitly initialized to zero. */
5513 if (extra_warnings
5514 && constructor_type
5515 && TREE_CODE (constructor_type) == RECORD_TYPE
5516 && constructor_unfilled_fields)
5518 /* Do not warn for flexible array members or zero-length arrays. */
5519 while (constructor_unfilled_fields
5520 && (! DECL_SIZE (constructor_unfilled_fields)
5521 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
5522 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5524 /* Do not warn if this level of the initializer uses member
5525 designators; it is likely to be deliberate. */
5526 if (constructor_unfilled_fields && !constructor_designated)
5528 push_member_name (constructor_unfilled_fields);
5529 warning_init ("missing initializer");
5530 RESTORE_SPELLING_DEPTH (constructor_depth);
5534 /* Now output all pending elements. */
5535 constructor_incremental = 1;
5536 output_pending_init_elements (1);
5538 /* Pad out the end of the structure. */
5539 if (p->replacement_value)
5540 /* If this closes a superfluous brace pair,
5541 just pass out the element between them. */
5542 constructor = p->replacement_value;
5543 else if (constructor_type == 0)
5545 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5546 && TREE_CODE (constructor_type) != UNION_TYPE
5547 && TREE_CODE (constructor_type) != ARRAY_TYPE
5548 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5550 /* A nonincremental scalar initializer--just return
5551 the element, after verifying there is just one. */
5552 if (constructor_elements == 0)
5554 if (!constructor_erroneous)
5555 error_init ("empty scalar initializer");
5556 constructor = error_mark_node;
5558 else if (TREE_CHAIN (constructor_elements) != 0)
5560 error_init ("extra elements in scalar initializer");
5561 constructor = TREE_VALUE (constructor_elements);
5563 else
5564 constructor = TREE_VALUE (constructor_elements);
5566 else
5568 if (constructor_erroneous)
5569 constructor = error_mark_node;
5570 else
5572 constructor = build_constructor (constructor_type,
5573 nreverse (constructor_elements));
5574 if (constructor_constant)
5575 TREE_CONSTANT (constructor) = 1;
5576 if (constructor_constant && constructor_simple)
5577 TREE_STATIC (constructor) = 1;
5581 constructor_type = p->type;
5582 constructor_fields = p->fields;
5583 constructor_index = p->index;
5584 constructor_max_index = p->max_index;
5585 constructor_unfilled_index = p->unfilled_index;
5586 constructor_unfilled_fields = p->unfilled_fields;
5587 constructor_bit_index = p->bit_index;
5588 constructor_elements = p->elements;
5589 constructor_constant = p->constant;
5590 constructor_simple = p->simple;
5591 constructor_erroneous = p->erroneous;
5592 constructor_incremental = p->incremental;
5593 constructor_designated = p->designated;
5594 constructor_pending_elts = p->pending_elts;
5595 constructor_depth = p->depth;
5596 if (!p->implicit)
5597 constructor_range_stack = p->range_stack;
5598 RESTORE_SPELLING_DEPTH (constructor_depth);
5600 constructor_stack = p->next;
5601 free (p);
5603 if (constructor == 0)
5605 if (constructor_stack == 0)
5606 return error_mark_node;
5607 return NULL_TREE;
5609 return constructor;
5612 /* Common handling for both array range and field name designators.
5613 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5615 static int
5616 set_designator (array)
5617 int array;
5619 tree subtype;
5620 enum tree_code subcode;
5622 /* Don't die if an entire brace-pair level is superfluous
5623 in the containing level. */
5624 if (constructor_type == 0)
5625 return 1;
5627 /* If there were errors in this designator list already, bail out silently. */
5628 if (designator_errorneous)
5629 return 1;
5631 if (!designator_depth)
5633 if (constructor_range_stack)
5634 abort ();
5636 /* Designator list starts at the level of closest explicit
5637 braces. */
5638 while (constructor_stack->implicit)
5639 process_init_element (pop_init_level (1));
5640 constructor_designated = 1;
5641 return 0;
5644 if (constructor_no_implicit)
5646 error_init ("initialization designators may not nest");
5647 return 1;
5650 if (TREE_CODE (constructor_type) == RECORD_TYPE
5651 || TREE_CODE (constructor_type) == UNION_TYPE)
5653 subtype = TREE_TYPE (constructor_fields);
5654 if (subtype != error_mark_node)
5655 subtype = TYPE_MAIN_VARIANT (subtype);
5657 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5659 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5661 else
5662 abort ();
5664 subcode = TREE_CODE (subtype);
5665 if (array && subcode != ARRAY_TYPE)
5667 error_init ("array index in non-array initializer");
5668 return 1;
5670 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5672 error_init ("field name not in record or union initializer");
5673 return 1;
5676 constructor_designated = 1;
5677 push_init_level (2);
5678 return 0;
5681 /* If there are range designators in designator list, push a new designator
5682 to constructor_range_stack. RANGE_END is end of such stack range or
5683 NULL_TREE if there is no range designator at this level. */
5685 static void
5686 push_range_stack (range_end)
5687 tree range_end;
5689 struct constructor_range_stack *p;
5691 p = (struct constructor_range_stack *)
5692 ggc_alloc (sizeof (struct constructor_range_stack));
5693 p->prev = constructor_range_stack;
5694 p->next = 0;
5695 p->fields = constructor_fields;
5696 p->range_start = constructor_index;
5697 p->index = constructor_index;
5698 p->stack = constructor_stack;
5699 p->range_end = range_end;
5700 if (constructor_range_stack)
5701 constructor_range_stack->next = p;
5702 constructor_range_stack = p;
5705 /* Within an array initializer, specify the next index to be initialized.
5706 FIRST is that index. If LAST is nonzero, then initialize a range
5707 of indices, running from FIRST through LAST. */
5709 void
5710 set_init_index (first, last)
5711 tree first, last;
5713 if (set_designator (1))
5714 return;
5716 designator_errorneous = 1;
5718 while ((TREE_CODE (first) == NOP_EXPR
5719 || TREE_CODE (first) == CONVERT_EXPR
5720 || TREE_CODE (first) == NON_LVALUE_EXPR)
5721 && (TYPE_MODE (TREE_TYPE (first))
5722 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (first, 0)))))
5723 first = TREE_OPERAND (first, 0);
5725 if (last)
5726 while ((TREE_CODE (last) == NOP_EXPR
5727 || TREE_CODE (last) == CONVERT_EXPR
5728 || TREE_CODE (last) == NON_LVALUE_EXPR)
5729 && (TYPE_MODE (TREE_TYPE (last))
5730 == TYPE_MODE (TREE_TYPE (TREE_OPERAND (last, 0)))))
5731 last = TREE_OPERAND (last, 0);
5733 if (TREE_CODE (first) != INTEGER_CST)
5734 error_init ("nonconstant array index in initializer");
5735 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5736 error_init ("nonconstant array index in initializer");
5737 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5738 error_init ("array index in non-array initializer");
5739 else if (constructor_max_index
5740 && tree_int_cst_lt (constructor_max_index, first))
5741 error_init ("array index in initializer exceeds array bounds");
5742 else
5744 constructor_index = convert (bitsizetype, first);
5746 if (last)
5748 if (tree_int_cst_equal (first, last))
5749 last = 0;
5750 else if (tree_int_cst_lt (last, first))
5752 error_init ("empty index range in initializer");
5753 last = 0;
5755 else
5757 last = convert (bitsizetype, last);
5758 if (constructor_max_index != 0
5759 && tree_int_cst_lt (constructor_max_index, last))
5761 error_init ("array index range in initializer exceeds array bounds");
5762 last = 0;
5767 designator_depth++;
5768 designator_errorneous = 0;
5769 if (constructor_range_stack || last)
5770 push_range_stack (last);
5774 /* Within a struct initializer, specify the next field to be initialized. */
5776 void
5777 set_init_label (fieldname)
5778 tree fieldname;
5780 tree tail;
5782 if (set_designator (0))
5783 return;
5785 designator_errorneous = 1;
5787 if (TREE_CODE (constructor_type) != RECORD_TYPE
5788 && TREE_CODE (constructor_type) != UNION_TYPE)
5790 error_init ("field name not in record or union initializer");
5791 return;
5794 for (tail = TYPE_FIELDS (constructor_type); tail;
5795 tail = TREE_CHAIN (tail))
5797 if (DECL_NAME (tail) == fieldname)
5798 break;
5801 if (tail == 0)
5802 error ("unknown field `%s' specified in initializer",
5803 IDENTIFIER_POINTER (fieldname));
5804 else
5806 constructor_fields = tail;
5807 designator_depth++;
5808 designator_errorneous = 0;
5809 if (constructor_range_stack)
5810 push_range_stack (NULL_TREE);
5814 /* Add a new initializer to the tree of pending initializers. PURPOSE
5815 identifies the initializer, either array index or field in a structure.
5816 VALUE is the value of that index or field. */
5818 static void
5819 add_pending_init (purpose, value)
5820 tree purpose, value;
5822 struct init_node *p, **q, *r;
5824 q = &constructor_pending_elts;
5825 p = 0;
5827 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5829 while (*q != 0)
5831 p = *q;
5832 if (tree_int_cst_lt (purpose, p->purpose))
5833 q = &p->left;
5834 else if (tree_int_cst_lt (p->purpose, purpose))
5835 q = &p->right;
5836 else
5838 if (TREE_SIDE_EFFECTS (p->value))
5839 warning_init ("initialized field with side-effects overwritten");
5840 p->value = value;
5841 return;
5845 else
5847 tree bitpos;
5849 bitpos = bit_position (purpose);
5850 while (*q != NULL)
5852 p = *q;
5853 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5854 q = &p->left;
5855 else if (p->purpose != purpose)
5856 q = &p->right;
5857 else
5859 if (TREE_SIDE_EFFECTS (p->value))
5860 warning_init ("initialized field with side-effects overwritten");
5861 p->value = value;
5862 return;
5867 r = (struct init_node *) ggc_alloc (sizeof (struct init_node));
5868 r->purpose = purpose;
5869 r->value = value;
5871 *q = r;
5872 r->parent = p;
5873 r->left = 0;
5874 r->right = 0;
5875 r->balance = 0;
5877 while (p)
5879 struct init_node *s;
5881 if (r == p->left)
5883 if (p->balance == 0)
5884 p->balance = -1;
5885 else if (p->balance < 0)
5887 if (r->balance < 0)
5889 /* L rotation. */
5890 p->left = r->right;
5891 if (p->left)
5892 p->left->parent = p;
5893 r->right = p;
5895 p->balance = 0;
5896 r->balance = 0;
5898 s = p->parent;
5899 p->parent = r;
5900 r->parent = s;
5901 if (s)
5903 if (s->left == p)
5904 s->left = r;
5905 else
5906 s->right = r;
5908 else
5909 constructor_pending_elts = r;
5911 else
5913 /* LR rotation. */
5914 struct init_node *t = r->right;
5916 r->right = t->left;
5917 if (r->right)
5918 r->right->parent = r;
5919 t->left = r;
5921 p->left = t->right;
5922 if (p->left)
5923 p->left->parent = p;
5924 t->right = p;
5926 p->balance = t->balance < 0;
5927 r->balance = -(t->balance > 0);
5928 t->balance = 0;
5930 s = p->parent;
5931 p->parent = t;
5932 r->parent = t;
5933 t->parent = s;
5934 if (s)
5936 if (s->left == p)
5937 s->left = t;
5938 else
5939 s->right = t;
5941 else
5942 constructor_pending_elts = t;
5944 break;
5946 else
5948 /* p->balance == +1; growth of left side balances the node. */
5949 p->balance = 0;
5950 break;
5953 else /* r == p->right */
5955 if (p->balance == 0)
5956 /* Growth propagation from right side. */
5957 p->balance++;
5958 else if (p->balance > 0)
5960 if (r->balance > 0)
5962 /* R rotation. */
5963 p->right = r->left;
5964 if (p->right)
5965 p->right->parent = p;
5966 r->left = p;
5968 p->balance = 0;
5969 r->balance = 0;
5971 s = p->parent;
5972 p->parent = r;
5973 r->parent = s;
5974 if (s)
5976 if (s->left == p)
5977 s->left = r;
5978 else
5979 s->right = r;
5981 else
5982 constructor_pending_elts = r;
5984 else /* r->balance == -1 */
5986 /* RL rotation */
5987 struct init_node *t = r->left;
5989 r->left = t->right;
5990 if (r->left)
5991 r->left->parent = r;
5992 t->right = r;
5994 p->right = t->left;
5995 if (p->right)
5996 p->right->parent = p;
5997 t->left = p;
5999 r->balance = (t->balance < 0);
6000 p->balance = -(t->balance > 0);
6001 t->balance = 0;
6003 s = p->parent;
6004 p->parent = t;
6005 r->parent = t;
6006 t->parent = s;
6007 if (s)
6009 if (s->left == p)
6010 s->left = t;
6011 else
6012 s->right = t;
6014 else
6015 constructor_pending_elts = t;
6017 break;
6019 else
6021 /* p->balance == -1; growth of right side balances the node. */
6022 p->balance = 0;
6023 break;
6027 r = p;
6028 p = p->parent;
6032 /* Build AVL tree from a sorted chain. */
6034 static void
6035 set_nonincremental_init ()
6037 tree chain;
6039 if (TREE_CODE (constructor_type) != RECORD_TYPE
6040 && TREE_CODE (constructor_type) != ARRAY_TYPE)
6041 return;
6043 for (chain = constructor_elements; chain; chain = TREE_CHAIN (chain))
6044 add_pending_init (TREE_PURPOSE (chain), TREE_VALUE (chain));
6045 constructor_elements = 0;
6046 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6048 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
6049 /* Skip any nameless bit fields at the beginning. */
6050 while (constructor_unfilled_fields != 0
6051 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6052 && DECL_NAME (constructor_unfilled_fields) == 0)
6053 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
6056 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6058 if (TYPE_DOMAIN (constructor_type))
6059 constructor_unfilled_index
6060 = convert (bitsizetype,
6061 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
6062 else
6063 constructor_unfilled_index = bitsize_zero_node;
6065 constructor_incremental = 0;
6068 /* Build AVL tree from a string constant. */
6070 static void
6071 set_nonincremental_init_from_string (str)
6072 tree str;
6074 tree value, purpose, type;
6075 HOST_WIDE_INT val[2];
6076 const char *p, *end;
6077 int byte, wchar_bytes, charwidth, bitpos;
6079 if (TREE_CODE (constructor_type) != ARRAY_TYPE)
6080 abort ();
6082 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
6083 == TYPE_PRECISION (char_type_node))
6084 wchar_bytes = 1;
6085 else if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
6086 == TYPE_PRECISION (wchar_type_node))
6087 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
6088 else
6089 abort ();
6091 charwidth = TYPE_PRECISION (char_type_node);
6092 type = TREE_TYPE (constructor_type);
6093 p = TREE_STRING_POINTER (str);
6094 end = p + TREE_STRING_LENGTH (str);
6096 for (purpose = bitsize_zero_node;
6097 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
6098 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
6100 if (wchar_bytes == 1)
6102 val[1] = (unsigned char) *p++;
6103 val[0] = 0;
6105 else
6107 val[0] = 0;
6108 val[1] = 0;
6109 for (byte = 0; byte < wchar_bytes; byte++)
6111 if (BYTES_BIG_ENDIAN)
6112 bitpos = (wchar_bytes - byte - 1) * charwidth;
6113 else
6114 bitpos = byte * charwidth;
6115 val[bitpos < HOST_BITS_PER_WIDE_INT]
6116 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
6117 << (bitpos % HOST_BITS_PER_WIDE_INT);
6121 if (!TREE_UNSIGNED (type))
6123 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
6124 if (bitpos < HOST_BITS_PER_WIDE_INT)
6126 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
6128 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
6129 val[0] = -1;
6132 else if (bitpos == HOST_BITS_PER_WIDE_INT)
6134 if (val[1] < 0)
6135 val[0] = -1;
6137 else if (val[0] & (((HOST_WIDE_INT) 1)
6138 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
6139 val[0] |= ((HOST_WIDE_INT) -1)
6140 << (bitpos - HOST_BITS_PER_WIDE_INT);
6143 value = build_int_2 (val[1], val[0]);
6144 TREE_TYPE (value) = type;
6145 add_pending_init (purpose, value);
6148 constructor_incremental = 0;
6151 /* Return value of FIELD in pending initializer or zero if the field was
6152 not initialized yet. */
6154 static tree
6155 find_init_member (field)
6156 tree field;
6158 struct init_node *p;
6160 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6162 if (constructor_incremental
6163 && tree_int_cst_lt (field, constructor_unfilled_index))
6164 set_nonincremental_init ();
6166 p = constructor_pending_elts;
6167 while (p)
6169 if (tree_int_cst_lt (field, p->purpose))
6170 p = p->left;
6171 else if (tree_int_cst_lt (p->purpose, field))
6172 p = p->right;
6173 else
6174 return p->value;
6177 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6179 tree bitpos = bit_position (field);
6181 if (constructor_incremental
6182 && (!constructor_unfilled_fields
6183 || tree_int_cst_lt (bitpos,
6184 bit_position (constructor_unfilled_fields))))
6185 set_nonincremental_init ();
6187 p = constructor_pending_elts;
6188 while (p)
6190 if (field == p->purpose)
6191 return p->value;
6192 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
6193 p = p->left;
6194 else
6195 p = p->right;
6198 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6200 if (constructor_elements
6201 && TREE_PURPOSE (constructor_elements) == field)
6202 return TREE_VALUE (constructor_elements);
6204 return 0;
6207 /* "Output" the next constructor element.
6208 At top level, really output it to assembler code now.
6209 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
6210 TYPE is the data type that the containing data type wants here.
6211 FIELD is the field (a FIELD_DECL) or the index that this element fills.
6213 PENDING if non-nil means output pending elements that belong
6214 right after this element. (PENDING is normally 1;
6215 it is 0 while outputting pending elements, to avoid recursion.) */
6217 static void
6218 output_init_element (value, type, field, pending)
6219 tree value, type, field;
6220 int pending;
6222 if (type == error_mark_node)
6224 constructor_erroneous = 1;
6225 return;
6227 if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
6228 || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
6229 && !(TREE_CODE (value) == STRING_CST
6230 && TREE_CODE (type) == ARRAY_TYPE
6231 && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
6232 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
6233 TYPE_MAIN_VARIANT (type))))
6234 value = default_conversion (value);
6236 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
6237 && require_constant_value && !flag_isoc99 && pending)
6239 /* As an extension, allow initializing objects with static storage
6240 duration with compound literals (which are then treated just as
6241 the brace enclosed list they contain). */
6242 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
6243 value = DECL_INITIAL (decl);
6246 if (value == error_mark_node)
6247 constructor_erroneous = 1;
6248 else if (!TREE_CONSTANT (value))
6249 constructor_constant = 0;
6250 else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0
6251 || ((TREE_CODE (constructor_type) == RECORD_TYPE
6252 || TREE_CODE (constructor_type) == UNION_TYPE)
6253 && DECL_C_BIT_FIELD (field)
6254 && TREE_CODE (value) != INTEGER_CST))
6255 constructor_simple = 0;
6257 if (require_constant_value && ! TREE_CONSTANT (value))
6259 error_init ("initializer element is not constant");
6260 value = error_mark_node;
6262 else if (require_constant_elements
6263 && initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
6264 pedwarn ("initializer element is not computable at load time");
6266 /* If this field is empty (and not at the end of structure),
6267 don't do anything other than checking the initializer. */
6268 if (field
6269 && (TREE_TYPE (field) == error_mark_node
6270 || (COMPLETE_TYPE_P (TREE_TYPE (field))
6271 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
6272 && (TREE_CODE (constructor_type) == ARRAY_TYPE
6273 || TREE_CHAIN (field)))))
6274 return;
6276 value = digest_init (type, value, require_constant_value);
6277 if (value == error_mark_node)
6279 constructor_erroneous = 1;
6280 return;
6283 /* If this element doesn't come next in sequence,
6284 put it on constructor_pending_elts. */
6285 if (TREE_CODE (constructor_type) == ARRAY_TYPE
6286 && (!constructor_incremental
6287 || !tree_int_cst_equal (field, constructor_unfilled_index)))
6289 if (constructor_incremental
6290 && tree_int_cst_lt (field, constructor_unfilled_index))
6291 set_nonincremental_init ();
6293 add_pending_init (field, value);
6294 return;
6296 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6297 && (!constructor_incremental
6298 || field != constructor_unfilled_fields))
6300 /* We do this for records but not for unions. In a union,
6301 no matter which field is specified, it can be initialized
6302 right away since it starts at the beginning of the union. */
6303 if (constructor_incremental)
6305 if (!constructor_unfilled_fields)
6306 set_nonincremental_init ();
6307 else
6309 tree bitpos, unfillpos;
6311 bitpos = bit_position (field);
6312 unfillpos = bit_position (constructor_unfilled_fields);
6314 if (tree_int_cst_lt (bitpos, unfillpos))
6315 set_nonincremental_init ();
6319 add_pending_init (field, value);
6320 return;
6322 else if (TREE_CODE (constructor_type) == UNION_TYPE
6323 && constructor_elements)
6325 if (TREE_SIDE_EFFECTS (TREE_VALUE (constructor_elements)))
6326 warning_init ("initialized field with side-effects overwritten");
6328 /* We can have just one union field set. */
6329 constructor_elements = 0;
6332 /* Otherwise, output this element either to
6333 constructor_elements or to the assembler file. */
6335 if (field && TREE_CODE (field) == INTEGER_CST)
6336 field = copy_node (field);
6337 constructor_elements
6338 = tree_cons (field, value, constructor_elements);
6340 /* Advance the variable that indicates sequential elements output. */
6341 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6342 constructor_unfilled_index
6343 = size_binop (PLUS_EXPR, constructor_unfilled_index,
6344 bitsize_one_node);
6345 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6347 constructor_unfilled_fields
6348 = TREE_CHAIN (constructor_unfilled_fields);
6350 /* Skip any nameless bit fields. */
6351 while (constructor_unfilled_fields != 0
6352 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6353 && DECL_NAME (constructor_unfilled_fields) == 0)
6354 constructor_unfilled_fields =
6355 TREE_CHAIN (constructor_unfilled_fields);
6357 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6358 constructor_unfilled_fields = 0;
6360 /* Now output any pending elements which have become next. */
6361 if (pending)
6362 output_pending_init_elements (0);
6365 /* Output any pending elements which have become next.
6366 As we output elements, constructor_unfilled_{fields,index}
6367 advances, which may cause other elements to become next;
6368 if so, they too are output.
6370 If ALL is 0, we return when there are
6371 no more pending elements to output now.
6373 If ALL is 1, we output space as necessary so that
6374 we can output all the pending elements. */
6376 static void
6377 output_pending_init_elements (all)
6378 int all;
6380 struct init_node *elt = constructor_pending_elts;
6381 tree next;
6383 retry:
6385 /* Look thru the whole pending tree.
6386 If we find an element that should be output now,
6387 output it. Otherwise, set NEXT to the element
6388 that comes first among those still pending. */
6390 next = 0;
6391 while (elt)
6393 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6395 if (tree_int_cst_equal (elt->purpose,
6396 constructor_unfilled_index))
6397 output_init_element (elt->value,
6398 TREE_TYPE (constructor_type),
6399 constructor_unfilled_index, 0);
6400 else if (tree_int_cst_lt (constructor_unfilled_index,
6401 elt->purpose))
6403 /* Advance to the next smaller node. */
6404 if (elt->left)
6405 elt = elt->left;
6406 else
6408 /* We have reached the smallest node bigger than the
6409 current unfilled index. Fill the space first. */
6410 next = elt->purpose;
6411 break;
6414 else
6416 /* Advance to the next bigger node. */
6417 if (elt->right)
6418 elt = elt->right;
6419 else
6421 /* We have reached the biggest node in a subtree. Find
6422 the parent of it, which is the next bigger node. */
6423 while (elt->parent && elt->parent->right == elt)
6424 elt = elt->parent;
6425 elt = elt->parent;
6426 if (elt && tree_int_cst_lt (constructor_unfilled_index,
6427 elt->purpose))
6429 next = elt->purpose;
6430 break;
6435 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6436 || TREE_CODE (constructor_type) == UNION_TYPE)
6438 tree ctor_unfilled_bitpos, elt_bitpos;
6440 /* If the current record is complete we are done. */
6441 if (constructor_unfilled_fields == 0)
6442 break;
6444 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
6445 elt_bitpos = bit_position (elt->purpose);
6446 /* We can't compare fields here because there might be empty
6447 fields in between. */
6448 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
6450 constructor_unfilled_fields = elt->purpose;
6451 output_init_element (elt->value, TREE_TYPE (elt->purpose),
6452 elt->purpose, 0);
6454 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
6456 /* Advance to the next smaller node. */
6457 if (elt->left)
6458 elt = elt->left;
6459 else
6461 /* We have reached the smallest node bigger than the
6462 current unfilled field. Fill the space first. */
6463 next = elt->purpose;
6464 break;
6467 else
6469 /* Advance to the next bigger node. */
6470 if (elt->right)
6471 elt = elt->right;
6472 else
6474 /* We have reached the biggest node in a subtree. Find
6475 the parent of it, which is the next bigger node. */
6476 while (elt->parent && elt->parent->right == elt)
6477 elt = elt->parent;
6478 elt = elt->parent;
6479 if (elt
6480 && (tree_int_cst_lt (ctor_unfilled_bitpos,
6481 bit_position (elt->purpose))))
6483 next = elt->purpose;
6484 break;
6491 /* Ordinarily return, but not if we want to output all
6492 and there are elements left. */
6493 if (! (all && next != 0))
6494 return;
6496 /* If it's not incremental, just skip over the gap, so that after
6497 jumping to retry we will output the next successive element. */
6498 if (TREE_CODE (constructor_type) == RECORD_TYPE
6499 || TREE_CODE (constructor_type) == UNION_TYPE)
6500 constructor_unfilled_fields = next;
6501 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6502 constructor_unfilled_index = next;
6504 /* ELT now points to the node in the pending tree with the next
6505 initializer to output. */
6506 goto retry;
6509 /* Add one non-braced element to the current constructor level.
6510 This adjusts the current position within the constructor's type.
6511 This may also start or terminate implicit levels
6512 to handle a partly-braced initializer.
6514 Once this has found the correct level for the new element,
6515 it calls output_init_element. */
6517 void
6518 process_init_element (value)
6519 tree value;
6521 tree orig_value = value;
6522 int string_flag = value != 0 && TREE_CODE (value) == STRING_CST;
6524 designator_depth = 0;
6525 designator_errorneous = 0;
6527 /* Handle superfluous braces around string cst as in
6528 char x[] = {"foo"}; */
6529 if (string_flag
6530 && constructor_type
6531 && TREE_CODE (constructor_type) == ARRAY_TYPE
6532 && TREE_CODE (TREE_TYPE (constructor_type)) == INTEGER_TYPE
6533 && integer_zerop (constructor_unfilled_index))
6535 if (constructor_stack->replacement_value)
6536 error_init ("excess elements in char array initializer");
6537 constructor_stack->replacement_value = value;
6538 return;
6541 if (constructor_stack->replacement_value != 0)
6543 error_init ("excess elements in struct initializer");
6544 return;
6547 /* Ignore elements of a brace group if it is entirely superfluous
6548 and has already been diagnosed. */
6549 if (constructor_type == 0)
6550 return;
6552 /* If we've exhausted any levels that didn't have braces,
6553 pop them now. */
6554 while (constructor_stack->implicit)
6556 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6557 || TREE_CODE (constructor_type) == UNION_TYPE)
6558 && constructor_fields == 0)
6559 process_init_element (pop_init_level (1));
6560 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6561 && (constructor_max_index == 0
6562 || tree_int_cst_lt (constructor_max_index,
6563 constructor_index)))
6564 process_init_element (pop_init_level (1));
6565 else
6566 break;
6569 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6570 if (constructor_range_stack)
6572 /* If value is a compound literal and we'll be just using its
6573 content, don't put it into a SAVE_EXPR. */
6574 if (TREE_CODE (value) != COMPOUND_LITERAL_EXPR
6575 || !require_constant_value
6576 || flag_isoc99)
6577 value = save_expr (value);
6580 while (1)
6582 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6584 tree fieldtype;
6585 enum tree_code fieldcode;
6587 if (constructor_fields == 0)
6589 pedwarn_init ("excess elements in struct initializer");
6590 break;
6593 fieldtype = TREE_TYPE (constructor_fields);
6594 if (fieldtype != error_mark_node)
6595 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6596 fieldcode = TREE_CODE (fieldtype);
6598 /* Error for non-static initialization of a flexible array member. */
6599 if (fieldcode == ARRAY_TYPE
6600 && !require_constant_value
6601 && TYPE_SIZE (fieldtype) == NULL_TREE
6602 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6604 error_init ("non-static initialization of a flexible array member");
6605 break;
6608 /* Accept a string constant to initialize a subarray. */
6609 if (value != 0
6610 && fieldcode == ARRAY_TYPE
6611 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6612 && string_flag)
6613 value = orig_value;
6614 /* Otherwise, if we have come to a subaggregate,
6615 and we don't have an element of its type, push into it. */
6616 else if (value != 0 && !constructor_no_implicit
6617 && value != error_mark_node
6618 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6619 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6620 || fieldcode == UNION_TYPE))
6622 push_init_level (1);
6623 continue;
6626 if (value)
6628 push_member_name (constructor_fields);
6629 output_init_element (value, fieldtype, constructor_fields, 1);
6630 RESTORE_SPELLING_DEPTH (constructor_depth);
6632 else
6633 /* Do the bookkeeping for an element that was
6634 directly output as a constructor. */
6636 /* For a record, keep track of end position of last field. */
6637 if (DECL_SIZE (constructor_fields))
6638 constructor_bit_index
6639 = size_binop (PLUS_EXPR,
6640 bit_position (constructor_fields),
6641 DECL_SIZE (constructor_fields));
6643 /* If the current field was the first one not yet written out,
6644 it isn't now, so update. */
6645 if (constructor_unfilled_fields == constructor_fields)
6647 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6648 /* Skip any nameless bit fields. */
6649 while (constructor_unfilled_fields != 0
6650 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6651 && DECL_NAME (constructor_unfilled_fields) == 0)
6652 constructor_unfilled_fields =
6653 TREE_CHAIN (constructor_unfilled_fields);
6657 constructor_fields = TREE_CHAIN (constructor_fields);
6658 /* Skip any nameless bit fields at the beginning. */
6659 while (constructor_fields != 0
6660 && DECL_C_BIT_FIELD (constructor_fields)
6661 && DECL_NAME (constructor_fields) == 0)
6662 constructor_fields = TREE_CHAIN (constructor_fields);
6664 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6666 tree fieldtype;
6667 enum tree_code fieldcode;
6669 if (constructor_fields == 0)
6671 pedwarn_init ("excess elements in union initializer");
6672 break;
6675 fieldtype = TREE_TYPE (constructor_fields);
6676 if (fieldtype != error_mark_node)
6677 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6678 fieldcode = TREE_CODE (fieldtype);
6680 /* Warn that traditional C rejects initialization of unions.
6681 We skip the warning if the value is zero. This is done
6682 under the assumption that the zero initializer in user
6683 code appears conditioned on e.g. __STDC__ to avoid
6684 "missing initializer" warnings and relies on default
6685 initialization to zero in the traditional C case.
6686 We also skip the warning if the initializer is designated,
6687 again on the assumption that this must be conditional on
6688 __STDC__ anyway (and we've already complained about the
6689 member-designator already). */
6690 if (warn_traditional && !in_system_header && !constructor_designated
6691 && !(value && (integer_zerop (value) || real_zerop (value))))
6692 warning ("traditional C rejects initialization of unions");
6694 /* Accept a string constant to initialize a subarray. */
6695 if (value != 0
6696 && fieldcode == ARRAY_TYPE
6697 && TREE_CODE (TREE_TYPE (fieldtype)) == INTEGER_TYPE
6698 && string_flag)
6699 value = orig_value;
6700 /* Otherwise, if we have come to a subaggregate,
6701 and we don't have an element of its type, push into it. */
6702 else if (value != 0 && !constructor_no_implicit
6703 && value != error_mark_node
6704 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != fieldtype
6705 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6706 || fieldcode == UNION_TYPE))
6708 push_init_level (1);
6709 continue;
6712 if (value)
6714 push_member_name (constructor_fields);
6715 output_init_element (value, fieldtype, constructor_fields, 1);
6716 RESTORE_SPELLING_DEPTH (constructor_depth);
6718 else
6719 /* Do the bookkeeping for an element that was
6720 directly output as a constructor. */
6722 constructor_bit_index = DECL_SIZE (constructor_fields);
6723 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6726 constructor_fields = 0;
6728 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6730 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6731 enum tree_code eltcode = TREE_CODE (elttype);
6733 /* Accept a string constant to initialize a subarray. */
6734 if (value != 0
6735 && eltcode == ARRAY_TYPE
6736 && TREE_CODE (TREE_TYPE (elttype)) == INTEGER_TYPE
6737 && string_flag)
6738 value = orig_value;
6739 /* Otherwise, if we have come to a subaggregate,
6740 and we don't have an element of its type, push into it. */
6741 else if (value != 0 && !constructor_no_implicit
6742 && value != error_mark_node
6743 && TYPE_MAIN_VARIANT (TREE_TYPE (value)) != elttype
6744 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6745 || eltcode == UNION_TYPE))
6747 push_init_level (1);
6748 continue;
6751 if (constructor_max_index != 0
6752 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6753 || integer_all_onesp (constructor_max_index)))
6755 pedwarn_init ("excess elements in array initializer");
6756 break;
6759 /* Now output the actual element. */
6760 if (value)
6762 push_array_bounds (tree_low_cst (constructor_index, 0));
6763 output_init_element (value, elttype, constructor_index, 1);
6764 RESTORE_SPELLING_DEPTH (constructor_depth);
6767 constructor_index
6768 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6770 if (! value)
6771 /* If we are doing the bookkeeping for an element that was
6772 directly output as a constructor, we must update
6773 constructor_unfilled_index. */
6774 constructor_unfilled_index = constructor_index;
6776 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6778 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6780 /* Do a basic check of initializer size. Note that vectors
6781 always have a fixed size derived from their type. */
6782 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6784 pedwarn_init ("excess elements in vector initializer");
6785 break;
6788 /* Now output the actual element. */
6789 if (value)
6790 output_init_element (value, elttype, constructor_index, 1);
6792 constructor_index
6793 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6795 if (! value)
6796 /* If we are doing the bookkeeping for an element that was
6797 directly output as a constructor, we must update
6798 constructor_unfilled_index. */
6799 constructor_unfilled_index = constructor_index;
6802 /* Handle the sole element allowed in a braced initializer
6803 for a scalar variable. */
6804 else if (constructor_fields == 0)
6806 pedwarn_init ("excess elements in scalar initializer");
6807 break;
6809 else
6811 if (value)
6812 output_init_element (value, constructor_type, NULL_TREE, 1);
6813 constructor_fields = 0;
6816 /* Handle range initializers either at this level or anywhere higher
6817 in the designator stack. */
6818 if (constructor_range_stack)
6820 struct constructor_range_stack *p, *range_stack;
6821 int finish = 0;
6823 range_stack = constructor_range_stack;
6824 constructor_range_stack = 0;
6825 while (constructor_stack != range_stack->stack)
6827 if (!constructor_stack->implicit)
6828 abort ();
6829 process_init_element (pop_init_level (1));
6831 for (p = range_stack;
6832 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6833 p = p->prev)
6835 if (!constructor_stack->implicit)
6836 abort ();
6837 process_init_element (pop_init_level (1));
6840 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6841 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6842 finish = 1;
6844 while (1)
6846 constructor_index = p->index;
6847 constructor_fields = p->fields;
6848 if (finish && p->range_end && p->index == p->range_start)
6850 finish = 0;
6851 p->prev = 0;
6853 p = p->next;
6854 if (!p)
6855 break;
6856 push_init_level (2);
6857 p->stack = constructor_stack;
6858 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6859 p->index = p->range_start;
6862 if (!finish)
6863 constructor_range_stack = range_stack;
6864 continue;
6867 break;
6870 constructor_range_stack = 0;
6873 /* Build a simple asm-statement, from one string literal. */
6874 tree
6875 simple_asm_stmt (expr)
6876 tree expr;
6878 STRIP_NOPS (expr);
6880 if (TREE_CODE (expr) == ADDR_EXPR)
6881 expr = TREE_OPERAND (expr, 0);
6883 if (TREE_CODE (expr) == STRING_CST)
6885 tree stmt;
6887 /* Simple asm statements are treated as volatile. */
6888 stmt = add_stmt (build_stmt (ASM_STMT, ridpointers[(int) RID_VOLATILE],
6889 expr, NULL_TREE, NULL_TREE, NULL_TREE));
6890 ASM_INPUT_P (stmt) = 1;
6891 return stmt;
6894 error ("argument of `asm' is not a constant string");
6895 return NULL_TREE;
6898 /* Build an asm-statement, whose components are a CV_QUALIFIER, a
6899 STRING, some OUTPUTS, some INPUTS, and some CLOBBERS. */
6901 tree
6902 build_asm_stmt (cv_qualifier, string, outputs, inputs, clobbers)
6903 tree cv_qualifier;
6904 tree string;
6905 tree outputs;
6906 tree inputs;
6907 tree clobbers;
6909 tree tail;
6911 if (TREE_CODE (string) != STRING_CST)
6913 error ("asm template is not a string constant");
6914 return NULL_TREE;
6917 if (cv_qualifier != NULL_TREE
6918 && cv_qualifier != ridpointers[(int) RID_VOLATILE])
6920 warning ("%s qualifier ignored on asm",
6921 IDENTIFIER_POINTER (cv_qualifier));
6922 cv_qualifier = NULL_TREE;
6925 /* We can remove output conversions that change the type,
6926 but not the mode. */
6927 for (tail = outputs; tail; tail = TREE_CHAIN (tail))
6929 tree output = TREE_VALUE (tail);
6931 STRIP_NOPS (output);
6932 TREE_VALUE (tail) = output;
6934 /* Allow conversions as LHS here. build_modify_expr as called below
6935 will do the right thing with them. */
6936 while (TREE_CODE (output) == NOP_EXPR
6937 || TREE_CODE (output) == CONVERT_EXPR
6938 || TREE_CODE (output) == FLOAT_EXPR
6939 || TREE_CODE (output) == FIX_TRUNC_EXPR
6940 || TREE_CODE (output) == FIX_FLOOR_EXPR
6941 || TREE_CODE (output) == FIX_ROUND_EXPR
6942 || TREE_CODE (output) == FIX_CEIL_EXPR)
6943 output = TREE_OPERAND (output, 0);
6945 lvalue_or_else (TREE_VALUE (tail), "invalid lvalue in asm statement");
6948 /* Remove output conversions that change the type but not the mode. */
6949 for (tail = outputs; tail; tail = TREE_CHAIN (tail))
6951 tree output = TREE_VALUE (tail);
6952 STRIP_NOPS (output);
6953 TREE_VALUE (tail) = output;
6956 /* Perform default conversions on array and function inputs.
6957 Don't do this for other types as it would screw up operands
6958 expected to be in memory. */
6959 for (tail = inputs; tail; tail = TREE_CHAIN (tail))
6960 TREE_VALUE (tail) = default_function_array_conversion (TREE_VALUE (tail));
6962 return add_stmt (build_stmt (ASM_STMT, cv_qualifier, string,
6963 outputs, inputs, clobbers));
6966 /* Expand an ASM statement with operands, handling output operands
6967 that are not variables or INDIRECT_REFS by transforming such
6968 cases into cases that expand_asm_operands can handle.
6970 Arguments are same as for expand_asm_operands. */
6972 void
6973 c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
6974 tree string, outputs, inputs, clobbers;
6975 int vol;
6976 const char *filename;
6977 int line;
6979 int noutputs = list_length (outputs);
6980 int i;
6981 /* o[I] is the place that output number I should be written. */
6982 tree *o = (tree *) alloca (noutputs * sizeof (tree));
6983 tree tail;
6985 /* Record the contents of OUTPUTS before it is modified. */
6986 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
6988 o[i] = TREE_VALUE (tail);
6989 if (o[i] == error_mark_node)
6990 return;
6993 /* Generate the ASM_OPERANDS insn; store into the TREE_VALUEs of
6994 OUTPUTS some trees for where the values were actually stored. */
6995 expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line);
6997 /* Copy all the intermediate outputs into the specified outputs. */
6998 for (i = 0, tail = outputs; tail; tail = TREE_CHAIN (tail), i++)
7000 if (o[i] != TREE_VALUE (tail))
7002 expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)),
7003 NULL_RTX, VOIDmode, EXPAND_NORMAL);
7004 free_temp_slots ();
7006 /* Restore the original value so that it's correct the next
7007 time we expand this function. */
7008 TREE_VALUE (tail) = o[i];
7010 /* Detect modification of read-only values.
7011 (Otherwise done by build_modify_expr.) */
7012 else
7014 tree type = TREE_TYPE (o[i]);
7015 if (TREE_READONLY (o[i])
7016 || TYPE_READONLY (type)
7017 || ((TREE_CODE (type) == RECORD_TYPE
7018 || TREE_CODE (type) == UNION_TYPE)
7019 && C_TYPE_FIELDS_READONLY (type)))
7020 readonly_warning (o[i], "modification by `asm'");
7024 /* Those MODIFY_EXPRs could do autoincrements. */
7025 emit_queue ();
7028 /* Expand a C `return' statement.
7029 RETVAL is the expression for what to return,
7030 or a null pointer for `return;' with no value. */
7032 tree
7033 c_expand_return (retval)
7034 tree retval;
7036 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
7038 if (TREE_THIS_VOLATILE (current_function_decl))
7039 warning ("function declared `noreturn' has a `return' statement");
7041 if (!retval)
7043 current_function_returns_null = 1;
7044 if ((warn_return_type || flag_isoc99)
7045 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
7046 pedwarn_c99 ("`return' with no value, in function returning non-void");
7048 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
7050 current_function_returns_null = 1;
7051 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
7052 pedwarn ("`return' with a value, in function returning void");
7054 else
7056 tree t = convert_for_assignment (valtype, retval, _("return"),
7057 NULL_TREE, NULL_TREE, 0);
7058 tree res = DECL_RESULT (current_function_decl);
7059 tree inner;
7061 current_function_returns_value = 1;
7062 if (t == error_mark_node)
7063 return NULL_TREE;
7065 inner = t = convert (TREE_TYPE (res), t);
7067 /* Strip any conversions, additions, and subtractions, and see if
7068 we are returning the address of a local variable. Warn if so. */
7069 while (1)
7071 switch (TREE_CODE (inner))
7073 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
7074 case PLUS_EXPR:
7075 inner = TREE_OPERAND (inner, 0);
7076 continue;
7078 case MINUS_EXPR:
7079 /* If the second operand of the MINUS_EXPR has a pointer
7080 type (or is converted from it), this may be valid, so
7081 don't give a warning. */
7083 tree op1 = TREE_OPERAND (inner, 1);
7085 while (! POINTER_TYPE_P (TREE_TYPE (op1))
7086 && (TREE_CODE (op1) == NOP_EXPR
7087 || TREE_CODE (op1) == NON_LVALUE_EXPR
7088 || TREE_CODE (op1) == CONVERT_EXPR))
7089 op1 = TREE_OPERAND (op1, 0);
7091 if (POINTER_TYPE_P (TREE_TYPE (op1)))
7092 break;
7094 inner = TREE_OPERAND (inner, 0);
7095 continue;
7098 case ADDR_EXPR:
7099 inner = TREE_OPERAND (inner, 0);
7101 while (TREE_CODE_CLASS (TREE_CODE (inner)) == 'r')
7102 inner = TREE_OPERAND (inner, 0);
7104 if (TREE_CODE (inner) == VAR_DECL
7105 && ! DECL_EXTERNAL (inner)
7106 && ! TREE_STATIC (inner)
7107 && DECL_CONTEXT (inner) == current_function_decl)
7108 warning ("function returns address of local variable");
7109 break;
7111 default:
7112 break;
7115 break;
7118 retval = build (MODIFY_EXPR, TREE_TYPE (res), res, t);
7121 return add_stmt (build_return_stmt (retval));
7124 struct c_switch {
7125 /* The SWITCH_STMT being built. */
7126 tree switch_stmt;
7127 /* A splay-tree mapping the low element of a case range to the high
7128 element, or NULL_TREE if there is no high element. Used to
7129 determine whether or not a new case label duplicates an old case
7130 label. We need a tree, rather than simply a hash table, because
7131 of the GNU case range extension. */
7132 splay_tree cases;
7133 /* The next node on the stack. */
7134 struct c_switch *next;
7137 /* A stack of the currently active switch statements. The innermost
7138 switch statement is on the top of the stack. There is no need to
7139 mark the stack for garbage collection because it is only active
7140 during the processing of the body of a function, and we never
7141 collect at that point. */
7143 static struct c_switch *switch_stack;
7145 /* Start a C switch statement, testing expression EXP. Return the new
7146 SWITCH_STMT. */
7148 tree
7149 c_start_case (exp)
7150 tree exp;
7152 enum tree_code code;
7153 tree type, orig_type = error_mark_node;
7154 struct c_switch *cs;
7156 if (exp != error_mark_node)
7158 code = TREE_CODE (TREE_TYPE (exp));
7159 orig_type = TREE_TYPE (exp);
7161 if (! INTEGRAL_TYPE_P (orig_type)
7162 && code != ERROR_MARK)
7164 error ("switch quantity not an integer");
7165 exp = integer_zero_node;
7167 else
7169 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
7171 if (warn_traditional && !in_system_header
7172 && (type == long_integer_type_node
7173 || type == long_unsigned_type_node))
7174 warning ("`long' switch expression not converted to `int' in ISO C");
7176 exp = default_conversion (exp);
7177 type = TREE_TYPE (exp);
7181 /* Add this new SWITCH_STMT to the stack. */
7182 cs = (struct c_switch *) xmalloc (sizeof (*cs));
7183 cs->switch_stmt = build_stmt (SWITCH_STMT, exp, NULL_TREE, orig_type);
7184 cs->cases = splay_tree_new (case_compare, NULL, NULL);
7185 cs->next = switch_stack;
7186 switch_stack = cs;
7188 return add_stmt (switch_stack->switch_stmt);
7191 /* Process a case label. */
7193 tree
7194 do_case (low_value, high_value)
7195 tree low_value;
7196 tree high_value;
7198 tree label = NULL_TREE;
7200 if (switch_stack)
7202 bool switch_was_empty_p = (SWITCH_BODY (switch_stack->switch_stmt) == NULL_TREE);
7204 label = c_add_case_label (switch_stack->cases,
7205 SWITCH_COND (switch_stack->switch_stmt),
7206 low_value, high_value);
7207 if (label == error_mark_node)
7208 label = NULL_TREE;
7209 else if (switch_was_empty_p)
7211 /* Attach the first case label to the SWITCH_BODY. */
7212 SWITCH_BODY (switch_stack->switch_stmt) = TREE_CHAIN (switch_stack->switch_stmt);
7213 TREE_CHAIN (switch_stack->switch_stmt) = NULL_TREE;
7216 else if (low_value)
7217 error ("case label not within a switch statement");
7218 else
7219 error ("`default' label not within a switch statement");
7221 return label;
7224 /* Finish the switch statement. */
7226 void
7227 c_finish_case ()
7229 struct c_switch *cs = switch_stack;
7231 /* Rechain the next statements to the SWITCH_STMT. */
7232 last_tree = cs->switch_stmt;
7234 /* Pop the stack. */
7235 switch_stack = switch_stack->next;
7236 splay_tree_delete (cs->cases);
7237 free (cs);