re PR tree-optimization/33563 (DSE removes non-dead store)
[official-gcc.git] / gcc / c-typeck.c
blob0bad8e5a45c751cbb488050a31460d7bf375527d
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, 2006, 2007
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
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 bool null_pointer_constant_p (const_tree);
78 static tree qualify_type (tree, tree);
79 static int tagged_types_tu_compatible_p (const_tree, const_tree);
80 static int comp_target_types (tree, tree);
81 static int function_types_compatible_p (const_tree, const_tree);
82 static int type_lists_compatible_p (const_tree, const_tree);
83 static tree decl_constant_value_for_broken_optimization (tree);
84 static tree lookup_field (tree, tree);
85 static int convert_arguments (int, tree *, tree, tree, tree, tree);
86 static tree pointer_diff (tree, tree);
87 static tree convert_for_assignment (tree, tree, enum impl_conv, tree, tree,
88 int);
89 static tree valid_compound_expr_initializer (tree, tree);
90 static void push_string (const char *);
91 static void push_member_name (tree);
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 (const_tree, enum lvalue_use);
106 static int lvalue_p (const_tree);
107 static void record_maybe_used_decl (tree);
108 static int comptypes_internal (const_tree, const_tree);
110 /* Return true if EXP is a null pointer constant, false otherwise. */
112 static bool
113 null_pointer_constant_p (const_tree expr)
115 /* This should really operate on c_expr structures, but they aren't
116 yet available everywhere required. */
117 tree type = TREE_TYPE (expr);
118 return (TREE_CODE (expr) == INTEGER_CST
119 && !TREE_OVERFLOW (expr)
120 && integer_zerop (expr)
121 && (INTEGRAL_TYPE_P (type)
122 || (TREE_CODE (type) == POINTER_TYPE
123 && VOID_TYPE_P (TREE_TYPE (type))
124 && TYPE_QUALS (TREE_TYPE (type)) == TYPE_UNQUALIFIED)));
126 \f/* This is a cache to hold if two types are compatible or not. */
128 struct tagged_tu_seen_cache {
129 const struct tagged_tu_seen_cache * next;
130 const_tree t1;
131 const_tree t2;
132 /* The return value of tagged_types_tu_compatible_p if we had seen
133 these two types already. */
134 int val;
137 static const struct tagged_tu_seen_cache * tagged_tu_seen_base;
138 static void free_all_tagged_tu_seen_up_to (const struct tagged_tu_seen_cache *);
140 /* Do `exp = require_complete_type (exp);' to make sure exp
141 does not have an incomplete type. (That includes void types.) */
143 tree
144 require_complete_type (tree value)
146 tree type = TREE_TYPE (value);
148 if (value == error_mark_node || type == error_mark_node)
149 return error_mark_node;
151 /* First, detect a valid value with a complete type. */
152 if (COMPLETE_TYPE_P (type))
153 return value;
155 c_incomplete_type_error (value, type);
156 return error_mark_node;
159 /* Print an error message for invalid use of an incomplete type.
160 VALUE is the expression that was used (or 0 if that isn't known)
161 and TYPE is the type that was invalid. */
163 void
164 c_incomplete_type_error (const_tree value, const_tree type)
166 const char *type_code_string;
168 /* Avoid duplicate error message. */
169 if (TREE_CODE (type) == ERROR_MARK)
170 return;
172 if (value != 0 && (TREE_CODE (value) == VAR_DECL
173 || TREE_CODE (value) == PARM_DECL))
174 error ("%qD has an incomplete type", value);
175 else
177 retry:
178 /* We must print an error message. Be clever about what it says. */
180 switch (TREE_CODE (type))
182 case RECORD_TYPE:
183 type_code_string = "struct";
184 break;
186 case UNION_TYPE:
187 type_code_string = "union";
188 break;
190 case ENUMERAL_TYPE:
191 type_code_string = "enum";
192 break;
194 case VOID_TYPE:
195 error ("invalid use of void expression");
196 return;
198 case ARRAY_TYPE:
199 if (TYPE_DOMAIN (type))
201 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
203 error ("invalid use of flexible array member");
204 return;
206 type = TREE_TYPE (type);
207 goto retry;
209 error ("invalid use of array with unspecified bounds");
210 return;
212 default:
213 gcc_unreachable ();
216 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
217 error ("invalid use of undefined type %<%s %E%>",
218 type_code_string, TYPE_NAME (type));
219 else
220 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
221 error ("invalid use of incomplete typedef %qD", TYPE_NAME (type));
225 /* Given a type, apply default promotions wrt unnamed function
226 arguments and return the new type. */
228 tree
229 c_type_promotes_to (tree type)
231 if (TYPE_MAIN_VARIANT (type) == float_type_node)
232 return double_type_node;
234 if (c_promoting_integer_type_p (type))
236 /* Preserve unsignedness if not really getting any wider. */
237 if (TYPE_UNSIGNED (type)
238 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
239 return unsigned_type_node;
240 return integer_type_node;
243 return type;
246 /* Return a variant of TYPE which has all the type qualifiers of LIKE
247 as well as those of TYPE. */
249 static tree
250 qualify_type (tree type, tree like)
252 return c_build_qualified_type (type,
253 TYPE_QUALS (type) | TYPE_QUALS (like));
256 /* Return true iff the given tree T is a variable length array. */
258 bool
259 c_vla_type_p (const_tree t)
261 if (TREE_CODE (t) == ARRAY_TYPE
262 && C_TYPE_VARIABLE_SIZE (t))
263 return true;
264 return false;
267 /* Return the composite type of two compatible types.
269 We assume that comptypes has already been done and returned
270 nonzero; if that isn't so, this may crash. In particular, we
271 assume that qualifiers match. */
273 tree
274 composite_type (tree t1, tree t2)
276 enum tree_code code1;
277 enum tree_code code2;
278 tree attributes;
280 /* Save time if the two types are the same. */
282 if (t1 == t2) return t1;
284 /* If one type is nonsense, use the other. */
285 if (t1 == error_mark_node)
286 return t2;
287 if (t2 == error_mark_node)
288 return t1;
290 code1 = TREE_CODE (t1);
291 code2 = TREE_CODE (t2);
293 /* Merge the attributes. */
294 attributes = targetm.merge_type_attributes (t1, t2);
296 /* If one is an enumerated type and the other is the compatible
297 integer type, the composite type might be either of the two
298 (DR#013 question 3). For consistency, use the enumerated type as
299 the composite type. */
301 if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
302 return t1;
303 if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
304 return t2;
306 gcc_assert (code1 == code2);
308 switch (code1)
310 case POINTER_TYPE:
311 /* For two pointers, do this recursively on the target type. */
313 tree pointed_to_1 = TREE_TYPE (t1);
314 tree pointed_to_2 = TREE_TYPE (t2);
315 tree target = composite_type (pointed_to_1, pointed_to_2);
316 t1 = build_pointer_type (target);
317 t1 = build_type_attribute_variant (t1, attributes);
318 return qualify_type (t1, t2);
321 case ARRAY_TYPE:
323 tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
324 int quals;
325 tree unqual_elt;
326 tree d1 = TYPE_DOMAIN (t1);
327 tree d2 = TYPE_DOMAIN (t2);
328 bool d1_variable, d2_variable;
329 bool d1_zero, d2_zero;
331 /* We should not have any type quals on arrays at all. */
332 gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
334 d1_zero = d1 == 0 || !TYPE_MAX_VALUE (d1);
335 d2_zero = d2 == 0 || !TYPE_MAX_VALUE (d2);
337 d1_variable = (!d1_zero
338 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
339 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
340 d2_variable = (!d2_zero
341 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
342 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
343 d1_variable = d1_variable || (d1_zero && c_vla_type_p (t1));
344 d2_variable = d2_variable || (d2_zero && c_vla_type_p (t2));
346 /* Save space: see if the result is identical to one of the args. */
347 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1)
348 && (d2_variable || d2_zero || !d1_variable))
349 return build_type_attribute_variant (t1, attributes);
350 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2)
351 && (d1_variable || d1_zero || !d2_variable))
352 return build_type_attribute_variant (t2, attributes);
354 if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
355 return build_type_attribute_variant (t1, attributes);
356 if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
357 return build_type_attribute_variant (t2, attributes);
359 /* Merge the element types, and have a size if either arg has
360 one. We may have qualifiers on the element types. To set
361 up TYPE_MAIN_VARIANT correctly, we need to form the
362 composite of the unqualified types and add the qualifiers
363 back at the end. */
364 quals = TYPE_QUALS (strip_array_types (elt));
365 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
366 t1 = build_array_type (unqual_elt,
367 TYPE_DOMAIN ((TYPE_DOMAIN (t1)
368 && (d2_variable
369 || d2_zero
370 || !d1_variable))
371 ? t1
372 : t2));
373 t1 = c_build_qualified_type (t1, quals);
374 return build_type_attribute_variant (t1, attributes);
377 case ENUMERAL_TYPE:
378 case RECORD_TYPE:
379 case UNION_TYPE:
380 if (attributes != NULL)
382 /* Try harder not to create a new aggregate type. */
383 if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes))
384 return t1;
385 if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes))
386 return t2;
388 return build_type_attribute_variant (t1, attributes);
390 case FUNCTION_TYPE:
391 /* Function types: prefer the one that specified arg types.
392 If both do, merge the arg types. Also merge the return types. */
394 tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
395 tree p1 = TYPE_ARG_TYPES (t1);
396 tree p2 = TYPE_ARG_TYPES (t2);
397 int len;
398 tree newargs, n;
399 int i;
401 /* Save space: see if the result is identical to one of the args. */
402 if (valtype == TREE_TYPE (t1) && !TYPE_ARG_TYPES (t2))
403 return build_type_attribute_variant (t1, attributes);
404 if (valtype == TREE_TYPE (t2) && !TYPE_ARG_TYPES (t1))
405 return build_type_attribute_variant (t2, attributes);
407 /* Simple way if one arg fails to specify argument types. */
408 if (TYPE_ARG_TYPES (t1) == 0)
410 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
411 t1 = build_type_attribute_variant (t1, attributes);
412 return qualify_type (t1, t2);
414 if (TYPE_ARG_TYPES (t2) == 0)
416 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
417 t1 = build_type_attribute_variant (t1, attributes);
418 return qualify_type (t1, t2);
421 /* If both args specify argument types, we must merge the two
422 lists, argument by argument. */
423 /* Tell global_bindings_p to return false so that variable_size
424 doesn't die on VLAs in parameter types. */
425 c_override_global_bindings_to_false = true;
427 len = list_length (p1);
428 newargs = 0;
430 for (i = 0; i < len; i++)
431 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
433 n = newargs;
435 for (; p1;
436 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
438 /* A null type means arg type is not specified.
439 Take whatever the other function type has. */
440 if (TREE_VALUE (p1) == 0)
442 TREE_VALUE (n) = TREE_VALUE (p2);
443 goto parm_done;
445 if (TREE_VALUE (p2) == 0)
447 TREE_VALUE (n) = TREE_VALUE (p1);
448 goto parm_done;
451 /* Given wait (union {union wait *u; int *i} *)
452 and wait (union wait *),
453 prefer union wait * as type of parm. */
454 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
455 && TREE_VALUE (p1) != TREE_VALUE (p2))
457 tree memb;
458 tree mv2 = TREE_VALUE (p2);
459 if (mv2 && mv2 != error_mark_node
460 && TREE_CODE (mv2) != ARRAY_TYPE)
461 mv2 = TYPE_MAIN_VARIANT (mv2);
462 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
463 memb; memb = TREE_CHAIN (memb))
465 tree mv3 = TREE_TYPE (memb);
466 if (mv3 && mv3 != error_mark_node
467 && TREE_CODE (mv3) != ARRAY_TYPE)
468 mv3 = TYPE_MAIN_VARIANT (mv3);
469 if (comptypes (mv3, mv2))
471 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
472 TREE_VALUE (p2));
473 if (pedantic)
474 pedwarn ("function types not truly compatible in ISO C");
475 goto parm_done;
479 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
480 && TREE_VALUE (p2) != TREE_VALUE (p1))
482 tree memb;
483 tree mv1 = TREE_VALUE (p1);
484 if (mv1 && mv1 != error_mark_node
485 && TREE_CODE (mv1) != ARRAY_TYPE)
486 mv1 = TYPE_MAIN_VARIANT (mv1);
487 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
488 memb; memb = TREE_CHAIN (memb))
490 tree mv3 = TREE_TYPE (memb);
491 if (mv3 && mv3 != error_mark_node
492 && TREE_CODE (mv3) != ARRAY_TYPE)
493 mv3 = TYPE_MAIN_VARIANT (mv3);
494 if (comptypes (mv3, mv1))
496 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
497 TREE_VALUE (p1));
498 if (pedantic)
499 pedwarn ("function types not truly compatible in ISO C");
500 goto parm_done;
504 TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
505 parm_done: ;
508 c_override_global_bindings_to_false = false;
509 t1 = build_function_type (valtype, newargs);
510 t1 = qualify_type (t1, t2);
511 /* ... falls through ... */
514 default:
515 return build_type_attribute_variant (t1, attributes);
520 /* Return the type of a conditional expression between pointers to
521 possibly differently qualified versions of compatible types.
523 We assume that comp_target_types has already been done and returned
524 nonzero; if that isn't so, this may crash. */
526 static tree
527 common_pointer_type (tree t1, tree t2)
529 tree attributes;
530 tree pointed_to_1, mv1;
531 tree pointed_to_2, mv2;
532 tree target;
534 /* Save time if the two types are the same. */
536 if (t1 == t2) return t1;
538 /* If one type is nonsense, use the other. */
539 if (t1 == error_mark_node)
540 return t2;
541 if (t2 == error_mark_node)
542 return t1;
544 gcc_assert (TREE_CODE (t1) == POINTER_TYPE
545 && TREE_CODE (t2) == POINTER_TYPE);
547 /* Merge the attributes. */
548 attributes = targetm.merge_type_attributes (t1, t2);
550 /* Find the composite type of the target types, and combine the
551 qualifiers of the two types' targets. Do not lose qualifiers on
552 array element types by taking the TYPE_MAIN_VARIANT. */
553 mv1 = pointed_to_1 = TREE_TYPE (t1);
554 mv2 = pointed_to_2 = TREE_TYPE (t2);
555 if (TREE_CODE (mv1) != ARRAY_TYPE)
556 mv1 = TYPE_MAIN_VARIANT (pointed_to_1);
557 if (TREE_CODE (mv2) != ARRAY_TYPE)
558 mv2 = TYPE_MAIN_VARIANT (pointed_to_2);
559 target = composite_type (mv1, mv2);
560 t1 = build_pointer_type (c_build_qualified_type
561 (target,
562 TYPE_QUALS (pointed_to_1) |
563 TYPE_QUALS (pointed_to_2)));
564 return build_type_attribute_variant (t1, attributes);
567 /* Return the common type for two arithmetic types under the usual
568 arithmetic conversions. The default conversions have already been
569 applied, and enumerated types converted to their compatible integer
570 types. The resulting type is unqualified and has no attributes.
572 This is the type for the result of most arithmetic operations
573 if the operands have the given two types. */
575 static tree
576 c_common_type (tree t1, tree t2)
578 enum tree_code code1;
579 enum tree_code code2;
581 /* If one type is nonsense, use the other. */
582 if (t1 == error_mark_node)
583 return t2;
584 if (t2 == error_mark_node)
585 return t1;
587 if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
588 t1 = TYPE_MAIN_VARIANT (t1);
590 if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
591 t2 = TYPE_MAIN_VARIANT (t2);
593 if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
594 t1 = build_type_attribute_variant (t1, NULL_TREE);
596 if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
597 t2 = build_type_attribute_variant (t2, NULL_TREE);
599 /* Save time if the two types are the same. */
601 if (t1 == t2) return t1;
603 code1 = TREE_CODE (t1);
604 code2 = TREE_CODE (t2);
606 gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
607 || code1 == FIXED_POINT_TYPE || code1 == REAL_TYPE
608 || code1 == INTEGER_TYPE);
609 gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
610 || code2 == FIXED_POINT_TYPE || code2 == REAL_TYPE
611 || code2 == INTEGER_TYPE);
613 /* When one operand is a decimal float type, the other operand cannot be
614 a generic float type or a complex type. We also disallow vector types
615 here. */
616 if ((DECIMAL_FLOAT_TYPE_P (t1) || DECIMAL_FLOAT_TYPE_P (t2))
617 && !(DECIMAL_FLOAT_TYPE_P (t1) && DECIMAL_FLOAT_TYPE_P (t2)))
619 if (code1 == VECTOR_TYPE || code2 == VECTOR_TYPE)
621 error ("can%'t mix operands of decimal float and vector types");
622 return error_mark_node;
624 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
626 error ("can%'t mix operands of decimal float and complex types");
627 return error_mark_node;
629 if (code1 == REAL_TYPE && code2 == REAL_TYPE)
631 error ("can%'t mix operands of decimal float and other float types");
632 return error_mark_node;
636 /* If one type is a vector type, return that type. (How the usual
637 arithmetic conversions apply to the vector types extension is not
638 precisely specified.) */
639 if (code1 == VECTOR_TYPE)
640 return t1;
642 if (code2 == VECTOR_TYPE)
643 return t2;
645 /* If one type is complex, form the common type of the non-complex
646 components, then make that complex. Use T1 or T2 if it is the
647 required type. */
648 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
650 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
651 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
652 tree subtype = c_common_type (subtype1, subtype2);
654 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
655 return t1;
656 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
657 return t2;
658 else
659 return build_complex_type (subtype);
662 /* If only one is real, use it as the result. */
664 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
665 return t1;
667 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
668 return t2;
670 /* If both are real and either are decimal floating point types, use
671 the decimal floating point type with the greater precision. */
673 if (code1 == REAL_TYPE && code2 == REAL_TYPE)
675 if (TYPE_MAIN_VARIANT (t1) == dfloat128_type_node
676 || TYPE_MAIN_VARIANT (t2) == dfloat128_type_node)
677 return dfloat128_type_node;
678 else if (TYPE_MAIN_VARIANT (t1) == dfloat64_type_node
679 || TYPE_MAIN_VARIANT (t2) == dfloat64_type_node)
680 return dfloat64_type_node;
681 else if (TYPE_MAIN_VARIANT (t1) == dfloat32_type_node
682 || TYPE_MAIN_VARIANT (t2) == dfloat32_type_node)
683 return dfloat32_type_node;
686 /* Deal with fixed-point types. */
687 if (code1 == FIXED_POINT_TYPE || code2 == FIXED_POINT_TYPE)
689 unsigned int unsignedp = 0, satp = 0;
690 enum machine_mode m1, m2;
691 unsigned int fbit1, ibit1, fbit2, ibit2, max_fbit, max_ibit;
693 m1 = TYPE_MODE (t1);
694 m2 = TYPE_MODE (t2);
696 /* If one input type is saturating, the result type is saturating. */
697 if (TYPE_SATURATING (t1) || TYPE_SATURATING (t2))
698 satp = 1;
700 /* If both fixed-point types are unsigned, the result type is unsigned.
701 When mixing fixed-point and integer types, follow the sign of the
702 fixed-point type.
703 Otherwise, the result type is signed. */
704 if ((TYPE_UNSIGNED (t1) && TYPE_UNSIGNED (t2)
705 && code1 == FIXED_POINT_TYPE && code2 == FIXED_POINT_TYPE)
706 || (code1 == FIXED_POINT_TYPE && code2 != FIXED_POINT_TYPE
707 && TYPE_UNSIGNED (t1))
708 || (code1 != FIXED_POINT_TYPE && code2 == FIXED_POINT_TYPE
709 && TYPE_UNSIGNED (t2)))
710 unsignedp = 1;
712 /* The result type is signed. */
713 if (unsignedp == 0)
715 /* If the input type is unsigned, we need to convert to the
716 signed type. */
717 if (code1 == FIXED_POINT_TYPE && TYPE_UNSIGNED (t1))
719 unsigned char mclass = 0;
720 if (GET_MODE_CLASS (m1) == MODE_UFRACT)
721 mclass = MODE_FRACT;
722 else if (GET_MODE_CLASS (m1) == MODE_UACCUM)
723 mclass = MODE_ACCUM;
724 else
725 gcc_unreachable ();
726 m1 = mode_for_size (GET_MODE_PRECISION (m1), mclass, 0);
728 if (code2 == FIXED_POINT_TYPE && TYPE_UNSIGNED (t2))
730 unsigned char mclass = 0;
731 if (GET_MODE_CLASS (m2) == MODE_UFRACT)
732 mclass = MODE_FRACT;
733 else if (GET_MODE_CLASS (m2) == MODE_UACCUM)
734 mclass = MODE_ACCUM;
735 else
736 gcc_unreachable ();
737 m2 = mode_for_size (GET_MODE_PRECISION (m2), mclass, 0);
741 if (code1 == FIXED_POINT_TYPE)
743 fbit1 = GET_MODE_FBIT (m1);
744 ibit1 = GET_MODE_IBIT (m1);
746 else
748 fbit1 = 0;
749 /* Signed integers need to subtract one sign bit. */
750 ibit1 = TYPE_PRECISION (t1) - (!TYPE_UNSIGNED (t1));
753 if (code2 == FIXED_POINT_TYPE)
755 fbit2 = GET_MODE_FBIT (m2);
756 ibit2 = GET_MODE_IBIT (m2);
758 else
760 fbit2 = 0;
761 /* Signed integers need to subtract one sign bit. */
762 ibit2 = TYPE_PRECISION (t2) - (!TYPE_UNSIGNED (t2));
765 max_ibit = ibit1 >= ibit2 ? ibit1 : ibit2;
766 max_fbit = fbit1 >= fbit2 ? fbit1 : fbit2;
767 return c_common_fixed_point_type_for_size (max_ibit, max_fbit, unsignedp,
768 satp);
771 /* Both real or both integers; use the one with greater precision. */
773 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
774 return t1;
775 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
776 return t2;
778 /* Same precision. Prefer long longs to longs to ints when the
779 same precision, following the C99 rules on integer type rank
780 (which are equivalent to the C90 rules for C90 types). */
782 if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
783 || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
784 return long_long_unsigned_type_node;
786 if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
787 || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
789 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
790 return long_long_unsigned_type_node;
791 else
792 return long_long_integer_type_node;
795 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
796 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
797 return long_unsigned_type_node;
799 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
800 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
802 /* But preserve unsignedness from the other type,
803 since long cannot hold all the values of an unsigned int. */
804 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
805 return long_unsigned_type_node;
806 else
807 return long_integer_type_node;
810 /* Likewise, prefer long double to double even if same size. */
811 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
812 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
813 return long_double_type_node;
815 /* Otherwise prefer the unsigned one. */
817 if (TYPE_UNSIGNED (t1))
818 return t1;
819 else
820 return t2;
823 /* Wrapper around c_common_type that is used by c-common.c and other
824 front end optimizations that remove promotions. ENUMERAL_TYPEs
825 are allowed here and are converted to their compatible integer types.
826 BOOLEAN_TYPEs are allowed here and return either boolean_type_node or
827 preferably a non-Boolean type as the common type. */
828 tree
829 common_type (tree t1, tree t2)
831 if (TREE_CODE (t1) == ENUMERAL_TYPE)
832 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
833 if (TREE_CODE (t2) == ENUMERAL_TYPE)
834 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
836 /* If both types are BOOLEAN_TYPE, then return boolean_type_node. */
837 if (TREE_CODE (t1) == BOOLEAN_TYPE
838 && TREE_CODE (t2) == BOOLEAN_TYPE)
839 return boolean_type_node;
841 /* If either type is BOOLEAN_TYPE, then return the other. */
842 if (TREE_CODE (t1) == BOOLEAN_TYPE)
843 return t2;
844 if (TREE_CODE (t2) == BOOLEAN_TYPE)
845 return t1;
847 return c_common_type (t1, t2);
850 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
851 or various other operations. Return 2 if they are compatible
852 but a warning may be needed if you use them together. */
855 comptypes (tree type1, tree type2)
857 const struct tagged_tu_seen_cache * tagged_tu_seen_base1 = tagged_tu_seen_base;
858 int val;
860 val = comptypes_internal (type1, type2);
861 free_all_tagged_tu_seen_up_to (tagged_tu_seen_base1);
863 return val;
866 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
867 or various other operations. Return 2 if they are compatible
868 but a warning may be needed if you use them together. This
869 differs from comptypes, in that we don't free the seen types. */
871 static int
872 comptypes_internal (const_tree type1, const_tree type2)
874 const_tree t1 = type1;
875 const_tree t2 = type2;
876 int attrval, val;
878 /* Suppress errors caused by previously reported errors. */
880 if (t1 == t2 || !t1 || !t2
881 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
882 return 1;
884 /* If either type is the internal version of sizetype, return the
885 language version. */
886 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
887 && TYPE_ORIG_SIZE_TYPE (t1))
888 t1 = TYPE_ORIG_SIZE_TYPE (t1);
890 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
891 && TYPE_ORIG_SIZE_TYPE (t2))
892 t2 = TYPE_ORIG_SIZE_TYPE (t2);
895 /* Enumerated types are compatible with integer types, but this is
896 not transitive: two enumerated types in the same translation unit
897 are compatible with each other only if they are the same type. */
899 if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
900 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
901 else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
902 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
904 if (t1 == t2)
905 return 1;
907 /* Different classes of types can't be compatible. */
909 if (TREE_CODE (t1) != TREE_CODE (t2))
910 return 0;
912 /* Qualifiers must match. C99 6.7.3p9 */
914 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
915 return 0;
917 /* Allow for two different type nodes which have essentially the same
918 definition. Note that we already checked for equality of the type
919 qualifiers (just above). */
921 if (TREE_CODE (t1) != ARRAY_TYPE
922 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
923 return 1;
925 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
926 if (!(attrval = targetm.comp_type_attributes (t1, t2)))
927 return 0;
929 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
930 val = 0;
932 switch (TREE_CODE (t1))
934 case POINTER_TYPE:
935 /* Do not remove mode or aliasing information. */
936 if (TYPE_MODE (t1) != TYPE_MODE (t2)
937 || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2))
938 break;
939 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
940 ? 1 : comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2)));
941 break;
943 case FUNCTION_TYPE:
944 val = function_types_compatible_p (t1, t2);
945 break;
947 case ARRAY_TYPE:
949 tree d1 = TYPE_DOMAIN (t1);
950 tree d2 = TYPE_DOMAIN (t2);
951 bool d1_variable, d2_variable;
952 bool d1_zero, d2_zero;
953 val = 1;
955 /* Target types must match incl. qualifiers. */
956 if (TREE_TYPE (t1) != TREE_TYPE (t2)
957 && 0 == (val = comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2))))
958 return 0;
960 /* Sizes must match unless one is missing or variable. */
961 if (d1 == 0 || d2 == 0 || d1 == d2)
962 break;
964 d1_zero = !TYPE_MAX_VALUE (d1);
965 d2_zero = !TYPE_MAX_VALUE (d2);
967 d1_variable = (!d1_zero
968 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
969 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
970 d2_variable = (!d2_zero
971 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
972 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
973 d1_variable = d1_variable || (d1_zero && c_vla_type_p (t1));
974 d2_variable = d2_variable || (d2_zero && c_vla_type_p (t2));
976 if (d1_variable || d2_variable)
977 break;
978 if (d1_zero && d2_zero)
979 break;
980 if (d1_zero || d2_zero
981 || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
982 || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
983 val = 0;
985 break;
988 case ENUMERAL_TYPE:
989 case RECORD_TYPE:
990 case UNION_TYPE:
991 if (val != 1 && !same_translation_unit_p (t1, t2))
993 tree a1 = TYPE_ATTRIBUTES (t1);
994 tree a2 = TYPE_ATTRIBUTES (t2);
996 if (! attribute_list_contained (a1, a2)
997 && ! attribute_list_contained (a2, a1))
998 break;
1000 if (attrval != 2)
1001 return tagged_types_tu_compatible_p (t1, t2);
1002 val = tagged_types_tu_compatible_p (t1, t2);
1004 break;
1006 case VECTOR_TYPE:
1007 val = TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
1008 && comptypes_internal (TREE_TYPE (t1), TREE_TYPE (t2));
1009 break;
1011 default:
1012 break;
1014 return attrval == 2 && val == 1 ? 2 : val;
1017 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
1018 ignoring their qualifiers. */
1020 static int
1021 comp_target_types (tree ttl, tree ttr)
1023 int val;
1024 tree mvl, mvr;
1026 /* Do not lose qualifiers on element types of array types that are
1027 pointer targets by taking their TYPE_MAIN_VARIANT. */
1028 mvl = TREE_TYPE (ttl);
1029 mvr = TREE_TYPE (ttr);
1030 if (TREE_CODE (mvl) != ARRAY_TYPE)
1031 mvl = TYPE_MAIN_VARIANT (mvl);
1032 if (TREE_CODE (mvr) != ARRAY_TYPE)
1033 mvr = TYPE_MAIN_VARIANT (mvr);
1034 val = comptypes (mvl, mvr);
1036 if (val == 2 && pedantic)
1037 pedwarn ("types are not quite compatible");
1038 return val;
1041 /* Subroutines of `comptypes'. */
1043 /* Determine whether two trees derive from the same translation unit.
1044 If the CONTEXT chain ends in a null, that tree's context is still
1045 being parsed, so if two trees have context chains ending in null,
1046 they're in the same translation unit. */
1048 same_translation_unit_p (const_tree t1, const_tree t2)
1050 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
1051 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
1053 case tcc_declaration:
1054 t1 = DECL_CONTEXT (t1); break;
1055 case tcc_type:
1056 t1 = TYPE_CONTEXT (t1); break;
1057 case tcc_exceptional:
1058 t1 = BLOCK_SUPERCONTEXT (t1); break; /* assume block */
1059 default: gcc_unreachable ();
1062 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
1063 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
1065 case tcc_declaration:
1066 t2 = DECL_CONTEXT (t2); break;
1067 case tcc_type:
1068 t2 = TYPE_CONTEXT (t2); break;
1069 case tcc_exceptional:
1070 t2 = BLOCK_SUPERCONTEXT (t2); break; /* assume block */
1071 default: gcc_unreachable ();
1074 return t1 == t2;
1077 /* Allocate the seen two types, assuming that they are compatible. */
1079 static struct tagged_tu_seen_cache *
1080 alloc_tagged_tu_seen_cache (const_tree t1, const_tree t2)
1082 struct tagged_tu_seen_cache *tu = XNEW (struct tagged_tu_seen_cache);
1083 tu->next = tagged_tu_seen_base;
1084 tu->t1 = t1;
1085 tu->t2 = t2;
1087 tagged_tu_seen_base = tu;
1089 /* The C standard says that two structures in different translation
1090 units are compatible with each other only if the types of their
1091 fields are compatible (among other things). We assume that they
1092 are compatible until proven otherwise when building the cache.
1093 An example where this can occur is:
1094 struct a
1096 struct a *next;
1098 If we are comparing this against a similar struct in another TU,
1099 and did not assume they were compatible, we end up with an infinite
1100 loop. */
1101 tu->val = 1;
1102 return tu;
1105 /* Free the seen types until we get to TU_TIL. */
1107 static void
1108 free_all_tagged_tu_seen_up_to (const struct tagged_tu_seen_cache *tu_til)
1110 const struct tagged_tu_seen_cache *tu = tagged_tu_seen_base;
1111 while (tu != tu_til)
1113 const struct tagged_tu_seen_cache *const tu1
1114 = (const struct tagged_tu_seen_cache *) tu;
1115 tu = tu1->next;
1116 free (CONST_CAST (struct tagged_tu_seen_cache *, tu1));
1118 tagged_tu_seen_base = tu_til;
1121 /* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
1122 compatible. If the two types are not the same (which has been
1123 checked earlier), this can only happen when multiple translation
1124 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
1125 rules. */
1127 static int
1128 tagged_types_tu_compatible_p (const_tree t1, const_tree t2)
1130 tree s1, s2;
1131 bool needs_warning = false;
1133 /* We have to verify that the tags of the types are the same. This
1134 is harder than it looks because this may be a typedef, so we have
1135 to go look at the original type. It may even be a typedef of a
1136 typedef...
1137 In the case of compiler-created builtin structs the TYPE_DECL
1138 may be a dummy, with no DECL_ORIGINAL_TYPE. Don't fault. */
1139 while (TYPE_NAME (t1)
1140 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
1141 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
1142 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
1144 while (TYPE_NAME (t2)
1145 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL
1146 && DECL_ORIGINAL_TYPE (TYPE_NAME (t2)))
1147 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
1149 /* C90 didn't have the requirement that the two tags be the same. */
1150 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
1151 return 0;
1153 /* C90 didn't say what happened if one or both of the types were
1154 incomplete; we choose to follow C99 rules here, which is that they
1155 are compatible. */
1156 if (TYPE_SIZE (t1) == NULL
1157 || TYPE_SIZE (t2) == NULL)
1158 return 1;
1161 const struct tagged_tu_seen_cache * tts_i;
1162 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
1163 if (tts_i->t1 == t1 && tts_i->t2 == t2)
1164 return tts_i->val;
1167 switch (TREE_CODE (t1))
1169 case ENUMERAL_TYPE:
1171 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1172 /* Speed up the case where the type values are in the same order. */
1173 tree tv1 = TYPE_VALUES (t1);
1174 tree tv2 = TYPE_VALUES (t2);
1176 if (tv1 == tv2)
1178 return 1;
1181 for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
1183 if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
1184 break;
1185 if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
1187 tu->val = 0;
1188 return 0;
1192 if (tv1 == NULL_TREE && tv2 == NULL_TREE)
1194 return 1;
1196 if (tv1 == NULL_TREE || tv2 == NULL_TREE)
1198 tu->val = 0;
1199 return 0;
1202 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
1204 tu->val = 0;
1205 return 0;
1208 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
1210 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
1211 if (s2 == NULL
1212 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
1214 tu->val = 0;
1215 return 0;
1218 return 1;
1221 case UNION_TYPE:
1223 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1224 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
1226 tu->val = 0;
1227 return 0;
1230 /* Speed up the common case where the fields are in the same order. */
1231 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2); s1 && s2;
1232 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
1234 int result;
1237 if (DECL_NAME (s1) == NULL
1238 || DECL_NAME (s1) != DECL_NAME (s2))
1239 break;
1240 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2));
1241 if (result == 0)
1243 tu->val = 0;
1244 return 0;
1246 if (result == 2)
1247 needs_warning = true;
1249 if (TREE_CODE (s1) == FIELD_DECL
1250 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1251 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1253 tu->val = 0;
1254 return 0;
1257 if (!s1 && !s2)
1259 tu->val = needs_warning ? 2 : 1;
1260 return tu->val;
1263 for (s1 = TYPE_FIELDS (t1); s1; s1 = TREE_CHAIN (s1))
1265 bool ok = false;
1267 if (DECL_NAME (s1) != NULL)
1268 for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
1269 if (DECL_NAME (s1) == DECL_NAME (s2))
1271 int result;
1272 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2));
1273 if (result == 0)
1275 tu->val = 0;
1276 return 0;
1278 if (result == 2)
1279 needs_warning = true;
1281 if (TREE_CODE (s1) == FIELD_DECL
1282 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1283 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1284 break;
1286 ok = true;
1287 break;
1289 if (!ok)
1291 tu->val = 0;
1292 return 0;
1295 tu->val = needs_warning ? 2 : 10;
1296 return tu->val;
1299 case RECORD_TYPE:
1301 struct tagged_tu_seen_cache *tu = alloc_tagged_tu_seen_cache (t1, t2);
1303 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
1304 s1 && s2;
1305 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
1307 int result;
1308 if (TREE_CODE (s1) != TREE_CODE (s2)
1309 || DECL_NAME (s1) != DECL_NAME (s2))
1310 break;
1311 result = comptypes_internal (TREE_TYPE (s1), TREE_TYPE (s2));
1312 if (result == 0)
1313 break;
1314 if (result == 2)
1315 needs_warning = true;
1317 if (TREE_CODE (s1) == FIELD_DECL
1318 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1319 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1320 break;
1322 if (s1 && s2)
1323 tu->val = 0;
1324 else
1325 tu->val = needs_warning ? 2 : 1;
1326 return tu->val;
1329 default:
1330 gcc_unreachable ();
1334 /* Return 1 if two function types F1 and F2 are compatible.
1335 If either type specifies no argument types,
1336 the other must specify a fixed number of self-promoting arg types.
1337 Otherwise, if one type specifies only the number of arguments,
1338 the other must specify that number of self-promoting arg types.
1339 Otherwise, the argument types must match. */
1341 static int
1342 function_types_compatible_p (const_tree f1, const_tree f2)
1344 tree args1, args2;
1345 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1346 int val = 1;
1347 int val1;
1348 tree ret1, ret2;
1350 ret1 = TREE_TYPE (f1);
1351 ret2 = TREE_TYPE (f2);
1353 /* 'volatile' qualifiers on a function's return type used to mean
1354 the function is noreturn. */
1355 if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
1356 pedwarn ("function return types not compatible due to %<volatile%>");
1357 if (TYPE_VOLATILE (ret1))
1358 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
1359 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
1360 if (TYPE_VOLATILE (ret2))
1361 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
1362 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
1363 val = comptypes_internal (ret1, ret2);
1364 if (val == 0)
1365 return 0;
1367 args1 = TYPE_ARG_TYPES (f1);
1368 args2 = TYPE_ARG_TYPES (f2);
1370 /* An unspecified parmlist matches any specified parmlist
1371 whose argument types don't need default promotions. */
1373 if (args1 == 0)
1375 if (!self_promoting_args_p (args2))
1376 return 0;
1377 /* If one of these types comes from a non-prototype fn definition,
1378 compare that with the other type's arglist.
1379 If they don't match, ask for a warning (but no error). */
1380 if (TYPE_ACTUAL_ARG_TYPES (f1)
1381 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
1382 val = 2;
1383 return val;
1385 if (args2 == 0)
1387 if (!self_promoting_args_p (args1))
1388 return 0;
1389 if (TYPE_ACTUAL_ARG_TYPES (f2)
1390 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
1391 val = 2;
1392 return val;
1395 /* Both types have argument lists: compare them and propagate results. */
1396 val1 = type_lists_compatible_p (args1, args2);
1397 return val1 != 1 ? val1 : val;
1400 /* Check two lists of types for compatibility,
1401 returning 0 for incompatible, 1 for compatible,
1402 or 2 for compatible with warning. */
1404 static int
1405 type_lists_compatible_p (const_tree args1, const_tree args2)
1407 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1408 int val = 1;
1409 int newval = 0;
1411 while (1)
1413 tree a1, mv1, a2, mv2;
1414 if (args1 == 0 && args2 == 0)
1415 return val;
1416 /* If one list is shorter than the other,
1417 they fail to match. */
1418 if (args1 == 0 || args2 == 0)
1419 return 0;
1420 mv1 = a1 = TREE_VALUE (args1);
1421 mv2 = a2 = TREE_VALUE (args2);
1422 if (mv1 && mv1 != error_mark_node && TREE_CODE (mv1) != ARRAY_TYPE)
1423 mv1 = TYPE_MAIN_VARIANT (mv1);
1424 if (mv2 && mv2 != error_mark_node && TREE_CODE (mv2) != ARRAY_TYPE)
1425 mv2 = TYPE_MAIN_VARIANT (mv2);
1426 /* A null pointer instead of a type
1427 means there is supposed to be an argument
1428 but nothing is specified about what type it has.
1429 So match anything that self-promotes. */
1430 if (a1 == 0)
1432 if (c_type_promotes_to (a2) != a2)
1433 return 0;
1435 else if (a2 == 0)
1437 if (c_type_promotes_to (a1) != a1)
1438 return 0;
1440 /* If one of the lists has an error marker, ignore this arg. */
1441 else if (TREE_CODE (a1) == ERROR_MARK
1442 || TREE_CODE (a2) == ERROR_MARK)
1444 else if (!(newval = comptypes_internal (mv1, mv2)))
1446 /* Allow wait (union {union wait *u; int *i} *)
1447 and wait (union wait *) to be compatible. */
1448 if (TREE_CODE (a1) == UNION_TYPE
1449 && (TYPE_NAME (a1) == 0
1450 || TYPE_TRANSPARENT_UNION (a1))
1451 && TREE_CODE (TYPE_SIZE (a1)) == INTEGER_CST
1452 && tree_int_cst_equal (TYPE_SIZE (a1),
1453 TYPE_SIZE (a2)))
1455 tree memb;
1456 for (memb = TYPE_FIELDS (a1);
1457 memb; memb = TREE_CHAIN (memb))
1459 tree mv3 = TREE_TYPE (memb);
1460 if (mv3 && mv3 != error_mark_node
1461 && TREE_CODE (mv3) != ARRAY_TYPE)
1462 mv3 = TYPE_MAIN_VARIANT (mv3);
1463 if (comptypes_internal (mv3, mv2))
1464 break;
1466 if (memb == 0)
1467 return 0;
1469 else if (TREE_CODE (a2) == UNION_TYPE
1470 && (TYPE_NAME (a2) == 0
1471 || TYPE_TRANSPARENT_UNION (a2))
1472 && TREE_CODE (TYPE_SIZE (a2)) == INTEGER_CST
1473 && tree_int_cst_equal (TYPE_SIZE (a2),
1474 TYPE_SIZE (a1)))
1476 tree memb;
1477 for (memb = TYPE_FIELDS (a2);
1478 memb; memb = TREE_CHAIN (memb))
1480 tree mv3 = TREE_TYPE (memb);
1481 if (mv3 && mv3 != error_mark_node
1482 && TREE_CODE (mv3) != ARRAY_TYPE)
1483 mv3 = TYPE_MAIN_VARIANT (mv3);
1484 if (comptypes_internal (mv3, mv1))
1485 break;
1487 if (memb == 0)
1488 return 0;
1490 else
1491 return 0;
1494 /* comptypes said ok, but record if it said to warn. */
1495 if (newval > val)
1496 val = newval;
1498 args1 = TREE_CHAIN (args1);
1499 args2 = TREE_CHAIN (args2);
1503 /* Compute the size to increment a pointer by. */
1505 static tree
1506 c_size_in_bytes (const_tree type)
1508 enum tree_code code = TREE_CODE (type);
1510 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
1511 return size_one_node;
1513 if (!COMPLETE_OR_VOID_TYPE_P (type))
1515 error ("arithmetic on pointer to an incomplete type");
1516 return size_one_node;
1519 /* Convert in case a char is more than one unit. */
1520 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
1521 size_int (TYPE_PRECISION (char_type_node)
1522 / BITS_PER_UNIT));
1525 /* Return either DECL or its known constant value (if it has one). */
1527 tree
1528 decl_constant_value (tree decl)
1530 if (/* Don't change a variable array bound or initial value to a constant
1531 in a place where a variable is invalid. Note that DECL_INITIAL
1532 isn't valid for a PARM_DECL. */
1533 current_function_decl != 0
1534 && TREE_CODE (decl) != PARM_DECL
1535 && !TREE_THIS_VOLATILE (decl)
1536 && TREE_READONLY (decl)
1537 && DECL_INITIAL (decl) != 0
1538 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
1539 /* This is invalid if initial value is not constant.
1540 If it has either a function call, a memory reference,
1541 or a variable, then re-evaluating it could give different results. */
1542 && TREE_CONSTANT (DECL_INITIAL (decl))
1543 /* Check for cases where this is sub-optimal, even though valid. */
1544 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
1545 return DECL_INITIAL (decl);
1546 return decl;
1549 /* Return either DECL or its known constant value (if it has one), but
1550 return DECL if pedantic or DECL has mode BLKmode. This is for
1551 bug-compatibility with the old behavior of decl_constant_value
1552 (before GCC 3.0); every use of this function is a bug and it should
1553 be removed before GCC 3.1. It is not appropriate to use pedantic
1554 in a way that affects optimization, and BLKmode is probably not the
1555 right test for avoiding misoptimizations either. */
1557 static tree
1558 decl_constant_value_for_broken_optimization (tree decl)
1560 tree ret;
1562 if (pedantic || DECL_MODE (decl) == BLKmode)
1563 return decl;
1565 ret = decl_constant_value (decl);
1566 /* Avoid unwanted tree sharing between the initializer and current
1567 function's body where the tree can be modified e.g. by the
1568 gimplifier. */
1569 if (ret != decl && TREE_STATIC (decl))
1570 ret = unshare_expr (ret);
1571 return ret;
1574 /* Convert the array expression EXP to a pointer. */
1575 static tree
1576 array_to_pointer_conversion (tree exp)
1578 tree orig_exp = exp;
1579 tree type = TREE_TYPE (exp);
1580 tree adr;
1581 tree restype = TREE_TYPE (type);
1582 tree ptrtype;
1584 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
1586 STRIP_TYPE_NOPS (exp);
1588 if (TREE_NO_WARNING (orig_exp))
1589 TREE_NO_WARNING (exp) = 1;
1591 ptrtype = build_pointer_type (restype);
1593 if (TREE_CODE (exp) == INDIRECT_REF)
1594 return convert (ptrtype, TREE_OPERAND (exp, 0));
1596 if (TREE_CODE (exp) == VAR_DECL)
1598 /* We are making an ADDR_EXPR of ptrtype. This is a valid
1599 ADDR_EXPR because it's the best way of representing what
1600 happens in C when we take the address of an array and place
1601 it in a pointer to the element type. */
1602 adr = build1 (ADDR_EXPR, ptrtype, exp);
1603 if (!c_mark_addressable (exp))
1604 return error_mark_node;
1605 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1606 return adr;
1609 /* This way is better for a COMPONENT_REF since it can
1610 simplify the offset for a component. */
1611 adr = build_unary_op (ADDR_EXPR, exp, 1);
1612 return convert (ptrtype, adr);
1615 /* Convert the function expression EXP to a pointer. */
1616 static tree
1617 function_to_pointer_conversion (tree exp)
1619 tree orig_exp = exp;
1621 gcc_assert (TREE_CODE (TREE_TYPE (exp)) == FUNCTION_TYPE);
1623 STRIP_TYPE_NOPS (exp);
1625 if (TREE_NO_WARNING (orig_exp))
1626 TREE_NO_WARNING (exp) = 1;
1628 return build_unary_op (ADDR_EXPR, exp, 0);
1631 /* Perform the default conversion of arrays and functions to pointers.
1632 Return the result of converting EXP. For any other expression, just
1633 return EXP after removing NOPs. */
1635 struct c_expr
1636 default_function_array_conversion (struct c_expr exp)
1638 tree orig_exp = exp.value;
1639 tree type = TREE_TYPE (exp.value);
1640 enum tree_code code = TREE_CODE (type);
1642 switch (code)
1644 case ARRAY_TYPE:
1646 bool not_lvalue = false;
1647 bool lvalue_array_p;
1649 while ((TREE_CODE (exp.value) == NON_LVALUE_EXPR
1650 || TREE_CODE (exp.value) == NOP_EXPR
1651 || TREE_CODE (exp.value) == CONVERT_EXPR)
1652 && TREE_TYPE (TREE_OPERAND (exp.value, 0)) == type)
1654 if (TREE_CODE (exp.value) == NON_LVALUE_EXPR)
1655 not_lvalue = true;
1656 exp.value = TREE_OPERAND (exp.value, 0);
1659 if (TREE_NO_WARNING (orig_exp))
1660 TREE_NO_WARNING (exp.value) = 1;
1662 lvalue_array_p = !not_lvalue && lvalue_p (exp.value);
1663 if (!flag_isoc99 && !lvalue_array_p)
1665 /* Before C99, non-lvalue arrays do not decay to pointers.
1666 Normally, using such an array would be invalid; but it can
1667 be used correctly inside sizeof or as a statement expression.
1668 Thus, do not give an error here; an error will result later. */
1669 return exp;
1672 exp.value = array_to_pointer_conversion (exp.value);
1674 break;
1675 case FUNCTION_TYPE:
1676 exp.value = function_to_pointer_conversion (exp.value);
1677 break;
1678 default:
1679 STRIP_TYPE_NOPS (exp.value);
1680 if (TREE_NO_WARNING (orig_exp))
1681 TREE_NO_WARNING (exp.value) = 1;
1682 break;
1685 return exp;
1689 /* EXP is an expression of integer type. Apply the integer promotions
1690 to it and return the promoted value. */
1692 tree
1693 perform_integral_promotions (tree exp)
1695 tree type = TREE_TYPE (exp);
1696 enum tree_code code = TREE_CODE (type);
1698 gcc_assert (INTEGRAL_TYPE_P (type));
1700 /* Normally convert enums to int,
1701 but convert wide enums to something wider. */
1702 if (code == ENUMERAL_TYPE)
1704 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
1705 TYPE_PRECISION (integer_type_node)),
1706 ((TYPE_PRECISION (type)
1707 >= TYPE_PRECISION (integer_type_node))
1708 && TYPE_UNSIGNED (type)));
1710 return convert (type, exp);
1713 /* ??? This should no longer be needed now bit-fields have their
1714 proper types. */
1715 if (TREE_CODE (exp) == COMPONENT_REF
1716 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
1717 /* If it's thinner than an int, promote it like a
1718 c_promoting_integer_type_p, otherwise leave it alone. */
1719 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
1720 TYPE_PRECISION (integer_type_node)))
1721 return convert (integer_type_node, exp);
1723 if (c_promoting_integer_type_p (type))
1725 /* Preserve unsignedness if not really getting any wider. */
1726 if (TYPE_UNSIGNED (type)
1727 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1728 return convert (unsigned_type_node, exp);
1730 return convert (integer_type_node, exp);
1733 return exp;
1737 /* Perform default promotions for C data used in expressions.
1738 Enumeral types or short or char are converted to int.
1739 In addition, manifest constants symbols are replaced by their values. */
1741 tree
1742 default_conversion (tree exp)
1744 tree orig_exp;
1745 tree type = TREE_TYPE (exp);
1746 enum tree_code code = TREE_CODE (type);
1748 /* Functions and arrays have been converted during parsing. */
1749 gcc_assert (code != FUNCTION_TYPE);
1750 if (code == ARRAY_TYPE)
1751 return exp;
1753 /* Constants can be used directly unless they're not loadable. */
1754 if (TREE_CODE (exp) == CONST_DECL)
1755 exp = DECL_INITIAL (exp);
1757 /* Replace a nonvolatile const static variable with its value unless
1758 it is an array, in which case we must be sure that taking the
1759 address of the array produces consistent results. */
1760 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
1762 exp = decl_constant_value_for_broken_optimization (exp);
1763 type = TREE_TYPE (exp);
1766 /* Strip no-op conversions. */
1767 orig_exp = exp;
1768 STRIP_TYPE_NOPS (exp);
1770 if (TREE_NO_WARNING (orig_exp))
1771 TREE_NO_WARNING (exp) = 1;
1773 if (code == VOID_TYPE)
1775 error ("void value not ignored as it ought to be");
1776 return error_mark_node;
1779 exp = require_complete_type (exp);
1780 if (exp == error_mark_node)
1781 return error_mark_node;
1783 if (INTEGRAL_TYPE_P (type))
1784 return perform_integral_promotions (exp);
1786 return exp;
1789 /* Look up COMPONENT in a structure or union DECL.
1791 If the component name is not found, returns NULL_TREE. Otherwise,
1792 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1793 stepping down the chain to the component, which is in the last
1794 TREE_VALUE of the list. Normally the list is of length one, but if
1795 the component is embedded within (nested) anonymous structures or
1796 unions, the list steps down the chain to the component. */
1798 static tree
1799 lookup_field (tree decl, tree component)
1801 tree type = TREE_TYPE (decl);
1802 tree field;
1804 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1805 to the field elements. Use a binary search on this array to quickly
1806 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1807 will always be set for structures which have many elements. */
1809 if (TYPE_LANG_SPECIFIC (type) && TYPE_LANG_SPECIFIC (type)->s)
1811 int bot, top, half;
1812 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
1814 field = TYPE_FIELDS (type);
1815 bot = 0;
1816 top = TYPE_LANG_SPECIFIC (type)->s->len;
1817 while (top - bot > 1)
1819 half = (top - bot + 1) >> 1;
1820 field = field_array[bot+half];
1822 if (DECL_NAME (field) == NULL_TREE)
1824 /* Step through all anon unions in linear fashion. */
1825 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1827 field = field_array[bot++];
1828 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1829 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1831 tree anon = lookup_field (field, component);
1833 if (anon)
1834 return tree_cons (NULL_TREE, field, anon);
1838 /* Entire record is only anon unions. */
1839 if (bot > top)
1840 return NULL_TREE;
1842 /* Restart the binary search, with new lower bound. */
1843 continue;
1846 if (DECL_NAME (field) == component)
1847 break;
1848 if (DECL_NAME (field) < component)
1849 bot += half;
1850 else
1851 top = bot + half;
1854 if (DECL_NAME (field_array[bot]) == component)
1855 field = field_array[bot];
1856 else if (DECL_NAME (field) != component)
1857 return NULL_TREE;
1859 else
1861 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1863 if (DECL_NAME (field) == NULL_TREE
1864 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1865 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1867 tree anon = lookup_field (field, component);
1869 if (anon)
1870 return tree_cons (NULL_TREE, field, anon);
1873 if (DECL_NAME (field) == component)
1874 break;
1877 if (field == NULL_TREE)
1878 return NULL_TREE;
1881 return tree_cons (NULL_TREE, field, NULL_TREE);
1884 /* Make an expression to refer to the COMPONENT field of
1885 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1887 tree
1888 build_component_ref (tree datum, tree component)
1890 tree type = TREE_TYPE (datum);
1891 enum tree_code code = TREE_CODE (type);
1892 tree field = NULL;
1893 tree ref;
1895 if (!objc_is_public (datum, component))
1896 return error_mark_node;
1898 /* See if there is a field or component with name COMPONENT. */
1900 if (code == RECORD_TYPE || code == UNION_TYPE)
1902 if (!COMPLETE_TYPE_P (type))
1904 c_incomplete_type_error (NULL_TREE, type);
1905 return error_mark_node;
1908 field = lookup_field (datum, component);
1910 if (!field)
1912 error ("%qT has no member named %qE", type, component);
1913 return error_mark_node;
1916 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1917 This might be better solved in future the way the C++ front
1918 end does it - by giving the anonymous entities each a
1919 separate name and type, and then have build_component_ref
1920 recursively call itself. We can't do that here. */
1923 tree subdatum = TREE_VALUE (field);
1924 int quals;
1925 tree subtype;
1927 if (TREE_TYPE (subdatum) == error_mark_node)
1928 return error_mark_node;
1930 quals = TYPE_QUALS (strip_array_types (TREE_TYPE (subdatum)));
1931 quals |= TYPE_QUALS (TREE_TYPE (datum));
1932 subtype = c_build_qualified_type (TREE_TYPE (subdatum), quals);
1934 ref = build3 (COMPONENT_REF, subtype, datum, subdatum,
1935 NULL_TREE);
1936 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
1937 TREE_READONLY (ref) = 1;
1938 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
1939 TREE_THIS_VOLATILE (ref) = 1;
1941 if (TREE_DEPRECATED (subdatum))
1942 warn_deprecated_use (subdatum);
1944 datum = ref;
1946 field = TREE_CHAIN (field);
1948 while (field);
1950 return ref;
1952 else if (code != ERROR_MARK)
1953 error ("request for member %qE in something not a structure or union",
1954 component);
1956 return error_mark_node;
1959 /* Given an expression PTR for a pointer, return an expression
1960 for the value pointed to.
1961 ERRORSTRING is the name of the operator to appear in error messages. */
1963 tree
1964 build_indirect_ref (tree ptr, const char *errorstring)
1966 tree pointer = default_conversion (ptr);
1967 tree type = TREE_TYPE (pointer);
1969 if (TREE_CODE (type) == POINTER_TYPE)
1971 if (TREE_CODE (pointer) == CONVERT_EXPR
1972 || TREE_CODE (pointer) == NOP_EXPR
1973 || TREE_CODE (pointer) == VIEW_CONVERT_EXPR)
1975 /* If a warning is issued, mark it to avoid duplicates from
1976 the backend. This only needs to be done at
1977 warn_strict_aliasing > 2. */
1978 if (warn_strict_aliasing > 2)
1979 if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (pointer, 0)),
1980 type, TREE_OPERAND (pointer, 0)))
1981 TREE_NO_WARNING (pointer) = 1;
1984 if (TREE_CODE (pointer) == ADDR_EXPR
1985 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1986 == TREE_TYPE (type)))
1987 return TREE_OPERAND (pointer, 0);
1988 else
1990 tree t = TREE_TYPE (type);
1991 tree ref;
1993 ref = build1 (INDIRECT_REF, t, pointer);
1995 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1997 error ("dereferencing pointer to incomplete type");
1998 return error_mark_node;
2000 if (VOID_TYPE_P (t) && skip_evaluation == 0)
2001 warning (0, "dereferencing %<void *%> pointer");
2003 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
2004 so that we get the proper error message if the result is used
2005 to assign to. Also, &* is supposed to be a no-op.
2006 And ANSI C seems to specify that the type of the result
2007 should be the const type. */
2008 /* A de-reference of a pointer to const is not a const. It is valid
2009 to change it via some other pointer. */
2010 TREE_READONLY (ref) = TYPE_READONLY (t);
2011 TREE_SIDE_EFFECTS (ref)
2012 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
2013 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
2014 return ref;
2017 else if (TREE_CODE (pointer) != ERROR_MARK)
2018 error ("invalid type argument of %qs (have %qT)", errorstring, type);
2019 return error_mark_node;
2022 /* This handles expressions of the form "a[i]", which denotes
2023 an array reference.
2025 This is logically equivalent in C to *(a+i), but we may do it differently.
2026 If A is a variable or a member, we generate a primitive ARRAY_REF.
2027 This avoids forcing the array out of registers, and can work on
2028 arrays that are not lvalues (for example, members of structures returned
2029 by functions). */
2031 tree
2032 build_array_ref (tree array, tree index)
2034 bool swapped = false;
2035 if (TREE_TYPE (array) == error_mark_node
2036 || TREE_TYPE (index) == error_mark_node)
2037 return error_mark_node;
2039 if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
2040 && TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE)
2042 tree temp;
2043 if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
2044 && TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
2046 error ("subscripted value is neither array nor pointer");
2047 return error_mark_node;
2049 temp = array;
2050 array = index;
2051 index = temp;
2052 swapped = true;
2055 if (!INTEGRAL_TYPE_P (TREE_TYPE (index)))
2057 error ("array subscript is not an integer");
2058 return error_mark_node;
2061 if (TREE_CODE (TREE_TYPE (TREE_TYPE (array))) == FUNCTION_TYPE)
2063 error ("subscripted value is pointer to function");
2064 return error_mark_node;
2067 /* ??? Existing practice has been to warn only when the char
2068 index is syntactically the index, not for char[array]. */
2069 if (!swapped)
2070 warn_array_subscript_with_type_char (index);
2072 /* Apply default promotions *after* noticing character types. */
2073 index = default_conversion (index);
2075 gcc_assert (TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE);
2077 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
2079 tree rval, type;
2081 /* An array that is indexed by a non-constant
2082 cannot be stored in a register; we must be able to do
2083 address arithmetic on its address.
2084 Likewise an array of elements of variable size. */
2085 if (TREE_CODE (index) != INTEGER_CST
2086 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
2087 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
2089 if (!c_mark_addressable (array))
2090 return error_mark_node;
2092 /* An array that is indexed by a constant value which is not within
2093 the array bounds cannot be stored in a register either; because we
2094 would get a crash in store_bit_field/extract_bit_field when trying
2095 to access a non-existent part of the register. */
2096 if (TREE_CODE (index) == INTEGER_CST
2097 && TYPE_DOMAIN (TREE_TYPE (array))
2098 && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
2100 if (!c_mark_addressable (array))
2101 return error_mark_node;
2104 if (pedantic)
2106 tree foo = array;
2107 while (TREE_CODE (foo) == COMPONENT_REF)
2108 foo = TREE_OPERAND (foo, 0);
2109 if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
2110 pedwarn ("ISO C forbids subscripting %<register%> array");
2111 else if (!flag_isoc99 && !lvalue_p (foo))
2112 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
2115 type = TREE_TYPE (TREE_TYPE (array));
2116 if (TREE_CODE (type) != ARRAY_TYPE)
2117 type = TYPE_MAIN_VARIANT (type);
2118 rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
2119 /* Array ref is const/volatile if the array elements are
2120 or if the array is. */
2121 TREE_READONLY (rval)
2122 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
2123 | TREE_READONLY (array));
2124 TREE_SIDE_EFFECTS (rval)
2125 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
2126 | TREE_SIDE_EFFECTS (array));
2127 TREE_THIS_VOLATILE (rval)
2128 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
2129 /* This was added by rms on 16 Nov 91.
2130 It fixes vol struct foo *a; a->elts[1]
2131 in an inline function.
2132 Hope it doesn't break something else. */
2133 | TREE_THIS_VOLATILE (array));
2134 return require_complete_type (fold (rval));
2136 else
2138 tree ar = default_conversion (array);
2140 if (ar == error_mark_node)
2141 return ar;
2143 gcc_assert (TREE_CODE (TREE_TYPE (ar)) == POINTER_TYPE);
2144 gcc_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) != FUNCTION_TYPE);
2146 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, index, 0),
2147 "array indexing");
2151 /* Build an external reference to identifier ID. FUN indicates
2152 whether this will be used for a function call. LOC is the source
2153 location of the identifier. */
2154 tree
2155 build_external_ref (tree id, int fun, location_t loc)
2157 tree ref;
2158 tree decl = lookup_name (id);
2160 /* In Objective-C, an instance variable (ivar) may be preferred to
2161 whatever lookup_name() found. */
2162 decl = objc_lookup_ivar (decl, id);
2164 if (decl && decl != error_mark_node)
2165 ref = decl;
2166 else if (fun)
2167 /* Implicit function declaration. */
2168 ref = implicitly_declare (id);
2169 else if (decl == error_mark_node)
2170 /* Don't complain about something that's already been
2171 complained about. */
2172 return error_mark_node;
2173 else
2175 undeclared_variable (id, loc);
2176 return error_mark_node;
2179 if (TREE_TYPE (ref) == error_mark_node)
2180 return error_mark_node;
2182 if (TREE_DEPRECATED (ref))
2183 warn_deprecated_use (ref);
2185 /* Recursive call does not count as usage. */
2186 if (ref != current_function_decl)
2188 if (!skip_evaluation)
2189 assemble_external (ref);
2190 TREE_USED (ref) = 1;
2193 if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
2195 if (!in_sizeof && !in_typeof)
2196 C_DECL_USED (ref) = 1;
2197 else if (DECL_INITIAL (ref) == 0
2198 && DECL_EXTERNAL (ref)
2199 && !TREE_PUBLIC (ref))
2200 record_maybe_used_decl (ref);
2203 if (TREE_CODE (ref) == CONST_DECL)
2205 used_types_insert (TREE_TYPE (ref));
2206 ref = DECL_INITIAL (ref);
2207 TREE_CONSTANT (ref) = 1;
2208 TREE_INVARIANT (ref) = 1;
2210 else if (current_function_decl != 0
2211 && !DECL_FILE_SCOPE_P (current_function_decl)
2212 && (TREE_CODE (ref) == VAR_DECL
2213 || TREE_CODE (ref) == PARM_DECL
2214 || TREE_CODE (ref) == FUNCTION_DECL))
2216 tree context = decl_function_context (ref);
2218 if (context != 0 && context != current_function_decl)
2219 DECL_NONLOCAL (ref) = 1;
2221 /* C99 6.7.4p3: An inline definition of a function with external
2222 linkage ... shall not contain a reference to an identifier with
2223 internal linkage. */
2224 else if (current_function_decl != 0
2225 && DECL_DECLARED_INLINE_P (current_function_decl)
2226 && DECL_EXTERNAL (current_function_decl)
2227 && VAR_OR_FUNCTION_DECL_P (ref)
2228 && (TREE_CODE (ref) != VAR_DECL || TREE_STATIC (ref))
2229 && ! TREE_PUBLIC (ref))
2230 pedwarn ("%H%qD is static but used in inline function %qD "
2231 "which is not static", &loc, ref, current_function_decl);
2233 return ref;
2236 /* Record details of decls possibly used inside sizeof or typeof. */
2237 struct maybe_used_decl
2239 /* The decl. */
2240 tree decl;
2241 /* The level seen at (in_sizeof + in_typeof). */
2242 int level;
2243 /* The next one at this level or above, or NULL. */
2244 struct maybe_used_decl *next;
2247 static struct maybe_used_decl *maybe_used_decls;
2249 /* Record that DECL, an undefined static function reference seen
2250 inside sizeof or typeof, might be used if the operand of sizeof is
2251 a VLA type or the operand of typeof is a variably modified
2252 type. */
2254 static void
2255 record_maybe_used_decl (tree decl)
2257 struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
2258 t->decl = decl;
2259 t->level = in_sizeof + in_typeof;
2260 t->next = maybe_used_decls;
2261 maybe_used_decls = t;
2264 /* Pop the stack of decls possibly used inside sizeof or typeof. If
2265 USED is false, just discard them. If it is true, mark them used
2266 (if no longer inside sizeof or typeof) or move them to the next
2267 level up (if still inside sizeof or typeof). */
2269 void
2270 pop_maybe_used (bool used)
2272 struct maybe_used_decl *p = maybe_used_decls;
2273 int cur_level = in_sizeof + in_typeof;
2274 while (p && p->level > cur_level)
2276 if (used)
2278 if (cur_level == 0)
2279 C_DECL_USED (p->decl) = 1;
2280 else
2281 p->level = cur_level;
2283 p = p->next;
2285 if (!used || cur_level == 0)
2286 maybe_used_decls = p;
2289 /* Return the result of sizeof applied to EXPR. */
2291 struct c_expr
2292 c_expr_sizeof_expr (struct c_expr expr)
2294 struct c_expr ret;
2295 if (expr.value == error_mark_node)
2297 ret.value = error_mark_node;
2298 ret.original_code = ERROR_MARK;
2299 pop_maybe_used (false);
2301 else
2303 ret.value = c_sizeof (TREE_TYPE (expr.value));
2304 ret.original_code = ERROR_MARK;
2305 if (c_vla_type_p (TREE_TYPE (expr.value)))
2307 /* sizeof is evaluated when given a vla (C99 6.5.3.4p2). */
2308 ret.value = build2 (COMPOUND_EXPR, TREE_TYPE (ret.value), expr.value, ret.value);
2310 pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
2312 return ret;
2315 /* Return the result of sizeof applied to T, a structure for the type
2316 name passed to sizeof (rather than the type itself). */
2318 struct c_expr
2319 c_expr_sizeof_type (struct c_type_name *t)
2321 tree type;
2322 struct c_expr ret;
2323 type = groktypename (t);
2324 ret.value = c_sizeof (type);
2325 ret.original_code = ERROR_MARK;
2326 pop_maybe_used (type != error_mark_node
2327 ? C_TYPE_VARIABLE_SIZE (type) : false);
2328 return ret;
2331 /* Build a function call to function FUNCTION with parameters PARAMS.
2332 PARAMS is a list--a chain of TREE_LIST nodes--in which the
2333 TREE_VALUE of each node is a parameter-expression.
2334 FUNCTION's data type may be a function type or a pointer-to-function. */
2336 tree
2337 build_function_call (tree function, tree params)
2339 tree fntype, fundecl = 0;
2340 tree name = NULL_TREE, result;
2341 tree tem;
2342 int nargs;
2343 tree *argarray;
2346 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
2347 STRIP_TYPE_NOPS (function);
2349 /* Convert anything with function type to a pointer-to-function. */
2350 if (TREE_CODE (function) == FUNCTION_DECL)
2352 /* Implement type-directed function overloading for builtins.
2353 resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
2354 handle all the type checking. The result is a complete expression
2355 that implements this function call. */
2356 tem = resolve_overloaded_builtin (function, params);
2357 if (tem)
2358 return tem;
2360 name = DECL_NAME (function);
2361 fundecl = function;
2363 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE)
2364 function = function_to_pointer_conversion (function);
2366 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2367 expressions, like those used for ObjC messenger dispatches. */
2368 function = objc_rewrite_function_call (function, params);
2370 fntype = TREE_TYPE (function);
2372 if (TREE_CODE (fntype) == ERROR_MARK)
2373 return error_mark_node;
2375 if (!(TREE_CODE (fntype) == POINTER_TYPE
2376 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
2378 error ("called object %qE is not a function", function);
2379 return error_mark_node;
2382 if (fundecl && TREE_THIS_VOLATILE (fundecl))
2383 current_function_returns_abnormally = 1;
2385 /* fntype now gets the type of function pointed to. */
2386 fntype = TREE_TYPE (fntype);
2388 /* Check that the function is called through a compatible prototype.
2389 If it is not, replace the call by a trap, wrapped up in a compound
2390 expression if necessary. This has the nice side-effect to prevent
2391 the tree-inliner from generating invalid assignment trees which may
2392 blow up in the RTL expander later. */
2393 if ((TREE_CODE (function) == NOP_EXPR
2394 || TREE_CODE (function) == CONVERT_EXPR)
2395 && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
2396 && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
2397 && !comptypes (fntype, TREE_TYPE (tem)))
2399 tree return_type = TREE_TYPE (fntype);
2400 tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
2401 NULL_TREE);
2403 /* This situation leads to run-time undefined behavior. We can't,
2404 therefore, simply error unless we can prove that all possible
2405 executions of the program must execute the code. */
2406 warning (0, "function called through a non-compatible type");
2408 /* We can, however, treat "undefined" any way we please.
2409 Call abort to encourage the user to fix the program. */
2410 inform ("if this code is reached, the program will abort");
2412 if (VOID_TYPE_P (return_type))
2413 return trap;
2414 else
2416 tree rhs;
2418 if (AGGREGATE_TYPE_P (return_type))
2419 rhs = build_compound_literal (return_type,
2420 build_constructor (return_type, 0));
2421 else
2422 rhs = fold_convert (return_type, integer_zero_node);
2424 return build2 (COMPOUND_EXPR, return_type, trap, rhs);
2428 /* Convert the parameters to the types declared in the
2429 function prototype, or apply default promotions. */
2431 nargs = list_length (params);
2432 argarray = (tree *) alloca (nargs * sizeof (tree));
2433 nargs = convert_arguments (nargs, argarray, TYPE_ARG_TYPES (fntype),
2434 params, function, fundecl);
2435 if (nargs < 0)
2436 return error_mark_node;
2438 /* Check that the arguments to the function are valid. */
2440 check_function_arguments (TYPE_ATTRIBUTES (fntype), nargs, argarray,
2441 TYPE_ARG_TYPES (fntype));
2443 if (require_constant_value)
2445 result = fold_build_call_array_initializer (TREE_TYPE (fntype),
2446 function, nargs, argarray);
2447 if (TREE_CONSTANT (result)
2448 && (name == NULL_TREE
2449 || strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10) != 0))
2450 pedwarn_init ("initializer element is not constant");
2452 else
2453 result = fold_build_call_array (TREE_TYPE (fntype),
2454 function, nargs, argarray);
2456 if (VOID_TYPE_P (TREE_TYPE (result)))
2457 return result;
2458 return require_complete_type (result);
2461 /* Convert the argument expressions in the list VALUES
2462 to the types in the list TYPELIST. The resulting arguments are
2463 stored in the array ARGARRAY which has size NARGS.
2465 If TYPELIST is exhausted, or when an element has NULL as its type,
2466 perform the default conversions.
2468 PARMLIST is the chain of parm decls for the function being called.
2469 It may be 0, if that info is not available.
2470 It is used only for generating error messages.
2472 FUNCTION is a tree for the called function. It is used only for
2473 error messages, where it is formatted with %qE.
2475 This is also where warnings about wrong number of args are generated.
2477 VALUES is a chain of TREE_LIST nodes with the elements of the list
2478 in the TREE_VALUE slots of those nodes.
2480 Returns the actual number of arguments processed (which may be less
2481 than NARGS in some error situations), or -1 on failure. */
2483 static int
2484 convert_arguments (int nargs, tree *argarray,
2485 tree typelist, tree values, tree function, tree fundecl)
2487 tree typetail, valtail;
2488 int parmnum;
2489 const bool type_generic = fundecl
2490 && lookup_attribute ("type generic", TYPE_ATTRIBUTES(TREE_TYPE (fundecl)));
2491 tree selector;
2493 /* Change pointer to function to the function itself for
2494 diagnostics. */
2495 if (TREE_CODE (function) == ADDR_EXPR
2496 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
2497 function = TREE_OPERAND (function, 0);
2499 /* Handle an ObjC selector specially for diagnostics. */
2500 selector = objc_message_selector ();
2502 /* Scan the given expressions and types, producing individual
2503 converted arguments and storing them in ARGARRAY. */
2505 for (valtail = values, typetail = typelist, parmnum = 0;
2506 valtail;
2507 valtail = TREE_CHAIN (valtail), parmnum++)
2509 tree type = typetail ? TREE_VALUE (typetail) : 0;
2510 tree val = TREE_VALUE (valtail);
2511 tree rname = function;
2512 int argnum = parmnum + 1;
2513 const char *invalid_func_diag;
2515 if (type == void_type_node)
2517 error ("too many arguments to function %qE", function);
2518 return parmnum;
2521 if (selector && argnum > 2)
2523 rname = selector;
2524 argnum -= 2;
2527 STRIP_TYPE_NOPS (val);
2529 val = require_complete_type (val);
2531 if (type != 0)
2533 /* Formal parm type is specified by a function prototype. */
2534 tree parmval;
2536 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
2538 error ("type of formal parameter %d is incomplete", parmnum + 1);
2539 parmval = val;
2541 else
2543 /* Optionally warn about conversions that
2544 differ from the default conversions. */
2545 if (warn_traditional_conversion || warn_traditional)
2547 unsigned int formal_prec = TYPE_PRECISION (type);
2549 if (INTEGRAL_TYPE_P (type)
2550 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2551 warning (0, "passing argument %d of %qE as integer "
2552 "rather than floating due to prototype",
2553 argnum, rname);
2554 if (INTEGRAL_TYPE_P (type)
2555 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2556 warning (0, "passing argument %d of %qE as integer "
2557 "rather than complex due to prototype",
2558 argnum, rname);
2559 else if (TREE_CODE (type) == COMPLEX_TYPE
2560 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2561 warning (0, "passing argument %d of %qE as complex "
2562 "rather than floating due to prototype",
2563 argnum, rname);
2564 else if (TREE_CODE (type) == REAL_TYPE
2565 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2566 warning (0, "passing argument %d of %qE as floating "
2567 "rather than integer due to prototype",
2568 argnum, rname);
2569 else if (TREE_CODE (type) == COMPLEX_TYPE
2570 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2571 warning (0, "passing argument %d of %qE as complex "
2572 "rather than integer due to prototype",
2573 argnum, rname);
2574 else if (TREE_CODE (type) == REAL_TYPE
2575 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2576 warning (0, "passing argument %d of %qE as floating "
2577 "rather than complex due to prototype",
2578 argnum, rname);
2579 /* ??? At some point, messages should be written about
2580 conversions between complex types, but that's too messy
2581 to do now. */
2582 else if (TREE_CODE (type) == REAL_TYPE
2583 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2585 /* Warn if any argument is passed as `float',
2586 since without a prototype it would be `double'. */
2587 if (formal_prec == TYPE_PRECISION (float_type_node)
2588 && type != dfloat32_type_node)
2589 warning (0, "passing argument %d of %qE as %<float%> "
2590 "rather than %<double%> due to prototype",
2591 argnum, rname);
2593 /* Warn if mismatch between argument and prototype
2594 for decimal float types. Warn of conversions with
2595 binary float types and of precision narrowing due to
2596 prototype. */
2597 else if (type != TREE_TYPE (val)
2598 && (type == dfloat32_type_node
2599 || type == dfloat64_type_node
2600 || type == dfloat128_type_node
2601 || TREE_TYPE (val) == dfloat32_type_node
2602 || TREE_TYPE (val) == dfloat64_type_node
2603 || TREE_TYPE (val) == dfloat128_type_node)
2604 && (formal_prec
2605 <= TYPE_PRECISION (TREE_TYPE (val))
2606 || (type == dfloat128_type_node
2607 && (TREE_TYPE (val)
2608 != dfloat64_type_node
2609 && (TREE_TYPE (val)
2610 != dfloat32_type_node)))
2611 || (type == dfloat64_type_node
2612 && (TREE_TYPE (val)
2613 != dfloat32_type_node))))
2614 warning (0, "passing argument %d of %qE as %qT "
2615 "rather than %qT due to prototype",
2616 argnum, rname, type, TREE_TYPE (val));
2619 /* Detect integer changing in width or signedness.
2620 These warnings are only activated with
2621 -Wtraditional-conversion, not with -Wtraditional. */
2622 else if (warn_traditional_conversion && INTEGRAL_TYPE_P (type)
2623 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2625 tree would_have_been = default_conversion (val);
2626 tree type1 = TREE_TYPE (would_have_been);
2628 if (TREE_CODE (type) == ENUMERAL_TYPE
2629 && (TYPE_MAIN_VARIANT (type)
2630 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
2631 /* No warning if function asks for enum
2632 and the actual arg is that enum type. */
2634 else if (formal_prec != TYPE_PRECISION (type1))
2635 warning (OPT_Wtraditional_conversion, "passing argument %d of %qE "
2636 "with different width due to prototype",
2637 argnum, rname);
2638 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
2640 /* Don't complain if the formal parameter type
2641 is an enum, because we can't tell now whether
2642 the value was an enum--even the same enum. */
2643 else if (TREE_CODE (type) == ENUMERAL_TYPE)
2645 else if (TREE_CODE (val) == INTEGER_CST
2646 && int_fits_type_p (val, type))
2647 /* Change in signedness doesn't matter
2648 if a constant value is unaffected. */
2650 /* If the value is extended from a narrower
2651 unsigned type, it doesn't matter whether we
2652 pass it as signed or unsigned; the value
2653 certainly is the same either way. */
2654 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
2655 && TYPE_UNSIGNED (TREE_TYPE (val)))
2657 else if (TYPE_UNSIGNED (type))
2658 warning (OPT_Wtraditional_conversion, "passing argument %d of %qE "
2659 "as unsigned due to prototype",
2660 argnum, rname);
2661 else
2662 warning (OPT_Wtraditional_conversion, "passing argument %d of %qE "
2663 "as signed due to prototype", argnum, rname);
2667 parmval = convert_for_assignment (type, val, ic_argpass,
2668 fundecl, function,
2669 parmnum + 1);
2671 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
2672 && INTEGRAL_TYPE_P (type)
2673 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
2674 parmval = default_conversion (parmval);
2676 argarray[parmnum] = parmval;
2678 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
2679 && (TYPE_PRECISION (TREE_TYPE (val))
2680 < TYPE_PRECISION (double_type_node))
2681 && !DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (val))))
2683 if (type_generic)
2684 argarray[parmnum] = val;
2685 else
2686 /* Convert `float' to `double'. */
2687 argarray[parmnum] = convert (double_type_node, val);
2689 else if ((invalid_func_diag =
2690 targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
2692 error (invalid_func_diag);
2693 return -1;
2695 else
2696 /* Convert `short' and `char' to full-size `int'. */
2697 argarray[parmnum] = default_conversion (val);
2699 if (typetail)
2700 typetail = TREE_CHAIN (typetail);
2703 gcc_assert (parmnum == nargs);
2705 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
2707 error ("too few arguments to function %qE", function);
2708 return -1;
2711 return parmnum;
2714 /* This is the entry point used by the parser to build unary operators
2715 in the input. CODE, a tree_code, specifies the unary operator, and
2716 ARG is the operand. For unary plus, the C parser currently uses
2717 CONVERT_EXPR for code. */
2719 struct c_expr
2720 parser_build_unary_op (enum tree_code code, struct c_expr arg)
2722 struct c_expr result;
2724 result.original_code = ERROR_MARK;
2725 result.value = build_unary_op (code, arg.value, 0);
2727 if (TREE_OVERFLOW_P (result.value) && !TREE_OVERFLOW_P (arg.value))
2728 overflow_warning (result.value);
2730 return result;
2733 /* This is the entry point used by the parser to build binary operators
2734 in the input. CODE, a tree_code, specifies the binary operator, and
2735 ARG1 and ARG2 are the operands. In addition to constructing the
2736 expression, we check for operands that were written with other binary
2737 operators in a way that is likely to confuse the user. */
2739 struct c_expr
2740 parser_build_binary_op (enum tree_code code, struct c_expr arg1,
2741 struct c_expr arg2)
2743 struct c_expr result;
2745 enum tree_code code1 = arg1.original_code;
2746 enum tree_code code2 = arg2.original_code;
2748 result.value = build_binary_op (code, arg1.value, arg2.value, 1);
2749 result.original_code = code;
2751 if (TREE_CODE (result.value) == ERROR_MARK)
2752 return result;
2754 /* Check for cases such as x+y<<z which users are likely
2755 to misinterpret. */
2756 if (warn_parentheses)
2757 warn_about_parentheses (code, code1, code2);
2759 if (code1 != tcc_comparison)
2760 warn_logical_operator (code, arg1.value, arg2.value);
2762 /* Warn about comparisons against string literals, with the exception
2763 of testing for equality or inequality of a string literal with NULL. */
2764 if (code == EQ_EXPR || code == NE_EXPR)
2766 if ((code1 == STRING_CST && !integer_zerop (arg2.value))
2767 || (code2 == STRING_CST && !integer_zerop (arg1.value)))
2768 warning (OPT_Waddress, "comparison with string literal results in unspecified behavior");
2770 else if (TREE_CODE_CLASS (code) == tcc_comparison
2771 && (code1 == STRING_CST || code2 == STRING_CST))
2772 warning (OPT_Waddress, "comparison with string literal results in unspecified behavior");
2774 if (TREE_OVERFLOW_P (result.value)
2775 && !TREE_OVERFLOW_P (arg1.value)
2776 && !TREE_OVERFLOW_P (arg2.value))
2777 overflow_warning (result.value);
2779 return result;
2782 /* Return a tree for the difference of pointers OP0 and OP1.
2783 The resulting tree has type int. */
2785 static tree
2786 pointer_diff (tree op0, tree op1)
2788 tree restype = ptrdiff_type_node;
2790 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2791 tree con0, con1, lit0, lit1;
2792 tree orig_op1 = op1;
2794 if (pedantic || warn_pointer_arith)
2796 if (TREE_CODE (target_type) == VOID_TYPE)
2797 pedwarn ("pointer of type %<void *%> used in subtraction");
2798 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2799 pedwarn ("pointer to a function used in subtraction");
2802 /* If the conversion to ptrdiff_type does anything like widening or
2803 converting a partial to an integral mode, we get a convert_expression
2804 that is in the way to do any simplifications.
2805 (fold-const.c doesn't know that the extra bits won't be needed.
2806 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2807 different mode in place.)
2808 So first try to find a common term here 'by hand'; we want to cover
2809 at least the cases that occur in legal static initializers. */
2810 if ((TREE_CODE (op0) == NOP_EXPR || TREE_CODE (op0) == CONVERT_EXPR)
2811 && (TYPE_PRECISION (TREE_TYPE (op0))
2812 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0)))))
2813 con0 = TREE_OPERAND (op0, 0);
2814 else
2815 con0 = op0;
2816 if ((TREE_CODE (op1) == NOP_EXPR || TREE_CODE (op1) == CONVERT_EXPR)
2817 && (TYPE_PRECISION (TREE_TYPE (op1))
2818 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op1, 0)))))
2819 con1 = TREE_OPERAND (op1, 0);
2820 else
2821 con1 = op1;
2823 if (TREE_CODE (con0) == PLUS_EXPR)
2825 lit0 = TREE_OPERAND (con0, 1);
2826 con0 = TREE_OPERAND (con0, 0);
2828 else
2829 lit0 = integer_zero_node;
2831 if (TREE_CODE (con1) == PLUS_EXPR)
2833 lit1 = TREE_OPERAND (con1, 1);
2834 con1 = TREE_OPERAND (con1, 0);
2836 else
2837 lit1 = integer_zero_node;
2839 if (operand_equal_p (con0, con1, 0))
2841 op0 = lit0;
2842 op1 = lit1;
2846 /* First do the subtraction as integers;
2847 then drop through to build the divide operator.
2848 Do not do default conversions on the minus operator
2849 in case restype is a short type. */
2851 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2852 convert (restype, op1), 0);
2853 /* This generates an error if op1 is pointer to incomplete type. */
2854 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2855 error ("arithmetic on pointer to an incomplete type");
2857 /* This generates an error if op0 is pointer to incomplete type. */
2858 op1 = c_size_in_bytes (target_type);
2860 /* Divide by the size, in easiest possible way. */
2861 return fold_build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2864 /* Construct and perhaps optimize a tree representation
2865 for a unary operation. CODE, a tree_code, specifies the operation
2866 and XARG is the operand.
2867 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2868 the default promotions (such as from short to int).
2869 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2870 allows non-lvalues; this is only used to handle conversion of non-lvalue
2871 arrays to pointers in C99. */
2873 tree
2874 build_unary_op (enum tree_code code, tree xarg, int flag)
2876 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2877 tree arg = xarg;
2878 tree argtype = 0;
2879 enum tree_code typecode;
2880 tree val;
2881 int noconvert = flag;
2882 const char *invalid_op_diag;
2884 if (code != ADDR_EXPR)
2885 arg = require_complete_type (arg);
2887 typecode = TREE_CODE (TREE_TYPE (arg));
2888 if (typecode == ERROR_MARK)
2889 return error_mark_node;
2890 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2891 typecode = INTEGER_TYPE;
2893 if ((invalid_op_diag
2894 = targetm.invalid_unary_op (code, TREE_TYPE (xarg))))
2896 error (invalid_op_diag);
2897 return error_mark_node;
2900 switch (code)
2902 case CONVERT_EXPR:
2903 /* This is used for unary plus, because a CONVERT_EXPR
2904 is enough to prevent anybody from looking inside for
2905 associativity, but won't generate any code. */
2906 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2907 || typecode == FIXED_POINT_TYPE || typecode == COMPLEX_TYPE
2908 || typecode == VECTOR_TYPE))
2910 error ("wrong type argument to unary plus");
2911 return error_mark_node;
2913 else if (!noconvert)
2914 arg = default_conversion (arg);
2915 arg = non_lvalue (arg);
2916 break;
2918 case NEGATE_EXPR:
2919 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2920 || typecode == FIXED_POINT_TYPE || typecode == COMPLEX_TYPE
2921 || typecode == VECTOR_TYPE))
2923 error ("wrong type argument to unary minus");
2924 return error_mark_node;
2926 else if (!noconvert)
2927 arg = default_conversion (arg);
2928 break;
2930 case BIT_NOT_EXPR:
2931 /* ~ works on integer types and non float vectors. */
2932 if (typecode == INTEGER_TYPE
2933 || (typecode == VECTOR_TYPE
2934 && !VECTOR_FLOAT_TYPE_P (TREE_TYPE (arg))))
2936 if (!noconvert)
2937 arg = default_conversion (arg);
2939 else if (typecode == COMPLEX_TYPE)
2941 code = CONJ_EXPR;
2942 if (pedantic)
2943 pedwarn ("ISO C does not support %<~%> for complex conjugation");
2944 if (!noconvert)
2945 arg = default_conversion (arg);
2947 else
2949 error ("wrong type argument to bit-complement");
2950 return error_mark_node;
2952 break;
2954 case ABS_EXPR:
2955 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
2957 error ("wrong type argument to abs");
2958 return error_mark_node;
2960 else if (!noconvert)
2961 arg = default_conversion (arg);
2962 break;
2964 case CONJ_EXPR:
2965 /* Conjugating a real value is a no-op, but allow it anyway. */
2966 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2967 || typecode == COMPLEX_TYPE))
2969 error ("wrong type argument to conjugation");
2970 return error_mark_node;
2972 else if (!noconvert)
2973 arg = default_conversion (arg);
2974 break;
2976 case TRUTH_NOT_EXPR:
2977 if (typecode != INTEGER_TYPE && typecode != FIXED_POINT_TYPE
2978 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2979 && typecode != COMPLEX_TYPE)
2981 error ("wrong type argument to unary exclamation mark");
2982 return error_mark_node;
2984 arg = c_objc_common_truthvalue_conversion (arg);
2985 return invert_truthvalue (arg);
2987 case REALPART_EXPR:
2988 if (TREE_CODE (arg) == COMPLEX_CST)
2989 return TREE_REALPART (arg);
2990 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2991 return fold_build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
2992 else
2993 return arg;
2995 case IMAGPART_EXPR:
2996 if (TREE_CODE (arg) == COMPLEX_CST)
2997 return TREE_IMAGPART (arg);
2998 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2999 return fold_build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
3000 else
3001 return convert (TREE_TYPE (arg), integer_zero_node);
3003 case PREINCREMENT_EXPR:
3004 case POSTINCREMENT_EXPR:
3005 case PREDECREMENT_EXPR:
3006 case POSTDECREMENT_EXPR:
3008 /* Increment or decrement the real part of the value,
3009 and don't change the imaginary part. */
3010 if (typecode == COMPLEX_TYPE)
3012 tree real, imag;
3014 if (pedantic)
3015 pedwarn ("ISO C does not support %<++%> and %<--%>"
3016 " on complex types");
3018 arg = stabilize_reference (arg);
3019 real = build_unary_op (REALPART_EXPR, arg, 1);
3020 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
3021 real = build_unary_op (code, real, 1);
3022 if (real == error_mark_node || imag == error_mark_node)
3023 return error_mark_node;
3024 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
3025 real, imag);
3028 /* Report invalid types. */
3030 if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
3031 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
3033 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3034 error ("wrong type argument to increment");
3035 else
3036 error ("wrong type argument to decrement");
3038 return error_mark_node;
3042 tree inc;
3043 tree result_type = TREE_TYPE (arg);
3045 arg = get_unwidened (arg, 0);
3046 argtype = TREE_TYPE (arg);
3048 /* Compute the increment. */
3050 if (typecode == POINTER_TYPE)
3052 /* If pointer target is an undefined struct,
3053 we just cannot know how to do the arithmetic. */
3054 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
3056 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3057 error ("increment of pointer to unknown structure");
3058 else
3059 error ("decrement of pointer to unknown structure");
3061 else if ((pedantic || warn_pointer_arith)
3062 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
3063 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
3065 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3066 pedwarn ("wrong type argument to increment");
3067 else
3068 pedwarn ("wrong type argument to decrement");
3071 inc = c_size_in_bytes (TREE_TYPE (result_type));
3072 inc = fold_convert (sizetype, inc);
3074 else if (FRACT_MODE_P (TYPE_MODE (result_type)))
3076 /* For signed fract types, we invert ++ to -- or
3077 -- to ++, and change inc from 1 to -1, because
3078 it is not possible to represent 1 in signed fract constants.
3079 For unsigned fract types, the result always overflows and
3080 we get an undefined (original) or the maximum value. */
3081 if (code == PREINCREMENT_EXPR)
3082 code = PREDECREMENT_EXPR;
3083 else if (code == PREDECREMENT_EXPR)
3084 code = PREINCREMENT_EXPR;
3085 else if (code == POSTINCREMENT_EXPR)
3086 code = POSTDECREMENT_EXPR;
3087 else /* code == POSTDECREMENT_EXPR */
3088 code = POSTINCREMENT_EXPR;
3090 inc = integer_minus_one_node;
3091 inc = convert (argtype, inc);
3093 else
3095 inc = integer_one_node;
3096 inc = convert (argtype, inc);
3099 /* Complain about anything else that is not a true lvalue. */
3100 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
3101 || code == POSTINCREMENT_EXPR)
3102 ? lv_increment
3103 : lv_decrement)))
3104 return error_mark_node;
3106 /* Report a read-only lvalue. */
3107 if (TREE_READONLY (arg))
3109 readonly_error (arg,
3110 ((code == PREINCREMENT_EXPR
3111 || code == POSTINCREMENT_EXPR)
3112 ? lv_increment : lv_decrement));
3113 return error_mark_node;
3116 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
3117 val = boolean_increment (code, arg);
3118 else
3119 val = build2 (code, TREE_TYPE (arg), arg, inc);
3120 TREE_SIDE_EFFECTS (val) = 1;
3121 val = convert (result_type, val);
3122 if (TREE_CODE (val) != code)
3123 TREE_NO_WARNING (val) = 1;
3124 return val;
3127 case ADDR_EXPR:
3128 /* Note that this operation never does default_conversion. */
3130 /* Let &* cancel out to simplify resulting code. */
3131 if (TREE_CODE (arg) == INDIRECT_REF)
3133 /* Don't let this be an lvalue. */
3134 if (lvalue_p (TREE_OPERAND (arg, 0)))
3135 return non_lvalue (TREE_OPERAND (arg, 0));
3136 return TREE_OPERAND (arg, 0);
3139 /* For &x[y], return x+y */
3140 if (TREE_CODE (arg) == ARRAY_REF)
3142 tree op0 = TREE_OPERAND (arg, 0);
3143 if (!c_mark_addressable (op0))
3144 return error_mark_node;
3145 return build_binary_op (PLUS_EXPR,
3146 (TREE_CODE (TREE_TYPE (op0)) == ARRAY_TYPE
3147 ? array_to_pointer_conversion (op0)
3148 : op0),
3149 TREE_OPERAND (arg, 1), 1);
3152 /* Anything not already handled and not a true memory reference
3153 or a non-lvalue array is an error. */
3154 else if (typecode != FUNCTION_TYPE && !flag
3155 && !lvalue_or_else (arg, lv_addressof))
3156 return error_mark_node;
3158 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
3159 argtype = TREE_TYPE (arg);
3161 /* If the lvalue is const or volatile, merge that into the type
3162 to which the address will point. Note that you can't get a
3163 restricted pointer by taking the address of something, so we
3164 only have to deal with `const' and `volatile' here. */
3165 if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
3166 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
3167 argtype = c_build_type_variant (argtype,
3168 TREE_READONLY (arg),
3169 TREE_THIS_VOLATILE (arg));
3171 if (!c_mark_addressable (arg))
3172 return error_mark_node;
3174 gcc_assert (TREE_CODE (arg) != COMPONENT_REF
3175 || !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)));
3177 argtype = build_pointer_type (argtype);
3179 /* ??? Cope with user tricks that amount to offsetof. Delete this
3180 when we have proper support for integer constant expressions. */
3181 val = get_base_address (arg);
3182 if (val && TREE_CODE (val) == INDIRECT_REF
3183 && TREE_CONSTANT (TREE_OPERAND (val, 0)))
3185 tree op0 = fold_convert (sizetype, fold_offsetof (arg, val)), op1;
3187 op1 = fold_convert (argtype, TREE_OPERAND (val, 0));
3188 return fold_build2 (POINTER_PLUS_EXPR, argtype, op1, op0);
3191 val = build1 (ADDR_EXPR, argtype, arg);
3193 return val;
3195 default:
3196 gcc_unreachable ();
3199 if (argtype == 0)
3200 argtype = TREE_TYPE (arg);
3201 return require_constant_value ? fold_build1_initializer (code, argtype, arg)
3202 : fold_build1 (code, argtype, arg);
3205 /* Return nonzero if REF is an lvalue valid for this language.
3206 Lvalues can be assigned, unless their type has TYPE_READONLY.
3207 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
3209 static int
3210 lvalue_p (const_tree ref)
3212 const enum tree_code code = TREE_CODE (ref);
3214 switch (code)
3216 case REALPART_EXPR:
3217 case IMAGPART_EXPR:
3218 case COMPONENT_REF:
3219 return lvalue_p (TREE_OPERAND (ref, 0));
3221 case COMPOUND_LITERAL_EXPR:
3222 case STRING_CST:
3223 return 1;
3225 case INDIRECT_REF:
3226 case ARRAY_REF:
3227 case VAR_DECL:
3228 case PARM_DECL:
3229 case RESULT_DECL:
3230 case ERROR_MARK:
3231 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
3232 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
3234 case BIND_EXPR:
3235 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
3237 default:
3238 return 0;
3242 /* Give an error for storing in something that is 'const'. */
3244 static void
3245 readonly_error (tree arg, enum lvalue_use use)
3247 gcc_assert (use == lv_assign || use == lv_increment || use == lv_decrement
3248 || use == lv_asm);
3249 /* Using this macro rather than (for example) arrays of messages
3250 ensures that all the format strings are checked at compile
3251 time. */
3252 #define READONLY_MSG(A, I, D, AS) (use == lv_assign ? (A) \
3253 : (use == lv_increment ? (I) \
3254 : (use == lv_decrement ? (D) : (AS))))
3255 if (TREE_CODE (arg) == COMPONENT_REF)
3257 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
3258 readonly_error (TREE_OPERAND (arg, 0), use);
3259 else
3260 error (READONLY_MSG (G_("assignment of read-only member %qD"),
3261 G_("increment of read-only member %qD"),
3262 G_("decrement of read-only member %qD"),
3263 G_("read-only member %qD used as %<asm%> output")),
3264 TREE_OPERAND (arg, 1));
3266 else if (TREE_CODE (arg) == VAR_DECL)
3267 error (READONLY_MSG (G_("assignment of read-only variable %qD"),
3268 G_("increment of read-only variable %qD"),
3269 G_("decrement of read-only variable %qD"),
3270 G_("read-only variable %qD used as %<asm%> output")),
3271 arg);
3272 else
3273 error (READONLY_MSG (G_("assignment of read-only location %qE"),
3274 G_("increment of read-only location %qE"),
3275 G_("decrement of read-only location %qE"),
3276 G_("read-only location %qE used as %<asm%> output")),
3277 arg);
3281 /* Return nonzero if REF is an lvalue valid for this language;
3282 otherwise, print an error message and return zero. USE says
3283 how the lvalue is being used and so selects the error message. */
3285 static int
3286 lvalue_or_else (const_tree ref, enum lvalue_use use)
3288 int win = lvalue_p (ref);
3290 if (!win)
3291 lvalue_error (use);
3293 return win;
3296 /* Mark EXP saying that we need to be able to take the
3297 address of it; it should not be allocated in a register.
3298 Returns true if successful. */
3300 bool
3301 c_mark_addressable (tree exp)
3303 tree x = exp;
3305 while (1)
3306 switch (TREE_CODE (x))
3308 case COMPONENT_REF:
3309 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
3311 error
3312 ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
3313 return false;
3316 /* ... fall through ... */
3318 case ADDR_EXPR:
3319 case ARRAY_REF:
3320 case REALPART_EXPR:
3321 case IMAGPART_EXPR:
3322 x = TREE_OPERAND (x, 0);
3323 break;
3325 case COMPOUND_LITERAL_EXPR:
3326 case CONSTRUCTOR:
3327 TREE_ADDRESSABLE (x) = 1;
3328 return true;
3330 case VAR_DECL:
3331 case CONST_DECL:
3332 case PARM_DECL:
3333 case RESULT_DECL:
3334 if (C_DECL_REGISTER (x)
3335 && DECL_NONLOCAL (x))
3337 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
3339 error
3340 ("global register variable %qD used in nested function", x);
3341 return false;
3343 pedwarn ("register variable %qD used in nested function", x);
3345 else if (C_DECL_REGISTER (x))
3347 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
3348 error ("address of global register variable %qD requested", x);
3349 else
3350 error ("address of register variable %qD requested", x);
3351 return false;
3354 /* drops in */
3355 case FUNCTION_DECL:
3356 TREE_ADDRESSABLE (x) = 1;
3357 /* drops out */
3358 default:
3359 return true;
3363 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
3365 tree
3366 build_conditional_expr (tree ifexp, tree op1, tree op2)
3368 tree type1;
3369 tree type2;
3370 enum tree_code code1;
3371 enum tree_code code2;
3372 tree result_type = NULL;
3373 tree orig_op1 = op1, orig_op2 = op2;
3375 /* Promote both alternatives. */
3377 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3378 op1 = default_conversion (op1);
3379 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3380 op2 = default_conversion (op2);
3382 if (TREE_CODE (ifexp) == ERROR_MARK
3383 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3384 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3385 return error_mark_node;
3387 type1 = TREE_TYPE (op1);
3388 code1 = TREE_CODE (type1);
3389 type2 = TREE_TYPE (op2);
3390 code2 = TREE_CODE (type2);
3392 /* C90 does not permit non-lvalue arrays in conditional expressions.
3393 In C99 they will be pointers by now. */
3394 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
3396 error ("non-lvalue array in conditional expression");
3397 return error_mark_node;
3400 /* Quickly detect the usual case where op1 and op2 have the same type
3401 after promotion. */
3402 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3404 if (type1 == type2)
3405 result_type = type1;
3406 else
3407 result_type = TYPE_MAIN_VARIANT (type1);
3409 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
3410 || code1 == COMPLEX_TYPE)
3411 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3412 || code2 == COMPLEX_TYPE))
3414 result_type = c_common_type (type1, type2);
3416 /* If -Wsign-compare, warn here if type1 and type2 have
3417 different signedness. We'll promote the signed to unsigned
3418 and later code won't know it used to be different.
3419 Do this check on the original types, so that explicit casts
3420 will be considered, but default promotions won't. */
3421 if (warn_sign_compare && !skip_evaluation)
3423 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3424 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
3426 if (unsigned_op1 ^ unsigned_op2)
3428 bool ovf;
3430 /* Do not warn if the result type is signed, since the
3431 signed type will only be chosen if it can represent
3432 all the values of the unsigned type. */
3433 if (!TYPE_UNSIGNED (result_type))
3434 /* OK */;
3435 /* Do not warn if the signed quantity is an unsuffixed
3436 integer literal (or some static constant expression
3437 involving such literals) and it is non-negative. */
3438 else if ((unsigned_op2
3439 && tree_expr_nonnegative_warnv_p (op1, &ovf))
3440 || (unsigned_op1
3441 && tree_expr_nonnegative_warnv_p (op2, &ovf)))
3442 /* OK */;
3443 else
3444 warning (0, "signed and unsigned type in conditional expression");
3448 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3450 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3451 pedwarn ("ISO C forbids conditional expr with only one void side");
3452 result_type = void_type_node;
3454 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3456 if (comp_target_types (type1, type2))
3457 result_type = common_pointer_type (type1, type2);
3458 else if (null_pointer_constant_p (orig_op1))
3459 result_type = qualify_type (type2, type1);
3460 else if (null_pointer_constant_p (orig_op2))
3461 result_type = qualify_type (type1, type2);
3462 else if (VOID_TYPE_P (TREE_TYPE (type1)))
3464 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3465 pedwarn ("ISO C forbids conditional expr between "
3466 "%<void *%> and function pointer");
3467 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
3468 TREE_TYPE (type2)));
3470 else if (VOID_TYPE_P (TREE_TYPE (type2)))
3472 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3473 pedwarn ("ISO C forbids conditional expr between "
3474 "%<void *%> and function pointer");
3475 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
3476 TREE_TYPE (type1)));
3478 else
3480 pedwarn ("pointer type mismatch in conditional expression");
3481 result_type = build_pointer_type (void_type_node);
3484 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3486 if (!null_pointer_constant_p (orig_op2))
3487 pedwarn ("pointer/integer type mismatch in conditional expression");
3488 else
3490 op2 = null_pointer_node;
3492 result_type = type1;
3494 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3496 if (!null_pointer_constant_p (orig_op1))
3497 pedwarn ("pointer/integer type mismatch in conditional expression");
3498 else
3500 op1 = null_pointer_node;
3502 result_type = type2;
3505 if (!result_type)
3507 if (flag_cond_mismatch)
3508 result_type = void_type_node;
3509 else
3511 error ("type mismatch in conditional expression");
3512 return error_mark_node;
3516 /* Merge const and volatile flags of the incoming types. */
3517 result_type
3518 = build_type_variant (result_type,
3519 TREE_READONLY (op1) || TREE_READONLY (op2),
3520 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3522 if (result_type != TREE_TYPE (op1))
3523 op1 = convert_and_check (result_type, op1);
3524 if (result_type != TREE_TYPE (op2))
3525 op2 = convert_and_check (result_type, op2);
3527 return fold_build3 (COND_EXPR, result_type, ifexp, op1, op2);
3530 /* Return a compound expression that performs two expressions and
3531 returns the value of the second of them. */
3533 tree
3534 build_compound_expr (tree expr1, tree expr2)
3536 if (!TREE_SIDE_EFFECTS (expr1))
3538 /* The left-hand operand of a comma expression is like an expression
3539 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3540 any side-effects, unless it was explicitly cast to (void). */
3541 if (warn_unused_value)
3543 if (VOID_TYPE_P (TREE_TYPE (expr1))
3544 && (TREE_CODE (expr1) == NOP_EXPR
3545 || TREE_CODE (expr1) == CONVERT_EXPR))
3546 ; /* (void) a, b */
3547 else if (VOID_TYPE_P (TREE_TYPE (expr1))
3548 && TREE_CODE (expr1) == COMPOUND_EXPR
3549 && (TREE_CODE (TREE_OPERAND (expr1, 1)) == CONVERT_EXPR
3550 || TREE_CODE (TREE_OPERAND (expr1, 1)) == NOP_EXPR))
3551 ; /* (void) a, (void) b, c */
3552 else
3553 warning (OPT_Wunused_value,
3554 "left-hand operand of comma expression has no effect");
3558 /* With -Wunused, we should also warn if the left-hand operand does have
3559 side-effects, but computes a value which is not used. For example, in
3560 `foo() + bar(), baz()' the result of the `+' operator is not used,
3561 so we should issue a warning. */
3562 else if (warn_unused_value)
3563 warn_if_unused_value (expr1, input_location);
3565 if (expr2 == error_mark_node)
3566 return error_mark_node;
3568 return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
3571 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3573 tree
3574 build_c_cast (tree type, tree expr)
3576 tree value = expr;
3578 if (type == error_mark_node || expr == error_mark_node)
3579 return error_mark_node;
3581 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3582 only in <protocol> qualifications. But when constructing cast expressions,
3583 the protocols do matter and must be kept around. */
3584 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
3585 return build1 (NOP_EXPR, type, expr);
3587 type = TYPE_MAIN_VARIANT (type);
3589 if (TREE_CODE (type) == ARRAY_TYPE)
3591 error ("cast specifies array type");
3592 return error_mark_node;
3595 if (TREE_CODE (type) == FUNCTION_TYPE)
3597 error ("cast specifies function type");
3598 return error_mark_node;
3601 if (!VOID_TYPE_P (type))
3603 value = require_complete_type (value);
3604 if (value == error_mark_node)
3605 return error_mark_node;
3608 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3610 if (pedantic)
3612 if (TREE_CODE (type) == RECORD_TYPE
3613 || TREE_CODE (type) == UNION_TYPE)
3614 pedwarn ("ISO C forbids casting nonscalar to the same type");
3617 else if (TREE_CODE (type) == UNION_TYPE)
3619 tree field;
3621 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3622 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3623 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3624 break;
3626 if (field)
3628 tree t;
3630 if (pedantic)
3631 pedwarn ("ISO C forbids casts to union type");
3632 t = digest_init (type,
3633 build_constructor_single (type, field, value),
3634 true, 0);
3635 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3636 TREE_INVARIANT (t) = TREE_INVARIANT (value);
3637 return t;
3639 error ("cast to union type from type not present in union");
3640 return error_mark_node;
3642 else
3644 tree otype, ovalue;
3646 if (type == void_type_node)
3647 return build1 (CONVERT_EXPR, type, value);
3649 otype = TREE_TYPE (value);
3651 /* Optionally warn about potentially worrisome casts. */
3653 if (warn_cast_qual
3654 && TREE_CODE (type) == POINTER_TYPE
3655 && TREE_CODE (otype) == POINTER_TYPE)
3657 tree in_type = type;
3658 tree in_otype = otype;
3659 int added = 0;
3660 int discarded = 0;
3662 /* Check that the qualifiers on IN_TYPE are a superset of
3663 the qualifiers of IN_OTYPE. The outermost level of
3664 POINTER_TYPE nodes is uninteresting and we stop as soon
3665 as we hit a non-POINTER_TYPE node on either type. */
3668 in_otype = TREE_TYPE (in_otype);
3669 in_type = TREE_TYPE (in_type);
3671 /* GNU C allows cv-qualified function types. 'const'
3672 means the function is very pure, 'volatile' means it
3673 can't return. We need to warn when such qualifiers
3674 are added, not when they're taken away. */
3675 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3676 && TREE_CODE (in_type) == FUNCTION_TYPE)
3677 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3678 else
3679 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3681 while (TREE_CODE (in_type) == POINTER_TYPE
3682 && TREE_CODE (in_otype) == POINTER_TYPE);
3684 if (added)
3685 warning (OPT_Wcast_qual, "cast adds new qualifiers to function type");
3687 if (discarded)
3688 /* There are qualifiers present in IN_OTYPE that are not
3689 present in IN_TYPE. */
3690 warning (OPT_Wcast_qual, "cast discards qualifiers from pointer target type");
3693 /* Warn about possible alignment problems. */
3694 if (STRICT_ALIGNMENT
3695 && TREE_CODE (type) == POINTER_TYPE
3696 && TREE_CODE (otype) == POINTER_TYPE
3697 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3698 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3699 /* Don't warn about opaque types, where the actual alignment
3700 restriction is unknown. */
3701 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3702 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3703 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3704 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3705 warning (OPT_Wcast_align,
3706 "cast increases required alignment of target type");
3708 if (TREE_CODE (type) == INTEGER_TYPE
3709 && TREE_CODE (otype) == POINTER_TYPE
3710 && TYPE_PRECISION (type) != TYPE_PRECISION (otype))
3711 /* Unlike conversion of integers to pointers, where the
3712 warning is disabled for converting constants because
3713 of cases such as SIG_*, warn about converting constant
3714 pointers to integers. In some cases it may cause unwanted
3715 sign extension, and a warning is appropriate. */
3716 warning (OPT_Wpointer_to_int_cast,
3717 "cast from pointer to integer of different size");
3719 if (TREE_CODE (value) == CALL_EXPR
3720 && TREE_CODE (type) != TREE_CODE (otype))
3721 warning (OPT_Wbad_function_cast, "cast from function call of type %qT "
3722 "to non-matching type %qT", otype, type);
3724 if (TREE_CODE (type) == POINTER_TYPE
3725 && TREE_CODE (otype) == INTEGER_TYPE
3726 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3727 /* Don't warn about converting any constant. */
3728 && !TREE_CONSTANT (value))
3729 warning (OPT_Wint_to_pointer_cast, "cast to pointer from integer "
3730 "of different size");
3732 if (warn_strict_aliasing <= 2)
3733 strict_aliasing_warning (otype, type, expr);
3735 /* If pedantic, warn for conversions between function and object
3736 pointer types, except for converting a null pointer constant
3737 to function pointer type. */
3738 if (pedantic
3739 && TREE_CODE (type) == POINTER_TYPE
3740 && TREE_CODE (otype) == POINTER_TYPE
3741 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3742 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3743 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3745 if (pedantic
3746 && TREE_CODE (type) == POINTER_TYPE
3747 && TREE_CODE (otype) == POINTER_TYPE
3748 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3749 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3750 && !null_pointer_constant_p (value))
3751 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3753 ovalue = value;
3754 value = convert (type, value);
3756 /* Ignore any integer overflow caused by the cast. */
3757 if (TREE_CODE (value) == INTEGER_CST)
3759 if (CONSTANT_CLASS_P (ovalue) && TREE_OVERFLOW (ovalue))
3761 if (!TREE_OVERFLOW (value))
3763 /* Avoid clobbering a shared constant. */
3764 value = copy_node (value);
3765 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3768 else if (TREE_OVERFLOW (value))
3769 /* Reset VALUE's overflow flags, ensuring constant sharing. */
3770 value = build_int_cst_wide (TREE_TYPE (value),
3771 TREE_INT_CST_LOW (value),
3772 TREE_INT_CST_HIGH (value));
3776 /* Don't let a cast be an lvalue. */
3777 if (value == expr)
3778 value = non_lvalue (value);
3780 return value;
3783 /* Interpret a cast of expression EXPR to type TYPE. */
3784 tree
3785 c_cast_expr (struct c_type_name *type_name, tree expr)
3787 tree type;
3788 int saved_wsp = warn_strict_prototypes;
3790 /* This avoids warnings about unprototyped casts on
3791 integers. E.g. "#define SIG_DFL (void(*)())0". */
3792 if (TREE_CODE (expr) == INTEGER_CST)
3793 warn_strict_prototypes = 0;
3794 type = groktypename (type_name);
3795 warn_strict_prototypes = saved_wsp;
3797 return build_c_cast (type, expr);
3800 /* Build an assignment expression of lvalue LHS from value RHS.
3801 MODIFYCODE is the code for a binary operator that we use
3802 to combine the old value of LHS with RHS to get the new value.
3803 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3805 tree
3806 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3808 tree result;
3809 tree newrhs;
3810 tree lhstype = TREE_TYPE (lhs);
3811 tree olhstype = lhstype;
3813 /* Types that aren't fully specified cannot be used in assignments. */
3814 lhs = require_complete_type (lhs);
3816 /* Avoid duplicate error messages from operands that had errors. */
3817 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3818 return error_mark_node;
3820 if (!lvalue_or_else (lhs, lv_assign))
3821 return error_mark_node;
3823 STRIP_TYPE_NOPS (rhs);
3825 newrhs = rhs;
3827 /* If a binary op has been requested, combine the old LHS value with the RHS
3828 producing the value we should actually store into the LHS. */
3830 if (modifycode != NOP_EXPR)
3832 lhs = stabilize_reference (lhs);
3833 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3836 /* Give an error for storing in something that is 'const'. */
3838 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3839 || ((TREE_CODE (lhstype) == RECORD_TYPE
3840 || TREE_CODE (lhstype) == UNION_TYPE)
3841 && C_TYPE_FIELDS_READONLY (lhstype)))
3843 readonly_error (lhs, lv_assign);
3844 return error_mark_node;
3847 /* If storing into a structure or union member,
3848 it has probably been given type `int'.
3849 Compute the type that would go with
3850 the actual amount of storage the member occupies. */
3852 if (TREE_CODE (lhs) == COMPONENT_REF
3853 && (TREE_CODE (lhstype) == INTEGER_TYPE
3854 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3855 || TREE_CODE (lhstype) == REAL_TYPE
3856 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3857 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3859 /* If storing in a field that is in actuality a short or narrower than one,
3860 we must store in the field in its actual type. */
3862 if (lhstype != TREE_TYPE (lhs))
3864 lhs = copy_node (lhs);
3865 TREE_TYPE (lhs) = lhstype;
3868 /* Convert new value to destination type. */
3870 newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
3871 NULL_TREE, NULL_TREE, 0);
3872 if (TREE_CODE (newrhs) == ERROR_MARK)
3873 return error_mark_node;
3875 /* Emit ObjC write barrier, if necessary. */
3876 if (c_dialect_objc () && flag_objc_gc)
3878 result = objc_generate_write_barrier (lhs, modifycode, newrhs);
3879 if (result)
3880 return result;
3883 /* Scan operands. */
3885 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3886 TREE_SIDE_EFFECTS (result) = 1;
3888 /* If we got the LHS in a different type for storing in,
3889 convert the result back to the nominal type of LHS
3890 so that the value we return always has the same type
3891 as the LHS argument. */
3893 if (olhstype == TREE_TYPE (result))
3894 return result;
3895 return convert_for_assignment (olhstype, result, ic_assign,
3896 NULL_TREE, NULL_TREE, 0);
3899 /* Convert value RHS to type TYPE as preparation for an assignment
3900 to an lvalue of type TYPE.
3901 The real work of conversion is done by `convert'.
3902 The purpose of this function is to generate error messages
3903 for assignments that are not allowed in C.
3904 ERRTYPE says whether it is argument passing, assignment,
3905 initialization or return.
3907 FUNCTION is a tree for the function being called.
3908 PARMNUM is the number of the argument, for printing in error messages. */
3910 static tree
3911 convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
3912 tree fundecl, tree function, int parmnum)
3914 enum tree_code codel = TREE_CODE (type);
3915 tree rhstype;
3916 enum tree_code coder;
3917 tree rname = NULL_TREE;
3918 bool objc_ok = false;
3920 if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
3922 tree selector;
3923 /* Change pointer to function to the function itself for
3924 diagnostics. */
3925 if (TREE_CODE (function) == ADDR_EXPR
3926 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3927 function = TREE_OPERAND (function, 0);
3929 /* Handle an ObjC selector specially for diagnostics. */
3930 selector = objc_message_selector ();
3931 rname = function;
3932 if (selector && parmnum > 2)
3934 rname = selector;
3935 parmnum -= 2;
3939 /* This macro is used to emit diagnostics to ensure that all format
3940 strings are complete sentences, visible to gettext and checked at
3941 compile time. */
3942 #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE) \
3943 do { \
3944 switch (errtype) \
3946 case ic_argpass: \
3947 pedwarn (AR, parmnum, rname); \
3948 break; \
3949 case ic_argpass_nonproto: \
3950 warning (0, AR, parmnum, rname); \
3951 break; \
3952 case ic_assign: \
3953 pedwarn (AS); \
3954 break; \
3955 case ic_init: \
3956 pedwarn (IN); \
3957 break; \
3958 case ic_return: \
3959 pedwarn (RE); \
3960 break; \
3961 default: \
3962 gcc_unreachable (); \
3964 } while (0)
3966 STRIP_TYPE_NOPS (rhs);
3968 if (optimize && TREE_CODE (rhs) == VAR_DECL
3969 && TREE_CODE (TREE_TYPE (rhs)) != ARRAY_TYPE)
3970 rhs = decl_constant_value_for_broken_optimization (rhs);
3972 rhstype = TREE_TYPE (rhs);
3973 coder = TREE_CODE (rhstype);
3975 if (coder == ERROR_MARK)
3976 return error_mark_node;
3978 if (c_dialect_objc ())
3980 int parmno;
3982 switch (errtype)
3984 case ic_return:
3985 parmno = 0;
3986 break;
3988 case ic_assign:
3989 parmno = -1;
3990 break;
3992 case ic_init:
3993 parmno = -2;
3994 break;
3996 default:
3997 parmno = parmnum;
3998 break;
4001 objc_ok = objc_compare_types (type, rhstype, parmno, rname);
4004 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
4005 return rhs;
4007 if (coder == VOID_TYPE)
4009 /* Except for passing an argument to an unprototyped function,
4010 this is a constraint violation. When passing an argument to
4011 an unprototyped function, it is compile-time undefined;
4012 making it a constraint in that case was rejected in
4013 DR#252. */
4014 error ("void value not ignored as it ought to be");
4015 return error_mark_node;
4017 rhs = require_complete_type (rhs);
4018 if (rhs == error_mark_node)
4019 return error_mark_node;
4020 /* A type converts to a reference to it.
4021 This code doesn't fully support references, it's just for the
4022 special case of va_start and va_copy. */
4023 if (codel == REFERENCE_TYPE
4024 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
4026 if (!lvalue_p (rhs))
4028 error ("cannot pass rvalue to reference parameter");
4029 return error_mark_node;
4031 if (!c_mark_addressable (rhs))
4032 return error_mark_node;
4033 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
4035 /* We already know that these two types are compatible, but they
4036 may not be exactly identical. In fact, `TREE_TYPE (type)' is
4037 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
4038 likely to be va_list, a typedef to __builtin_va_list, which
4039 is different enough that it will cause problems later. */
4040 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
4041 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
4043 rhs = build1 (NOP_EXPR, type, rhs);
4044 return rhs;
4046 /* Some types can interconvert without explicit casts. */
4047 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
4048 && vector_types_convertible_p (type, TREE_TYPE (rhs), true))
4049 return convert (type, rhs);
4050 /* Arithmetic types all interconvert, and enum is treated like int. */
4051 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
4052 || codel == FIXED_POINT_TYPE
4053 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
4054 || codel == BOOLEAN_TYPE)
4055 && (coder == INTEGER_TYPE || coder == REAL_TYPE
4056 || coder == FIXED_POINT_TYPE
4057 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
4058 || coder == BOOLEAN_TYPE))
4059 return convert_and_check (type, rhs);
4061 /* Aggregates in different TUs might need conversion. */
4062 if ((codel == RECORD_TYPE || codel == UNION_TYPE)
4063 && codel == coder
4064 && comptypes (type, rhstype))
4065 return convert_and_check (type, rhs);
4067 /* Conversion to a transparent union from its member types.
4068 This applies only to function arguments. */
4069 if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
4070 && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
4072 tree memb, marginal_memb = NULL_TREE;
4074 for (memb = TYPE_FIELDS (type); memb ; memb = TREE_CHAIN (memb))
4076 tree memb_type = TREE_TYPE (memb);
4078 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
4079 TYPE_MAIN_VARIANT (rhstype)))
4080 break;
4082 if (TREE_CODE (memb_type) != POINTER_TYPE)
4083 continue;
4085 if (coder == POINTER_TYPE)
4087 tree ttl = TREE_TYPE (memb_type);
4088 tree ttr = TREE_TYPE (rhstype);
4090 /* Any non-function converts to a [const][volatile] void *
4091 and vice versa; otherwise, targets must be the same.
4092 Meanwhile, the lhs target must have all the qualifiers of
4093 the rhs. */
4094 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4095 || comp_target_types (memb_type, rhstype))
4097 /* If this type won't generate any warnings, use it. */
4098 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
4099 || ((TREE_CODE (ttr) == FUNCTION_TYPE
4100 && TREE_CODE (ttl) == FUNCTION_TYPE)
4101 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4102 == TYPE_QUALS (ttr))
4103 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
4104 == TYPE_QUALS (ttl))))
4105 break;
4107 /* Keep looking for a better type, but remember this one. */
4108 if (!marginal_memb)
4109 marginal_memb = memb;
4113 /* Can convert integer zero to any pointer type. */
4114 if (null_pointer_constant_p (rhs))
4116 rhs = null_pointer_node;
4117 break;
4121 if (memb || marginal_memb)
4123 if (!memb)
4125 /* We have only a marginally acceptable member type;
4126 it needs a warning. */
4127 tree ttl = TREE_TYPE (TREE_TYPE (marginal_memb));
4128 tree ttr = TREE_TYPE (rhstype);
4130 /* Const and volatile mean something different for function
4131 types, so the usual warnings are not appropriate. */
4132 if (TREE_CODE (ttr) == FUNCTION_TYPE
4133 && TREE_CODE (ttl) == FUNCTION_TYPE)
4135 /* Because const and volatile on functions are
4136 restrictions that say the function will not do
4137 certain things, it is okay to use a const or volatile
4138 function where an ordinary one is wanted, but not
4139 vice-versa. */
4140 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4141 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE "
4142 "makes qualified function "
4143 "pointer from unqualified"),
4144 G_("assignment makes qualified "
4145 "function pointer from "
4146 "unqualified"),
4147 G_("initialization makes qualified "
4148 "function pointer from "
4149 "unqualified"),
4150 G_("return makes qualified function "
4151 "pointer from unqualified"));
4153 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4154 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE discards "
4155 "qualifiers from pointer target type"),
4156 G_("assignment discards qualifiers "
4157 "from pointer target type"),
4158 G_("initialization discards qualifiers "
4159 "from pointer target type"),
4160 G_("return discards qualifiers from "
4161 "pointer target type"));
4163 memb = marginal_memb;
4166 if (pedantic && (!fundecl || !DECL_IN_SYSTEM_HEADER (fundecl)))
4167 pedwarn ("ISO C prohibits argument conversion to union type");
4169 rhs = fold_convert (TREE_TYPE (memb), rhs);
4170 return build_constructor_single (type, memb, rhs);
4174 /* Conversions among pointers */
4175 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
4176 && (coder == codel))
4178 tree ttl = TREE_TYPE (type);
4179 tree ttr = TREE_TYPE (rhstype);
4180 tree mvl = ttl;
4181 tree mvr = ttr;
4182 bool is_opaque_pointer;
4183 int target_cmp = 0; /* Cache comp_target_types () result. */
4185 if (TREE_CODE (mvl) != ARRAY_TYPE)
4186 mvl = TYPE_MAIN_VARIANT (mvl);
4187 if (TREE_CODE (mvr) != ARRAY_TYPE)
4188 mvr = TYPE_MAIN_VARIANT (mvr);
4189 /* Opaque pointers are treated like void pointers. */
4190 is_opaque_pointer = (targetm.vector_opaque_p (type)
4191 || targetm.vector_opaque_p (rhstype))
4192 && TREE_CODE (ttl) == VECTOR_TYPE
4193 && TREE_CODE (ttr) == VECTOR_TYPE;
4195 /* C++ does not allow the implicit conversion void* -> T*. However,
4196 for the purpose of reducing the number of false positives, we
4197 tolerate the special case of
4199 int *p = NULL;
4201 where NULL is typically defined in C to be '(void *) 0'. */
4202 if (VOID_TYPE_P (ttr) && rhs != null_pointer_node && !VOID_TYPE_P (ttl))
4203 warning (OPT_Wc___compat, "request for implicit conversion from "
4204 "%qT to %qT not permitted in C++", rhstype, type);
4206 /* Check if the right-hand side has a format attribute but the
4207 left-hand side doesn't. */
4208 if (warn_missing_format_attribute
4209 && check_missing_format_attribute (type, rhstype))
4211 switch (errtype)
4213 case ic_argpass:
4214 case ic_argpass_nonproto:
4215 warning (OPT_Wmissing_format_attribute,
4216 "argument %d of %qE might be "
4217 "a candidate for a format attribute",
4218 parmnum, rname);
4219 break;
4220 case ic_assign:
4221 warning (OPT_Wmissing_format_attribute,
4222 "assignment left-hand side might be "
4223 "a candidate for a format attribute");
4224 break;
4225 case ic_init:
4226 warning (OPT_Wmissing_format_attribute,
4227 "initialization left-hand side might be "
4228 "a candidate for a format attribute");
4229 break;
4230 case ic_return:
4231 warning (OPT_Wmissing_format_attribute,
4232 "return type might be "
4233 "a candidate for a format attribute");
4234 break;
4235 default:
4236 gcc_unreachable ();
4240 /* Any non-function converts to a [const][volatile] void *
4241 and vice versa; otherwise, targets must be the same.
4242 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
4243 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4244 || (target_cmp = comp_target_types (type, rhstype))
4245 || is_opaque_pointer
4246 || (c_common_unsigned_type (mvl)
4247 == c_common_unsigned_type (mvr)))
4249 if (pedantic
4250 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
4252 (VOID_TYPE_P (ttr)
4253 && !null_pointer_constant_p (rhs)
4254 && TREE_CODE (ttl) == FUNCTION_TYPE)))
4255 WARN_FOR_ASSIGNMENT (G_("ISO C forbids passing argument %d of "
4256 "%qE between function pointer "
4257 "and %<void *%>"),
4258 G_("ISO C forbids assignment between "
4259 "function pointer and %<void *%>"),
4260 G_("ISO C forbids initialization between "
4261 "function pointer and %<void *%>"),
4262 G_("ISO C forbids return between function "
4263 "pointer and %<void *%>"));
4264 /* Const and volatile mean something different for function types,
4265 so the usual warnings are not appropriate. */
4266 else if (TREE_CODE (ttr) != FUNCTION_TYPE
4267 && TREE_CODE (ttl) != FUNCTION_TYPE)
4269 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
4271 /* Types differing only by the presence of the 'volatile'
4272 qualifier are acceptable if the 'volatile' has been added
4273 in by the Objective-C EH machinery. */
4274 if (!objc_type_quals_match (ttl, ttr))
4275 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE discards "
4276 "qualifiers from pointer target type"),
4277 G_("assignment discards qualifiers "
4278 "from pointer target type"),
4279 G_("initialization discards qualifiers "
4280 "from pointer target type"),
4281 G_("return discards qualifiers from "
4282 "pointer target type"));
4284 /* If this is not a case of ignoring a mismatch in signedness,
4285 no warning. */
4286 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
4287 || target_cmp)
4289 /* If there is a mismatch, do warn. */
4290 else if (warn_pointer_sign)
4291 WARN_FOR_ASSIGNMENT (G_("pointer targets in passing argument "
4292 "%d of %qE differ in signedness"),
4293 G_("pointer targets in assignment "
4294 "differ in signedness"),
4295 G_("pointer targets in initialization "
4296 "differ in signedness"),
4297 G_("pointer targets in return differ "
4298 "in signedness"));
4300 else if (TREE_CODE (ttl) == FUNCTION_TYPE
4301 && TREE_CODE (ttr) == FUNCTION_TYPE)
4303 /* Because const and volatile on functions are restrictions
4304 that say the function will not do certain things,
4305 it is okay to use a const or volatile function
4306 where an ordinary one is wanted, but not vice-versa. */
4307 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
4308 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes "
4309 "qualified function pointer "
4310 "from unqualified"),
4311 G_("assignment makes qualified function "
4312 "pointer from unqualified"),
4313 G_("initialization makes qualified "
4314 "function pointer from unqualified"),
4315 G_("return makes qualified function "
4316 "pointer from unqualified"));
4319 else
4320 /* Avoid warning about the volatile ObjC EH puts on decls. */
4321 if (!objc_ok)
4322 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE from "
4323 "incompatible pointer type"),
4324 G_("assignment from incompatible pointer type"),
4325 G_("initialization from incompatible "
4326 "pointer type"),
4327 G_("return from incompatible pointer type"));
4329 return convert (type, rhs);
4331 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
4333 /* ??? This should not be an error when inlining calls to
4334 unprototyped functions. */
4335 error ("invalid use of non-lvalue array");
4336 return error_mark_node;
4338 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
4340 /* An explicit constant 0 can convert to a pointer,
4341 or one that results from arithmetic, even including
4342 a cast to integer type. */
4343 if (!null_pointer_constant_p (rhs))
4344 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes "
4345 "pointer from integer without a cast"),
4346 G_("assignment makes pointer from integer "
4347 "without a cast"),
4348 G_("initialization makes pointer from "
4349 "integer without a cast"),
4350 G_("return makes pointer from integer "
4351 "without a cast"));
4353 return convert (type, rhs);
4355 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
4357 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes integer "
4358 "from pointer without a cast"),
4359 G_("assignment makes integer from pointer "
4360 "without a cast"),
4361 G_("initialization makes integer from pointer "
4362 "without a cast"),
4363 G_("return makes integer from pointer "
4364 "without a cast"));
4365 return convert (type, rhs);
4367 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
4368 return convert (type, rhs);
4370 switch (errtype)
4372 case ic_argpass:
4373 case ic_argpass_nonproto:
4374 /* ??? This should not be an error when inlining calls to
4375 unprototyped functions. */
4376 error ("incompatible type for argument %d of %qE", parmnum, rname);
4377 break;
4378 case ic_assign:
4379 error ("incompatible types in assignment");
4380 break;
4381 case ic_init:
4382 error ("incompatible types in initialization");
4383 break;
4384 case ic_return:
4385 error ("incompatible types in return");
4386 break;
4387 default:
4388 gcc_unreachable ();
4391 return error_mark_node;
4394 /* If VALUE is a compound expr all of whose expressions are constant, then
4395 return its value. Otherwise, return error_mark_node.
4397 This is for handling COMPOUND_EXPRs as initializer elements
4398 which is allowed with a warning when -pedantic is specified. */
4400 static tree
4401 valid_compound_expr_initializer (tree value, tree endtype)
4403 if (TREE_CODE (value) == COMPOUND_EXPR)
4405 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4406 == error_mark_node)
4407 return error_mark_node;
4408 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4409 endtype);
4411 else if (!initializer_constant_valid_p (value, endtype))
4412 return error_mark_node;
4413 else
4414 return value;
4417 /* Perform appropriate conversions on the initial value of a variable,
4418 store it in the declaration DECL,
4419 and print any error messages that are appropriate.
4420 If the init is invalid, store an ERROR_MARK. */
4422 void
4423 store_init_value (tree decl, tree init)
4425 tree value, type;
4427 /* If variable's type was invalidly declared, just ignore it. */
4429 type = TREE_TYPE (decl);
4430 if (TREE_CODE (type) == ERROR_MARK)
4431 return;
4433 /* Digest the specified initializer into an expression. */
4435 value = digest_init (type, init, true, TREE_STATIC (decl));
4437 /* Store the expression if valid; else report error. */
4439 if (!in_system_header
4440 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
4441 warning (OPT_Wtraditional, "traditional C rejects automatic "
4442 "aggregate initialization");
4444 DECL_INITIAL (decl) = value;
4446 /* ANSI wants warnings about out-of-range constant initializers. */
4447 STRIP_TYPE_NOPS (value);
4448 if (TREE_STATIC (decl))
4449 constant_expression_warning (value);
4451 /* Check if we need to set array size from compound literal size. */
4452 if (TREE_CODE (type) == ARRAY_TYPE
4453 && TYPE_DOMAIN (type) == 0
4454 && value != error_mark_node)
4456 tree inside_init = init;
4458 STRIP_TYPE_NOPS (inside_init);
4459 inside_init = fold (inside_init);
4461 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4463 tree cldecl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4465 if (TYPE_DOMAIN (TREE_TYPE (cldecl)))
4467 /* For int foo[] = (int [3]){1}; we need to set array size
4468 now since later on array initializer will be just the
4469 brace enclosed list of the compound literal. */
4470 type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
4471 TREE_TYPE (decl) = type;
4472 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (cldecl));
4473 layout_type (type);
4474 layout_decl (cldecl, 0);
4480 /* Methods for storing and printing names for error messages. */
4482 /* Implement a spelling stack that allows components of a name to be pushed
4483 and popped. Each element on the stack is this structure. */
4485 struct spelling
4487 int kind;
4488 union
4490 unsigned HOST_WIDE_INT i;
4491 const char *s;
4492 } u;
4495 #define SPELLING_STRING 1
4496 #define SPELLING_MEMBER 2
4497 #define SPELLING_BOUNDS 3
4499 static struct spelling *spelling; /* Next stack element (unused). */
4500 static struct spelling *spelling_base; /* Spelling stack base. */
4501 static int spelling_size; /* Size of the spelling stack. */
4503 /* Macros to save and restore the spelling stack around push_... functions.
4504 Alternative to SAVE_SPELLING_STACK. */
4506 #define SPELLING_DEPTH() (spelling - spelling_base)
4507 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
4509 /* Push an element on the spelling stack with type KIND and assign VALUE
4510 to MEMBER. */
4512 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4514 int depth = SPELLING_DEPTH (); \
4516 if (depth >= spelling_size) \
4518 spelling_size += 10; \
4519 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
4520 spelling_size); \
4521 RESTORE_SPELLING_DEPTH (depth); \
4524 spelling->kind = (KIND); \
4525 spelling->MEMBER = (VALUE); \
4526 spelling++; \
4529 /* Push STRING on the stack. Printed literally. */
4531 static void
4532 push_string (const char *string)
4534 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4537 /* Push a member name on the stack. Printed as '.' STRING. */
4539 static void
4540 push_member_name (tree decl)
4542 const char *const string
4543 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4544 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4547 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4549 static void
4550 push_array_bounds (unsigned HOST_WIDE_INT bounds)
4552 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4555 /* Compute the maximum size in bytes of the printed spelling. */
4557 static int
4558 spelling_length (void)
4560 int size = 0;
4561 struct spelling *p;
4563 for (p = spelling_base; p < spelling; p++)
4565 if (p->kind == SPELLING_BOUNDS)
4566 size += 25;
4567 else
4568 size += strlen (p->u.s) + 1;
4571 return size;
4574 /* Print the spelling to BUFFER and return it. */
4576 static char *
4577 print_spelling (char *buffer)
4579 char *d = buffer;
4580 struct spelling *p;
4582 for (p = spelling_base; p < spelling; p++)
4583 if (p->kind == SPELLING_BOUNDS)
4585 sprintf (d, "[" HOST_WIDE_INT_PRINT_UNSIGNED "]", p->u.i);
4586 d += strlen (d);
4588 else
4590 const char *s;
4591 if (p->kind == SPELLING_MEMBER)
4592 *d++ = '.';
4593 for (s = p->u.s; (*d = *s++); d++)
4596 *d++ = '\0';
4597 return buffer;
4600 /* Issue an error message for a bad initializer component.
4601 MSGID identifies the message.
4602 The component name is taken from the spelling stack. */
4604 void
4605 error_init (const char *msgid)
4607 char *ofwhat;
4609 error ("%s", _(msgid));
4610 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4611 if (*ofwhat)
4612 error ("(near initialization for %qs)", ofwhat);
4615 /* Issue a pedantic warning for a bad initializer component.
4616 MSGID identifies the message.
4617 The component name is taken from the spelling stack. */
4619 void
4620 pedwarn_init (const char *msgid)
4622 char *ofwhat;
4624 pedwarn ("%s", _(msgid));
4625 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4626 if (*ofwhat)
4627 pedwarn ("(near initialization for %qs)", ofwhat);
4630 /* Issue a warning for a bad initializer component.
4631 MSGID identifies the message.
4632 The component name is taken from the spelling stack. */
4634 static void
4635 warning_init (const char *msgid)
4637 char *ofwhat;
4639 warning (0, "%s", _(msgid));
4640 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4641 if (*ofwhat)
4642 warning (0, "(near initialization for %qs)", ofwhat);
4645 /* If TYPE is an array type and EXPR is a parenthesized string
4646 constant, warn if pedantic that EXPR is being used to initialize an
4647 object of type TYPE. */
4649 void
4650 maybe_warn_string_init (tree type, struct c_expr expr)
4652 if (pedantic
4653 && TREE_CODE (type) == ARRAY_TYPE
4654 && TREE_CODE (expr.value) == STRING_CST
4655 && expr.original_code != STRING_CST)
4656 pedwarn_init ("array initialized from parenthesized string constant");
4659 /* Digest the parser output INIT as an initializer for type TYPE.
4660 Return a C expression of type TYPE to represent the initial value.
4662 If INIT is a string constant, STRICT_STRING is true if it is
4663 unparenthesized or we should not warn here for it being parenthesized.
4664 For other types of INIT, STRICT_STRING is not used.
4666 REQUIRE_CONSTANT requests an error if non-constant initializers or
4667 elements are seen. */
4669 static tree
4670 digest_init (tree type, tree init, bool strict_string, int require_constant)
4672 enum tree_code code = TREE_CODE (type);
4673 tree inside_init = init;
4675 if (type == error_mark_node
4676 || !init
4677 || init == error_mark_node
4678 || TREE_TYPE (init) == error_mark_node)
4679 return error_mark_node;
4681 STRIP_TYPE_NOPS (inside_init);
4683 inside_init = fold (inside_init);
4685 /* Initialization of an array of chars from a string constant
4686 optionally enclosed in braces. */
4688 if (code == ARRAY_TYPE && inside_init
4689 && TREE_CODE (inside_init) == STRING_CST)
4691 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4692 /* Note that an array could be both an array of character type
4693 and an array of wchar_t if wchar_t is signed char or unsigned
4694 char. */
4695 bool char_array = (typ1 == char_type_node
4696 || typ1 == signed_char_type_node
4697 || typ1 == unsigned_char_type_node);
4698 bool wchar_array = !!comptypes (typ1, wchar_type_node);
4699 if (char_array || wchar_array)
4701 struct c_expr expr;
4702 bool char_string;
4703 expr.value = inside_init;
4704 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4705 maybe_warn_string_init (type, expr);
4707 char_string
4708 = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4709 == char_type_node);
4711 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4712 TYPE_MAIN_VARIANT (type)))
4713 return inside_init;
4715 if (!wchar_array && !char_string)
4717 error_init ("char-array initialized from wide string");
4718 return error_mark_node;
4720 if (char_string && !char_array)
4722 error_init ("wchar_t-array initialized from non-wide string");
4723 return error_mark_node;
4726 TREE_TYPE (inside_init) = type;
4727 if (TYPE_DOMAIN (type) != 0
4728 && TYPE_SIZE (type) != 0
4729 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4730 /* Subtract 1 (or sizeof (wchar_t))
4731 because it's ok to ignore the terminating null char
4732 that is counted in the length of the constant. */
4733 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4734 TREE_STRING_LENGTH (inside_init)
4735 - ((TYPE_PRECISION (typ1)
4736 != TYPE_PRECISION (char_type_node))
4737 ? (TYPE_PRECISION (wchar_type_node)
4738 / BITS_PER_UNIT)
4739 : 1)))
4740 pedwarn_init ("initializer-string for array of chars is too long");
4742 return inside_init;
4744 else if (INTEGRAL_TYPE_P (typ1))
4746 error_init ("array of inappropriate type initialized "
4747 "from string constant");
4748 return error_mark_node;
4752 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4753 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4754 below and handle as a constructor. */
4755 if (code == VECTOR_TYPE
4756 && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
4757 && vector_types_convertible_p (TREE_TYPE (inside_init), type, true)
4758 && TREE_CONSTANT (inside_init))
4760 if (TREE_CODE (inside_init) == VECTOR_CST
4761 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4762 TYPE_MAIN_VARIANT (type)))
4763 return inside_init;
4765 if (TREE_CODE (inside_init) == CONSTRUCTOR)
4767 unsigned HOST_WIDE_INT ix;
4768 tree value;
4769 bool constant_p = true;
4771 /* Iterate through elements and check if all constructor
4772 elements are *_CSTs. */
4773 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (inside_init), ix, value)
4774 if (!CONSTANT_CLASS_P (value))
4776 constant_p = false;
4777 break;
4780 if (constant_p)
4781 return build_vector_from_ctor (type,
4782 CONSTRUCTOR_ELTS (inside_init));
4786 /* Any type can be initialized
4787 from an expression of the same type, optionally with braces. */
4789 if (inside_init && TREE_TYPE (inside_init) != 0
4790 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4791 TYPE_MAIN_VARIANT (type))
4792 || (code == ARRAY_TYPE
4793 && comptypes (TREE_TYPE (inside_init), type))
4794 || (code == VECTOR_TYPE
4795 && comptypes (TREE_TYPE (inside_init), type))
4796 || (code == POINTER_TYPE
4797 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4798 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4799 TREE_TYPE (type)))))
4801 if (code == POINTER_TYPE)
4803 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4805 if (TREE_CODE (inside_init) == STRING_CST
4806 || TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4807 inside_init = array_to_pointer_conversion (inside_init);
4808 else
4810 error_init ("invalid use of non-lvalue array");
4811 return error_mark_node;
4816 if (code == VECTOR_TYPE)
4817 /* Although the types are compatible, we may require a
4818 conversion. */
4819 inside_init = convert (type, inside_init);
4821 if (require_constant
4822 && (code == VECTOR_TYPE || !flag_isoc99)
4823 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4825 /* As an extension, allow initializing objects with static storage
4826 duration with compound literals (which are then treated just as
4827 the brace enclosed list they contain). Also allow this for
4828 vectors, as we can only assign them with compound literals. */
4829 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4830 inside_init = DECL_INITIAL (decl);
4833 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4834 && TREE_CODE (inside_init) != CONSTRUCTOR)
4836 error_init ("array initialized from non-constant array expression");
4837 return error_mark_node;
4840 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4841 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4843 /* Compound expressions can only occur here if -pedantic or
4844 -pedantic-errors is specified. In the later case, we always want
4845 an error. In the former case, we simply want a warning. */
4846 if (require_constant && pedantic
4847 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4849 inside_init
4850 = valid_compound_expr_initializer (inside_init,
4851 TREE_TYPE (inside_init));
4852 if (inside_init == error_mark_node)
4853 error_init ("initializer element is not constant");
4854 else
4855 pedwarn_init ("initializer element is not constant");
4856 if (flag_pedantic_errors)
4857 inside_init = error_mark_node;
4859 else if (require_constant
4860 && !initializer_constant_valid_p (inside_init,
4861 TREE_TYPE (inside_init)))
4863 error_init ("initializer element is not constant");
4864 inside_init = error_mark_node;
4867 /* Added to enable additional -Wmissing-format-attribute warnings. */
4868 if (TREE_CODE (TREE_TYPE (inside_init)) == POINTER_TYPE)
4869 inside_init = convert_for_assignment (type, inside_init, ic_init, NULL_TREE,
4870 NULL_TREE, 0);
4871 return inside_init;
4874 /* Handle scalar types, including conversions. */
4876 if (code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE
4877 || code == POINTER_TYPE || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE
4878 || code == COMPLEX_TYPE || code == VECTOR_TYPE)
4880 if (TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE
4881 && (TREE_CODE (init) == STRING_CST
4882 || TREE_CODE (init) == COMPOUND_LITERAL_EXPR))
4883 init = array_to_pointer_conversion (init);
4884 inside_init
4885 = convert_for_assignment (type, init, ic_init,
4886 NULL_TREE, NULL_TREE, 0);
4888 /* Check to see if we have already given an error message. */
4889 if (inside_init == error_mark_node)
4891 else if (require_constant && !TREE_CONSTANT (inside_init))
4893 error_init ("initializer element is not constant");
4894 inside_init = error_mark_node;
4896 else if (require_constant
4897 && !initializer_constant_valid_p (inside_init,
4898 TREE_TYPE (inside_init)))
4900 error_init ("initializer element is not computable at load time");
4901 inside_init = error_mark_node;
4904 return inside_init;
4907 /* Come here only for records and arrays. */
4909 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4911 error_init ("variable-sized object may not be initialized");
4912 return error_mark_node;
4915 error_init ("invalid initializer");
4916 return error_mark_node;
4919 /* Handle initializers that use braces. */
4921 /* Type of object we are accumulating a constructor for.
4922 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4923 static tree constructor_type;
4925 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4926 left to fill. */
4927 static tree constructor_fields;
4929 /* For an ARRAY_TYPE, this is the specified index
4930 at which to store the next element we get. */
4931 static tree constructor_index;
4933 /* For an ARRAY_TYPE, this is the maximum index. */
4934 static tree constructor_max_index;
4936 /* For a RECORD_TYPE, this is the first field not yet written out. */
4937 static tree constructor_unfilled_fields;
4939 /* For an ARRAY_TYPE, this is the index of the first element
4940 not yet written out. */
4941 static tree constructor_unfilled_index;
4943 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4944 This is so we can generate gaps between fields, when appropriate. */
4945 static tree constructor_bit_index;
4947 /* If we are saving up the elements rather than allocating them,
4948 this is the list of elements so far (in reverse order,
4949 most recent first). */
4950 static VEC(constructor_elt,gc) *constructor_elements;
4952 /* 1 if constructor should be incrementally stored into a constructor chain,
4953 0 if all the elements should be kept in AVL tree. */
4954 static int constructor_incremental;
4956 /* 1 if so far this constructor's elements are all compile-time constants. */
4957 static int constructor_constant;
4959 /* 1 if so far this constructor's elements are all valid address constants. */
4960 static int constructor_simple;
4962 /* 1 if this constructor is erroneous so far. */
4963 static int constructor_erroneous;
4965 /* Structure for managing pending initializer elements, organized as an
4966 AVL tree. */
4968 struct init_node
4970 struct init_node *left, *right;
4971 struct init_node *parent;
4972 int balance;
4973 tree purpose;
4974 tree value;
4977 /* Tree of pending elements at this constructor level.
4978 These are elements encountered out of order
4979 which belong at places we haven't reached yet in actually
4980 writing the output.
4981 Will never hold tree nodes across GC runs. */
4982 static struct init_node *constructor_pending_elts;
4984 /* The SPELLING_DEPTH of this constructor. */
4985 static int constructor_depth;
4987 /* DECL node for which an initializer is being read.
4988 0 means we are reading a constructor expression
4989 such as (struct foo) {...}. */
4990 static tree constructor_decl;
4992 /* Nonzero if this is an initializer for a top-level decl. */
4993 static int constructor_top_level;
4995 /* Nonzero if there were any member designators in this initializer. */
4996 static int constructor_designated;
4998 /* Nesting depth of designator list. */
4999 static int designator_depth;
5001 /* Nonzero if there were diagnosed errors in this designator list. */
5002 static int designator_erroneous;
5005 /* This stack has a level for each implicit or explicit level of
5006 structuring in the initializer, including the outermost one. It
5007 saves the values of most of the variables above. */
5009 struct constructor_range_stack;
5011 struct constructor_stack
5013 struct constructor_stack *next;
5014 tree type;
5015 tree fields;
5016 tree index;
5017 tree max_index;
5018 tree unfilled_index;
5019 tree unfilled_fields;
5020 tree bit_index;
5021 VEC(constructor_elt,gc) *elements;
5022 struct init_node *pending_elts;
5023 int offset;
5024 int depth;
5025 /* If value nonzero, this value should replace the entire
5026 constructor at this level. */
5027 struct c_expr replacement_value;
5028 struct constructor_range_stack *range_stack;
5029 char constant;
5030 char simple;
5031 char implicit;
5032 char erroneous;
5033 char outer;
5034 char incremental;
5035 char designated;
5038 static struct constructor_stack *constructor_stack;
5040 /* This stack represents designators from some range designator up to
5041 the last designator in the list. */
5043 struct constructor_range_stack
5045 struct constructor_range_stack *next, *prev;
5046 struct constructor_stack *stack;
5047 tree range_start;
5048 tree index;
5049 tree range_end;
5050 tree fields;
5053 static struct constructor_range_stack *constructor_range_stack;
5055 /* This stack records separate initializers that are nested.
5056 Nested initializers can't happen in ANSI C, but GNU C allows them
5057 in cases like { ... (struct foo) { ... } ... }. */
5059 struct initializer_stack
5061 struct initializer_stack *next;
5062 tree decl;
5063 struct constructor_stack *constructor_stack;
5064 struct constructor_range_stack *constructor_range_stack;
5065 VEC(constructor_elt,gc) *elements;
5066 struct spelling *spelling;
5067 struct spelling *spelling_base;
5068 int spelling_size;
5069 char top_level;
5070 char require_constant_value;
5071 char require_constant_elements;
5074 static struct initializer_stack *initializer_stack;
5076 /* Prepare to parse and output the initializer for variable DECL. */
5078 void
5079 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
5081 const char *locus;
5082 struct initializer_stack *p = XNEW (struct initializer_stack);
5084 p->decl = constructor_decl;
5085 p->require_constant_value = require_constant_value;
5086 p->require_constant_elements = require_constant_elements;
5087 p->constructor_stack = constructor_stack;
5088 p->constructor_range_stack = constructor_range_stack;
5089 p->elements = constructor_elements;
5090 p->spelling = spelling;
5091 p->spelling_base = spelling_base;
5092 p->spelling_size = spelling_size;
5093 p->top_level = constructor_top_level;
5094 p->next = initializer_stack;
5095 initializer_stack = p;
5097 constructor_decl = decl;
5098 constructor_designated = 0;
5099 constructor_top_level = top_level;
5101 if (decl != 0 && decl != error_mark_node)
5103 require_constant_value = TREE_STATIC (decl);
5104 require_constant_elements
5105 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
5106 /* For a scalar, you can always use any value to initialize,
5107 even within braces. */
5108 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
5109 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5110 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
5111 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
5112 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
5114 else
5116 require_constant_value = 0;
5117 require_constant_elements = 0;
5118 locus = "(anonymous)";
5121 constructor_stack = 0;
5122 constructor_range_stack = 0;
5124 missing_braces_mentioned = 0;
5126 spelling_base = 0;
5127 spelling_size = 0;
5128 RESTORE_SPELLING_DEPTH (0);
5130 if (locus)
5131 push_string (locus);
5134 void
5135 finish_init (void)
5137 struct initializer_stack *p = initializer_stack;
5139 /* Free the whole constructor stack of this initializer. */
5140 while (constructor_stack)
5142 struct constructor_stack *q = constructor_stack;
5143 constructor_stack = q->next;
5144 free (q);
5147 gcc_assert (!constructor_range_stack);
5149 /* Pop back to the data of the outer initializer (if any). */
5150 free (spelling_base);
5152 constructor_decl = p->decl;
5153 require_constant_value = p->require_constant_value;
5154 require_constant_elements = p->require_constant_elements;
5155 constructor_stack = p->constructor_stack;
5156 constructor_range_stack = p->constructor_range_stack;
5157 constructor_elements = p->elements;
5158 spelling = p->spelling;
5159 spelling_base = p->spelling_base;
5160 spelling_size = p->spelling_size;
5161 constructor_top_level = p->top_level;
5162 initializer_stack = p->next;
5163 free (p);
5166 /* Call here when we see the initializer is surrounded by braces.
5167 This is instead of a call to push_init_level;
5168 it is matched by a call to pop_init_level.
5170 TYPE is the type to initialize, for a constructor expression.
5171 For an initializer for a decl, TYPE is zero. */
5173 void
5174 really_start_incremental_init (tree type)
5176 struct constructor_stack *p = XNEW (struct constructor_stack);
5178 if (type == 0)
5179 type = TREE_TYPE (constructor_decl);
5181 if (targetm.vector_opaque_p (type))
5182 error ("opaque vector types cannot be initialized");
5184 p->type = constructor_type;
5185 p->fields = constructor_fields;
5186 p->index = constructor_index;
5187 p->max_index = constructor_max_index;
5188 p->unfilled_index = constructor_unfilled_index;
5189 p->unfilled_fields = constructor_unfilled_fields;
5190 p->bit_index = constructor_bit_index;
5191 p->elements = constructor_elements;
5192 p->constant = constructor_constant;
5193 p->simple = constructor_simple;
5194 p->erroneous = constructor_erroneous;
5195 p->pending_elts = constructor_pending_elts;
5196 p->depth = constructor_depth;
5197 p->replacement_value.value = 0;
5198 p->replacement_value.original_code = ERROR_MARK;
5199 p->implicit = 0;
5200 p->range_stack = 0;
5201 p->outer = 0;
5202 p->incremental = constructor_incremental;
5203 p->designated = constructor_designated;
5204 p->next = 0;
5205 constructor_stack = p;
5207 constructor_constant = 1;
5208 constructor_simple = 1;
5209 constructor_depth = SPELLING_DEPTH ();
5210 constructor_elements = 0;
5211 constructor_pending_elts = 0;
5212 constructor_type = type;
5213 constructor_incremental = 1;
5214 constructor_designated = 0;
5215 designator_depth = 0;
5216 designator_erroneous = 0;
5218 if (TREE_CODE (constructor_type) == RECORD_TYPE
5219 || TREE_CODE (constructor_type) == UNION_TYPE)
5221 constructor_fields = TYPE_FIELDS (constructor_type);
5222 /* Skip any nameless bit fields at the beginning. */
5223 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5224 && DECL_NAME (constructor_fields) == 0)
5225 constructor_fields = TREE_CHAIN (constructor_fields);
5227 constructor_unfilled_fields = constructor_fields;
5228 constructor_bit_index = bitsize_zero_node;
5230 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5232 if (TYPE_DOMAIN (constructor_type))
5234 constructor_max_index
5235 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5237 /* Detect non-empty initializations of zero-length arrays. */
5238 if (constructor_max_index == NULL_TREE
5239 && TYPE_SIZE (constructor_type))
5240 constructor_max_index = build_int_cst (NULL_TREE, -1);
5242 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5243 to initialize VLAs will cause a proper error; avoid tree
5244 checking errors as well by setting a safe value. */
5245 if (constructor_max_index
5246 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5247 constructor_max_index = build_int_cst (NULL_TREE, -1);
5249 constructor_index
5250 = convert (bitsizetype,
5251 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5253 else
5255 constructor_index = bitsize_zero_node;
5256 constructor_max_index = NULL_TREE;
5259 constructor_unfilled_index = constructor_index;
5261 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5263 /* Vectors are like simple fixed-size arrays. */
5264 constructor_max_index =
5265 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
5266 constructor_index = bitsize_zero_node;
5267 constructor_unfilled_index = constructor_index;
5269 else
5271 /* Handle the case of int x = {5}; */
5272 constructor_fields = constructor_type;
5273 constructor_unfilled_fields = constructor_type;
5277 /* Push down into a subobject, for initialization.
5278 If this is for an explicit set of braces, IMPLICIT is 0.
5279 If it is because the next element belongs at a lower level,
5280 IMPLICIT is 1 (or 2 if the push is because of designator list). */
5282 void
5283 push_init_level (int implicit)
5285 struct constructor_stack *p;
5286 tree value = NULL_TREE;
5288 /* If we've exhausted any levels that didn't have braces,
5289 pop them now. If implicit == 1, this will have been done in
5290 process_init_element; do not repeat it here because in the case
5291 of excess initializers for an empty aggregate this leads to an
5292 infinite cycle of popping a level and immediately recreating
5293 it. */
5294 if (implicit != 1)
5296 while (constructor_stack->implicit)
5298 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5299 || TREE_CODE (constructor_type) == UNION_TYPE)
5300 && constructor_fields == 0)
5301 process_init_element (pop_init_level (1));
5302 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
5303 && constructor_max_index
5304 && tree_int_cst_lt (constructor_max_index,
5305 constructor_index))
5306 process_init_element (pop_init_level (1));
5307 else
5308 break;
5312 /* Unless this is an explicit brace, we need to preserve previous
5313 content if any. */
5314 if (implicit)
5316 if ((TREE_CODE (constructor_type) == RECORD_TYPE
5317 || TREE_CODE (constructor_type) == UNION_TYPE)
5318 && constructor_fields)
5319 value = find_init_member (constructor_fields);
5320 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5321 value = find_init_member (constructor_index);
5324 p = XNEW (struct constructor_stack);
5325 p->type = constructor_type;
5326 p->fields = constructor_fields;
5327 p->index = constructor_index;
5328 p->max_index = constructor_max_index;
5329 p->unfilled_index = constructor_unfilled_index;
5330 p->unfilled_fields = constructor_unfilled_fields;
5331 p->bit_index = constructor_bit_index;
5332 p->elements = constructor_elements;
5333 p->constant = constructor_constant;
5334 p->simple = constructor_simple;
5335 p->erroneous = constructor_erroneous;
5336 p->pending_elts = constructor_pending_elts;
5337 p->depth = constructor_depth;
5338 p->replacement_value.value = 0;
5339 p->replacement_value.original_code = ERROR_MARK;
5340 p->implicit = implicit;
5341 p->outer = 0;
5342 p->incremental = constructor_incremental;
5343 p->designated = constructor_designated;
5344 p->next = constructor_stack;
5345 p->range_stack = 0;
5346 constructor_stack = p;
5348 constructor_constant = 1;
5349 constructor_simple = 1;
5350 constructor_depth = SPELLING_DEPTH ();
5351 constructor_elements = 0;
5352 constructor_incremental = 1;
5353 constructor_designated = 0;
5354 constructor_pending_elts = 0;
5355 if (!implicit)
5357 p->range_stack = constructor_range_stack;
5358 constructor_range_stack = 0;
5359 designator_depth = 0;
5360 designator_erroneous = 0;
5363 /* Don't die if an entire brace-pair level is superfluous
5364 in the containing level. */
5365 if (constructor_type == 0)
5367 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5368 || TREE_CODE (constructor_type) == UNION_TYPE)
5370 /* Don't die if there are extra init elts at the end. */
5371 if (constructor_fields == 0)
5372 constructor_type = 0;
5373 else
5375 constructor_type = TREE_TYPE (constructor_fields);
5376 push_member_name (constructor_fields);
5377 constructor_depth++;
5380 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5382 constructor_type = TREE_TYPE (constructor_type);
5383 push_array_bounds (tree_low_cst (constructor_index, 1));
5384 constructor_depth++;
5387 if (constructor_type == 0)
5389 error_init ("extra brace group at end of initializer");
5390 constructor_fields = 0;
5391 constructor_unfilled_fields = 0;
5392 return;
5395 if (value && TREE_CODE (value) == CONSTRUCTOR)
5397 constructor_constant = TREE_CONSTANT (value);
5398 constructor_simple = TREE_STATIC (value);
5399 constructor_elements = CONSTRUCTOR_ELTS (value);
5400 if (!VEC_empty (constructor_elt, constructor_elements)
5401 && (TREE_CODE (constructor_type) == RECORD_TYPE
5402 || TREE_CODE (constructor_type) == ARRAY_TYPE))
5403 set_nonincremental_init ();
5406 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
5408 missing_braces_mentioned = 1;
5409 warning_init ("missing braces around initializer");
5412 if (TREE_CODE (constructor_type) == RECORD_TYPE
5413 || TREE_CODE (constructor_type) == UNION_TYPE)
5415 constructor_fields = TYPE_FIELDS (constructor_type);
5416 /* Skip any nameless bit fields at the beginning. */
5417 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5418 && DECL_NAME (constructor_fields) == 0)
5419 constructor_fields = TREE_CHAIN (constructor_fields);
5421 constructor_unfilled_fields = constructor_fields;
5422 constructor_bit_index = bitsize_zero_node;
5424 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5426 /* Vectors are like simple fixed-size arrays. */
5427 constructor_max_index =
5428 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
5429 constructor_index = convert (bitsizetype, integer_zero_node);
5430 constructor_unfilled_index = constructor_index;
5432 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5434 if (TYPE_DOMAIN (constructor_type))
5436 constructor_max_index
5437 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5439 /* Detect non-empty initializations of zero-length arrays. */
5440 if (constructor_max_index == NULL_TREE
5441 && TYPE_SIZE (constructor_type))
5442 constructor_max_index = build_int_cst (NULL_TREE, -1);
5444 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5445 to initialize VLAs will cause a proper error; avoid tree
5446 checking errors as well by setting a safe value. */
5447 if (constructor_max_index
5448 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5449 constructor_max_index = build_int_cst (NULL_TREE, -1);
5451 constructor_index
5452 = convert (bitsizetype,
5453 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5455 else
5456 constructor_index = bitsize_zero_node;
5458 constructor_unfilled_index = constructor_index;
5459 if (value && TREE_CODE (value) == STRING_CST)
5461 /* We need to split the char/wchar array into individual
5462 characters, so that we don't have to special case it
5463 everywhere. */
5464 set_nonincremental_init_from_string (value);
5467 else
5469 if (constructor_type != error_mark_node)
5470 warning_init ("braces around scalar initializer");
5471 constructor_fields = constructor_type;
5472 constructor_unfilled_fields = constructor_type;
5476 /* At the end of an implicit or explicit brace level,
5477 finish up that level of constructor. If a single expression
5478 with redundant braces initialized that level, return the
5479 c_expr structure for that expression. Otherwise, the original_code
5480 element is set to ERROR_MARK.
5481 If we were outputting the elements as they are read, return 0 as the value
5482 from inner levels (process_init_element ignores that),
5483 but return error_mark_node as the value from the outermost level
5484 (that's what we want to put in DECL_INITIAL).
5485 Otherwise, return a CONSTRUCTOR expression as the value. */
5487 struct c_expr
5488 pop_init_level (int implicit)
5490 struct constructor_stack *p;
5491 struct c_expr ret;
5492 ret.value = 0;
5493 ret.original_code = ERROR_MARK;
5495 if (implicit == 0)
5497 /* When we come to an explicit close brace,
5498 pop any inner levels that didn't have explicit braces. */
5499 while (constructor_stack->implicit)
5500 process_init_element (pop_init_level (1));
5502 gcc_assert (!constructor_range_stack);
5505 /* Now output all pending elements. */
5506 constructor_incremental = 1;
5507 output_pending_init_elements (1);
5509 p = constructor_stack;
5511 /* Error for initializing a flexible array member, or a zero-length
5512 array member in an inappropriate context. */
5513 if (constructor_type && constructor_fields
5514 && TREE_CODE (constructor_type) == ARRAY_TYPE
5515 && TYPE_DOMAIN (constructor_type)
5516 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5518 /* Silently discard empty initializations. The parser will
5519 already have pedwarned for empty brackets. */
5520 if (integer_zerop (constructor_unfilled_index))
5521 constructor_type = NULL_TREE;
5522 else
5524 gcc_assert (!TYPE_SIZE (constructor_type));
5526 if (constructor_depth > 2)
5527 error_init ("initialization of flexible array member in a nested context");
5528 else if (pedantic)
5529 pedwarn_init ("initialization of a flexible array member");
5531 /* We have already issued an error message for the existence
5532 of a flexible array member not at the end of the structure.
5533 Discard the initializer so that we do not die later. */
5534 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
5535 constructor_type = NULL_TREE;
5539 /* Warn when some struct elements are implicitly initialized to zero. */
5540 if (warn_missing_field_initializers
5541 && constructor_type
5542 && TREE_CODE (constructor_type) == RECORD_TYPE
5543 && constructor_unfilled_fields)
5545 /* Do not warn for flexible array members or zero-length arrays. */
5546 while (constructor_unfilled_fields
5547 && (!DECL_SIZE (constructor_unfilled_fields)
5548 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
5549 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5551 /* Do not warn if this level of the initializer uses member
5552 designators; it is likely to be deliberate. */
5553 if (constructor_unfilled_fields && !constructor_designated)
5555 push_member_name (constructor_unfilled_fields);
5556 warning_init ("missing initializer");
5557 RESTORE_SPELLING_DEPTH (constructor_depth);
5561 /* Pad out the end of the structure. */
5562 if (p->replacement_value.value)
5563 /* If this closes a superfluous brace pair,
5564 just pass out the element between them. */
5565 ret = p->replacement_value;
5566 else if (constructor_type == 0)
5568 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5569 && TREE_CODE (constructor_type) != UNION_TYPE
5570 && TREE_CODE (constructor_type) != ARRAY_TYPE
5571 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5573 /* A nonincremental scalar initializer--just return
5574 the element, after verifying there is just one. */
5575 if (VEC_empty (constructor_elt,constructor_elements))
5577 if (!constructor_erroneous)
5578 error_init ("empty scalar initializer");
5579 ret.value = error_mark_node;
5581 else if (VEC_length (constructor_elt,constructor_elements) != 1)
5583 error_init ("extra elements in scalar initializer");
5584 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
5586 else
5587 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
5589 else
5591 if (constructor_erroneous)
5592 ret.value = error_mark_node;
5593 else
5595 ret.value = build_constructor (constructor_type,
5596 constructor_elements);
5597 if (constructor_constant)
5598 TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
5599 if (constructor_constant && constructor_simple)
5600 TREE_STATIC (ret.value) = 1;
5604 constructor_type = p->type;
5605 constructor_fields = p->fields;
5606 constructor_index = p->index;
5607 constructor_max_index = p->max_index;
5608 constructor_unfilled_index = p->unfilled_index;
5609 constructor_unfilled_fields = p->unfilled_fields;
5610 constructor_bit_index = p->bit_index;
5611 constructor_elements = p->elements;
5612 constructor_constant = p->constant;
5613 constructor_simple = p->simple;
5614 constructor_erroneous = p->erroneous;
5615 constructor_incremental = p->incremental;
5616 constructor_designated = p->designated;
5617 constructor_pending_elts = p->pending_elts;
5618 constructor_depth = p->depth;
5619 if (!p->implicit)
5620 constructor_range_stack = p->range_stack;
5621 RESTORE_SPELLING_DEPTH (constructor_depth);
5623 constructor_stack = p->next;
5624 free (p);
5626 if (ret.value == 0 && constructor_stack == 0)
5627 ret.value = error_mark_node;
5628 return ret;
5631 /* Common handling for both array range and field name designators.
5632 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5634 static int
5635 set_designator (int array)
5637 tree subtype;
5638 enum tree_code subcode;
5640 /* Don't die if an entire brace-pair level is superfluous
5641 in the containing level. */
5642 if (constructor_type == 0)
5643 return 1;
5645 /* If there were errors in this designator list already, bail out
5646 silently. */
5647 if (designator_erroneous)
5648 return 1;
5650 if (!designator_depth)
5652 gcc_assert (!constructor_range_stack);
5654 /* Designator list starts at the level of closest explicit
5655 braces. */
5656 while (constructor_stack->implicit)
5657 process_init_element (pop_init_level (1));
5658 constructor_designated = 1;
5659 return 0;
5662 switch (TREE_CODE (constructor_type))
5664 case RECORD_TYPE:
5665 case UNION_TYPE:
5666 subtype = TREE_TYPE (constructor_fields);
5667 if (subtype != error_mark_node)
5668 subtype = TYPE_MAIN_VARIANT (subtype);
5669 break;
5670 case ARRAY_TYPE:
5671 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5672 break;
5673 default:
5674 gcc_unreachable ();
5677 subcode = TREE_CODE (subtype);
5678 if (array && subcode != ARRAY_TYPE)
5680 error_init ("array index in non-array initializer");
5681 return 1;
5683 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5685 error_init ("field name not in record or union initializer");
5686 return 1;
5689 constructor_designated = 1;
5690 push_init_level (2);
5691 return 0;
5694 /* If there are range designators in designator list, push a new designator
5695 to constructor_range_stack. RANGE_END is end of such stack range or
5696 NULL_TREE if there is no range designator at this level. */
5698 static void
5699 push_range_stack (tree range_end)
5701 struct constructor_range_stack *p;
5703 p = GGC_NEW (struct constructor_range_stack);
5704 p->prev = constructor_range_stack;
5705 p->next = 0;
5706 p->fields = constructor_fields;
5707 p->range_start = constructor_index;
5708 p->index = constructor_index;
5709 p->stack = constructor_stack;
5710 p->range_end = range_end;
5711 if (constructor_range_stack)
5712 constructor_range_stack->next = p;
5713 constructor_range_stack = p;
5716 /* Within an array initializer, specify the next index to be initialized.
5717 FIRST is that index. If LAST is nonzero, then initialize a range
5718 of indices, running from FIRST through LAST. */
5720 void
5721 set_init_index (tree first, tree last)
5723 if (set_designator (1))
5724 return;
5726 designator_erroneous = 1;
5728 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5729 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5731 error_init ("array index in initializer not of integer type");
5732 return;
5735 if (TREE_CODE (first) != INTEGER_CST)
5736 error_init ("nonconstant array index in initializer");
5737 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5738 error_init ("nonconstant array index in initializer");
5739 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5740 error_init ("array index in non-array initializer");
5741 else if (tree_int_cst_sgn (first) == -1)
5742 error_init ("array index in initializer exceeds array bounds");
5743 else if (constructor_max_index
5744 && tree_int_cst_lt (constructor_max_index, first))
5745 error_init ("array index in initializer exceeds array bounds");
5746 else
5748 constructor_index = convert (bitsizetype, first);
5750 if (last)
5752 if (tree_int_cst_equal (first, last))
5753 last = 0;
5754 else if (tree_int_cst_lt (last, first))
5756 error_init ("empty index range in initializer");
5757 last = 0;
5759 else
5761 last = convert (bitsizetype, last);
5762 if (constructor_max_index != 0
5763 && tree_int_cst_lt (constructor_max_index, last))
5765 error_init ("array index range in initializer exceeds array bounds");
5766 last = 0;
5771 designator_depth++;
5772 designator_erroneous = 0;
5773 if (constructor_range_stack || last)
5774 push_range_stack (last);
5778 /* Within a struct initializer, specify the next field to be initialized. */
5780 void
5781 set_init_label (tree fieldname)
5783 tree tail;
5785 if (set_designator (0))
5786 return;
5788 designator_erroneous = 1;
5790 if (TREE_CODE (constructor_type) != RECORD_TYPE
5791 && TREE_CODE (constructor_type) != UNION_TYPE)
5793 error_init ("field name not in record or union initializer");
5794 return;
5797 for (tail = TYPE_FIELDS (constructor_type); tail;
5798 tail = TREE_CHAIN (tail))
5800 if (DECL_NAME (tail) == fieldname)
5801 break;
5804 if (tail == 0)
5805 error ("unknown field %qE specified in initializer", fieldname);
5806 else
5808 constructor_fields = tail;
5809 designator_depth++;
5810 designator_erroneous = 0;
5811 if (constructor_range_stack)
5812 push_range_stack (NULL_TREE);
5816 /* Add a new initializer to the tree of pending initializers. PURPOSE
5817 identifies the initializer, either array index or field in a structure.
5818 VALUE is the value of that index or field. */
5820 static void
5821 add_pending_init (tree purpose, tree value)
5823 struct init_node *p, **q, *r;
5825 q = &constructor_pending_elts;
5826 p = 0;
5828 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5830 while (*q != 0)
5832 p = *q;
5833 if (tree_int_cst_lt (purpose, p->purpose))
5834 q = &p->left;
5835 else if (tree_int_cst_lt (p->purpose, purpose))
5836 q = &p->right;
5837 else
5839 if (TREE_SIDE_EFFECTS (p->value))
5840 warning_init ("initialized field with side-effects overwritten");
5841 else if (warn_override_init)
5842 warning_init ("initialized field overwritten");
5843 p->value = value;
5844 return;
5848 else
5850 tree bitpos;
5852 bitpos = bit_position (purpose);
5853 while (*q != NULL)
5855 p = *q;
5856 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5857 q = &p->left;
5858 else if (p->purpose != purpose)
5859 q = &p->right;
5860 else
5862 if (TREE_SIDE_EFFECTS (p->value))
5863 warning_init ("initialized field with side-effects overwritten");
5864 else if (warn_override_init)
5865 warning_init ("initialized field overwritten");
5866 p->value = value;
5867 return;
5872 r = GGC_NEW (struct init_node);
5873 r->purpose = purpose;
5874 r->value = value;
5876 *q = r;
5877 r->parent = p;
5878 r->left = 0;
5879 r->right = 0;
5880 r->balance = 0;
5882 while (p)
5884 struct init_node *s;
5886 if (r == p->left)
5888 if (p->balance == 0)
5889 p->balance = -1;
5890 else if (p->balance < 0)
5892 if (r->balance < 0)
5894 /* L rotation. */
5895 p->left = r->right;
5896 if (p->left)
5897 p->left->parent = p;
5898 r->right = p;
5900 p->balance = 0;
5901 r->balance = 0;
5903 s = p->parent;
5904 p->parent = r;
5905 r->parent = s;
5906 if (s)
5908 if (s->left == p)
5909 s->left = r;
5910 else
5911 s->right = r;
5913 else
5914 constructor_pending_elts = r;
5916 else
5918 /* LR rotation. */
5919 struct init_node *t = r->right;
5921 r->right = t->left;
5922 if (r->right)
5923 r->right->parent = r;
5924 t->left = r;
5926 p->left = t->right;
5927 if (p->left)
5928 p->left->parent = p;
5929 t->right = p;
5931 p->balance = t->balance < 0;
5932 r->balance = -(t->balance > 0);
5933 t->balance = 0;
5935 s = p->parent;
5936 p->parent = t;
5937 r->parent = t;
5938 t->parent = s;
5939 if (s)
5941 if (s->left == p)
5942 s->left = t;
5943 else
5944 s->right = t;
5946 else
5947 constructor_pending_elts = t;
5949 break;
5951 else
5953 /* p->balance == +1; growth of left side balances the node. */
5954 p->balance = 0;
5955 break;
5958 else /* r == p->right */
5960 if (p->balance == 0)
5961 /* Growth propagation from right side. */
5962 p->balance++;
5963 else if (p->balance > 0)
5965 if (r->balance > 0)
5967 /* R rotation. */
5968 p->right = r->left;
5969 if (p->right)
5970 p->right->parent = p;
5971 r->left = p;
5973 p->balance = 0;
5974 r->balance = 0;
5976 s = p->parent;
5977 p->parent = r;
5978 r->parent = s;
5979 if (s)
5981 if (s->left == p)
5982 s->left = r;
5983 else
5984 s->right = r;
5986 else
5987 constructor_pending_elts = r;
5989 else /* r->balance == -1 */
5991 /* RL rotation */
5992 struct init_node *t = r->left;
5994 r->left = t->right;
5995 if (r->left)
5996 r->left->parent = r;
5997 t->right = r;
5999 p->right = t->left;
6000 if (p->right)
6001 p->right->parent = p;
6002 t->left = p;
6004 r->balance = (t->balance < 0);
6005 p->balance = -(t->balance > 0);
6006 t->balance = 0;
6008 s = p->parent;
6009 p->parent = t;
6010 r->parent = t;
6011 t->parent = s;
6012 if (s)
6014 if (s->left == p)
6015 s->left = t;
6016 else
6017 s->right = t;
6019 else
6020 constructor_pending_elts = t;
6022 break;
6024 else
6026 /* p->balance == -1; growth of right side balances the node. */
6027 p->balance = 0;
6028 break;
6032 r = p;
6033 p = p->parent;
6037 /* Build AVL tree from a sorted chain. */
6039 static void
6040 set_nonincremental_init (void)
6042 unsigned HOST_WIDE_INT ix;
6043 tree index, value;
6045 if (TREE_CODE (constructor_type) != RECORD_TYPE
6046 && TREE_CODE (constructor_type) != ARRAY_TYPE)
6047 return;
6049 FOR_EACH_CONSTRUCTOR_ELT (constructor_elements, ix, index, value)
6050 add_pending_init (index, value);
6051 constructor_elements = 0;
6052 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6054 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
6055 /* Skip any nameless bit fields at the beginning. */
6056 while (constructor_unfilled_fields != 0
6057 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6058 && DECL_NAME (constructor_unfilled_fields) == 0)
6059 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
6062 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6064 if (TYPE_DOMAIN (constructor_type))
6065 constructor_unfilled_index
6066 = convert (bitsizetype,
6067 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
6068 else
6069 constructor_unfilled_index = bitsize_zero_node;
6071 constructor_incremental = 0;
6074 /* Build AVL tree from a string constant. */
6076 static void
6077 set_nonincremental_init_from_string (tree str)
6079 tree value, purpose, type;
6080 HOST_WIDE_INT val[2];
6081 const char *p, *end;
6082 int byte, wchar_bytes, charwidth, bitpos;
6084 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
6086 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
6087 == TYPE_PRECISION (char_type_node))
6088 wchar_bytes = 1;
6089 else
6091 gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
6092 == TYPE_PRECISION (wchar_type_node));
6093 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
6095 charwidth = TYPE_PRECISION (char_type_node);
6096 type = TREE_TYPE (constructor_type);
6097 p = TREE_STRING_POINTER (str);
6098 end = p + TREE_STRING_LENGTH (str);
6100 for (purpose = bitsize_zero_node;
6101 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
6102 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
6104 if (wchar_bytes == 1)
6106 val[1] = (unsigned char) *p++;
6107 val[0] = 0;
6109 else
6111 val[0] = 0;
6112 val[1] = 0;
6113 for (byte = 0; byte < wchar_bytes; byte++)
6115 if (BYTES_BIG_ENDIAN)
6116 bitpos = (wchar_bytes - byte - 1) * charwidth;
6117 else
6118 bitpos = byte * charwidth;
6119 val[bitpos < HOST_BITS_PER_WIDE_INT]
6120 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
6121 << (bitpos % HOST_BITS_PER_WIDE_INT);
6125 if (!TYPE_UNSIGNED (type))
6127 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
6128 if (bitpos < HOST_BITS_PER_WIDE_INT)
6130 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
6132 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
6133 val[0] = -1;
6136 else if (bitpos == HOST_BITS_PER_WIDE_INT)
6138 if (val[1] < 0)
6139 val[0] = -1;
6141 else if (val[0] & (((HOST_WIDE_INT) 1)
6142 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
6143 val[0] |= ((HOST_WIDE_INT) -1)
6144 << (bitpos - HOST_BITS_PER_WIDE_INT);
6147 value = build_int_cst_wide (type, val[1], val[0]);
6148 add_pending_init (purpose, value);
6151 constructor_incremental = 0;
6154 /* Return value of FIELD in pending initializer or zero if the field was
6155 not initialized yet. */
6157 static tree
6158 find_init_member (tree field)
6160 struct init_node *p;
6162 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6164 if (constructor_incremental
6165 && tree_int_cst_lt (field, constructor_unfilled_index))
6166 set_nonincremental_init ();
6168 p = constructor_pending_elts;
6169 while (p)
6171 if (tree_int_cst_lt (field, p->purpose))
6172 p = p->left;
6173 else if (tree_int_cst_lt (p->purpose, field))
6174 p = p->right;
6175 else
6176 return p->value;
6179 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6181 tree bitpos = bit_position (field);
6183 if (constructor_incremental
6184 && (!constructor_unfilled_fields
6185 || tree_int_cst_lt (bitpos,
6186 bit_position (constructor_unfilled_fields))))
6187 set_nonincremental_init ();
6189 p = constructor_pending_elts;
6190 while (p)
6192 if (field == p->purpose)
6193 return p->value;
6194 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
6195 p = p->left;
6196 else
6197 p = p->right;
6200 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6202 if (!VEC_empty (constructor_elt, constructor_elements)
6203 && (VEC_last (constructor_elt, constructor_elements)->index
6204 == field))
6205 return VEC_last (constructor_elt, constructor_elements)->value;
6207 return 0;
6210 /* "Output" the next constructor element.
6211 At top level, really output it to assembler code now.
6212 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
6213 TYPE is the data type that the containing data type wants here.
6214 FIELD is the field (a FIELD_DECL) or the index that this element fills.
6215 If VALUE is a string constant, STRICT_STRING is true if it is
6216 unparenthesized or we should not warn here for it being parenthesized.
6217 For other types of VALUE, STRICT_STRING is not used.
6219 PENDING if non-nil means output pending elements that belong
6220 right after this element. (PENDING is normally 1;
6221 it is 0 while outputting pending elements, to avoid recursion.) */
6223 static void
6224 output_init_element (tree value, bool strict_string, tree type, tree field,
6225 int pending)
6227 constructor_elt *celt;
6229 if (type == error_mark_node || value == error_mark_node)
6231 constructor_erroneous = 1;
6232 return;
6234 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
6235 && (TREE_CODE (value) == STRING_CST
6236 || TREE_CODE (value) == COMPOUND_LITERAL_EXPR)
6237 && !(TREE_CODE (value) == STRING_CST
6238 && TREE_CODE (type) == ARRAY_TYPE
6239 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
6240 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
6241 TYPE_MAIN_VARIANT (type)))
6242 value = array_to_pointer_conversion (value);
6244 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
6245 && require_constant_value && !flag_isoc99 && pending)
6247 /* As an extension, allow initializing objects with static storage
6248 duration with compound literals (which are then treated just as
6249 the brace enclosed list they contain). */
6250 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
6251 value = DECL_INITIAL (decl);
6254 if (value == error_mark_node)
6255 constructor_erroneous = 1;
6256 else if (!TREE_CONSTANT (value))
6257 constructor_constant = 0;
6258 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
6259 || ((TREE_CODE (constructor_type) == RECORD_TYPE
6260 || TREE_CODE (constructor_type) == UNION_TYPE)
6261 && DECL_C_BIT_FIELD (field)
6262 && TREE_CODE (value) != INTEGER_CST))
6263 constructor_simple = 0;
6265 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
6267 if (require_constant_value)
6269 error_init ("initializer element is not constant");
6270 value = error_mark_node;
6272 else if (require_constant_elements)
6273 pedwarn ("initializer element is not computable at load time");
6276 /* If this field is empty (and not at the end of structure),
6277 don't do anything other than checking the initializer. */
6278 if (field
6279 && (TREE_TYPE (field) == error_mark_node
6280 || (COMPLETE_TYPE_P (TREE_TYPE (field))
6281 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
6282 && (TREE_CODE (constructor_type) == ARRAY_TYPE
6283 || TREE_CHAIN (field)))))
6284 return;
6286 value = digest_init (type, value, strict_string, require_constant_value);
6287 if (value == error_mark_node)
6289 constructor_erroneous = 1;
6290 return;
6293 /* If this element doesn't come next in sequence,
6294 put it on constructor_pending_elts. */
6295 if (TREE_CODE (constructor_type) == ARRAY_TYPE
6296 && (!constructor_incremental
6297 || !tree_int_cst_equal (field, constructor_unfilled_index)))
6299 if (constructor_incremental
6300 && tree_int_cst_lt (field, constructor_unfilled_index))
6301 set_nonincremental_init ();
6303 add_pending_init (field, value);
6304 return;
6306 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6307 && (!constructor_incremental
6308 || field != constructor_unfilled_fields))
6310 /* We do this for records but not for unions. In a union,
6311 no matter which field is specified, it can be initialized
6312 right away since it starts at the beginning of the union. */
6313 if (constructor_incremental)
6315 if (!constructor_unfilled_fields)
6316 set_nonincremental_init ();
6317 else
6319 tree bitpos, unfillpos;
6321 bitpos = bit_position (field);
6322 unfillpos = bit_position (constructor_unfilled_fields);
6324 if (tree_int_cst_lt (bitpos, unfillpos))
6325 set_nonincremental_init ();
6329 add_pending_init (field, value);
6330 return;
6332 else if (TREE_CODE (constructor_type) == UNION_TYPE
6333 && !VEC_empty (constructor_elt, constructor_elements))
6335 if (TREE_SIDE_EFFECTS (VEC_last (constructor_elt,
6336 constructor_elements)->value))
6337 warning_init ("initialized field with side-effects overwritten");
6338 else if (warn_override_init)
6339 warning_init ("initialized field overwritten");
6341 /* We can have just one union field set. */
6342 constructor_elements = 0;
6345 /* Otherwise, output this element either to
6346 constructor_elements or to the assembler file. */
6348 celt = VEC_safe_push (constructor_elt, gc, constructor_elements, NULL);
6349 celt->index = field;
6350 celt->value = value;
6352 /* Advance the variable that indicates sequential elements output. */
6353 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6354 constructor_unfilled_index
6355 = size_binop (PLUS_EXPR, constructor_unfilled_index,
6356 bitsize_one_node);
6357 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6359 constructor_unfilled_fields
6360 = TREE_CHAIN (constructor_unfilled_fields);
6362 /* Skip any nameless bit fields. */
6363 while (constructor_unfilled_fields != 0
6364 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6365 && DECL_NAME (constructor_unfilled_fields) == 0)
6366 constructor_unfilled_fields =
6367 TREE_CHAIN (constructor_unfilled_fields);
6369 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6370 constructor_unfilled_fields = 0;
6372 /* Now output any pending elements which have become next. */
6373 if (pending)
6374 output_pending_init_elements (0);
6377 /* Output any pending elements which have become next.
6378 As we output elements, constructor_unfilled_{fields,index}
6379 advances, which may cause other elements to become next;
6380 if so, they too are output.
6382 If ALL is 0, we return when there are
6383 no more pending elements to output now.
6385 If ALL is 1, we output space as necessary so that
6386 we can output all the pending elements. */
6388 static void
6389 output_pending_init_elements (int all)
6391 struct init_node *elt = constructor_pending_elts;
6392 tree next;
6394 retry:
6396 /* Look through the whole pending tree.
6397 If we find an element that should be output now,
6398 output it. Otherwise, set NEXT to the element
6399 that comes first among those still pending. */
6401 next = 0;
6402 while (elt)
6404 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6406 if (tree_int_cst_equal (elt->purpose,
6407 constructor_unfilled_index))
6408 output_init_element (elt->value, true,
6409 TREE_TYPE (constructor_type),
6410 constructor_unfilled_index, 0);
6411 else if (tree_int_cst_lt (constructor_unfilled_index,
6412 elt->purpose))
6414 /* Advance to the next smaller node. */
6415 if (elt->left)
6416 elt = elt->left;
6417 else
6419 /* We have reached the smallest node bigger than the
6420 current unfilled index. Fill the space first. */
6421 next = elt->purpose;
6422 break;
6425 else
6427 /* Advance to the next bigger node. */
6428 if (elt->right)
6429 elt = elt->right;
6430 else
6432 /* We have reached the biggest node in a subtree. Find
6433 the parent of it, which is the next bigger node. */
6434 while (elt->parent && elt->parent->right == elt)
6435 elt = elt->parent;
6436 elt = elt->parent;
6437 if (elt && tree_int_cst_lt (constructor_unfilled_index,
6438 elt->purpose))
6440 next = elt->purpose;
6441 break;
6446 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6447 || TREE_CODE (constructor_type) == UNION_TYPE)
6449 tree ctor_unfilled_bitpos, elt_bitpos;
6451 /* If the current record is complete we are done. */
6452 if (constructor_unfilled_fields == 0)
6453 break;
6455 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
6456 elt_bitpos = bit_position (elt->purpose);
6457 /* We can't compare fields here because there might be empty
6458 fields in between. */
6459 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
6461 constructor_unfilled_fields = elt->purpose;
6462 output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
6463 elt->purpose, 0);
6465 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
6467 /* Advance to the next smaller node. */
6468 if (elt->left)
6469 elt = elt->left;
6470 else
6472 /* We have reached the smallest node bigger than the
6473 current unfilled field. Fill the space first. */
6474 next = elt->purpose;
6475 break;
6478 else
6480 /* Advance to the next bigger node. */
6481 if (elt->right)
6482 elt = elt->right;
6483 else
6485 /* We have reached the biggest node in a subtree. Find
6486 the parent of it, which is the next bigger node. */
6487 while (elt->parent && elt->parent->right == elt)
6488 elt = elt->parent;
6489 elt = elt->parent;
6490 if (elt
6491 && (tree_int_cst_lt (ctor_unfilled_bitpos,
6492 bit_position (elt->purpose))))
6494 next = elt->purpose;
6495 break;
6502 /* Ordinarily return, but not if we want to output all
6503 and there are elements left. */
6504 if (!(all && next != 0))
6505 return;
6507 /* If it's not incremental, just skip over the gap, so that after
6508 jumping to retry we will output the next successive element. */
6509 if (TREE_CODE (constructor_type) == RECORD_TYPE
6510 || TREE_CODE (constructor_type) == UNION_TYPE)
6511 constructor_unfilled_fields = next;
6512 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6513 constructor_unfilled_index = next;
6515 /* ELT now points to the node in the pending tree with the next
6516 initializer to output. */
6517 goto retry;
6520 /* Add one non-braced element to the current constructor level.
6521 This adjusts the current position within the constructor's type.
6522 This may also start or terminate implicit levels
6523 to handle a partly-braced initializer.
6525 Once this has found the correct level for the new element,
6526 it calls output_init_element. */
6528 void
6529 process_init_element (struct c_expr value)
6531 tree orig_value = value.value;
6532 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
6533 bool strict_string = value.original_code == STRING_CST;
6535 designator_depth = 0;
6536 designator_erroneous = 0;
6538 /* Handle superfluous braces around string cst as in
6539 char x[] = {"foo"}; */
6540 if (string_flag
6541 && constructor_type
6542 && TREE_CODE (constructor_type) == ARRAY_TYPE
6543 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
6544 && integer_zerop (constructor_unfilled_index))
6546 if (constructor_stack->replacement_value.value)
6547 error_init ("excess elements in char array initializer");
6548 constructor_stack->replacement_value = value;
6549 return;
6552 if (constructor_stack->replacement_value.value != 0)
6554 error_init ("excess elements in struct initializer");
6555 return;
6558 /* Ignore elements of a brace group if it is entirely superfluous
6559 and has already been diagnosed. */
6560 if (constructor_type == 0)
6561 return;
6563 /* If we've exhausted any levels that didn't have braces,
6564 pop them now. */
6565 while (constructor_stack->implicit)
6567 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6568 || TREE_CODE (constructor_type) == UNION_TYPE)
6569 && constructor_fields == 0)
6570 process_init_element (pop_init_level (1));
6571 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6572 && (constructor_max_index == 0
6573 || tree_int_cst_lt (constructor_max_index,
6574 constructor_index)))
6575 process_init_element (pop_init_level (1));
6576 else
6577 break;
6580 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6581 if (constructor_range_stack)
6583 /* If value is a compound literal and we'll be just using its
6584 content, don't put it into a SAVE_EXPR. */
6585 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
6586 || !require_constant_value
6587 || flag_isoc99)
6588 value.value = save_expr (value.value);
6591 while (1)
6593 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6595 tree fieldtype;
6596 enum tree_code fieldcode;
6598 if (constructor_fields == 0)
6600 pedwarn_init ("excess elements in struct initializer");
6601 break;
6604 fieldtype = TREE_TYPE (constructor_fields);
6605 if (fieldtype != error_mark_node)
6606 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6607 fieldcode = TREE_CODE (fieldtype);
6609 /* Error for non-static initialization of a flexible array member. */
6610 if (fieldcode == ARRAY_TYPE
6611 && !require_constant_value
6612 && TYPE_SIZE (fieldtype) == NULL_TREE
6613 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6615 error_init ("non-static initialization of a flexible array member");
6616 break;
6619 /* Accept a string constant to initialize a subarray. */
6620 if (value.value != 0
6621 && fieldcode == ARRAY_TYPE
6622 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6623 && string_flag)
6624 value.value = orig_value;
6625 /* Otherwise, if we have come to a subaggregate,
6626 and we don't have an element of its type, push into it. */
6627 else if (value.value != 0
6628 && value.value != error_mark_node
6629 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6630 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6631 || fieldcode == UNION_TYPE))
6633 push_init_level (1);
6634 continue;
6637 if (value.value)
6639 push_member_name (constructor_fields);
6640 output_init_element (value.value, strict_string,
6641 fieldtype, constructor_fields, 1);
6642 RESTORE_SPELLING_DEPTH (constructor_depth);
6644 else
6645 /* Do the bookkeeping for an element that was
6646 directly output as a constructor. */
6648 /* For a record, keep track of end position of last field. */
6649 if (DECL_SIZE (constructor_fields))
6650 constructor_bit_index
6651 = size_binop (PLUS_EXPR,
6652 bit_position (constructor_fields),
6653 DECL_SIZE (constructor_fields));
6655 /* If the current field was the first one not yet written out,
6656 it isn't now, so update. */
6657 if (constructor_unfilled_fields == constructor_fields)
6659 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6660 /* Skip any nameless bit fields. */
6661 while (constructor_unfilled_fields != 0
6662 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6663 && DECL_NAME (constructor_unfilled_fields) == 0)
6664 constructor_unfilled_fields =
6665 TREE_CHAIN (constructor_unfilled_fields);
6669 constructor_fields = TREE_CHAIN (constructor_fields);
6670 /* Skip any nameless bit fields at the beginning. */
6671 while (constructor_fields != 0
6672 && DECL_C_BIT_FIELD (constructor_fields)
6673 && DECL_NAME (constructor_fields) == 0)
6674 constructor_fields = TREE_CHAIN (constructor_fields);
6676 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6678 tree fieldtype;
6679 enum tree_code fieldcode;
6681 if (constructor_fields == 0)
6683 pedwarn_init ("excess elements in union initializer");
6684 break;
6687 fieldtype = TREE_TYPE (constructor_fields);
6688 if (fieldtype != error_mark_node)
6689 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6690 fieldcode = TREE_CODE (fieldtype);
6692 /* Warn that traditional C rejects initialization of unions.
6693 We skip the warning if the value is zero. This is done
6694 under the assumption that the zero initializer in user
6695 code appears conditioned on e.g. __STDC__ to avoid
6696 "missing initializer" warnings and relies on default
6697 initialization to zero in the traditional C case.
6698 We also skip the warning if the initializer is designated,
6699 again on the assumption that this must be conditional on
6700 __STDC__ anyway (and we've already complained about the
6701 member-designator already). */
6702 if (!in_system_header && !constructor_designated
6703 && !(value.value && (integer_zerop (value.value)
6704 || real_zerop (value.value))))
6705 warning (OPT_Wtraditional, "traditional C rejects initialization "
6706 "of unions");
6708 /* Accept a string constant to initialize a subarray. */
6709 if (value.value != 0
6710 && fieldcode == ARRAY_TYPE
6711 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6712 && string_flag)
6713 value.value = orig_value;
6714 /* Otherwise, if we have come to a subaggregate,
6715 and we don't have an element of its type, push into it. */
6716 else if (value.value != 0
6717 && value.value != error_mark_node
6718 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6719 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6720 || fieldcode == UNION_TYPE))
6722 push_init_level (1);
6723 continue;
6726 if (value.value)
6728 push_member_name (constructor_fields);
6729 output_init_element (value.value, strict_string,
6730 fieldtype, constructor_fields, 1);
6731 RESTORE_SPELLING_DEPTH (constructor_depth);
6733 else
6734 /* Do the bookkeeping for an element that was
6735 directly output as a constructor. */
6737 constructor_bit_index = DECL_SIZE (constructor_fields);
6738 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6741 constructor_fields = 0;
6743 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6745 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6746 enum tree_code eltcode = TREE_CODE (elttype);
6748 /* Accept a string constant to initialize a subarray. */
6749 if (value.value != 0
6750 && eltcode == ARRAY_TYPE
6751 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6752 && string_flag)
6753 value.value = orig_value;
6754 /* Otherwise, if we have come to a subaggregate,
6755 and we don't have an element of its type, push into it. */
6756 else if (value.value != 0
6757 && value.value != error_mark_node
6758 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6759 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6760 || eltcode == UNION_TYPE))
6762 push_init_level (1);
6763 continue;
6766 if (constructor_max_index != 0
6767 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6768 || integer_all_onesp (constructor_max_index)))
6770 pedwarn_init ("excess elements in array initializer");
6771 break;
6774 /* Now output the actual element. */
6775 if (value.value)
6777 push_array_bounds (tree_low_cst (constructor_index, 1));
6778 output_init_element (value.value, strict_string,
6779 elttype, constructor_index, 1);
6780 RESTORE_SPELLING_DEPTH (constructor_depth);
6783 constructor_index
6784 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6786 if (!value.value)
6787 /* If we are doing the bookkeeping for an element that was
6788 directly output as a constructor, we must update
6789 constructor_unfilled_index. */
6790 constructor_unfilled_index = constructor_index;
6792 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6794 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6796 /* Do a basic check of initializer size. Note that vectors
6797 always have a fixed size derived from their type. */
6798 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6800 pedwarn_init ("excess elements in vector initializer");
6801 break;
6804 /* Now output the actual element. */
6805 if (value.value)
6806 output_init_element (value.value, strict_string,
6807 elttype, constructor_index, 1);
6809 constructor_index
6810 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6812 if (!value.value)
6813 /* If we are doing the bookkeeping for an element that was
6814 directly output as a constructor, we must update
6815 constructor_unfilled_index. */
6816 constructor_unfilled_index = constructor_index;
6819 /* Handle the sole element allowed in a braced initializer
6820 for a scalar variable. */
6821 else if (constructor_type != error_mark_node
6822 && constructor_fields == 0)
6824 pedwarn_init ("excess elements in scalar initializer");
6825 break;
6827 else
6829 if (value.value)
6830 output_init_element (value.value, strict_string,
6831 constructor_type, NULL_TREE, 1);
6832 constructor_fields = 0;
6835 /* Handle range initializers either at this level or anywhere higher
6836 in the designator stack. */
6837 if (constructor_range_stack)
6839 struct constructor_range_stack *p, *range_stack;
6840 int finish = 0;
6842 range_stack = constructor_range_stack;
6843 constructor_range_stack = 0;
6844 while (constructor_stack != range_stack->stack)
6846 gcc_assert (constructor_stack->implicit);
6847 process_init_element (pop_init_level (1));
6849 for (p = range_stack;
6850 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6851 p = p->prev)
6853 gcc_assert (constructor_stack->implicit);
6854 process_init_element (pop_init_level (1));
6857 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6858 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6859 finish = 1;
6861 while (1)
6863 constructor_index = p->index;
6864 constructor_fields = p->fields;
6865 if (finish && p->range_end && p->index == p->range_start)
6867 finish = 0;
6868 p->prev = 0;
6870 p = p->next;
6871 if (!p)
6872 break;
6873 push_init_level (2);
6874 p->stack = constructor_stack;
6875 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6876 p->index = p->range_start;
6879 if (!finish)
6880 constructor_range_stack = range_stack;
6881 continue;
6884 break;
6887 constructor_range_stack = 0;
6890 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6891 (guaranteed to be 'volatile' or null) and ARGS (represented using
6892 an ASM_EXPR node). */
6893 tree
6894 build_asm_stmt (tree cv_qualifier, tree args)
6896 if (!ASM_VOLATILE_P (args) && cv_qualifier)
6897 ASM_VOLATILE_P (args) = 1;
6898 return add_stmt (args);
6901 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6902 some INPUTS, and some CLOBBERS. The latter three may be NULL.
6903 SIMPLE indicates whether there was anything at all after the
6904 string in the asm expression -- asm("blah") and asm("blah" : )
6905 are subtly different. We use a ASM_EXPR node to represent this. */
6906 tree
6907 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6908 bool simple)
6910 tree tail;
6911 tree args;
6912 int i;
6913 const char *constraint;
6914 const char **oconstraints;
6915 bool allows_mem, allows_reg, is_inout;
6916 int ninputs, noutputs;
6918 ninputs = list_length (inputs);
6919 noutputs = list_length (outputs);
6920 oconstraints = (const char **) alloca (noutputs * sizeof (const char *));
6922 string = resolve_asm_operand_names (string, outputs, inputs);
6924 /* Remove output conversions that change the type but not the mode. */
6925 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6927 tree output = TREE_VALUE (tail);
6929 /* ??? Really, this should not be here. Users should be using a
6930 proper lvalue, dammit. But there's a long history of using casts
6931 in the output operands. In cases like longlong.h, this becomes a
6932 primitive form of typechecking -- if the cast can be removed, then
6933 the output operand had a type of the proper width; otherwise we'll
6934 get an error. Gross, but ... */
6935 STRIP_NOPS (output);
6937 if (!lvalue_or_else (output, lv_asm))
6938 output = error_mark_node;
6940 if (output != error_mark_node
6941 && (TREE_READONLY (output)
6942 || TYPE_READONLY (TREE_TYPE (output))
6943 || ((TREE_CODE (TREE_TYPE (output)) == RECORD_TYPE
6944 || TREE_CODE (TREE_TYPE (output)) == UNION_TYPE)
6945 && C_TYPE_FIELDS_READONLY (TREE_TYPE (output)))))
6946 readonly_error (output, lv_asm);
6948 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6949 oconstraints[i] = constraint;
6951 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
6952 &allows_mem, &allows_reg, &is_inout))
6954 /* If the operand is going to end up in memory,
6955 mark it addressable. */
6956 if (!allows_reg && !c_mark_addressable (output))
6957 output = error_mark_node;
6959 else
6960 output = error_mark_node;
6962 TREE_VALUE (tail) = output;
6965 for (i = 0, tail = inputs; tail; ++i, tail = TREE_CHAIN (tail))
6967 tree input;
6969 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6970 input = TREE_VALUE (tail);
6972 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
6973 oconstraints, &allows_mem, &allows_reg))
6975 /* If the operand is going to end up in memory,
6976 mark it addressable. */
6977 if (!allows_reg && allows_mem)
6979 /* Strip the nops as we allow this case. FIXME, this really
6980 should be rejected or made deprecated. */
6981 STRIP_NOPS (input);
6982 if (!c_mark_addressable (input))
6983 input = error_mark_node;
6986 else
6987 input = error_mark_node;
6989 TREE_VALUE (tail) = input;
6992 args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6994 /* asm statements without outputs, including simple ones, are treated
6995 as volatile. */
6996 ASM_INPUT_P (args) = simple;
6997 ASM_VOLATILE_P (args) = (noutputs == 0);
6999 return args;
7002 /* Generate a goto statement to LABEL. */
7004 tree
7005 c_finish_goto_label (tree label)
7007 tree decl = lookup_label (label);
7008 if (!decl)
7009 return NULL_TREE;
7011 if (C_DECL_UNJUMPABLE_STMT_EXPR (decl))
7013 error ("jump into statement expression");
7014 return NULL_TREE;
7017 if (C_DECL_UNJUMPABLE_VM (decl))
7019 error ("jump into scope of identifier with variably modified type");
7020 return NULL_TREE;
7023 if (!C_DECL_UNDEFINABLE_STMT_EXPR (decl))
7025 /* No jump from outside this statement expression context, so
7026 record that there is a jump from within this context. */
7027 struct c_label_list *nlist;
7028 nlist = XOBNEW (&parser_obstack, struct c_label_list);
7029 nlist->next = label_context_stack_se->labels_used;
7030 nlist->label = decl;
7031 label_context_stack_se->labels_used = nlist;
7034 if (!C_DECL_UNDEFINABLE_VM (decl))
7036 /* No jump from outside this context context of identifiers with
7037 variably modified type, so record that there is a jump from
7038 within this context. */
7039 struct c_label_list *nlist;
7040 nlist = XOBNEW (&parser_obstack, struct c_label_list);
7041 nlist->next = label_context_stack_vm->labels_used;
7042 nlist->label = decl;
7043 label_context_stack_vm->labels_used = nlist;
7046 TREE_USED (decl) = 1;
7047 return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
7050 /* Generate a computed goto statement to EXPR. */
7052 tree
7053 c_finish_goto_ptr (tree expr)
7055 if (pedantic)
7056 pedwarn ("ISO C forbids %<goto *expr;%>");
7057 expr = convert (ptr_type_node, expr);
7058 return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
7061 /* Generate a C `return' statement. RETVAL is the expression for what
7062 to return, or a null pointer for `return;' with no value. */
7064 tree
7065 c_finish_return (tree retval)
7067 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl)), ret_stmt;
7068 bool no_warning = false;
7070 if (TREE_THIS_VOLATILE (current_function_decl))
7071 warning (0, "function declared %<noreturn%> has a %<return%> statement");
7073 if (!retval)
7075 current_function_returns_null = 1;
7076 if ((warn_return_type || flag_isoc99)
7077 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
7079 pedwarn_c99 ("%<return%> with no value, in "
7080 "function returning non-void");
7081 no_warning = true;
7084 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
7086 current_function_returns_null = 1;
7087 if (TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
7088 pedwarn ("%<return%> with a value, in function returning void");
7089 else if (pedantic)
7090 pedwarn ("ISO C forbids %<return%> with expression, in function returning void");
7092 else
7094 tree t = convert_for_assignment (valtype, retval, ic_return,
7095 NULL_TREE, NULL_TREE, 0);
7096 tree res = DECL_RESULT (current_function_decl);
7097 tree inner;
7099 current_function_returns_value = 1;
7100 if (t == error_mark_node)
7101 return NULL_TREE;
7103 inner = t = convert (TREE_TYPE (res), t);
7105 /* Strip any conversions, additions, and subtractions, and see if
7106 we are returning the address of a local variable. Warn if so. */
7107 while (1)
7109 switch (TREE_CODE (inner))
7111 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
7112 case PLUS_EXPR:
7113 inner = TREE_OPERAND (inner, 0);
7114 continue;
7116 case MINUS_EXPR:
7117 /* If the second operand of the MINUS_EXPR has a pointer
7118 type (or is converted from it), this may be valid, so
7119 don't give a warning. */
7121 tree op1 = TREE_OPERAND (inner, 1);
7123 while (!POINTER_TYPE_P (TREE_TYPE (op1))
7124 && (TREE_CODE (op1) == NOP_EXPR
7125 || TREE_CODE (op1) == NON_LVALUE_EXPR
7126 || TREE_CODE (op1) == CONVERT_EXPR))
7127 op1 = TREE_OPERAND (op1, 0);
7129 if (POINTER_TYPE_P (TREE_TYPE (op1)))
7130 break;
7132 inner = TREE_OPERAND (inner, 0);
7133 continue;
7136 case ADDR_EXPR:
7137 inner = TREE_OPERAND (inner, 0);
7139 while (REFERENCE_CLASS_P (inner)
7140 && TREE_CODE (inner) != INDIRECT_REF)
7141 inner = TREE_OPERAND (inner, 0);
7143 if (DECL_P (inner)
7144 && !DECL_EXTERNAL (inner)
7145 && !TREE_STATIC (inner)
7146 && DECL_CONTEXT (inner) == current_function_decl)
7147 warning (0, "function returns address of local variable");
7148 break;
7150 default:
7151 break;
7154 break;
7157 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
7160 ret_stmt = build_stmt (RETURN_EXPR, retval);
7161 TREE_NO_WARNING (ret_stmt) |= no_warning;
7162 return add_stmt (ret_stmt);
7165 struct c_switch {
7166 /* The SWITCH_EXPR being built. */
7167 tree switch_expr;
7169 /* The original type of the testing expression, i.e. before the
7170 default conversion is applied. */
7171 tree orig_type;
7173 /* A splay-tree mapping the low element of a case range to the high
7174 element, or NULL_TREE if there is no high element. Used to
7175 determine whether or not a new case label duplicates an old case
7176 label. We need a tree, rather than simply a hash table, because
7177 of the GNU case range extension. */
7178 splay_tree cases;
7180 /* Number of nested statement expressions within this switch
7181 statement; if nonzero, case and default labels may not
7182 appear. */
7183 unsigned int blocked_stmt_expr;
7185 /* Scope of outermost declarations of identifiers with variably
7186 modified type within this switch statement; if nonzero, case and
7187 default labels may not appear. */
7188 unsigned int blocked_vm;
7190 /* The next node on the stack. */
7191 struct c_switch *next;
7194 /* A stack of the currently active switch statements. The innermost
7195 switch statement is on the top of the stack. There is no need to
7196 mark the stack for garbage collection because it is only active
7197 during the processing of the body of a function, and we never
7198 collect at that point. */
7200 struct c_switch *c_switch_stack;
7202 /* Start a C switch statement, testing expression EXP. Return the new
7203 SWITCH_EXPR. */
7205 tree
7206 c_start_case (tree exp)
7208 tree orig_type = error_mark_node;
7209 struct c_switch *cs;
7211 if (exp != error_mark_node)
7213 orig_type = TREE_TYPE (exp);
7215 if (!INTEGRAL_TYPE_P (orig_type))
7217 if (orig_type != error_mark_node)
7219 error ("switch quantity not an integer");
7220 orig_type = error_mark_node;
7222 exp = integer_zero_node;
7224 else
7226 tree type = TYPE_MAIN_VARIANT (orig_type);
7228 if (!in_system_header
7229 && (type == long_integer_type_node
7230 || type == long_unsigned_type_node))
7231 warning (OPT_Wtraditional, "%<long%> switch expression not "
7232 "converted to %<int%> in ISO C");
7234 exp = default_conversion (exp);
7238 /* Add this new SWITCH_EXPR to the stack. */
7239 cs = XNEW (struct c_switch);
7240 cs->switch_expr = build3 (SWITCH_EXPR, orig_type, exp, NULL_TREE, NULL_TREE);
7241 cs->orig_type = orig_type;
7242 cs->cases = splay_tree_new (case_compare, NULL, NULL);
7243 cs->blocked_stmt_expr = 0;
7244 cs->blocked_vm = 0;
7245 cs->next = c_switch_stack;
7246 c_switch_stack = cs;
7248 return add_stmt (cs->switch_expr);
7251 /* Process a case label. */
7253 tree
7254 do_case (tree low_value, tree high_value)
7256 tree label = NULL_TREE;
7258 if (c_switch_stack && !c_switch_stack->blocked_stmt_expr
7259 && !c_switch_stack->blocked_vm)
7261 label = c_add_case_label (c_switch_stack->cases,
7262 SWITCH_COND (c_switch_stack->switch_expr),
7263 c_switch_stack->orig_type,
7264 low_value, high_value);
7265 if (label == error_mark_node)
7266 label = NULL_TREE;
7268 else if (c_switch_stack && c_switch_stack->blocked_stmt_expr)
7270 if (low_value)
7271 error ("case label in statement expression not containing "
7272 "enclosing switch statement");
7273 else
7274 error ("%<default%> label in statement expression not containing "
7275 "enclosing switch statement");
7277 else if (c_switch_stack && c_switch_stack->blocked_vm)
7279 if (low_value)
7280 error ("case label in scope of identifier with variably modified "
7281 "type not containing enclosing switch statement");
7282 else
7283 error ("%<default%> label in scope of identifier with variably "
7284 "modified type not containing enclosing switch statement");
7286 else if (low_value)
7287 error ("case label not within a switch statement");
7288 else
7289 error ("%<default%> label not within a switch statement");
7291 return label;
7294 /* Finish the switch statement. */
7296 void
7297 c_finish_case (tree body)
7299 struct c_switch *cs = c_switch_stack;
7300 location_t switch_location;
7302 SWITCH_BODY (cs->switch_expr) = body;
7304 /* We must not be within a statement expression nested in the switch
7305 at this point; we might, however, be within the scope of an
7306 identifier with variably modified type nested in the switch. */
7307 gcc_assert (!cs->blocked_stmt_expr);
7309 /* Emit warnings as needed. */
7310 if (EXPR_HAS_LOCATION (cs->switch_expr))
7311 switch_location = EXPR_LOCATION (cs->switch_expr);
7312 else
7313 switch_location = input_location;
7314 c_do_switch_warnings (cs->cases, switch_location,
7315 TREE_TYPE (cs->switch_expr),
7316 SWITCH_COND (cs->switch_expr));
7318 /* Pop the stack. */
7319 c_switch_stack = cs->next;
7320 splay_tree_delete (cs->cases);
7321 XDELETE (cs);
7324 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
7325 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
7326 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
7327 statement, and was not surrounded with parenthesis. */
7329 void
7330 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
7331 tree else_block, bool nested_if)
7333 tree stmt;
7335 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
7336 if (warn_parentheses && nested_if && else_block == NULL)
7338 tree inner_if = then_block;
7340 /* We know from the grammar productions that there is an IF nested
7341 within THEN_BLOCK. Due to labels and c99 conditional declarations,
7342 it might not be exactly THEN_BLOCK, but should be the last
7343 non-container statement within. */
7344 while (1)
7345 switch (TREE_CODE (inner_if))
7347 case COND_EXPR:
7348 goto found;
7349 case BIND_EXPR:
7350 inner_if = BIND_EXPR_BODY (inner_if);
7351 break;
7352 case STATEMENT_LIST:
7353 inner_if = expr_last (then_block);
7354 break;
7355 case TRY_FINALLY_EXPR:
7356 case TRY_CATCH_EXPR:
7357 inner_if = TREE_OPERAND (inner_if, 0);
7358 break;
7359 default:
7360 gcc_unreachable ();
7362 found:
7364 if (COND_EXPR_ELSE (inner_if))
7365 warning (OPT_Wparentheses,
7366 "%Hsuggest explicit braces to avoid ambiguous %<else%>",
7367 &if_locus);
7370 empty_if_body_warning (then_block, else_block);
7372 stmt = build3 (COND_EXPR, void_type_node, cond, then_block, else_block);
7373 SET_EXPR_LOCATION (stmt, if_locus);
7374 add_stmt (stmt);
7377 /* Emit a general-purpose loop construct. START_LOCUS is the location of
7378 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
7379 is false for DO loops. INCR is the FOR increment expression. BODY is
7380 the statement controlled by the loop. BLAB is the break label. CLAB is
7381 the continue label. Everything is allowed to be NULL. */
7383 void
7384 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
7385 tree blab, tree clab, bool cond_is_first)
7387 tree entry = NULL, exit = NULL, t;
7389 /* If the condition is zero don't generate a loop construct. */
7390 if (cond && integer_zerop (cond))
7392 if (cond_is_first)
7394 t = build_and_jump (&blab);
7395 SET_EXPR_LOCATION (t, start_locus);
7396 add_stmt (t);
7399 else
7401 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
7403 /* If we have an exit condition, then we build an IF with gotos either
7404 out of the loop, or to the top of it. If there's no exit condition,
7405 then we just build a jump back to the top. */
7406 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
7408 if (cond && !integer_nonzerop (cond))
7410 /* Canonicalize the loop condition to the end. This means
7411 generating a branch to the loop condition. Reuse the
7412 continue label, if possible. */
7413 if (cond_is_first)
7415 if (incr || !clab)
7417 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
7418 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
7420 else
7421 t = build1 (GOTO_EXPR, void_type_node, clab);
7422 SET_EXPR_LOCATION (t, start_locus);
7423 add_stmt (t);
7426 t = build_and_jump (&blab);
7427 exit = fold_build3 (COND_EXPR, void_type_node, cond, exit, t);
7428 if (cond_is_first)
7429 SET_EXPR_LOCATION (exit, start_locus);
7430 else
7431 SET_EXPR_LOCATION (exit, input_location);
7434 add_stmt (top);
7437 if (body)
7438 add_stmt (body);
7439 if (clab)
7440 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
7441 if (incr)
7442 add_stmt (incr);
7443 if (entry)
7444 add_stmt (entry);
7445 if (exit)
7446 add_stmt (exit);
7447 if (blab)
7448 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
7451 tree
7452 c_finish_bc_stmt (tree *label_p, bool is_break)
7454 bool skip;
7455 tree label = *label_p;
7457 /* In switch statements break is sometimes stylistically used after
7458 a return statement. This can lead to spurious warnings about
7459 control reaching the end of a non-void function when it is
7460 inlined. Note that we are calling block_may_fallthru with
7461 language specific tree nodes; this works because
7462 block_may_fallthru returns true when given something it does not
7463 understand. */
7464 skip = !block_may_fallthru (cur_stmt_list);
7466 if (!label)
7468 if (!skip)
7469 *label_p = label = create_artificial_label ();
7471 else if (TREE_CODE (label) == LABEL_DECL)
7473 else switch (TREE_INT_CST_LOW (label))
7475 case 0:
7476 if (is_break)
7477 error ("break statement not within loop or switch");
7478 else
7479 error ("continue statement not within a loop");
7480 return NULL_TREE;
7482 case 1:
7483 gcc_assert (is_break);
7484 error ("break statement used with OpenMP for loop");
7485 return NULL_TREE;
7487 default:
7488 gcc_unreachable ();
7491 if (skip)
7492 return NULL_TREE;
7494 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
7497 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
7499 static void
7500 emit_side_effect_warnings (tree expr)
7502 if (expr == error_mark_node)
7504 else if (!TREE_SIDE_EFFECTS (expr))
7506 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
7507 warning (OPT_Wunused_value, "%Hstatement with no effect",
7508 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
7510 else
7511 warn_if_unused_value (expr, input_location);
7514 /* Process an expression as if it were a complete statement. Emit
7515 diagnostics, but do not call ADD_STMT. */
7517 tree
7518 c_process_expr_stmt (tree expr)
7520 if (!expr)
7521 return NULL_TREE;
7523 if (warn_sequence_point)
7524 verify_sequence_points (expr);
7526 if (TREE_TYPE (expr) != error_mark_node
7527 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
7528 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
7529 error ("expression statement has incomplete type");
7531 /* If we're not processing a statement expression, warn about unused values.
7532 Warnings for statement expressions will be emitted later, once we figure
7533 out which is the result. */
7534 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7535 && warn_unused_value)
7536 emit_side_effect_warnings (expr);
7538 /* If the expression is not of a type to which we cannot assign a line
7539 number, wrap the thing in a no-op NOP_EXPR. */
7540 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
7541 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
7543 if (CAN_HAVE_LOCATION_P (expr))
7544 SET_EXPR_LOCATION (expr, input_location);
7546 return expr;
7549 /* Emit an expression as a statement. */
7551 tree
7552 c_finish_expr_stmt (tree expr)
7554 if (expr)
7555 return add_stmt (c_process_expr_stmt (expr));
7556 else
7557 return NULL;
7560 /* Do the opposite and emit a statement as an expression. To begin,
7561 create a new binding level and return it. */
7563 tree
7564 c_begin_stmt_expr (void)
7566 tree ret;
7567 struct c_label_context_se *nstack;
7568 struct c_label_list *glist;
7570 /* We must force a BLOCK for this level so that, if it is not expanded
7571 later, there is a way to turn off the entire subtree of blocks that
7572 are contained in it. */
7573 keep_next_level ();
7574 ret = c_begin_compound_stmt (true);
7575 if (c_switch_stack)
7577 c_switch_stack->blocked_stmt_expr++;
7578 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7580 for (glist = label_context_stack_se->labels_used;
7581 glist != NULL;
7582 glist = glist->next)
7584 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 1;
7586 nstack = XOBNEW (&parser_obstack, struct c_label_context_se);
7587 nstack->labels_def = NULL;
7588 nstack->labels_used = NULL;
7589 nstack->next = label_context_stack_se;
7590 label_context_stack_se = nstack;
7592 /* Mark the current statement list as belonging to a statement list. */
7593 STATEMENT_LIST_STMT_EXPR (ret) = 1;
7595 return ret;
7598 tree
7599 c_finish_stmt_expr (tree body)
7601 tree last, type, tmp, val;
7602 tree *last_p;
7603 struct c_label_list *dlist, *glist, *glist_prev = NULL;
7605 body = c_end_compound_stmt (body, true);
7606 if (c_switch_stack)
7608 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7609 c_switch_stack->blocked_stmt_expr--;
7611 /* It is no longer possible to jump to labels defined within this
7612 statement expression. */
7613 for (dlist = label_context_stack_se->labels_def;
7614 dlist != NULL;
7615 dlist = dlist->next)
7617 C_DECL_UNJUMPABLE_STMT_EXPR (dlist->label) = 1;
7619 /* It is again possible to define labels with a goto just outside
7620 this statement expression. */
7621 for (glist = label_context_stack_se->next->labels_used;
7622 glist != NULL;
7623 glist = glist->next)
7625 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 0;
7626 glist_prev = glist;
7628 if (glist_prev != NULL)
7629 glist_prev->next = label_context_stack_se->labels_used;
7630 else
7631 label_context_stack_se->next->labels_used
7632 = label_context_stack_se->labels_used;
7633 label_context_stack_se = label_context_stack_se->next;
7635 /* Locate the last statement in BODY. See c_end_compound_stmt
7636 about always returning a BIND_EXPR. */
7637 last_p = &BIND_EXPR_BODY (body);
7638 last = BIND_EXPR_BODY (body);
7640 continue_searching:
7641 if (TREE_CODE (last) == STATEMENT_LIST)
7643 tree_stmt_iterator i;
7645 /* This can happen with degenerate cases like ({ }). No value. */
7646 if (!TREE_SIDE_EFFECTS (last))
7647 return body;
7649 /* If we're supposed to generate side effects warnings, process
7650 all of the statements except the last. */
7651 if (warn_unused_value)
7653 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
7654 emit_side_effect_warnings (tsi_stmt (i));
7656 else
7657 i = tsi_last (last);
7658 last_p = tsi_stmt_ptr (i);
7659 last = *last_p;
7662 /* If the end of the list is exception related, then the list was split
7663 by a call to push_cleanup. Continue searching. */
7664 if (TREE_CODE (last) == TRY_FINALLY_EXPR
7665 || TREE_CODE (last) == TRY_CATCH_EXPR)
7667 last_p = &TREE_OPERAND (last, 0);
7668 last = *last_p;
7669 goto continue_searching;
7672 /* In the case that the BIND_EXPR is not necessary, return the
7673 expression out from inside it. */
7674 if (last == error_mark_node
7675 || (last == BIND_EXPR_BODY (body)
7676 && BIND_EXPR_VARS (body) == NULL))
7678 /* Do not warn if the return value of a statement expression is
7679 unused. */
7680 if (CAN_HAVE_LOCATION_P (last))
7681 TREE_NO_WARNING (last) = 1;
7682 return last;
7685 /* Extract the type of said expression. */
7686 type = TREE_TYPE (last);
7688 /* If we're not returning a value at all, then the BIND_EXPR that
7689 we already have is a fine expression to return. */
7690 if (!type || VOID_TYPE_P (type))
7691 return body;
7693 /* Now that we've located the expression containing the value, it seems
7694 silly to make voidify_wrapper_expr repeat the process. Create a
7695 temporary of the appropriate type and stick it in a TARGET_EXPR. */
7696 tmp = create_tmp_var_raw (type, NULL);
7698 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
7699 tree_expr_nonnegative_p giving up immediately. */
7700 val = last;
7701 if (TREE_CODE (val) == NOP_EXPR
7702 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
7703 val = TREE_OPERAND (val, 0);
7705 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
7706 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
7708 return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
7711 /* Begin the scope of an identifier of variably modified type, scope
7712 number SCOPE. Jumping from outside this scope to inside it is not
7713 permitted. */
7715 void
7716 c_begin_vm_scope (unsigned int scope)
7718 struct c_label_context_vm *nstack;
7719 struct c_label_list *glist;
7721 gcc_assert (scope > 0);
7723 /* At file_scope, we don't have to do any processing. */
7724 if (label_context_stack_vm == NULL)
7725 return;
7727 if (c_switch_stack && !c_switch_stack->blocked_vm)
7728 c_switch_stack->blocked_vm = scope;
7729 for (glist = label_context_stack_vm->labels_used;
7730 glist != NULL;
7731 glist = glist->next)
7733 C_DECL_UNDEFINABLE_VM (glist->label) = 1;
7735 nstack = XOBNEW (&parser_obstack, struct c_label_context_vm);
7736 nstack->labels_def = NULL;
7737 nstack->labels_used = NULL;
7738 nstack->scope = scope;
7739 nstack->next = label_context_stack_vm;
7740 label_context_stack_vm = nstack;
7743 /* End a scope which may contain identifiers of variably modified
7744 type, scope number SCOPE. */
7746 void
7747 c_end_vm_scope (unsigned int scope)
7749 if (label_context_stack_vm == NULL)
7750 return;
7751 if (c_switch_stack && c_switch_stack->blocked_vm == scope)
7752 c_switch_stack->blocked_vm = 0;
7753 /* We may have a number of nested scopes of identifiers with
7754 variably modified type, all at this depth. Pop each in turn. */
7755 while (label_context_stack_vm->scope == scope)
7757 struct c_label_list *dlist, *glist, *glist_prev = NULL;
7759 /* It is no longer possible to jump to labels defined within this
7760 scope. */
7761 for (dlist = label_context_stack_vm->labels_def;
7762 dlist != NULL;
7763 dlist = dlist->next)
7765 C_DECL_UNJUMPABLE_VM (dlist->label) = 1;
7767 /* It is again possible to define labels with a goto just outside
7768 this scope. */
7769 for (glist = label_context_stack_vm->next->labels_used;
7770 glist != NULL;
7771 glist = glist->next)
7773 C_DECL_UNDEFINABLE_VM (glist->label) = 0;
7774 glist_prev = glist;
7776 if (glist_prev != NULL)
7777 glist_prev->next = label_context_stack_vm->labels_used;
7778 else
7779 label_context_stack_vm->next->labels_used
7780 = label_context_stack_vm->labels_used;
7781 label_context_stack_vm = label_context_stack_vm->next;
7785 /* Begin and end compound statements. This is as simple as pushing
7786 and popping new statement lists from the tree. */
7788 tree
7789 c_begin_compound_stmt (bool do_scope)
7791 tree stmt = push_stmt_list ();
7792 if (do_scope)
7793 push_scope ();
7794 return stmt;
7797 tree
7798 c_end_compound_stmt (tree stmt, bool do_scope)
7800 tree block = NULL;
7802 if (do_scope)
7804 if (c_dialect_objc ())
7805 objc_clear_super_receiver ();
7806 block = pop_scope ();
7809 stmt = pop_stmt_list (stmt);
7810 stmt = c_build_bind_expr (block, stmt);
7812 /* If this compound statement is nested immediately inside a statement
7813 expression, then force a BIND_EXPR to be created. Otherwise we'll
7814 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
7815 STATEMENT_LISTs merge, and thus we can lose track of what statement
7816 was really last. */
7817 if (cur_stmt_list
7818 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7819 && TREE_CODE (stmt) != BIND_EXPR)
7821 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
7822 TREE_SIDE_EFFECTS (stmt) = 1;
7825 return stmt;
7828 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
7829 when the current scope is exited. EH_ONLY is true when this is not
7830 meant to apply to normal control flow transfer. */
7832 void
7833 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
7835 enum tree_code code;
7836 tree stmt, list;
7837 bool stmt_expr;
7839 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
7840 stmt = build_stmt (code, NULL, cleanup);
7841 add_stmt (stmt);
7842 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
7843 list = push_stmt_list ();
7844 TREE_OPERAND (stmt, 0) = list;
7845 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
7848 /* Build a binary-operation expression without default conversions.
7849 CODE is the kind of expression to build.
7850 This function differs from `build' in several ways:
7851 the data type of the result is computed and recorded in it,
7852 warnings are generated if arg data types are invalid,
7853 special handling for addition and subtraction of pointers is known,
7854 and some optimization is done (operations on narrow ints
7855 are done in the narrower type when that gives the same result).
7856 Constant folding is also done before the result is returned.
7858 Note that the operands will never have enumeral types, or function
7859 or array types, because either they will have the default conversions
7860 performed or they have both just been converted to some other type in which
7861 the arithmetic is to be done. */
7863 tree
7864 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
7865 int convert_p)
7867 tree type0, type1;
7868 enum tree_code code0, code1;
7869 tree op0, op1;
7870 const char *invalid_op_diag;
7872 /* Expression code to give to the expression when it is built.
7873 Normally this is CODE, which is what the caller asked for,
7874 but in some special cases we change it. */
7875 enum tree_code resultcode = code;
7877 /* Data type in which the computation is to be performed.
7878 In the simplest cases this is the common type of the arguments. */
7879 tree result_type = NULL;
7881 /* Nonzero means operands have already been type-converted
7882 in whatever way is necessary.
7883 Zero means they need to be converted to RESULT_TYPE. */
7884 int converted = 0;
7886 /* Nonzero means create the expression with this type, rather than
7887 RESULT_TYPE. */
7888 tree build_type = 0;
7890 /* Nonzero means after finally constructing the expression
7891 convert it to this type. */
7892 tree final_type = 0;
7894 /* Nonzero if this is an operation like MIN or MAX which can
7895 safely be computed in short if both args are promoted shorts.
7896 Also implies COMMON.
7897 -1 indicates a bitwise operation; this makes a difference
7898 in the exact conditions for when it is safe to do the operation
7899 in a narrower mode. */
7900 int shorten = 0;
7902 /* Nonzero if this is a comparison operation;
7903 if both args are promoted shorts, compare the original shorts.
7904 Also implies COMMON. */
7905 int short_compare = 0;
7907 /* Nonzero if this is a right-shift operation, which can be computed on the
7908 original short and then promoted if the operand is a promoted short. */
7909 int short_shift = 0;
7911 /* Nonzero means set RESULT_TYPE to the common type of the args. */
7912 int common = 0;
7914 /* True means types are compatible as far as ObjC is concerned. */
7915 bool objc_ok;
7917 if (convert_p)
7919 op0 = default_conversion (orig_op0);
7920 op1 = default_conversion (orig_op1);
7922 else
7924 op0 = orig_op0;
7925 op1 = orig_op1;
7928 type0 = TREE_TYPE (op0);
7929 type1 = TREE_TYPE (op1);
7931 /* The expression codes of the data types of the arguments tell us
7932 whether the arguments are integers, floating, pointers, etc. */
7933 code0 = TREE_CODE (type0);
7934 code1 = TREE_CODE (type1);
7936 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
7937 STRIP_TYPE_NOPS (op0);
7938 STRIP_TYPE_NOPS (op1);
7940 /* If an error was already reported for one of the arguments,
7941 avoid reporting another error. */
7943 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7944 return error_mark_node;
7946 if ((invalid_op_diag
7947 = targetm.invalid_binary_op (code, type0, type1)))
7949 error (invalid_op_diag);
7950 return error_mark_node;
7953 objc_ok = objc_compare_types (type0, type1, -3, NULL_TREE);
7955 switch (code)
7957 case PLUS_EXPR:
7958 /* Handle the pointer + int case. */
7959 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7960 return pointer_int_sum (PLUS_EXPR, op0, op1);
7961 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7962 return pointer_int_sum (PLUS_EXPR, op1, op0);
7963 else
7964 common = 1;
7965 break;
7967 case MINUS_EXPR:
7968 /* Subtraction of two similar pointers.
7969 We must subtract them as integers, then divide by object size. */
7970 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7971 && comp_target_types (type0, type1))
7972 return pointer_diff (op0, op1);
7973 /* Handle pointer minus int. Just like pointer plus int. */
7974 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7975 return pointer_int_sum (MINUS_EXPR, op0, op1);
7976 else
7977 common = 1;
7978 break;
7980 case MULT_EXPR:
7981 common = 1;
7982 break;
7984 case TRUNC_DIV_EXPR:
7985 case CEIL_DIV_EXPR:
7986 case FLOOR_DIV_EXPR:
7987 case ROUND_DIV_EXPR:
7988 case EXACT_DIV_EXPR:
7989 warn_for_div_by_zero (op1);
7991 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7992 || code0 == FIXED_POINT_TYPE
7993 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7994 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7995 || code1 == FIXED_POINT_TYPE
7996 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7998 enum tree_code tcode0 = code0, tcode1 = code1;
8000 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
8001 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
8002 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
8003 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
8005 if (!((tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE)
8006 || (tcode0 == FIXED_POINT_TYPE && tcode1 == FIXED_POINT_TYPE)))
8007 resultcode = RDIV_EXPR;
8008 else
8009 /* Although it would be tempting to shorten always here, that
8010 loses on some targets, since the modulo instruction is
8011 undefined if the quotient can't be represented in the
8012 computation mode. We shorten only if unsigned or if
8013 dividing by something we know != -1. */
8014 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
8015 || (TREE_CODE (op1) == INTEGER_CST
8016 && !integer_all_onesp (op1)));
8017 common = 1;
8019 break;
8021 case BIT_AND_EXPR:
8022 case BIT_IOR_EXPR:
8023 case BIT_XOR_EXPR:
8024 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
8025 shorten = -1;
8026 /* Allow vector types which are not floating point types. */
8027 else if (code0 == VECTOR_TYPE
8028 && code1 == VECTOR_TYPE
8029 && !VECTOR_FLOAT_TYPE_P (type0)
8030 && !VECTOR_FLOAT_TYPE_P (type1))
8031 common = 1;
8032 break;
8034 case TRUNC_MOD_EXPR:
8035 case FLOOR_MOD_EXPR:
8036 warn_for_div_by_zero (op1);
8038 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
8040 /* Although it would be tempting to shorten always here, that loses
8041 on some targets, since the modulo instruction is undefined if the
8042 quotient can't be represented in the computation mode. We shorten
8043 only if unsigned or if dividing by something we know != -1. */
8044 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
8045 || (TREE_CODE (op1) == INTEGER_CST
8046 && !integer_all_onesp (op1)));
8047 common = 1;
8049 break;
8051 case TRUTH_ANDIF_EXPR:
8052 case TRUTH_ORIF_EXPR:
8053 case TRUTH_AND_EXPR:
8054 case TRUTH_OR_EXPR:
8055 case TRUTH_XOR_EXPR:
8056 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
8057 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
8058 || code0 == FIXED_POINT_TYPE)
8059 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
8060 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
8061 || code1 == FIXED_POINT_TYPE))
8063 /* Result of these operations is always an int,
8064 but that does not mean the operands should be
8065 converted to ints! */
8066 result_type = integer_type_node;
8067 op0 = c_common_truthvalue_conversion (op0);
8068 op1 = c_common_truthvalue_conversion (op1);
8069 converted = 1;
8071 break;
8073 /* Shift operations: result has same type as first operand;
8074 always convert second operand to int.
8075 Also set SHORT_SHIFT if shifting rightward. */
8077 case RSHIFT_EXPR:
8078 if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE)
8079 && code1 == INTEGER_TYPE)
8081 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
8083 if (tree_int_cst_sgn (op1) < 0)
8084 warning (0, "right shift count is negative");
8085 else
8087 if (!integer_zerop (op1))
8088 short_shift = 1;
8090 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
8091 warning (0, "right shift count >= width of type");
8095 /* Use the type of the value to be shifted. */
8096 result_type = type0;
8097 /* Convert the shift-count to an integer, regardless of size
8098 of value being shifted. */
8099 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
8100 op1 = convert (integer_type_node, op1);
8101 /* Avoid converting op1 to result_type later. */
8102 converted = 1;
8104 break;
8106 case LSHIFT_EXPR:
8107 if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE)
8108 && code1 == INTEGER_TYPE)
8110 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
8112 if (tree_int_cst_sgn (op1) < 0)
8113 warning (0, "left shift count is negative");
8115 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
8116 warning (0, "left shift count >= width of type");
8119 /* Use the type of the value to be shifted. */
8120 result_type = type0;
8121 /* Convert the shift-count to an integer, regardless of size
8122 of value being shifted. */
8123 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
8124 op1 = convert (integer_type_node, op1);
8125 /* Avoid converting op1 to result_type later. */
8126 converted = 1;
8128 break;
8130 case EQ_EXPR:
8131 case NE_EXPR:
8132 if (code0 == REAL_TYPE || code1 == REAL_TYPE)
8133 warning (OPT_Wfloat_equal,
8134 "comparing floating point with == or != is unsafe");
8135 /* Result of comparison is always int,
8136 but don't convert the args to int! */
8137 build_type = integer_type_node;
8138 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
8139 || code0 == FIXED_POINT_TYPE || code0 == COMPLEX_TYPE)
8140 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
8141 || code1 == FIXED_POINT_TYPE || code1 == COMPLEX_TYPE))
8142 short_compare = 1;
8143 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
8145 tree tt0 = TREE_TYPE (type0);
8146 tree tt1 = TREE_TYPE (type1);
8147 /* Anything compares with void *. void * compares with anything.
8148 Otherwise, the targets must be compatible
8149 and both must be object or both incomplete. */
8150 if (comp_target_types (type0, type1))
8151 result_type = common_pointer_type (type0, type1);
8152 else if (VOID_TYPE_P (tt0))
8154 /* op0 != orig_op0 detects the case of something
8155 whose value is 0 but which isn't a valid null ptr const. */
8156 if (pedantic && !null_pointer_constant_p (orig_op0)
8157 && TREE_CODE (tt1) == FUNCTION_TYPE)
8158 pedwarn ("ISO C forbids comparison of %<void *%>"
8159 " with function pointer");
8161 else if (VOID_TYPE_P (tt1))
8163 if (pedantic && !null_pointer_constant_p (orig_op1)
8164 && TREE_CODE (tt0) == FUNCTION_TYPE)
8165 pedwarn ("ISO C forbids comparison of %<void *%>"
8166 " with function pointer");
8168 else
8169 /* Avoid warning about the volatile ObjC EH puts on decls. */
8170 if (!objc_ok)
8171 pedwarn ("comparison of distinct pointer types lacks a cast");
8173 if (result_type == NULL_TREE)
8174 result_type = ptr_type_node;
8176 else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
8178 if (TREE_CODE (op0) == ADDR_EXPR
8179 && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
8180 warning (OPT_Waddress, "the address of %qD will never be NULL",
8181 TREE_OPERAND (op0, 0));
8182 result_type = type0;
8184 else if (code1 == POINTER_TYPE && null_pointer_constant_p (orig_op0))
8186 if (TREE_CODE (op1) == ADDR_EXPR
8187 && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
8188 warning (OPT_Waddress, "the address of %qD will never be NULL",
8189 TREE_OPERAND (op1, 0));
8190 result_type = type1;
8192 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
8194 result_type = type0;
8195 pedwarn ("comparison between pointer and integer");
8197 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
8199 result_type = type1;
8200 pedwarn ("comparison between pointer and integer");
8202 break;
8204 case LE_EXPR:
8205 case GE_EXPR:
8206 case LT_EXPR:
8207 case GT_EXPR:
8208 build_type = integer_type_node;
8209 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
8210 || code0 == FIXED_POINT_TYPE)
8211 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
8212 || code1 == FIXED_POINT_TYPE))
8213 short_compare = 1;
8214 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
8216 if (comp_target_types (type0, type1))
8218 result_type = common_pointer_type (type0, type1);
8219 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
8220 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
8221 pedwarn ("comparison of complete and incomplete pointers");
8222 else if (pedantic
8223 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
8224 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
8226 else
8228 result_type = ptr_type_node;
8229 pedwarn ("comparison of distinct pointer types lacks a cast");
8232 else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
8234 result_type = type0;
8235 if (pedantic || extra_warnings)
8236 pedwarn ("ordered comparison of pointer with integer zero");
8238 else if (code1 == POINTER_TYPE && null_pointer_constant_p (orig_op0))
8240 result_type = type1;
8241 if (pedantic)
8242 pedwarn ("ordered comparison of pointer with integer zero");
8244 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
8246 result_type = type0;
8247 pedwarn ("comparison between pointer and integer");
8249 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
8251 result_type = type1;
8252 pedwarn ("comparison between pointer and integer");
8254 break;
8256 default:
8257 gcc_unreachable ();
8260 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
8261 return error_mark_node;
8263 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
8264 && (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
8265 || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
8266 TREE_TYPE (type1))))
8268 binary_op_error (code, type0, type1);
8269 return error_mark_node;
8272 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
8273 || code0 == FIXED_POINT_TYPE || code0 == VECTOR_TYPE)
8275 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
8276 || code1 == FIXED_POINT_TYPE || code1 == VECTOR_TYPE))
8278 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
8280 if (shorten || common || short_compare)
8282 result_type = c_common_type (type0, type1);
8283 if (result_type == error_mark_node)
8284 return error_mark_node;
8287 /* For certain operations (which identify themselves by shorten != 0)
8288 if both args were extended from the same smaller type,
8289 do the arithmetic in that type and then extend.
8291 shorten !=0 and !=1 indicates a bitwise operation.
8292 For them, this optimization is safe only if
8293 both args are zero-extended or both are sign-extended.
8294 Otherwise, we might change the result.
8295 Eg, (short)-1 | (unsigned short)-1 is (int)-1
8296 but calculated in (unsigned short) it would be (unsigned short)-1. */
8298 if (shorten && none_complex)
8300 int unsigned0, unsigned1;
8301 tree arg0, arg1;
8302 int uns;
8303 tree type;
8305 /* Cast OP0 and OP1 to RESULT_TYPE. Doing so prevents
8306 excessive narrowing when we call get_narrower below. For
8307 example, suppose that OP0 is of unsigned int extended
8308 from signed char and that RESULT_TYPE is long long int.
8309 If we explicitly cast OP0 to RESULT_TYPE, OP0 would look
8310 like
8312 (long long int) (unsigned int) signed_char
8314 which get_narrower would narrow down to
8316 (unsigned int) signed char
8318 If we do not cast OP0 first, get_narrower would return
8319 signed_char, which is inconsistent with the case of the
8320 explicit cast. */
8321 op0 = convert (result_type, op0);
8322 op1 = convert (result_type, op1);
8324 arg0 = get_narrower (op0, &unsigned0);
8325 arg1 = get_narrower (op1, &unsigned1);
8327 /* UNS is 1 if the operation to be done is an unsigned one. */
8328 uns = TYPE_UNSIGNED (result_type);
8330 final_type = result_type;
8332 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
8333 but it *requires* conversion to FINAL_TYPE. */
8335 if ((TYPE_PRECISION (TREE_TYPE (op0))
8336 == TYPE_PRECISION (TREE_TYPE (arg0)))
8337 && TREE_TYPE (op0) != final_type)
8338 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
8339 if ((TYPE_PRECISION (TREE_TYPE (op1))
8340 == TYPE_PRECISION (TREE_TYPE (arg1)))
8341 && TREE_TYPE (op1) != final_type)
8342 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
8344 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
8346 /* For bitwise operations, signedness of nominal type
8347 does not matter. Consider only how operands were extended. */
8348 if (shorten == -1)
8349 uns = unsigned0;
8351 /* Note that in all three cases below we refrain from optimizing
8352 an unsigned operation on sign-extended args.
8353 That would not be valid. */
8355 /* Both args variable: if both extended in same way
8356 from same width, do it in that width.
8357 Do it unsigned if args were zero-extended. */
8358 if ((TYPE_PRECISION (TREE_TYPE (arg0))
8359 < TYPE_PRECISION (result_type))
8360 && (TYPE_PRECISION (TREE_TYPE (arg1))
8361 == TYPE_PRECISION (TREE_TYPE (arg0)))
8362 && unsigned0 == unsigned1
8363 && (unsigned0 || !uns))
8364 result_type
8365 = c_common_signed_or_unsigned_type
8366 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
8367 else if (TREE_CODE (arg0) == INTEGER_CST
8368 && (unsigned1 || !uns)
8369 && (TYPE_PRECISION (TREE_TYPE (arg1))
8370 < TYPE_PRECISION (result_type))
8371 && (type
8372 = c_common_signed_or_unsigned_type (unsigned1,
8373 TREE_TYPE (arg1)))
8374 && !POINTER_TYPE_P (type)
8375 && int_fits_type_p (arg0, type))
8376 result_type = type;
8377 else if (TREE_CODE (arg1) == INTEGER_CST
8378 && (unsigned0 || !uns)
8379 && (TYPE_PRECISION (TREE_TYPE (arg0))
8380 < TYPE_PRECISION (result_type))
8381 && (type
8382 = c_common_signed_or_unsigned_type (unsigned0,
8383 TREE_TYPE (arg0)))
8384 && !POINTER_TYPE_P (type)
8385 && int_fits_type_p (arg1, type))
8386 result_type = type;
8389 /* Shifts can be shortened if shifting right. */
8391 if (short_shift)
8393 int unsigned_arg;
8394 tree arg0 = get_narrower (op0, &unsigned_arg);
8396 final_type = result_type;
8398 if (arg0 == op0 && final_type == TREE_TYPE (op0))
8399 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
8401 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
8402 /* We can shorten only if the shift count is less than the
8403 number of bits in the smaller type size. */
8404 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
8405 /* We cannot drop an unsigned shift after sign-extension. */
8406 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
8408 /* Do an unsigned shift if the operand was zero-extended. */
8409 result_type
8410 = c_common_signed_or_unsigned_type (unsigned_arg,
8411 TREE_TYPE (arg0));
8412 /* Convert value-to-be-shifted to that type. */
8413 if (TREE_TYPE (op0) != result_type)
8414 op0 = convert (result_type, op0);
8415 converted = 1;
8419 /* Comparison operations are shortened too but differently.
8420 They identify themselves by setting short_compare = 1. */
8422 if (short_compare)
8424 /* Don't write &op0, etc., because that would prevent op0
8425 from being kept in a register.
8426 Instead, make copies of the our local variables and
8427 pass the copies by reference, then copy them back afterward. */
8428 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
8429 enum tree_code xresultcode = resultcode;
8430 tree val
8431 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
8433 if (val != 0)
8434 return val;
8436 op0 = xop0, op1 = xop1;
8437 converted = 1;
8438 resultcode = xresultcode;
8440 if (warn_sign_compare && skip_evaluation == 0)
8442 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
8443 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
8444 int unsignedp0, unsignedp1;
8445 tree primop0 = get_narrower (op0, &unsignedp0);
8446 tree primop1 = get_narrower (op1, &unsignedp1);
8448 xop0 = orig_op0;
8449 xop1 = orig_op1;
8450 STRIP_TYPE_NOPS (xop0);
8451 STRIP_TYPE_NOPS (xop1);
8453 /* Give warnings for comparisons between signed and unsigned
8454 quantities that may fail.
8456 Do the checking based on the original operand trees, so that
8457 casts will be considered, but default promotions won't be.
8459 Do not warn if the comparison is being done in a signed type,
8460 since the signed type will only be chosen if it can represent
8461 all the values of the unsigned type. */
8462 if (!TYPE_UNSIGNED (result_type))
8463 /* OK */;
8464 /* Do not warn if both operands are the same signedness. */
8465 else if (op0_signed == op1_signed)
8466 /* OK */;
8467 else
8469 tree sop, uop;
8470 bool ovf;
8472 if (op0_signed)
8473 sop = xop0, uop = xop1;
8474 else
8475 sop = xop1, uop = xop0;
8477 /* Do not warn if the signed quantity is an
8478 unsuffixed integer literal (or some static
8479 constant expression involving such literals or a
8480 conditional expression involving such literals)
8481 and it is non-negative. */
8482 if (tree_expr_nonnegative_warnv_p (sop, &ovf))
8483 /* OK */;
8484 /* Do not warn if the comparison is an equality operation,
8485 the unsigned quantity is an integral constant, and it
8486 would fit in the result if the result were signed. */
8487 else if (TREE_CODE (uop) == INTEGER_CST
8488 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
8489 && int_fits_type_p
8490 (uop, c_common_signed_type (result_type)))
8491 /* OK */;
8492 /* Do not warn if the unsigned quantity is an enumeration
8493 constant and its maximum value would fit in the result
8494 if the result were signed. */
8495 else if (TREE_CODE (uop) == INTEGER_CST
8496 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
8497 && int_fits_type_p
8498 (TYPE_MAX_VALUE (TREE_TYPE (uop)),
8499 c_common_signed_type (result_type)))
8500 /* OK */;
8501 else
8502 warning (0, "comparison between signed and unsigned");
8505 /* Warn if two unsigned values are being compared in a size
8506 larger than their original size, and one (and only one) is the
8507 result of a `~' operator. This comparison will always fail.
8509 Also warn if one operand is a constant, and the constant
8510 does not have all bits set that are set in the ~ operand
8511 when it is extended. */
8513 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
8514 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
8516 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
8517 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
8518 &unsignedp0);
8519 else
8520 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
8521 &unsignedp1);
8523 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
8525 tree primop;
8526 HOST_WIDE_INT constant, mask;
8527 int unsignedp, bits;
8529 if (host_integerp (primop0, 0))
8531 primop = primop1;
8532 unsignedp = unsignedp1;
8533 constant = tree_low_cst (primop0, 0);
8535 else
8537 primop = primop0;
8538 unsignedp = unsignedp0;
8539 constant = tree_low_cst (primop1, 0);
8542 bits = TYPE_PRECISION (TREE_TYPE (primop));
8543 if (bits < TYPE_PRECISION (result_type)
8544 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
8546 mask = (~(HOST_WIDE_INT) 0) << bits;
8547 if ((mask & constant) != mask)
8548 warning (0, "comparison of promoted ~unsigned with constant");
8551 else if (unsignedp0 && unsignedp1
8552 && (TYPE_PRECISION (TREE_TYPE (primop0))
8553 < TYPE_PRECISION (result_type))
8554 && (TYPE_PRECISION (TREE_TYPE (primop1))
8555 < TYPE_PRECISION (result_type)))
8556 warning (0, "comparison of promoted ~unsigned with unsigned");
8562 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
8563 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
8564 Then the expression will be built.
8565 It will be given type FINAL_TYPE if that is nonzero;
8566 otherwise, it will be given type RESULT_TYPE. */
8568 if (!result_type)
8570 binary_op_error (code, TREE_TYPE (op0), TREE_TYPE (op1));
8571 return error_mark_node;
8574 if (!converted)
8576 if (TREE_TYPE (op0) != result_type)
8577 op0 = convert_and_check (result_type, op0);
8578 if (TREE_TYPE (op1) != result_type)
8579 op1 = convert_and_check (result_type, op1);
8581 /* This can happen if one operand has a vector type, and the other
8582 has a different type. */
8583 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
8584 return error_mark_node;
8587 if (build_type == NULL_TREE)
8588 build_type = result_type;
8591 /* Treat expressions in initializers specially as they can't trap. */
8592 tree result = require_constant_value ? fold_build2_initializer (resultcode,
8593 build_type,
8594 op0, op1)
8595 : fold_build2 (resultcode, build_type,
8596 op0, op1);
8598 if (final_type != 0)
8599 result = convert (final_type, result);
8600 return result;
8605 /* Convert EXPR to be a truth-value, validating its type for this
8606 purpose. */
8608 tree
8609 c_objc_common_truthvalue_conversion (tree expr)
8611 switch (TREE_CODE (TREE_TYPE (expr)))
8613 case ARRAY_TYPE:
8614 error ("used array that cannot be converted to pointer where scalar is required");
8615 return error_mark_node;
8617 case RECORD_TYPE:
8618 error ("used struct type value where scalar is required");
8619 return error_mark_node;
8621 case UNION_TYPE:
8622 error ("used union type value where scalar is required");
8623 return error_mark_node;
8625 case FUNCTION_TYPE:
8626 gcc_unreachable ();
8628 default:
8629 break;
8632 /* ??? Should we also give an error for void and vectors rather than
8633 leaving those to give errors later? */
8634 return c_common_truthvalue_conversion (expr);
8638 /* Convert EXPR to a contained DECL, updating *TC, *TI and *SE as
8639 required. */
8641 tree
8642 c_expr_to_decl (tree expr, bool *tc ATTRIBUTE_UNUSED,
8643 bool *ti ATTRIBUTE_UNUSED, bool *se)
8645 if (TREE_CODE (expr) == COMPOUND_LITERAL_EXPR)
8647 tree decl = COMPOUND_LITERAL_EXPR_DECL (expr);
8648 /* Executing a compound literal inside a function reinitializes
8649 it. */
8650 if (!TREE_STATIC (decl))
8651 *se = true;
8652 return decl;
8654 else
8655 return expr;
8658 /* Like c_begin_compound_stmt, except force the retention of the BLOCK. */
8660 tree
8661 c_begin_omp_parallel (void)
8663 tree block;
8665 keep_next_level ();
8666 block = c_begin_compound_stmt (true);
8668 return block;
8671 tree
8672 c_finish_omp_parallel (tree clauses, tree block)
8674 tree stmt;
8676 block = c_end_compound_stmt (block, true);
8678 stmt = make_node (OMP_PARALLEL);
8679 TREE_TYPE (stmt) = void_type_node;
8680 OMP_PARALLEL_CLAUSES (stmt) = clauses;
8681 OMP_PARALLEL_BODY (stmt) = block;
8683 return add_stmt (stmt);
8686 /* For all elements of CLAUSES, validate them vs OpenMP constraints.
8687 Remove any elements from the list that are invalid. */
8689 tree
8690 c_finish_omp_clauses (tree clauses)
8692 bitmap_head generic_head, firstprivate_head, lastprivate_head;
8693 tree c, t, *pc = &clauses;
8694 const char *name;
8696 bitmap_obstack_initialize (NULL);
8697 bitmap_initialize (&generic_head, &bitmap_default_obstack);
8698 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
8699 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
8701 for (pc = &clauses, c = clauses; c ; c = *pc)
8703 bool remove = false;
8704 bool need_complete = false;
8705 bool need_implicitly_determined = false;
8707 switch (OMP_CLAUSE_CODE (c))
8709 case OMP_CLAUSE_SHARED:
8710 name = "shared";
8711 need_implicitly_determined = true;
8712 goto check_dup_generic;
8714 case OMP_CLAUSE_PRIVATE:
8715 name = "private";
8716 need_complete = true;
8717 need_implicitly_determined = true;
8718 goto check_dup_generic;
8720 case OMP_CLAUSE_REDUCTION:
8721 name = "reduction";
8722 need_implicitly_determined = true;
8723 t = OMP_CLAUSE_DECL (c);
8724 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
8725 || POINTER_TYPE_P (TREE_TYPE (t)))
8727 error ("%qE has invalid type for %<reduction%>", t);
8728 remove = true;
8730 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
8732 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
8733 const char *r_name = NULL;
8735 switch (r_code)
8737 case PLUS_EXPR:
8738 case MULT_EXPR:
8739 case MINUS_EXPR:
8740 break;
8741 case BIT_AND_EXPR:
8742 r_name = "&";
8743 break;
8744 case BIT_XOR_EXPR:
8745 r_name = "^";
8746 break;
8747 case BIT_IOR_EXPR:
8748 r_name = "|";
8749 break;
8750 case TRUTH_ANDIF_EXPR:
8751 r_name = "&&";
8752 break;
8753 case TRUTH_ORIF_EXPR:
8754 r_name = "||";
8755 break;
8756 default:
8757 gcc_unreachable ();
8759 if (r_name)
8761 error ("%qE has invalid type for %<reduction(%s)%>",
8762 t, r_name);
8763 remove = true;
8766 goto check_dup_generic;
8768 case OMP_CLAUSE_COPYPRIVATE:
8769 name = "copyprivate";
8770 goto check_dup_generic;
8772 case OMP_CLAUSE_COPYIN:
8773 name = "copyin";
8774 t = OMP_CLAUSE_DECL (c);
8775 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
8777 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
8778 remove = true;
8780 goto check_dup_generic;
8782 check_dup_generic:
8783 t = OMP_CLAUSE_DECL (c);
8784 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
8786 error ("%qE is not a variable in clause %qs", t, name);
8787 remove = true;
8789 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
8790 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
8791 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
8793 error ("%qE appears more than once in data clauses", t);
8794 remove = true;
8796 else
8797 bitmap_set_bit (&generic_head, DECL_UID (t));
8798 break;
8800 case OMP_CLAUSE_FIRSTPRIVATE:
8801 name = "firstprivate";
8802 t = OMP_CLAUSE_DECL (c);
8803 need_complete = true;
8804 need_implicitly_determined = true;
8805 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
8807 error ("%qE is not a variable in clause %<firstprivate%>", t);
8808 remove = true;
8810 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
8811 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
8813 error ("%qE appears more than once in data clauses", t);
8814 remove = true;
8816 else
8817 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
8818 break;
8820 case OMP_CLAUSE_LASTPRIVATE:
8821 name = "lastprivate";
8822 t = OMP_CLAUSE_DECL (c);
8823 need_complete = true;
8824 need_implicitly_determined = true;
8825 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
8827 error ("%qE is not a variable in clause %<lastprivate%>", t);
8828 remove = true;
8830 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
8831 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
8833 error ("%qE appears more than once in data clauses", t);
8834 remove = true;
8836 else
8837 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
8838 break;
8840 case OMP_CLAUSE_IF:
8841 case OMP_CLAUSE_NUM_THREADS:
8842 case OMP_CLAUSE_SCHEDULE:
8843 case OMP_CLAUSE_NOWAIT:
8844 case OMP_CLAUSE_ORDERED:
8845 case OMP_CLAUSE_DEFAULT:
8846 pc = &OMP_CLAUSE_CHAIN (c);
8847 continue;
8849 default:
8850 gcc_unreachable ();
8853 if (!remove)
8855 t = OMP_CLAUSE_DECL (c);
8857 if (need_complete)
8859 t = require_complete_type (t);
8860 if (t == error_mark_node)
8861 remove = true;
8864 if (need_implicitly_determined)
8866 const char *share_name = NULL;
8868 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
8869 share_name = "threadprivate";
8870 else switch (c_omp_predetermined_sharing (t))
8872 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
8873 break;
8874 case OMP_CLAUSE_DEFAULT_SHARED:
8875 share_name = "shared";
8876 break;
8877 case OMP_CLAUSE_DEFAULT_PRIVATE:
8878 share_name = "private";
8879 break;
8880 default:
8881 gcc_unreachable ();
8883 if (share_name)
8885 error ("%qE is predetermined %qs for %qs",
8886 t, share_name, name);
8887 remove = true;
8892 if (remove)
8893 *pc = OMP_CLAUSE_CHAIN (c);
8894 else
8895 pc = &OMP_CLAUSE_CHAIN (c);
8898 bitmap_obstack_release (NULL);
8899 return clauses;