* gcc.dg/intmax_t-1.c: Extend dg-error to cover sh*-*-elf targets.
[official-gcc.git] / gcc / c-typeck.c
blobc0498955f081d897f0b27d755b226ef8458e3fbb
1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005 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, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA. */
23 /* This file is part of the C front end.
24 It contains routines to build C expressions given their operands,
25 including computing the types of the result, C-specific error checks,
26 and some optimization. */
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "rtl.h"
33 #include "tree.h"
34 #include "langhooks.h"
35 #include "c-tree.h"
36 #include "tm_p.h"
37 #include "flags.h"
38 #include "output.h"
39 #include "expr.h"
40 #include "toplev.h"
41 #include "intl.h"
42 #include "ggc.h"
43 #include "target.h"
44 #include "tree-iterator.h"
45 #include "tree-gimple.h"
46 #include "tree-flow.h"
48 /* Possible cases of implicit bad conversions. Used to select
49 diagnostic messages in convert_for_assignment. */
50 enum impl_conv {
51 ic_argpass,
52 ic_argpass_nonproto,
53 ic_assign,
54 ic_init,
55 ic_return
58 /* The level of nesting inside "__alignof__". */
59 int in_alignof;
61 /* The level of nesting inside "sizeof". */
62 int in_sizeof;
64 /* The level of nesting inside "typeof". */
65 int in_typeof;
67 struct c_label_context_se *label_context_stack_se;
68 struct c_label_context_vm *label_context_stack_vm;
70 /* Nonzero if we've already printed a "missing braces around initializer"
71 message within this initializer. */
72 static int missing_braces_mentioned;
74 static int require_constant_value;
75 static int require_constant_elements;
77 static tree qualify_type (tree, tree);
78 static int tagged_types_tu_compatible_p (tree, tree);
79 static int comp_target_types (tree, tree);
80 static int function_types_compatible_p (tree, tree);
81 static int type_lists_compatible_p (tree, tree);
82 static tree decl_constant_value_for_broken_optimization (tree);
83 static tree lookup_field (tree, tree);
84 static tree convert_arguments (tree, tree, tree, tree);
85 static tree pointer_diff (tree, tree);
86 static tree convert_for_assignment (tree, tree, enum impl_conv, tree, tree,
87 int);
88 static tree valid_compound_expr_initializer (tree, tree);
89 static void push_string (const char *);
90 static void push_member_name (tree);
91 static void push_array_bounds (int);
92 static int spelling_length (void);
93 static char *print_spelling (char *);
94 static void warning_init (const char *);
95 static tree digest_init (tree, tree, bool, int);
96 static void output_init_element (tree, bool, tree, tree, int);
97 static void output_pending_init_elements (int);
98 static int set_designator (int);
99 static void push_range_stack (tree);
100 static void add_pending_init (tree, tree);
101 static void set_nonincremental_init (void);
102 static void set_nonincremental_init_from_string (tree);
103 static tree find_init_member (tree);
104 static void readonly_error (tree, enum lvalue_use);
105 static int lvalue_or_else (tree, enum lvalue_use);
106 static int lvalue_p (tree);
107 static void record_maybe_used_decl (tree);
109 /* Do `exp = require_complete_type (exp);' to make sure exp
110 does not have an incomplete type. (That includes void types.) */
112 tree
113 require_complete_type (tree value)
115 tree type = TREE_TYPE (value);
117 if (value == error_mark_node || type == error_mark_node)
118 return error_mark_node;
120 /* First, detect a valid value with a complete type. */
121 if (COMPLETE_TYPE_P (type))
122 return value;
124 c_incomplete_type_error (value, type);
125 return error_mark_node;
128 /* Print an error message for invalid use of an incomplete type.
129 VALUE is the expression that was used (or 0 if that isn't known)
130 and TYPE is the type that was invalid. */
132 void
133 c_incomplete_type_error (tree value, tree type)
135 const char *type_code_string;
137 /* Avoid duplicate error message. */
138 if (TREE_CODE (type) == ERROR_MARK)
139 return;
141 if (value != 0 && (TREE_CODE (value) == VAR_DECL
142 || TREE_CODE (value) == PARM_DECL))
143 error ("%qD has an incomplete type", value);
144 else
146 retry:
147 /* We must print an error message. Be clever about what it says. */
149 switch (TREE_CODE (type))
151 case RECORD_TYPE:
152 type_code_string = "struct";
153 break;
155 case UNION_TYPE:
156 type_code_string = "union";
157 break;
159 case ENUMERAL_TYPE:
160 type_code_string = "enum";
161 break;
163 case VOID_TYPE:
164 error ("invalid use of void expression");
165 return;
167 case ARRAY_TYPE:
168 if (TYPE_DOMAIN (type))
170 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
172 error ("invalid use of flexible array member");
173 return;
175 type = TREE_TYPE (type);
176 goto retry;
178 error ("invalid use of array with unspecified bounds");
179 return;
181 default:
182 gcc_unreachable ();
185 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
186 error ("invalid use of undefined type %<%s %E%>",
187 type_code_string, TYPE_NAME (type));
188 else
189 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
190 error ("invalid use of incomplete typedef %qD", TYPE_NAME (type));
194 /* Given a type, apply default promotions wrt unnamed function
195 arguments and return the new type. */
197 tree
198 c_type_promotes_to (tree type)
200 if (TYPE_MAIN_VARIANT (type) == float_type_node)
201 return double_type_node;
203 if (c_promoting_integer_type_p (type))
205 /* Preserve unsignedness if not really getting any wider. */
206 if (TYPE_UNSIGNED (type)
207 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
208 return unsigned_type_node;
209 return integer_type_node;
212 return type;
215 /* Return a variant of TYPE which has all the type qualifiers of LIKE
216 as well as those of TYPE. */
218 static tree
219 qualify_type (tree type, tree like)
221 return c_build_qualified_type (type,
222 TYPE_QUALS (type) | TYPE_QUALS (like));
225 /* Return the composite type of two compatible types.
227 We assume that comptypes has already been done and returned
228 nonzero; if that isn't so, this may crash. In particular, we
229 assume that qualifiers match. */
231 tree
232 composite_type (tree t1, tree t2)
234 enum tree_code code1;
235 enum tree_code code2;
236 tree attributes;
238 /* Save time if the two types are the same. */
240 if (t1 == t2) return t1;
242 /* If one type is nonsense, use the other. */
243 if (t1 == error_mark_node)
244 return t2;
245 if (t2 == error_mark_node)
246 return t1;
248 code1 = TREE_CODE (t1);
249 code2 = TREE_CODE (t2);
251 /* Merge the attributes. */
252 attributes = targetm.merge_type_attributes (t1, t2);
254 /* If one is an enumerated type and the other is the compatible
255 integer type, the composite type might be either of the two
256 (DR#013 question 3). For consistency, use the enumerated type as
257 the composite type. */
259 if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
260 return t1;
261 if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
262 return t2;
264 gcc_assert (code1 == code2);
266 switch (code1)
268 case POINTER_TYPE:
269 /* For two pointers, do this recursively on the target type. */
271 tree pointed_to_1 = TREE_TYPE (t1);
272 tree pointed_to_2 = TREE_TYPE (t2);
273 tree target = composite_type (pointed_to_1, pointed_to_2);
274 t1 = build_pointer_type (target);
275 t1 = build_type_attribute_variant (t1, attributes);
276 return qualify_type (t1, t2);
279 case ARRAY_TYPE:
281 tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
282 int quals;
283 tree unqual_elt;
284 tree d1 = TYPE_DOMAIN (t1);
285 tree d2 = TYPE_DOMAIN (t2);
286 bool d1_variable, d2_variable;
287 bool d1_zero, d2_zero;
289 /* We should not have any type quals on arrays at all. */
290 gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
292 d1_zero = d1 == 0 || !TYPE_MAX_VALUE (d1);
293 d2_zero = d2 == 0 || !TYPE_MAX_VALUE (d2);
295 d1_variable = (!d1_zero
296 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
297 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
298 d2_variable = (!d2_zero
299 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
300 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
302 /* Save space: see if the result is identical to one of the args. */
303 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1)
304 && (d2_variable || d2_zero || !d1_variable))
305 return build_type_attribute_variant (t1, attributes);
306 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2)
307 && (d1_variable || d1_zero || !d2_variable))
308 return build_type_attribute_variant (t2, attributes);
310 if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
311 return build_type_attribute_variant (t1, attributes);
312 if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
313 return build_type_attribute_variant (t2, attributes);
315 /* Merge the element types, and have a size if either arg has
316 one. We may have qualifiers on the element types. To set
317 up TYPE_MAIN_VARIANT correctly, we need to form the
318 composite of the unqualified types and add the qualifiers
319 back at the end. */
320 quals = TYPE_QUALS (strip_array_types (elt));
321 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
322 t1 = build_array_type (unqual_elt,
323 TYPE_DOMAIN ((TYPE_DOMAIN (t1)
324 && (d2_variable
325 || d2_zero
326 || !d1_variable))
327 ? t1
328 : t2));
329 t1 = c_build_qualified_type (t1, quals);
330 return build_type_attribute_variant (t1, attributes);
333 case FUNCTION_TYPE:
334 /* Function types: prefer the one that specified arg types.
335 If both do, merge the arg types. Also merge the return types. */
337 tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
338 tree p1 = TYPE_ARG_TYPES (t1);
339 tree p2 = TYPE_ARG_TYPES (t2);
340 int len;
341 tree newargs, n;
342 int i;
344 /* Save space: see if the result is identical to one of the args. */
345 if (valtype == TREE_TYPE (t1) && !TYPE_ARG_TYPES (t2))
346 return build_type_attribute_variant (t1, attributes);
347 if (valtype == TREE_TYPE (t2) && !TYPE_ARG_TYPES (t1))
348 return build_type_attribute_variant (t2, attributes);
350 /* Simple way if one arg fails to specify argument types. */
351 if (TYPE_ARG_TYPES (t1) == 0)
353 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
354 t1 = build_type_attribute_variant (t1, attributes);
355 return qualify_type (t1, t2);
357 if (TYPE_ARG_TYPES (t2) == 0)
359 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
360 t1 = build_type_attribute_variant (t1, attributes);
361 return qualify_type (t1, t2);
364 /* If both args specify argument types, we must merge the two
365 lists, argument by argument. */
366 /* Tell global_bindings_p to return false so that variable_size
367 doesn't die on VLAs in parameter types. */
368 c_override_global_bindings_to_false = true;
370 len = list_length (p1);
371 newargs = 0;
373 for (i = 0; i < len; i++)
374 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
376 n = newargs;
378 for (; p1;
379 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
381 /* A null type means arg type is not specified.
382 Take whatever the other function type has. */
383 if (TREE_VALUE (p1) == 0)
385 TREE_VALUE (n) = TREE_VALUE (p2);
386 goto parm_done;
388 if (TREE_VALUE (p2) == 0)
390 TREE_VALUE (n) = TREE_VALUE (p1);
391 goto parm_done;
394 /* Given wait (union {union wait *u; int *i} *)
395 and wait (union wait *),
396 prefer union wait * as type of parm. */
397 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
398 && TREE_VALUE (p1) != TREE_VALUE (p2))
400 tree memb;
401 tree mv2 = TREE_VALUE (p2);
402 if (mv2 && mv2 != error_mark_node
403 && TREE_CODE (mv2) != ARRAY_TYPE)
404 mv2 = TYPE_MAIN_VARIANT (mv2);
405 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
406 memb; memb = TREE_CHAIN (memb))
408 tree mv3 = TREE_TYPE (memb);
409 if (mv3 && mv3 != error_mark_node
410 && TREE_CODE (mv3) != ARRAY_TYPE)
411 mv3 = TYPE_MAIN_VARIANT (mv3);
412 if (comptypes (mv3, mv2))
414 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
415 TREE_VALUE (p2));
416 if (pedantic)
417 pedwarn ("function types not truly compatible in ISO C");
418 goto parm_done;
422 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
423 && TREE_VALUE (p2) != TREE_VALUE (p1))
425 tree memb;
426 tree mv1 = TREE_VALUE (p1);
427 if (mv1 && mv1 != error_mark_node
428 && TREE_CODE (mv1) != ARRAY_TYPE)
429 mv1 = TYPE_MAIN_VARIANT (mv1);
430 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
431 memb; memb = TREE_CHAIN (memb))
433 tree mv3 = TREE_TYPE (memb);
434 if (mv3 && mv3 != error_mark_node
435 && TREE_CODE (mv3) != ARRAY_TYPE)
436 mv3 = TYPE_MAIN_VARIANT (mv3);
437 if (comptypes (mv3, mv1))
439 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
440 TREE_VALUE (p1));
441 if (pedantic)
442 pedwarn ("function types not truly compatible in ISO C");
443 goto parm_done;
447 TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
448 parm_done: ;
451 c_override_global_bindings_to_false = false;
452 t1 = build_function_type (valtype, newargs);
453 t1 = qualify_type (t1, t2);
454 /* ... falls through ... */
457 default:
458 return build_type_attribute_variant (t1, attributes);
463 /* Return the type of a conditional expression between pointers to
464 possibly differently qualified versions of compatible types.
466 We assume that comp_target_types has already been done and returned
467 nonzero; if that isn't so, this may crash. */
469 static tree
470 common_pointer_type (tree t1, tree t2)
472 tree attributes;
473 tree pointed_to_1, mv1;
474 tree pointed_to_2, mv2;
475 tree target;
477 /* Save time if the two types are the same. */
479 if (t1 == t2) return t1;
481 /* If one type is nonsense, use the other. */
482 if (t1 == error_mark_node)
483 return t2;
484 if (t2 == error_mark_node)
485 return t1;
487 gcc_assert (TREE_CODE (t1) == POINTER_TYPE
488 && TREE_CODE (t2) == POINTER_TYPE);
490 /* Merge the attributes. */
491 attributes = targetm.merge_type_attributes (t1, t2);
493 /* Find the composite type of the target types, and combine the
494 qualifiers of the two types' targets. Do not lose qualifiers on
495 array element types by taking the TYPE_MAIN_VARIANT. */
496 mv1 = pointed_to_1 = TREE_TYPE (t1);
497 mv2 = pointed_to_2 = TREE_TYPE (t2);
498 if (TREE_CODE (mv1) != ARRAY_TYPE)
499 mv1 = TYPE_MAIN_VARIANT (pointed_to_1);
500 if (TREE_CODE (mv2) != ARRAY_TYPE)
501 mv2 = TYPE_MAIN_VARIANT (pointed_to_2);
502 target = composite_type (mv1, mv2);
503 t1 = build_pointer_type (c_build_qualified_type
504 (target,
505 TYPE_QUALS (pointed_to_1) |
506 TYPE_QUALS (pointed_to_2)));
507 return build_type_attribute_variant (t1, attributes);
510 /* Return the common type for two arithmetic types under the usual
511 arithmetic conversions. The default conversions have already been
512 applied, and enumerated types converted to their compatible integer
513 types. The resulting type is unqualified and has no attributes.
515 This is the type for the result of most arithmetic operations
516 if the operands have the given two types. */
518 static tree
519 c_common_type (tree t1, tree t2)
521 enum tree_code code1;
522 enum tree_code code2;
524 /* If one type is nonsense, use the other. */
525 if (t1 == error_mark_node)
526 return t2;
527 if (t2 == error_mark_node)
528 return t1;
530 if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
531 t1 = TYPE_MAIN_VARIANT (t1);
533 if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
534 t2 = TYPE_MAIN_VARIANT (t2);
536 if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
537 t1 = build_type_attribute_variant (t1, NULL_TREE);
539 if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
540 t2 = build_type_attribute_variant (t2, NULL_TREE);
542 /* Save time if the two types are the same. */
544 if (t1 == t2) return t1;
546 code1 = TREE_CODE (t1);
547 code2 = TREE_CODE (t2);
549 gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
550 || code1 == REAL_TYPE || code1 == INTEGER_TYPE);
551 gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
552 || code2 == REAL_TYPE || code2 == INTEGER_TYPE);
554 /* If one type is a vector type, return that type. (How the usual
555 arithmetic conversions apply to the vector types extension is not
556 precisely specified.) */
557 if (code1 == VECTOR_TYPE)
558 return t1;
560 if (code2 == VECTOR_TYPE)
561 return t2;
563 /* If one type is complex, form the common type of the non-complex
564 components, then make that complex. Use T1 or T2 if it is the
565 required type. */
566 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
568 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
569 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
570 tree subtype = c_common_type (subtype1, subtype2);
572 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
573 return t1;
574 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
575 return t2;
576 else
577 return build_complex_type (subtype);
580 /* If only one is real, use it as the result. */
582 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
583 return t1;
585 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
586 return t2;
588 /* Both real or both integers; use the one with greater precision. */
590 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
591 return t1;
592 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
593 return t2;
595 /* Same precision. Prefer long longs to longs to ints when the
596 same precision, following the C99 rules on integer type rank
597 (which are equivalent to the C90 rules for C90 types). */
599 if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
600 || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
601 return long_long_unsigned_type_node;
603 if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
604 || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
606 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
607 return long_long_unsigned_type_node;
608 else
609 return long_long_integer_type_node;
612 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
613 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
614 return long_unsigned_type_node;
616 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
617 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
619 /* But preserve unsignedness from the other type,
620 since long cannot hold all the values of an unsigned int. */
621 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
622 return long_unsigned_type_node;
623 else
624 return long_integer_type_node;
627 /* Likewise, prefer long double to double even if same size. */
628 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
629 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
630 return long_double_type_node;
632 /* Otherwise prefer the unsigned one. */
634 if (TYPE_UNSIGNED (t1))
635 return t1;
636 else
637 return t2;
640 /* Wrapper around c_common_type that is used by c-common.c and other
641 front end optimizations that remove promotions. ENUMERAL_TYPEs
642 are allowed here and are converted to their compatible integer types.
643 BOOLEAN_TYPEs are allowed here and return either boolean_type_node or
644 preferably a non-Boolean type as the common type. */
645 tree
646 common_type (tree t1, tree t2)
648 if (TREE_CODE (t1) == ENUMERAL_TYPE)
649 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
650 if (TREE_CODE (t2) == ENUMERAL_TYPE)
651 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
653 /* If both types are BOOLEAN_TYPE, then return boolean_type_node. */
654 if (TREE_CODE (t1) == BOOLEAN_TYPE
655 && TREE_CODE (t2) == BOOLEAN_TYPE)
656 return boolean_type_node;
658 /* If either type is BOOLEAN_TYPE, then return the other. */
659 if (TREE_CODE (t1) == BOOLEAN_TYPE)
660 return t2;
661 if (TREE_CODE (t2) == BOOLEAN_TYPE)
662 return t1;
664 return c_common_type (t1, t2);
667 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
668 or various other operations. Return 2 if they are compatible
669 but a warning may be needed if you use them together. */
672 comptypes (tree type1, tree type2)
674 tree t1 = type1;
675 tree t2 = type2;
676 int attrval, val;
678 /* Suppress errors caused by previously reported errors. */
680 if (t1 == t2 || !t1 || !t2
681 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
682 return 1;
684 /* If either type is the internal version of sizetype, return the
685 language version. */
686 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
687 && TYPE_ORIG_SIZE_TYPE (t1))
688 t1 = TYPE_ORIG_SIZE_TYPE (t1);
690 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
691 && TYPE_ORIG_SIZE_TYPE (t2))
692 t2 = TYPE_ORIG_SIZE_TYPE (t2);
695 /* Enumerated types are compatible with integer types, but this is
696 not transitive: two enumerated types in the same translation unit
697 are compatible with each other only if they are the same type. */
699 if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
700 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
701 else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
702 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
704 if (t1 == t2)
705 return 1;
707 /* Different classes of types can't be compatible. */
709 if (TREE_CODE (t1) != TREE_CODE (t2))
710 return 0;
712 /* Qualifiers must match. C99 6.7.3p9 */
714 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
715 return 0;
717 /* Allow for two different type nodes which have essentially the same
718 definition. Note that we already checked for equality of the type
719 qualifiers (just above). */
721 if (TREE_CODE (t1) != ARRAY_TYPE
722 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
723 return 1;
725 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
726 if (!(attrval = targetm.comp_type_attributes (t1, t2)))
727 return 0;
729 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
730 val = 0;
732 switch (TREE_CODE (t1))
734 case POINTER_TYPE:
735 /* Do not remove mode or aliasing information. */
736 if (TYPE_MODE (t1) != TYPE_MODE (t2)
737 || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2))
738 break;
739 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
740 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
741 break;
743 case FUNCTION_TYPE:
744 val = function_types_compatible_p (t1, t2);
745 break;
747 case ARRAY_TYPE:
749 tree d1 = TYPE_DOMAIN (t1);
750 tree d2 = TYPE_DOMAIN (t2);
751 bool d1_variable, d2_variable;
752 bool d1_zero, d2_zero;
753 val = 1;
755 /* Target types must match incl. qualifiers. */
756 if (TREE_TYPE (t1) != TREE_TYPE (t2)
757 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
758 return 0;
760 /* Sizes must match unless one is missing or variable. */
761 if (d1 == 0 || d2 == 0 || d1 == d2)
762 break;
764 d1_zero = !TYPE_MAX_VALUE (d1);
765 d2_zero = !TYPE_MAX_VALUE (d2);
767 d1_variable = (!d1_zero
768 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
769 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
770 d2_variable = (!d2_zero
771 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
772 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
774 if (d1_variable || d2_variable)
775 break;
776 if (d1_zero && d2_zero)
777 break;
778 if (d1_zero || d2_zero
779 || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
780 || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
781 val = 0;
783 break;
786 case ENUMERAL_TYPE:
787 case RECORD_TYPE:
788 case UNION_TYPE:
789 if (val != 1 && !same_translation_unit_p (t1, t2))
790 val = tagged_types_tu_compatible_p (t1, t2);
791 break;
793 case VECTOR_TYPE:
794 val = TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
795 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2));
796 break;
798 default:
799 break;
801 return attrval == 2 && val == 1 ? 2 : val;
804 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
805 ignoring their qualifiers. */
807 static int
808 comp_target_types (tree ttl, tree ttr)
810 int val;
811 tree mvl, mvr;
813 /* Do not lose qualifiers on element types of array types that are
814 pointer targets by taking their TYPE_MAIN_VARIANT. */
815 mvl = TREE_TYPE (ttl);
816 mvr = TREE_TYPE (ttr);
817 if (TREE_CODE (mvl) != ARRAY_TYPE)
818 mvl = TYPE_MAIN_VARIANT (mvl);
819 if (TREE_CODE (mvr) != ARRAY_TYPE)
820 mvr = TYPE_MAIN_VARIANT (mvr);
821 val = comptypes (mvl, mvr);
823 if (val == 2 && pedantic)
824 pedwarn ("types are not quite compatible");
825 return val;
828 /* Subroutines of `comptypes'. */
830 /* Determine whether two trees derive from the same translation unit.
831 If the CONTEXT chain ends in a null, that tree's context is still
832 being parsed, so if two trees have context chains ending in null,
833 they're in the same translation unit. */
835 same_translation_unit_p (tree t1, tree t2)
837 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
838 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
840 case tcc_declaration:
841 t1 = DECL_CONTEXT (t1); break;
842 case tcc_type:
843 t1 = TYPE_CONTEXT (t1); break;
844 case tcc_exceptional:
845 t1 = BLOCK_SUPERCONTEXT (t1); break; /* assume block */
846 default: gcc_unreachable ();
849 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
850 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
852 case tcc_declaration:
853 t2 = DECL_CONTEXT (t2); break;
854 case tcc_type:
855 t2 = TYPE_CONTEXT (t2); break;
856 case tcc_exceptional:
857 t2 = BLOCK_SUPERCONTEXT (t2); break; /* assume block */
858 default: gcc_unreachable ();
861 return t1 == t2;
864 /* The C standard says that two structures in different translation
865 units are compatible with each other only if the types of their
866 fields are compatible (among other things). So, consider two copies
867 of this structure: */
869 struct tagged_tu_seen {
870 const struct tagged_tu_seen * next;
871 tree t1;
872 tree t2;
875 /* Can they be compatible with each other? We choose to break the
876 recursion by allowing those types to be compatible. */
878 static const struct tagged_tu_seen * tagged_tu_seen_base;
880 /* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
881 compatible. If the two types are not the same (which has been
882 checked earlier), this can only happen when multiple translation
883 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
884 rules. */
886 static int
887 tagged_types_tu_compatible_p (tree t1, tree t2)
889 tree s1, s2;
890 bool needs_warning = false;
892 /* We have to verify that the tags of the types are the same. This
893 is harder than it looks because this may be a typedef, so we have
894 to go look at the original type. It may even be a typedef of a
895 typedef...
896 In the case of compiler-created builtin structs the TYPE_DECL
897 may be a dummy, with no DECL_ORIGINAL_TYPE. Don't fault. */
898 while (TYPE_NAME (t1)
899 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
900 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
901 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
903 while (TYPE_NAME (t2)
904 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL
905 && DECL_ORIGINAL_TYPE (TYPE_NAME (t2)))
906 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
908 /* C90 didn't have the requirement that the two tags be the same. */
909 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
910 return 0;
912 /* C90 didn't say what happened if one or both of the types were
913 incomplete; we choose to follow C99 rules here, which is that they
914 are compatible. */
915 if (TYPE_SIZE (t1) == NULL
916 || TYPE_SIZE (t2) == NULL)
917 return 1;
920 const struct tagged_tu_seen * tts_i;
921 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
922 if (tts_i->t1 == t1 && tts_i->t2 == t2)
923 return 1;
926 switch (TREE_CODE (t1))
928 case ENUMERAL_TYPE:
931 /* Speed up the case where the type values are in the same order. */
932 tree tv1 = TYPE_VALUES (t1);
933 tree tv2 = TYPE_VALUES (t2);
935 if (tv1 == tv2)
936 return 1;
938 for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
940 if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
941 break;
942 if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
943 return 0;
946 if (tv1 == NULL_TREE && tv2 == NULL_TREE)
947 return 1;
948 if (tv1 == NULL_TREE || tv2 == NULL_TREE)
949 return 0;
951 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
952 return 0;
954 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
956 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
957 if (s2 == NULL
958 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
959 return 0;
961 return 1;
964 case UNION_TYPE:
966 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
967 return 0;
969 for (s1 = TYPE_FIELDS (t1); s1; s1 = TREE_CHAIN (s1))
971 bool ok = false;
972 struct tagged_tu_seen tts;
974 tts.next = tagged_tu_seen_base;
975 tts.t1 = t1;
976 tts.t2 = t2;
977 tagged_tu_seen_base = &tts;
979 if (DECL_NAME (s1) != NULL)
980 for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
981 if (DECL_NAME (s1) == DECL_NAME (s2))
983 int result;
984 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
985 if (result == 0)
986 break;
987 if (result == 2)
988 needs_warning = true;
990 if (TREE_CODE (s1) == FIELD_DECL
991 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
992 DECL_FIELD_BIT_OFFSET (s2)) != 1)
993 break;
995 ok = true;
996 break;
998 tagged_tu_seen_base = tts.next;
999 if (!ok)
1000 return 0;
1002 return needs_warning ? 2 : 1;
1005 case RECORD_TYPE:
1007 struct tagged_tu_seen tts;
1009 tts.next = tagged_tu_seen_base;
1010 tts.t1 = t1;
1011 tts.t2 = t2;
1012 tagged_tu_seen_base = &tts;
1014 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
1015 s1 && s2;
1016 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
1018 int result;
1019 if (TREE_CODE (s1) != TREE_CODE (s2)
1020 || DECL_NAME (s1) != DECL_NAME (s2))
1021 break;
1022 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
1023 if (result == 0)
1024 break;
1025 if (result == 2)
1026 needs_warning = true;
1028 if (TREE_CODE (s1) == FIELD_DECL
1029 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1030 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1031 break;
1033 tagged_tu_seen_base = tts.next;
1034 if (s1 && s2)
1035 return 0;
1036 return needs_warning ? 2 : 1;
1039 default:
1040 gcc_unreachable ();
1044 /* Return 1 if two function types F1 and F2 are compatible.
1045 If either type specifies no argument types,
1046 the other must specify a fixed number of self-promoting arg types.
1047 Otherwise, if one type specifies only the number of arguments,
1048 the other must specify that number of self-promoting arg types.
1049 Otherwise, the argument types must match. */
1051 static int
1052 function_types_compatible_p (tree f1, tree f2)
1054 tree args1, args2;
1055 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1056 int val = 1;
1057 int val1;
1058 tree ret1, ret2;
1060 ret1 = TREE_TYPE (f1);
1061 ret2 = TREE_TYPE (f2);
1063 /* 'volatile' qualifiers on a function's return type used to mean
1064 the function is noreturn. */
1065 if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
1066 pedwarn ("function return types not compatible due to %<volatile%>");
1067 if (TYPE_VOLATILE (ret1))
1068 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
1069 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
1070 if (TYPE_VOLATILE (ret2))
1071 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
1072 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
1073 val = comptypes (ret1, ret2);
1074 if (val == 0)
1075 return 0;
1077 args1 = TYPE_ARG_TYPES (f1);
1078 args2 = TYPE_ARG_TYPES (f2);
1080 /* An unspecified parmlist matches any specified parmlist
1081 whose argument types don't need default promotions. */
1083 if (args1 == 0)
1085 if (!self_promoting_args_p (args2))
1086 return 0;
1087 /* If one of these types comes from a non-prototype fn definition,
1088 compare that with the other type's arglist.
1089 If they don't match, ask for a warning (but no error). */
1090 if (TYPE_ACTUAL_ARG_TYPES (f1)
1091 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
1092 val = 2;
1093 return val;
1095 if (args2 == 0)
1097 if (!self_promoting_args_p (args1))
1098 return 0;
1099 if (TYPE_ACTUAL_ARG_TYPES (f2)
1100 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
1101 val = 2;
1102 return val;
1105 /* Both types have argument lists: compare them and propagate results. */
1106 val1 = type_lists_compatible_p (args1, args2);
1107 return val1 != 1 ? val1 : val;
1110 /* Check two lists of types for compatibility,
1111 returning 0 for incompatible, 1 for compatible,
1112 or 2 for compatible with warning. */
1114 static int
1115 type_lists_compatible_p (tree args1, tree args2)
1117 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1118 int val = 1;
1119 int newval = 0;
1121 while (1)
1123 tree a1, mv1, a2, mv2;
1124 if (args1 == 0 && args2 == 0)
1125 return val;
1126 /* If one list is shorter than the other,
1127 they fail to match. */
1128 if (args1 == 0 || args2 == 0)
1129 return 0;
1130 mv1 = a1 = TREE_VALUE (args1);
1131 mv2 = a2 = TREE_VALUE (args2);
1132 if (mv1 && mv1 != error_mark_node && TREE_CODE (mv1) != ARRAY_TYPE)
1133 mv1 = TYPE_MAIN_VARIANT (mv1);
1134 if (mv2 && mv2 != error_mark_node && TREE_CODE (mv2) != ARRAY_TYPE)
1135 mv2 = TYPE_MAIN_VARIANT (mv2);
1136 /* A null pointer instead of a type
1137 means there is supposed to be an argument
1138 but nothing is specified about what type it has.
1139 So match anything that self-promotes. */
1140 if (a1 == 0)
1142 if (c_type_promotes_to (a2) != a2)
1143 return 0;
1145 else if (a2 == 0)
1147 if (c_type_promotes_to (a1) != a1)
1148 return 0;
1150 /* If one of the lists has an error marker, ignore this arg. */
1151 else if (TREE_CODE (a1) == ERROR_MARK
1152 || TREE_CODE (a2) == ERROR_MARK)
1154 else if (!(newval = comptypes (mv1, mv2)))
1156 /* Allow wait (union {union wait *u; int *i} *)
1157 and wait (union wait *) to be compatible. */
1158 if (TREE_CODE (a1) == UNION_TYPE
1159 && (TYPE_NAME (a1) == 0
1160 || TYPE_TRANSPARENT_UNION (a1))
1161 && TREE_CODE (TYPE_SIZE (a1)) == INTEGER_CST
1162 && tree_int_cst_equal (TYPE_SIZE (a1),
1163 TYPE_SIZE (a2)))
1165 tree memb;
1166 for (memb = TYPE_FIELDS (a1);
1167 memb; memb = TREE_CHAIN (memb))
1169 tree mv3 = TREE_TYPE (memb);
1170 if (mv3 && mv3 != error_mark_node
1171 && TREE_CODE (mv3) != ARRAY_TYPE)
1172 mv3 = TYPE_MAIN_VARIANT (mv3);
1173 if (comptypes (mv3, mv2))
1174 break;
1176 if (memb == 0)
1177 return 0;
1179 else if (TREE_CODE (a2) == UNION_TYPE
1180 && (TYPE_NAME (a2) == 0
1181 || TYPE_TRANSPARENT_UNION (a2))
1182 && TREE_CODE (TYPE_SIZE (a2)) == INTEGER_CST
1183 && tree_int_cst_equal (TYPE_SIZE (a2),
1184 TYPE_SIZE (a1)))
1186 tree memb;
1187 for (memb = TYPE_FIELDS (a2);
1188 memb; memb = TREE_CHAIN (memb))
1190 tree mv3 = TREE_TYPE (memb);
1191 if (mv3 && mv3 != error_mark_node
1192 && TREE_CODE (mv3) != ARRAY_TYPE)
1193 mv3 = TYPE_MAIN_VARIANT (mv3);
1194 if (comptypes (mv3, mv1))
1195 break;
1197 if (memb == 0)
1198 return 0;
1200 else
1201 return 0;
1204 /* comptypes said ok, but record if it said to warn. */
1205 if (newval > val)
1206 val = newval;
1208 args1 = TREE_CHAIN (args1);
1209 args2 = TREE_CHAIN (args2);
1213 /* Compute the size to increment a pointer by. */
1215 static tree
1216 c_size_in_bytes (tree type)
1218 enum tree_code code = TREE_CODE (type);
1220 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
1221 return size_one_node;
1223 if (!COMPLETE_OR_VOID_TYPE_P (type))
1225 error ("arithmetic on pointer to an incomplete type");
1226 return size_one_node;
1229 /* Convert in case a char is more than one unit. */
1230 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
1231 size_int (TYPE_PRECISION (char_type_node)
1232 / BITS_PER_UNIT));
1235 /* Return either DECL or its known constant value (if it has one). */
1237 tree
1238 decl_constant_value (tree decl)
1240 if (/* Don't change a variable array bound or initial value to a constant
1241 in a place where a variable is invalid. Note that DECL_INITIAL
1242 isn't valid for a PARM_DECL. */
1243 current_function_decl != 0
1244 && TREE_CODE (decl) != PARM_DECL
1245 && !TREE_THIS_VOLATILE (decl)
1246 && TREE_READONLY (decl)
1247 && DECL_INITIAL (decl) != 0
1248 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
1249 /* This is invalid if initial value is not constant.
1250 If it has either a function call, a memory reference,
1251 or a variable, then re-evaluating it could give different results. */
1252 && TREE_CONSTANT (DECL_INITIAL (decl))
1253 /* Check for cases where this is sub-optimal, even though valid. */
1254 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
1255 return DECL_INITIAL (decl);
1256 return decl;
1259 /* Return either DECL or its known constant value (if it has one), but
1260 return DECL if pedantic or DECL has mode BLKmode. This is for
1261 bug-compatibility with the old behavior of decl_constant_value
1262 (before GCC 3.0); every use of this function is a bug and it should
1263 be removed before GCC 3.1. It is not appropriate to use pedantic
1264 in a way that affects optimization, and BLKmode is probably not the
1265 right test for avoiding misoptimizations either. */
1267 static tree
1268 decl_constant_value_for_broken_optimization (tree decl)
1270 tree ret;
1272 if (pedantic || DECL_MODE (decl) == BLKmode)
1273 return decl;
1275 ret = decl_constant_value (decl);
1276 /* Avoid unwanted tree sharing between the initializer and current
1277 function's body where the tree can be modified e.g. by the
1278 gimplifier. */
1279 if (ret != decl && TREE_STATIC (decl))
1280 ret = unshare_expr (ret);
1281 return ret;
1284 /* Convert the array expression EXP to a pointer. */
1285 static tree
1286 array_to_pointer_conversion (tree exp)
1288 tree orig_exp = exp;
1289 tree type = TREE_TYPE (exp);
1290 tree adr;
1291 tree restype = TREE_TYPE (type);
1292 tree ptrtype;
1294 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
1296 STRIP_TYPE_NOPS (exp);
1298 if (TREE_NO_WARNING (orig_exp))
1299 TREE_NO_WARNING (exp) = 1;
1301 ptrtype = build_pointer_type (restype);
1303 if (TREE_CODE (exp) == INDIRECT_REF)
1304 return convert (ptrtype, TREE_OPERAND (exp, 0));
1306 if (TREE_CODE (exp) == VAR_DECL)
1308 /* We are making an ADDR_EXPR of ptrtype. This is a valid
1309 ADDR_EXPR because it's the best way of representing what
1310 happens in C when we take the address of an array and place
1311 it in a pointer to the element type. */
1312 adr = build1 (ADDR_EXPR, ptrtype, exp);
1313 if (!c_mark_addressable (exp))
1314 return error_mark_node;
1315 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1316 return adr;
1319 /* This way is better for a COMPONENT_REF since it can
1320 simplify the offset for a component. */
1321 adr = build_unary_op (ADDR_EXPR, exp, 1);
1322 return convert (ptrtype, adr);
1325 /* Convert the function expression EXP to a pointer. */
1326 static tree
1327 function_to_pointer_conversion (tree exp)
1329 tree orig_exp = exp;
1331 gcc_assert (TREE_CODE (TREE_TYPE (exp)) == FUNCTION_TYPE);
1333 STRIP_TYPE_NOPS (exp);
1335 if (TREE_NO_WARNING (orig_exp))
1336 TREE_NO_WARNING (exp) = 1;
1338 return build_unary_op (ADDR_EXPR, exp, 0);
1341 /* Perform the default conversion of arrays and functions to pointers.
1342 Return the result of converting EXP. For any other expression, just
1343 return EXP after removing NOPs. */
1345 struct c_expr
1346 default_function_array_conversion (struct c_expr exp)
1348 tree orig_exp = exp.value;
1349 tree type = TREE_TYPE (exp.value);
1350 enum tree_code code = TREE_CODE (type);
1352 switch (code)
1354 case ARRAY_TYPE:
1356 bool not_lvalue = false;
1357 bool lvalue_array_p;
1359 while ((TREE_CODE (exp.value) == NON_LVALUE_EXPR
1360 || TREE_CODE (exp.value) == NOP_EXPR)
1361 && TREE_TYPE (TREE_OPERAND (exp.value, 0)) == type)
1363 if (TREE_CODE (exp.value) == NON_LVALUE_EXPR)
1364 not_lvalue = true;
1365 exp.value = TREE_OPERAND (exp.value, 0);
1368 if (TREE_NO_WARNING (orig_exp))
1369 TREE_NO_WARNING (exp.value) = 1;
1371 lvalue_array_p = !not_lvalue && lvalue_p (exp.value);
1372 if (!flag_isoc99 && !lvalue_array_p)
1374 /* Before C99, non-lvalue arrays do not decay to pointers.
1375 Normally, using such an array would be invalid; but it can
1376 be used correctly inside sizeof or as a statement expression.
1377 Thus, do not give an error here; an error will result later. */
1378 return exp;
1381 exp.value = array_to_pointer_conversion (exp.value);
1383 break;
1384 case FUNCTION_TYPE:
1385 exp.value = function_to_pointer_conversion (exp.value);
1386 break;
1387 default:
1388 STRIP_TYPE_NOPS (exp.value);
1389 if (TREE_NO_WARNING (orig_exp))
1390 TREE_NO_WARNING (exp.value) = 1;
1391 break;
1394 return exp;
1398 /* EXP is an expression of integer type. Apply the integer promotions
1399 to it and return the promoted value. */
1401 tree
1402 perform_integral_promotions (tree exp)
1404 tree type = TREE_TYPE (exp);
1405 enum tree_code code = TREE_CODE (type);
1407 gcc_assert (INTEGRAL_TYPE_P (type));
1409 /* Normally convert enums to int,
1410 but convert wide enums to something wider. */
1411 if (code == ENUMERAL_TYPE)
1413 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
1414 TYPE_PRECISION (integer_type_node)),
1415 ((TYPE_PRECISION (type)
1416 >= TYPE_PRECISION (integer_type_node))
1417 && TYPE_UNSIGNED (type)));
1419 return convert (type, exp);
1422 /* ??? This should no longer be needed now bit-fields have their
1423 proper types. */
1424 if (TREE_CODE (exp) == COMPONENT_REF
1425 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
1426 /* If it's thinner than an int, promote it like a
1427 c_promoting_integer_type_p, otherwise leave it alone. */
1428 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
1429 TYPE_PRECISION (integer_type_node)))
1430 return convert (integer_type_node, exp);
1432 if (c_promoting_integer_type_p (type))
1434 /* Preserve unsignedness if not really getting any wider. */
1435 if (TYPE_UNSIGNED (type)
1436 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1437 return convert (unsigned_type_node, exp);
1439 return convert (integer_type_node, exp);
1442 return exp;
1446 /* Perform default promotions for C data used in expressions.
1447 Enumeral types or short or char are converted to int.
1448 In addition, manifest constants symbols are replaced by their values. */
1450 tree
1451 default_conversion (tree exp)
1453 tree orig_exp;
1454 tree type = TREE_TYPE (exp);
1455 enum tree_code code = TREE_CODE (type);
1457 /* Functions and arrays have been converted during parsing. */
1458 gcc_assert (code != FUNCTION_TYPE);
1459 if (code == ARRAY_TYPE)
1460 return exp;
1462 /* Constants can be used directly unless they're not loadable. */
1463 if (TREE_CODE (exp) == CONST_DECL)
1464 exp = DECL_INITIAL (exp);
1466 /* Replace a nonvolatile const static variable with its value unless
1467 it is an array, in which case we must be sure that taking the
1468 address of the array produces consistent results. */
1469 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
1471 exp = decl_constant_value_for_broken_optimization (exp);
1472 type = TREE_TYPE (exp);
1475 /* Strip no-op conversions. */
1476 orig_exp = exp;
1477 STRIP_TYPE_NOPS (exp);
1479 if (TREE_NO_WARNING (orig_exp))
1480 TREE_NO_WARNING (exp) = 1;
1482 if (INTEGRAL_TYPE_P (type))
1483 return perform_integral_promotions (exp);
1485 if (code == VOID_TYPE)
1487 error ("void value not ignored as it ought to be");
1488 return error_mark_node;
1490 return exp;
1493 /* Look up COMPONENT in a structure or union DECL.
1495 If the component name is not found, returns NULL_TREE. Otherwise,
1496 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1497 stepping down the chain to the component, which is in the last
1498 TREE_VALUE of the list. Normally the list is of length one, but if
1499 the component is embedded within (nested) anonymous structures or
1500 unions, the list steps down the chain to the component. */
1502 static tree
1503 lookup_field (tree decl, tree component)
1505 tree type = TREE_TYPE (decl);
1506 tree field;
1508 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1509 to the field elements. Use a binary search on this array to quickly
1510 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1511 will always be set for structures which have many elements. */
1513 if (TYPE_LANG_SPECIFIC (type) && TYPE_LANG_SPECIFIC (type)->s)
1515 int bot, top, half;
1516 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
1518 field = TYPE_FIELDS (type);
1519 bot = 0;
1520 top = TYPE_LANG_SPECIFIC (type)->s->len;
1521 while (top - bot > 1)
1523 half = (top - bot + 1) >> 1;
1524 field = field_array[bot+half];
1526 if (DECL_NAME (field) == NULL_TREE)
1528 /* Step through all anon unions in linear fashion. */
1529 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1531 field = field_array[bot++];
1532 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1533 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1535 tree anon = lookup_field (field, component);
1537 if (anon)
1538 return tree_cons (NULL_TREE, field, anon);
1542 /* Entire record is only anon unions. */
1543 if (bot > top)
1544 return NULL_TREE;
1546 /* Restart the binary search, with new lower bound. */
1547 continue;
1550 if (DECL_NAME (field) == component)
1551 break;
1552 if (DECL_NAME (field) < component)
1553 bot += half;
1554 else
1555 top = bot + half;
1558 if (DECL_NAME (field_array[bot]) == component)
1559 field = field_array[bot];
1560 else if (DECL_NAME (field) != component)
1561 return NULL_TREE;
1563 else
1565 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1567 if (DECL_NAME (field) == NULL_TREE
1568 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1569 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1571 tree anon = lookup_field (field, component);
1573 if (anon)
1574 return tree_cons (NULL_TREE, field, anon);
1577 if (DECL_NAME (field) == component)
1578 break;
1581 if (field == NULL_TREE)
1582 return NULL_TREE;
1585 return tree_cons (NULL_TREE, field, NULL_TREE);
1588 /* Make an expression to refer to the COMPONENT field of
1589 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1591 tree
1592 build_component_ref (tree datum, tree component)
1594 tree type = TREE_TYPE (datum);
1595 enum tree_code code = TREE_CODE (type);
1596 tree field = NULL;
1597 tree ref;
1599 if (!objc_is_public (datum, component))
1600 return error_mark_node;
1602 /* See if there is a field or component with name COMPONENT. */
1604 if (code == RECORD_TYPE || code == UNION_TYPE)
1606 if (!COMPLETE_TYPE_P (type))
1608 c_incomplete_type_error (NULL_TREE, type);
1609 return error_mark_node;
1612 field = lookup_field (datum, component);
1614 if (!field)
1616 error ("%qT has no member named %qE", type, component);
1617 return error_mark_node;
1620 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1621 This might be better solved in future the way the C++ front
1622 end does it - by giving the anonymous entities each a
1623 separate name and type, and then have build_component_ref
1624 recursively call itself. We can't do that here. */
1627 tree subdatum = TREE_VALUE (field);
1629 if (TREE_TYPE (subdatum) == error_mark_node)
1630 return error_mark_node;
1632 ref = build3 (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum,
1633 NULL_TREE);
1634 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
1635 TREE_READONLY (ref) = 1;
1636 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
1637 TREE_THIS_VOLATILE (ref) = 1;
1639 if (TREE_DEPRECATED (subdatum))
1640 warn_deprecated_use (subdatum);
1642 datum = ref;
1644 field = TREE_CHAIN (field);
1646 while (field);
1648 return ref;
1650 else if (code != ERROR_MARK)
1651 error ("request for member %qE in something not a structure or union",
1652 component);
1654 return error_mark_node;
1657 /* Given an expression PTR for a pointer, return an expression
1658 for the value pointed to.
1659 ERRORSTRING is the name of the operator to appear in error messages. */
1661 tree
1662 build_indirect_ref (tree ptr, const char *errorstring)
1664 tree pointer = default_conversion (ptr);
1665 tree type = TREE_TYPE (pointer);
1667 if (TREE_CODE (type) == POINTER_TYPE)
1669 if (TREE_CODE (pointer) == ADDR_EXPR
1670 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1671 == TREE_TYPE (type)))
1672 return TREE_OPERAND (pointer, 0);
1673 else
1675 tree t = TREE_TYPE (type);
1676 tree ref;
1678 ref = build1 (INDIRECT_REF, t, pointer);
1680 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1682 error ("dereferencing pointer to incomplete type");
1683 return error_mark_node;
1685 if (VOID_TYPE_P (t) && skip_evaluation == 0)
1686 warning (0, "dereferencing %<void *%> pointer");
1688 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1689 so that we get the proper error message if the result is used
1690 to assign to. Also, &* is supposed to be a no-op.
1691 And ANSI C seems to specify that the type of the result
1692 should be the const type. */
1693 /* A de-reference of a pointer to const is not a const. It is valid
1694 to change it via some other pointer. */
1695 TREE_READONLY (ref) = TYPE_READONLY (t);
1696 TREE_SIDE_EFFECTS (ref)
1697 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
1698 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1699 return ref;
1702 else if (TREE_CODE (pointer) != ERROR_MARK)
1703 error ("invalid type argument of %qs", errorstring);
1704 return error_mark_node;
1707 /* This handles expressions of the form "a[i]", which denotes
1708 an array reference.
1710 This is logically equivalent in C to *(a+i), but we may do it differently.
1711 If A is a variable or a member, we generate a primitive ARRAY_REF.
1712 This avoids forcing the array out of registers, and can work on
1713 arrays that are not lvalues (for example, members of structures returned
1714 by functions). */
1716 tree
1717 build_array_ref (tree array, tree index)
1719 bool swapped = false;
1720 if (TREE_TYPE (array) == error_mark_node
1721 || TREE_TYPE (index) == error_mark_node)
1722 return error_mark_node;
1724 if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
1725 && TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE)
1727 tree temp;
1728 if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
1729 && TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
1731 error ("subscripted value is neither array nor pointer");
1732 return error_mark_node;
1734 temp = array;
1735 array = index;
1736 index = temp;
1737 swapped = true;
1740 if (!INTEGRAL_TYPE_P (TREE_TYPE (index)))
1742 error ("array subscript is not an integer");
1743 return error_mark_node;
1746 if (TREE_CODE (TREE_TYPE (TREE_TYPE (array))) == FUNCTION_TYPE)
1748 error ("subscripted value is pointer to function");
1749 return error_mark_node;
1752 /* Subscripting with type char is likely to lose on a machine where
1753 chars are signed. So warn on any machine, but optionally. Don't
1754 warn for unsigned char since that type is safe. Don't warn for
1755 signed char because anyone who uses that must have done so
1756 deliberately. ??? Existing practice has also been to warn only
1757 when the char index is syntactically the index, not for
1758 char[array]. */
1759 if (!swapped
1760 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1761 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
1763 /* Apply default promotions *after* noticing character types. */
1764 index = default_conversion (index);
1766 gcc_assert (TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE);
1768 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
1770 tree rval, type;
1772 /* An array that is indexed by a non-constant
1773 cannot be stored in a register; we must be able to do
1774 address arithmetic on its address.
1775 Likewise an array of elements of variable size. */
1776 if (TREE_CODE (index) != INTEGER_CST
1777 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1778 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1780 if (!c_mark_addressable (array))
1781 return error_mark_node;
1783 /* An array that is indexed by a constant value which is not within
1784 the array bounds cannot be stored in a register either; because we
1785 would get a crash in store_bit_field/extract_bit_field when trying
1786 to access a non-existent part of the register. */
1787 if (TREE_CODE (index) == INTEGER_CST
1788 && TYPE_DOMAIN (TREE_TYPE (array))
1789 && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
1791 if (!c_mark_addressable (array))
1792 return error_mark_node;
1795 if (pedantic)
1797 tree foo = array;
1798 while (TREE_CODE (foo) == COMPONENT_REF)
1799 foo = TREE_OPERAND (foo, 0);
1800 if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
1801 pedwarn ("ISO C forbids subscripting %<register%> array");
1802 else if (!flag_isoc99 && !lvalue_p (foo))
1803 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
1806 type = TREE_TYPE (TREE_TYPE (array));
1807 if (TREE_CODE (type) != ARRAY_TYPE)
1808 type = TYPE_MAIN_VARIANT (type);
1809 rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
1810 /* Array ref is const/volatile if the array elements are
1811 or if the array is. */
1812 TREE_READONLY (rval)
1813 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1814 | TREE_READONLY (array));
1815 TREE_SIDE_EFFECTS (rval)
1816 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1817 | TREE_SIDE_EFFECTS (array));
1818 TREE_THIS_VOLATILE (rval)
1819 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1820 /* This was added by rms on 16 Nov 91.
1821 It fixes vol struct foo *a; a->elts[1]
1822 in an inline function.
1823 Hope it doesn't break something else. */
1824 | TREE_THIS_VOLATILE (array));
1825 return require_complete_type (fold (rval));
1827 else
1829 tree ar = default_conversion (array);
1831 if (ar == error_mark_node)
1832 return ar;
1834 gcc_assert (TREE_CODE (TREE_TYPE (ar)) == POINTER_TYPE);
1835 gcc_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) != FUNCTION_TYPE);
1837 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, index, 0),
1838 "array indexing");
1842 /* Build an external reference to identifier ID. FUN indicates
1843 whether this will be used for a function call. LOC is the source
1844 location of the identifier. */
1845 tree
1846 build_external_ref (tree id, int fun, location_t loc)
1848 tree ref;
1849 tree decl = lookup_name (id);
1851 /* In Objective-C, an instance variable (ivar) may be preferred to
1852 whatever lookup_name() found. */
1853 decl = objc_lookup_ivar (decl, id);
1855 if (decl && decl != error_mark_node)
1856 ref = decl;
1857 else if (fun)
1858 /* Implicit function declaration. */
1859 ref = implicitly_declare (id);
1860 else if (decl == error_mark_node)
1861 /* Don't complain about something that's already been
1862 complained about. */
1863 return error_mark_node;
1864 else
1866 undeclared_variable (id, loc);
1867 return error_mark_node;
1870 if (TREE_TYPE (ref) == error_mark_node)
1871 return error_mark_node;
1873 if (TREE_DEPRECATED (ref))
1874 warn_deprecated_use (ref);
1876 if (!skip_evaluation)
1877 assemble_external (ref);
1878 TREE_USED (ref) = 1;
1880 if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
1882 if (!in_sizeof && !in_typeof)
1883 C_DECL_USED (ref) = 1;
1884 else if (DECL_INITIAL (ref) == 0
1885 && DECL_EXTERNAL (ref)
1886 && !TREE_PUBLIC (ref))
1887 record_maybe_used_decl (ref);
1890 if (TREE_CODE (ref) == CONST_DECL)
1892 ref = DECL_INITIAL (ref);
1893 TREE_CONSTANT (ref) = 1;
1894 TREE_INVARIANT (ref) = 1;
1896 else if (current_function_decl != 0
1897 && !DECL_FILE_SCOPE_P (current_function_decl)
1898 && (TREE_CODE (ref) == VAR_DECL
1899 || TREE_CODE (ref) == PARM_DECL
1900 || TREE_CODE (ref) == FUNCTION_DECL))
1902 tree context = decl_function_context (ref);
1904 if (context != 0 && context != current_function_decl)
1905 DECL_NONLOCAL (ref) = 1;
1908 return ref;
1911 /* Record details of decls possibly used inside sizeof or typeof. */
1912 struct maybe_used_decl
1914 /* The decl. */
1915 tree decl;
1916 /* The level seen at (in_sizeof + in_typeof). */
1917 int level;
1918 /* The next one at this level or above, or NULL. */
1919 struct maybe_used_decl *next;
1922 static struct maybe_used_decl *maybe_used_decls;
1924 /* Record that DECL, an undefined static function reference seen
1925 inside sizeof or typeof, might be used if the operand of sizeof is
1926 a VLA type or the operand of typeof is a variably modified
1927 type. */
1929 static void
1930 record_maybe_used_decl (tree decl)
1932 struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
1933 t->decl = decl;
1934 t->level = in_sizeof + in_typeof;
1935 t->next = maybe_used_decls;
1936 maybe_used_decls = t;
1939 /* Pop the stack of decls possibly used inside sizeof or typeof. If
1940 USED is false, just discard them. If it is true, mark them used
1941 (if no longer inside sizeof or typeof) or move them to the next
1942 level up (if still inside sizeof or typeof). */
1944 void
1945 pop_maybe_used (bool used)
1947 struct maybe_used_decl *p = maybe_used_decls;
1948 int cur_level = in_sizeof + in_typeof;
1949 while (p && p->level > cur_level)
1951 if (used)
1953 if (cur_level == 0)
1954 C_DECL_USED (p->decl) = 1;
1955 else
1956 p->level = cur_level;
1958 p = p->next;
1960 if (!used || cur_level == 0)
1961 maybe_used_decls = p;
1964 /* Return the result of sizeof applied to EXPR. */
1966 struct c_expr
1967 c_expr_sizeof_expr (struct c_expr expr)
1969 struct c_expr ret;
1970 if (expr.value == error_mark_node)
1972 ret.value = error_mark_node;
1973 ret.original_code = ERROR_MARK;
1974 pop_maybe_used (false);
1976 else
1978 ret.value = c_sizeof (TREE_TYPE (expr.value));
1979 ret.original_code = ERROR_MARK;
1980 pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
1982 return ret;
1985 /* Return the result of sizeof applied to T, a structure for the type
1986 name passed to sizeof (rather than the type itself). */
1988 struct c_expr
1989 c_expr_sizeof_type (struct c_type_name *t)
1991 tree type;
1992 struct c_expr ret;
1993 type = groktypename (t);
1994 ret.value = c_sizeof (type);
1995 ret.original_code = ERROR_MARK;
1996 pop_maybe_used (C_TYPE_VARIABLE_SIZE (type));
1997 return ret;
2000 /* Build a function call to function FUNCTION with parameters PARAMS.
2001 PARAMS is a list--a chain of TREE_LIST nodes--in which the
2002 TREE_VALUE of each node is a parameter-expression.
2003 FUNCTION's data type may be a function type or a pointer-to-function. */
2005 tree
2006 build_function_call (tree function, tree params)
2008 tree fntype, fundecl = 0;
2009 tree coerced_params;
2010 tree name = NULL_TREE, result;
2011 tree tem;
2013 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
2014 STRIP_TYPE_NOPS (function);
2016 /* Convert anything with function type to a pointer-to-function. */
2017 if (TREE_CODE (function) == FUNCTION_DECL)
2019 /* Implement type-directed function overloading for builtins.
2020 resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
2021 handle all the type checking. The result is a complete expression
2022 that implements this function call. */
2023 tem = resolve_overloaded_builtin (function, params);
2024 if (tem)
2025 return tem;
2027 name = DECL_NAME (function);
2028 fundecl = function;
2030 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE)
2031 function = function_to_pointer_conversion (function);
2033 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2034 expressions, like those used for ObjC messenger dispatches. */
2035 function = objc_rewrite_function_call (function, params);
2037 fntype = TREE_TYPE (function);
2039 if (TREE_CODE (fntype) == ERROR_MARK)
2040 return error_mark_node;
2042 if (!(TREE_CODE (fntype) == POINTER_TYPE
2043 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
2045 error ("called object %qE is not a function", function);
2046 return error_mark_node;
2049 if (fundecl && TREE_THIS_VOLATILE (fundecl))
2050 current_function_returns_abnormally = 1;
2052 /* fntype now gets the type of function pointed to. */
2053 fntype = TREE_TYPE (fntype);
2055 /* Check that the function is called through a compatible prototype.
2056 If it is not, replace the call by a trap, wrapped up in a compound
2057 expression if necessary. This has the nice side-effect to prevent
2058 the tree-inliner from generating invalid assignment trees which may
2059 blow up in the RTL expander later. */
2060 if (TREE_CODE (function) == NOP_EXPR
2061 && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
2062 && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
2063 && !comptypes (fntype, TREE_TYPE (tem)))
2065 tree return_type = TREE_TYPE (fntype);
2066 tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
2067 NULL_TREE);
2069 /* This situation leads to run-time undefined behavior. We can't,
2070 therefore, simply error unless we can prove that all possible
2071 executions of the program must execute the code. */
2072 warning (0, "function called through a non-compatible type");
2074 /* We can, however, treat "undefined" any way we please.
2075 Call abort to encourage the user to fix the program. */
2076 inform ("if this code is reached, the program will abort");
2078 if (VOID_TYPE_P (return_type))
2079 return trap;
2080 else
2082 tree rhs;
2084 if (AGGREGATE_TYPE_P (return_type))
2085 rhs = build_compound_literal (return_type,
2086 build_constructor (return_type, 0));
2087 else
2088 rhs = fold_build1 (NOP_EXPR, return_type, integer_zero_node);
2090 return build2 (COMPOUND_EXPR, return_type, trap, rhs);
2094 /* Convert the parameters to the types declared in the
2095 function prototype, or apply default promotions. */
2097 coerced_params
2098 = convert_arguments (TYPE_ARG_TYPES (fntype), params, function, fundecl);
2100 if (coerced_params == error_mark_node)
2101 return error_mark_node;
2103 /* Check that the arguments to the function are valid. */
2105 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
2106 TYPE_ARG_TYPES (fntype));
2108 result = build3 (CALL_EXPR, TREE_TYPE (fntype),
2109 function, coerced_params, NULL_TREE);
2110 TREE_SIDE_EFFECTS (result) = 1;
2112 if (require_constant_value)
2114 result = fold_initializer (result);
2116 if (TREE_CONSTANT (result)
2117 && (name == NULL_TREE
2118 || strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10) != 0))
2119 pedwarn_init ("initializer element is not constant");
2121 else
2122 result = fold (result);
2124 if (VOID_TYPE_P (TREE_TYPE (result)))
2125 return result;
2126 return require_complete_type (result);
2129 /* Convert the argument expressions in the list VALUES
2130 to the types in the list TYPELIST. The result is a list of converted
2131 argument expressions, unless there are too few arguments in which
2132 case it is error_mark_node.
2134 If TYPELIST is exhausted, or when an element has NULL as its type,
2135 perform the default conversions.
2137 PARMLIST is the chain of parm decls for the function being called.
2138 It may be 0, if that info is not available.
2139 It is used only for generating error messages.
2141 FUNCTION is a tree for the called function. It is used only for
2142 error messages, where it is formatted with %qE.
2144 This is also where warnings about wrong number of args are generated.
2146 Both VALUES and the returned value are chains of TREE_LIST nodes
2147 with the elements of the list in the TREE_VALUE slots of those nodes. */
2149 static tree
2150 convert_arguments (tree typelist, tree values, tree function, tree fundecl)
2152 tree typetail, valtail;
2153 tree result = NULL;
2154 int parmnum;
2155 tree selector;
2157 /* Change pointer to function to the function itself for
2158 diagnostics. */
2159 if (TREE_CODE (function) == ADDR_EXPR
2160 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
2161 function = TREE_OPERAND (function, 0);
2163 /* Handle an ObjC selector specially for diagnostics. */
2164 selector = objc_message_selector ();
2166 /* Scan the given expressions and types, producing individual
2167 converted arguments and pushing them on RESULT in reverse order. */
2169 for (valtail = values, typetail = typelist, parmnum = 0;
2170 valtail;
2171 valtail = TREE_CHAIN (valtail), parmnum++)
2173 tree type = typetail ? TREE_VALUE (typetail) : 0;
2174 tree val = TREE_VALUE (valtail);
2175 tree rname = function;
2176 int argnum = parmnum + 1;
2177 const char *invalid_func_diag;
2179 if (type == void_type_node)
2181 error ("too many arguments to function %qE", function);
2182 break;
2185 if (selector && argnum > 2)
2187 rname = selector;
2188 argnum -= 2;
2191 STRIP_TYPE_NOPS (val);
2193 val = require_complete_type (val);
2195 if (type != 0)
2197 /* Formal parm type is specified by a function prototype. */
2198 tree parmval;
2200 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
2202 error ("type of formal parameter %d is incomplete", parmnum + 1);
2203 parmval = val;
2205 else
2207 /* Optionally warn about conversions that
2208 differ from the default conversions. */
2209 if (warn_conversion || warn_traditional)
2211 unsigned int formal_prec = TYPE_PRECISION (type);
2213 if (INTEGRAL_TYPE_P (type)
2214 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2215 warning (0, "passing argument %d of %qE as integer "
2216 "rather than floating due to prototype",
2217 argnum, rname);
2218 if (INTEGRAL_TYPE_P (type)
2219 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2220 warning (0, "passing argument %d of %qE as integer "
2221 "rather than complex due to prototype",
2222 argnum, rname);
2223 else if (TREE_CODE (type) == COMPLEX_TYPE
2224 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2225 warning (0, "passing argument %d of %qE as complex "
2226 "rather than floating due to prototype",
2227 argnum, rname);
2228 else if (TREE_CODE (type) == REAL_TYPE
2229 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2230 warning (0, "passing argument %d of %qE as floating "
2231 "rather than integer due to prototype",
2232 argnum, rname);
2233 else if (TREE_CODE (type) == COMPLEX_TYPE
2234 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2235 warning (0, "passing argument %d of %qE as complex "
2236 "rather than integer due to prototype",
2237 argnum, rname);
2238 else if (TREE_CODE (type) == REAL_TYPE
2239 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2240 warning (0, "passing argument %d of %qE as floating "
2241 "rather than complex due to prototype",
2242 argnum, rname);
2243 /* ??? At some point, messages should be written about
2244 conversions between complex types, but that's too messy
2245 to do now. */
2246 else if (TREE_CODE (type) == REAL_TYPE
2247 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2249 /* Warn if any argument is passed as `float',
2250 since without a prototype it would be `double'. */
2251 if (formal_prec == TYPE_PRECISION (float_type_node))
2252 warning (0, "passing argument %d of %qE as %<float%> "
2253 "rather than %<double%> due to prototype",
2254 argnum, rname);
2256 /* Detect integer changing in width or signedness.
2257 These warnings are only activated with
2258 -Wconversion, not with -Wtraditional. */
2259 else if (warn_conversion && INTEGRAL_TYPE_P (type)
2260 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2262 tree would_have_been = default_conversion (val);
2263 tree type1 = TREE_TYPE (would_have_been);
2265 if (TREE_CODE (type) == ENUMERAL_TYPE
2266 && (TYPE_MAIN_VARIANT (type)
2267 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
2268 /* No warning if function asks for enum
2269 and the actual arg is that enum type. */
2271 else if (formal_prec != TYPE_PRECISION (type1))
2272 warning (OPT_Wconversion, "passing argument %d of %qE "
2273 "with different width due to prototype",
2274 argnum, rname);
2275 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
2277 /* Don't complain if the formal parameter type
2278 is an enum, because we can't tell now whether
2279 the value was an enum--even the same enum. */
2280 else if (TREE_CODE (type) == ENUMERAL_TYPE)
2282 else if (TREE_CODE (val) == INTEGER_CST
2283 && int_fits_type_p (val, type))
2284 /* Change in signedness doesn't matter
2285 if a constant value is unaffected. */
2287 /* If the value is extended from a narrower
2288 unsigned type, it doesn't matter whether we
2289 pass it as signed or unsigned; the value
2290 certainly is the same either way. */
2291 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
2292 && TYPE_UNSIGNED (TREE_TYPE (val)))
2294 else if (TYPE_UNSIGNED (type))
2295 warning (OPT_Wconversion, "passing argument %d of %qE "
2296 "as unsigned due to prototype",
2297 argnum, rname);
2298 else
2299 warning (OPT_Wconversion, "passing argument %d of %qE "
2300 "as signed due to prototype", argnum, rname);
2304 parmval = convert_for_assignment (type, val, ic_argpass,
2305 fundecl, function,
2306 parmnum + 1);
2308 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
2309 && INTEGRAL_TYPE_P (type)
2310 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
2311 parmval = default_conversion (parmval);
2313 result = tree_cons (NULL_TREE, parmval, result);
2315 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
2316 && (TYPE_PRECISION (TREE_TYPE (val))
2317 < TYPE_PRECISION (double_type_node)))
2318 /* Convert `float' to `double'. */
2319 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
2320 else if ((invalid_func_diag =
2321 targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
2323 error (invalid_func_diag);
2324 return error_mark_node;
2326 else
2327 /* Convert `short' and `char' to full-size `int'. */
2328 result = tree_cons (NULL_TREE, default_conversion (val), result);
2330 if (typetail)
2331 typetail = TREE_CHAIN (typetail);
2334 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
2336 error ("too few arguments to function %qE", function);
2337 return error_mark_node;
2340 return nreverse (result);
2343 /* This is the entry point used by the parser to build unary operators
2344 in the input. CODE, a tree_code, specifies the unary operator, and
2345 ARG is the operand. For unary plus, the C parser currently uses
2346 CONVERT_EXPR for code. */
2348 struct c_expr
2349 parser_build_unary_op (enum tree_code code, struct c_expr arg)
2351 struct c_expr result;
2353 result.original_code = ERROR_MARK;
2354 result.value = build_unary_op (code, arg.value, 0);
2355 overflow_warning (result.value);
2356 return result;
2359 /* This is the entry point used by the parser to build binary operators
2360 in the input. CODE, a tree_code, specifies the binary operator, and
2361 ARG1 and ARG2 are the operands. In addition to constructing the
2362 expression, we check for operands that were written with other binary
2363 operators in a way that is likely to confuse the user. */
2365 struct c_expr
2366 parser_build_binary_op (enum tree_code code, struct c_expr arg1,
2367 struct c_expr arg2)
2369 struct c_expr result;
2371 enum tree_code code1 = arg1.original_code;
2372 enum tree_code code2 = arg2.original_code;
2374 result.value = build_binary_op (code, arg1.value, arg2.value, 1);
2375 result.original_code = code;
2377 if (TREE_CODE (result.value) == ERROR_MARK)
2378 return result;
2380 /* Check for cases such as x+y<<z which users are likely
2381 to misinterpret. */
2382 if (warn_parentheses)
2384 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
2386 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2387 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2388 warning (OPT_Wparentheses,
2389 "suggest parentheses around + or - inside shift");
2392 if (code == TRUTH_ORIF_EXPR)
2394 if (code1 == TRUTH_ANDIF_EXPR
2395 || code2 == TRUTH_ANDIF_EXPR)
2396 warning (OPT_Wparentheses,
2397 "suggest parentheses around && within ||");
2400 if (code == BIT_IOR_EXPR)
2402 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
2403 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2404 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
2405 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2406 warning (OPT_Wparentheses,
2407 "suggest parentheses around arithmetic in operand of |");
2408 /* Check cases like x|y==z */
2409 if (TREE_CODE_CLASS (code1) == tcc_comparison
2410 || TREE_CODE_CLASS (code2) == tcc_comparison)
2411 warning (OPT_Wparentheses,
2412 "suggest parentheses around comparison in operand of |");
2415 if (code == BIT_XOR_EXPR)
2417 if (code1 == BIT_AND_EXPR
2418 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2419 || code2 == BIT_AND_EXPR
2420 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2421 warning (OPT_Wparentheses,
2422 "suggest parentheses around arithmetic in operand of ^");
2423 /* Check cases like x^y==z */
2424 if (TREE_CODE_CLASS (code1) == tcc_comparison
2425 || TREE_CODE_CLASS (code2) == tcc_comparison)
2426 warning (OPT_Wparentheses,
2427 "suggest parentheses around comparison in operand of ^");
2430 if (code == BIT_AND_EXPR)
2432 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2433 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2434 warning (OPT_Wparentheses,
2435 "suggest parentheses around + or - in operand of &");
2436 /* Check cases like x&y==z */
2437 if (TREE_CODE_CLASS (code1) == tcc_comparison
2438 || TREE_CODE_CLASS (code2) == tcc_comparison)
2439 warning (OPT_Wparentheses,
2440 "suggest parentheses around comparison in operand of &");
2442 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
2443 if (TREE_CODE_CLASS (code) == tcc_comparison
2444 && (TREE_CODE_CLASS (code1) == tcc_comparison
2445 || TREE_CODE_CLASS (code2) == tcc_comparison))
2446 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
2447 "have their mathematical meaning");
2451 unsigned_conversion_warning (result.value, arg1.value);
2452 unsigned_conversion_warning (result.value, arg2.value);
2453 overflow_warning (result.value);
2455 return result;
2458 /* Return a tree for the difference of pointers OP0 and OP1.
2459 The resulting tree has type int. */
2461 static tree
2462 pointer_diff (tree op0, tree op1)
2464 tree restype = ptrdiff_type_node;
2466 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2467 tree con0, con1, lit0, lit1;
2468 tree orig_op1 = op1;
2470 if (pedantic || warn_pointer_arith)
2472 if (TREE_CODE (target_type) == VOID_TYPE)
2473 pedwarn ("pointer of type %<void *%> used in subtraction");
2474 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2475 pedwarn ("pointer to a function used in subtraction");
2478 /* If the conversion to ptrdiff_type does anything like widening or
2479 converting a partial to an integral mode, we get a convert_expression
2480 that is in the way to do any simplifications.
2481 (fold-const.c doesn't know that the extra bits won't be needed.
2482 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2483 different mode in place.)
2484 So first try to find a common term here 'by hand'; we want to cover
2485 at least the cases that occur in legal static initializers. */
2486 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2487 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
2489 if (TREE_CODE (con0) == PLUS_EXPR)
2491 lit0 = TREE_OPERAND (con0, 1);
2492 con0 = TREE_OPERAND (con0, 0);
2494 else
2495 lit0 = integer_zero_node;
2497 if (TREE_CODE (con1) == PLUS_EXPR)
2499 lit1 = TREE_OPERAND (con1, 1);
2500 con1 = TREE_OPERAND (con1, 0);
2502 else
2503 lit1 = integer_zero_node;
2505 if (operand_equal_p (con0, con1, 0))
2507 op0 = lit0;
2508 op1 = lit1;
2512 /* First do the subtraction as integers;
2513 then drop through to build the divide operator.
2514 Do not do default conversions on the minus operator
2515 in case restype is a short type. */
2517 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2518 convert (restype, op1), 0);
2519 /* This generates an error if op1 is pointer to incomplete type. */
2520 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2521 error ("arithmetic on pointer to an incomplete type");
2523 /* This generates an error if op0 is pointer to incomplete type. */
2524 op1 = c_size_in_bytes (target_type);
2526 /* Divide by the size, in easiest possible way. */
2527 return fold_build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2530 /* Construct and perhaps optimize a tree representation
2531 for a unary operation. CODE, a tree_code, specifies the operation
2532 and XARG is the operand.
2533 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2534 the default promotions (such as from short to int).
2535 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2536 allows non-lvalues; this is only used to handle conversion of non-lvalue
2537 arrays to pointers in C99. */
2539 tree
2540 build_unary_op (enum tree_code code, tree xarg, int flag)
2542 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2543 tree arg = xarg;
2544 tree argtype = 0;
2545 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2546 tree val;
2547 int noconvert = flag;
2548 const char *invalid_op_diag;
2550 if (typecode == ERROR_MARK)
2551 return error_mark_node;
2552 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2553 typecode = INTEGER_TYPE;
2555 if ((invalid_op_diag
2556 = targetm.invalid_unary_op (code, TREE_TYPE (xarg))))
2558 error (invalid_op_diag);
2559 return error_mark_node;
2562 switch (code)
2564 case CONVERT_EXPR:
2565 /* This is used for unary plus, because a CONVERT_EXPR
2566 is enough to prevent anybody from looking inside for
2567 associativity, but won't generate any code. */
2568 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2569 || typecode == COMPLEX_TYPE
2570 || typecode == VECTOR_TYPE))
2572 error ("wrong type argument to unary plus");
2573 return error_mark_node;
2575 else if (!noconvert)
2576 arg = default_conversion (arg);
2577 arg = non_lvalue (arg);
2578 break;
2580 case NEGATE_EXPR:
2581 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2582 || typecode == COMPLEX_TYPE
2583 || typecode == VECTOR_TYPE))
2585 error ("wrong type argument to unary minus");
2586 return error_mark_node;
2588 else if (!noconvert)
2589 arg = default_conversion (arg);
2590 break;
2592 case BIT_NOT_EXPR:
2593 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
2595 if (!noconvert)
2596 arg = default_conversion (arg);
2598 else if (typecode == COMPLEX_TYPE)
2600 code = CONJ_EXPR;
2601 if (pedantic)
2602 pedwarn ("ISO C does not support %<~%> for complex conjugation");
2603 if (!noconvert)
2604 arg = default_conversion (arg);
2606 else
2608 error ("wrong type argument to bit-complement");
2609 return error_mark_node;
2611 break;
2613 case ABS_EXPR:
2614 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
2616 error ("wrong type argument to abs");
2617 return error_mark_node;
2619 else if (!noconvert)
2620 arg = default_conversion (arg);
2621 break;
2623 case CONJ_EXPR:
2624 /* Conjugating a real value is a no-op, but allow it anyway. */
2625 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2626 || typecode == COMPLEX_TYPE))
2628 error ("wrong type argument to conjugation");
2629 return error_mark_node;
2631 else if (!noconvert)
2632 arg = default_conversion (arg);
2633 break;
2635 case TRUTH_NOT_EXPR:
2636 if (typecode != INTEGER_TYPE
2637 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2638 && typecode != COMPLEX_TYPE)
2640 error ("wrong type argument to unary exclamation mark");
2641 return error_mark_node;
2643 arg = c_objc_common_truthvalue_conversion (arg);
2644 return invert_truthvalue (arg);
2646 case NOP_EXPR:
2647 break;
2649 case REALPART_EXPR:
2650 if (TREE_CODE (arg) == COMPLEX_CST)
2651 return TREE_REALPART (arg);
2652 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2653 return fold_build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
2654 else
2655 return arg;
2657 case IMAGPART_EXPR:
2658 if (TREE_CODE (arg) == COMPLEX_CST)
2659 return TREE_IMAGPART (arg);
2660 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2661 return fold_build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
2662 else
2663 return convert (TREE_TYPE (arg), integer_zero_node);
2665 case PREINCREMENT_EXPR:
2666 case POSTINCREMENT_EXPR:
2667 case PREDECREMENT_EXPR:
2668 case POSTDECREMENT_EXPR:
2670 /* Increment or decrement the real part of the value,
2671 and don't change the imaginary part. */
2672 if (typecode == COMPLEX_TYPE)
2674 tree real, imag;
2676 if (pedantic)
2677 pedwarn ("ISO C does not support %<++%> and %<--%>"
2678 " on complex types");
2680 arg = stabilize_reference (arg);
2681 real = build_unary_op (REALPART_EXPR, arg, 1);
2682 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2683 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
2684 build_unary_op (code, real, 1), imag);
2687 /* Report invalid types. */
2689 if (typecode != POINTER_TYPE
2690 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2692 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2693 error ("wrong type argument to increment");
2694 else
2695 error ("wrong type argument to decrement");
2697 return error_mark_node;
2701 tree inc;
2702 tree result_type = TREE_TYPE (arg);
2704 arg = get_unwidened (arg, 0);
2705 argtype = TREE_TYPE (arg);
2707 /* Compute the increment. */
2709 if (typecode == POINTER_TYPE)
2711 /* If pointer target is an undefined struct,
2712 we just cannot know how to do the arithmetic. */
2713 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2715 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2716 error ("increment of pointer to unknown structure");
2717 else
2718 error ("decrement of pointer to unknown structure");
2720 else if ((pedantic || warn_pointer_arith)
2721 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2722 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2724 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2725 pedwarn ("wrong type argument to increment");
2726 else
2727 pedwarn ("wrong type argument to decrement");
2730 inc = c_size_in_bytes (TREE_TYPE (result_type));
2732 else
2733 inc = integer_one_node;
2735 inc = convert (argtype, inc);
2737 /* Complain about anything else that is not a true lvalue. */
2738 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2739 || code == POSTINCREMENT_EXPR)
2740 ? lv_increment
2741 : lv_decrement)))
2742 return error_mark_node;
2744 /* Report a read-only lvalue. */
2745 if (TREE_READONLY (arg))
2746 readonly_error (arg,
2747 ((code == PREINCREMENT_EXPR
2748 || code == POSTINCREMENT_EXPR)
2749 ? lv_increment : lv_decrement));
2751 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2752 val = boolean_increment (code, arg);
2753 else
2754 val = build2 (code, TREE_TYPE (arg), arg, inc);
2755 TREE_SIDE_EFFECTS (val) = 1;
2756 val = convert (result_type, val);
2757 if (TREE_CODE (val) != code)
2758 TREE_NO_WARNING (val) = 1;
2759 return val;
2762 case ADDR_EXPR:
2763 /* Note that this operation never does default_conversion. */
2765 /* Let &* cancel out to simplify resulting code. */
2766 if (TREE_CODE (arg) == INDIRECT_REF)
2768 /* Don't let this be an lvalue. */
2769 if (lvalue_p (TREE_OPERAND (arg, 0)))
2770 return non_lvalue (TREE_OPERAND (arg, 0));
2771 return TREE_OPERAND (arg, 0);
2774 /* For &x[y], return x+y */
2775 if (TREE_CODE (arg) == ARRAY_REF)
2777 tree op0 = TREE_OPERAND (arg, 0);
2778 if (!c_mark_addressable (op0))
2779 return error_mark_node;
2780 return build_binary_op (PLUS_EXPR,
2781 (TREE_CODE (TREE_TYPE (op0)) == ARRAY_TYPE
2782 ? array_to_pointer_conversion (op0)
2783 : op0),
2784 TREE_OPERAND (arg, 1), 1);
2787 /* Anything not already handled and not a true memory reference
2788 or a non-lvalue array is an error. */
2789 else if (typecode != FUNCTION_TYPE && !flag
2790 && !lvalue_or_else (arg, lv_addressof))
2791 return error_mark_node;
2793 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2794 argtype = TREE_TYPE (arg);
2796 /* If the lvalue is const or volatile, merge that into the type
2797 to which the address will point. Note that you can't get a
2798 restricted pointer by taking the address of something, so we
2799 only have to deal with `const' and `volatile' here. */
2800 if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
2801 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
2802 argtype = c_build_type_variant (argtype,
2803 TREE_READONLY (arg),
2804 TREE_THIS_VOLATILE (arg));
2806 if (!c_mark_addressable (arg))
2807 return error_mark_node;
2809 gcc_assert (TREE_CODE (arg) != COMPONENT_REF
2810 || !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)));
2812 argtype = build_pointer_type (argtype);
2814 /* ??? Cope with user tricks that amount to offsetof. Delete this
2815 when we have proper support for integer constant expressions. */
2816 val = get_base_address (arg);
2817 if (val && TREE_CODE (val) == INDIRECT_REF
2818 && integer_zerop (TREE_OPERAND (val, 0)))
2819 return fold_convert (argtype, fold_offsetof (arg));
2821 val = build1 (ADDR_EXPR, argtype, arg);
2823 return val;
2825 default:
2826 break;
2829 if (argtype == 0)
2830 argtype = TREE_TYPE (arg);
2831 val = build1 (code, argtype, arg);
2832 return require_constant_value ? fold_initializer (val) : fold (val);
2835 /* Return nonzero if REF is an lvalue valid for this language.
2836 Lvalues can be assigned, unless their type has TYPE_READONLY.
2837 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
2839 static int
2840 lvalue_p (tree ref)
2842 enum tree_code code = TREE_CODE (ref);
2844 switch (code)
2846 case REALPART_EXPR:
2847 case IMAGPART_EXPR:
2848 case COMPONENT_REF:
2849 return lvalue_p (TREE_OPERAND (ref, 0));
2851 case COMPOUND_LITERAL_EXPR:
2852 case STRING_CST:
2853 return 1;
2855 case INDIRECT_REF:
2856 case ARRAY_REF:
2857 case VAR_DECL:
2858 case PARM_DECL:
2859 case RESULT_DECL:
2860 case ERROR_MARK:
2861 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
2862 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
2864 case BIND_EXPR:
2865 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
2867 default:
2868 return 0;
2872 /* Give an error for storing in something that is 'const'. */
2874 static void
2875 readonly_error (tree arg, enum lvalue_use use)
2877 gcc_assert (use == lv_assign || use == lv_increment || use == lv_decrement);
2878 /* Using this macro rather than (for example) arrays of messages
2879 ensures that all the format strings are checked at compile
2880 time. */
2881 #define READONLY_MSG(A, I, D) (use == lv_assign \
2882 ? (A) \
2883 : (use == lv_increment ? (I) : (D)))
2884 if (TREE_CODE (arg) == COMPONENT_REF)
2886 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
2887 readonly_error (TREE_OPERAND (arg, 0), use);
2888 else
2889 error (READONLY_MSG (G_("assignment of read-only member %qD"),
2890 G_("increment of read-only member %qD"),
2891 G_("decrement of read-only member %qD")),
2892 TREE_OPERAND (arg, 1));
2894 else if (TREE_CODE (arg) == VAR_DECL)
2895 error (READONLY_MSG (G_("assignment of read-only variable %qD"),
2896 G_("increment of read-only variable %qD"),
2897 G_("decrement of read-only variable %qD")),
2898 arg);
2899 else
2900 error (READONLY_MSG (G_("assignment of read-only location"),
2901 G_("increment of read-only location"),
2902 G_("decrement of read-only location")));
2906 /* Return nonzero if REF is an lvalue valid for this language;
2907 otherwise, print an error message and return zero. USE says
2908 how the lvalue is being used and so selects the error message. */
2910 static int
2911 lvalue_or_else (tree ref, enum lvalue_use use)
2913 int win = lvalue_p (ref);
2915 if (!win)
2916 lvalue_error (use);
2918 return win;
2921 /* Mark EXP saying that we need to be able to take the
2922 address of it; it should not be allocated in a register.
2923 Returns true if successful. */
2925 bool
2926 c_mark_addressable (tree exp)
2928 tree x = exp;
2930 while (1)
2931 switch (TREE_CODE (x))
2933 case COMPONENT_REF:
2934 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
2936 error
2937 ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
2938 return false;
2941 /* ... fall through ... */
2943 case ADDR_EXPR:
2944 case ARRAY_REF:
2945 case REALPART_EXPR:
2946 case IMAGPART_EXPR:
2947 x = TREE_OPERAND (x, 0);
2948 break;
2950 case COMPOUND_LITERAL_EXPR:
2951 case CONSTRUCTOR:
2952 TREE_ADDRESSABLE (x) = 1;
2953 return true;
2955 case VAR_DECL:
2956 case CONST_DECL:
2957 case PARM_DECL:
2958 case RESULT_DECL:
2959 if (C_DECL_REGISTER (x)
2960 && DECL_NONLOCAL (x))
2962 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2964 error
2965 ("global register variable %qD used in nested function", x);
2966 return false;
2968 pedwarn ("register variable %qD used in nested function", x);
2970 else if (C_DECL_REGISTER (x))
2972 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2973 error ("address of global register variable %qD requested", x);
2974 else
2975 error ("address of register variable %qD requested", x);
2976 return false;
2979 /* drops in */
2980 case FUNCTION_DECL:
2981 TREE_ADDRESSABLE (x) = 1;
2982 /* drops out */
2983 default:
2984 return true;
2988 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
2990 tree
2991 build_conditional_expr (tree ifexp, tree op1, tree op2)
2993 tree type1;
2994 tree type2;
2995 enum tree_code code1;
2996 enum tree_code code2;
2997 tree result_type = NULL;
2998 tree orig_op1 = op1, orig_op2 = op2;
3000 /* Promote both alternatives. */
3002 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3003 op1 = default_conversion (op1);
3004 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3005 op2 = default_conversion (op2);
3007 if (TREE_CODE (ifexp) == ERROR_MARK
3008 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3009 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3010 return error_mark_node;
3012 type1 = TREE_TYPE (op1);
3013 code1 = TREE_CODE (type1);
3014 type2 = TREE_TYPE (op2);
3015 code2 = TREE_CODE (type2);
3017 /* C90 does not permit non-lvalue arrays in conditional expressions.
3018 In C99 they will be pointers by now. */
3019 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
3021 error ("non-lvalue array in conditional expression");
3022 return error_mark_node;
3025 /* Quickly detect the usual case where op1 and op2 have the same type
3026 after promotion. */
3027 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3029 if (type1 == type2)
3030 result_type = type1;
3031 else
3032 result_type = TYPE_MAIN_VARIANT (type1);
3034 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
3035 || code1 == COMPLEX_TYPE)
3036 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3037 || code2 == COMPLEX_TYPE))
3039 result_type = c_common_type (type1, type2);
3041 /* If -Wsign-compare, warn here if type1 and type2 have
3042 different signedness. We'll promote the signed to unsigned
3043 and later code won't know it used to be different.
3044 Do this check on the original types, so that explicit casts
3045 will be considered, but default promotions won't. */
3046 if (warn_sign_compare && !skip_evaluation)
3048 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3049 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
3051 if (unsigned_op1 ^ unsigned_op2)
3053 /* Do not warn if the result type is signed, since the
3054 signed type will only be chosen if it can represent
3055 all the values of the unsigned type. */
3056 if (!TYPE_UNSIGNED (result_type))
3057 /* OK */;
3058 /* Do not warn if the signed quantity is an unsuffixed
3059 integer literal (or some static constant expression
3060 involving such literals) and it is non-negative. */
3061 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
3062 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
3063 /* OK */;
3064 else
3065 warning (0, "signed and unsigned type in conditional expression");
3069 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3071 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3072 pedwarn ("ISO C forbids conditional expr with only one void side");
3073 result_type = void_type_node;
3075 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3077 if (comp_target_types (type1, type2))
3078 result_type = common_pointer_type (type1, type2);
3079 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3080 && TREE_CODE (orig_op1) != NOP_EXPR)
3081 result_type = qualify_type (type2, type1);
3082 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3083 && TREE_CODE (orig_op2) != NOP_EXPR)
3084 result_type = qualify_type (type1, type2);
3085 else if (VOID_TYPE_P (TREE_TYPE (type1)))
3087 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3088 pedwarn ("ISO C forbids conditional expr between "
3089 "%<void *%> and function pointer");
3090 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
3091 TREE_TYPE (type2)));
3093 else if (VOID_TYPE_P (TREE_TYPE (type2)))
3095 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3096 pedwarn ("ISO C forbids conditional expr between "
3097 "%<void *%> and function pointer");
3098 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
3099 TREE_TYPE (type1)));
3101 else
3103 pedwarn ("pointer type mismatch in conditional expression");
3104 result_type = build_pointer_type (void_type_node);
3107 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3109 if (!integer_zerop (op2))
3110 pedwarn ("pointer/integer type mismatch in conditional expression");
3111 else
3113 op2 = null_pointer_node;
3115 result_type = type1;
3117 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3119 if (!integer_zerop (op1))
3120 pedwarn ("pointer/integer type mismatch in conditional expression");
3121 else
3123 op1 = null_pointer_node;
3125 result_type = type2;
3128 if (!result_type)
3130 if (flag_cond_mismatch)
3131 result_type = void_type_node;
3132 else
3134 error ("type mismatch in conditional expression");
3135 return error_mark_node;
3139 /* Merge const and volatile flags of the incoming types. */
3140 result_type
3141 = build_type_variant (result_type,
3142 TREE_READONLY (op1) || TREE_READONLY (op2),
3143 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3145 if (result_type != TREE_TYPE (op1))
3146 op1 = convert_and_check (result_type, op1);
3147 if (result_type != TREE_TYPE (op2))
3148 op2 = convert_and_check (result_type, op2);
3150 return fold_build3 (COND_EXPR, result_type, ifexp, op1, op2);
3153 /* Return a compound expression that performs two expressions and
3154 returns the value of the second of them. */
3156 tree
3157 build_compound_expr (tree expr1, tree expr2)
3159 if (!TREE_SIDE_EFFECTS (expr1))
3161 /* The left-hand operand of a comma expression is like an expression
3162 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3163 any side-effects, unless it was explicitly cast to (void). */
3164 if (warn_unused_value)
3166 if (VOID_TYPE_P (TREE_TYPE (expr1))
3167 && TREE_CODE (expr1) == CONVERT_EXPR)
3168 ; /* (void) a, b */
3169 else if (VOID_TYPE_P (TREE_TYPE (expr1))
3170 && TREE_CODE (expr1) == COMPOUND_EXPR
3171 && TREE_CODE (TREE_OPERAND (expr1, 1)) == CONVERT_EXPR)
3172 ; /* (void) a, (void) b, c */
3173 else
3174 warning (0, "left-hand operand of comma expression has no effect");
3178 /* With -Wunused, we should also warn if the left-hand operand does have
3179 side-effects, but computes a value which is not used. For example, in
3180 `foo() + bar(), baz()' the result of the `+' operator is not used,
3181 so we should issue a warning. */
3182 else if (warn_unused_value)
3183 warn_if_unused_value (expr1, input_location);
3185 return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
3188 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3190 tree
3191 build_c_cast (tree type, tree expr)
3193 tree value = expr;
3195 if (type == error_mark_node || expr == error_mark_node)
3196 return error_mark_node;
3198 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3199 only in <protocol> qualifications. But when constructing cast expressions,
3200 the protocols do matter and must be kept around. */
3201 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
3202 return build1 (NOP_EXPR, type, expr);
3204 type = TYPE_MAIN_VARIANT (type);
3206 if (TREE_CODE (type) == ARRAY_TYPE)
3208 error ("cast specifies array type");
3209 return error_mark_node;
3212 if (TREE_CODE (type) == FUNCTION_TYPE)
3214 error ("cast specifies function type");
3215 return error_mark_node;
3218 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3220 if (pedantic)
3222 if (TREE_CODE (type) == RECORD_TYPE
3223 || TREE_CODE (type) == UNION_TYPE)
3224 pedwarn ("ISO C forbids casting nonscalar to the same type");
3227 else if (TREE_CODE (type) == UNION_TYPE)
3229 tree field;
3231 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3232 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3233 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3234 break;
3236 if (field)
3238 tree t;
3240 if (pedantic)
3241 pedwarn ("ISO C forbids casts to union type");
3242 t = digest_init (type,
3243 build_constructor_single (type, field, value),
3244 true, 0);
3245 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3246 TREE_INVARIANT (t) = TREE_INVARIANT (value);
3247 return t;
3249 error ("cast to union type from type not present in union");
3250 return error_mark_node;
3252 else
3254 tree otype, ovalue;
3256 if (type == void_type_node)
3257 return build1 (CONVERT_EXPR, type, value);
3259 otype = TREE_TYPE (value);
3261 /* Optionally warn about potentially worrisome casts. */
3263 if (warn_cast_qual
3264 && TREE_CODE (type) == POINTER_TYPE
3265 && TREE_CODE (otype) == POINTER_TYPE)
3267 tree in_type = type;
3268 tree in_otype = otype;
3269 int added = 0;
3270 int discarded = 0;
3272 /* Check that the qualifiers on IN_TYPE are a superset of
3273 the qualifiers of IN_OTYPE. The outermost level of
3274 POINTER_TYPE nodes is uninteresting and we stop as soon
3275 as we hit a non-POINTER_TYPE node on either type. */
3278 in_otype = TREE_TYPE (in_otype);
3279 in_type = TREE_TYPE (in_type);
3281 /* GNU C allows cv-qualified function types. 'const'
3282 means the function is very pure, 'volatile' means it
3283 can't return. We need to warn when such qualifiers
3284 are added, not when they're taken away. */
3285 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3286 && TREE_CODE (in_type) == FUNCTION_TYPE)
3287 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3288 else
3289 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3291 while (TREE_CODE (in_type) == POINTER_TYPE
3292 && TREE_CODE (in_otype) == POINTER_TYPE);
3294 if (added)
3295 warning (0, "cast adds new qualifiers to function type");
3297 if (discarded)
3298 /* There are qualifiers present in IN_OTYPE that are not
3299 present in IN_TYPE. */
3300 warning (0, "cast discards qualifiers from pointer target type");
3303 /* Warn about possible alignment problems. */
3304 if (STRICT_ALIGNMENT
3305 && TREE_CODE (type) == POINTER_TYPE
3306 && TREE_CODE (otype) == POINTER_TYPE
3307 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3308 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3309 /* Don't warn about opaque types, where the actual alignment
3310 restriction is unknown. */
3311 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3312 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3313 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3314 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3315 warning (OPT_Wcast_align,
3316 "cast increases required alignment of target type");
3318 if (TREE_CODE (type) == INTEGER_TYPE
3319 && TREE_CODE (otype) == POINTER_TYPE
3320 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3321 && !TREE_CONSTANT (value))
3322 warning (OPT_Wpointer_to_int_cast,
3323 "cast from pointer to integer of different size");
3325 if (TREE_CODE (value) == CALL_EXPR
3326 && TREE_CODE (type) != TREE_CODE (otype))
3327 warning (OPT_Wbad_function_cast, "cast from function call of type %qT "
3328 "to non-matching type %qT", otype, type);
3330 if (TREE_CODE (type) == POINTER_TYPE
3331 && TREE_CODE (otype) == INTEGER_TYPE
3332 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3333 /* Don't warn about converting any constant. */
3334 && !TREE_CONSTANT (value))
3335 warning (OPT_Wint_to_pointer_cast, "cast to pointer from integer "
3336 "of different size");
3338 if (flag_strict_aliasing && warn_strict_aliasing
3339 && TREE_CODE (type) == POINTER_TYPE
3340 && TREE_CODE (otype) == POINTER_TYPE
3341 && TREE_CODE (expr) == ADDR_EXPR
3342 && (DECL_P (TREE_OPERAND (expr, 0))
3343 || TREE_CODE (TREE_OPERAND (expr, 0)) == COMPONENT_REF)
3344 && !VOID_TYPE_P (TREE_TYPE (type)))
3346 /* Casting the address of an object to non void pointer. Warn
3347 if the cast breaks type based aliasing. */
3348 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3349 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
3350 "might break strict-aliasing rules");
3351 else
3353 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
3354 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
3356 if (!alias_sets_conflict_p (set1, set2))
3357 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
3358 "pointer will break strict-aliasing rules");
3359 else if (warn_strict_aliasing > 1
3360 && !alias_sets_might_conflict_p (set1, set2))
3361 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
3362 "pointer might break strict-aliasing rules");
3366 /* If pedantic, warn for conversions between function and object
3367 pointer types, except for converting a null pointer constant
3368 to function pointer type. */
3369 if (pedantic
3370 && TREE_CODE (type) == POINTER_TYPE
3371 && TREE_CODE (otype) == POINTER_TYPE
3372 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3373 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3374 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3376 if (pedantic
3377 && TREE_CODE (type) == POINTER_TYPE
3378 && TREE_CODE (otype) == POINTER_TYPE
3379 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3380 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3381 && !(integer_zerop (value) && TREE_TYPE (otype) == void_type_node
3382 && TREE_CODE (expr) != NOP_EXPR))
3383 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3385 ovalue = value;
3386 value = convert (type, value);
3388 /* Ignore any integer overflow caused by the cast. */
3389 if (TREE_CODE (value) == INTEGER_CST)
3391 /* If OVALUE had overflow set, then so will VALUE, so it
3392 is safe to overwrite. */
3393 if (CONSTANT_CLASS_P (ovalue))
3395 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3396 /* Similarly, constant_overflow cannot have become cleared. */
3397 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3399 else
3400 TREE_OVERFLOW (value) = 0;
3404 /* Don't let a cast be an lvalue. */
3405 if (value == expr)
3406 value = non_lvalue (value);
3408 return value;
3411 /* Interpret a cast of expression EXPR to type TYPE. */
3412 tree
3413 c_cast_expr (struct c_type_name *type_name, tree expr)
3415 tree type;
3416 int saved_wsp = warn_strict_prototypes;
3418 /* This avoids warnings about unprototyped casts on
3419 integers. E.g. "#define SIG_DFL (void(*)())0". */
3420 if (TREE_CODE (expr) == INTEGER_CST)
3421 warn_strict_prototypes = 0;
3422 type = groktypename (type_name);
3423 warn_strict_prototypes = saved_wsp;
3425 return build_c_cast (type, expr);
3429 /* Build an assignment expression of lvalue LHS from value RHS.
3430 MODIFYCODE is the code for a binary operator that we use
3431 to combine the old value of LHS with RHS to get the new value.
3432 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3434 tree
3435 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3437 tree result;
3438 tree newrhs;
3439 tree lhstype = TREE_TYPE (lhs);
3440 tree olhstype = lhstype;
3442 /* Types that aren't fully specified cannot be used in assignments. */
3443 lhs = require_complete_type (lhs);
3445 /* Avoid duplicate error messages from operands that had errors. */
3446 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3447 return error_mark_node;
3449 STRIP_TYPE_NOPS (rhs);
3451 newrhs = rhs;
3453 /* If a binary op has been requested, combine the old LHS value with the RHS
3454 producing the value we should actually store into the LHS. */
3456 if (modifycode != NOP_EXPR)
3458 lhs = stabilize_reference (lhs);
3459 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3462 if (!lvalue_or_else (lhs, lv_assign))
3463 return error_mark_node;
3465 /* Give an error for storing in something that is 'const'. */
3467 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3468 || ((TREE_CODE (lhstype) == RECORD_TYPE
3469 || TREE_CODE (lhstype) == UNION_TYPE)
3470 && C_TYPE_FIELDS_READONLY (lhstype)))
3471 readonly_error (lhs, lv_assign);
3473 /* If storing into a structure or union member,
3474 it has probably been given type `int'.
3475 Compute the type that would go with
3476 the actual amount of storage the member occupies. */
3478 if (TREE_CODE (lhs) == COMPONENT_REF
3479 && (TREE_CODE (lhstype) == INTEGER_TYPE
3480 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3481 || TREE_CODE (lhstype) == REAL_TYPE
3482 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3483 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3485 /* If storing in a field that is in actuality a short or narrower than one,
3486 we must store in the field in its actual type. */
3488 if (lhstype != TREE_TYPE (lhs))
3490 lhs = copy_node (lhs);
3491 TREE_TYPE (lhs) = lhstype;
3494 /* Convert new value to destination type. */
3496 newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
3497 NULL_TREE, NULL_TREE, 0);
3498 if (TREE_CODE (newrhs) == ERROR_MARK)
3499 return error_mark_node;
3501 /* Emit ObjC write barrier, if necessary. */
3502 if (c_dialect_objc () && flag_objc_gc)
3504 result = objc_generate_write_barrier (lhs, modifycode, newrhs);
3505 if (result)
3506 return result;
3509 /* Scan operands. */
3511 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3512 TREE_SIDE_EFFECTS (result) = 1;
3514 /* If we got the LHS in a different type for storing in,
3515 convert the result back to the nominal type of LHS
3516 so that the value we return always has the same type
3517 as the LHS argument. */
3519 if (olhstype == TREE_TYPE (result))
3520 return result;
3521 return convert_for_assignment (olhstype, result, ic_assign,
3522 NULL_TREE, NULL_TREE, 0);
3525 /* Convert value RHS to type TYPE as preparation for an assignment
3526 to an lvalue of type TYPE.
3527 The real work of conversion is done by `convert'.
3528 The purpose of this function is to generate error messages
3529 for assignments that are not allowed in C.
3530 ERRTYPE says whether it is argument passing, assignment,
3531 initialization or return.
3533 FUNCTION is a tree for the function being called.
3534 PARMNUM is the number of the argument, for printing in error messages. */
3536 static tree
3537 convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
3538 tree fundecl, tree function, int parmnum)
3540 enum tree_code codel = TREE_CODE (type);
3541 tree rhstype;
3542 enum tree_code coder;
3543 tree rname = NULL_TREE;
3544 bool objc_ok = false;
3546 if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
3548 tree selector;
3549 /* Change pointer to function to the function itself for
3550 diagnostics. */
3551 if (TREE_CODE (function) == ADDR_EXPR
3552 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3553 function = TREE_OPERAND (function, 0);
3555 /* Handle an ObjC selector specially for diagnostics. */
3556 selector = objc_message_selector ();
3557 rname = function;
3558 if (selector && parmnum > 2)
3560 rname = selector;
3561 parmnum -= 2;
3565 /* This macro is used to emit diagnostics to ensure that all format
3566 strings are complete sentences, visible to gettext and checked at
3567 compile time. */
3568 #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE) \
3569 do { \
3570 switch (errtype) \
3572 case ic_argpass: \
3573 pedwarn (AR, parmnum, rname); \
3574 break; \
3575 case ic_argpass_nonproto: \
3576 warning (0, AR, parmnum, rname); \
3577 break; \
3578 case ic_assign: \
3579 pedwarn (AS); \
3580 break; \
3581 case ic_init: \
3582 pedwarn (IN); \
3583 break; \
3584 case ic_return: \
3585 pedwarn (RE); \
3586 break; \
3587 default: \
3588 gcc_unreachable (); \
3590 } while (0)
3592 STRIP_TYPE_NOPS (rhs);
3594 if (optimize && TREE_CODE (rhs) == VAR_DECL
3595 && TREE_CODE (TREE_TYPE (rhs)) != ARRAY_TYPE)
3596 rhs = decl_constant_value_for_broken_optimization (rhs);
3598 rhstype = TREE_TYPE (rhs);
3599 coder = TREE_CODE (rhstype);
3601 if (coder == ERROR_MARK)
3602 return error_mark_node;
3604 if (c_dialect_objc ())
3606 int parmno;
3608 switch (errtype)
3610 case ic_return:
3611 parmno = 0;
3612 break;
3614 case ic_assign:
3615 parmno = -1;
3616 break;
3618 case ic_init:
3619 parmno = -2;
3620 break;
3622 default:
3623 parmno = parmnum;
3624 break;
3627 objc_ok = objc_compare_types (type, rhstype, parmno, rname);
3630 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3632 overflow_warning (rhs);
3633 return rhs;
3636 if (coder == VOID_TYPE)
3638 /* Except for passing an argument to an unprototyped function,
3639 this is a constraint violation. When passing an argument to
3640 an unprototyped function, it is compile-time undefined;
3641 making it a constraint in that case was rejected in
3642 DR#252. */
3643 error ("void value not ignored as it ought to be");
3644 return error_mark_node;
3646 /* A type converts to a reference to it.
3647 This code doesn't fully support references, it's just for the
3648 special case of va_start and va_copy. */
3649 if (codel == REFERENCE_TYPE
3650 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3652 if (!lvalue_p (rhs))
3654 error ("cannot pass rvalue to reference parameter");
3655 return error_mark_node;
3657 if (!c_mark_addressable (rhs))
3658 return error_mark_node;
3659 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3661 /* We already know that these two types are compatible, but they
3662 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3663 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3664 likely to be va_list, a typedef to __builtin_va_list, which
3665 is different enough that it will cause problems later. */
3666 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3667 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3669 rhs = build1 (NOP_EXPR, type, rhs);
3670 return rhs;
3672 /* Some types can interconvert without explicit casts. */
3673 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
3674 && vector_types_convertible_p (type, TREE_TYPE (rhs)))
3675 return convert (type, rhs);
3676 /* Arithmetic types all interconvert, and enum is treated like int. */
3677 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3678 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3679 || codel == BOOLEAN_TYPE)
3680 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3681 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3682 || coder == BOOLEAN_TYPE))
3683 return convert_and_check (type, rhs);
3685 /* Conversion to a transparent union from its member types.
3686 This applies only to function arguments. */
3687 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
3688 && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
3690 tree memb_types;
3691 tree marginal_memb_type = 0;
3693 for (memb_types = TYPE_FIELDS (type); memb_types;
3694 memb_types = TREE_CHAIN (memb_types))
3696 tree memb_type = TREE_TYPE (memb_types);
3698 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3699 TYPE_MAIN_VARIANT (rhstype)))
3700 break;
3702 if (TREE_CODE (memb_type) != POINTER_TYPE)
3703 continue;
3705 if (coder == POINTER_TYPE)
3707 tree ttl = TREE_TYPE (memb_type);
3708 tree ttr = TREE_TYPE (rhstype);
3710 /* Any non-function converts to a [const][volatile] void *
3711 and vice versa; otherwise, targets must be the same.
3712 Meanwhile, the lhs target must have all the qualifiers of
3713 the rhs. */
3714 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3715 || comp_target_types (memb_type, rhstype))
3717 /* If this type won't generate any warnings, use it. */
3718 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3719 || ((TREE_CODE (ttr) == FUNCTION_TYPE
3720 && TREE_CODE (ttl) == FUNCTION_TYPE)
3721 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3722 == TYPE_QUALS (ttr))
3723 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3724 == TYPE_QUALS (ttl))))
3725 break;
3727 /* Keep looking for a better type, but remember this one. */
3728 if (!marginal_memb_type)
3729 marginal_memb_type = memb_type;
3733 /* Can convert integer zero to any pointer type. */
3734 if (integer_zerop (rhs)
3735 || (TREE_CODE (rhs) == NOP_EXPR
3736 && integer_zerop (TREE_OPERAND (rhs, 0))))
3738 rhs = null_pointer_node;
3739 break;
3743 if (memb_types || marginal_memb_type)
3745 if (!memb_types)
3747 /* We have only a marginally acceptable member type;
3748 it needs a warning. */
3749 tree ttl = TREE_TYPE (marginal_memb_type);
3750 tree ttr = TREE_TYPE (rhstype);
3752 /* Const and volatile mean something different for function
3753 types, so the usual warnings are not appropriate. */
3754 if (TREE_CODE (ttr) == FUNCTION_TYPE
3755 && TREE_CODE (ttl) == FUNCTION_TYPE)
3757 /* Because const and volatile on functions are
3758 restrictions that say the function will not do
3759 certain things, it is okay to use a const or volatile
3760 function where an ordinary one is wanted, but not
3761 vice-versa. */
3762 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3763 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE "
3764 "makes qualified function "
3765 "pointer from unqualified"),
3766 G_("assignment makes qualified "
3767 "function pointer from "
3768 "unqualified"),
3769 G_("initialization makes qualified "
3770 "function pointer from "
3771 "unqualified"),
3772 G_("return makes qualified function "
3773 "pointer from unqualified"));
3775 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3776 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE discards "
3777 "qualifiers from pointer target type"),
3778 G_("assignment discards qualifiers "
3779 "from pointer target type"),
3780 G_("initialization discards qualifiers "
3781 "from pointer target type"),
3782 G_("return discards qualifiers from "
3783 "pointer target type"));
3786 if (pedantic && (!fundecl || !DECL_IN_SYSTEM_HEADER (fundecl)))
3787 pedwarn ("ISO C prohibits argument conversion to union type");
3789 return build1 (NOP_EXPR, type, rhs);
3793 /* Conversions among pointers */
3794 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3795 && (coder == codel))
3797 tree ttl = TREE_TYPE (type);
3798 tree ttr = TREE_TYPE (rhstype);
3799 tree mvl = ttl;
3800 tree mvr = ttr;
3801 bool is_opaque_pointer;
3802 int target_cmp = 0; /* Cache comp_target_types () result. */
3804 if (TREE_CODE (mvl) != ARRAY_TYPE)
3805 mvl = TYPE_MAIN_VARIANT (mvl);
3806 if (TREE_CODE (mvr) != ARRAY_TYPE)
3807 mvr = TYPE_MAIN_VARIANT (mvr);
3808 /* Opaque pointers are treated like void pointers. */
3809 is_opaque_pointer = (targetm.vector_opaque_p (type)
3810 || targetm.vector_opaque_p (rhstype))
3811 && TREE_CODE (ttl) == VECTOR_TYPE
3812 && TREE_CODE (ttr) == VECTOR_TYPE;
3814 /* C++ does not allow the implicit conversion void* -> T*. However,
3815 for the purpose of reducing the number of false positives, we
3816 tolerate the special case of
3818 int *p = NULL;
3820 where NULL is typically defined in C to be '(void *) 0'. */
3821 if (VOID_TYPE_P (ttr) && rhs != null_pointer_node && !VOID_TYPE_P (ttl))
3822 warning (OPT_Wc___compat, "request for implicit conversion from "
3823 "%qT to %qT not permitted in C++", rhstype, type);
3825 /* Check if the right-hand side has a format attribute but the
3826 left-hand side doesn't. */
3827 if (warn_missing_format_attribute
3828 && check_missing_format_attribute (type, rhstype))
3830 switch (errtype)
3832 case ic_argpass:
3833 case ic_argpass_nonproto:
3834 warning (OPT_Wmissing_format_attribute,
3835 "argument %d of %qE might be "
3836 "a candidate for a format attribute",
3837 parmnum, rname);
3838 break;
3839 case ic_assign:
3840 warning (OPT_Wmissing_format_attribute,
3841 "assignment left-hand side might be "
3842 "a candidate for a format attribute");
3843 break;
3844 case ic_init:
3845 warning (OPT_Wmissing_format_attribute,
3846 "initialization left-hand side might be "
3847 "a candidate for a format attribute");
3848 break;
3849 case ic_return:
3850 warning (OPT_Wmissing_format_attribute,
3851 "return type might be "
3852 "a candidate for a format attribute");
3853 break;
3854 default:
3855 gcc_unreachable ();
3859 /* Any non-function converts to a [const][volatile] void *
3860 and vice versa; otherwise, targets must be the same.
3861 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3862 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3863 || (target_cmp = comp_target_types (type, rhstype))
3864 || is_opaque_pointer
3865 || (c_common_unsigned_type (mvl)
3866 == c_common_unsigned_type (mvr)))
3868 if (pedantic
3869 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3871 (VOID_TYPE_P (ttr)
3872 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3873 which are not ANSI null ptr constants. */
3874 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3875 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3876 WARN_FOR_ASSIGNMENT (G_("ISO C forbids passing argument %d of "
3877 "%qE between function pointer "
3878 "and %<void *%>"),
3879 G_("ISO C forbids assignment between "
3880 "function pointer and %<void *%>"),
3881 G_("ISO C forbids initialization between "
3882 "function pointer and %<void *%>"),
3883 G_("ISO C forbids return between function "
3884 "pointer and %<void *%>"));
3885 /* Const and volatile mean something different for function types,
3886 so the usual warnings are not appropriate. */
3887 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3888 && TREE_CODE (ttl) != FUNCTION_TYPE)
3890 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3892 /* Types differing only by the presence of the 'volatile'
3893 qualifier are acceptable if the 'volatile' has been added
3894 in by the Objective-C EH machinery. */
3895 if (!objc_type_quals_match (ttl, ttr))
3896 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE discards "
3897 "qualifiers from pointer target type"),
3898 G_("assignment discards qualifiers "
3899 "from pointer target type"),
3900 G_("initialization discards qualifiers "
3901 "from pointer target type"),
3902 G_("return discards qualifiers from "
3903 "pointer target type"));
3905 /* If this is not a case of ignoring a mismatch in signedness,
3906 no warning. */
3907 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3908 || target_cmp)
3910 /* If there is a mismatch, do warn. */
3911 else if (warn_pointer_sign)
3912 WARN_FOR_ASSIGNMENT (G_("pointer targets in passing argument "
3913 "%d of %qE differ in signedness"),
3914 G_("pointer targets in assignment "
3915 "differ in signedness"),
3916 G_("pointer targets in initialization "
3917 "differ in signedness"),
3918 G_("pointer targets in return differ "
3919 "in signedness"));
3921 else if (TREE_CODE (ttl) == FUNCTION_TYPE
3922 && TREE_CODE (ttr) == FUNCTION_TYPE)
3924 /* Because const and volatile on functions are restrictions
3925 that say the function will not do certain things,
3926 it is okay to use a const or volatile function
3927 where an ordinary one is wanted, but not vice-versa. */
3928 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3929 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes "
3930 "qualified function pointer "
3931 "from unqualified"),
3932 G_("assignment makes qualified function "
3933 "pointer from unqualified"),
3934 G_("initialization makes qualified "
3935 "function pointer from unqualified"),
3936 G_("return makes qualified function "
3937 "pointer from unqualified"));
3940 else
3941 /* Avoid warning about the volatile ObjC EH puts on decls. */
3942 if (!objc_ok)
3943 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE from "
3944 "incompatible pointer type"),
3945 G_("assignment from incompatible pointer type"),
3946 G_("initialization from incompatible "
3947 "pointer type"),
3948 G_("return from incompatible pointer type"));
3950 return convert (type, rhs);
3952 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
3954 /* ??? This should not be an error when inlining calls to
3955 unprototyped functions. */
3956 error ("invalid use of non-lvalue array");
3957 return error_mark_node;
3959 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
3961 /* An explicit constant 0 can convert to a pointer,
3962 or one that results from arithmetic, even including
3963 a cast to integer type. */
3964 if (!(TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3966 !(TREE_CODE (rhs) == NOP_EXPR
3967 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3968 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3969 && integer_zerop (TREE_OPERAND (rhs, 0))))
3970 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes "
3971 "pointer from integer without a cast"),
3972 G_("assignment makes pointer from integer "
3973 "without a cast"),
3974 G_("initialization makes pointer from "
3975 "integer without a cast"),
3976 G_("return makes pointer from integer "
3977 "without a cast"));
3979 return convert (type, rhs);
3981 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
3983 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes integer "
3984 "from pointer without a cast"),
3985 G_("assignment makes integer from pointer "
3986 "without a cast"),
3987 G_("initialization makes integer from pointer "
3988 "without a cast"),
3989 G_("return makes integer from pointer "
3990 "without a cast"));
3991 return convert (type, rhs);
3993 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3994 return convert (type, rhs);
3996 switch (errtype)
3998 case ic_argpass:
3999 case ic_argpass_nonproto:
4000 /* ??? This should not be an error when inlining calls to
4001 unprototyped functions. */
4002 error ("incompatible type for argument %d of %qE", parmnum, rname);
4003 break;
4004 case ic_assign:
4005 error ("incompatible types in assignment");
4006 break;
4007 case ic_init:
4008 error ("incompatible types in initialization");
4009 break;
4010 case ic_return:
4011 error ("incompatible types in return");
4012 break;
4013 default:
4014 gcc_unreachable ();
4017 return error_mark_node;
4020 /* Convert VALUE for assignment into inlined parameter PARM. ARGNUM
4021 is used for error and waring reporting and indicates which argument
4022 is being processed. */
4024 tree
4025 c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
4027 tree ret, type;
4029 /* If FN was prototyped, the value has been converted already
4030 in convert_arguments. */
4031 if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
4032 return value;
4034 type = TREE_TYPE (parm);
4035 ret = convert_for_assignment (type, value,
4036 ic_argpass_nonproto, fn,
4037 fn, argnum);
4038 if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
4039 && INTEGRAL_TYPE_P (type)
4040 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
4041 ret = default_conversion (ret);
4042 return ret;
4045 /* If VALUE is a compound expr all of whose expressions are constant, then
4046 return its value. Otherwise, return error_mark_node.
4048 This is for handling COMPOUND_EXPRs as initializer elements
4049 which is allowed with a warning when -pedantic is specified. */
4051 static tree
4052 valid_compound_expr_initializer (tree value, tree endtype)
4054 if (TREE_CODE (value) == COMPOUND_EXPR)
4056 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4057 == error_mark_node)
4058 return error_mark_node;
4059 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4060 endtype);
4062 else if (!initializer_constant_valid_p (value, endtype))
4063 return error_mark_node;
4064 else
4065 return value;
4068 /* Perform appropriate conversions on the initial value of a variable,
4069 store it in the declaration DECL,
4070 and print any error messages that are appropriate.
4071 If the init is invalid, store an ERROR_MARK. */
4073 void
4074 store_init_value (tree decl, tree init)
4076 tree value, type;
4078 /* If variable's type was invalidly declared, just ignore it. */
4080 type = TREE_TYPE (decl);
4081 if (TREE_CODE (type) == ERROR_MARK)
4082 return;
4084 /* Digest the specified initializer into an expression. */
4086 value = digest_init (type, init, true, TREE_STATIC (decl));
4088 /* Store the expression if valid; else report error. */
4090 if (!in_system_header
4091 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
4092 warning (OPT_Wtraditional, "traditional C rejects automatic "
4093 "aggregate initialization");
4095 DECL_INITIAL (decl) = value;
4097 /* ANSI wants warnings about out-of-range constant initializers. */
4098 STRIP_TYPE_NOPS (value);
4099 constant_expression_warning (value);
4101 /* Check if we need to set array size from compound literal size. */
4102 if (TREE_CODE (type) == ARRAY_TYPE
4103 && TYPE_DOMAIN (type) == 0
4104 && value != error_mark_node)
4106 tree inside_init = init;
4108 STRIP_TYPE_NOPS (inside_init);
4109 inside_init = fold (inside_init);
4111 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4113 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4115 if (TYPE_DOMAIN (TREE_TYPE (decl)))
4117 /* For int foo[] = (int [3]){1}; we need to set array size
4118 now since later on array initializer will be just the
4119 brace enclosed list of the compound literal. */
4120 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
4121 layout_type (type);
4122 layout_decl (decl, 0);
4128 /* Methods for storing and printing names for error messages. */
4130 /* Implement a spelling stack that allows components of a name to be pushed
4131 and popped. Each element on the stack is this structure. */
4133 struct spelling
4135 int kind;
4136 union
4138 int i;
4139 const char *s;
4140 } u;
4143 #define SPELLING_STRING 1
4144 #define SPELLING_MEMBER 2
4145 #define SPELLING_BOUNDS 3
4147 static struct spelling *spelling; /* Next stack element (unused). */
4148 static struct spelling *spelling_base; /* Spelling stack base. */
4149 static int spelling_size; /* Size of the spelling stack. */
4151 /* Macros to save and restore the spelling stack around push_... functions.
4152 Alternative to SAVE_SPELLING_STACK. */
4154 #define SPELLING_DEPTH() (spelling - spelling_base)
4155 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
4157 /* Push an element on the spelling stack with type KIND and assign VALUE
4158 to MEMBER. */
4160 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4162 int depth = SPELLING_DEPTH (); \
4164 if (depth >= spelling_size) \
4166 spelling_size += 10; \
4167 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
4168 spelling_size); \
4169 RESTORE_SPELLING_DEPTH (depth); \
4172 spelling->kind = (KIND); \
4173 spelling->MEMBER = (VALUE); \
4174 spelling++; \
4177 /* Push STRING on the stack. Printed literally. */
4179 static void
4180 push_string (const char *string)
4182 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4185 /* Push a member name on the stack. Printed as '.' STRING. */
4187 static void
4188 push_member_name (tree decl)
4190 const char *const string
4191 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4192 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4195 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4197 static void
4198 push_array_bounds (int bounds)
4200 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4203 /* Compute the maximum size in bytes of the printed spelling. */
4205 static int
4206 spelling_length (void)
4208 int size = 0;
4209 struct spelling *p;
4211 for (p = spelling_base; p < spelling; p++)
4213 if (p->kind == SPELLING_BOUNDS)
4214 size += 25;
4215 else
4216 size += strlen (p->u.s) + 1;
4219 return size;
4222 /* Print the spelling to BUFFER and return it. */
4224 static char *
4225 print_spelling (char *buffer)
4227 char *d = buffer;
4228 struct spelling *p;
4230 for (p = spelling_base; p < spelling; p++)
4231 if (p->kind == SPELLING_BOUNDS)
4233 sprintf (d, "[%d]", p->u.i);
4234 d += strlen (d);
4236 else
4238 const char *s;
4239 if (p->kind == SPELLING_MEMBER)
4240 *d++ = '.';
4241 for (s = p->u.s; (*d = *s++); d++)
4244 *d++ = '\0';
4245 return buffer;
4248 /* Issue an error message for a bad initializer component.
4249 MSGID identifies the message.
4250 The component name is taken from the spelling stack. */
4252 void
4253 error_init (const char *msgid)
4255 char *ofwhat;
4257 error ("%s", _(msgid));
4258 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4259 if (*ofwhat)
4260 error ("(near initialization for %qs)", ofwhat);
4263 /* Issue a pedantic warning for a bad initializer component.
4264 MSGID identifies the message.
4265 The component name is taken from the spelling stack. */
4267 void
4268 pedwarn_init (const char *msgid)
4270 char *ofwhat;
4272 pedwarn ("%s", _(msgid));
4273 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4274 if (*ofwhat)
4275 pedwarn ("(near initialization for %qs)", ofwhat);
4278 /* Issue a warning for a bad initializer component.
4279 MSGID identifies the message.
4280 The component name is taken from the spelling stack. */
4282 static void
4283 warning_init (const char *msgid)
4285 char *ofwhat;
4287 warning (0, "%s", _(msgid));
4288 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4289 if (*ofwhat)
4290 warning (0, "(near initialization for %qs)", ofwhat);
4293 /* If TYPE is an array type and EXPR is a parenthesized string
4294 constant, warn if pedantic that EXPR is being used to initialize an
4295 object of type TYPE. */
4297 void
4298 maybe_warn_string_init (tree type, struct c_expr expr)
4300 if (pedantic
4301 && TREE_CODE (type) == ARRAY_TYPE
4302 && TREE_CODE (expr.value) == STRING_CST
4303 && expr.original_code != STRING_CST)
4304 pedwarn_init ("array initialized from parenthesized string constant");
4307 /* Digest the parser output INIT as an initializer for type TYPE.
4308 Return a C expression of type TYPE to represent the initial value.
4310 If INIT is a string constant, STRICT_STRING is true if it is
4311 unparenthesized or we should not warn here for it being parenthesized.
4312 For other types of INIT, STRICT_STRING is not used.
4314 REQUIRE_CONSTANT requests an error if non-constant initializers or
4315 elements are seen. */
4317 static tree
4318 digest_init (tree type, tree init, bool strict_string, int require_constant)
4320 enum tree_code code = TREE_CODE (type);
4321 tree inside_init = init;
4323 if (type == error_mark_node
4324 || init == error_mark_node
4325 || TREE_TYPE (init) == error_mark_node)
4326 return error_mark_node;
4328 STRIP_TYPE_NOPS (inside_init);
4330 inside_init = fold (inside_init);
4332 /* Initialization of an array of chars from a string constant
4333 optionally enclosed in braces. */
4335 if (code == ARRAY_TYPE && inside_init
4336 && TREE_CODE (inside_init) == STRING_CST)
4338 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4339 /* Note that an array could be both an array of character type
4340 and an array of wchar_t if wchar_t is signed char or unsigned
4341 char. */
4342 bool char_array = (typ1 == char_type_node
4343 || typ1 == signed_char_type_node
4344 || typ1 == unsigned_char_type_node);
4345 bool wchar_array = !!comptypes (typ1, wchar_type_node);
4346 if (char_array || wchar_array)
4348 struct c_expr expr;
4349 bool char_string;
4350 expr.value = inside_init;
4351 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4352 maybe_warn_string_init (type, expr);
4354 char_string
4355 = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4356 == char_type_node);
4358 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4359 TYPE_MAIN_VARIANT (type)))
4360 return inside_init;
4362 if (!wchar_array && !char_string)
4364 error_init ("char-array initialized from wide string");
4365 return error_mark_node;
4367 if (char_string && !char_array)
4369 error_init ("wchar_t-array initialized from non-wide string");
4370 return error_mark_node;
4373 TREE_TYPE (inside_init) = type;
4374 if (TYPE_DOMAIN (type) != 0
4375 && TYPE_SIZE (type) != 0
4376 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4377 /* Subtract 1 (or sizeof (wchar_t))
4378 because it's ok to ignore the terminating null char
4379 that is counted in the length of the constant. */
4380 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4381 TREE_STRING_LENGTH (inside_init)
4382 - ((TYPE_PRECISION (typ1)
4383 != TYPE_PRECISION (char_type_node))
4384 ? (TYPE_PRECISION (wchar_type_node)
4385 / BITS_PER_UNIT)
4386 : 1)))
4387 pedwarn_init ("initializer-string for array of chars is too long");
4389 return inside_init;
4391 else if (INTEGRAL_TYPE_P (typ1))
4393 error_init ("array of inappropriate type initialized "
4394 "from string constant");
4395 return error_mark_node;
4399 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4400 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4401 below and handle as a constructor. */
4402 if (code == VECTOR_TYPE
4403 && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
4404 && vector_types_convertible_p (TREE_TYPE (inside_init), type)
4405 && TREE_CONSTANT (inside_init))
4407 if (TREE_CODE (inside_init) == VECTOR_CST
4408 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4409 TYPE_MAIN_VARIANT (type)))
4410 return inside_init;
4412 if (TREE_CODE (inside_init) == CONSTRUCTOR)
4414 unsigned HOST_WIDE_INT ix;
4415 tree value;
4416 bool constant_p = true;
4418 /* Iterate through elements and check if all constructor
4419 elements are *_CSTs. */
4420 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (inside_init), ix, value)
4421 if (!CONSTANT_CLASS_P (value))
4423 constant_p = false;
4424 break;
4427 if (constant_p)
4428 return build_vector_from_ctor (type,
4429 CONSTRUCTOR_ELTS (inside_init));
4433 /* Any type can be initialized
4434 from an expression of the same type, optionally with braces. */
4436 if (inside_init && TREE_TYPE (inside_init) != 0
4437 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4438 TYPE_MAIN_VARIANT (type))
4439 || (code == ARRAY_TYPE
4440 && comptypes (TREE_TYPE (inside_init), type))
4441 || (code == VECTOR_TYPE
4442 && comptypes (TREE_TYPE (inside_init), type))
4443 || (code == POINTER_TYPE
4444 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4445 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4446 TREE_TYPE (type)))))
4448 if (code == POINTER_TYPE)
4450 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4452 if (TREE_CODE (inside_init) == STRING_CST
4453 || TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4454 inside_init = array_to_pointer_conversion (inside_init);
4455 else
4457 error_init ("invalid use of non-lvalue array");
4458 return error_mark_node;
4463 if (code == VECTOR_TYPE)
4464 /* Although the types are compatible, we may require a
4465 conversion. */
4466 inside_init = convert (type, inside_init);
4468 if (require_constant && !flag_isoc99
4469 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4471 /* As an extension, allow initializing objects with static storage
4472 duration with compound literals (which are then treated just as
4473 the brace enclosed list they contain). */
4474 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4475 inside_init = DECL_INITIAL (decl);
4478 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4479 && TREE_CODE (inside_init) != CONSTRUCTOR)
4481 error_init ("array initialized from non-constant array expression");
4482 return error_mark_node;
4485 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4486 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4488 /* Compound expressions can only occur here if -pedantic or
4489 -pedantic-errors is specified. In the later case, we always want
4490 an error. In the former case, we simply want a warning. */
4491 if (require_constant && pedantic
4492 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4494 inside_init
4495 = valid_compound_expr_initializer (inside_init,
4496 TREE_TYPE (inside_init));
4497 if (inside_init == error_mark_node)
4498 error_init ("initializer element is not constant");
4499 else
4500 pedwarn_init ("initializer element is not constant");
4501 if (flag_pedantic_errors)
4502 inside_init = error_mark_node;
4504 else if (require_constant
4505 && !initializer_constant_valid_p (inside_init,
4506 TREE_TYPE (inside_init)))
4508 error_init ("initializer element is not constant");
4509 inside_init = error_mark_node;
4512 /* Added to enable additional -Wmissing-format-attribute warnings. */
4513 if (TREE_CODE (TREE_TYPE (inside_init)) == POINTER_TYPE)
4514 inside_init = convert_for_assignment (type, inside_init, ic_init, NULL_TREE,
4515 NULL_TREE, 0);
4516 return inside_init;
4519 /* Handle scalar types, including conversions. */
4521 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4522 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
4523 || code == VECTOR_TYPE)
4525 if (TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE
4526 && (TREE_CODE (init) == STRING_CST
4527 || TREE_CODE (init) == COMPOUND_LITERAL_EXPR))
4528 init = array_to_pointer_conversion (init);
4529 inside_init
4530 = convert_for_assignment (type, init, ic_init,
4531 NULL_TREE, NULL_TREE, 0);
4533 /* Check to see if we have already given an error message. */
4534 if (inside_init == error_mark_node)
4536 else if (require_constant && !TREE_CONSTANT (inside_init))
4538 error_init ("initializer element is not constant");
4539 inside_init = error_mark_node;
4541 else if (require_constant
4542 && !initializer_constant_valid_p (inside_init,
4543 TREE_TYPE (inside_init)))
4545 error_init ("initializer element is not computable at load time");
4546 inside_init = error_mark_node;
4549 return inside_init;
4552 /* Come here only for records and arrays. */
4554 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4556 error_init ("variable-sized object may not be initialized");
4557 return error_mark_node;
4560 error_init ("invalid initializer");
4561 return error_mark_node;
4564 /* Handle initializers that use braces. */
4566 /* Type of object we are accumulating a constructor for.
4567 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4568 static tree constructor_type;
4570 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4571 left to fill. */
4572 static tree constructor_fields;
4574 /* For an ARRAY_TYPE, this is the specified index
4575 at which to store the next element we get. */
4576 static tree constructor_index;
4578 /* For an ARRAY_TYPE, this is the maximum index. */
4579 static tree constructor_max_index;
4581 /* For a RECORD_TYPE, this is the first field not yet written out. */
4582 static tree constructor_unfilled_fields;
4584 /* For an ARRAY_TYPE, this is the index of the first element
4585 not yet written out. */
4586 static tree constructor_unfilled_index;
4588 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4589 This is so we can generate gaps between fields, when appropriate. */
4590 static tree constructor_bit_index;
4592 /* If we are saving up the elements rather than allocating them,
4593 this is the list of elements so far (in reverse order,
4594 most recent first). */
4595 static VEC(constructor_elt,gc) *constructor_elements;
4597 /* 1 if constructor should be incrementally stored into a constructor chain,
4598 0 if all the elements should be kept in AVL tree. */
4599 static int constructor_incremental;
4601 /* 1 if so far this constructor's elements are all compile-time constants. */
4602 static int constructor_constant;
4604 /* 1 if so far this constructor's elements are all valid address constants. */
4605 static int constructor_simple;
4607 /* 1 if this constructor is erroneous so far. */
4608 static int constructor_erroneous;
4610 /* Structure for managing pending initializer elements, organized as an
4611 AVL tree. */
4613 struct init_node
4615 struct init_node *left, *right;
4616 struct init_node *parent;
4617 int balance;
4618 tree purpose;
4619 tree value;
4622 /* Tree of pending elements at this constructor level.
4623 These are elements encountered out of order
4624 which belong at places we haven't reached yet in actually
4625 writing the output.
4626 Will never hold tree nodes across GC runs. */
4627 static struct init_node *constructor_pending_elts;
4629 /* The SPELLING_DEPTH of this constructor. */
4630 static int constructor_depth;
4632 /* DECL node for which an initializer is being read.
4633 0 means we are reading a constructor expression
4634 such as (struct foo) {...}. */
4635 static tree constructor_decl;
4637 /* Nonzero if this is an initializer for a top-level decl. */
4638 static int constructor_top_level;
4640 /* Nonzero if there were any member designators in this initializer. */
4641 static int constructor_designated;
4643 /* Nesting depth of designator list. */
4644 static int designator_depth;
4646 /* Nonzero if there were diagnosed errors in this designator list. */
4647 static int designator_errorneous;
4650 /* This stack has a level for each implicit or explicit level of
4651 structuring in the initializer, including the outermost one. It
4652 saves the values of most of the variables above. */
4654 struct constructor_range_stack;
4656 struct constructor_stack
4658 struct constructor_stack *next;
4659 tree type;
4660 tree fields;
4661 tree index;
4662 tree max_index;
4663 tree unfilled_index;
4664 tree unfilled_fields;
4665 tree bit_index;
4666 VEC(constructor_elt,gc) *elements;
4667 struct init_node *pending_elts;
4668 int offset;
4669 int depth;
4670 /* If value nonzero, this value should replace the entire
4671 constructor at this level. */
4672 struct c_expr replacement_value;
4673 struct constructor_range_stack *range_stack;
4674 char constant;
4675 char simple;
4676 char implicit;
4677 char erroneous;
4678 char outer;
4679 char incremental;
4680 char designated;
4683 static struct constructor_stack *constructor_stack;
4685 /* This stack represents designators from some range designator up to
4686 the last designator in the list. */
4688 struct constructor_range_stack
4690 struct constructor_range_stack *next, *prev;
4691 struct constructor_stack *stack;
4692 tree range_start;
4693 tree index;
4694 tree range_end;
4695 tree fields;
4698 static struct constructor_range_stack *constructor_range_stack;
4700 /* This stack records separate initializers that are nested.
4701 Nested initializers can't happen in ANSI C, but GNU C allows them
4702 in cases like { ... (struct foo) { ... } ... }. */
4704 struct initializer_stack
4706 struct initializer_stack *next;
4707 tree decl;
4708 struct constructor_stack *constructor_stack;
4709 struct constructor_range_stack *constructor_range_stack;
4710 VEC(constructor_elt,gc) *elements;
4711 struct spelling *spelling;
4712 struct spelling *spelling_base;
4713 int spelling_size;
4714 char top_level;
4715 char require_constant_value;
4716 char require_constant_elements;
4719 static struct initializer_stack *initializer_stack;
4721 /* Prepare to parse and output the initializer for variable DECL. */
4723 void
4724 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
4726 const char *locus;
4727 struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
4729 p->decl = constructor_decl;
4730 p->require_constant_value = require_constant_value;
4731 p->require_constant_elements = require_constant_elements;
4732 p->constructor_stack = constructor_stack;
4733 p->constructor_range_stack = constructor_range_stack;
4734 p->elements = constructor_elements;
4735 p->spelling = spelling;
4736 p->spelling_base = spelling_base;
4737 p->spelling_size = spelling_size;
4738 p->top_level = constructor_top_level;
4739 p->next = initializer_stack;
4740 initializer_stack = p;
4742 constructor_decl = decl;
4743 constructor_designated = 0;
4744 constructor_top_level = top_level;
4746 if (decl != 0 && decl != error_mark_node)
4748 require_constant_value = TREE_STATIC (decl);
4749 require_constant_elements
4750 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4751 /* For a scalar, you can always use any value to initialize,
4752 even within braces. */
4753 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4754 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4755 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4756 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4757 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4759 else
4761 require_constant_value = 0;
4762 require_constant_elements = 0;
4763 locus = "(anonymous)";
4766 constructor_stack = 0;
4767 constructor_range_stack = 0;
4769 missing_braces_mentioned = 0;
4771 spelling_base = 0;
4772 spelling_size = 0;
4773 RESTORE_SPELLING_DEPTH (0);
4775 if (locus)
4776 push_string (locus);
4779 void
4780 finish_init (void)
4782 struct initializer_stack *p = initializer_stack;
4784 /* Free the whole constructor stack of this initializer. */
4785 while (constructor_stack)
4787 struct constructor_stack *q = constructor_stack;
4788 constructor_stack = q->next;
4789 free (q);
4792 gcc_assert (!constructor_range_stack);
4794 /* Pop back to the data of the outer initializer (if any). */
4795 free (spelling_base);
4797 constructor_decl = p->decl;
4798 require_constant_value = p->require_constant_value;
4799 require_constant_elements = p->require_constant_elements;
4800 constructor_stack = p->constructor_stack;
4801 constructor_range_stack = p->constructor_range_stack;
4802 constructor_elements = p->elements;
4803 spelling = p->spelling;
4804 spelling_base = p->spelling_base;
4805 spelling_size = p->spelling_size;
4806 constructor_top_level = p->top_level;
4807 initializer_stack = p->next;
4808 free (p);
4811 /* Call here when we see the initializer is surrounded by braces.
4812 This is instead of a call to push_init_level;
4813 it is matched by a call to pop_init_level.
4815 TYPE is the type to initialize, for a constructor expression.
4816 For an initializer for a decl, TYPE is zero. */
4818 void
4819 really_start_incremental_init (tree type)
4821 struct constructor_stack *p = XNEW (struct constructor_stack);
4823 if (type == 0)
4824 type = TREE_TYPE (constructor_decl);
4826 if (targetm.vector_opaque_p (type))
4827 error ("opaque vector types cannot be initialized");
4829 p->type = constructor_type;
4830 p->fields = constructor_fields;
4831 p->index = constructor_index;
4832 p->max_index = constructor_max_index;
4833 p->unfilled_index = constructor_unfilled_index;
4834 p->unfilled_fields = constructor_unfilled_fields;
4835 p->bit_index = constructor_bit_index;
4836 p->elements = constructor_elements;
4837 p->constant = constructor_constant;
4838 p->simple = constructor_simple;
4839 p->erroneous = constructor_erroneous;
4840 p->pending_elts = constructor_pending_elts;
4841 p->depth = constructor_depth;
4842 p->replacement_value.value = 0;
4843 p->replacement_value.original_code = ERROR_MARK;
4844 p->implicit = 0;
4845 p->range_stack = 0;
4846 p->outer = 0;
4847 p->incremental = constructor_incremental;
4848 p->designated = constructor_designated;
4849 p->next = 0;
4850 constructor_stack = p;
4852 constructor_constant = 1;
4853 constructor_simple = 1;
4854 constructor_depth = SPELLING_DEPTH ();
4855 constructor_elements = 0;
4856 constructor_pending_elts = 0;
4857 constructor_type = type;
4858 constructor_incremental = 1;
4859 constructor_designated = 0;
4860 designator_depth = 0;
4861 designator_errorneous = 0;
4863 if (TREE_CODE (constructor_type) == RECORD_TYPE
4864 || TREE_CODE (constructor_type) == UNION_TYPE)
4866 constructor_fields = TYPE_FIELDS (constructor_type);
4867 /* Skip any nameless bit fields at the beginning. */
4868 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4869 && DECL_NAME (constructor_fields) == 0)
4870 constructor_fields = TREE_CHAIN (constructor_fields);
4872 constructor_unfilled_fields = constructor_fields;
4873 constructor_bit_index = bitsize_zero_node;
4875 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4877 if (TYPE_DOMAIN (constructor_type))
4879 constructor_max_index
4880 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4882 /* Detect non-empty initializations of zero-length arrays. */
4883 if (constructor_max_index == NULL_TREE
4884 && TYPE_SIZE (constructor_type))
4885 constructor_max_index = build_int_cst (NULL_TREE, -1);
4887 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4888 to initialize VLAs will cause a proper error; avoid tree
4889 checking errors as well by setting a safe value. */
4890 if (constructor_max_index
4891 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4892 constructor_max_index = build_int_cst (NULL_TREE, -1);
4894 constructor_index
4895 = convert (bitsizetype,
4896 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4898 else
4900 constructor_index = bitsize_zero_node;
4901 constructor_max_index = NULL_TREE;
4904 constructor_unfilled_index = constructor_index;
4906 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4908 /* Vectors are like simple fixed-size arrays. */
4909 constructor_max_index =
4910 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4911 constructor_index = convert (bitsizetype, bitsize_zero_node);
4912 constructor_unfilled_index = constructor_index;
4914 else
4916 /* Handle the case of int x = {5}; */
4917 constructor_fields = constructor_type;
4918 constructor_unfilled_fields = constructor_type;
4922 /* Push down into a subobject, for initialization.
4923 If this is for an explicit set of braces, IMPLICIT is 0.
4924 If it is because the next element belongs at a lower level,
4925 IMPLICIT is 1 (or 2 if the push is because of designator list). */
4927 void
4928 push_init_level (int implicit)
4930 struct constructor_stack *p;
4931 tree value = NULL_TREE;
4933 /* If we've exhausted any levels that didn't have braces,
4934 pop them now. If implicit == 1, this will have been done in
4935 process_init_element; do not repeat it here because in the case
4936 of excess initializers for an empty aggregate this leads to an
4937 infinite cycle of popping a level and immediately recreating
4938 it. */
4939 if (implicit != 1)
4941 while (constructor_stack->implicit)
4943 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4944 || TREE_CODE (constructor_type) == UNION_TYPE)
4945 && constructor_fields == 0)
4946 process_init_element (pop_init_level (1));
4947 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4948 && constructor_max_index
4949 && tree_int_cst_lt (constructor_max_index,
4950 constructor_index))
4951 process_init_element (pop_init_level (1));
4952 else
4953 break;
4957 /* Unless this is an explicit brace, we need to preserve previous
4958 content if any. */
4959 if (implicit)
4961 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4962 || TREE_CODE (constructor_type) == UNION_TYPE)
4963 && constructor_fields)
4964 value = find_init_member (constructor_fields);
4965 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4966 value = find_init_member (constructor_index);
4969 p = XNEW (struct constructor_stack);
4970 p->type = constructor_type;
4971 p->fields = constructor_fields;
4972 p->index = constructor_index;
4973 p->max_index = constructor_max_index;
4974 p->unfilled_index = constructor_unfilled_index;
4975 p->unfilled_fields = constructor_unfilled_fields;
4976 p->bit_index = constructor_bit_index;
4977 p->elements = constructor_elements;
4978 p->constant = constructor_constant;
4979 p->simple = constructor_simple;
4980 p->erroneous = constructor_erroneous;
4981 p->pending_elts = constructor_pending_elts;
4982 p->depth = constructor_depth;
4983 p->replacement_value.value = 0;
4984 p->replacement_value.original_code = ERROR_MARK;
4985 p->implicit = implicit;
4986 p->outer = 0;
4987 p->incremental = constructor_incremental;
4988 p->designated = constructor_designated;
4989 p->next = constructor_stack;
4990 p->range_stack = 0;
4991 constructor_stack = p;
4993 constructor_constant = 1;
4994 constructor_simple = 1;
4995 constructor_depth = SPELLING_DEPTH ();
4996 constructor_elements = 0;
4997 constructor_incremental = 1;
4998 constructor_designated = 0;
4999 constructor_pending_elts = 0;
5000 if (!implicit)
5002 p->range_stack = constructor_range_stack;
5003 constructor_range_stack = 0;
5004 designator_depth = 0;
5005 designator_errorneous = 0;
5008 /* Don't die if an entire brace-pair level is superfluous
5009 in the containing level. */
5010 if (constructor_type == 0)
5012 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5013 || TREE_CODE (constructor_type) == UNION_TYPE)
5015 /* Don't die if there are extra init elts at the end. */
5016 if (constructor_fields == 0)
5017 constructor_type = 0;
5018 else
5020 constructor_type = TREE_TYPE (constructor_fields);
5021 push_member_name (constructor_fields);
5022 constructor_depth++;
5025 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5027 constructor_type = TREE_TYPE (constructor_type);
5028 push_array_bounds (tree_low_cst (constructor_index, 0));
5029 constructor_depth++;
5032 if (constructor_type == 0)
5034 error_init ("extra brace group at end of initializer");
5035 constructor_fields = 0;
5036 constructor_unfilled_fields = 0;
5037 return;
5040 if (value && TREE_CODE (value) == CONSTRUCTOR)
5042 constructor_constant = TREE_CONSTANT (value);
5043 constructor_simple = TREE_STATIC (value);
5044 constructor_elements = CONSTRUCTOR_ELTS (value);
5045 if (!VEC_empty (constructor_elt, constructor_elements)
5046 && (TREE_CODE (constructor_type) == RECORD_TYPE
5047 || TREE_CODE (constructor_type) == ARRAY_TYPE))
5048 set_nonincremental_init ();
5051 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
5053 missing_braces_mentioned = 1;
5054 warning_init ("missing braces around initializer");
5057 if (TREE_CODE (constructor_type) == RECORD_TYPE
5058 || TREE_CODE (constructor_type) == UNION_TYPE)
5060 constructor_fields = TYPE_FIELDS (constructor_type);
5061 /* Skip any nameless bit fields at the beginning. */
5062 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5063 && DECL_NAME (constructor_fields) == 0)
5064 constructor_fields = TREE_CHAIN (constructor_fields);
5066 constructor_unfilled_fields = constructor_fields;
5067 constructor_bit_index = bitsize_zero_node;
5069 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5071 /* Vectors are like simple fixed-size arrays. */
5072 constructor_max_index =
5073 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
5074 constructor_index = convert (bitsizetype, integer_zero_node);
5075 constructor_unfilled_index = constructor_index;
5077 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5079 if (TYPE_DOMAIN (constructor_type))
5081 constructor_max_index
5082 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5084 /* Detect non-empty initializations of zero-length arrays. */
5085 if (constructor_max_index == NULL_TREE
5086 && TYPE_SIZE (constructor_type))
5087 constructor_max_index = build_int_cst (NULL_TREE, -1);
5089 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5090 to initialize VLAs will cause a proper error; avoid tree
5091 checking errors as well by setting a safe value. */
5092 if (constructor_max_index
5093 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5094 constructor_max_index = build_int_cst (NULL_TREE, -1);
5096 constructor_index
5097 = convert (bitsizetype,
5098 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5100 else
5101 constructor_index = bitsize_zero_node;
5103 constructor_unfilled_index = constructor_index;
5104 if (value && TREE_CODE (value) == STRING_CST)
5106 /* We need to split the char/wchar array into individual
5107 characters, so that we don't have to special case it
5108 everywhere. */
5109 set_nonincremental_init_from_string (value);
5112 else
5114 if (constructor_type != error_mark_node)
5115 warning_init ("braces around scalar initializer");
5116 constructor_fields = constructor_type;
5117 constructor_unfilled_fields = constructor_type;
5121 /* At the end of an implicit or explicit brace level,
5122 finish up that level of constructor. If a single expression
5123 with redundant braces initialized that level, return the
5124 c_expr structure for that expression. Otherwise, the original_code
5125 element is set to ERROR_MARK.
5126 If we were outputting the elements as they are read, return 0 as the value
5127 from inner levels (process_init_element ignores that),
5128 but return error_mark_node as the value from the outermost level
5129 (that's what we want to put in DECL_INITIAL).
5130 Otherwise, return a CONSTRUCTOR expression as the value. */
5132 struct c_expr
5133 pop_init_level (int implicit)
5135 struct constructor_stack *p;
5136 struct c_expr ret;
5137 ret.value = 0;
5138 ret.original_code = ERROR_MARK;
5140 if (implicit == 0)
5142 /* When we come to an explicit close brace,
5143 pop any inner levels that didn't have explicit braces. */
5144 while (constructor_stack->implicit)
5145 process_init_element (pop_init_level (1));
5147 gcc_assert (!constructor_range_stack);
5150 /* Now output all pending elements. */
5151 constructor_incremental = 1;
5152 output_pending_init_elements (1);
5154 p = constructor_stack;
5156 /* Error for initializing a flexible array member, or a zero-length
5157 array member in an inappropriate context. */
5158 if (constructor_type && constructor_fields
5159 && TREE_CODE (constructor_type) == ARRAY_TYPE
5160 && TYPE_DOMAIN (constructor_type)
5161 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5163 /* Silently discard empty initializations. The parser will
5164 already have pedwarned for empty brackets. */
5165 if (integer_zerop (constructor_unfilled_index))
5166 constructor_type = NULL_TREE;
5167 else
5169 gcc_assert (!TYPE_SIZE (constructor_type));
5171 if (constructor_depth > 2)
5172 error_init ("initialization of flexible array member in a nested context");
5173 else if (pedantic)
5174 pedwarn_init ("initialization of a flexible array member");
5176 /* We have already issued an error message for the existence
5177 of a flexible array member not at the end of the structure.
5178 Discard the initializer so that we do not die later. */
5179 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
5180 constructor_type = NULL_TREE;
5184 /* Warn when some struct elements are implicitly initialized to zero. */
5185 if (warn_missing_field_initializers
5186 && constructor_type
5187 && TREE_CODE (constructor_type) == RECORD_TYPE
5188 && constructor_unfilled_fields)
5190 /* Do not warn for flexible array members or zero-length arrays. */
5191 while (constructor_unfilled_fields
5192 && (!DECL_SIZE (constructor_unfilled_fields)
5193 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
5194 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5196 /* Do not warn if this level of the initializer uses member
5197 designators; it is likely to be deliberate. */
5198 if (constructor_unfilled_fields && !constructor_designated)
5200 push_member_name (constructor_unfilled_fields);
5201 warning_init ("missing initializer");
5202 RESTORE_SPELLING_DEPTH (constructor_depth);
5206 /* Pad out the end of the structure. */
5207 if (p->replacement_value.value)
5208 /* If this closes a superfluous brace pair,
5209 just pass out the element between them. */
5210 ret = p->replacement_value;
5211 else if (constructor_type == 0)
5213 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5214 && TREE_CODE (constructor_type) != UNION_TYPE
5215 && TREE_CODE (constructor_type) != ARRAY_TYPE
5216 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5218 /* A nonincremental scalar initializer--just return
5219 the element, after verifying there is just one. */
5220 if (VEC_empty (constructor_elt,constructor_elements))
5222 if (!constructor_erroneous)
5223 error_init ("empty scalar initializer");
5224 ret.value = error_mark_node;
5226 else if (VEC_length (constructor_elt,constructor_elements) != 1)
5228 error_init ("extra elements in scalar initializer");
5229 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
5231 else
5232 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
5234 else
5236 if (constructor_erroneous)
5237 ret.value = error_mark_node;
5238 else
5240 ret.value = build_constructor (constructor_type,
5241 constructor_elements);
5242 if (constructor_constant)
5243 TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
5244 if (constructor_constant && constructor_simple)
5245 TREE_STATIC (ret.value) = 1;
5249 constructor_type = p->type;
5250 constructor_fields = p->fields;
5251 constructor_index = p->index;
5252 constructor_max_index = p->max_index;
5253 constructor_unfilled_index = p->unfilled_index;
5254 constructor_unfilled_fields = p->unfilled_fields;
5255 constructor_bit_index = p->bit_index;
5256 constructor_elements = p->elements;
5257 constructor_constant = p->constant;
5258 constructor_simple = p->simple;
5259 constructor_erroneous = p->erroneous;
5260 constructor_incremental = p->incremental;
5261 constructor_designated = p->designated;
5262 constructor_pending_elts = p->pending_elts;
5263 constructor_depth = p->depth;
5264 if (!p->implicit)
5265 constructor_range_stack = p->range_stack;
5266 RESTORE_SPELLING_DEPTH (constructor_depth);
5268 constructor_stack = p->next;
5269 free (p);
5271 if (ret.value == 0)
5273 if (constructor_stack == 0)
5275 ret.value = error_mark_node;
5276 return ret;
5278 return ret;
5280 return ret;
5283 /* Common handling for both array range and field name designators.
5284 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5286 static int
5287 set_designator (int array)
5289 tree subtype;
5290 enum tree_code subcode;
5292 /* Don't die if an entire brace-pair level is superfluous
5293 in the containing level. */
5294 if (constructor_type == 0)
5295 return 1;
5297 /* If there were errors in this designator list already, bail out
5298 silently. */
5299 if (designator_errorneous)
5300 return 1;
5302 if (!designator_depth)
5304 gcc_assert (!constructor_range_stack);
5306 /* Designator list starts at the level of closest explicit
5307 braces. */
5308 while (constructor_stack->implicit)
5309 process_init_element (pop_init_level (1));
5310 constructor_designated = 1;
5311 return 0;
5314 switch (TREE_CODE (constructor_type))
5316 case RECORD_TYPE:
5317 case UNION_TYPE:
5318 subtype = TREE_TYPE (constructor_fields);
5319 if (subtype != error_mark_node)
5320 subtype = TYPE_MAIN_VARIANT (subtype);
5321 break;
5322 case ARRAY_TYPE:
5323 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5324 break;
5325 default:
5326 gcc_unreachable ();
5329 subcode = TREE_CODE (subtype);
5330 if (array && subcode != ARRAY_TYPE)
5332 error_init ("array index in non-array initializer");
5333 return 1;
5335 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5337 error_init ("field name not in record or union initializer");
5338 return 1;
5341 constructor_designated = 1;
5342 push_init_level (2);
5343 return 0;
5346 /* If there are range designators in designator list, push a new designator
5347 to constructor_range_stack. RANGE_END is end of such stack range or
5348 NULL_TREE if there is no range designator at this level. */
5350 static void
5351 push_range_stack (tree range_end)
5353 struct constructor_range_stack *p;
5355 p = GGC_NEW (struct constructor_range_stack);
5356 p->prev = constructor_range_stack;
5357 p->next = 0;
5358 p->fields = constructor_fields;
5359 p->range_start = constructor_index;
5360 p->index = constructor_index;
5361 p->stack = constructor_stack;
5362 p->range_end = range_end;
5363 if (constructor_range_stack)
5364 constructor_range_stack->next = p;
5365 constructor_range_stack = p;
5368 /* Within an array initializer, specify the next index to be initialized.
5369 FIRST is that index. If LAST is nonzero, then initialize a range
5370 of indices, running from FIRST through LAST. */
5372 void
5373 set_init_index (tree first, tree last)
5375 if (set_designator (1))
5376 return;
5378 designator_errorneous = 1;
5380 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5381 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5383 error_init ("array index in initializer not of integer type");
5384 return;
5387 if (TREE_CODE (first) != INTEGER_CST)
5388 error_init ("nonconstant array index in initializer");
5389 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5390 error_init ("nonconstant array index in initializer");
5391 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5392 error_init ("array index in non-array initializer");
5393 else if (tree_int_cst_sgn (first) == -1)
5394 error_init ("array index in initializer exceeds array bounds");
5395 else if (constructor_max_index
5396 && tree_int_cst_lt (constructor_max_index, first))
5397 error_init ("array index in initializer exceeds array bounds");
5398 else
5400 constructor_index = convert (bitsizetype, first);
5402 if (last)
5404 if (tree_int_cst_equal (first, last))
5405 last = 0;
5406 else if (tree_int_cst_lt (last, first))
5408 error_init ("empty index range in initializer");
5409 last = 0;
5411 else
5413 last = convert (bitsizetype, last);
5414 if (constructor_max_index != 0
5415 && tree_int_cst_lt (constructor_max_index, last))
5417 error_init ("array index range in initializer exceeds array bounds");
5418 last = 0;
5423 designator_depth++;
5424 designator_errorneous = 0;
5425 if (constructor_range_stack || last)
5426 push_range_stack (last);
5430 /* Within a struct initializer, specify the next field to be initialized. */
5432 void
5433 set_init_label (tree fieldname)
5435 tree tail;
5437 if (set_designator (0))
5438 return;
5440 designator_errorneous = 1;
5442 if (TREE_CODE (constructor_type) != RECORD_TYPE
5443 && TREE_CODE (constructor_type) != UNION_TYPE)
5445 error_init ("field name not in record or union initializer");
5446 return;
5449 for (tail = TYPE_FIELDS (constructor_type); tail;
5450 tail = TREE_CHAIN (tail))
5452 if (DECL_NAME (tail) == fieldname)
5453 break;
5456 if (tail == 0)
5457 error ("unknown field %qE specified in initializer", fieldname);
5458 else
5460 constructor_fields = tail;
5461 designator_depth++;
5462 designator_errorneous = 0;
5463 if (constructor_range_stack)
5464 push_range_stack (NULL_TREE);
5468 /* Add a new initializer to the tree of pending initializers. PURPOSE
5469 identifies the initializer, either array index or field in a structure.
5470 VALUE is the value of that index or field. */
5472 static void
5473 add_pending_init (tree purpose, tree value)
5475 struct init_node *p, **q, *r;
5477 q = &constructor_pending_elts;
5478 p = 0;
5480 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5482 while (*q != 0)
5484 p = *q;
5485 if (tree_int_cst_lt (purpose, p->purpose))
5486 q = &p->left;
5487 else if (tree_int_cst_lt (p->purpose, purpose))
5488 q = &p->right;
5489 else
5491 if (TREE_SIDE_EFFECTS (p->value))
5492 warning_init ("initialized field with side-effects overwritten");
5493 p->value = value;
5494 return;
5498 else
5500 tree bitpos;
5502 bitpos = bit_position (purpose);
5503 while (*q != NULL)
5505 p = *q;
5506 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5507 q = &p->left;
5508 else if (p->purpose != purpose)
5509 q = &p->right;
5510 else
5512 if (TREE_SIDE_EFFECTS (p->value))
5513 warning_init ("initialized field with side-effects overwritten");
5514 p->value = value;
5515 return;
5520 r = GGC_NEW (struct init_node);
5521 r->purpose = purpose;
5522 r->value = value;
5524 *q = r;
5525 r->parent = p;
5526 r->left = 0;
5527 r->right = 0;
5528 r->balance = 0;
5530 while (p)
5532 struct init_node *s;
5534 if (r == p->left)
5536 if (p->balance == 0)
5537 p->balance = -1;
5538 else if (p->balance < 0)
5540 if (r->balance < 0)
5542 /* L rotation. */
5543 p->left = r->right;
5544 if (p->left)
5545 p->left->parent = p;
5546 r->right = p;
5548 p->balance = 0;
5549 r->balance = 0;
5551 s = p->parent;
5552 p->parent = r;
5553 r->parent = s;
5554 if (s)
5556 if (s->left == p)
5557 s->left = r;
5558 else
5559 s->right = r;
5561 else
5562 constructor_pending_elts = r;
5564 else
5566 /* LR rotation. */
5567 struct init_node *t = r->right;
5569 r->right = t->left;
5570 if (r->right)
5571 r->right->parent = r;
5572 t->left = r;
5574 p->left = t->right;
5575 if (p->left)
5576 p->left->parent = p;
5577 t->right = p;
5579 p->balance = t->balance < 0;
5580 r->balance = -(t->balance > 0);
5581 t->balance = 0;
5583 s = p->parent;
5584 p->parent = t;
5585 r->parent = t;
5586 t->parent = s;
5587 if (s)
5589 if (s->left == p)
5590 s->left = t;
5591 else
5592 s->right = t;
5594 else
5595 constructor_pending_elts = t;
5597 break;
5599 else
5601 /* p->balance == +1; growth of left side balances the node. */
5602 p->balance = 0;
5603 break;
5606 else /* r == p->right */
5608 if (p->balance == 0)
5609 /* Growth propagation from right side. */
5610 p->balance++;
5611 else if (p->balance > 0)
5613 if (r->balance > 0)
5615 /* R rotation. */
5616 p->right = r->left;
5617 if (p->right)
5618 p->right->parent = p;
5619 r->left = p;
5621 p->balance = 0;
5622 r->balance = 0;
5624 s = p->parent;
5625 p->parent = r;
5626 r->parent = s;
5627 if (s)
5629 if (s->left == p)
5630 s->left = r;
5631 else
5632 s->right = r;
5634 else
5635 constructor_pending_elts = r;
5637 else /* r->balance == -1 */
5639 /* RL rotation */
5640 struct init_node *t = r->left;
5642 r->left = t->right;
5643 if (r->left)
5644 r->left->parent = r;
5645 t->right = r;
5647 p->right = t->left;
5648 if (p->right)
5649 p->right->parent = p;
5650 t->left = p;
5652 r->balance = (t->balance < 0);
5653 p->balance = -(t->balance > 0);
5654 t->balance = 0;
5656 s = p->parent;
5657 p->parent = t;
5658 r->parent = t;
5659 t->parent = s;
5660 if (s)
5662 if (s->left == p)
5663 s->left = t;
5664 else
5665 s->right = t;
5667 else
5668 constructor_pending_elts = t;
5670 break;
5672 else
5674 /* p->balance == -1; growth of right side balances the node. */
5675 p->balance = 0;
5676 break;
5680 r = p;
5681 p = p->parent;
5685 /* Build AVL tree from a sorted chain. */
5687 static void
5688 set_nonincremental_init (void)
5690 unsigned HOST_WIDE_INT ix;
5691 tree index, value;
5693 if (TREE_CODE (constructor_type) != RECORD_TYPE
5694 && TREE_CODE (constructor_type) != ARRAY_TYPE)
5695 return;
5697 FOR_EACH_CONSTRUCTOR_ELT (constructor_elements, ix, index, value)
5698 add_pending_init (index, value);
5699 constructor_elements = 0;
5700 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5702 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5703 /* Skip any nameless bit fields at the beginning. */
5704 while (constructor_unfilled_fields != 0
5705 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5706 && DECL_NAME (constructor_unfilled_fields) == 0)
5707 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5710 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5712 if (TYPE_DOMAIN (constructor_type))
5713 constructor_unfilled_index
5714 = convert (bitsizetype,
5715 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5716 else
5717 constructor_unfilled_index = bitsize_zero_node;
5719 constructor_incremental = 0;
5722 /* Build AVL tree from a string constant. */
5724 static void
5725 set_nonincremental_init_from_string (tree str)
5727 tree value, purpose, type;
5728 HOST_WIDE_INT val[2];
5729 const char *p, *end;
5730 int byte, wchar_bytes, charwidth, bitpos;
5732 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
5734 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5735 == TYPE_PRECISION (char_type_node))
5736 wchar_bytes = 1;
5737 else
5739 gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5740 == TYPE_PRECISION (wchar_type_node));
5741 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5743 charwidth = TYPE_PRECISION (char_type_node);
5744 type = TREE_TYPE (constructor_type);
5745 p = TREE_STRING_POINTER (str);
5746 end = p + TREE_STRING_LENGTH (str);
5748 for (purpose = bitsize_zero_node;
5749 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5750 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
5752 if (wchar_bytes == 1)
5754 val[1] = (unsigned char) *p++;
5755 val[0] = 0;
5757 else
5759 val[0] = 0;
5760 val[1] = 0;
5761 for (byte = 0; byte < wchar_bytes; byte++)
5763 if (BYTES_BIG_ENDIAN)
5764 bitpos = (wchar_bytes - byte - 1) * charwidth;
5765 else
5766 bitpos = byte * charwidth;
5767 val[bitpos < HOST_BITS_PER_WIDE_INT]
5768 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5769 << (bitpos % HOST_BITS_PER_WIDE_INT);
5773 if (!TYPE_UNSIGNED (type))
5775 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5776 if (bitpos < HOST_BITS_PER_WIDE_INT)
5778 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5780 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5781 val[0] = -1;
5784 else if (bitpos == HOST_BITS_PER_WIDE_INT)
5786 if (val[1] < 0)
5787 val[0] = -1;
5789 else if (val[0] & (((HOST_WIDE_INT) 1)
5790 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5791 val[0] |= ((HOST_WIDE_INT) -1)
5792 << (bitpos - HOST_BITS_PER_WIDE_INT);
5795 value = build_int_cst_wide (type, val[1], val[0]);
5796 add_pending_init (purpose, value);
5799 constructor_incremental = 0;
5802 /* Return value of FIELD in pending initializer or zero if the field was
5803 not initialized yet. */
5805 static tree
5806 find_init_member (tree field)
5808 struct init_node *p;
5810 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5812 if (constructor_incremental
5813 && tree_int_cst_lt (field, constructor_unfilled_index))
5814 set_nonincremental_init ();
5816 p = constructor_pending_elts;
5817 while (p)
5819 if (tree_int_cst_lt (field, p->purpose))
5820 p = p->left;
5821 else if (tree_int_cst_lt (p->purpose, field))
5822 p = p->right;
5823 else
5824 return p->value;
5827 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5829 tree bitpos = bit_position (field);
5831 if (constructor_incremental
5832 && (!constructor_unfilled_fields
5833 || tree_int_cst_lt (bitpos,
5834 bit_position (constructor_unfilled_fields))))
5835 set_nonincremental_init ();
5837 p = constructor_pending_elts;
5838 while (p)
5840 if (field == p->purpose)
5841 return p->value;
5842 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5843 p = p->left;
5844 else
5845 p = p->right;
5848 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5850 if (!VEC_empty (constructor_elt, constructor_elements)
5851 && (VEC_last (constructor_elt, constructor_elements)->index
5852 == field))
5853 return VEC_last (constructor_elt, constructor_elements)->value;
5855 return 0;
5858 /* "Output" the next constructor element.
5859 At top level, really output it to assembler code now.
5860 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5861 TYPE is the data type that the containing data type wants here.
5862 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5863 If VALUE is a string constant, STRICT_STRING is true if it is
5864 unparenthesized or we should not warn here for it being parenthesized.
5865 For other types of VALUE, STRICT_STRING is not used.
5867 PENDING if non-nil means output pending elements that belong
5868 right after this element. (PENDING is normally 1;
5869 it is 0 while outputting pending elements, to avoid recursion.) */
5871 static void
5872 output_init_element (tree value, bool strict_string, tree type, tree field,
5873 int pending)
5875 constructor_elt *celt;
5877 if (type == error_mark_node || value == error_mark_node)
5879 constructor_erroneous = 1;
5880 return;
5882 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5883 && (TREE_CODE (value) == STRING_CST
5884 || TREE_CODE (value) == COMPOUND_LITERAL_EXPR)
5885 && !(TREE_CODE (value) == STRING_CST
5886 && TREE_CODE (type) == ARRAY_TYPE
5887 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
5888 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5889 TYPE_MAIN_VARIANT (type)))
5890 value = array_to_pointer_conversion (value);
5892 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5893 && require_constant_value && !flag_isoc99 && pending)
5895 /* As an extension, allow initializing objects with static storage
5896 duration with compound literals (which are then treated just as
5897 the brace enclosed list they contain). */
5898 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5899 value = DECL_INITIAL (decl);
5902 if (value == error_mark_node)
5903 constructor_erroneous = 1;
5904 else if (!TREE_CONSTANT (value))
5905 constructor_constant = 0;
5906 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
5907 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5908 || TREE_CODE (constructor_type) == UNION_TYPE)
5909 && DECL_C_BIT_FIELD (field)
5910 && TREE_CODE (value) != INTEGER_CST))
5911 constructor_simple = 0;
5913 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
5915 if (require_constant_value)
5917 error_init ("initializer element is not constant");
5918 value = error_mark_node;
5920 else if (require_constant_elements)
5921 pedwarn ("initializer element is not computable at load time");
5924 /* If this field is empty (and not at the end of structure),
5925 don't do anything other than checking the initializer. */
5926 if (field
5927 && (TREE_TYPE (field) == error_mark_node
5928 || (COMPLETE_TYPE_P (TREE_TYPE (field))
5929 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5930 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5931 || TREE_CHAIN (field)))))
5932 return;
5934 value = digest_init (type, value, strict_string, require_constant_value);
5935 if (value == error_mark_node)
5937 constructor_erroneous = 1;
5938 return;
5941 /* If this element doesn't come next in sequence,
5942 put it on constructor_pending_elts. */
5943 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5944 && (!constructor_incremental
5945 || !tree_int_cst_equal (field, constructor_unfilled_index)))
5947 if (constructor_incremental
5948 && tree_int_cst_lt (field, constructor_unfilled_index))
5949 set_nonincremental_init ();
5951 add_pending_init (field, value);
5952 return;
5954 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5955 && (!constructor_incremental
5956 || field != constructor_unfilled_fields))
5958 /* We do this for records but not for unions. In a union,
5959 no matter which field is specified, it can be initialized
5960 right away since it starts at the beginning of the union. */
5961 if (constructor_incremental)
5963 if (!constructor_unfilled_fields)
5964 set_nonincremental_init ();
5965 else
5967 tree bitpos, unfillpos;
5969 bitpos = bit_position (field);
5970 unfillpos = bit_position (constructor_unfilled_fields);
5972 if (tree_int_cst_lt (bitpos, unfillpos))
5973 set_nonincremental_init ();
5977 add_pending_init (field, value);
5978 return;
5980 else if (TREE_CODE (constructor_type) == UNION_TYPE
5981 && !VEC_empty (constructor_elt, constructor_elements))
5983 if (TREE_SIDE_EFFECTS (VEC_last (constructor_elt,
5984 constructor_elements)->value))
5985 warning_init ("initialized field with side-effects overwritten");
5987 /* We can have just one union field set. */
5988 constructor_elements = 0;
5991 /* Otherwise, output this element either to
5992 constructor_elements or to the assembler file. */
5994 celt = VEC_safe_push (constructor_elt, gc, constructor_elements, NULL);
5995 celt->index = field;
5996 celt->value = value;
5998 /* Advance the variable that indicates sequential elements output. */
5999 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6000 constructor_unfilled_index
6001 = size_binop (PLUS_EXPR, constructor_unfilled_index,
6002 bitsize_one_node);
6003 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6005 constructor_unfilled_fields
6006 = TREE_CHAIN (constructor_unfilled_fields);
6008 /* Skip any nameless bit fields. */
6009 while (constructor_unfilled_fields != 0
6010 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6011 && DECL_NAME (constructor_unfilled_fields) == 0)
6012 constructor_unfilled_fields =
6013 TREE_CHAIN (constructor_unfilled_fields);
6015 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6016 constructor_unfilled_fields = 0;
6018 /* Now output any pending elements which have become next. */
6019 if (pending)
6020 output_pending_init_elements (0);
6023 /* Output any pending elements which have become next.
6024 As we output elements, constructor_unfilled_{fields,index}
6025 advances, which may cause other elements to become next;
6026 if so, they too are output.
6028 If ALL is 0, we return when there are
6029 no more pending elements to output now.
6031 If ALL is 1, we output space as necessary so that
6032 we can output all the pending elements. */
6034 static void
6035 output_pending_init_elements (int all)
6037 struct init_node *elt = constructor_pending_elts;
6038 tree next;
6040 retry:
6042 /* Look through the whole pending tree.
6043 If we find an element that should be output now,
6044 output it. Otherwise, set NEXT to the element
6045 that comes first among those still pending. */
6047 next = 0;
6048 while (elt)
6050 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6052 if (tree_int_cst_equal (elt->purpose,
6053 constructor_unfilled_index))
6054 output_init_element (elt->value, true,
6055 TREE_TYPE (constructor_type),
6056 constructor_unfilled_index, 0);
6057 else if (tree_int_cst_lt (constructor_unfilled_index,
6058 elt->purpose))
6060 /* Advance to the next smaller node. */
6061 if (elt->left)
6062 elt = elt->left;
6063 else
6065 /* We have reached the smallest node bigger than the
6066 current unfilled index. Fill the space first. */
6067 next = elt->purpose;
6068 break;
6071 else
6073 /* Advance to the next bigger node. */
6074 if (elt->right)
6075 elt = elt->right;
6076 else
6078 /* We have reached the biggest node in a subtree. Find
6079 the parent of it, which is the next bigger node. */
6080 while (elt->parent && elt->parent->right == elt)
6081 elt = elt->parent;
6082 elt = elt->parent;
6083 if (elt && tree_int_cst_lt (constructor_unfilled_index,
6084 elt->purpose))
6086 next = elt->purpose;
6087 break;
6092 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6093 || TREE_CODE (constructor_type) == UNION_TYPE)
6095 tree ctor_unfilled_bitpos, elt_bitpos;
6097 /* If the current record is complete we are done. */
6098 if (constructor_unfilled_fields == 0)
6099 break;
6101 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
6102 elt_bitpos = bit_position (elt->purpose);
6103 /* We can't compare fields here because there might be empty
6104 fields in between. */
6105 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
6107 constructor_unfilled_fields = elt->purpose;
6108 output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
6109 elt->purpose, 0);
6111 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
6113 /* Advance to the next smaller node. */
6114 if (elt->left)
6115 elt = elt->left;
6116 else
6118 /* We have reached the smallest node bigger than the
6119 current unfilled field. Fill the space first. */
6120 next = elt->purpose;
6121 break;
6124 else
6126 /* Advance to the next bigger node. */
6127 if (elt->right)
6128 elt = elt->right;
6129 else
6131 /* We have reached the biggest node in a subtree. Find
6132 the parent of it, which is the next bigger node. */
6133 while (elt->parent && elt->parent->right == elt)
6134 elt = elt->parent;
6135 elt = elt->parent;
6136 if (elt
6137 && (tree_int_cst_lt (ctor_unfilled_bitpos,
6138 bit_position (elt->purpose))))
6140 next = elt->purpose;
6141 break;
6148 /* Ordinarily return, but not if we want to output all
6149 and there are elements left. */
6150 if (!(all && next != 0))
6151 return;
6153 /* If it's not incremental, just skip over the gap, so that after
6154 jumping to retry we will output the next successive element. */
6155 if (TREE_CODE (constructor_type) == RECORD_TYPE
6156 || TREE_CODE (constructor_type) == UNION_TYPE)
6157 constructor_unfilled_fields = next;
6158 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6159 constructor_unfilled_index = next;
6161 /* ELT now points to the node in the pending tree with the next
6162 initializer to output. */
6163 goto retry;
6166 /* Add one non-braced element to the current constructor level.
6167 This adjusts the current position within the constructor's type.
6168 This may also start or terminate implicit levels
6169 to handle a partly-braced initializer.
6171 Once this has found the correct level for the new element,
6172 it calls output_init_element. */
6174 void
6175 process_init_element (struct c_expr value)
6177 tree orig_value = value.value;
6178 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
6179 bool strict_string = value.original_code == STRING_CST;
6181 designator_depth = 0;
6182 designator_errorneous = 0;
6184 /* Handle superfluous braces around string cst as in
6185 char x[] = {"foo"}; */
6186 if (string_flag
6187 && constructor_type
6188 && TREE_CODE (constructor_type) == ARRAY_TYPE
6189 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
6190 && integer_zerop (constructor_unfilled_index))
6192 if (constructor_stack->replacement_value.value)
6193 error_init ("excess elements in char array initializer");
6194 constructor_stack->replacement_value = value;
6195 return;
6198 if (constructor_stack->replacement_value.value != 0)
6200 error_init ("excess elements in struct initializer");
6201 return;
6204 /* Ignore elements of a brace group if it is entirely superfluous
6205 and has already been diagnosed. */
6206 if (constructor_type == 0)
6207 return;
6209 /* If we've exhausted any levels that didn't have braces,
6210 pop them now. */
6211 while (constructor_stack->implicit)
6213 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6214 || TREE_CODE (constructor_type) == UNION_TYPE)
6215 && constructor_fields == 0)
6216 process_init_element (pop_init_level (1));
6217 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6218 && (constructor_max_index == 0
6219 || tree_int_cst_lt (constructor_max_index,
6220 constructor_index)))
6221 process_init_element (pop_init_level (1));
6222 else
6223 break;
6226 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6227 if (constructor_range_stack)
6229 /* If value is a compound literal and we'll be just using its
6230 content, don't put it into a SAVE_EXPR. */
6231 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
6232 || !require_constant_value
6233 || flag_isoc99)
6234 value.value = save_expr (value.value);
6237 while (1)
6239 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6241 tree fieldtype;
6242 enum tree_code fieldcode;
6244 if (constructor_fields == 0)
6246 pedwarn_init ("excess elements in struct initializer");
6247 break;
6250 fieldtype = TREE_TYPE (constructor_fields);
6251 if (fieldtype != error_mark_node)
6252 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6253 fieldcode = TREE_CODE (fieldtype);
6255 /* Error for non-static initialization of a flexible array member. */
6256 if (fieldcode == ARRAY_TYPE
6257 && !require_constant_value
6258 && TYPE_SIZE (fieldtype) == NULL_TREE
6259 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6261 error_init ("non-static initialization of a flexible array member");
6262 break;
6265 /* Accept a string constant to initialize a subarray. */
6266 if (value.value != 0
6267 && fieldcode == ARRAY_TYPE
6268 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6269 && string_flag)
6270 value.value = orig_value;
6271 /* Otherwise, if we have come to a subaggregate,
6272 and we don't have an element of its type, push into it. */
6273 else if (value.value != 0
6274 && value.value != error_mark_node
6275 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6276 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6277 || fieldcode == UNION_TYPE))
6279 push_init_level (1);
6280 continue;
6283 if (value.value)
6285 push_member_name (constructor_fields);
6286 output_init_element (value.value, strict_string,
6287 fieldtype, constructor_fields, 1);
6288 RESTORE_SPELLING_DEPTH (constructor_depth);
6290 else
6291 /* Do the bookkeeping for an element that was
6292 directly output as a constructor. */
6294 /* For a record, keep track of end position of last field. */
6295 if (DECL_SIZE (constructor_fields))
6296 constructor_bit_index
6297 = size_binop (PLUS_EXPR,
6298 bit_position (constructor_fields),
6299 DECL_SIZE (constructor_fields));
6301 /* If the current field was the first one not yet written out,
6302 it isn't now, so update. */
6303 if (constructor_unfilled_fields == constructor_fields)
6305 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6306 /* Skip any nameless bit fields. */
6307 while (constructor_unfilled_fields != 0
6308 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6309 && DECL_NAME (constructor_unfilled_fields) == 0)
6310 constructor_unfilled_fields =
6311 TREE_CHAIN (constructor_unfilled_fields);
6315 constructor_fields = TREE_CHAIN (constructor_fields);
6316 /* Skip any nameless bit fields at the beginning. */
6317 while (constructor_fields != 0
6318 && DECL_C_BIT_FIELD (constructor_fields)
6319 && DECL_NAME (constructor_fields) == 0)
6320 constructor_fields = TREE_CHAIN (constructor_fields);
6322 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6324 tree fieldtype;
6325 enum tree_code fieldcode;
6327 if (constructor_fields == 0)
6329 pedwarn_init ("excess elements in union initializer");
6330 break;
6333 fieldtype = TREE_TYPE (constructor_fields);
6334 if (fieldtype != error_mark_node)
6335 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6336 fieldcode = TREE_CODE (fieldtype);
6338 /* Warn that traditional C rejects initialization of unions.
6339 We skip the warning if the value is zero. This is done
6340 under the assumption that the zero initializer in user
6341 code appears conditioned on e.g. __STDC__ to avoid
6342 "missing initializer" warnings and relies on default
6343 initialization to zero in the traditional C case.
6344 We also skip the warning if the initializer is designated,
6345 again on the assumption that this must be conditional on
6346 __STDC__ anyway (and we've already complained about the
6347 member-designator already). */
6348 if (!in_system_header && !constructor_designated
6349 && !(value.value && (integer_zerop (value.value)
6350 || real_zerop (value.value))))
6351 warning (OPT_Wtraditional, "traditional C rejects initialization "
6352 "of unions");
6354 /* Accept a string constant to initialize a subarray. */
6355 if (value.value != 0
6356 && fieldcode == ARRAY_TYPE
6357 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6358 && string_flag)
6359 value.value = orig_value;
6360 /* Otherwise, if we have come to a subaggregate,
6361 and we don't have an element of its type, push into it. */
6362 else if (value.value != 0
6363 && value.value != error_mark_node
6364 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6365 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6366 || fieldcode == UNION_TYPE))
6368 push_init_level (1);
6369 continue;
6372 if (value.value)
6374 push_member_name (constructor_fields);
6375 output_init_element (value.value, strict_string,
6376 fieldtype, constructor_fields, 1);
6377 RESTORE_SPELLING_DEPTH (constructor_depth);
6379 else
6380 /* Do the bookkeeping for an element that was
6381 directly output as a constructor. */
6383 constructor_bit_index = DECL_SIZE (constructor_fields);
6384 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6387 constructor_fields = 0;
6389 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6391 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6392 enum tree_code eltcode = TREE_CODE (elttype);
6394 /* Accept a string constant to initialize a subarray. */
6395 if (value.value != 0
6396 && eltcode == ARRAY_TYPE
6397 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6398 && string_flag)
6399 value.value = orig_value;
6400 /* Otherwise, if we have come to a subaggregate,
6401 and we don't have an element of its type, push into it. */
6402 else if (value.value != 0
6403 && value.value != error_mark_node
6404 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6405 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6406 || eltcode == UNION_TYPE))
6408 push_init_level (1);
6409 continue;
6412 if (constructor_max_index != 0
6413 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6414 || integer_all_onesp (constructor_max_index)))
6416 pedwarn_init ("excess elements in array initializer");
6417 break;
6420 /* Now output the actual element. */
6421 if (value.value)
6423 push_array_bounds (tree_low_cst (constructor_index, 0));
6424 output_init_element (value.value, strict_string,
6425 elttype, constructor_index, 1);
6426 RESTORE_SPELLING_DEPTH (constructor_depth);
6429 constructor_index
6430 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6432 if (!value.value)
6433 /* If we are doing the bookkeeping for an element that was
6434 directly output as a constructor, we must update
6435 constructor_unfilled_index. */
6436 constructor_unfilled_index = constructor_index;
6438 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6440 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6442 /* Do a basic check of initializer size. Note that vectors
6443 always have a fixed size derived from their type. */
6444 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6446 pedwarn_init ("excess elements in vector initializer");
6447 break;
6450 /* Now output the actual element. */
6451 if (value.value)
6452 output_init_element (value.value, strict_string,
6453 elttype, constructor_index, 1);
6455 constructor_index
6456 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6458 if (!value.value)
6459 /* If we are doing the bookkeeping for an element that was
6460 directly output as a constructor, we must update
6461 constructor_unfilled_index. */
6462 constructor_unfilled_index = constructor_index;
6465 /* Handle the sole element allowed in a braced initializer
6466 for a scalar variable. */
6467 else if (constructor_type != error_mark_node
6468 && constructor_fields == 0)
6470 pedwarn_init ("excess elements in scalar initializer");
6471 break;
6473 else
6475 if (value.value)
6476 output_init_element (value.value, strict_string,
6477 constructor_type, NULL_TREE, 1);
6478 constructor_fields = 0;
6481 /* Handle range initializers either at this level or anywhere higher
6482 in the designator stack. */
6483 if (constructor_range_stack)
6485 struct constructor_range_stack *p, *range_stack;
6486 int finish = 0;
6488 range_stack = constructor_range_stack;
6489 constructor_range_stack = 0;
6490 while (constructor_stack != range_stack->stack)
6492 gcc_assert (constructor_stack->implicit);
6493 process_init_element (pop_init_level (1));
6495 for (p = range_stack;
6496 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6497 p = p->prev)
6499 gcc_assert (constructor_stack->implicit);
6500 process_init_element (pop_init_level (1));
6503 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6504 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6505 finish = 1;
6507 while (1)
6509 constructor_index = p->index;
6510 constructor_fields = p->fields;
6511 if (finish && p->range_end && p->index == p->range_start)
6513 finish = 0;
6514 p->prev = 0;
6516 p = p->next;
6517 if (!p)
6518 break;
6519 push_init_level (2);
6520 p->stack = constructor_stack;
6521 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6522 p->index = p->range_start;
6525 if (!finish)
6526 constructor_range_stack = range_stack;
6527 continue;
6530 break;
6533 constructor_range_stack = 0;
6536 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6537 (guaranteed to be 'volatile' or null) and ARGS (represented using
6538 an ASM_EXPR node). */
6539 tree
6540 build_asm_stmt (tree cv_qualifier, tree args)
6542 if (!ASM_VOLATILE_P (args) && cv_qualifier)
6543 ASM_VOLATILE_P (args) = 1;
6544 return add_stmt (args);
6547 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6548 some INPUTS, and some CLOBBERS. The latter three may be NULL.
6549 SIMPLE indicates whether there was anything at all after the
6550 string in the asm expression -- asm("blah") and asm("blah" : )
6551 are subtly different. We use a ASM_EXPR node to represent this. */
6552 tree
6553 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6554 bool simple)
6556 tree tail;
6557 tree args;
6558 int i;
6559 const char *constraint;
6560 const char **oconstraints;
6561 bool allows_mem, allows_reg, is_inout;
6562 int ninputs, noutputs;
6564 ninputs = list_length (inputs);
6565 noutputs = list_length (outputs);
6566 oconstraints = (const char **) alloca (noutputs * sizeof (const char *));
6568 string = resolve_asm_operand_names (string, outputs, inputs);
6570 /* Remove output conversions that change the type but not the mode. */
6571 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6573 tree output = TREE_VALUE (tail);
6575 /* ??? Really, this should not be here. Users should be using a
6576 proper lvalue, dammit. But there's a long history of using casts
6577 in the output operands. In cases like longlong.h, this becomes a
6578 primitive form of typechecking -- if the cast can be removed, then
6579 the output operand had a type of the proper width; otherwise we'll
6580 get an error. Gross, but ... */
6581 STRIP_NOPS (output);
6583 if (!lvalue_or_else (output, lv_asm))
6584 output = error_mark_node;
6586 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6587 oconstraints[i] = constraint;
6589 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
6590 &allows_mem, &allows_reg, &is_inout))
6592 /* If the operand is going to end up in memory,
6593 mark it addressable. */
6594 if (!allows_reg && !c_mark_addressable (output))
6595 output = error_mark_node;
6597 else
6598 output = error_mark_node;
6600 TREE_VALUE (tail) = output;
6603 for (i = 0, tail = inputs; tail; ++i, tail = TREE_CHAIN (tail))
6605 tree input;
6607 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6608 input = TREE_VALUE (tail);
6610 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
6611 oconstraints, &allows_mem, &allows_reg))
6613 /* If the operand is going to end up in memory,
6614 mark it addressable. */
6615 if (!allows_reg && allows_mem)
6617 /* Strip the nops as we allow this case. FIXME, this really
6618 should be rejected or made deprecated. */
6619 STRIP_NOPS (input);
6620 if (!c_mark_addressable (input))
6621 input = error_mark_node;
6624 else
6625 input = error_mark_node;
6627 TREE_VALUE (tail) = input;
6630 args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6632 /* Simple asm statements are treated as volatile. */
6633 if (simple)
6635 ASM_VOLATILE_P (args) = 1;
6636 ASM_INPUT_P (args) = 1;
6639 return args;
6642 /* Generate a goto statement to LABEL. */
6644 tree
6645 c_finish_goto_label (tree label)
6647 tree decl = lookup_label (label);
6648 if (!decl)
6649 return NULL_TREE;
6651 if (C_DECL_UNJUMPABLE_STMT_EXPR (decl))
6653 error ("jump into statement expression");
6654 return NULL_TREE;
6657 if (C_DECL_UNJUMPABLE_VM (decl))
6659 error ("jump into scope of identifier with variably modified type");
6660 return NULL_TREE;
6663 if (!C_DECL_UNDEFINABLE_STMT_EXPR (decl))
6665 /* No jump from outside this statement expression context, so
6666 record that there is a jump from within this context. */
6667 struct c_label_list *nlist;
6668 nlist = XOBNEW (&parser_obstack, struct c_label_list);
6669 nlist->next = label_context_stack_se->labels_used;
6670 nlist->label = decl;
6671 label_context_stack_se->labels_used = nlist;
6674 if (!C_DECL_UNDEFINABLE_VM (decl))
6676 /* No jump from outside this context context of identifiers with
6677 variably modified type, so record that there is a jump from
6678 within this context. */
6679 struct c_label_list *nlist;
6680 nlist = XOBNEW (&parser_obstack, struct c_label_list);
6681 nlist->next = label_context_stack_vm->labels_used;
6682 nlist->label = decl;
6683 label_context_stack_vm->labels_used = nlist;
6686 TREE_USED (decl) = 1;
6687 return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
6690 /* Generate a computed goto statement to EXPR. */
6692 tree
6693 c_finish_goto_ptr (tree expr)
6695 if (pedantic)
6696 pedwarn ("ISO C forbids %<goto *expr;%>");
6697 expr = convert (ptr_type_node, expr);
6698 return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
6701 /* Generate a C `return' statement. RETVAL is the expression for what
6702 to return, or a null pointer for `return;' with no value. */
6704 tree
6705 c_finish_return (tree retval)
6707 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6709 if (TREE_THIS_VOLATILE (current_function_decl))
6710 warning (0, "function declared %<noreturn%> has a %<return%> statement");
6712 if (!retval)
6714 current_function_returns_null = 1;
6715 if ((warn_return_type || flag_isoc99)
6716 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6717 pedwarn_c99 ("%<return%> with no value, in "
6718 "function returning non-void");
6720 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6722 current_function_returns_null = 1;
6723 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6724 pedwarn ("%<return%> with a value, in function returning void");
6726 else
6728 tree t = convert_for_assignment (valtype, retval, ic_return,
6729 NULL_TREE, NULL_TREE, 0);
6730 tree res = DECL_RESULT (current_function_decl);
6731 tree inner;
6733 current_function_returns_value = 1;
6734 if (t == error_mark_node)
6735 return NULL_TREE;
6737 inner = t = convert (TREE_TYPE (res), t);
6739 /* Strip any conversions, additions, and subtractions, and see if
6740 we are returning the address of a local variable. Warn if so. */
6741 while (1)
6743 switch (TREE_CODE (inner))
6745 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6746 case PLUS_EXPR:
6747 inner = TREE_OPERAND (inner, 0);
6748 continue;
6750 case MINUS_EXPR:
6751 /* If the second operand of the MINUS_EXPR has a pointer
6752 type (or is converted from it), this may be valid, so
6753 don't give a warning. */
6755 tree op1 = TREE_OPERAND (inner, 1);
6757 while (!POINTER_TYPE_P (TREE_TYPE (op1))
6758 && (TREE_CODE (op1) == NOP_EXPR
6759 || TREE_CODE (op1) == NON_LVALUE_EXPR
6760 || TREE_CODE (op1) == CONVERT_EXPR))
6761 op1 = TREE_OPERAND (op1, 0);
6763 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6764 break;
6766 inner = TREE_OPERAND (inner, 0);
6767 continue;
6770 case ADDR_EXPR:
6771 inner = TREE_OPERAND (inner, 0);
6773 while (REFERENCE_CLASS_P (inner)
6774 && TREE_CODE (inner) != INDIRECT_REF)
6775 inner = TREE_OPERAND (inner, 0);
6777 if (DECL_P (inner)
6778 && !DECL_EXTERNAL (inner)
6779 && !TREE_STATIC (inner)
6780 && DECL_CONTEXT (inner) == current_function_decl)
6781 warning (0, "function returns address of local variable");
6782 break;
6784 default:
6785 break;
6788 break;
6791 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
6794 return add_stmt (build_stmt (RETURN_EXPR, retval));
6797 struct c_switch {
6798 /* The SWITCH_EXPR being built. */
6799 tree switch_expr;
6801 /* The original type of the testing expression, i.e. before the
6802 default conversion is applied. */
6803 tree orig_type;
6805 /* A splay-tree mapping the low element of a case range to the high
6806 element, or NULL_TREE if there is no high element. Used to
6807 determine whether or not a new case label duplicates an old case
6808 label. We need a tree, rather than simply a hash table, because
6809 of the GNU case range extension. */
6810 splay_tree cases;
6812 /* Number of nested statement expressions within this switch
6813 statement; if nonzero, case and default labels may not
6814 appear. */
6815 unsigned int blocked_stmt_expr;
6817 /* Scope of outermost declarations of identifiers with variably
6818 modified type within this switch statement; if nonzero, case and
6819 default labels may not appear. */
6820 unsigned int blocked_vm;
6822 /* The next node on the stack. */
6823 struct c_switch *next;
6826 /* A stack of the currently active switch statements. The innermost
6827 switch statement is on the top of the stack. There is no need to
6828 mark the stack for garbage collection because it is only active
6829 during the processing of the body of a function, and we never
6830 collect at that point. */
6832 struct c_switch *c_switch_stack;
6834 /* Start a C switch statement, testing expression EXP. Return the new
6835 SWITCH_EXPR. */
6837 tree
6838 c_start_case (tree exp)
6840 enum tree_code code;
6841 tree type, orig_type = error_mark_node;
6842 struct c_switch *cs;
6844 if (exp != error_mark_node)
6846 code = TREE_CODE (TREE_TYPE (exp));
6847 orig_type = TREE_TYPE (exp);
6849 if (!INTEGRAL_TYPE_P (orig_type)
6850 && code != ERROR_MARK)
6852 error ("switch quantity not an integer");
6853 exp = integer_zero_node;
6854 orig_type = error_mark_node;
6856 else
6858 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6860 if (!in_system_header
6861 && (type == long_integer_type_node
6862 || type == long_unsigned_type_node))
6863 warning (OPT_Wtraditional, "%<long%> switch expression not "
6864 "converted to %<int%> in ISO C");
6866 exp = default_conversion (exp);
6867 type = TREE_TYPE (exp);
6871 /* Add this new SWITCH_EXPR to the stack. */
6872 cs = XNEW (struct c_switch);
6873 cs->switch_expr = build3 (SWITCH_EXPR, orig_type, exp, NULL_TREE, NULL_TREE);
6874 cs->orig_type = orig_type;
6875 cs->cases = splay_tree_new (case_compare, NULL, NULL);
6876 cs->blocked_stmt_expr = 0;
6877 cs->blocked_vm = 0;
6878 cs->next = c_switch_stack;
6879 c_switch_stack = cs;
6881 return add_stmt (cs->switch_expr);
6884 /* Process a case label. */
6886 tree
6887 do_case (tree low_value, tree high_value)
6889 tree label = NULL_TREE;
6891 if (c_switch_stack && !c_switch_stack->blocked_stmt_expr
6892 && !c_switch_stack->blocked_vm)
6894 label = c_add_case_label (c_switch_stack->cases,
6895 SWITCH_COND (c_switch_stack->switch_expr),
6896 c_switch_stack->orig_type,
6897 low_value, high_value);
6898 if (label == error_mark_node)
6899 label = NULL_TREE;
6901 else if (c_switch_stack && c_switch_stack->blocked_stmt_expr)
6903 if (low_value)
6904 error ("case label in statement expression not containing "
6905 "enclosing switch statement");
6906 else
6907 error ("%<default%> label in statement expression not containing "
6908 "enclosing switch statement");
6910 else if (c_switch_stack && c_switch_stack->blocked_vm)
6912 if (low_value)
6913 error ("case label in scope of identifier with variably modified "
6914 "type not containing enclosing switch statement");
6915 else
6916 error ("%<default%> label in scope of identifier with variably "
6917 "modified type not containing enclosing switch statement");
6919 else if (low_value)
6920 error ("case label not within a switch statement");
6921 else
6922 error ("%<default%> label not within a switch statement");
6924 return label;
6927 /* Finish the switch statement. */
6929 void
6930 c_finish_case (tree body)
6932 struct c_switch *cs = c_switch_stack;
6933 location_t switch_location;
6935 SWITCH_BODY (cs->switch_expr) = body;
6937 /* We must not be within a statement expression nested in the switch
6938 at this point; we might, however, be within the scope of an
6939 identifier with variably modified type nested in the switch. */
6940 gcc_assert (!cs->blocked_stmt_expr);
6942 /* Emit warnings as needed. */
6943 if (EXPR_HAS_LOCATION (cs->switch_expr))
6944 switch_location = EXPR_LOCATION (cs->switch_expr);
6945 else
6946 switch_location = input_location;
6947 c_do_switch_warnings (cs->cases, switch_location,
6948 TREE_TYPE (cs->switch_expr),
6949 SWITCH_COND (cs->switch_expr));
6951 /* Pop the stack. */
6952 c_switch_stack = cs->next;
6953 splay_tree_delete (cs->cases);
6954 XDELETE (cs);
6957 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
6958 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
6959 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
6960 statement, and was not surrounded with parenthesis. */
6962 void
6963 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
6964 tree else_block, bool nested_if)
6966 tree stmt;
6968 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
6969 if (warn_parentheses && nested_if && else_block == NULL)
6971 tree inner_if = then_block;
6973 /* We know from the grammar productions that there is an IF nested
6974 within THEN_BLOCK. Due to labels and c99 conditional declarations,
6975 it might not be exactly THEN_BLOCK, but should be the last
6976 non-container statement within. */
6977 while (1)
6978 switch (TREE_CODE (inner_if))
6980 case COND_EXPR:
6981 goto found;
6982 case BIND_EXPR:
6983 inner_if = BIND_EXPR_BODY (inner_if);
6984 break;
6985 case STATEMENT_LIST:
6986 inner_if = expr_last (then_block);
6987 break;
6988 case TRY_FINALLY_EXPR:
6989 case TRY_CATCH_EXPR:
6990 inner_if = TREE_OPERAND (inner_if, 0);
6991 break;
6992 default:
6993 gcc_unreachable ();
6995 found:
6997 if (COND_EXPR_ELSE (inner_if))
6998 warning (OPT_Wparentheses,
6999 "%Hsuggest explicit braces to avoid ambiguous %<else%>",
7000 &if_locus);
7003 /* Diagnose ";" via the special empty statement node that we create. */
7004 if (extra_warnings)
7006 if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
7008 if (!else_block)
7009 warning (0, "%Hempty body in an if-statement",
7010 EXPR_LOCUS (then_block));
7011 then_block = alloc_stmt_list ();
7013 if (else_block
7014 && TREE_CODE (else_block) == NOP_EXPR
7015 && !TREE_TYPE (else_block))
7017 warning (0, "%Hempty body in an else-statement",
7018 EXPR_LOCUS (else_block));
7019 else_block = alloc_stmt_list ();
7023 stmt = build3 (COND_EXPR, void_type_node, cond, then_block, else_block);
7024 SET_EXPR_LOCATION (stmt, if_locus);
7025 add_stmt (stmt);
7028 /* Emit a general-purpose loop construct. START_LOCUS is the location of
7029 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
7030 is false for DO loops. INCR is the FOR increment expression. BODY is
7031 the statement controlled by the loop. BLAB is the break label. CLAB is
7032 the continue label. Everything is allowed to be NULL. */
7034 void
7035 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
7036 tree blab, tree clab, bool cond_is_first)
7038 tree entry = NULL, exit = NULL, t;
7040 /* If the condition is zero don't generate a loop construct. */
7041 if (cond && integer_zerop (cond))
7043 if (cond_is_first)
7045 t = build_and_jump (&blab);
7046 SET_EXPR_LOCATION (t, start_locus);
7047 add_stmt (t);
7050 else
7052 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
7054 /* If we have an exit condition, then we build an IF with gotos either
7055 out of the loop, or to the top of it. If there's no exit condition,
7056 then we just build a jump back to the top. */
7057 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
7059 if (cond && !integer_nonzerop (cond))
7061 /* Canonicalize the loop condition to the end. This means
7062 generating a branch to the loop condition. Reuse the
7063 continue label, if possible. */
7064 if (cond_is_first)
7066 if (incr || !clab)
7068 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
7069 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
7071 else
7072 t = build1 (GOTO_EXPR, void_type_node, clab);
7073 SET_EXPR_LOCATION (t, start_locus);
7074 add_stmt (t);
7077 t = build_and_jump (&blab);
7078 exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
7079 exit = fold (exit);
7080 if (cond_is_first)
7081 SET_EXPR_LOCATION (exit, start_locus);
7082 else
7083 SET_EXPR_LOCATION (exit, input_location);
7086 add_stmt (top);
7089 if (body)
7090 add_stmt (body);
7091 if (clab)
7092 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
7093 if (incr)
7094 add_stmt (incr);
7095 if (entry)
7096 add_stmt (entry);
7097 if (exit)
7098 add_stmt (exit);
7099 if (blab)
7100 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
7103 tree
7104 c_finish_bc_stmt (tree *label_p, bool is_break)
7106 bool skip;
7107 tree label = *label_p;
7109 /* In switch statements break is sometimes stylistically used after
7110 a return statement. This can lead to spurious warnings about
7111 control reaching the end of a non-void function when it is
7112 inlined. Note that we are calling block_may_fallthru with
7113 language specific tree nodes; this works because
7114 block_may_fallthru returns true when given something it does not
7115 understand. */
7116 skip = !block_may_fallthru (cur_stmt_list);
7118 if (!label)
7120 if (!skip)
7121 *label_p = label = create_artificial_label ();
7123 else if (TREE_CODE (label) != LABEL_DECL)
7125 if (is_break)
7126 error ("break statement not within loop or switch");
7127 else
7128 error ("continue statement not within a loop");
7129 return NULL_TREE;
7132 if (skip)
7133 return NULL_TREE;
7135 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
7138 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
7140 static void
7141 emit_side_effect_warnings (tree expr)
7143 if (expr == error_mark_node)
7145 else if (!TREE_SIDE_EFFECTS (expr))
7147 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
7148 warning (0, "%Hstatement with no effect",
7149 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
7151 else if (warn_unused_value)
7152 warn_if_unused_value (expr, input_location);
7155 /* Process an expression as if it were a complete statement. Emit
7156 diagnostics, but do not call ADD_STMT. */
7158 tree
7159 c_process_expr_stmt (tree expr)
7161 if (!expr)
7162 return NULL_TREE;
7164 if (warn_sequence_point)
7165 verify_sequence_points (expr);
7167 if (TREE_TYPE (expr) != error_mark_node
7168 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
7169 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
7170 error ("expression statement has incomplete type");
7172 /* If we're not processing a statement expression, warn about unused values.
7173 Warnings for statement expressions will be emitted later, once we figure
7174 out which is the result. */
7175 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7176 && (extra_warnings || warn_unused_value))
7177 emit_side_effect_warnings (expr);
7179 /* If the expression is not of a type to which we cannot assign a line
7180 number, wrap the thing in a no-op NOP_EXPR. */
7181 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
7182 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
7184 if (EXPR_P (expr))
7185 SET_EXPR_LOCATION (expr, input_location);
7187 return expr;
7190 /* Emit an expression as a statement. */
7192 tree
7193 c_finish_expr_stmt (tree expr)
7195 if (expr)
7196 return add_stmt (c_process_expr_stmt (expr));
7197 else
7198 return NULL;
7201 /* Do the opposite and emit a statement as an expression. To begin,
7202 create a new binding level and return it. */
7204 tree
7205 c_begin_stmt_expr (void)
7207 tree ret;
7208 struct c_label_context_se *nstack;
7209 struct c_label_list *glist;
7211 /* We must force a BLOCK for this level so that, if it is not expanded
7212 later, there is a way to turn off the entire subtree of blocks that
7213 are contained in it. */
7214 keep_next_level ();
7215 ret = c_begin_compound_stmt (true);
7216 if (c_switch_stack)
7218 c_switch_stack->blocked_stmt_expr++;
7219 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7221 for (glist = label_context_stack_se->labels_used;
7222 glist != NULL;
7223 glist = glist->next)
7225 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 1;
7227 nstack = XOBNEW (&parser_obstack, struct c_label_context_se);
7228 nstack->labels_def = NULL;
7229 nstack->labels_used = NULL;
7230 nstack->next = label_context_stack_se;
7231 label_context_stack_se = nstack;
7233 /* Mark the current statement list as belonging to a statement list. */
7234 STATEMENT_LIST_STMT_EXPR (ret) = 1;
7236 return ret;
7239 tree
7240 c_finish_stmt_expr (tree body)
7242 tree last, type, tmp, val;
7243 tree *last_p;
7244 struct c_label_list *dlist, *glist, *glist_prev = NULL;
7246 body = c_end_compound_stmt (body, true);
7247 if (c_switch_stack)
7249 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7250 c_switch_stack->blocked_stmt_expr--;
7252 /* It is no longer possible to jump to labels defined within this
7253 statement expression. */
7254 for (dlist = label_context_stack_se->labels_def;
7255 dlist != NULL;
7256 dlist = dlist->next)
7258 C_DECL_UNJUMPABLE_STMT_EXPR (dlist->label) = 1;
7260 /* It is again possible to define labels with a goto just outside
7261 this statement expression. */
7262 for (glist = label_context_stack_se->next->labels_used;
7263 glist != NULL;
7264 glist = glist->next)
7266 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 0;
7267 glist_prev = glist;
7269 if (glist_prev != NULL)
7270 glist_prev->next = label_context_stack_se->labels_used;
7271 else
7272 label_context_stack_se->next->labels_used
7273 = label_context_stack_se->labels_used;
7274 label_context_stack_se = label_context_stack_se->next;
7276 /* Locate the last statement in BODY. See c_end_compound_stmt
7277 about always returning a BIND_EXPR. */
7278 last_p = &BIND_EXPR_BODY (body);
7279 last = BIND_EXPR_BODY (body);
7281 continue_searching:
7282 if (TREE_CODE (last) == STATEMENT_LIST)
7284 tree_stmt_iterator i;
7286 /* This can happen with degenerate cases like ({ }). No value. */
7287 if (!TREE_SIDE_EFFECTS (last))
7288 return body;
7290 /* If we're supposed to generate side effects warnings, process
7291 all of the statements except the last. */
7292 if (extra_warnings || warn_unused_value)
7294 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
7295 emit_side_effect_warnings (tsi_stmt (i));
7297 else
7298 i = tsi_last (last);
7299 last_p = tsi_stmt_ptr (i);
7300 last = *last_p;
7303 /* If the end of the list is exception related, then the list was split
7304 by a call to push_cleanup. Continue searching. */
7305 if (TREE_CODE (last) == TRY_FINALLY_EXPR
7306 || TREE_CODE (last) == TRY_CATCH_EXPR)
7308 last_p = &TREE_OPERAND (last, 0);
7309 last = *last_p;
7310 goto continue_searching;
7313 /* In the case that the BIND_EXPR is not necessary, return the
7314 expression out from inside it. */
7315 if (last == error_mark_node
7316 || (last == BIND_EXPR_BODY (body)
7317 && BIND_EXPR_VARS (body) == NULL))
7318 return last;
7320 /* Extract the type of said expression. */
7321 type = TREE_TYPE (last);
7323 /* If we're not returning a value at all, then the BIND_EXPR that
7324 we already have is a fine expression to return. */
7325 if (!type || VOID_TYPE_P (type))
7326 return body;
7328 /* Now that we've located the expression containing the value, it seems
7329 silly to make voidify_wrapper_expr repeat the process. Create a
7330 temporary of the appropriate type and stick it in a TARGET_EXPR. */
7331 tmp = create_tmp_var_raw (type, NULL);
7333 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
7334 tree_expr_nonnegative_p giving up immediately. */
7335 val = last;
7336 if (TREE_CODE (val) == NOP_EXPR
7337 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
7338 val = TREE_OPERAND (val, 0);
7340 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
7341 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
7343 return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
7346 /* Begin the scope of an identifier of variably modified type, scope
7347 number SCOPE. Jumping from outside this scope to inside it is not
7348 permitted. */
7350 void
7351 c_begin_vm_scope (unsigned int scope)
7353 struct c_label_context_vm *nstack;
7354 struct c_label_list *glist;
7356 gcc_assert (scope > 0);
7357 if (c_switch_stack && !c_switch_stack->blocked_vm)
7358 c_switch_stack->blocked_vm = scope;
7359 for (glist = label_context_stack_vm->labels_used;
7360 glist != NULL;
7361 glist = glist->next)
7363 C_DECL_UNDEFINABLE_VM (glist->label) = 1;
7365 nstack = XOBNEW (&parser_obstack, struct c_label_context_vm);
7366 nstack->labels_def = NULL;
7367 nstack->labels_used = NULL;
7368 nstack->scope = scope;
7369 nstack->next = label_context_stack_vm;
7370 label_context_stack_vm = nstack;
7373 /* End a scope which may contain identifiers of variably modified
7374 type, scope number SCOPE. */
7376 void
7377 c_end_vm_scope (unsigned int scope)
7379 if (label_context_stack_vm == NULL)
7380 return;
7381 if (c_switch_stack && c_switch_stack->blocked_vm == scope)
7382 c_switch_stack->blocked_vm = 0;
7383 /* We may have a number of nested scopes of identifiers with
7384 variably modified type, all at this depth. Pop each in turn. */
7385 while (label_context_stack_vm->scope == scope)
7387 struct c_label_list *dlist, *glist, *glist_prev = NULL;
7389 /* It is no longer possible to jump to labels defined within this
7390 scope. */
7391 for (dlist = label_context_stack_vm->labels_def;
7392 dlist != NULL;
7393 dlist = dlist->next)
7395 C_DECL_UNJUMPABLE_VM (dlist->label) = 1;
7397 /* It is again possible to define labels with a goto just outside
7398 this scope. */
7399 for (glist = label_context_stack_vm->next->labels_used;
7400 glist != NULL;
7401 glist = glist->next)
7403 C_DECL_UNDEFINABLE_VM (glist->label) = 0;
7404 glist_prev = glist;
7406 if (glist_prev != NULL)
7407 glist_prev->next = label_context_stack_vm->labels_used;
7408 else
7409 label_context_stack_vm->next->labels_used
7410 = label_context_stack_vm->labels_used;
7411 label_context_stack_vm = label_context_stack_vm->next;
7415 /* Begin and end compound statements. This is as simple as pushing
7416 and popping new statement lists from the tree. */
7418 tree
7419 c_begin_compound_stmt (bool do_scope)
7421 tree stmt = push_stmt_list ();
7422 if (do_scope)
7423 push_scope ();
7424 return stmt;
7427 tree
7428 c_end_compound_stmt (tree stmt, bool do_scope)
7430 tree block = NULL;
7432 if (do_scope)
7434 if (c_dialect_objc ())
7435 objc_clear_super_receiver ();
7436 block = pop_scope ();
7439 stmt = pop_stmt_list (stmt);
7440 stmt = c_build_bind_expr (block, stmt);
7442 /* If this compound statement is nested immediately inside a statement
7443 expression, then force a BIND_EXPR to be created. Otherwise we'll
7444 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
7445 STATEMENT_LISTs merge, and thus we can lose track of what statement
7446 was really last. */
7447 if (cur_stmt_list
7448 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7449 && TREE_CODE (stmt) != BIND_EXPR)
7451 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
7452 TREE_SIDE_EFFECTS (stmt) = 1;
7455 return stmt;
7458 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
7459 when the current scope is exited. EH_ONLY is true when this is not
7460 meant to apply to normal control flow transfer. */
7462 void
7463 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
7465 enum tree_code code;
7466 tree stmt, list;
7467 bool stmt_expr;
7469 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
7470 stmt = build_stmt (code, NULL, cleanup);
7471 add_stmt (stmt);
7472 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
7473 list = push_stmt_list ();
7474 TREE_OPERAND (stmt, 0) = list;
7475 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
7478 /* Build a binary-operation expression without default conversions.
7479 CODE is the kind of expression to build.
7480 This function differs from `build' in several ways:
7481 the data type of the result is computed and recorded in it,
7482 warnings are generated if arg data types are invalid,
7483 special handling for addition and subtraction of pointers is known,
7484 and some optimization is done (operations on narrow ints
7485 are done in the narrower type when that gives the same result).
7486 Constant folding is also done before the result is returned.
7488 Note that the operands will never have enumeral types, or function
7489 or array types, because either they will have the default conversions
7490 performed or they have both just been converted to some other type in which
7491 the arithmetic is to be done. */
7493 tree
7494 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
7495 int convert_p)
7497 tree type0, type1;
7498 enum tree_code code0, code1;
7499 tree op0, op1;
7500 const char *invalid_op_diag;
7502 /* Expression code to give to the expression when it is built.
7503 Normally this is CODE, which is what the caller asked for,
7504 but in some special cases we change it. */
7505 enum tree_code resultcode = code;
7507 /* Data type in which the computation is to be performed.
7508 In the simplest cases this is the common type of the arguments. */
7509 tree result_type = NULL;
7511 /* Nonzero means operands have already been type-converted
7512 in whatever way is necessary.
7513 Zero means they need to be converted to RESULT_TYPE. */
7514 int converted = 0;
7516 /* Nonzero means create the expression with this type, rather than
7517 RESULT_TYPE. */
7518 tree build_type = 0;
7520 /* Nonzero means after finally constructing the expression
7521 convert it to this type. */
7522 tree final_type = 0;
7524 /* Nonzero if this is an operation like MIN or MAX which can
7525 safely be computed in short if both args are promoted shorts.
7526 Also implies COMMON.
7527 -1 indicates a bitwise operation; this makes a difference
7528 in the exact conditions for when it is safe to do the operation
7529 in a narrower mode. */
7530 int shorten = 0;
7532 /* Nonzero if this is a comparison operation;
7533 if both args are promoted shorts, compare the original shorts.
7534 Also implies COMMON. */
7535 int short_compare = 0;
7537 /* Nonzero if this is a right-shift operation, which can be computed on the
7538 original short and then promoted if the operand is a promoted short. */
7539 int short_shift = 0;
7541 /* Nonzero means set RESULT_TYPE to the common type of the args. */
7542 int common = 0;
7544 /* True means types are compatible as far as ObjC is concerned. */
7545 bool objc_ok;
7547 if (convert_p)
7549 op0 = default_conversion (orig_op0);
7550 op1 = default_conversion (orig_op1);
7552 else
7554 op0 = orig_op0;
7555 op1 = orig_op1;
7558 type0 = TREE_TYPE (op0);
7559 type1 = TREE_TYPE (op1);
7561 /* The expression codes of the data types of the arguments tell us
7562 whether the arguments are integers, floating, pointers, etc. */
7563 code0 = TREE_CODE (type0);
7564 code1 = TREE_CODE (type1);
7566 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
7567 STRIP_TYPE_NOPS (op0);
7568 STRIP_TYPE_NOPS (op1);
7570 /* If an error was already reported for one of the arguments,
7571 avoid reporting another error. */
7573 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7574 return error_mark_node;
7576 if ((invalid_op_diag
7577 = targetm.invalid_binary_op (code, type0, type1)))
7579 error (invalid_op_diag);
7580 return error_mark_node;
7583 objc_ok = objc_compare_types (type0, type1, -3, NULL_TREE);
7585 switch (code)
7587 case PLUS_EXPR:
7588 /* Handle the pointer + int case. */
7589 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7590 return pointer_int_sum (PLUS_EXPR, op0, op1);
7591 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7592 return pointer_int_sum (PLUS_EXPR, op1, op0);
7593 else
7594 common = 1;
7595 break;
7597 case MINUS_EXPR:
7598 /* Subtraction of two similar pointers.
7599 We must subtract them as integers, then divide by object size. */
7600 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7601 && comp_target_types (type0, type1))
7602 return pointer_diff (op0, op1);
7603 /* Handle pointer minus int. Just like pointer plus int. */
7604 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7605 return pointer_int_sum (MINUS_EXPR, op0, op1);
7606 else
7607 common = 1;
7608 break;
7610 case MULT_EXPR:
7611 common = 1;
7612 break;
7614 case TRUNC_DIV_EXPR:
7615 case CEIL_DIV_EXPR:
7616 case FLOOR_DIV_EXPR:
7617 case ROUND_DIV_EXPR:
7618 case EXACT_DIV_EXPR:
7619 /* Floating point division by zero is a legitimate way to obtain
7620 infinities and NaNs. */
7621 if (skip_evaluation == 0 && integer_zerop (op1))
7622 warning (OPT_Wdiv_by_zero, "division by zero");
7624 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7625 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7626 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7627 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7629 enum tree_code tcode0 = code0, tcode1 = code1;
7631 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7632 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
7633 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
7634 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
7636 if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
7637 resultcode = RDIV_EXPR;
7638 else
7639 /* Although it would be tempting to shorten always here, that
7640 loses on some targets, since the modulo instruction is
7641 undefined if the quotient can't be represented in the
7642 computation mode. We shorten only if unsigned or if
7643 dividing by something we know != -1. */
7644 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7645 || (TREE_CODE (op1) == INTEGER_CST
7646 && !integer_all_onesp (op1)));
7647 common = 1;
7649 break;
7651 case BIT_AND_EXPR:
7652 case BIT_IOR_EXPR:
7653 case BIT_XOR_EXPR:
7654 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7655 shorten = -1;
7656 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
7657 common = 1;
7658 break;
7660 case TRUNC_MOD_EXPR:
7661 case FLOOR_MOD_EXPR:
7662 if (skip_evaluation == 0 && integer_zerop (op1))
7663 warning (OPT_Wdiv_by_zero, "division by zero");
7665 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7667 /* Although it would be tempting to shorten always here, that loses
7668 on some targets, since the modulo instruction is undefined if the
7669 quotient can't be represented in the computation mode. We shorten
7670 only if unsigned or if dividing by something we know != -1. */
7671 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7672 || (TREE_CODE (op1) == INTEGER_CST
7673 && !integer_all_onesp (op1)));
7674 common = 1;
7676 break;
7678 case TRUTH_ANDIF_EXPR:
7679 case TRUTH_ORIF_EXPR:
7680 case TRUTH_AND_EXPR:
7681 case TRUTH_OR_EXPR:
7682 case TRUTH_XOR_EXPR:
7683 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
7684 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
7685 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
7686 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
7688 /* Result of these operations is always an int,
7689 but that does not mean the operands should be
7690 converted to ints! */
7691 result_type = integer_type_node;
7692 op0 = c_common_truthvalue_conversion (op0);
7693 op1 = c_common_truthvalue_conversion (op1);
7694 converted = 1;
7696 break;
7698 /* Shift operations: result has same type as first operand;
7699 always convert second operand to int.
7700 Also set SHORT_SHIFT if shifting rightward. */
7702 case RSHIFT_EXPR:
7703 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7705 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7707 if (tree_int_cst_sgn (op1) < 0)
7708 warning (0, "right shift count is negative");
7709 else
7711 if (!integer_zerop (op1))
7712 short_shift = 1;
7714 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7715 warning (0, "right shift count >= width of type");
7719 /* Use the type of the value to be shifted. */
7720 result_type = type0;
7721 /* Convert the shift-count to an integer, regardless of size
7722 of value being shifted. */
7723 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7724 op1 = convert (integer_type_node, op1);
7725 /* Avoid converting op1 to result_type later. */
7726 converted = 1;
7728 break;
7730 case LSHIFT_EXPR:
7731 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7733 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7735 if (tree_int_cst_sgn (op1) < 0)
7736 warning (0, "left shift count is negative");
7738 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7739 warning (0, "left shift count >= width of type");
7742 /* Use the type of the value to be shifted. */
7743 result_type = type0;
7744 /* Convert the shift-count to an integer, regardless of size
7745 of value being shifted. */
7746 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7747 op1 = convert (integer_type_node, op1);
7748 /* Avoid converting op1 to result_type later. */
7749 converted = 1;
7751 break;
7753 case EQ_EXPR:
7754 case NE_EXPR:
7755 if (code0 == REAL_TYPE || code1 == REAL_TYPE)
7756 warning (OPT_Wfloat_equal,
7757 "comparing floating point with == or != is unsafe");
7758 /* Result of comparison is always int,
7759 but don't convert the args to int! */
7760 build_type = integer_type_node;
7761 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7762 || code0 == COMPLEX_TYPE)
7763 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7764 || code1 == COMPLEX_TYPE))
7765 short_compare = 1;
7766 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7768 tree tt0 = TREE_TYPE (type0);
7769 tree tt1 = TREE_TYPE (type1);
7770 /* Anything compares with void *. void * compares with anything.
7771 Otherwise, the targets must be compatible
7772 and both must be object or both incomplete. */
7773 if (comp_target_types (type0, type1))
7774 result_type = common_pointer_type (type0, type1);
7775 else if (VOID_TYPE_P (tt0))
7777 /* op0 != orig_op0 detects the case of something
7778 whose value is 0 but which isn't a valid null ptr const. */
7779 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
7780 && TREE_CODE (tt1) == FUNCTION_TYPE)
7781 pedwarn ("ISO C forbids comparison of %<void *%>"
7782 " with function pointer");
7784 else if (VOID_TYPE_P (tt1))
7786 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
7787 && TREE_CODE (tt0) == FUNCTION_TYPE)
7788 pedwarn ("ISO C forbids comparison of %<void *%>"
7789 " with function pointer");
7791 else
7792 /* Avoid warning about the volatile ObjC EH puts on decls. */
7793 if (!objc_ok)
7794 pedwarn ("comparison of distinct pointer types lacks a cast");
7796 if (result_type == NULL_TREE)
7797 result_type = ptr_type_node;
7799 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7800 && integer_zerop (op1))
7801 result_type = type0;
7802 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7803 && integer_zerop (op0))
7804 result_type = type1;
7805 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7807 result_type = type0;
7808 pedwarn ("comparison between pointer and integer");
7810 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7812 result_type = type1;
7813 pedwarn ("comparison between pointer and integer");
7815 break;
7817 case LE_EXPR:
7818 case GE_EXPR:
7819 case LT_EXPR:
7820 case GT_EXPR:
7821 build_type = integer_type_node;
7822 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7823 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7824 short_compare = 1;
7825 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7827 if (comp_target_types (type0, type1))
7829 result_type = common_pointer_type (type0, type1);
7830 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
7831 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
7832 pedwarn ("comparison of complete and incomplete pointers");
7833 else if (pedantic
7834 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7835 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7837 else
7839 result_type = ptr_type_node;
7840 pedwarn ("comparison of distinct pointer types lacks a cast");
7843 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7844 && integer_zerop (op1))
7846 result_type = type0;
7847 if (pedantic || extra_warnings)
7848 pedwarn ("ordered comparison of pointer with integer zero");
7850 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7851 && integer_zerop (op0))
7853 result_type = type1;
7854 if (pedantic)
7855 pedwarn ("ordered comparison of pointer with integer zero");
7857 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7859 result_type = type0;
7860 pedwarn ("comparison between pointer and integer");
7862 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7864 result_type = type1;
7865 pedwarn ("comparison between pointer and integer");
7867 break;
7869 default:
7870 gcc_unreachable ();
7873 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7874 return error_mark_node;
7876 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
7877 && (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
7878 || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
7879 TREE_TYPE (type1))))
7881 binary_op_error (code);
7882 return error_mark_node;
7885 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
7886 || code0 == VECTOR_TYPE)
7888 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
7889 || code1 == VECTOR_TYPE))
7891 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
7893 if (shorten || common || short_compare)
7894 result_type = c_common_type (type0, type1);
7896 /* For certain operations (which identify themselves by shorten != 0)
7897 if both args were extended from the same smaller type,
7898 do the arithmetic in that type and then extend.
7900 shorten !=0 and !=1 indicates a bitwise operation.
7901 For them, this optimization is safe only if
7902 both args are zero-extended or both are sign-extended.
7903 Otherwise, we might change the result.
7904 Eg, (short)-1 | (unsigned short)-1 is (int)-1
7905 but calculated in (unsigned short) it would be (unsigned short)-1. */
7907 if (shorten && none_complex)
7909 int unsigned0, unsigned1;
7910 tree arg0 = get_narrower (op0, &unsigned0);
7911 tree arg1 = get_narrower (op1, &unsigned1);
7912 /* UNS is 1 if the operation to be done is an unsigned one. */
7913 int uns = TYPE_UNSIGNED (result_type);
7914 tree type;
7916 final_type = result_type;
7918 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
7919 but it *requires* conversion to FINAL_TYPE. */
7921 if ((TYPE_PRECISION (TREE_TYPE (op0))
7922 == TYPE_PRECISION (TREE_TYPE (arg0)))
7923 && TREE_TYPE (op0) != final_type)
7924 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
7925 if ((TYPE_PRECISION (TREE_TYPE (op1))
7926 == TYPE_PRECISION (TREE_TYPE (arg1)))
7927 && TREE_TYPE (op1) != final_type)
7928 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
7930 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
7932 /* For bitwise operations, signedness of nominal type
7933 does not matter. Consider only how operands were extended. */
7934 if (shorten == -1)
7935 uns = unsigned0;
7937 /* Note that in all three cases below we refrain from optimizing
7938 an unsigned operation on sign-extended args.
7939 That would not be valid. */
7941 /* Both args variable: if both extended in same way
7942 from same width, do it in that width.
7943 Do it unsigned if args were zero-extended. */
7944 if ((TYPE_PRECISION (TREE_TYPE (arg0))
7945 < TYPE_PRECISION (result_type))
7946 && (TYPE_PRECISION (TREE_TYPE (arg1))
7947 == TYPE_PRECISION (TREE_TYPE (arg0)))
7948 && unsigned0 == unsigned1
7949 && (unsigned0 || !uns))
7950 result_type
7951 = c_common_signed_or_unsigned_type
7952 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
7953 else if (TREE_CODE (arg0) == INTEGER_CST
7954 && (unsigned1 || !uns)
7955 && (TYPE_PRECISION (TREE_TYPE (arg1))
7956 < TYPE_PRECISION (result_type))
7957 && (type
7958 = c_common_signed_or_unsigned_type (unsigned1,
7959 TREE_TYPE (arg1)),
7960 int_fits_type_p (arg0, type)))
7961 result_type = type;
7962 else if (TREE_CODE (arg1) == INTEGER_CST
7963 && (unsigned0 || !uns)
7964 && (TYPE_PRECISION (TREE_TYPE (arg0))
7965 < TYPE_PRECISION (result_type))
7966 && (type
7967 = c_common_signed_or_unsigned_type (unsigned0,
7968 TREE_TYPE (arg0)),
7969 int_fits_type_p (arg1, type)))
7970 result_type = type;
7973 /* Shifts can be shortened if shifting right. */
7975 if (short_shift)
7977 int unsigned_arg;
7978 tree arg0 = get_narrower (op0, &unsigned_arg);
7980 final_type = result_type;
7982 if (arg0 == op0 && final_type == TREE_TYPE (op0))
7983 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
7985 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7986 /* We can shorten only if the shift count is less than the
7987 number of bits in the smaller type size. */
7988 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7989 /* We cannot drop an unsigned shift after sign-extension. */
7990 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
7992 /* Do an unsigned shift if the operand was zero-extended. */
7993 result_type
7994 = c_common_signed_or_unsigned_type (unsigned_arg,
7995 TREE_TYPE (arg0));
7996 /* Convert value-to-be-shifted to that type. */
7997 if (TREE_TYPE (op0) != result_type)
7998 op0 = convert (result_type, op0);
7999 converted = 1;
8003 /* Comparison operations are shortened too but differently.
8004 They identify themselves by setting short_compare = 1. */
8006 if (short_compare)
8008 /* Don't write &op0, etc., because that would prevent op0
8009 from being kept in a register.
8010 Instead, make copies of the our local variables and
8011 pass the copies by reference, then copy them back afterward. */
8012 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
8013 enum tree_code xresultcode = resultcode;
8014 tree val
8015 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
8017 if (val != 0)
8018 return val;
8020 op0 = xop0, op1 = xop1;
8021 converted = 1;
8022 resultcode = xresultcode;
8024 if (warn_sign_compare && skip_evaluation == 0)
8026 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
8027 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
8028 int unsignedp0, unsignedp1;
8029 tree primop0 = get_narrower (op0, &unsignedp0);
8030 tree primop1 = get_narrower (op1, &unsignedp1);
8032 xop0 = orig_op0;
8033 xop1 = orig_op1;
8034 STRIP_TYPE_NOPS (xop0);
8035 STRIP_TYPE_NOPS (xop1);
8037 /* Give warnings for comparisons between signed and unsigned
8038 quantities that may fail.
8040 Do the checking based on the original operand trees, so that
8041 casts will be considered, but default promotions won't be.
8043 Do not warn if the comparison is being done in a signed type,
8044 since the signed type will only be chosen if it can represent
8045 all the values of the unsigned type. */
8046 if (!TYPE_UNSIGNED (result_type))
8047 /* OK */;
8048 /* Do not warn if both operands are the same signedness. */
8049 else if (op0_signed == op1_signed)
8050 /* OK */;
8051 else
8053 tree sop, uop;
8055 if (op0_signed)
8056 sop = xop0, uop = xop1;
8057 else
8058 sop = xop1, uop = xop0;
8060 /* Do not warn if the signed quantity is an
8061 unsuffixed integer literal (or some static
8062 constant expression involving such literals or a
8063 conditional expression involving such literals)
8064 and it is non-negative. */
8065 if (tree_expr_nonnegative_p (sop))
8066 /* OK */;
8067 /* Do not warn if the comparison is an equality operation,
8068 the unsigned quantity is an integral constant, and it
8069 would fit in the result if the result were signed. */
8070 else if (TREE_CODE (uop) == INTEGER_CST
8071 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
8072 && int_fits_type_p
8073 (uop, c_common_signed_type (result_type)))
8074 /* OK */;
8075 /* Do not warn if the unsigned quantity is an enumeration
8076 constant and its maximum value would fit in the result
8077 if the result were signed. */
8078 else if (TREE_CODE (uop) == INTEGER_CST
8079 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
8080 && int_fits_type_p
8081 (TYPE_MAX_VALUE (TREE_TYPE (uop)),
8082 c_common_signed_type (result_type)))
8083 /* OK */;
8084 else
8085 warning (0, "comparison between signed and unsigned");
8088 /* Warn if two unsigned values are being compared in a size
8089 larger than their original size, and one (and only one) is the
8090 result of a `~' operator. This comparison will always fail.
8092 Also warn if one operand is a constant, and the constant
8093 does not have all bits set that are set in the ~ operand
8094 when it is extended. */
8096 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
8097 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
8099 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
8100 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
8101 &unsignedp0);
8102 else
8103 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
8104 &unsignedp1);
8106 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
8108 tree primop;
8109 HOST_WIDE_INT constant, mask;
8110 int unsignedp, bits;
8112 if (host_integerp (primop0, 0))
8114 primop = primop1;
8115 unsignedp = unsignedp1;
8116 constant = tree_low_cst (primop0, 0);
8118 else
8120 primop = primop0;
8121 unsignedp = unsignedp0;
8122 constant = tree_low_cst (primop1, 0);
8125 bits = TYPE_PRECISION (TREE_TYPE (primop));
8126 if (bits < TYPE_PRECISION (result_type)
8127 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
8129 mask = (~(HOST_WIDE_INT) 0) << bits;
8130 if ((mask & constant) != mask)
8131 warning (0, "comparison of promoted ~unsigned with constant");
8134 else if (unsignedp0 && unsignedp1
8135 && (TYPE_PRECISION (TREE_TYPE (primop0))
8136 < TYPE_PRECISION (result_type))
8137 && (TYPE_PRECISION (TREE_TYPE (primop1))
8138 < TYPE_PRECISION (result_type)))
8139 warning (0, "comparison of promoted ~unsigned with unsigned");
8145 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
8146 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
8147 Then the expression will be built.
8148 It will be given type FINAL_TYPE if that is nonzero;
8149 otherwise, it will be given type RESULT_TYPE. */
8151 if (!result_type)
8153 binary_op_error (code);
8154 return error_mark_node;
8157 if (!converted)
8159 if (TREE_TYPE (op0) != result_type)
8160 op0 = convert (result_type, op0);
8161 if (TREE_TYPE (op1) != result_type)
8162 op1 = convert (result_type, op1);
8164 /* This can happen if one operand has a vector type, and the other
8165 has a different type. */
8166 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
8167 return error_mark_node;
8170 if (build_type == NULL_TREE)
8171 build_type = result_type;
8174 tree result = build2 (resultcode, build_type, op0, op1);
8176 /* Treat expressions in initializers specially as they can't trap. */
8177 result = require_constant_value ? fold_initializer (result)
8178 : fold (result);
8180 if (final_type != 0)
8181 result = convert (final_type, result);
8182 return result;
8187 /* Convert EXPR to be a truth-value, validating its type for this
8188 purpose. */
8190 tree
8191 c_objc_common_truthvalue_conversion (tree expr)
8193 switch (TREE_CODE (TREE_TYPE (expr)))
8195 case ARRAY_TYPE:
8196 error ("used array that cannot be converted to pointer where scalar is required");
8197 return error_mark_node;
8199 case RECORD_TYPE:
8200 error ("used struct type value where scalar is required");
8201 return error_mark_node;
8203 case UNION_TYPE:
8204 error ("used union type value where scalar is required");
8205 return error_mark_node;
8207 case FUNCTION_TYPE:
8208 gcc_unreachable ();
8210 default:
8211 break;
8214 /* ??? Should we also give an error for void and vectors rather than
8215 leaving those to give errors later? */
8216 return c_common_truthvalue_conversion (expr);
8220 /* Convert EXPR to a contained DECL, updating *TC, *TI and *SE as
8221 required. */
8223 tree
8224 c_expr_to_decl (tree expr, bool *tc ATTRIBUTE_UNUSED,
8225 bool *ti ATTRIBUTE_UNUSED, bool *se)
8227 if (TREE_CODE (expr) == COMPOUND_LITERAL_EXPR)
8229 tree decl = COMPOUND_LITERAL_EXPR_DECL (expr);
8230 /* Executing a compound literal inside a function reinitializes
8231 it. */
8232 if (!TREE_STATIC (decl))
8233 *se = true;
8234 return decl;
8236 else
8237 return expr;