re PR c/22240 (ICE with transparent unions, function pointers and -pedantic)
[gcc.git] / gcc / c-typeck.c
1 /* Build expressions with type checking for C compiler.
2 Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA. */
21
22
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. */
27
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"
47
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
56 };
57
58 /* The level of nesting inside "__alignof__". */
59 int in_alignof;
60
61 /* The level of nesting inside "sizeof". */
62 int in_sizeof;
63
64 /* The level of nesting inside "typeof". */
65 int in_typeof;
66
67 struct c_label_context_se *label_context_stack_se;
68 struct c_label_context_vm *label_context_stack_vm;
69
70 /* Nonzero if we've already printed a "missing braces around initializer"
71 message within this initializer. */
72 static int missing_braces_mentioned;
73
74 static int require_constant_value;
75 static int require_constant_elements;
76
77 static tree qualify_type (tree, tree);
78 static int tagged_types_tu_compatible_p (tree, tree);
79 static int comp_target_types (tree, tree);
80 static int function_types_compatible_p (tree, tree);
81 static int type_lists_compatible_p (tree, tree);
82 static tree decl_constant_value_for_broken_optimization (tree);
83 static tree lookup_field (tree, tree);
84 static tree convert_arguments (tree, tree, tree, tree);
85 static tree pointer_diff (tree, tree);
86 static tree convert_for_assignment (tree, tree, enum impl_conv, tree, tree,
87 int);
88 static tree valid_compound_expr_initializer (tree, tree);
89 static void push_string (const char *);
90 static void push_member_name (tree);
91 static void push_array_bounds (int);
92 static int spelling_length (void);
93 static char *print_spelling (char *);
94 static void warning_init (const char *);
95 static tree digest_init (tree, tree, bool, int);
96 static void output_init_element (tree, bool, tree, tree, int);
97 static void output_pending_init_elements (int);
98 static int set_designator (int);
99 static void push_range_stack (tree);
100 static void add_pending_init (tree, tree);
101 static void set_nonincremental_init (void);
102 static void set_nonincremental_init_from_string (tree);
103 static tree find_init_member (tree);
104 static void readonly_error (tree, enum lvalue_use);
105 static int lvalue_or_else (tree, enum lvalue_use);
106 static int lvalue_p (tree);
107 static void record_maybe_used_decl (tree);
108 \f
109 /* Do `exp = require_complete_type (exp);' to make sure exp
110 does not have an incomplete type. (That includes void types.) */
111
112 tree
113 require_complete_type (tree value)
114 {
115 tree type = TREE_TYPE (value);
116
117 if (value == error_mark_node || type == error_mark_node)
118 return error_mark_node;
119
120 /* First, detect a valid value with a complete type. */
121 if (COMPLETE_TYPE_P (type))
122 return value;
123
124 c_incomplete_type_error (value, type);
125 return error_mark_node;
126 }
127
128 /* Print an error message for invalid use of an incomplete type.
129 VALUE is the expression that was used (or 0 if that isn't known)
130 and TYPE is the type that was invalid. */
131
132 void
133 c_incomplete_type_error (tree value, tree type)
134 {
135 const char *type_code_string;
136
137 /* Avoid duplicate error message. */
138 if (TREE_CODE (type) == ERROR_MARK)
139 return;
140
141 if (value != 0 && (TREE_CODE (value) == VAR_DECL
142 || TREE_CODE (value) == PARM_DECL))
143 error ("%qD has an incomplete type", value);
144 else
145 {
146 retry:
147 /* We must print an error message. Be clever about what it says. */
148
149 switch (TREE_CODE (type))
150 {
151 case RECORD_TYPE:
152 type_code_string = "struct";
153 break;
154
155 case UNION_TYPE:
156 type_code_string = "union";
157 break;
158
159 case ENUMERAL_TYPE:
160 type_code_string = "enum";
161 break;
162
163 case VOID_TYPE:
164 error ("invalid use of void expression");
165 return;
166
167 case ARRAY_TYPE:
168 if (TYPE_DOMAIN (type))
169 {
170 if (TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL)
171 {
172 error ("invalid use of flexible array member");
173 return;
174 }
175 type = TREE_TYPE (type);
176 goto retry;
177 }
178 error ("invalid use of array with unspecified bounds");
179 return;
180
181 default:
182 gcc_unreachable ();
183 }
184
185 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
186 error ("invalid use of undefined type %<%s %E%>",
187 type_code_string, TYPE_NAME (type));
188 else
189 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
190 error ("invalid use of incomplete typedef %qD", TYPE_NAME (type));
191 }
192 }
193
194 /* Given a type, apply default promotions wrt unnamed function
195 arguments and return the new type. */
196
197 tree
198 c_type_promotes_to (tree type)
199 {
200 if (TYPE_MAIN_VARIANT (type) == float_type_node)
201 return double_type_node;
202
203 if (c_promoting_integer_type_p (type))
204 {
205 /* Preserve unsignedness if not really getting any wider. */
206 if (TYPE_UNSIGNED (type)
207 && (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)))
208 return unsigned_type_node;
209 return integer_type_node;
210 }
211
212 return type;
213 }
214
215 /* Return a variant of TYPE which has all the type qualifiers of LIKE
216 as well as those of TYPE. */
217
218 static tree
219 qualify_type (tree type, tree like)
220 {
221 return c_build_qualified_type (type,
222 TYPE_QUALS (type) | TYPE_QUALS (like));
223 }
224 \f
225 /* Return the composite type of two compatible types.
226
227 We assume that comptypes has already been done and returned
228 nonzero; if that isn't so, this may crash. In particular, we
229 assume that qualifiers match. */
230
231 tree
232 composite_type (tree t1, tree t2)
233 {
234 enum tree_code code1;
235 enum tree_code code2;
236 tree attributes;
237
238 /* Save time if the two types are the same. */
239
240 if (t1 == t2) return t1;
241
242 /* If one type is nonsense, use the other. */
243 if (t1 == error_mark_node)
244 return t2;
245 if (t2 == error_mark_node)
246 return t1;
247
248 code1 = TREE_CODE (t1);
249 code2 = TREE_CODE (t2);
250
251 /* Merge the attributes. */
252 attributes = targetm.merge_type_attributes (t1, t2);
253
254 /* If one is an enumerated type and the other is the compatible
255 integer type, the composite type might be either of the two
256 (DR#013 question 3). For consistency, use the enumerated type as
257 the composite type. */
258
259 if (code1 == ENUMERAL_TYPE && code2 == INTEGER_TYPE)
260 return t1;
261 if (code2 == ENUMERAL_TYPE && code1 == INTEGER_TYPE)
262 return t2;
263
264 gcc_assert (code1 == code2);
265
266 switch (code1)
267 {
268 case POINTER_TYPE:
269 /* For two pointers, do this recursively on the target type. */
270 {
271 tree pointed_to_1 = TREE_TYPE (t1);
272 tree pointed_to_2 = TREE_TYPE (t2);
273 tree target = composite_type (pointed_to_1, pointed_to_2);
274 t1 = build_pointer_type (target);
275 t1 = build_type_attribute_variant (t1, attributes);
276 return qualify_type (t1, t2);
277 }
278
279 case ARRAY_TYPE:
280 {
281 tree elt = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
282 int quals;
283 tree unqual_elt;
284 tree d1 = TYPE_DOMAIN (t1);
285 tree d2 = TYPE_DOMAIN (t2);
286 bool d1_variable, d2_variable;
287 bool d1_zero, d2_zero;
288
289 /* We should not have any type quals on arrays at all. */
290 gcc_assert (!TYPE_QUALS (t1) && !TYPE_QUALS (t2));
291
292 d1_zero = d1 == 0 || !TYPE_MAX_VALUE (d1);
293 d2_zero = d2 == 0 || !TYPE_MAX_VALUE (d2);
294
295 d1_variable = (!d1_zero
296 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
297 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
298 d2_variable = (!d2_zero
299 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
300 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
301
302 /* Save space: see if the result is identical to one of the args. */
303 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1)
304 && (d2_variable || d2_zero || !d1_variable))
305 return build_type_attribute_variant (t1, attributes);
306 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2)
307 && (d1_variable || d1_zero || !d2_variable))
308 return build_type_attribute_variant (t2, attributes);
309
310 if (elt == TREE_TYPE (t1) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
311 return build_type_attribute_variant (t1, attributes);
312 if (elt == TREE_TYPE (t2) && !TYPE_DOMAIN (t2) && !TYPE_DOMAIN (t1))
313 return build_type_attribute_variant (t2, attributes);
314
315 /* Merge the element types, and have a size if either arg has
316 one. We may have qualifiers on the element types. To set
317 up TYPE_MAIN_VARIANT correctly, we need to form the
318 composite of the unqualified types and add the qualifiers
319 back at the end. */
320 quals = TYPE_QUALS (strip_array_types (elt));
321 unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED);
322 t1 = build_array_type (unqual_elt,
323 TYPE_DOMAIN ((TYPE_DOMAIN (t1)
324 && (d2_variable
325 || d2_zero
326 || !d1_variable))
327 ? t1
328 : t2));
329 t1 = c_build_qualified_type (t1, quals);
330 return build_type_attribute_variant (t1, attributes);
331 }
332
333 case FUNCTION_TYPE:
334 /* Function types: prefer the one that specified arg types.
335 If both do, merge the arg types. Also merge the return types. */
336 {
337 tree valtype = composite_type (TREE_TYPE (t1), TREE_TYPE (t2));
338 tree p1 = TYPE_ARG_TYPES (t1);
339 tree p2 = TYPE_ARG_TYPES (t2);
340 int len;
341 tree newargs, n;
342 int i;
343
344 /* Save space: see if the result is identical to one of the args. */
345 if (valtype == TREE_TYPE (t1) && !TYPE_ARG_TYPES (t2))
346 return build_type_attribute_variant (t1, attributes);
347 if (valtype == TREE_TYPE (t2) && !TYPE_ARG_TYPES (t1))
348 return build_type_attribute_variant (t2, attributes);
349
350 /* Simple way if one arg fails to specify argument types. */
351 if (TYPE_ARG_TYPES (t1) == 0)
352 {
353 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t2));
354 t1 = build_type_attribute_variant (t1, attributes);
355 return qualify_type (t1, t2);
356 }
357 if (TYPE_ARG_TYPES (t2) == 0)
358 {
359 t1 = build_function_type (valtype, TYPE_ARG_TYPES (t1));
360 t1 = build_type_attribute_variant (t1, attributes);
361 return qualify_type (t1, t2);
362 }
363
364 /* If both args specify argument types, we must merge the two
365 lists, argument by argument. */
366 /* Tell global_bindings_p to return false so that variable_size
367 doesn't die on VLAs in parameter types. */
368 c_override_global_bindings_to_false = true;
369
370 len = list_length (p1);
371 newargs = 0;
372
373 for (i = 0; i < len; i++)
374 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs);
375
376 n = newargs;
377
378 for (; p1;
379 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n))
380 {
381 /* A null type means arg type is not specified.
382 Take whatever the other function type has. */
383 if (TREE_VALUE (p1) == 0)
384 {
385 TREE_VALUE (n) = TREE_VALUE (p2);
386 goto parm_done;
387 }
388 if (TREE_VALUE (p2) == 0)
389 {
390 TREE_VALUE (n) = TREE_VALUE (p1);
391 goto parm_done;
392 }
393
394 /* Given wait (union {union wait *u; int *i} *)
395 and wait (union wait *),
396 prefer union wait * as type of parm. */
397 if (TREE_CODE (TREE_VALUE (p1)) == UNION_TYPE
398 && TREE_VALUE (p1) != TREE_VALUE (p2))
399 {
400 tree memb;
401 tree mv2 = TREE_VALUE (p2);
402 if (mv2 && mv2 != error_mark_node
403 && TREE_CODE (mv2) != ARRAY_TYPE)
404 mv2 = TYPE_MAIN_VARIANT (mv2);
405 for (memb = TYPE_FIELDS (TREE_VALUE (p1));
406 memb; memb = TREE_CHAIN (memb))
407 {
408 tree mv3 = TREE_TYPE (memb);
409 if (mv3 && mv3 != error_mark_node
410 && TREE_CODE (mv3) != ARRAY_TYPE)
411 mv3 = TYPE_MAIN_VARIANT (mv3);
412 if (comptypes (mv3, mv2))
413 {
414 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
415 TREE_VALUE (p2));
416 if (pedantic)
417 pedwarn ("function types not truly compatible in ISO C");
418 goto parm_done;
419 }
420 }
421 }
422 if (TREE_CODE (TREE_VALUE (p2)) == UNION_TYPE
423 && TREE_VALUE (p2) != TREE_VALUE (p1))
424 {
425 tree memb;
426 tree mv1 = TREE_VALUE (p1);
427 if (mv1 && mv1 != error_mark_node
428 && TREE_CODE (mv1) != ARRAY_TYPE)
429 mv1 = TYPE_MAIN_VARIANT (mv1);
430 for (memb = TYPE_FIELDS (TREE_VALUE (p2));
431 memb; memb = TREE_CHAIN (memb))
432 {
433 tree mv3 = TREE_TYPE (memb);
434 if (mv3 && mv3 != error_mark_node
435 && TREE_CODE (mv3) != ARRAY_TYPE)
436 mv3 = TYPE_MAIN_VARIANT (mv3);
437 if (comptypes (mv3, mv1))
438 {
439 TREE_VALUE (n) = composite_type (TREE_TYPE (memb),
440 TREE_VALUE (p1));
441 if (pedantic)
442 pedwarn ("function types not truly compatible in ISO C");
443 goto parm_done;
444 }
445 }
446 }
447 TREE_VALUE (n) = composite_type (TREE_VALUE (p1), TREE_VALUE (p2));
448 parm_done: ;
449 }
450
451 c_override_global_bindings_to_false = false;
452 t1 = build_function_type (valtype, newargs);
453 t1 = qualify_type (t1, t2);
454 /* ... falls through ... */
455 }
456
457 default:
458 return build_type_attribute_variant (t1, attributes);
459 }
460
461 }
462
463 /* Return the type of a conditional expression between pointers to
464 possibly differently qualified versions of compatible types.
465
466 We assume that comp_target_types has already been done and returned
467 nonzero; if that isn't so, this may crash. */
468
469 static tree
470 common_pointer_type (tree t1, tree t2)
471 {
472 tree attributes;
473 tree pointed_to_1, mv1;
474 tree pointed_to_2, mv2;
475 tree target;
476
477 /* Save time if the two types are the same. */
478
479 if (t1 == t2) return t1;
480
481 /* If one type is nonsense, use the other. */
482 if (t1 == error_mark_node)
483 return t2;
484 if (t2 == error_mark_node)
485 return t1;
486
487 gcc_assert (TREE_CODE (t1) == POINTER_TYPE
488 && TREE_CODE (t2) == POINTER_TYPE);
489
490 /* Merge the attributes. */
491 attributes = targetm.merge_type_attributes (t1, t2);
492
493 /* Find the composite type of the target types, and combine the
494 qualifiers of the two types' targets. Do not lose qualifiers on
495 array element types by taking the TYPE_MAIN_VARIANT. */
496 mv1 = pointed_to_1 = TREE_TYPE (t1);
497 mv2 = pointed_to_2 = TREE_TYPE (t2);
498 if (TREE_CODE (mv1) != ARRAY_TYPE)
499 mv1 = TYPE_MAIN_VARIANT (pointed_to_1);
500 if (TREE_CODE (mv2) != ARRAY_TYPE)
501 mv2 = TYPE_MAIN_VARIANT (pointed_to_2);
502 target = composite_type (mv1, mv2);
503 t1 = build_pointer_type (c_build_qualified_type
504 (target,
505 TYPE_QUALS (pointed_to_1) |
506 TYPE_QUALS (pointed_to_2)));
507 return build_type_attribute_variant (t1, attributes);
508 }
509
510 /* Return the common type for two arithmetic types under the usual
511 arithmetic conversions. The default conversions have already been
512 applied, and enumerated types converted to their compatible integer
513 types. The resulting type is unqualified and has no attributes.
514
515 This is the type for the result of most arithmetic operations
516 if the operands have the given two types. */
517
518 static tree
519 c_common_type (tree t1, tree t2)
520 {
521 enum tree_code code1;
522 enum tree_code code2;
523
524 /* If one type is nonsense, use the other. */
525 if (t1 == error_mark_node)
526 return t2;
527 if (t2 == error_mark_node)
528 return t1;
529
530 if (TYPE_QUALS (t1) != TYPE_UNQUALIFIED)
531 t1 = TYPE_MAIN_VARIANT (t1);
532
533 if (TYPE_QUALS (t2) != TYPE_UNQUALIFIED)
534 t2 = TYPE_MAIN_VARIANT (t2);
535
536 if (TYPE_ATTRIBUTES (t1) != NULL_TREE)
537 t1 = build_type_attribute_variant (t1, NULL_TREE);
538
539 if (TYPE_ATTRIBUTES (t2) != NULL_TREE)
540 t2 = build_type_attribute_variant (t2, NULL_TREE);
541
542 /* Save time if the two types are the same. */
543
544 if (t1 == t2) return t1;
545
546 code1 = TREE_CODE (t1);
547 code2 = TREE_CODE (t2);
548
549 gcc_assert (code1 == VECTOR_TYPE || code1 == COMPLEX_TYPE
550 || code1 == REAL_TYPE || code1 == INTEGER_TYPE);
551 gcc_assert (code2 == VECTOR_TYPE || code2 == COMPLEX_TYPE
552 || code2 == REAL_TYPE || code2 == INTEGER_TYPE);
553
554 /* If one type is a vector type, return that type. (How the usual
555 arithmetic conversions apply to the vector types extension is not
556 precisely specified.) */
557 if (code1 == VECTOR_TYPE)
558 return t1;
559
560 if (code2 == VECTOR_TYPE)
561 return t2;
562
563 /* If one type is complex, form the common type of the non-complex
564 components, then make that complex. Use T1 or T2 if it is the
565 required type. */
566 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE)
567 {
568 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1;
569 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2;
570 tree subtype = c_common_type (subtype1, subtype2);
571
572 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype)
573 return t1;
574 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype)
575 return t2;
576 else
577 return build_complex_type (subtype);
578 }
579
580 /* If only one is real, use it as the result. */
581
582 if (code1 == REAL_TYPE && code2 != REAL_TYPE)
583 return t1;
584
585 if (code2 == REAL_TYPE && code1 != REAL_TYPE)
586 return t2;
587
588 /* Both real or both integers; use the one with greater precision. */
589
590 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2))
591 return t1;
592 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1))
593 return t2;
594
595 /* Same precision. Prefer long longs to longs to ints when the
596 same precision, following the C99 rules on integer type rank
597 (which are equivalent to the C90 rules for C90 types). */
598
599 if (TYPE_MAIN_VARIANT (t1) == long_long_unsigned_type_node
600 || TYPE_MAIN_VARIANT (t2) == long_long_unsigned_type_node)
601 return long_long_unsigned_type_node;
602
603 if (TYPE_MAIN_VARIANT (t1) == long_long_integer_type_node
604 || TYPE_MAIN_VARIANT (t2) == long_long_integer_type_node)
605 {
606 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
607 return long_long_unsigned_type_node;
608 else
609 return long_long_integer_type_node;
610 }
611
612 if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
613 || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
614 return long_unsigned_type_node;
615
616 if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
617 || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
618 {
619 /* But preserve unsignedness from the other type,
620 since long cannot hold all the values of an unsigned int. */
621 if (TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
622 return long_unsigned_type_node;
623 else
624 return long_integer_type_node;
625 }
626
627 /* Likewise, prefer long double to double even if same size. */
628 if (TYPE_MAIN_VARIANT (t1) == long_double_type_node
629 || TYPE_MAIN_VARIANT (t2) == long_double_type_node)
630 return long_double_type_node;
631
632 /* Otherwise prefer the unsigned one. */
633
634 if (TYPE_UNSIGNED (t1))
635 return t1;
636 else
637 return t2;
638 }
639 \f
640 /* Wrapper around c_common_type that is used by c-common.c. ENUMERAL_TYPEs
641 are allowed here and are converted to their compatible integer types.
642 BOOLEAN_TYPEs are allowed here and return either boolean_type_node or
643 preferably a non-Boolean type as the common type. */
644 tree
645 common_type (tree t1, tree t2)
646 {
647 if (TREE_CODE (t1) == ENUMERAL_TYPE)
648 t1 = c_common_type_for_size (TYPE_PRECISION (t1), 1);
649 if (TREE_CODE (t2) == ENUMERAL_TYPE)
650 t2 = c_common_type_for_size (TYPE_PRECISION (t2), 1);
651
652 /* If both types are BOOLEAN_TYPE, then return boolean_type_node. */
653 if (TREE_CODE (t1) == BOOLEAN_TYPE
654 && TREE_CODE (t2) == BOOLEAN_TYPE)
655 return boolean_type_node;
656
657 /* If either type is BOOLEAN_TYPE, then return the other. */
658 if (TREE_CODE (t1) == BOOLEAN_TYPE)
659 return t2;
660 if (TREE_CODE (t2) == BOOLEAN_TYPE)
661 return t1;
662
663 return c_common_type (t1, t2);
664 }
665 \f
666 /* Return 1 if TYPE1 and TYPE2 are compatible types for assignment
667 or various other operations. Return 2 if they are compatible
668 but a warning may be needed if you use them together. */
669
670 int
671 comptypes (tree type1, tree type2)
672 {
673 tree t1 = type1;
674 tree t2 = type2;
675 int attrval, val;
676
677 /* Suppress errors caused by previously reported errors. */
678
679 if (t1 == t2 || !t1 || !t2
680 || TREE_CODE (t1) == ERROR_MARK || TREE_CODE (t2) == ERROR_MARK)
681 return 1;
682
683 /* If either type is the internal version of sizetype, return the
684 language version. */
685 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1)
686 && TYPE_ORIG_SIZE_TYPE (t1))
687 t1 = TYPE_ORIG_SIZE_TYPE (t1);
688
689 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2)
690 && TYPE_ORIG_SIZE_TYPE (t2))
691 t2 = TYPE_ORIG_SIZE_TYPE (t2);
692
693
694 /* Enumerated types are compatible with integer types, but this is
695 not transitive: two enumerated types in the same translation unit
696 are compatible with each other only if they are the same type. */
697
698 if (TREE_CODE (t1) == ENUMERAL_TYPE && TREE_CODE (t2) != ENUMERAL_TYPE)
699 t1 = c_common_type_for_size (TYPE_PRECISION (t1), TYPE_UNSIGNED (t1));
700 else if (TREE_CODE (t2) == ENUMERAL_TYPE && TREE_CODE (t1) != ENUMERAL_TYPE)
701 t2 = c_common_type_for_size (TYPE_PRECISION (t2), TYPE_UNSIGNED (t2));
702
703 if (t1 == t2)
704 return 1;
705
706 /* Different classes of types can't be compatible. */
707
708 if (TREE_CODE (t1) != TREE_CODE (t2))
709 return 0;
710
711 /* Qualifiers must match. C99 6.7.3p9 */
712
713 if (TYPE_QUALS (t1) != TYPE_QUALS (t2))
714 return 0;
715
716 /* Allow for two different type nodes which have essentially the same
717 definition. Note that we already checked for equality of the type
718 qualifiers (just above). */
719
720 if (TREE_CODE (t1) != ARRAY_TYPE
721 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
722 return 1;
723
724 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
725 if (!(attrval = targetm.comp_type_attributes (t1, t2)))
726 return 0;
727
728 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
729 val = 0;
730
731 switch (TREE_CODE (t1))
732 {
733 case POINTER_TYPE:
734 /* Do not remove mode or aliasing information. */
735 if (TYPE_MODE (t1) != TYPE_MODE (t2)
736 || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2))
737 break;
738 val = (TREE_TYPE (t1) == TREE_TYPE (t2)
739 ? 1 : comptypes (TREE_TYPE (t1), TREE_TYPE (t2)));
740 break;
741
742 case FUNCTION_TYPE:
743 val = function_types_compatible_p (t1, t2);
744 break;
745
746 case ARRAY_TYPE:
747 {
748 tree d1 = TYPE_DOMAIN (t1);
749 tree d2 = TYPE_DOMAIN (t2);
750 bool d1_variable, d2_variable;
751 bool d1_zero, d2_zero;
752 val = 1;
753
754 /* Target types must match incl. qualifiers. */
755 if (TREE_TYPE (t1) != TREE_TYPE (t2)
756 && 0 == (val = comptypes (TREE_TYPE (t1), TREE_TYPE (t2))))
757 return 0;
758
759 /* Sizes must match unless one is missing or variable. */
760 if (d1 == 0 || d2 == 0 || d1 == d2)
761 break;
762
763 d1_zero = !TYPE_MAX_VALUE (d1);
764 d2_zero = !TYPE_MAX_VALUE (d2);
765
766 d1_variable = (!d1_zero
767 && (TREE_CODE (TYPE_MIN_VALUE (d1)) != INTEGER_CST
768 || TREE_CODE (TYPE_MAX_VALUE (d1)) != INTEGER_CST));
769 d2_variable = (!d2_zero
770 && (TREE_CODE (TYPE_MIN_VALUE (d2)) != INTEGER_CST
771 || TREE_CODE (TYPE_MAX_VALUE (d2)) != INTEGER_CST));
772
773 if (d1_variable || d2_variable)
774 break;
775 if (d1_zero && d2_zero)
776 break;
777 if (d1_zero || d2_zero
778 || !tree_int_cst_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))
779 || !tree_int_cst_equal (TYPE_MAX_VALUE (d1), TYPE_MAX_VALUE (d2)))
780 val = 0;
781
782 break;
783 }
784
785 case ENUMERAL_TYPE:
786 case RECORD_TYPE:
787 case UNION_TYPE:
788 if (val != 1 && !same_translation_unit_p (t1, t2))
789 val = tagged_types_tu_compatible_p (t1, t2);
790 break;
791
792 case VECTOR_TYPE:
793 val = TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2)
794 && comptypes (TREE_TYPE (t1), TREE_TYPE (t2));
795 break;
796
797 default:
798 break;
799 }
800 return attrval == 2 && val == 1 ? 2 : val;
801 }
802
803 /* Return 1 if TTL and TTR are pointers to types that are equivalent,
804 ignoring their qualifiers. */
805
806 static int
807 comp_target_types (tree ttl, tree ttr)
808 {
809 int val;
810 tree mvl, mvr;
811
812 /* Do not lose qualifiers on element types of array types that are
813 pointer targets by taking their TYPE_MAIN_VARIANT. */
814 mvl = TREE_TYPE (ttl);
815 mvr = TREE_TYPE (ttr);
816 if (TREE_CODE (mvl) != ARRAY_TYPE)
817 mvl = TYPE_MAIN_VARIANT (mvl);
818 if (TREE_CODE (mvr) != ARRAY_TYPE)
819 mvr = TYPE_MAIN_VARIANT (mvr);
820 val = comptypes (mvl, mvr);
821
822 if (val == 2 && pedantic)
823 pedwarn ("types are not quite compatible");
824 return val;
825 }
826 \f
827 /* Subroutines of `comptypes'. */
828
829 /* Determine whether two trees derive from the same translation unit.
830 If the CONTEXT chain ends in a null, that tree's context is still
831 being parsed, so if two trees have context chains ending in null,
832 they're in the same translation unit. */
833 int
834 same_translation_unit_p (tree t1, tree t2)
835 {
836 while (t1 && TREE_CODE (t1) != TRANSLATION_UNIT_DECL)
837 switch (TREE_CODE_CLASS (TREE_CODE (t1)))
838 {
839 case tcc_declaration:
840 t1 = DECL_CONTEXT (t1); break;
841 case tcc_type:
842 t1 = TYPE_CONTEXT (t1); break;
843 case tcc_exceptional:
844 t1 = BLOCK_SUPERCONTEXT (t1); break; /* assume block */
845 default: gcc_unreachable ();
846 }
847
848 while (t2 && TREE_CODE (t2) != TRANSLATION_UNIT_DECL)
849 switch (TREE_CODE_CLASS (TREE_CODE (t2)))
850 {
851 case tcc_declaration:
852 t2 = DECL_CONTEXT (t2); break;
853 case tcc_type:
854 t2 = TYPE_CONTEXT (t2); break;
855 case tcc_exceptional:
856 t2 = BLOCK_SUPERCONTEXT (t2); break; /* assume block */
857 default: gcc_unreachable ();
858 }
859
860 return t1 == t2;
861 }
862
863 /* The C standard says that two structures in different translation
864 units are compatible with each other only if the types of their
865 fields are compatible (among other things). So, consider two copies
866 of this structure: */
867
868 struct tagged_tu_seen {
869 const struct tagged_tu_seen * next;
870 tree t1;
871 tree t2;
872 };
873
874 /* Can they be compatible with each other? We choose to break the
875 recursion by allowing those types to be compatible. */
876
877 static const struct tagged_tu_seen * tagged_tu_seen_base;
878
879 /* Return 1 if two 'struct', 'union', or 'enum' types T1 and T2 are
880 compatible. If the two types are not the same (which has been
881 checked earlier), this can only happen when multiple translation
882 units are being compiled. See C99 6.2.7 paragraph 1 for the exact
883 rules. */
884
885 static int
886 tagged_types_tu_compatible_p (tree t1, tree t2)
887 {
888 tree s1, s2;
889 bool needs_warning = false;
890
891 /* We have to verify that the tags of the types are the same. This
892 is harder than it looks because this may be a typedef, so we have
893 to go look at the original type. It may even be a typedef of a
894 typedef...
895 In the case of compiler-created builtin structs the TYPE_DECL
896 may be a dummy, with no DECL_ORIGINAL_TYPE. Don't fault. */
897 while (TYPE_NAME (t1)
898 && TREE_CODE (TYPE_NAME (t1)) == TYPE_DECL
899 && DECL_ORIGINAL_TYPE (TYPE_NAME (t1)))
900 t1 = DECL_ORIGINAL_TYPE (TYPE_NAME (t1));
901
902 while (TYPE_NAME (t2)
903 && TREE_CODE (TYPE_NAME (t2)) == TYPE_DECL
904 && DECL_ORIGINAL_TYPE (TYPE_NAME (t2)))
905 t2 = DECL_ORIGINAL_TYPE (TYPE_NAME (t2));
906
907 /* C90 didn't have the requirement that the two tags be the same. */
908 if (flag_isoc99 && TYPE_NAME (t1) != TYPE_NAME (t2))
909 return 0;
910
911 /* C90 didn't say what happened if one or both of the types were
912 incomplete; we choose to follow C99 rules here, which is that they
913 are compatible. */
914 if (TYPE_SIZE (t1) == NULL
915 || TYPE_SIZE (t2) == NULL)
916 return 1;
917
918 {
919 const struct tagged_tu_seen * tts_i;
920 for (tts_i = tagged_tu_seen_base; tts_i != NULL; tts_i = tts_i->next)
921 if (tts_i->t1 == t1 && tts_i->t2 == t2)
922 return 1;
923 }
924
925 switch (TREE_CODE (t1))
926 {
927 case ENUMERAL_TYPE:
928 {
929
930 /* Speed up the case where the type values are in the same order. */
931 tree tv1 = TYPE_VALUES (t1);
932 tree tv2 = TYPE_VALUES (t2);
933
934 if (tv1 == tv2)
935 return 1;
936
937 for (;tv1 && tv2; tv1 = TREE_CHAIN (tv1), tv2 = TREE_CHAIN (tv2))
938 {
939 if (TREE_PURPOSE (tv1) != TREE_PURPOSE (tv2))
940 break;
941 if (simple_cst_equal (TREE_VALUE (tv1), TREE_VALUE (tv2)) != 1)
942 return 0;
943 }
944
945 if (tv1 == NULL_TREE && tv2 == NULL_TREE)
946 return 1;
947 if (tv1 == NULL_TREE || tv2 == NULL_TREE)
948 return 0;
949
950 if (list_length (TYPE_VALUES (t1)) != list_length (TYPE_VALUES (t2)))
951 return 0;
952
953 for (s1 = TYPE_VALUES (t1); s1; s1 = TREE_CHAIN (s1))
954 {
955 s2 = purpose_member (TREE_PURPOSE (s1), TYPE_VALUES (t2));
956 if (s2 == NULL
957 || simple_cst_equal (TREE_VALUE (s1), TREE_VALUE (s2)) != 1)
958 return 0;
959 }
960 return 1;
961 }
962
963 case UNION_TYPE:
964 {
965 if (list_length (TYPE_FIELDS (t1)) != list_length (TYPE_FIELDS (t2)))
966 return 0;
967
968 for (s1 = TYPE_FIELDS (t1); s1; s1 = TREE_CHAIN (s1))
969 {
970 bool ok = false;
971 struct tagged_tu_seen tts;
972
973 tts.next = tagged_tu_seen_base;
974 tts.t1 = t1;
975 tts.t2 = t2;
976 tagged_tu_seen_base = &tts;
977
978 if (DECL_NAME (s1) != NULL)
979 for (s2 = TYPE_FIELDS (t2); s2; s2 = TREE_CHAIN (s2))
980 if (DECL_NAME (s1) == DECL_NAME (s2))
981 {
982 int result;
983 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
984 if (result == 0)
985 break;
986 if (result == 2)
987 needs_warning = true;
988
989 if (TREE_CODE (s1) == FIELD_DECL
990 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
991 DECL_FIELD_BIT_OFFSET (s2)) != 1)
992 break;
993
994 ok = true;
995 break;
996 }
997 tagged_tu_seen_base = tts.next;
998 if (!ok)
999 return 0;
1000 }
1001 return needs_warning ? 2 : 1;
1002 }
1003
1004 case RECORD_TYPE:
1005 {
1006 struct tagged_tu_seen tts;
1007
1008 tts.next = tagged_tu_seen_base;
1009 tts.t1 = t1;
1010 tts.t2 = t2;
1011 tagged_tu_seen_base = &tts;
1012
1013 for (s1 = TYPE_FIELDS (t1), s2 = TYPE_FIELDS (t2);
1014 s1 && s2;
1015 s1 = TREE_CHAIN (s1), s2 = TREE_CHAIN (s2))
1016 {
1017 int result;
1018 if (TREE_CODE (s1) != TREE_CODE (s2)
1019 || DECL_NAME (s1) != DECL_NAME (s2))
1020 break;
1021 result = comptypes (TREE_TYPE (s1), TREE_TYPE (s2));
1022 if (result == 0)
1023 break;
1024 if (result == 2)
1025 needs_warning = true;
1026
1027 if (TREE_CODE (s1) == FIELD_DECL
1028 && simple_cst_equal (DECL_FIELD_BIT_OFFSET (s1),
1029 DECL_FIELD_BIT_OFFSET (s2)) != 1)
1030 break;
1031 }
1032 tagged_tu_seen_base = tts.next;
1033 if (s1 && s2)
1034 return 0;
1035 return needs_warning ? 2 : 1;
1036 }
1037
1038 default:
1039 gcc_unreachable ();
1040 }
1041 }
1042
1043 /* Return 1 if two function types F1 and F2 are compatible.
1044 If either type specifies no argument types,
1045 the other must specify a fixed number of self-promoting arg types.
1046 Otherwise, if one type specifies only the number of arguments,
1047 the other must specify that number of self-promoting arg types.
1048 Otherwise, the argument types must match. */
1049
1050 static int
1051 function_types_compatible_p (tree f1, tree f2)
1052 {
1053 tree args1, args2;
1054 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1055 int val = 1;
1056 int val1;
1057 tree ret1, ret2;
1058
1059 ret1 = TREE_TYPE (f1);
1060 ret2 = TREE_TYPE (f2);
1061
1062 /* 'volatile' qualifiers on a function's return type used to mean
1063 the function is noreturn. */
1064 if (TYPE_VOLATILE (ret1) != TYPE_VOLATILE (ret2))
1065 pedwarn ("function return types not compatible due to %<volatile%>");
1066 if (TYPE_VOLATILE (ret1))
1067 ret1 = build_qualified_type (TYPE_MAIN_VARIANT (ret1),
1068 TYPE_QUALS (ret1) & ~TYPE_QUAL_VOLATILE);
1069 if (TYPE_VOLATILE (ret2))
1070 ret2 = build_qualified_type (TYPE_MAIN_VARIANT (ret2),
1071 TYPE_QUALS (ret2) & ~TYPE_QUAL_VOLATILE);
1072 val = comptypes (ret1, ret2);
1073 if (val == 0)
1074 return 0;
1075
1076 args1 = TYPE_ARG_TYPES (f1);
1077 args2 = TYPE_ARG_TYPES (f2);
1078
1079 /* An unspecified parmlist matches any specified parmlist
1080 whose argument types don't need default promotions. */
1081
1082 if (args1 == 0)
1083 {
1084 if (!self_promoting_args_p (args2))
1085 return 0;
1086 /* If one of these types comes from a non-prototype fn definition,
1087 compare that with the other type's arglist.
1088 If they don't match, ask for a warning (but no error). */
1089 if (TYPE_ACTUAL_ARG_TYPES (f1)
1090 && 1 != type_lists_compatible_p (args2, TYPE_ACTUAL_ARG_TYPES (f1)))
1091 val = 2;
1092 return val;
1093 }
1094 if (args2 == 0)
1095 {
1096 if (!self_promoting_args_p (args1))
1097 return 0;
1098 if (TYPE_ACTUAL_ARG_TYPES (f2)
1099 && 1 != type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2)))
1100 val = 2;
1101 return val;
1102 }
1103
1104 /* Both types have argument lists: compare them and propagate results. */
1105 val1 = type_lists_compatible_p (args1, args2);
1106 return val1 != 1 ? val1 : val;
1107 }
1108
1109 /* Check two lists of types for compatibility,
1110 returning 0 for incompatible, 1 for compatible,
1111 or 2 for compatible with warning. */
1112
1113 static int
1114 type_lists_compatible_p (tree args1, tree args2)
1115 {
1116 /* 1 if no need for warning yet, 2 if warning cause has been seen. */
1117 int val = 1;
1118 int newval = 0;
1119
1120 while (1)
1121 {
1122 tree a1, mv1, a2, mv2;
1123 if (args1 == 0 && args2 == 0)
1124 return val;
1125 /* If one list is shorter than the other,
1126 they fail to match. */
1127 if (args1 == 0 || args2 == 0)
1128 return 0;
1129 mv1 = a1 = TREE_VALUE (args1);
1130 mv2 = a2 = TREE_VALUE (args2);
1131 if (mv1 && mv1 != error_mark_node && TREE_CODE (mv1) != ARRAY_TYPE)
1132 mv1 = TYPE_MAIN_VARIANT (mv1);
1133 if (mv2 && mv2 != error_mark_node && TREE_CODE (mv2) != ARRAY_TYPE)
1134 mv2 = TYPE_MAIN_VARIANT (mv2);
1135 /* A null pointer instead of a type
1136 means there is supposed to be an argument
1137 but nothing is specified about what type it has.
1138 So match anything that self-promotes. */
1139 if (a1 == 0)
1140 {
1141 if (c_type_promotes_to (a2) != a2)
1142 return 0;
1143 }
1144 else if (a2 == 0)
1145 {
1146 if (c_type_promotes_to (a1) != a1)
1147 return 0;
1148 }
1149 /* If one of the lists has an error marker, ignore this arg. */
1150 else if (TREE_CODE (a1) == ERROR_MARK
1151 || TREE_CODE (a2) == ERROR_MARK)
1152 ;
1153 else if (!(newval = comptypes (mv1, mv2)))
1154 {
1155 /* Allow wait (union {union wait *u; int *i} *)
1156 and wait (union wait *) to be compatible. */
1157 if (TREE_CODE (a1) == UNION_TYPE
1158 && (TYPE_NAME (a1) == 0
1159 || TYPE_TRANSPARENT_UNION (a1))
1160 && TREE_CODE (TYPE_SIZE (a1)) == INTEGER_CST
1161 && tree_int_cst_equal (TYPE_SIZE (a1),
1162 TYPE_SIZE (a2)))
1163 {
1164 tree memb;
1165 for (memb = TYPE_FIELDS (a1);
1166 memb; memb = TREE_CHAIN (memb))
1167 {
1168 tree mv3 = TREE_TYPE (memb);
1169 if (mv3 && mv3 != error_mark_node
1170 && TREE_CODE (mv3) != ARRAY_TYPE)
1171 mv3 = TYPE_MAIN_VARIANT (mv3);
1172 if (comptypes (mv3, mv2))
1173 break;
1174 }
1175 if (memb == 0)
1176 return 0;
1177 }
1178 else if (TREE_CODE (a2) == UNION_TYPE
1179 && (TYPE_NAME (a2) == 0
1180 || TYPE_TRANSPARENT_UNION (a2))
1181 && TREE_CODE (TYPE_SIZE (a2)) == INTEGER_CST
1182 && tree_int_cst_equal (TYPE_SIZE (a2),
1183 TYPE_SIZE (a1)))
1184 {
1185 tree memb;
1186 for (memb = TYPE_FIELDS (a2);
1187 memb; memb = TREE_CHAIN (memb))
1188 {
1189 tree mv3 = TREE_TYPE (memb);
1190 if (mv3 && mv3 != error_mark_node
1191 && TREE_CODE (mv3) != ARRAY_TYPE)
1192 mv3 = TYPE_MAIN_VARIANT (mv3);
1193 if (comptypes (mv3, mv1))
1194 break;
1195 }
1196 if (memb == 0)
1197 return 0;
1198 }
1199 else
1200 return 0;
1201 }
1202
1203 /* comptypes said ok, but record if it said to warn. */
1204 if (newval > val)
1205 val = newval;
1206
1207 args1 = TREE_CHAIN (args1);
1208 args2 = TREE_CHAIN (args2);
1209 }
1210 }
1211 \f
1212 /* Compute the size to increment a pointer by. */
1213
1214 static tree
1215 c_size_in_bytes (tree type)
1216 {
1217 enum tree_code code = TREE_CODE (type);
1218
1219 if (code == FUNCTION_TYPE || code == VOID_TYPE || code == ERROR_MARK)
1220 return size_one_node;
1221
1222 if (!COMPLETE_OR_VOID_TYPE_P (type))
1223 {
1224 error ("arithmetic on pointer to an incomplete type");
1225 return size_one_node;
1226 }
1227
1228 /* Convert in case a char is more than one unit. */
1229 return size_binop (CEIL_DIV_EXPR, TYPE_SIZE_UNIT (type),
1230 size_int (TYPE_PRECISION (char_type_node)
1231 / BITS_PER_UNIT));
1232 }
1233 \f
1234 /* Return either DECL or its known constant value (if it has one). */
1235
1236 tree
1237 decl_constant_value (tree decl)
1238 {
1239 if (/* Don't change a variable array bound or initial value to a constant
1240 in a place where a variable is invalid. Note that DECL_INITIAL
1241 isn't valid for a PARM_DECL. */
1242 current_function_decl != 0
1243 && TREE_CODE (decl) != PARM_DECL
1244 && !TREE_THIS_VOLATILE (decl)
1245 && TREE_READONLY (decl)
1246 && DECL_INITIAL (decl) != 0
1247 && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK
1248 /* This is invalid if initial value is not constant.
1249 If it has either a function call, a memory reference,
1250 or a variable, then re-evaluating it could give different results. */
1251 && TREE_CONSTANT (DECL_INITIAL (decl))
1252 /* Check for cases where this is sub-optimal, even though valid. */
1253 && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
1254 return DECL_INITIAL (decl);
1255 return decl;
1256 }
1257
1258 /* Return either DECL or its known constant value (if it has one), but
1259 return DECL if pedantic or DECL has mode BLKmode. This is for
1260 bug-compatibility with the old behavior of decl_constant_value
1261 (before GCC 3.0); every use of this function is a bug and it should
1262 be removed before GCC 3.1. It is not appropriate to use pedantic
1263 in a way that affects optimization, and BLKmode is probably not the
1264 right test for avoiding misoptimizations either. */
1265
1266 static tree
1267 decl_constant_value_for_broken_optimization (tree decl)
1268 {
1269 tree ret;
1270
1271 if (pedantic || DECL_MODE (decl) == BLKmode)
1272 return decl;
1273
1274 ret = decl_constant_value (decl);
1275 /* Avoid unwanted tree sharing between the initializer and current
1276 function's body where the tree can be modified e.g. by the
1277 gimplifier. */
1278 if (ret != decl && TREE_STATIC (decl))
1279 ret = unshare_expr (ret);
1280 return ret;
1281 }
1282
1283 /* Convert the array expression EXP to a pointer. */
1284 static tree
1285 array_to_pointer_conversion (tree exp)
1286 {
1287 tree orig_exp = exp;
1288 tree type = TREE_TYPE (exp);
1289 tree adr;
1290 tree restype = TREE_TYPE (type);
1291 tree ptrtype;
1292
1293 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
1294
1295 STRIP_TYPE_NOPS (exp);
1296
1297 if (TREE_NO_WARNING (orig_exp))
1298 TREE_NO_WARNING (exp) = 1;
1299
1300 ptrtype = build_pointer_type (restype);
1301
1302 if (TREE_CODE (exp) == INDIRECT_REF)
1303 return convert (ptrtype, TREE_OPERAND (exp, 0));
1304
1305 if (TREE_CODE (exp) == VAR_DECL)
1306 {
1307 /* We are making an ADDR_EXPR of ptrtype. This is a valid
1308 ADDR_EXPR because it's the best way of representing what
1309 happens in C when we take the address of an array and place
1310 it in a pointer to the element type. */
1311 adr = build1 (ADDR_EXPR, ptrtype, exp);
1312 if (!c_mark_addressable (exp))
1313 return error_mark_node;
1314 TREE_SIDE_EFFECTS (adr) = 0; /* Default would be, same as EXP. */
1315 return adr;
1316 }
1317
1318 /* This way is better for a COMPONENT_REF since it can
1319 simplify the offset for a component. */
1320 adr = build_unary_op (ADDR_EXPR, exp, 1);
1321 return convert (ptrtype, adr);
1322 }
1323
1324 /* Convert the function expression EXP to a pointer. */
1325 static tree
1326 function_to_pointer_conversion (tree exp)
1327 {
1328 tree orig_exp = exp;
1329
1330 gcc_assert (TREE_CODE (TREE_TYPE (exp)) == FUNCTION_TYPE);
1331
1332 STRIP_TYPE_NOPS (exp);
1333
1334 if (TREE_NO_WARNING (orig_exp))
1335 TREE_NO_WARNING (exp) = 1;
1336
1337 return build_unary_op (ADDR_EXPR, exp, 0);
1338 }
1339
1340 /* Perform the default conversion of arrays and functions to pointers.
1341 Return the result of converting EXP. For any other expression, just
1342 return EXP after removing NOPs. */
1343
1344 struct c_expr
1345 default_function_array_conversion (struct c_expr exp)
1346 {
1347 tree orig_exp = exp.value;
1348 tree type = TREE_TYPE (exp.value);
1349 enum tree_code code = TREE_CODE (type);
1350
1351 switch (code)
1352 {
1353 case ARRAY_TYPE:
1354 {
1355 bool not_lvalue = false;
1356 bool lvalue_array_p;
1357
1358 while ((TREE_CODE (exp.value) == NON_LVALUE_EXPR
1359 || TREE_CODE (exp.value) == NOP_EXPR)
1360 && TREE_TYPE (TREE_OPERAND (exp.value, 0)) == type)
1361 {
1362 if (TREE_CODE (exp.value) == NON_LVALUE_EXPR)
1363 not_lvalue = true;
1364 exp.value = TREE_OPERAND (exp.value, 0);
1365 }
1366
1367 if (TREE_NO_WARNING (orig_exp))
1368 TREE_NO_WARNING (exp.value) = 1;
1369
1370 lvalue_array_p = !not_lvalue && lvalue_p (exp.value);
1371 if (!flag_isoc99 && !lvalue_array_p)
1372 {
1373 /* Before C99, non-lvalue arrays do not decay to pointers.
1374 Normally, using such an array would be invalid; but it can
1375 be used correctly inside sizeof or as a statement expression.
1376 Thus, do not give an error here; an error will result later. */
1377 return exp;
1378 }
1379
1380 exp.value = array_to_pointer_conversion (exp.value);
1381 }
1382 break;
1383 case FUNCTION_TYPE:
1384 exp.value = function_to_pointer_conversion (exp.value);
1385 break;
1386 default:
1387 STRIP_TYPE_NOPS (exp.value);
1388 if (TREE_NO_WARNING (orig_exp))
1389 TREE_NO_WARNING (exp.value) = 1;
1390 break;
1391 }
1392
1393 return exp;
1394 }
1395
1396
1397 /* EXP is an expression of integer type. Apply the integer promotions
1398 to it and return the promoted value. */
1399
1400 tree
1401 perform_integral_promotions (tree exp)
1402 {
1403 tree type = TREE_TYPE (exp);
1404 enum tree_code code = TREE_CODE (type);
1405
1406 gcc_assert (INTEGRAL_TYPE_P (type));
1407
1408 /* Normally convert enums to int,
1409 but convert wide enums to something wider. */
1410 if (code == ENUMERAL_TYPE)
1411 {
1412 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
1413 TYPE_PRECISION (integer_type_node)),
1414 ((TYPE_PRECISION (type)
1415 >= TYPE_PRECISION (integer_type_node))
1416 && TYPE_UNSIGNED (type)));
1417
1418 return convert (type, exp);
1419 }
1420
1421 /* ??? This should no longer be needed now bit-fields have their
1422 proper types. */
1423 if (TREE_CODE (exp) == COMPONENT_REF
1424 && DECL_C_BIT_FIELD (TREE_OPERAND (exp, 1))
1425 /* If it's thinner than an int, promote it like a
1426 c_promoting_integer_type_p, otherwise leave it alone. */
1427 && 0 > compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)),
1428 TYPE_PRECISION (integer_type_node)))
1429 return convert (integer_type_node, exp);
1430
1431 if (c_promoting_integer_type_p (type))
1432 {
1433 /* Preserve unsignedness if not really getting any wider. */
1434 if (TYPE_UNSIGNED (type)
1435 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1436 return convert (unsigned_type_node, exp);
1437
1438 return convert (integer_type_node, exp);
1439 }
1440
1441 return exp;
1442 }
1443
1444
1445 /* Perform default promotions for C data used in expressions.
1446 Enumeral types or short or char are converted to int.
1447 In addition, manifest constants symbols are replaced by their values. */
1448
1449 tree
1450 default_conversion (tree exp)
1451 {
1452 tree orig_exp;
1453 tree type = TREE_TYPE (exp);
1454 enum tree_code code = TREE_CODE (type);
1455
1456 /* Functions and arrays have been converted during parsing. */
1457 gcc_assert (code != FUNCTION_TYPE);
1458 if (code == ARRAY_TYPE)
1459 return exp;
1460
1461 /* Constants can be used directly unless they're not loadable. */
1462 if (TREE_CODE (exp) == CONST_DECL)
1463 exp = DECL_INITIAL (exp);
1464
1465 /* Replace a nonvolatile const static variable with its value unless
1466 it is an array, in which case we must be sure that taking the
1467 address of the array produces consistent results. */
1468 else if (optimize && TREE_CODE (exp) == VAR_DECL && code != ARRAY_TYPE)
1469 {
1470 exp = decl_constant_value_for_broken_optimization (exp);
1471 type = TREE_TYPE (exp);
1472 }
1473
1474 /* Strip no-op conversions. */
1475 orig_exp = exp;
1476 STRIP_TYPE_NOPS (exp);
1477
1478 if (TREE_NO_WARNING (orig_exp))
1479 TREE_NO_WARNING (exp) = 1;
1480
1481 if (INTEGRAL_TYPE_P (type))
1482 return perform_integral_promotions (exp);
1483
1484 if (code == VOID_TYPE)
1485 {
1486 error ("void value not ignored as it ought to be");
1487 return error_mark_node;
1488 }
1489 return exp;
1490 }
1491 \f
1492 /* Look up COMPONENT in a structure or union DECL.
1493
1494 If the component name is not found, returns NULL_TREE. Otherwise,
1495 the return value is a TREE_LIST, with each TREE_VALUE a FIELD_DECL
1496 stepping down the chain to the component, which is in the last
1497 TREE_VALUE of the list. Normally the list is of length one, but if
1498 the component is embedded within (nested) anonymous structures or
1499 unions, the list steps down the chain to the component. */
1500
1501 static tree
1502 lookup_field (tree decl, tree component)
1503 {
1504 tree type = TREE_TYPE (decl);
1505 tree field;
1506
1507 /* If TYPE_LANG_SPECIFIC is set, then it is a sorted array of pointers
1508 to the field elements. Use a binary search on this array to quickly
1509 find the element. Otherwise, do a linear search. TYPE_LANG_SPECIFIC
1510 will always be set for structures which have many elements. */
1511
1512 if (TYPE_LANG_SPECIFIC (type) && TYPE_LANG_SPECIFIC (type)->s)
1513 {
1514 int bot, top, half;
1515 tree *field_array = &TYPE_LANG_SPECIFIC (type)->s->elts[0];
1516
1517 field = TYPE_FIELDS (type);
1518 bot = 0;
1519 top = TYPE_LANG_SPECIFIC (type)->s->len;
1520 while (top - bot > 1)
1521 {
1522 half = (top - bot + 1) >> 1;
1523 field = field_array[bot+half];
1524
1525 if (DECL_NAME (field) == NULL_TREE)
1526 {
1527 /* Step through all anon unions in linear fashion. */
1528 while (DECL_NAME (field_array[bot]) == NULL_TREE)
1529 {
1530 field = field_array[bot++];
1531 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1532 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
1533 {
1534 tree anon = lookup_field (field, component);
1535
1536 if (anon)
1537 return tree_cons (NULL_TREE, field, anon);
1538 }
1539 }
1540
1541 /* Entire record is only anon unions. */
1542 if (bot > top)
1543 return NULL_TREE;
1544
1545 /* Restart the binary search, with new lower bound. */
1546 continue;
1547 }
1548
1549 if (DECL_NAME (field) == component)
1550 break;
1551 if (DECL_NAME (field) < component)
1552 bot += half;
1553 else
1554 top = bot + half;
1555 }
1556
1557 if (DECL_NAME (field_array[bot]) == component)
1558 field = field_array[bot];
1559 else if (DECL_NAME (field) != component)
1560 return NULL_TREE;
1561 }
1562 else
1563 {
1564 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1565 {
1566 if (DECL_NAME (field) == NULL_TREE
1567 && (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE
1568 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE))
1569 {
1570 tree anon = lookup_field (field, component);
1571
1572 if (anon)
1573 return tree_cons (NULL_TREE, field, anon);
1574 }
1575
1576 if (DECL_NAME (field) == component)
1577 break;
1578 }
1579
1580 if (field == NULL_TREE)
1581 return NULL_TREE;
1582 }
1583
1584 return tree_cons (NULL_TREE, field, NULL_TREE);
1585 }
1586
1587 /* Make an expression to refer to the COMPONENT field of
1588 structure or union value DATUM. COMPONENT is an IDENTIFIER_NODE. */
1589
1590 tree
1591 build_component_ref (tree datum, tree component)
1592 {
1593 tree type = TREE_TYPE (datum);
1594 enum tree_code code = TREE_CODE (type);
1595 tree field = NULL;
1596 tree ref;
1597
1598 if (!objc_is_public (datum, component))
1599 return error_mark_node;
1600
1601 /* See if there is a field or component with name COMPONENT. */
1602
1603 if (code == RECORD_TYPE || code == UNION_TYPE)
1604 {
1605 if (!COMPLETE_TYPE_P (type))
1606 {
1607 c_incomplete_type_error (NULL_TREE, type);
1608 return error_mark_node;
1609 }
1610
1611 field = lookup_field (datum, component);
1612
1613 if (!field)
1614 {
1615 error ("%qT has no member named %qE", type, component);
1616 return error_mark_node;
1617 }
1618
1619 /* Chain the COMPONENT_REFs if necessary down to the FIELD.
1620 This might be better solved in future the way the C++ front
1621 end does it - by giving the anonymous entities each a
1622 separate name and type, and then have build_component_ref
1623 recursively call itself. We can't do that here. */
1624 do
1625 {
1626 tree subdatum = TREE_VALUE (field);
1627
1628 if (TREE_TYPE (subdatum) == error_mark_node)
1629 return error_mark_node;
1630
1631 ref = build3 (COMPONENT_REF, TREE_TYPE (subdatum), datum, subdatum,
1632 NULL_TREE);
1633 if (TREE_READONLY (datum) || TREE_READONLY (subdatum))
1634 TREE_READONLY (ref) = 1;
1635 if (TREE_THIS_VOLATILE (datum) || TREE_THIS_VOLATILE (subdatum))
1636 TREE_THIS_VOLATILE (ref) = 1;
1637
1638 if (TREE_DEPRECATED (subdatum))
1639 warn_deprecated_use (subdatum);
1640
1641 datum = ref;
1642
1643 field = TREE_CHAIN (field);
1644 }
1645 while (field);
1646
1647 return ref;
1648 }
1649 else if (code != ERROR_MARK)
1650 error ("request for member %qE in something not a structure or union",
1651 component);
1652
1653 return error_mark_node;
1654 }
1655 \f
1656 /* Given an expression PTR for a pointer, return an expression
1657 for the value pointed to.
1658 ERRORSTRING is the name of the operator to appear in error messages. */
1659
1660 tree
1661 build_indirect_ref (tree ptr, const char *errorstring)
1662 {
1663 tree pointer = default_conversion (ptr);
1664 tree type = TREE_TYPE (pointer);
1665
1666 if (TREE_CODE (type) == POINTER_TYPE)
1667 {
1668 if (TREE_CODE (pointer) == ADDR_EXPR
1669 && (TREE_TYPE (TREE_OPERAND (pointer, 0))
1670 == TREE_TYPE (type)))
1671 return TREE_OPERAND (pointer, 0);
1672 else
1673 {
1674 tree t = TREE_TYPE (type);
1675 tree ref;
1676
1677 ref = build1 (INDIRECT_REF, t, pointer);
1678
1679 if (!COMPLETE_OR_VOID_TYPE_P (t) && TREE_CODE (t) != ARRAY_TYPE)
1680 {
1681 error ("dereferencing pointer to incomplete type");
1682 return error_mark_node;
1683 }
1684 if (VOID_TYPE_P (t) && skip_evaluation == 0)
1685 warning (0, "dereferencing %<void *%> pointer");
1686
1687 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
1688 so that we get the proper error message if the result is used
1689 to assign to. Also, &* is supposed to be a no-op.
1690 And ANSI C seems to specify that the type of the result
1691 should be the const type. */
1692 /* A de-reference of a pointer to const is not a const. It is valid
1693 to change it via some other pointer. */
1694 TREE_READONLY (ref) = TYPE_READONLY (t);
1695 TREE_SIDE_EFFECTS (ref)
1696 = TYPE_VOLATILE (t) || TREE_SIDE_EFFECTS (pointer);
1697 TREE_THIS_VOLATILE (ref) = TYPE_VOLATILE (t);
1698 return ref;
1699 }
1700 }
1701 else if (TREE_CODE (pointer) != ERROR_MARK)
1702 error ("invalid type argument of %qs", errorstring);
1703 return error_mark_node;
1704 }
1705
1706 /* This handles expressions of the form "a[i]", which denotes
1707 an array reference.
1708
1709 This is logically equivalent in C to *(a+i), but we may do it differently.
1710 If A is a variable or a member, we generate a primitive ARRAY_REF.
1711 This avoids forcing the array out of registers, and can work on
1712 arrays that are not lvalues (for example, members of structures returned
1713 by functions). */
1714
1715 tree
1716 build_array_ref (tree array, tree index)
1717 {
1718 bool swapped = false;
1719 if (TREE_TYPE (array) == error_mark_node
1720 || TREE_TYPE (index) == error_mark_node)
1721 return error_mark_node;
1722
1723 if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
1724 && TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE)
1725 {
1726 tree temp;
1727 if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
1728 && TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
1729 {
1730 error ("subscripted value is neither array nor pointer");
1731 return error_mark_node;
1732 }
1733 temp = array;
1734 array = index;
1735 index = temp;
1736 swapped = true;
1737 }
1738
1739 if (!INTEGRAL_TYPE_P (TREE_TYPE (index)))
1740 {
1741 error ("array subscript is not an integer");
1742 return error_mark_node;
1743 }
1744
1745 if (TREE_CODE (TREE_TYPE (TREE_TYPE (array))) == FUNCTION_TYPE)
1746 {
1747 error ("subscripted value is pointer to function");
1748 return error_mark_node;
1749 }
1750
1751 /* Subscripting with type char is likely to lose on a machine where
1752 chars are signed. So warn on any machine, but optionally. Don't
1753 warn for unsigned char since that type is safe. Don't warn for
1754 signed char because anyone who uses that must have done so
1755 deliberately. ??? Existing practice has also been to warn only
1756 when the char index is syntactically the index, not for
1757 char[array]. */
1758 if (!swapped
1759 && TYPE_MAIN_VARIANT (TREE_TYPE (index)) == char_type_node)
1760 warning (OPT_Wchar_subscripts, "array subscript has type %<char%>");
1761
1762 /* Apply default promotions *after* noticing character types. */
1763 index = default_conversion (index);
1764
1765 gcc_assert (TREE_CODE (TREE_TYPE (index)) == INTEGER_TYPE);
1766
1767 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE)
1768 {
1769 tree rval, type;
1770
1771 /* An array that is indexed by a non-constant
1772 cannot be stored in a register; we must be able to do
1773 address arithmetic on its address.
1774 Likewise an array of elements of variable size. */
1775 if (TREE_CODE (index) != INTEGER_CST
1776 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array)))
1777 && TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) != INTEGER_CST))
1778 {
1779 if (!c_mark_addressable (array))
1780 return error_mark_node;
1781 }
1782 /* An array that is indexed by a constant value which is not within
1783 the array bounds cannot be stored in a register either; because we
1784 would get a crash in store_bit_field/extract_bit_field when trying
1785 to access a non-existent part of the register. */
1786 if (TREE_CODE (index) == INTEGER_CST
1787 && TYPE_DOMAIN (TREE_TYPE (array))
1788 && !int_fits_type_p (index, TYPE_DOMAIN (TREE_TYPE (array))))
1789 {
1790 if (!c_mark_addressable (array))
1791 return error_mark_node;
1792 }
1793
1794 if (pedantic)
1795 {
1796 tree foo = array;
1797 while (TREE_CODE (foo) == COMPONENT_REF)
1798 foo = TREE_OPERAND (foo, 0);
1799 if (TREE_CODE (foo) == VAR_DECL && C_DECL_REGISTER (foo))
1800 pedwarn ("ISO C forbids subscripting %<register%> array");
1801 else if (!flag_isoc99 && !lvalue_p (foo))
1802 pedwarn ("ISO C90 forbids subscripting non-lvalue array");
1803 }
1804
1805 type = TREE_TYPE (TREE_TYPE (array));
1806 if (TREE_CODE (type) != ARRAY_TYPE)
1807 type = TYPE_MAIN_VARIANT (type);
1808 rval = build4 (ARRAY_REF, type, array, index, NULL_TREE, NULL_TREE);
1809 /* Array ref is const/volatile if the array elements are
1810 or if the array is. */
1811 TREE_READONLY (rval)
1812 |= (TYPE_READONLY (TREE_TYPE (TREE_TYPE (array)))
1813 | TREE_READONLY (array));
1814 TREE_SIDE_EFFECTS (rval)
1815 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1816 | TREE_SIDE_EFFECTS (array));
1817 TREE_THIS_VOLATILE (rval)
1818 |= (TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (array)))
1819 /* This was added by rms on 16 Nov 91.
1820 It fixes vol struct foo *a; a->elts[1]
1821 in an inline function.
1822 Hope it doesn't break something else. */
1823 | TREE_THIS_VOLATILE (array));
1824 return require_complete_type (fold (rval));
1825 }
1826 else
1827 {
1828 tree ar = default_conversion (array);
1829
1830 if (ar == error_mark_node)
1831 return ar;
1832
1833 gcc_assert (TREE_CODE (TREE_TYPE (ar)) == POINTER_TYPE);
1834 gcc_assert (TREE_CODE (TREE_TYPE (TREE_TYPE (ar))) != FUNCTION_TYPE);
1835
1836 return build_indirect_ref (build_binary_op (PLUS_EXPR, ar, index, 0),
1837 "array indexing");
1838 }
1839 }
1840 \f
1841 /* Build an external reference to identifier ID. FUN indicates
1842 whether this will be used for a function call. LOC is the source
1843 location of the identifier. */
1844 tree
1845 build_external_ref (tree id, int fun, location_t loc)
1846 {
1847 tree ref;
1848 tree decl = lookup_name (id);
1849
1850 /* In Objective-C, an instance variable (ivar) may be preferred to
1851 whatever lookup_name() found. */
1852 decl = objc_lookup_ivar (decl, id);
1853
1854 if (decl && decl != error_mark_node)
1855 ref = decl;
1856 else if (fun)
1857 /* Implicit function declaration. */
1858 ref = implicitly_declare (id);
1859 else if (decl == error_mark_node)
1860 /* Don't complain about something that's already been
1861 complained about. */
1862 return error_mark_node;
1863 else
1864 {
1865 undeclared_variable (id, loc);
1866 return error_mark_node;
1867 }
1868
1869 if (TREE_TYPE (ref) == error_mark_node)
1870 return error_mark_node;
1871
1872 if (TREE_DEPRECATED (ref))
1873 warn_deprecated_use (ref);
1874
1875 if (!skip_evaluation)
1876 assemble_external (ref);
1877 TREE_USED (ref) = 1;
1878
1879 if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
1880 {
1881 if (!in_sizeof && !in_typeof)
1882 C_DECL_USED (ref) = 1;
1883 else if (DECL_INITIAL (ref) == 0
1884 && DECL_EXTERNAL (ref)
1885 && !TREE_PUBLIC (ref))
1886 record_maybe_used_decl (ref);
1887 }
1888
1889 if (TREE_CODE (ref) == CONST_DECL)
1890 {
1891 ref = DECL_INITIAL (ref);
1892 TREE_CONSTANT (ref) = 1;
1893 TREE_INVARIANT (ref) = 1;
1894 }
1895 else if (current_function_decl != 0
1896 && !DECL_FILE_SCOPE_P (current_function_decl)
1897 && (TREE_CODE (ref) == VAR_DECL
1898 || TREE_CODE (ref) == PARM_DECL
1899 || TREE_CODE (ref) == FUNCTION_DECL))
1900 {
1901 tree context = decl_function_context (ref);
1902
1903 if (context != 0 && context != current_function_decl)
1904 DECL_NONLOCAL (ref) = 1;
1905 }
1906
1907 return ref;
1908 }
1909
1910 /* Record details of decls possibly used inside sizeof or typeof. */
1911 struct maybe_used_decl
1912 {
1913 /* The decl. */
1914 tree decl;
1915 /* The level seen at (in_sizeof + in_typeof). */
1916 int level;
1917 /* The next one at this level or above, or NULL. */
1918 struct maybe_used_decl *next;
1919 };
1920
1921 static struct maybe_used_decl *maybe_used_decls;
1922
1923 /* Record that DECL, an undefined static function reference seen
1924 inside sizeof or typeof, might be used if the operand of sizeof is
1925 a VLA type or the operand of typeof is a variably modified
1926 type. */
1927
1928 static void
1929 record_maybe_used_decl (tree decl)
1930 {
1931 struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
1932 t->decl = decl;
1933 t->level = in_sizeof + in_typeof;
1934 t->next = maybe_used_decls;
1935 maybe_used_decls = t;
1936 }
1937
1938 /* Pop the stack of decls possibly used inside sizeof or typeof. If
1939 USED is false, just discard them. If it is true, mark them used
1940 (if no longer inside sizeof or typeof) or move them to the next
1941 level up (if still inside sizeof or typeof). */
1942
1943 void
1944 pop_maybe_used (bool used)
1945 {
1946 struct maybe_used_decl *p = maybe_used_decls;
1947 int cur_level = in_sizeof + in_typeof;
1948 while (p && p->level > cur_level)
1949 {
1950 if (used)
1951 {
1952 if (cur_level == 0)
1953 C_DECL_USED (p->decl) = 1;
1954 else
1955 p->level = cur_level;
1956 }
1957 p = p->next;
1958 }
1959 if (!used || cur_level == 0)
1960 maybe_used_decls = p;
1961 }
1962
1963 /* Return the result of sizeof applied to EXPR. */
1964
1965 struct c_expr
1966 c_expr_sizeof_expr (struct c_expr expr)
1967 {
1968 struct c_expr ret;
1969 if (expr.value == error_mark_node)
1970 {
1971 ret.value = error_mark_node;
1972 ret.original_code = ERROR_MARK;
1973 pop_maybe_used (false);
1974 }
1975 else
1976 {
1977 ret.value = c_sizeof (TREE_TYPE (expr.value));
1978 ret.original_code = ERROR_MARK;
1979 pop_maybe_used (C_TYPE_VARIABLE_SIZE (TREE_TYPE (expr.value)));
1980 }
1981 return ret;
1982 }
1983
1984 /* Return the result of sizeof applied to T, a structure for the type
1985 name passed to sizeof (rather than the type itself). */
1986
1987 struct c_expr
1988 c_expr_sizeof_type (struct c_type_name *t)
1989 {
1990 tree type;
1991 struct c_expr ret;
1992 type = groktypename (t);
1993 ret.value = c_sizeof (type);
1994 ret.original_code = ERROR_MARK;
1995 pop_maybe_used (C_TYPE_VARIABLE_SIZE (type));
1996 return ret;
1997 }
1998
1999 /* Build a function call to function FUNCTION with parameters PARAMS.
2000 PARAMS is a list--a chain of TREE_LIST nodes--in which the
2001 TREE_VALUE of each node is a parameter-expression.
2002 FUNCTION's data type may be a function type or a pointer-to-function. */
2003
2004 tree
2005 build_function_call (tree function, tree params)
2006 {
2007 tree fntype, fundecl = 0;
2008 tree coerced_params;
2009 tree name = NULL_TREE, result;
2010 tree tem;
2011
2012 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
2013 STRIP_TYPE_NOPS (function);
2014
2015 /* Convert anything with function type to a pointer-to-function. */
2016 if (TREE_CODE (function) == FUNCTION_DECL)
2017 {
2018 /* Implement type-directed function overloading for builtins.
2019 resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
2020 handle all the type checking. The result is a complete expression
2021 that implements this function call. */
2022 tem = resolve_overloaded_builtin (function, params);
2023 if (tem)
2024 return tem;
2025
2026 name = DECL_NAME (function);
2027 fundecl = function;
2028 }
2029 if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE)
2030 function = function_to_pointer_conversion (function);
2031
2032 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
2033 expressions, like those used for ObjC messenger dispatches. */
2034 function = objc_rewrite_function_call (function, params);
2035
2036 fntype = TREE_TYPE (function);
2037
2038 if (TREE_CODE (fntype) == ERROR_MARK)
2039 return error_mark_node;
2040
2041 if (!(TREE_CODE (fntype) == POINTER_TYPE
2042 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE))
2043 {
2044 error ("called object %qE is not a function", function);
2045 return error_mark_node;
2046 }
2047
2048 if (fundecl && TREE_THIS_VOLATILE (fundecl))
2049 current_function_returns_abnormally = 1;
2050
2051 /* fntype now gets the type of function pointed to. */
2052 fntype = TREE_TYPE (fntype);
2053
2054 /* Check that the function is called through a compatible prototype.
2055 If it is not, replace the call by a trap, wrapped up in a compound
2056 expression if necessary. This has the nice side-effect to prevent
2057 the tree-inliner from generating invalid assignment trees which may
2058 blow up in the RTL expander later. */
2059 if (TREE_CODE (function) == NOP_EXPR
2060 && TREE_CODE (tem = TREE_OPERAND (function, 0)) == ADDR_EXPR
2061 && TREE_CODE (tem = TREE_OPERAND (tem, 0)) == FUNCTION_DECL
2062 && !comptypes (fntype, TREE_TYPE (tem)))
2063 {
2064 tree return_type = TREE_TYPE (fntype);
2065 tree trap = build_function_call (built_in_decls[BUILT_IN_TRAP],
2066 NULL_TREE);
2067
2068 /* This situation leads to run-time undefined behavior. We can't,
2069 therefore, simply error unless we can prove that all possible
2070 executions of the program must execute the code. */
2071 warning (0, "function called through a non-compatible type");
2072
2073 /* We can, however, treat "undefined" any way we please.
2074 Call abort to encourage the user to fix the program. */
2075 inform ("if this code is reached, the program will abort");
2076
2077 if (VOID_TYPE_P (return_type))
2078 return trap;
2079 else
2080 {
2081 tree rhs;
2082
2083 if (AGGREGATE_TYPE_P (return_type))
2084 rhs = build_compound_literal (return_type,
2085 build_constructor (return_type, 0));
2086 else
2087 rhs = fold_build1 (NOP_EXPR, return_type, integer_zero_node);
2088
2089 return build2 (COMPOUND_EXPR, return_type, trap, rhs);
2090 }
2091 }
2092
2093 /* Convert the parameters to the types declared in the
2094 function prototype, or apply default promotions. */
2095
2096 coerced_params
2097 = convert_arguments (TYPE_ARG_TYPES (fntype), params, function, fundecl);
2098
2099 if (coerced_params == error_mark_node)
2100 return error_mark_node;
2101
2102 /* Check that the arguments to the function are valid. */
2103
2104 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params,
2105 TYPE_ARG_TYPES (fntype));
2106
2107 result = build3 (CALL_EXPR, TREE_TYPE (fntype),
2108 function, coerced_params, NULL_TREE);
2109 TREE_SIDE_EFFECTS (result) = 1;
2110
2111 if (require_constant_value)
2112 {
2113 result = fold_initializer (result);
2114
2115 if (TREE_CONSTANT (result)
2116 && (name == NULL_TREE
2117 || strncmp (IDENTIFIER_POINTER (name), "__builtin_", 10) != 0))
2118 pedwarn_init ("initializer element is not constant");
2119 }
2120 else
2121 result = fold (result);
2122
2123 if (VOID_TYPE_P (TREE_TYPE (result)))
2124 return result;
2125 return require_complete_type (result);
2126 }
2127 \f
2128 /* Convert the argument expressions in the list VALUES
2129 to the types in the list TYPELIST. The result is a list of converted
2130 argument expressions, unless there are too few arguments in which
2131 case it is error_mark_node.
2132
2133 If TYPELIST is exhausted, or when an element has NULL as its type,
2134 perform the default conversions.
2135
2136 PARMLIST is the chain of parm decls for the function being called.
2137 It may be 0, if that info is not available.
2138 It is used only for generating error messages.
2139
2140 FUNCTION is a tree for the called function. It is used only for
2141 error messages, where it is formatted with %qE.
2142
2143 This is also where warnings about wrong number of args are generated.
2144
2145 Both VALUES and the returned value are chains of TREE_LIST nodes
2146 with the elements of the list in the TREE_VALUE slots of those nodes. */
2147
2148 static tree
2149 convert_arguments (tree typelist, tree values, tree function, tree fundecl)
2150 {
2151 tree typetail, valtail;
2152 tree result = NULL;
2153 int parmnum;
2154 tree selector;
2155
2156 /* Change pointer to function to the function itself for
2157 diagnostics. */
2158 if (TREE_CODE (function) == ADDR_EXPR
2159 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
2160 function = TREE_OPERAND (function, 0);
2161
2162 /* Handle an ObjC selector specially for diagnostics. */
2163 selector = objc_message_selector ();
2164
2165 /* Scan the given expressions and types, producing individual
2166 converted arguments and pushing them on RESULT in reverse order. */
2167
2168 for (valtail = values, typetail = typelist, parmnum = 0;
2169 valtail;
2170 valtail = TREE_CHAIN (valtail), parmnum++)
2171 {
2172 tree type = typetail ? TREE_VALUE (typetail) : 0;
2173 tree val = TREE_VALUE (valtail);
2174 tree rname = function;
2175 int argnum = parmnum + 1;
2176 const char *invalid_func_diag;
2177
2178 if (type == void_type_node)
2179 {
2180 error ("too many arguments to function %qE", function);
2181 break;
2182 }
2183
2184 if (selector && argnum > 2)
2185 {
2186 rname = selector;
2187 argnum -= 2;
2188 }
2189
2190 STRIP_TYPE_NOPS (val);
2191
2192 val = require_complete_type (val);
2193
2194 if (type != 0)
2195 {
2196 /* Formal parm type is specified by a function prototype. */
2197 tree parmval;
2198
2199 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
2200 {
2201 error ("type of formal parameter %d is incomplete", parmnum + 1);
2202 parmval = val;
2203 }
2204 else
2205 {
2206 /* Optionally warn about conversions that
2207 differ from the default conversions. */
2208 if (warn_conversion || warn_traditional)
2209 {
2210 unsigned int formal_prec = TYPE_PRECISION (type);
2211
2212 if (INTEGRAL_TYPE_P (type)
2213 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2214 warning (0, "passing argument %d of %qE as integer "
2215 "rather than floating due to prototype",
2216 argnum, rname);
2217 if (INTEGRAL_TYPE_P (type)
2218 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2219 warning (0, "passing argument %d of %qE as integer "
2220 "rather than complex due to prototype",
2221 argnum, rname);
2222 else if (TREE_CODE (type) == COMPLEX_TYPE
2223 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2224 warning (0, "passing argument %d of %qE as complex "
2225 "rather than floating due to prototype",
2226 argnum, rname);
2227 else if (TREE_CODE (type) == REAL_TYPE
2228 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2229 warning (0, "passing argument %d of %qE as floating "
2230 "rather than integer due to prototype",
2231 argnum, rname);
2232 else if (TREE_CODE (type) == COMPLEX_TYPE
2233 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2234 warning (0, "passing argument %d of %qE as complex "
2235 "rather than integer due to prototype",
2236 argnum, rname);
2237 else if (TREE_CODE (type) == REAL_TYPE
2238 && TREE_CODE (TREE_TYPE (val)) == COMPLEX_TYPE)
2239 warning (0, "passing argument %d of %qE as floating "
2240 "rather than complex due to prototype",
2241 argnum, rname);
2242 /* ??? At some point, messages should be written about
2243 conversions between complex types, but that's too messy
2244 to do now. */
2245 else if (TREE_CODE (type) == REAL_TYPE
2246 && TREE_CODE (TREE_TYPE (val)) == REAL_TYPE)
2247 {
2248 /* Warn if any argument is passed as `float',
2249 since without a prototype it would be `double'. */
2250 if (formal_prec == TYPE_PRECISION (float_type_node))
2251 warning (0, "passing argument %d of %qE as %<float%> "
2252 "rather than %<double%> due to prototype",
2253 argnum, rname);
2254 }
2255 /* Detect integer changing in width or signedness.
2256 These warnings are only activated with
2257 -Wconversion, not with -Wtraditional. */
2258 else if (warn_conversion && INTEGRAL_TYPE_P (type)
2259 && INTEGRAL_TYPE_P (TREE_TYPE (val)))
2260 {
2261 tree would_have_been = default_conversion (val);
2262 tree type1 = TREE_TYPE (would_have_been);
2263
2264 if (TREE_CODE (type) == ENUMERAL_TYPE
2265 && (TYPE_MAIN_VARIANT (type)
2266 == TYPE_MAIN_VARIANT (TREE_TYPE (val))))
2267 /* No warning if function asks for enum
2268 and the actual arg is that enum type. */
2269 ;
2270 else if (formal_prec != TYPE_PRECISION (type1))
2271 warning (OPT_Wconversion, "passing argument %d of %qE "
2272 "with different width due to prototype",
2273 argnum, rname);
2274 else if (TYPE_UNSIGNED (type) == TYPE_UNSIGNED (type1))
2275 ;
2276 /* Don't complain if the formal parameter type
2277 is an enum, because we can't tell now whether
2278 the value was an enum--even the same enum. */
2279 else if (TREE_CODE (type) == ENUMERAL_TYPE)
2280 ;
2281 else if (TREE_CODE (val) == INTEGER_CST
2282 && int_fits_type_p (val, type))
2283 /* Change in signedness doesn't matter
2284 if a constant value is unaffected. */
2285 ;
2286 /* If the value is extended from a narrower
2287 unsigned type, it doesn't matter whether we
2288 pass it as signed or unsigned; the value
2289 certainly is the same either way. */
2290 else if (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (type)
2291 && TYPE_UNSIGNED (TREE_TYPE (val)))
2292 ;
2293 else if (TYPE_UNSIGNED (type))
2294 warning (OPT_Wconversion, "passing argument %d of %qE "
2295 "as unsigned due to prototype",
2296 argnum, rname);
2297 else
2298 warning (OPT_Wconversion, "passing argument %d of %qE "
2299 "as signed due to prototype", argnum, rname);
2300 }
2301 }
2302
2303 parmval = convert_for_assignment (type, val, ic_argpass,
2304 fundecl, function,
2305 parmnum + 1);
2306
2307 if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0)
2308 && INTEGRAL_TYPE_P (type)
2309 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
2310 parmval = default_conversion (parmval);
2311 }
2312 result = tree_cons (NULL_TREE, parmval, result);
2313 }
2314 else if (TREE_CODE (TREE_TYPE (val)) == REAL_TYPE
2315 && (TYPE_PRECISION (TREE_TYPE (val))
2316 < TYPE_PRECISION (double_type_node)))
2317 /* Convert `float' to `double'. */
2318 result = tree_cons (NULL_TREE, convert (double_type_node, val), result);
2319 else if ((invalid_func_diag =
2320 targetm.calls.invalid_arg_for_unprototyped_fn (typelist, fundecl, val)))
2321 {
2322 error (invalid_func_diag);
2323 return error_mark_node;
2324 }
2325 else
2326 /* Convert `short' and `char' to full-size `int'. */
2327 result = tree_cons (NULL_TREE, default_conversion (val), result);
2328
2329 if (typetail)
2330 typetail = TREE_CHAIN (typetail);
2331 }
2332
2333 if (typetail != 0 && TREE_VALUE (typetail) != void_type_node)
2334 {
2335 error ("too few arguments to function %qE", function);
2336 return error_mark_node;
2337 }
2338
2339 return nreverse (result);
2340 }
2341 \f
2342 /* This is the entry point used by the parser to build unary operators
2343 in the input. CODE, a tree_code, specifies the unary operator, and
2344 ARG is the operand. For unary plus, the C parser currently uses
2345 CONVERT_EXPR for code. */
2346
2347 struct c_expr
2348 parser_build_unary_op (enum tree_code code, struct c_expr arg)
2349 {
2350 struct c_expr result;
2351
2352 result.original_code = ERROR_MARK;
2353 result.value = build_unary_op (code, arg.value, 0);
2354 overflow_warning (result.value);
2355 return result;
2356 }
2357
2358 /* This is the entry point used by the parser to build binary operators
2359 in the input. CODE, a tree_code, specifies the binary operator, and
2360 ARG1 and ARG2 are the operands. In addition to constructing the
2361 expression, we check for operands that were written with other binary
2362 operators in a way that is likely to confuse the user. */
2363
2364 struct c_expr
2365 parser_build_binary_op (enum tree_code code, struct c_expr arg1,
2366 struct c_expr arg2)
2367 {
2368 struct c_expr result;
2369
2370 enum tree_code code1 = arg1.original_code;
2371 enum tree_code code2 = arg2.original_code;
2372
2373 result.value = build_binary_op (code, arg1.value, arg2.value, 1);
2374 result.original_code = code;
2375
2376 if (TREE_CODE (result.value) == ERROR_MARK)
2377 return result;
2378
2379 /* Check for cases such as x+y<<z which users are likely
2380 to misinterpret. */
2381 if (warn_parentheses)
2382 {
2383 if (code == LSHIFT_EXPR || code == RSHIFT_EXPR)
2384 {
2385 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2386 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2387 warning (OPT_Wparentheses,
2388 "suggest parentheses around + or - inside shift");
2389 }
2390
2391 if (code == TRUTH_ORIF_EXPR)
2392 {
2393 if (code1 == TRUTH_ANDIF_EXPR
2394 || code2 == TRUTH_ANDIF_EXPR)
2395 warning (OPT_Wparentheses,
2396 "suggest parentheses around && within ||");
2397 }
2398
2399 if (code == BIT_IOR_EXPR)
2400 {
2401 if (code1 == BIT_AND_EXPR || code1 == BIT_XOR_EXPR
2402 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2403 || code2 == BIT_AND_EXPR || code2 == BIT_XOR_EXPR
2404 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2405 warning (OPT_Wparentheses,
2406 "suggest parentheses around arithmetic in operand of |");
2407 /* Check cases like x|y==z */
2408 if (TREE_CODE_CLASS (code1) == tcc_comparison
2409 || TREE_CODE_CLASS (code2) == tcc_comparison)
2410 warning (OPT_Wparentheses,
2411 "suggest parentheses around comparison in operand of |");
2412 }
2413
2414 if (code == BIT_XOR_EXPR)
2415 {
2416 if (code1 == BIT_AND_EXPR
2417 || code1 == PLUS_EXPR || code1 == MINUS_EXPR
2418 || code2 == BIT_AND_EXPR
2419 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2420 warning (OPT_Wparentheses,
2421 "suggest parentheses around arithmetic in operand of ^");
2422 /* Check cases like x^y==z */
2423 if (TREE_CODE_CLASS (code1) == tcc_comparison
2424 || TREE_CODE_CLASS (code2) == tcc_comparison)
2425 warning (OPT_Wparentheses,
2426 "suggest parentheses around comparison in operand of ^");
2427 }
2428
2429 if (code == BIT_AND_EXPR)
2430 {
2431 if (code1 == PLUS_EXPR || code1 == MINUS_EXPR
2432 || code2 == PLUS_EXPR || code2 == MINUS_EXPR)
2433 warning (OPT_Wparentheses,
2434 "suggest parentheses around + or - in operand of &");
2435 /* Check cases like x&y==z */
2436 if (TREE_CODE_CLASS (code1) == tcc_comparison
2437 || TREE_CODE_CLASS (code2) == tcc_comparison)
2438 warning (OPT_Wparentheses,
2439 "suggest parentheses around comparison in operand of &");
2440 }
2441 /* Similarly, check for cases like 1<=i<=10 that are probably errors. */
2442 if (TREE_CODE_CLASS (code) == tcc_comparison
2443 && (TREE_CODE_CLASS (code1) == tcc_comparison
2444 || TREE_CODE_CLASS (code2) == tcc_comparison))
2445 warning (OPT_Wparentheses, "comparisons like X<=Y<=Z do not "
2446 "have their mathematical meaning");
2447
2448 }
2449
2450 unsigned_conversion_warning (result.value, arg1.value);
2451 unsigned_conversion_warning (result.value, arg2.value);
2452 overflow_warning (result.value);
2453
2454 return result;
2455 }
2456 \f
2457 /* Return a tree for the difference of pointers OP0 and OP1.
2458 The resulting tree has type int. */
2459
2460 static tree
2461 pointer_diff (tree op0, tree op1)
2462 {
2463 tree restype = ptrdiff_type_node;
2464
2465 tree target_type = TREE_TYPE (TREE_TYPE (op0));
2466 tree con0, con1, lit0, lit1;
2467 tree orig_op1 = op1;
2468
2469 if (pedantic || warn_pointer_arith)
2470 {
2471 if (TREE_CODE (target_type) == VOID_TYPE)
2472 pedwarn ("pointer of type %<void *%> used in subtraction");
2473 if (TREE_CODE (target_type) == FUNCTION_TYPE)
2474 pedwarn ("pointer to a function used in subtraction");
2475 }
2476
2477 /* If the conversion to ptrdiff_type does anything like widening or
2478 converting a partial to an integral mode, we get a convert_expression
2479 that is in the way to do any simplifications.
2480 (fold-const.c doesn't know that the extra bits won't be needed.
2481 split_tree uses STRIP_SIGN_NOPS, which leaves conversions to a
2482 different mode in place.)
2483 So first try to find a common term here 'by hand'; we want to cover
2484 at least the cases that occur in legal static initializers. */
2485 con0 = TREE_CODE (op0) == NOP_EXPR ? TREE_OPERAND (op0, 0) : op0;
2486 con1 = TREE_CODE (op1) == NOP_EXPR ? TREE_OPERAND (op1, 0) : op1;
2487
2488 if (TREE_CODE (con0) == PLUS_EXPR)
2489 {
2490 lit0 = TREE_OPERAND (con0, 1);
2491 con0 = TREE_OPERAND (con0, 0);
2492 }
2493 else
2494 lit0 = integer_zero_node;
2495
2496 if (TREE_CODE (con1) == PLUS_EXPR)
2497 {
2498 lit1 = TREE_OPERAND (con1, 1);
2499 con1 = TREE_OPERAND (con1, 0);
2500 }
2501 else
2502 lit1 = integer_zero_node;
2503
2504 if (operand_equal_p (con0, con1, 0))
2505 {
2506 op0 = lit0;
2507 op1 = lit1;
2508 }
2509
2510
2511 /* First do the subtraction as integers;
2512 then drop through to build the divide operator.
2513 Do not do default conversions on the minus operator
2514 in case restype is a short type. */
2515
2516 op0 = build_binary_op (MINUS_EXPR, convert (restype, op0),
2517 convert (restype, op1), 0);
2518 /* This generates an error if op1 is pointer to incomplete type. */
2519 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (orig_op1))))
2520 error ("arithmetic on pointer to an incomplete type");
2521
2522 /* This generates an error if op0 is pointer to incomplete type. */
2523 op1 = c_size_in_bytes (target_type);
2524
2525 /* Divide by the size, in easiest possible way. */
2526 return fold_build2 (EXACT_DIV_EXPR, restype, op0, convert (restype, op1));
2527 }
2528 \f
2529 /* Construct and perhaps optimize a tree representation
2530 for a unary operation. CODE, a tree_code, specifies the operation
2531 and XARG is the operand.
2532 For any CODE other than ADDR_EXPR, FLAG nonzero suppresses
2533 the default promotions (such as from short to int).
2534 For ADDR_EXPR, the default promotions are not applied; FLAG nonzero
2535 allows non-lvalues; this is only used to handle conversion of non-lvalue
2536 arrays to pointers in C99. */
2537
2538 tree
2539 build_unary_op (enum tree_code code, tree xarg, int flag)
2540 {
2541 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
2542 tree arg = xarg;
2543 tree argtype = 0;
2544 enum tree_code typecode = TREE_CODE (TREE_TYPE (arg));
2545 tree val;
2546 int noconvert = flag;
2547 const char *invalid_op_diag;
2548
2549 if (typecode == ERROR_MARK)
2550 return error_mark_node;
2551 if (typecode == ENUMERAL_TYPE || typecode == BOOLEAN_TYPE)
2552 typecode = INTEGER_TYPE;
2553
2554 if ((invalid_op_diag
2555 = targetm.invalid_unary_op (code, TREE_TYPE (xarg))))
2556 {
2557 error (invalid_op_diag);
2558 return error_mark_node;
2559 }
2560
2561 switch (code)
2562 {
2563 case CONVERT_EXPR:
2564 /* This is used for unary plus, because a CONVERT_EXPR
2565 is enough to prevent anybody from looking inside for
2566 associativity, but won't generate any code. */
2567 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2568 || typecode == COMPLEX_TYPE
2569 || typecode == VECTOR_TYPE))
2570 {
2571 error ("wrong type argument to unary plus");
2572 return error_mark_node;
2573 }
2574 else if (!noconvert)
2575 arg = default_conversion (arg);
2576 arg = non_lvalue (arg);
2577 break;
2578
2579 case NEGATE_EXPR:
2580 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2581 || typecode == COMPLEX_TYPE
2582 || typecode == VECTOR_TYPE))
2583 {
2584 error ("wrong type argument to unary minus");
2585 return error_mark_node;
2586 }
2587 else if (!noconvert)
2588 arg = default_conversion (arg);
2589 break;
2590
2591 case BIT_NOT_EXPR:
2592 if (typecode == INTEGER_TYPE || typecode == VECTOR_TYPE)
2593 {
2594 if (!noconvert)
2595 arg = default_conversion (arg);
2596 }
2597 else if (typecode == COMPLEX_TYPE)
2598 {
2599 code = CONJ_EXPR;
2600 if (pedantic)
2601 pedwarn ("ISO C does not support %<~%> for complex conjugation");
2602 if (!noconvert)
2603 arg = default_conversion (arg);
2604 }
2605 else
2606 {
2607 error ("wrong type argument to bit-complement");
2608 return error_mark_node;
2609 }
2610 break;
2611
2612 case ABS_EXPR:
2613 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE))
2614 {
2615 error ("wrong type argument to abs");
2616 return error_mark_node;
2617 }
2618 else if (!noconvert)
2619 arg = default_conversion (arg);
2620 break;
2621
2622 case CONJ_EXPR:
2623 /* Conjugating a real value is a no-op, but allow it anyway. */
2624 if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
2625 || typecode == COMPLEX_TYPE))
2626 {
2627 error ("wrong type argument to conjugation");
2628 return error_mark_node;
2629 }
2630 else if (!noconvert)
2631 arg = default_conversion (arg);
2632 break;
2633
2634 case TRUTH_NOT_EXPR:
2635 if (typecode != INTEGER_TYPE
2636 && typecode != REAL_TYPE && typecode != POINTER_TYPE
2637 && typecode != COMPLEX_TYPE)
2638 {
2639 error ("wrong type argument to unary exclamation mark");
2640 return error_mark_node;
2641 }
2642 arg = c_objc_common_truthvalue_conversion (arg);
2643 return invert_truthvalue (arg);
2644
2645 case NOP_EXPR:
2646 break;
2647
2648 case REALPART_EXPR:
2649 if (TREE_CODE (arg) == COMPLEX_CST)
2650 return TREE_REALPART (arg);
2651 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2652 return fold_build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
2653 else
2654 return arg;
2655
2656 case IMAGPART_EXPR:
2657 if (TREE_CODE (arg) == COMPLEX_CST)
2658 return TREE_IMAGPART (arg);
2659 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
2660 return fold_build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
2661 else
2662 return convert (TREE_TYPE (arg), integer_zero_node);
2663
2664 case PREINCREMENT_EXPR:
2665 case POSTINCREMENT_EXPR:
2666 case PREDECREMENT_EXPR:
2667 case POSTDECREMENT_EXPR:
2668
2669 /* Increment or decrement the real part of the value,
2670 and don't change the imaginary part. */
2671 if (typecode == COMPLEX_TYPE)
2672 {
2673 tree real, imag;
2674
2675 if (pedantic)
2676 pedwarn ("ISO C does not support %<++%> and %<--%>"
2677 " on complex types");
2678
2679 arg = stabilize_reference (arg);
2680 real = build_unary_op (REALPART_EXPR, arg, 1);
2681 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
2682 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
2683 build_unary_op (code, real, 1), imag);
2684 }
2685
2686 /* Report invalid types. */
2687
2688 if (typecode != POINTER_TYPE
2689 && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
2690 {
2691 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2692 error ("wrong type argument to increment");
2693 else
2694 error ("wrong type argument to decrement");
2695
2696 return error_mark_node;
2697 }
2698
2699 {
2700 tree inc;
2701 tree result_type = TREE_TYPE (arg);
2702
2703 arg = get_unwidened (arg, 0);
2704 argtype = TREE_TYPE (arg);
2705
2706 /* Compute the increment. */
2707
2708 if (typecode == POINTER_TYPE)
2709 {
2710 /* If pointer target is an undefined struct,
2711 we just cannot know how to do the arithmetic. */
2712 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (result_type)))
2713 {
2714 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2715 error ("increment of pointer to unknown structure");
2716 else
2717 error ("decrement of pointer to unknown structure");
2718 }
2719 else if ((pedantic || warn_pointer_arith)
2720 && (TREE_CODE (TREE_TYPE (result_type)) == FUNCTION_TYPE
2721 || TREE_CODE (TREE_TYPE (result_type)) == VOID_TYPE))
2722 {
2723 if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
2724 pedwarn ("wrong type argument to increment");
2725 else
2726 pedwarn ("wrong type argument to decrement");
2727 }
2728
2729 inc = c_size_in_bytes (TREE_TYPE (result_type));
2730 }
2731 else
2732 inc = integer_one_node;
2733
2734 inc = convert (argtype, inc);
2735
2736 /* Complain about anything else that is not a true lvalue. */
2737 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
2738 || code == POSTINCREMENT_EXPR)
2739 ? lv_increment
2740 : lv_decrement)))
2741 return error_mark_node;
2742
2743 /* Report a read-only lvalue. */
2744 if (TREE_READONLY (arg))
2745 readonly_error (arg,
2746 ((code == PREINCREMENT_EXPR
2747 || code == POSTINCREMENT_EXPR)
2748 ? lv_increment : lv_decrement));
2749
2750 if (TREE_CODE (TREE_TYPE (arg)) == BOOLEAN_TYPE)
2751 val = boolean_increment (code, arg);
2752 else
2753 val = build2 (code, TREE_TYPE (arg), arg, inc);
2754 TREE_SIDE_EFFECTS (val) = 1;
2755 val = convert (result_type, val);
2756 if (TREE_CODE (val) != code)
2757 TREE_NO_WARNING (val) = 1;
2758 return val;
2759 }
2760
2761 case ADDR_EXPR:
2762 /* Note that this operation never does default_conversion. */
2763
2764 /* Let &* cancel out to simplify resulting code. */
2765 if (TREE_CODE (arg) == INDIRECT_REF)
2766 {
2767 /* Don't let this be an lvalue. */
2768 if (lvalue_p (TREE_OPERAND (arg, 0)))
2769 return non_lvalue (TREE_OPERAND (arg, 0));
2770 return TREE_OPERAND (arg, 0);
2771 }
2772
2773 /* For &x[y], return x+y */
2774 if (TREE_CODE (arg) == ARRAY_REF)
2775 {
2776 tree op0 = TREE_OPERAND (arg, 0);
2777 if (!c_mark_addressable (op0))
2778 return error_mark_node;
2779 return build_binary_op (PLUS_EXPR,
2780 (TREE_CODE (TREE_TYPE (op0)) == ARRAY_TYPE
2781 ? array_to_pointer_conversion (op0)
2782 : op0),
2783 TREE_OPERAND (arg, 1), 1);
2784 }
2785
2786 /* Anything not already handled and not a true memory reference
2787 or a non-lvalue array is an error. */
2788 else if (typecode != FUNCTION_TYPE && !flag
2789 && !lvalue_or_else (arg, lv_addressof))
2790 return error_mark_node;
2791
2792 /* Ordinary case; arg is a COMPONENT_REF or a decl. */
2793 argtype = TREE_TYPE (arg);
2794
2795 /* If the lvalue is const or volatile, merge that into the type
2796 to which the address will point. Note that you can't get a
2797 restricted pointer by taking the address of something, so we
2798 only have to deal with `const' and `volatile' here. */
2799 if ((DECL_P (arg) || REFERENCE_CLASS_P (arg))
2800 && (TREE_READONLY (arg) || TREE_THIS_VOLATILE (arg)))
2801 argtype = c_build_type_variant (argtype,
2802 TREE_READONLY (arg),
2803 TREE_THIS_VOLATILE (arg));
2804
2805 if (!c_mark_addressable (arg))
2806 return error_mark_node;
2807
2808 gcc_assert (TREE_CODE (arg) != COMPONENT_REF
2809 || !DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)));
2810
2811 argtype = build_pointer_type (argtype);
2812
2813 /* ??? Cope with user tricks that amount to offsetof. Delete this
2814 when we have proper support for integer constant expressions. */
2815 val = get_base_address (arg);
2816 if (val && TREE_CODE (val) == INDIRECT_REF
2817 && integer_zerop (TREE_OPERAND (val, 0)))
2818 return fold_convert (argtype, fold_offsetof (arg));
2819
2820 val = build1 (ADDR_EXPR, argtype, arg);
2821
2822 return val;
2823
2824 default:
2825 break;
2826 }
2827
2828 if (argtype == 0)
2829 argtype = TREE_TYPE (arg);
2830 val = build1 (code, argtype, arg);
2831 return require_constant_value ? fold_initializer (val) : fold (val);
2832 }
2833
2834 /* Return nonzero if REF is an lvalue valid for this language.
2835 Lvalues can be assigned, unless their type has TYPE_READONLY.
2836 Lvalues can have their address taken, unless they have C_DECL_REGISTER. */
2837
2838 static int
2839 lvalue_p (tree ref)
2840 {
2841 enum tree_code code = TREE_CODE (ref);
2842
2843 switch (code)
2844 {
2845 case REALPART_EXPR:
2846 case IMAGPART_EXPR:
2847 case COMPONENT_REF:
2848 return lvalue_p (TREE_OPERAND (ref, 0));
2849
2850 case COMPOUND_LITERAL_EXPR:
2851 case STRING_CST:
2852 return 1;
2853
2854 case INDIRECT_REF:
2855 case ARRAY_REF:
2856 case VAR_DECL:
2857 case PARM_DECL:
2858 case RESULT_DECL:
2859 case ERROR_MARK:
2860 return (TREE_CODE (TREE_TYPE (ref)) != FUNCTION_TYPE
2861 && TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE);
2862
2863 case BIND_EXPR:
2864 return TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE;
2865
2866 default:
2867 return 0;
2868 }
2869 }
2870 \f
2871 /* Give an error for storing in something that is 'const'. */
2872
2873 static void
2874 readonly_error (tree arg, enum lvalue_use use)
2875 {
2876 gcc_assert (use == lv_assign || use == lv_increment || use == lv_decrement);
2877 /* Using this macro rather than (for example) arrays of messages
2878 ensures that all the format strings are checked at compile
2879 time. */
2880 #define READONLY_MSG(A, I, D) (use == lv_assign \
2881 ? (A) \
2882 : (use == lv_increment ? (I) : (D)))
2883 if (TREE_CODE (arg) == COMPONENT_REF)
2884 {
2885 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
2886 readonly_error (TREE_OPERAND (arg, 0), use);
2887 else
2888 error (READONLY_MSG (G_("assignment of read-only member %qD"),
2889 G_("increment of read-only member %qD"),
2890 G_("decrement of read-only member %qD")),
2891 TREE_OPERAND (arg, 1));
2892 }
2893 else if (TREE_CODE (arg) == VAR_DECL)
2894 error (READONLY_MSG (G_("assignment of read-only variable %qD"),
2895 G_("increment of read-only variable %qD"),
2896 G_("decrement of read-only variable %qD")),
2897 arg);
2898 else
2899 error (READONLY_MSG (G_("assignment of read-only location"),
2900 G_("increment of read-only location"),
2901 G_("decrement of read-only location")));
2902 }
2903
2904
2905 /* Return nonzero if REF is an lvalue valid for this language;
2906 otherwise, print an error message and return zero. USE says
2907 how the lvalue is being used and so selects the error message. */
2908
2909 static int
2910 lvalue_or_else (tree ref, enum lvalue_use use)
2911 {
2912 int win = lvalue_p (ref);
2913
2914 if (!win)
2915 lvalue_error (use);
2916
2917 return win;
2918 }
2919 \f
2920 /* Mark EXP saying that we need to be able to take the
2921 address of it; it should not be allocated in a register.
2922 Returns true if successful. */
2923
2924 bool
2925 c_mark_addressable (tree exp)
2926 {
2927 tree x = exp;
2928
2929 while (1)
2930 switch (TREE_CODE (x))
2931 {
2932 case COMPONENT_REF:
2933 if (DECL_C_BIT_FIELD (TREE_OPERAND (x, 1)))
2934 {
2935 error
2936 ("cannot take address of bit-field %qD", TREE_OPERAND (x, 1));
2937 return false;
2938 }
2939
2940 /* ... fall through ... */
2941
2942 case ADDR_EXPR:
2943 case ARRAY_REF:
2944 case REALPART_EXPR:
2945 case IMAGPART_EXPR:
2946 x = TREE_OPERAND (x, 0);
2947 break;
2948
2949 case COMPOUND_LITERAL_EXPR:
2950 case CONSTRUCTOR:
2951 TREE_ADDRESSABLE (x) = 1;
2952 return true;
2953
2954 case VAR_DECL:
2955 case CONST_DECL:
2956 case PARM_DECL:
2957 case RESULT_DECL:
2958 if (C_DECL_REGISTER (x)
2959 && DECL_NONLOCAL (x))
2960 {
2961 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2962 {
2963 error
2964 ("global register variable %qD used in nested function", x);
2965 return false;
2966 }
2967 pedwarn ("register variable %qD used in nested function", x);
2968 }
2969 else if (C_DECL_REGISTER (x))
2970 {
2971 if (TREE_PUBLIC (x) || TREE_STATIC (x) || DECL_EXTERNAL (x))
2972 error ("address of global register variable %qD requested", x);
2973 else
2974 error ("address of register variable %qD requested", x);
2975 return false;
2976 }
2977
2978 /* drops in */
2979 case FUNCTION_DECL:
2980 TREE_ADDRESSABLE (x) = 1;
2981 /* drops out */
2982 default:
2983 return true;
2984 }
2985 }
2986 \f
2987 /* Build and return a conditional expression IFEXP ? OP1 : OP2. */
2988
2989 tree
2990 build_conditional_expr (tree ifexp, tree op1, tree op2)
2991 {
2992 tree type1;
2993 tree type2;
2994 enum tree_code code1;
2995 enum tree_code code2;
2996 tree result_type = NULL;
2997 tree orig_op1 = op1, orig_op2 = op2;
2998
2999 /* Promote both alternatives. */
3000
3001 if (TREE_CODE (TREE_TYPE (op1)) != VOID_TYPE)
3002 op1 = default_conversion (op1);
3003 if (TREE_CODE (TREE_TYPE (op2)) != VOID_TYPE)
3004 op2 = default_conversion (op2);
3005
3006 if (TREE_CODE (ifexp) == ERROR_MARK
3007 || TREE_CODE (TREE_TYPE (op1)) == ERROR_MARK
3008 || TREE_CODE (TREE_TYPE (op2)) == ERROR_MARK)
3009 return error_mark_node;
3010
3011 type1 = TREE_TYPE (op1);
3012 code1 = TREE_CODE (type1);
3013 type2 = TREE_TYPE (op2);
3014 code2 = TREE_CODE (type2);
3015
3016 /* C90 does not permit non-lvalue arrays in conditional expressions.
3017 In C99 they will be pointers by now. */
3018 if (code1 == ARRAY_TYPE || code2 == ARRAY_TYPE)
3019 {
3020 error ("non-lvalue array in conditional expression");
3021 return error_mark_node;
3022 }
3023
3024 /* Quickly detect the usual case where op1 and op2 have the same type
3025 after promotion. */
3026 if (TYPE_MAIN_VARIANT (type1) == TYPE_MAIN_VARIANT (type2))
3027 {
3028 if (type1 == type2)
3029 result_type = type1;
3030 else
3031 result_type = TYPE_MAIN_VARIANT (type1);
3032 }
3033 else if ((code1 == INTEGER_TYPE || code1 == REAL_TYPE
3034 || code1 == COMPLEX_TYPE)
3035 && (code2 == INTEGER_TYPE || code2 == REAL_TYPE
3036 || code2 == COMPLEX_TYPE))
3037 {
3038 result_type = c_common_type (type1, type2);
3039
3040 /* If -Wsign-compare, warn here if type1 and type2 have
3041 different signedness. We'll promote the signed to unsigned
3042 and later code won't know it used to be different.
3043 Do this check on the original types, so that explicit casts
3044 will be considered, but default promotions won't. */
3045 if (warn_sign_compare && !skip_evaluation)
3046 {
3047 int unsigned_op1 = TYPE_UNSIGNED (TREE_TYPE (orig_op1));
3048 int unsigned_op2 = TYPE_UNSIGNED (TREE_TYPE (orig_op2));
3049
3050 if (unsigned_op1 ^ unsigned_op2)
3051 {
3052 /* Do not warn if the result type is signed, since the
3053 signed type will only be chosen if it can represent
3054 all the values of the unsigned type. */
3055 if (!TYPE_UNSIGNED (result_type))
3056 /* OK */;
3057 /* Do not warn if the signed quantity is an unsuffixed
3058 integer literal (or some static constant expression
3059 involving such literals) and it is non-negative. */
3060 else if ((unsigned_op2 && tree_expr_nonnegative_p (op1))
3061 || (unsigned_op1 && tree_expr_nonnegative_p (op2)))
3062 /* OK */;
3063 else
3064 warning (0, "signed and unsigned type in conditional expression");
3065 }
3066 }
3067 }
3068 else if (code1 == VOID_TYPE || code2 == VOID_TYPE)
3069 {
3070 if (pedantic && (code1 != VOID_TYPE || code2 != VOID_TYPE))
3071 pedwarn ("ISO C forbids conditional expr with only one void side");
3072 result_type = void_type_node;
3073 }
3074 else if (code1 == POINTER_TYPE && code2 == POINTER_TYPE)
3075 {
3076 if (comp_target_types (type1, type2))
3077 result_type = common_pointer_type (type1, type2);
3078 else if (integer_zerop (op1) && TREE_TYPE (type1) == void_type_node
3079 && TREE_CODE (orig_op1) != NOP_EXPR)
3080 result_type = qualify_type (type2, type1);
3081 else if (integer_zerop (op2) && TREE_TYPE (type2) == void_type_node
3082 && TREE_CODE (orig_op2) != NOP_EXPR)
3083 result_type = qualify_type (type1, type2);
3084 else if (VOID_TYPE_P (TREE_TYPE (type1)))
3085 {
3086 if (pedantic && TREE_CODE (TREE_TYPE (type2)) == FUNCTION_TYPE)
3087 pedwarn ("ISO C forbids conditional expr between "
3088 "%<void *%> and function pointer");
3089 result_type = build_pointer_type (qualify_type (TREE_TYPE (type1),
3090 TREE_TYPE (type2)));
3091 }
3092 else if (VOID_TYPE_P (TREE_TYPE (type2)))
3093 {
3094 if (pedantic && TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE)
3095 pedwarn ("ISO C forbids conditional expr between "
3096 "%<void *%> and function pointer");
3097 result_type = build_pointer_type (qualify_type (TREE_TYPE (type2),
3098 TREE_TYPE (type1)));
3099 }
3100 else
3101 {
3102 pedwarn ("pointer type mismatch in conditional expression");
3103 result_type = build_pointer_type (void_type_node);
3104 }
3105 }
3106 else if (code1 == POINTER_TYPE && code2 == INTEGER_TYPE)
3107 {
3108 if (!integer_zerop (op2))
3109 pedwarn ("pointer/integer type mismatch in conditional expression");
3110 else
3111 {
3112 op2 = null_pointer_node;
3113 }
3114 result_type = type1;
3115 }
3116 else if (code2 == POINTER_TYPE && code1 == INTEGER_TYPE)
3117 {
3118 if (!integer_zerop (op1))
3119 pedwarn ("pointer/integer type mismatch in conditional expression");
3120 else
3121 {
3122 op1 = null_pointer_node;
3123 }
3124 result_type = type2;
3125 }
3126
3127 if (!result_type)
3128 {
3129 if (flag_cond_mismatch)
3130 result_type = void_type_node;
3131 else
3132 {
3133 error ("type mismatch in conditional expression");
3134 return error_mark_node;
3135 }
3136 }
3137
3138 /* Merge const and volatile flags of the incoming types. */
3139 result_type
3140 = build_type_variant (result_type,
3141 TREE_READONLY (op1) || TREE_READONLY (op2),
3142 TREE_THIS_VOLATILE (op1) || TREE_THIS_VOLATILE (op2));
3143
3144 if (result_type != TREE_TYPE (op1))
3145 op1 = convert_and_check (result_type, op1);
3146 if (result_type != TREE_TYPE (op2))
3147 op2 = convert_and_check (result_type, op2);
3148
3149 return fold_build3 (COND_EXPR, result_type, ifexp, op1, op2);
3150 }
3151 \f
3152 /* Return a compound expression that performs two expressions and
3153 returns the value of the second of them. */
3154
3155 tree
3156 build_compound_expr (tree expr1, tree expr2)
3157 {
3158 if (!TREE_SIDE_EFFECTS (expr1))
3159 {
3160 /* The left-hand operand of a comma expression is like an expression
3161 statement: with -Wextra or -Wunused, we should warn if it doesn't have
3162 any side-effects, unless it was explicitly cast to (void). */
3163 if (warn_unused_value)
3164 {
3165 if (VOID_TYPE_P (TREE_TYPE (expr1))
3166 && TREE_CODE (expr1) == CONVERT_EXPR)
3167 ; /* (void) a, b */
3168 else if (VOID_TYPE_P (TREE_TYPE (expr1))
3169 && TREE_CODE (expr1) == COMPOUND_EXPR
3170 && TREE_CODE (TREE_OPERAND (expr1, 1)) == CONVERT_EXPR)
3171 ; /* (void) a, (void) b, c */
3172 else
3173 warning (0, "left-hand operand of comma expression has no effect");
3174 }
3175 }
3176
3177 /* With -Wunused, we should also warn if the left-hand operand does have
3178 side-effects, but computes a value which is not used. For example, in
3179 `foo() + bar(), baz()' the result of the `+' operator is not used,
3180 so we should issue a warning. */
3181 else if (warn_unused_value)
3182 warn_if_unused_value (expr1, input_location);
3183
3184 return build2 (COMPOUND_EXPR, TREE_TYPE (expr2), expr1, expr2);
3185 }
3186
3187 /* Build an expression representing a cast to type TYPE of expression EXPR. */
3188
3189 tree
3190 build_c_cast (tree type, tree expr)
3191 {
3192 tree value = expr;
3193
3194 if (type == error_mark_node || expr == error_mark_node)
3195 return error_mark_node;
3196
3197 /* The ObjC front-end uses TYPE_MAIN_VARIANT to tie together types differing
3198 only in <protocol> qualifications. But when constructing cast expressions,
3199 the protocols do matter and must be kept around. */
3200 if (objc_is_object_ptr (type) && objc_is_object_ptr (TREE_TYPE (expr)))
3201 return build1 (NOP_EXPR, type, expr);
3202
3203 type = TYPE_MAIN_VARIANT (type);
3204
3205 if (TREE_CODE (type) == ARRAY_TYPE)
3206 {
3207 error ("cast specifies array type");
3208 return error_mark_node;
3209 }
3210
3211 if (TREE_CODE (type) == FUNCTION_TYPE)
3212 {
3213 error ("cast specifies function type");
3214 return error_mark_node;
3215 }
3216
3217 if (type == TYPE_MAIN_VARIANT (TREE_TYPE (value)))
3218 {
3219 if (pedantic)
3220 {
3221 if (TREE_CODE (type) == RECORD_TYPE
3222 || TREE_CODE (type) == UNION_TYPE)
3223 pedwarn ("ISO C forbids casting nonscalar to the same type");
3224 }
3225 }
3226 else if (TREE_CODE (type) == UNION_TYPE)
3227 {
3228 tree field;
3229
3230 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
3231 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (field)),
3232 TYPE_MAIN_VARIANT (TREE_TYPE (value))))
3233 break;
3234
3235 if (field)
3236 {
3237 tree t;
3238
3239 if (pedantic)
3240 pedwarn ("ISO C forbids casts to union type");
3241 t = digest_init (type,
3242 build_constructor_single (type, field, value),
3243 true, 0);
3244 TREE_CONSTANT (t) = TREE_CONSTANT (value);
3245 TREE_INVARIANT (t) = TREE_INVARIANT (value);
3246 return t;
3247 }
3248 error ("cast to union type from type not present in union");
3249 return error_mark_node;
3250 }
3251 else
3252 {
3253 tree otype, ovalue;
3254
3255 if (type == void_type_node)
3256 return build1 (CONVERT_EXPR, type, value);
3257
3258 otype = TREE_TYPE (value);
3259
3260 /* Optionally warn about potentially worrisome casts. */
3261
3262 if (warn_cast_qual
3263 && TREE_CODE (type) == POINTER_TYPE
3264 && TREE_CODE (otype) == POINTER_TYPE)
3265 {
3266 tree in_type = type;
3267 tree in_otype = otype;
3268 int added = 0;
3269 int discarded = 0;
3270
3271 /* Check that the qualifiers on IN_TYPE are a superset of
3272 the qualifiers of IN_OTYPE. The outermost level of
3273 POINTER_TYPE nodes is uninteresting and we stop as soon
3274 as we hit a non-POINTER_TYPE node on either type. */
3275 do
3276 {
3277 in_otype = TREE_TYPE (in_otype);
3278 in_type = TREE_TYPE (in_type);
3279
3280 /* GNU C allows cv-qualified function types. 'const'
3281 means the function is very pure, 'volatile' means it
3282 can't return. We need to warn when such qualifiers
3283 are added, not when they're taken away. */
3284 if (TREE_CODE (in_otype) == FUNCTION_TYPE
3285 && TREE_CODE (in_type) == FUNCTION_TYPE)
3286 added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype));
3287 else
3288 discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type));
3289 }
3290 while (TREE_CODE (in_type) == POINTER_TYPE
3291 && TREE_CODE (in_otype) == POINTER_TYPE);
3292
3293 if (added)
3294 warning (0, "cast adds new qualifiers to function type");
3295
3296 if (discarded)
3297 /* There are qualifiers present in IN_OTYPE that are not
3298 present in IN_TYPE. */
3299 warning (0, "cast discards qualifiers from pointer target type");
3300 }
3301
3302 /* Warn about possible alignment problems. */
3303 if (STRICT_ALIGNMENT
3304 && TREE_CODE (type) == POINTER_TYPE
3305 && TREE_CODE (otype) == POINTER_TYPE
3306 && TREE_CODE (TREE_TYPE (otype)) != VOID_TYPE
3307 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3308 /* Don't warn about opaque types, where the actual alignment
3309 restriction is unknown. */
3310 && !((TREE_CODE (TREE_TYPE (otype)) == UNION_TYPE
3311 || TREE_CODE (TREE_TYPE (otype)) == RECORD_TYPE)
3312 && TYPE_MODE (TREE_TYPE (otype)) == VOIDmode)
3313 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
3314 warning (OPT_Wcast_align,
3315 "cast increases required alignment of target type");
3316
3317 if (TREE_CODE (type) == INTEGER_TYPE
3318 && TREE_CODE (otype) == POINTER_TYPE
3319 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3320 && !TREE_CONSTANT (value))
3321 warning (OPT_Wpointer_to_int_cast,
3322 "cast from pointer to integer of different size");
3323
3324 if (TREE_CODE (value) == CALL_EXPR
3325 && TREE_CODE (type) != TREE_CODE (otype))
3326 warning (OPT_Wbad_function_cast, "cast from function call of type %qT "
3327 "to non-matching type %qT", otype, type);
3328
3329 if (TREE_CODE (type) == POINTER_TYPE
3330 && TREE_CODE (otype) == INTEGER_TYPE
3331 && TYPE_PRECISION (type) != TYPE_PRECISION (otype)
3332 /* Don't warn about converting any constant. */
3333 && !TREE_CONSTANT (value))
3334 warning (OPT_Wint_to_pointer_cast, "cast to pointer from integer "
3335 "of different size");
3336
3337 if (flag_strict_aliasing && warn_strict_aliasing
3338 && TREE_CODE (type) == POINTER_TYPE
3339 && TREE_CODE (otype) == POINTER_TYPE
3340 && TREE_CODE (expr) == ADDR_EXPR
3341 && (DECL_P (TREE_OPERAND (expr, 0))
3342 || TREE_CODE (TREE_OPERAND (expr, 0)) == COMPONENT_REF)
3343 && !VOID_TYPE_P (TREE_TYPE (type)))
3344 {
3345 /* Casting the address of an object to non void pointer. Warn
3346 if the cast breaks type based aliasing. */
3347 if (!COMPLETE_TYPE_P (TREE_TYPE (type)))
3348 warning (OPT_Wstrict_aliasing, "type-punning to incomplete type "
3349 "might break strict-aliasing rules");
3350 else
3351 {
3352 HOST_WIDE_INT set1 = get_alias_set (TREE_TYPE (TREE_OPERAND (expr, 0)));
3353 HOST_WIDE_INT set2 = get_alias_set (TREE_TYPE (type));
3354
3355 if (!alias_sets_conflict_p (set1, set2))
3356 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
3357 "pointer will break strict-aliasing rules");
3358 else if (warn_strict_aliasing > 1
3359 && !alias_sets_might_conflict_p (set1, set2))
3360 warning (OPT_Wstrict_aliasing, "dereferencing type-punned "
3361 "pointer might break strict-aliasing rules");
3362 }
3363 }
3364
3365 /* If pedantic, warn for conversions between function and object
3366 pointer types, except for converting a null pointer constant
3367 to function pointer type. */
3368 if (pedantic
3369 && TREE_CODE (type) == POINTER_TYPE
3370 && TREE_CODE (otype) == POINTER_TYPE
3371 && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE
3372 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
3373 pedwarn ("ISO C forbids conversion of function pointer to object pointer type");
3374
3375 if (pedantic
3376 && TREE_CODE (type) == POINTER_TYPE
3377 && TREE_CODE (otype) == POINTER_TYPE
3378 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3379 && TREE_CODE (TREE_TYPE (otype)) != FUNCTION_TYPE
3380 && !(integer_zerop (value) && TREE_TYPE (otype) == void_type_node
3381 && TREE_CODE (expr) != NOP_EXPR))
3382 pedwarn ("ISO C forbids conversion of object pointer to function pointer type");
3383
3384 ovalue = value;
3385 value = convert (type, value);
3386
3387 /* Ignore any integer overflow caused by the cast. */
3388 if (TREE_CODE (value) == INTEGER_CST)
3389 {
3390 /* If OVALUE had overflow set, then so will VALUE, so it
3391 is safe to overwrite. */
3392 if (CONSTANT_CLASS_P (ovalue))
3393 {
3394 TREE_OVERFLOW (value) = TREE_OVERFLOW (ovalue);
3395 /* Similarly, constant_overflow cannot have become cleared. */
3396 TREE_CONSTANT_OVERFLOW (value) = TREE_CONSTANT_OVERFLOW (ovalue);
3397 }
3398 else
3399 TREE_OVERFLOW (value) = 0;
3400 }
3401 }
3402
3403 /* Don't let a cast be an lvalue. */
3404 if (value == expr)
3405 value = non_lvalue (value);
3406
3407 return value;
3408 }
3409
3410 /* Interpret a cast of expression EXPR to type TYPE. */
3411 tree
3412 c_cast_expr (struct c_type_name *type_name, tree expr)
3413 {
3414 tree type;
3415 int saved_wsp = warn_strict_prototypes;
3416
3417 /* This avoids warnings about unprototyped casts on
3418 integers. E.g. "#define SIG_DFL (void(*)())0". */
3419 if (TREE_CODE (expr) == INTEGER_CST)
3420 warn_strict_prototypes = 0;
3421 type = groktypename (type_name);
3422 warn_strict_prototypes = saved_wsp;
3423
3424 return build_c_cast (type, expr);
3425 }
3426
3427 \f
3428 /* Build an assignment expression of lvalue LHS from value RHS.
3429 MODIFYCODE is the code for a binary operator that we use
3430 to combine the old value of LHS with RHS to get the new value.
3431 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. */
3432
3433 tree
3434 build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
3435 {
3436 tree result;
3437 tree newrhs;
3438 tree lhstype = TREE_TYPE (lhs);
3439 tree olhstype = lhstype;
3440
3441 /* Types that aren't fully specified cannot be used in assignments. */
3442 lhs = require_complete_type (lhs);
3443
3444 /* Avoid duplicate error messages from operands that had errors. */
3445 if (TREE_CODE (lhs) == ERROR_MARK || TREE_CODE (rhs) == ERROR_MARK)
3446 return error_mark_node;
3447
3448 STRIP_TYPE_NOPS (rhs);
3449
3450 newrhs = rhs;
3451
3452 /* If a binary op has been requested, combine the old LHS value with the RHS
3453 producing the value we should actually store into the LHS. */
3454
3455 if (modifycode != NOP_EXPR)
3456 {
3457 lhs = stabilize_reference (lhs);
3458 newrhs = build_binary_op (modifycode, lhs, rhs, 1);
3459 }
3460
3461 if (!lvalue_or_else (lhs, lv_assign))
3462 return error_mark_node;
3463
3464 /* Give an error for storing in something that is 'const'. */
3465
3466 if (TREE_READONLY (lhs) || TYPE_READONLY (lhstype)
3467 || ((TREE_CODE (lhstype) == RECORD_TYPE
3468 || TREE_CODE (lhstype) == UNION_TYPE)
3469 && C_TYPE_FIELDS_READONLY (lhstype)))
3470 readonly_error (lhs, lv_assign);
3471
3472 /* If storing into a structure or union member,
3473 it has probably been given type `int'.
3474 Compute the type that would go with
3475 the actual amount of storage the member occupies. */
3476
3477 if (TREE_CODE (lhs) == COMPONENT_REF
3478 && (TREE_CODE (lhstype) == INTEGER_TYPE
3479 || TREE_CODE (lhstype) == BOOLEAN_TYPE
3480 || TREE_CODE (lhstype) == REAL_TYPE
3481 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
3482 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
3483
3484 /* If storing in a field that is in actuality a short or narrower than one,
3485 we must store in the field in its actual type. */
3486
3487 if (lhstype != TREE_TYPE (lhs))
3488 {
3489 lhs = copy_node (lhs);
3490 TREE_TYPE (lhs) = lhstype;
3491 }
3492
3493 /* Convert new value to destination type. */
3494
3495 newrhs = convert_for_assignment (lhstype, newrhs, ic_assign,
3496 NULL_TREE, NULL_TREE, 0);
3497 if (TREE_CODE (newrhs) == ERROR_MARK)
3498 return error_mark_node;
3499
3500 /* Emit ObjC write barrier, if necessary. */
3501 if (c_dialect_objc () && flag_objc_gc)
3502 {
3503 result = objc_generate_write_barrier (lhs, modifycode, newrhs);
3504 if (result)
3505 return result;
3506 }
3507
3508 /* Scan operands. */
3509
3510 result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs);
3511 TREE_SIDE_EFFECTS (result) = 1;
3512
3513 /* If we got the LHS in a different type for storing in,
3514 convert the result back to the nominal type of LHS
3515 so that the value we return always has the same type
3516 as the LHS argument. */
3517
3518 if (olhstype == TREE_TYPE (result))
3519 return result;
3520 return convert_for_assignment (olhstype, result, ic_assign,
3521 NULL_TREE, NULL_TREE, 0);
3522 }
3523 \f
3524 /* Convert value RHS to type TYPE as preparation for an assignment
3525 to an lvalue of type TYPE.
3526 The real work of conversion is done by `convert'.
3527 The purpose of this function is to generate error messages
3528 for assignments that are not allowed in C.
3529 ERRTYPE says whether it is argument passing, assignment,
3530 initialization or return.
3531
3532 FUNCTION is a tree for the function being called.
3533 PARMNUM is the number of the argument, for printing in error messages. */
3534
3535 static tree
3536 convert_for_assignment (tree type, tree rhs, enum impl_conv errtype,
3537 tree fundecl, tree function, int parmnum)
3538 {
3539 enum tree_code codel = TREE_CODE (type);
3540 tree rhstype;
3541 enum tree_code coder;
3542 tree rname = NULL_TREE;
3543 bool objc_ok = false;
3544
3545 if (errtype == ic_argpass || errtype == ic_argpass_nonproto)
3546 {
3547 tree selector;
3548 /* Change pointer to function to the function itself for
3549 diagnostics. */
3550 if (TREE_CODE (function) == ADDR_EXPR
3551 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
3552 function = TREE_OPERAND (function, 0);
3553
3554 /* Handle an ObjC selector specially for diagnostics. */
3555 selector = objc_message_selector ();
3556 rname = function;
3557 if (selector && parmnum > 2)
3558 {
3559 rname = selector;
3560 parmnum -= 2;
3561 }
3562 }
3563
3564 /* This macro is used to emit diagnostics to ensure that all format
3565 strings are complete sentences, visible to gettext and checked at
3566 compile time. */
3567 #define WARN_FOR_ASSIGNMENT(AR, AS, IN, RE) \
3568 do { \
3569 switch (errtype) \
3570 { \
3571 case ic_argpass: \
3572 pedwarn (AR, parmnum, rname); \
3573 break; \
3574 case ic_argpass_nonproto: \
3575 warning (0, AR, parmnum, rname); \
3576 break; \
3577 case ic_assign: \
3578 pedwarn (AS); \
3579 break; \
3580 case ic_init: \
3581 pedwarn (IN); \
3582 break; \
3583 case ic_return: \
3584 pedwarn (RE); \
3585 break; \
3586 default: \
3587 gcc_unreachable (); \
3588 } \
3589 } while (0)
3590
3591 STRIP_TYPE_NOPS (rhs);
3592
3593 if (optimize && TREE_CODE (rhs) == VAR_DECL
3594 && TREE_CODE (TREE_TYPE (rhs)) != ARRAY_TYPE)
3595 rhs = decl_constant_value_for_broken_optimization (rhs);
3596
3597 rhstype = TREE_TYPE (rhs);
3598 coder = TREE_CODE (rhstype);
3599
3600 if (coder == ERROR_MARK)
3601 return error_mark_node;
3602
3603 if (c_dialect_objc ())
3604 {
3605 int parmno;
3606
3607 switch (errtype)
3608 {
3609 case ic_return:
3610 parmno = 0;
3611 break;
3612
3613 case ic_assign:
3614 parmno = -1;
3615 break;
3616
3617 case ic_init:
3618 parmno = -2;
3619 break;
3620
3621 default:
3622 parmno = parmnum;
3623 break;
3624 }
3625
3626 objc_ok = objc_compare_types (type, rhstype, parmno, rname);
3627 }
3628
3629 if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (rhstype))
3630 {
3631 overflow_warning (rhs);
3632 return rhs;
3633 }
3634
3635 if (coder == VOID_TYPE)
3636 {
3637 /* Except for passing an argument to an unprototyped function,
3638 this is a constraint violation. When passing an argument to
3639 an unprototyped function, it is compile-time undefined;
3640 making it a constraint in that case was rejected in
3641 DR#252. */
3642 error ("void value not ignored as it ought to be");
3643 return error_mark_node;
3644 }
3645 /* A type converts to a reference to it.
3646 This code doesn't fully support references, it's just for the
3647 special case of va_start and va_copy. */
3648 if (codel == REFERENCE_TYPE
3649 && comptypes (TREE_TYPE (type), TREE_TYPE (rhs)) == 1)
3650 {
3651 if (!lvalue_p (rhs))
3652 {
3653 error ("cannot pass rvalue to reference parameter");
3654 return error_mark_node;
3655 }
3656 if (!c_mark_addressable (rhs))
3657 return error_mark_node;
3658 rhs = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (rhs)), rhs);
3659
3660 /* We already know that these two types are compatible, but they
3661 may not be exactly identical. In fact, `TREE_TYPE (type)' is
3662 likely to be __builtin_va_list and `TREE_TYPE (rhs)' is
3663 likely to be va_list, a typedef to __builtin_va_list, which
3664 is different enough that it will cause problems later. */
3665 if (TREE_TYPE (TREE_TYPE (rhs)) != TREE_TYPE (type))
3666 rhs = build1 (NOP_EXPR, build_pointer_type (TREE_TYPE (type)), rhs);
3667
3668 rhs = build1 (NOP_EXPR, type, rhs);
3669 return rhs;
3670 }
3671 /* Some types can interconvert without explicit casts. */
3672 else if (codel == VECTOR_TYPE && coder == VECTOR_TYPE
3673 && vector_types_convertible_p (type, TREE_TYPE (rhs)))
3674 return convert (type, rhs);
3675 /* Arithmetic types all interconvert, and enum is treated like int. */
3676 else if ((codel == INTEGER_TYPE || codel == REAL_TYPE
3677 || codel == ENUMERAL_TYPE || codel == COMPLEX_TYPE
3678 || codel == BOOLEAN_TYPE)
3679 && (coder == INTEGER_TYPE || coder == REAL_TYPE
3680 || coder == ENUMERAL_TYPE || coder == COMPLEX_TYPE
3681 || coder == BOOLEAN_TYPE))
3682 return convert_and_check (type, rhs);
3683
3684 /* Conversion to a transparent union from its member types.
3685 This applies only to function arguments. */
3686 else if (codel == UNION_TYPE && TYPE_TRANSPARENT_UNION (type)
3687 && (errtype == ic_argpass || errtype == ic_argpass_nonproto))
3688 {
3689 tree memb_types;
3690 tree marginal_memb_type = 0;
3691
3692 for (memb_types = TYPE_FIELDS (type); memb_types;
3693 memb_types = TREE_CHAIN (memb_types))
3694 {
3695 tree memb_type = TREE_TYPE (memb_types);
3696
3697 if (comptypes (TYPE_MAIN_VARIANT (memb_type),
3698 TYPE_MAIN_VARIANT (rhstype)))
3699 break;
3700
3701 if (TREE_CODE (memb_type) != POINTER_TYPE)
3702 continue;
3703
3704 if (coder == POINTER_TYPE)
3705 {
3706 tree ttl = TREE_TYPE (memb_type);
3707 tree ttr = TREE_TYPE (rhstype);
3708
3709 /* Any non-function converts to a [const][volatile] void *
3710 and vice versa; otherwise, targets must be the same.
3711 Meanwhile, the lhs target must have all the qualifiers of
3712 the rhs. */
3713 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3714 || comp_target_types (memb_type, rhstype))
3715 {
3716 /* If this type won't generate any warnings, use it. */
3717 if (TYPE_QUALS (ttl) == TYPE_QUALS (ttr)
3718 || ((TREE_CODE (ttr) == FUNCTION_TYPE
3719 && TREE_CODE (ttl) == FUNCTION_TYPE)
3720 ? ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3721 == TYPE_QUALS (ttr))
3722 : ((TYPE_QUALS (ttl) | TYPE_QUALS (ttr))
3723 == TYPE_QUALS (ttl))))
3724 break;
3725
3726 /* Keep looking for a better type, but remember this one. */
3727 if (!marginal_memb_type)
3728 marginal_memb_type = memb_type;
3729 }
3730 }
3731
3732 /* Can convert integer zero to any pointer type. */
3733 if (integer_zerop (rhs)
3734 || (TREE_CODE (rhs) == NOP_EXPR
3735 && integer_zerop (TREE_OPERAND (rhs, 0))))
3736 {
3737 rhs = null_pointer_node;
3738 break;
3739 }
3740 }
3741
3742 if (memb_types || marginal_memb_type)
3743 {
3744 if (!memb_types)
3745 {
3746 /* We have only a marginally acceptable member type;
3747 it needs a warning. */
3748 tree ttl = TREE_TYPE (marginal_memb_type);
3749 tree ttr = TREE_TYPE (rhstype);
3750
3751 /* Const and volatile mean something different for function
3752 types, so the usual warnings are not appropriate. */
3753 if (TREE_CODE (ttr) == FUNCTION_TYPE
3754 && TREE_CODE (ttl) == FUNCTION_TYPE)
3755 {
3756 /* Because const and volatile on functions are
3757 restrictions that say the function will not do
3758 certain things, it is okay to use a const or volatile
3759 function where an ordinary one is wanted, but not
3760 vice-versa. */
3761 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3762 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE "
3763 "makes qualified function "
3764 "pointer from unqualified"),
3765 G_("assignment makes qualified "
3766 "function pointer from "
3767 "unqualified"),
3768 G_("initialization makes qualified "
3769 "function pointer from "
3770 "unqualified"),
3771 G_("return makes qualified function "
3772 "pointer from unqualified"));
3773 }
3774 else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3775 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE discards "
3776 "qualifiers from pointer target type"),
3777 G_("assignment discards qualifiers "
3778 "from pointer target type"),
3779 G_("initialization discards qualifiers "
3780 "from pointer target type"),
3781 G_("return discards qualifiers from "
3782 "pointer target type"));
3783 }
3784
3785 if (pedantic && (!fundecl || !DECL_IN_SYSTEM_HEADER (fundecl)))
3786 pedwarn ("ISO C prohibits argument conversion to union type");
3787
3788 return build1 (NOP_EXPR, type, rhs);
3789 }
3790 }
3791
3792 /* Conversions among pointers */
3793 else if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
3794 && (coder == codel))
3795 {
3796 tree ttl = TREE_TYPE (type);
3797 tree ttr = TREE_TYPE (rhstype);
3798 tree mvl = ttl;
3799 tree mvr = ttr;
3800 bool is_opaque_pointer;
3801 int target_cmp = 0; /* Cache comp_target_types () result. */
3802
3803 if (TREE_CODE (mvl) != ARRAY_TYPE)
3804 mvl = TYPE_MAIN_VARIANT (mvl);
3805 if (TREE_CODE (mvr) != ARRAY_TYPE)
3806 mvr = TYPE_MAIN_VARIANT (mvr);
3807 /* Opaque pointers are treated like void pointers. */
3808 is_opaque_pointer = (targetm.vector_opaque_p (type)
3809 || targetm.vector_opaque_p (rhstype))
3810 && TREE_CODE (ttl) == VECTOR_TYPE
3811 && TREE_CODE (ttr) == VECTOR_TYPE;
3812
3813 /* C++ does not allow the implicit conversion void* -> T*. However,
3814 for the purpose of reducing the number of false positives, we
3815 tolerate the special case of
3816
3817 int *p = NULL;
3818
3819 where NULL is typically defined in C to be '(void *) 0'. */
3820 if (VOID_TYPE_P (ttr) && rhs != null_pointer_node && !VOID_TYPE_P (ttl))
3821 warning (OPT_Wc___compat, "request for implicit conversion from "
3822 "%qT to %qT not permitted in C++", rhstype, type);
3823
3824 /* Check if the right-hand side has a format attribute but the
3825 left-hand side doesn't. */
3826 if (warn_missing_format_attribute
3827 && check_missing_format_attribute (type, rhstype))
3828 {
3829 switch (errtype)
3830 {
3831 case ic_argpass:
3832 case ic_argpass_nonproto:
3833 warning (OPT_Wmissing_format_attribute,
3834 "argument %d of %qE might be "
3835 "a candidate for a format attribute",
3836 parmnum, rname);
3837 break;
3838 case ic_assign:
3839 warning (OPT_Wmissing_format_attribute,
3840 "assignment left-hand side might be "
3841 "a candidate for a format attribute");
3842 break;
3843 case ic_init:
3844 warning (OPT_Wmissing_format_attribute,
3845 "initialization left-hand side might be "
3846 "a candidate for a format attribute");
3847 break;
3848 case ic_return:
3849 warning (OPT_Wmissing_format_attribute,
3850 "return type might be "
3851 "a candidate for a format attribute");
3852 break;
3853 default:
3854 gcc_unreachable ();
3855 }
3856 }
3857
3858 /* Any non-function converts to a [const][volatile] void *
3859 and vice versa; otherwise, targets must be the same.
3860 Meanwhile, the lhs target must have all the qualifiers of the rhs. */
3861 if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3862 || (target_cmp = comp_target_types (type, rhstype))
3863 || is_opaque_pointer
3864 || (c_common_unsigned_type (mvl)
3865 == c_common_unsigned_type (mvr)))
3866 {
3867 if (pedantic
3868 && ((VOID_TYPE_P (ttl) && TREE_CODE (ttr) == FUNCTION_TYPE)
3869 ||
3870 (VOID_TYPE_P (ttr)
3871 /* Check TREE_CODE to catch cases like (void *) (char *) 0
3872 which are not ANSI null ptr constants. */
3873 && (!integer_zerop (rhs) || TREE_CODE (rhs) == NOP_EXPR)
3874 && TREE_CODE (ttl) == FUNCTION_TYPE)))
3875 WARN_FOR_ASSIGNMENT (G_("ISO C forbids passing argument %d of "
3876 "%qE between function pointer "
3877 "and %<void *%>"),
3878 G_("ISO C forbids assignment between "
3879 "function pointer and %<void *%>"),
3880 G_("ISO C forbids initialization between "
3881 "function pointer and %<void *%>"),
3882 G_("ISO C forbids return between function "
3883 "pointer and %<void *%>"));
3884 /* Const and volatile mean something different for function types,
3885 so the usual warnings are not appropriate. */
3886 else if (TREE_CODE (ttr) != FUNCTION_TYPE
3887 && TREE_CODE (ttl) != FUNCTION_TYPE)
3888 {
3889 if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl))
3890 {
3891 /* Types differing only by the presence of the 'volatile'
3892 qualifier are acceptable if the 'volatile' has been added
3893 in by the Objective-C EH machinery. */
3894 if (!objc_type_quals_match (ttl, ttr))
3895 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE discards "
3896 "qualifiers from pointer target type"),
3897 G_("assignment discards qualifiers "
3898 "from pointer target type"),
3899 G_("initialization discards qualifiers "
3900 "from pointer target type"),
3901 G_("return discards qualifiers from "
3902 "pointer target type"));
3903 }
3904 /* If this is not a case of ignoring a mismatch in signedness,
3905 no warning. */
3906 else if (VOID_TYPE_P (ttl) || VOID_TYPE_P (ttr)
3907 || target_cmp)
3908 ;
3909 /* If there is a mismatch, do warn. */
3910 else if (warn_pointer_sign)
3911 WARN_FOR_ASSIGNMENT (G_("pointer targets in passing argument "
3912 "%d of %qE differ in signedness"),
3913 G_("pointer targets in assignment "
3914 "differ in signedness"),
3915 G_("pointer targets in initialization "
3916 "differ in signedness"),
3917 G_("pointer targets in return differ "
3918 "in signedness"));
3919 }
3920 else if (TREE_CODE (ttl) == FUNCTION_TYPE
3921 && TREE_CODE (ttr) == FUNCTION_TYPE)
3922 {
3923 /* Because const and volatile on functions are restrictions
3924 that say the function will not do certain things,
3925 it is okay to use a const or volatile function
3926 where an ordinary one is wanted, but not vice-versa. */
3927 if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr))
3928 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes "
3929 "qualified function pointer "
3930 "from unqualified"),
3931 G_("assignment makes qualified function "
3932 "pointer from unqualified"),
3933 G_("initialization makes qualified "
3934 "function pointer from unqualified"),
3935 G_("return makes qualified function "
3936 "pointer from unqualified"));
3937 }
3938 }
3939 else
3940 /* Avoid warning about the volatile ObjC EH puts on decls. */
3941 if (!objc_ok)
3942 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE from "
3943 "incompatible pointer type"),
3944 G_("assignment from incompatible pointer type"),
3945 G_("initialization from incompatible "
3946 "pointer type"),
3947 G_("return from incompatible pointer type"));
3948
3949 return convert (type, rhs);
3950 }
3951 else if (codel == POINTER_TYPE && coder == ARRAY_TYPE)
3952 {
3953 /* ??? This should not be an error when inlining calls to
3954 unprototyped functions. */
3955 error ("invalid use of non-lvalue array");
3956 return error_mark_node;
3957 }
3958 else if (codel == POINTER_TYPE && coder == INTEGER_TYPE)
3959 {
3960 /* An explicit constant 0 can convert to a pointer,
3961 or one that results from arithmetic, even including
3962 a cast to integer type. */
3963 if (!(TREE_CODE (rhs) == INTEGER_CST && integer_zerop (rhs))
3964 &&
3965 !(TREE_CODE (rhs) == NOP_EXPR
3966 && TREE_CODE (TREE_TYPE (rhs)) == INTEGER_TYPE
3967 && TREE_CODE (TREE_OPERAND (rhs, 0)) == INTEGER_CST
3968 && integer_zerop (TREE_OPERAND (rhs, 0))))
3969 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes "
3970 "pointer from integer without a cast"),
3971 G_("assignment makes pointer from integer "
3972 "without a cast"),
3973 G_("initialization makes pointer from "
3974 "integer without a cast"),
3975 G_("return makes pointer from integer "
3976 "without a cast"));
3977
3978 return convert (type, rhs);
3979 }
3980 else if (codel == INTEGER_TYPE && coder == POINTER_TYPE)
3981 {
3982 WARN_FOR_ASSIGNMENT (G_("passing argument %d of %qE makes integer "
3983 "from pointer without a cast"),
3984 G_("assignment makes integer from pointer "
3985 "without a cast"),
3986 G_("initialization makes integer from pointer "
3987 "without a cast"),
3988 G_("return makes integer from pointer "
3989 "without a cast"));
3990 return convert (type, rhs);
3991 }
3992 else if (codel == BOOLEAN_TYPE && coder == POINTER_TYPE)
3993 return convert (type, rhs);
3994
3995 switch (errtype)
3996 {
3997 case ic_argpass:
3998 case ic_argpass_nonproto:
3999 /* ??? This should not be an error when inlining calls to
4000 unprototyped functions. */
4001 error ("incompatible type for argument %d of %qE", parmnum, rname);
4002 break;
4003 case ic_assign:
4004 error ("incompatible types in assignment");
4005 break;
4006 case ic_init:
4007 error ("incompatible types in initialization");
4008 break;
4009 case ic_return:
4010 error ("incompatible types in return");
4011 break;
4012 default:
4013 gcc_unreachable ();
4014 }
4015
4016 return error_mark_node;
4017 }
4018
4019 /* Convert VALUE for assignment into inlined parameter PARM. ARGNUM
4020 is used for error and waring reporting and indicates which argument
4021 is being processed. */
4022
4023 tree
4024 c_convert_parm_for_inlining (tree parm, tree value, tree fn, int argnum)
4025 {
4026 tree ret, type;
4027
4028 /* If FN was prototyped, the value has been converted already
4029 in convert_arguments. */
4030 if (!value || TYPE_ARG_TYPES (TREE_TYPE (fn)))
4031 return value;
4032
4033 type = TREE_TYPE (parm);
4034 ret = convert_for_assignment (type, value,
4035 ic_argpass_nonproto, fn,
4036 fn, argnum);
4037 if (targetm.calls.promote_prototypes (TREE_TYPE (fn))
4038 && INTEGRAL_TYPE_P (type)
4039 && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)))
4040 ret = default_conversion (ret);
4041 return ret;
4042 }
4043 \f
4044 /* If VALUE is a compound expr all of whose expressions are constant, then
4045 return its value. Otherwise, return error_mark_node.
4046
4047 This is for handling COMPOUND_EXPRs as initializer elements
4048 which is allowed with a warning when -pedantic is specified. */
4049
4050 static tree
4051 valid_compound_expr_initializer (tree value, tree endtype)
4052 {
4053 if (TREE_CODE (value) == COMPOUND_EXPR)
4054 {
4055 if (valid_compound_expr_initializer (TREE_OPERAND (value, 0), endtype)
4056 == error_mark_node)
4057 return error_mark_node;
4058 return valid_compound_expr_initializer (TREE_OPERAND (value, 1),
4059 endtype);
4060 }
4061 else if (!initializer_constant_valid_p (value, endtype))
4062 return error_mark_node;
4063 else
4064 return value;
4065 }
4066 \f
4067 /* Perform appropriate conversions on the initial value of a variable,
4068 store it in the declaration DECL,
4069 and print any error messages that are appropriate.
4070 If the init is invalid, store an ERROR_MARK. */
4071
4072 void
4073 store_init_value (tree decl, tree init)
4074 {
4075 tree value, type;
4076
4077 /* If variable's type was invalidly declared, just ignore it. */
4078
4079 type = TREE_TYPE (decl);
4080 if (TREE_CODE (type) == ERROR_MARK)
4081 return;
4082
4083 /* Digest the specified initializer into an expression. */
4084
4085 value = digest_init (type, init, true, TREE_STATIC (decl));
4086
4087 /* Store the expression if valid; else report error. */
4088
4089 if (!in_system_header
4090 && AGGREGATE_TYPE_P (TREE_TYPE (decl)) && !TREE_STATIC (decl))
4091 warning (OPT_Wtraditional, "traditional C rejects automatic "
4092 "aggregate initialization");
4093
4094 DECL_INITIAL (decl) = value;
4095
4096 /* ANSI wants warnings about out-of-range constant initializers. */
4097 STRIP_TYPE_NOPS (value);
4098 constant_expression_warning (value);
4099
4100 /* Check if we need to set array size from compound literal size. */
4101 if (TREE_CODE (type) == ARRAY_TYPE
4102 && TYPE_DOMAIN (type) == 0
4103 && value != error_mark_node)
4104 {
4105 tree inside_init = init;
4106
4107 STRIP_TYPE_NOPS (inside_init);
4108 inside_init = fold (inside_init);
4109
4110 if (TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4111 {
4112 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4113
4114 if (TYPE_DOMAIN (TREE_TYPE (decl)))
4115 {
4116 /* For int foo[] = (int [3]){1}; we need to set array size
4117 now since later on array initializer will be just the
4118 brace enclosed list of the compound literal. */
4119 TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (decl));
4120 layout_type (type);
4121 layout_decl (decl, 0);
4122 }
4123 }
4124 }
4125 }
4126 \f
4127 /* Methods for storing and printing names for error messages. */
4128
4129 /* Implement a spelling stack that allows components of a name to be pushed
4130 and popped. Each element on the stack is this structure. */
4131
4132 struct spelling
4133 {
4134 int kind;
4135 union
4136 {
4137 int i;
4138 const char *s;
4139 } u;
4140 };
4141
4142 #define SPELLING_STRING 1
4143 #define SPELLING_MEMBER 2
4144 #define SPELLING_BOUNDS 3
4145
4146 static struct spelling *spelling; /* Next stack element (unused). */
4147 static struct spelling *spelling_base; /* Spelling stack base. */
4148 static int spelling_size; /* Size of the spelling stack. */
4149
4150 /* Macros to save and restore the spelling stack around push_... functions.
4151 Alternative to SAVE_SPELLING_STACK. */
4152
4153 #define SPELLING_DEPTH() (spelling - spelling_base)
4154 #define RESTORE_SPELLING_DEPTH(DEPTH) (spelling = spelling_base + (DEPTH))
4155
4156 /* Push an element on the spelling stack with type KIND and assign VALUE
4157 to MEMBER. */
4158
4159 #define PUSH_SPELLING(KIND, VALUE, MEMBER) \
4160 { \
4161 int depth = SPELLING_DEPTH (); \
4162 \
4163 if (depth >= spelling_size) \
4164 { \
4165 spelling_size += 10; \
4166 spelling_base = XRESIZEVEC (struct spelling, spelling_base, \
4167 spelling_size); \
4168 RESTORE_SPELLING_DEPTH (depth); \
4169 } \
4170 \
4171 spelling->kind = (KIND); \
4172 spelling->MEMBER = (VALUE); \
4173 spelling++; \
4174 }
4175
4176 /* Push STRING on the stack. Printed literally. */
4177
4178 static void
4179 push_string (const char *string)
4180 {
4181 PUSH_SPELLING (SPELLING_STRING, string, u.s);
4182 }
4183
4184 /* Push a member name on the stack. Printed as '.' STRING. */
4185
4186 static void
4187 push_member_name (tree decl)
4188 {
4189 const char *const string
4190 = DECL_NAME (decl) ? IDENTIFIER_POINTER (DECL_NAME (decl)) : "<anonymous>";
4191 PUSH_SPELLING (SPELLING_MEMBER, string, u.s);
4192 }
4193
4194 /* Push an array bounds on the stack. Printed as [BOUNDS]. */
4195
4196 static void
4197 push_array_bounds (int bounds)
4198 {
4199 PUSH_SPELLING (SPELLING_BOUNDS, bounds, u.i);
4200 }
4201
4202 /* Compute the maximum size in bytes of the printed spelling. */
4203
4204 static int
4205 spelling_length (void)
4206 {
4207 int size = 0;
4208 struct spelling *p;
4209
4210 for (p = spelling_base; p < spelling; p++)
4211 {
4212 if (p->kind == SPELLING_BOUNDS)
4213 size += 25;
4214 else
4215 size += strlen (p->u.s) + 1;
4216 }
4217
4218 return size;
4219 }
4220
4221 /* Print the spelling to BUFFER and return it. */
4222
4223 static char *
4224 print_spelling (char *buffer)
4225 {
4226 char *d = buffer;
4227 struct spelling *p;
4228
4229 for (p = spelling_base; p < spelling; p++)
4230 if (p->kind == SPELLING_BOUNDS)
4231 {
4232 sprintf (d, "[%d]", p->u.i);
4233 d += strlen (d);
4234 }
4235 else
4236 {
4237 const char *s;
4238 if (p->kind == SPELLING_MEMBER)
4239 *d++ = '.';
4240 for (s = p->u.s; (*d = *s++); d++)
4241 ;
4242 }
4243 *d++ = '\0';
4244 return buffer;
4245 }
4246
4247 /* Issue an error message for a bad initializer component.
4248 MSGID identifies the message.
4249 The component name is taken from the spelling stack. */
4250
4251 void
4252 error_init (const char *msgid)
4253 {
4254 char *ofwhat;
4255
4256 error ("%s", _(msgid));
4257 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4258 if (*ofwhat)
4259 error ("(near initialization for %qs)", ofwhat);
4260 }
4261
4262 /* Issue a pedantic warning for a bad initializer component.
4263 MSGID identifies the message.
4264 The component name is taken from the spelling stack. */
4265
4266 void
4267 pedwarn_init (const char *msgid)
4268 {
4269 char *ofwhat;
4270
4271 pedwarn ("%s", _(msgid));
4272 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4273 if (*ofwhat)
4274 pedwarn ("(near initialization for %qs)", ofwhat);
4275 }
4276
4277 /* Issue a warning for a bad initializer component.
4278 MSGID identifies the message.
4279 The component name is taken from the spelling stack. */
4280
4281 static void
4282 warning_init (const char *msgid)
4283 {
4284 char *ofwhat;
4285
4286 warning (0, "%s", _(msgid));
4287 ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
4288 if (*ofwhat)
4289 warning (0, "(near initialization for %qs)", ofwhat);
4290 }
4291 \f
4292 /* If TYPE is an array type and EXPR is a parenthesized string
4293 constant, warn if pedantic that EXPR is being used to initialize an
4294 object of type TYPE. */
4295
4296 void
4297 maybe_warn_string_init (tree type, struct c_expr expr)
4298 {
4299 if (pedantic
4300 && TREE_CODE (type) == ARRAY_TYPE
4301 && TREE_CODE (expr.value) == STRING_CST
4302 && expr.original_code != STRING_CST)
4303 pedwarn_init ("array initialized from parenthesized string constant");
4304 }
4305
4306 /* Digest the parser output INIT as an initializer for type TYPE.
4307 Return a C expression of type TYPE to represent the initial value.
4308
4309 If INIT is a string constant, STRICT_STRING is true if it is
4310 unparenthesized or we should not warn here for it being parenthesized.
4311 For other types of INIT, STRICT_STRING is not used.
4312
4313 REQUIRE_CONSTANT requests an error if non-constant initializers or
4314 elements are seen. */
4315
4316 static tree
4317 digest_init (tree type, tree init, bool strict_string, int require_constant)
4318 {
4319 enum tree_code code = TREE_CODE (type);
4320 tree inside_init = init;
4321
4322 if (type == error_mark_node
4323 || init == error_mark_node
4324 || TREE_TYPE (init) == error_mark_node)
4325 return error_mark_node;
4326
4327 STRIP_TYPE_NOPS (inside_init);
4328
4329 inside_init = fold (inside_init);
4330
4331 /* Initialization of an array of chars from a string constant
4332 optionally enclosed in braces. */
4333
4334 if (code == ARRAY_TYPE && inside_init
4335 && TREE_CODE (inside_init) == STRING_CST)
4336 {
4337 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
4338 /* Note that an array could be both an array of character type
4339 and an array of wchar_t if wchar_t is signed char or unsigned
4340 char. */
4341 bool char_array = (typ1 == char_type_node
4342 || typ1 == signed_char_type_node
4343 || typ1 == unsigned_char_type_node);
4344 bool wchar_array = !!comptypes (typ1, wchar_type_node);
4345 if (char_array || wchar_array)
4346 {
4347 struct c_expr expr;
4348 bool char_string;
4349 expr.value = inside_init;
4350 expr.original_code = (strict_string ? STRING_CST : ERROR_MARK);
4351 maybe_warn_string_init (type, expr);
4352
4353 char_string
4354 = (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init)))
4355 == char_type_node);
4356
4357 if (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4358 TYPE_MAIN_VARIANT (type)))
4359 return inside_init;
4360
4361 if (!wchar_array && !char_string)
4362 {
4363 error_init ("char-array initialized from wide string");
4364 return error_mark_node;
4365 }
4366 if (char_string && !char_array)
4367 {
4368 error_init ("wchar_t-array initialized from non-wide string");
4369 return error_mark_node;
4370 }
4371
4372 TREE_TYPE (inside_init) = type;
4373 if (TYPE_DOMAIN (type) != 0
4374 && TYPE_SIZE (type) != 0
4375 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
4376 /* Subtract 1 (or sizeof (wchar_t))
4377 because it's ok to ignore the terminating null char
4378 that is counted in the length of the constant. */
4379 && 0 > compare_tree_int (TYPE_SIZE_UNIT (type),
4380 TREE_STRING_LENGTH (inside_init)
4381 - ((TYPE_PRECISION (typ1)
4382 != TYPE_PRECISION (char_type_node))
4383 ? (TYPE_PRECISION (wchar_type_node)
4384 / BITS_PER_UNIT)
4385 : 1)))
4386 pedwarn_init ("initializer-string for array of chars is too long");
4387
4388 return inside_init;
4389 }
4390 else if (INTEGRAL_TYPE_P (typ1))
4391 {
4392 error_init ("array of inappropriate type initialized "
4393 "from string constant");
4394 return error_mark_node;
4395 }
4396 }
4397
4398 /* Build a VECTOR_CST from a *constant* vector constructor. If the
4399 vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
4400 below and handle as a constructor. */
4401 if (code == VECTOR_TYPE
4402 && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
4403 && vector_types_convertible_p (TREE_TYPE (inside_init), type)
4404 && TREE_CONSTANT (inside_init))
4405 {
4406 if (TREE_CODE (inside_init) == VECTOR_CST
4407 && comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4408 TYPE_MAIN_VARIANT (type)))
4409 return inside_init;
4410
4411 if (TREE_CODE (inside_init) == CONSTRUCTOR)
4412 {
4413 unsigned HOST_WIDE_INT ix;
4414 tree value;
4415 bool constant_p = true;
4416
4417 /* Iterate through elements and check if all constructor
4418 elements are *_CSTs. */
4419 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (inside_init), ix, value)
4420 if (!CONSTANT_CLASS_P (value))
4421 {
4422 constant_p = false;
4423 break;
4424 }
4425
4426 if (constant_p)
4427 return build_vector_from_ctor (type,
4428 CONSTRUCTOR_ELTS (inside_init));
4429 }
4430 }
4431
4432 /* Any type can be initialized
4433 from an expression of the same type, optionally with braces. */
4434
4435 if (inside_init && TREE_TYPE (inside_init) != 0
4436 && (comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (inside_init)),
4437 TYPE_MAIN_VARIANT (type))
4438 || (code == ARRAY_TYPE
4439 && comptypes (TREE_TYPE (inside_init), type))
4440 || (code == VECTOR_TYPE
4441 && comptypes (TREE_TYPE (inside_init), type))
4442 || (code == POINTER_TYPE
4443 && TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE
4444 && comptypes (TREE_TYPE (TREE_TYPE (inside_init)),
4445 TREE_TYPE (type)))))
4446 {
4447 if (code == POINTER_TYPE)
4448 {
4449 if (TREE_CODE (TREE_TYPE (inside_init)) == ARRAY_TYPE)
4450 {
4451 if (TREE_CODE (inside_init) == STRING_CST
4452 || TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4453 inside_init = array_to_pointer_conversion (inside_init);
4454 else
4455 {
4456 error_init ("invalid use of non-lvalue array");
4457 return error_mark_node;
4458 }
4459 }
4460 }
4461
4462 if (code == VECTOR_TYPE)
4463 /* Although the types are compatible, we may require a
4464 conversion. */
4465 inside_init = convert (type, inside_init);
4466
4467 if (require_constant && !flag_isoc99
4468 && TREE_CODE (inside_init) == COMPOUND_LITERAL_EXPR)
4469 {
4470 /* As an extension, allow initializing objects with static storage
4471 duration with compound literals (which are then treated just as
4472 the brace enclosed list they contain). */
4473 tree decl = COMPOUND_LITERAL_EXPR_DECL (inside_init);
4474 inside_init = DECL_INITIAL (decl);
4475 }
4476
4477 if (code == ARRAY_TYPE && TREE_CODE (inside_init) != STRING_CST
4478 && TREE_CODE (inside_init) != CONSTRUCTOR)
4479 {
4480 error_init ("array initialized from non-constant array expression");
4481 return error_mark_node;
4482 }
4483
4484 if (optimize && TREE_CODE (inside_init) == VAR_DECL)
4485 inside_init = decl_constant_value_for_broken_optimization (inside_init);
4486
4487 /* Compound expressions can only occur here if -pedantic or
4488 -pedantic-errors is specified. In the later case, we always want
4489 an error. In the former case, we simply want a warning. */
4490 if (require_constant && pedantic
4491 && TREE_CODE (inside_init) == COMPOUND_EXPR)
4492 {
4493 inside_init
4494 = valid_compound_expr_initializer (inside_init,
4495 TREE_TYPE (inside_init));
4496 if (inside_init == error_mark_node)
4497 error_init ("initializer element is not constant");
4498 else
4499 pedwarn_init ("initializer element is not constant");
4500 if (flag_pedantic_errors)
4501 inside_init = error_mark_node;
4502 }
4503 else if (require_constant
4504 && !initializer_constant_valid_p (inside_init,
4505 TREE_TYPE (inside_init)))
4506 {
4507 error_init ("initializer element is not constant");
4508 inside_init = error_mark_node;
4509 }
4510
4511 /* Added to enable additional -Wmissing-format-attribute warnings. */
4512 if (TREE_CODE (TREE_TYPE (inside_init)) == POINTER_TYPE)
4513 inside_init = convert_for_assignment (type, inside_init, ic_init, NULL_TREE,
4514 NULL_TREE, 0);
4515 return inside_init;
4516 }
4517
4518 /* Handle scalar types, including conversions. */
4519
4520 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
4521 || code == ENUMERAL_TYPE || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
4522 || code == VECTOR_TYPE)
4523 {
4524 if (TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE
4525 && (TREE_CODE (init) == STRING_CST
4526 || TREE_CODE (init) == COMPOUND_LITERAL_EXPR))
4527 init = array_to_pointer_conversion (init);
4528 inside_init
4529 = convert_for_assignment (type, init, ic_init,
4530 NULL_TREE, NULL_TREE, 0);
4531
4532 /* Check to see if we have already given an error message. */
4533 if (inside_init == error_mark_node)
4534 ;
4535 else if (require_constant && !TREE_CONSTANT (inside_init))
4536 {
4537 error_init ("initializer element is not constant");
4538 inside_init = error_mark_node;
4539 }
4540 else if (require_constant
4541 && !initializer_constant_valid_p (inside_init,
4542 TREE_TYPE (inside_init)))
4543 {
4544 error_init ("initializer element is not computable at load time");
4545 inside_init = error_mark_node;
4546 }
4547
4548 return inside_init;
4549 }
4550
4551 /* Come here only for records and arrays. */
4552
4553 if (COMPLETE_TYPE_P (type) && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
4554 {
4555 error_init ("variable-sized object may not be initialized");
4556 return error_mark_node;
4557 }
4558
4559 error_init ("invalid initializer");
4560 return error_mark_node;
4561 }
4562 \f
4563 /* Handle initializers that use braces. */
4564
4565 /* Type of object we are accumulating a constructor for.
4566 This type is always a RECORD_TYPE, UNION_TYPE or ARRAY_TYPE. */
4567 static tree constructor_type;
4568
4569 /* For a RECORD_TYPE or UNION_TYPE, this is the chain of fields
4570 left to fill. */
4571 static tree constructor_fields;
4572
4573 /* For an ARRAY_TYPE, this is the specified index
4574 at which to store the next element we get. */
4575 static tree constructor_index;
4576
4577 /* For an ARRAY_TYPE, this is the maximum index. */
4578 static tree constructor_max_index;
4579
4580 /* For a RECORD_TYPE, this is the first field not yet written out. */
4581 static tree constructor_unfilled_fields;
4582
4583 /* For an ARRAY_TYPE, this is the index of the first element
4584 not yet written out. */
4585 static tree constructor_unfilled_index;
4586
4587 /* In a RECORD_TYPE, the byte index of the next consecutive field.
4588 This is so we can generate gaps between fields, when appropriate. */
4589 static tree constructor_bit_index;
4590
4591 /* If we are saving up the elements rather than allocating them,
4592 this is the list of elements so far (in reverse order,
4593 most recent first). */
4594 static VEC(constructor_elt,gc) *constructor_elements;
4595
4596 /* 1 if constructor should be incrementally stored into a constructor chain,
4597 0 if all the elements should be kept in AVL tree. */
4598 static int constructor_incremental;
4599
4600 /* 1 if so far this constructor's elements are all compile-time constants. */
4601 static int constructor_constant;
4602
4603 /* 1 if so far this constructor's elements are all valid address constants. */
4604 static int constructor_simple;
4605
4606 /* 1 if this constructor is erroneous so far. */
4607 static int constructor_erroneous;
4608
4609 /* Structure for managing pending initializer elements, organized as an
4610 AVL tree. */
4611
4612 struct init_node
4613 {
4614 struct init_node *left, *right;
4615 struct init_node *parent;
4616 int balance;
4617 tree purpose;
4618 tree value;
4619 };
4620
4621 /* Tree of pending elements at this constructor level.
4622 These are elements encountered out of order
4623 which belong at places we haven't reached yet in actually
4624 writing the output.
4625 Will never hold tree nodes across GC runs. */
4626 static struct init_node *constructor_pending_elts;
4627
4628 /* The SPELLING_DEPTH of this constructor. */
4629 static int constructor_depth;
4630
4631 /* DECL node for which an initializer is being read.
4632 0 means we are reading a constructor expression
4633 such as (struct foo) {...}. */
4634 static tree constructor_decl;
4635
4636 /* Nonzero if this is an initializer for a top-level decl. */
4637 static int constructor_top_level;
4638
4639 /* Nonzero if there were any member designators in this initializer. */
4640 static int constructor_designated;
4641
4642 /* Nesting depth of designator list. */
4643 static int designator_depth;
4644
4645 /* Nonzero if there were diagnosed errors in this designator list. */
4646 static int designator_errorneous;
4647
4648 \f
4649 /* This stack has a level for each implicit or explicit level of
4650 structuring in the initializer, including the outermost one. It
4651 saves the values of most of the variables above. */
4652
4653 struct constructor_range_stack;
4654
4655 struct constructor_stack
4656 {
4657 struct constructor_stack *next;
4658 tree type;
4659 tree fields;
4660 tree index;
4661 tree max_index;
4662 tree unfilled_index;
4663 tree unfilled_fields;
4664 tree bit_index;
4665 VEC(constructor_elt,gc) *elements;
4666 struct init_node *pending_elts;
4667 int offset;
4668 int depth;
4669 /* If value nonzero, this value should replace the entire
4670 constructor at this level. */
4671 struct c_expr replacement_value;
4672 struct constructor_range_stack *range_stack;
4673 char constant;
4674 char simple;
4675 char implicit;
4676 char erroneous;
4677 char outer;
4678 char incremental;
4679 char designated;
4680 };
4681
4682 static struct constructor_stack *constructor_stack;
4683
4684 /* This stack represents designators from some range designator up to
4685 the last designator in the list. */
4686
4687 struct constructor_range_stack
4688 {
4689 struct constructor_range_stack *next, *prev;
4690 struct constructor_stack *stack;
4691 tree range_start;
4692 tree index;
4693 tree range_end;
4694 tree fields;
4695 };
4696
4697 static struct constructor_range_stack *constructor_range_stack;
4698
4699 /* This stack records separate initializers that are nested.
4700 Nested initializers can't happen in ANSI C, but GNU C allows them
4701 in cases like { ... (struct foo) { ... } ... }. */
4702
4703 struct initializer_stack
4704 {
4705 struct initializer_stack *next;
4706 tree decl;
4707 struct constructor_stack *constructor_stack;
4708 struct constructor_range_stack *constructor_range_stack;
4709 VEC(constructor_elt,gc) *elements;
4710 struct spelling *spelling;
4711 struct spelling *spelling_base;
4712 int spelling_size;
4713 char top_level;
4714 char require_constant_value;
4715 char require_constant_elements;
4716 };
4717
4718 static struct initializer_stack *initializer_stack;
4719 \f
4720 /* Prepare to parse and output the initializer for variable DECL. */
4721
4722 void
4723 start_init (tree decl, tree asmspec_tree ATTRIBUTE_UNUSED, int top_level)
4724 {
4725 const char *locus;
4726 struct initializer_stack *p = xmalloc (sizeof (struct initializer_stack));
4727
4728 p->decl = constructor_decl;
4729 p->require_constant_value = require_constant_value;
4730 p->require_constant_elements = require_constant_elements;
4731 p->constructor_stack = constructor_stack;
4732 p->constructor_range_stack = constructor_range_stack;
4733 p->elements = constructor_elements;
4734 p->spelling = spelling;
4735 p->spelling_base = spelling_base;
4736 p->spelling_size = spelling_size;
4737 p->top_level = constructor_top_level;
4738 p->next = initializer_stack;
4739 initializer_stack = p;
4740
4741 constructor_decl = decl;
4742 constructor_designated = 0;
4743 constructor_top_level = top_level;
4744
4745 if (decl != 0 && decl != error_mark_node)
4746 {
4747 require_constant_value = TREE_STATIC (decl);
4748 require_constant_elements
4749 = ((TREE_STATIC (decl) || (pedantic && !flag_isoc99))
4750 /* For a scalar, you can always use any value to initialize,
4751 even within braces. */
4752 && (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
4753 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4754 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
4755 || TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE));
4756 locus = IDENTIFIER_POINTER (DECL_NAME (decl));
4757 }
4758 else
4759 {
4760 require_constant_value = 0;
4761 require_constant_elements = 0;
4762 locus = "(anonymous)";
4763 }
4764
4765 constructor_stack = 0;
4766 constructor_range_stack = 0;
4767
4768 missing_braces_mentioned = 0;
4769
4770 spelling_base = 0;
4771 spelling_size = 0;
4772 RESTORE_SPELLING_DEPTH (0);
4773
4774 if (locus)
4775 push_string (locus);
4776 }
4777
4778 void
4779 finish_init (void)
4780 {
4781 struct initializer_stack *p = initializer_stack;
4782
4783 /* Free the whole constructor stack of this initializer. */
4784 while (constructor_stack)
4785 {
4786 struct constructor_stack *q = constructor_stack;
4787 constructor_stack = q->next;
4788 free (q);
4789 }
4790
4791 gcc_assert (!constructor_range_stack);
4792
4793 /* Pop back to the data of the outer initializer (if any). */
4794 free (spelling_base);
4795
4796 constructor_decl = p->decl;
4797 require_constant_value = p->require_constant_value;
4798 require_constant_elements = p->require_constant_elements;
4799 constructor_stack = p->constructor_stack;
4800 constructor_range_stack = p->constructor_range_stack;
4801 constructor_elements = p->elements;
4802 spelling = p->spelling;
4803 spelling_base = p->spelling_base;
4804 spelling_size = p->spelling_size;
4805 constructor_top_level = p->top_level;
4806 initializer_stack = p->next;
4807 free (p);
4808 }
4809 \f
4810 /* Call here when we see the initializer is surrounded by braces.
4811 This is instead of a call to push_init_level;
4812 it is matched by a call to pop_init_level.
4813
4814 TYPE is the type to initialize, for a constructor expression.
4815 For an initializer for a decl, TYPE is zero. */
4816
4817 void
4818 really_start_incremental_init (tree type)
4819 {
4820 struct constructor_stack *p = XNEW (struct constructor_stack);
4821
4822 if (type == 0)
4823 type = TREE_TYPE (constructor_decl);
4824
4825 if (targetm.vector_opaque_p (type))
4826 error ("opaque vector types cannot be initialized");
4827
4828 p->type = constructor_type;
4829 p->fields = constructor_fields;
4830 p->index = constructor_index;
4831 p->max_index = constructor_max_index;
4832 p->unfilled_index = constructor_unfilled_index;
4833 p->unfilled_fields = constructor_unfilled_fields;
4834 p->bit_index = constructor_bit_index;
4835 p->elements = constructor_elements;
4836 p->constant = constructor_constant;
4837 p->simple = constructor_simple;
4838 p->erroneous = constructor_erroneous;
4839 p->pending_elts = constructor_pending_elts;
4840 p->depth = constructor_depth;
4841 p->replacement_value.value = 0;
4842 p->replacement_value.original_code = ERROR_MARK;
4843 p->implicit = 0;
4844 p->range_stack = 0;
4845 p->outer = 0;
4846 p->incremental = constructor_incremental;
4847 p->designated = constructor_designated;
4848 p->next = 0;
4849 constructor_stack = p;
4850
4851 constructor_constant = 1;
4852 constructor_simple = 1;
4853 constructor_depth = SPELLING_DEPTH ();
4854 constructor_elements = 0;
4855 constructor_pending_elts = 0;
4856 constructor_type = type;
4857 constructor_incremental = 1;
4858 constructor_designated = 0;
4859 designator_depth = 0;
4860 designator_errorneous = 0;
4861
4862 if (TREE_CODE (constructor_type) == RECORD_TYPE
4863 || TREE_CODE (constructor_type) == UNION_TYPE)
4864 {
4865 constructor_fields = TYPE_FIELDS (constructor_type);
4866 /* Skip any nameless bit fields at the beginning. */
4867 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
4868 && DECL_NAME (constructor_fields) == 0)
4869 constructor_fields = TREE_CHAIN (constructor_fields);
4870
4871 constructor_unfilled_fields = constructor_fields;
4872 constructor_bit_index = bitsize_zero_node;
4873 }
4874 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4875 {
4876 if (TYPE_DOMAIN (constructor_type))
4877 {
4878 constructor_max_index
4879 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
4880
4881 /* Detect non-empty initializations of zero-length arrays. */
4882 if (constructor_max_index == NULL_TREE
4883 && TYPE_SIZE (constructor_type))
4884 constructor_max_index = build_int_cst (NULL_TREE, -1);
4885
4886 /* constructor_max_index needs to be an INTEGER_CST. Attempts
4887 to initialize VLAs will cause a proper error; avoid tree
4888 checking errors as well by setting a safe value. */
4889 if (constructor_max_index
4890 && TREE_CODE (constructor_max_index) != INTEGER_CST)
4891 constructor_max_index = build_int_cst (NULL_TREE, -1);
4892
4893 constructor_index
4894 = convert (bitsizetype,
4895 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
4896 }
4897 else
4898 {
4899 constructor_index = bitsize_zero_node;
4900 constructor_max_index = NULL_TREE;
4901 }
4902
4903 constructor_unfilled_index = constructor_index;
4904 }
4905 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
4906 {
4907 /* Vectors are like simple fixed-size arrays. */
4908 constructor_max_index =
4909 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
4910 constructor_index = convert (bitsizetype, bitsize_zero_node);
4911 constructor_unfilled_index = constructor_index;
4912 }
4913 else
4914 {
4915 /* Handle the case of int x = {5}; */
4916 constructor_fields = constructor_type;
4917 constructor_unfilled_fields = constructor_type;
4918 }
4919 }
4920 \f
4921 /* Push down into a subobject, for initialization.
4922 If this is for an explicit set of braces, IMPLICIT is 0.
4923 If it is because the next element belongs at a lower level,
4924 IMPLICIT is 1 (or 2 if the push is because of designator list). */
4925
4926 void
4927 push_init_level (int implicit)
4928 {
4929 struct constructor_stack *p;
4930 tree value = NULL_TREE;
4931
4932 /* If we've exhausted any levels that didn't have braces,
4933 pop them now. If implicit == 1, this will have been done in
4934 process_init_element; do not repeat it here because in the case
4935 of excess initializers for an empty aggregate this leads to an
4936 infinite cycle of popping a level and immediately recreating
4937 it. */
4938 if (implicit != 1)
4939 {
4940 while (constructor_stack->implicit)
4941 {
4942 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4943 || TREE_CODE (constructor_type) == UNION_TYPE)
4944 && constructor_fields == 0)
4945 process_init_element (pop_init_level (1));
4946 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
4947 && constructor_max_index
4948 && tree_int_cst_lt (constructor_max_index,
4949 constructor_index))
4950 process_init_element (pop_init_level (1));
4951 else
4952 break;
4953 }
4954 }
4955
4956 /* Unless this is an explicit brace, we need to preserve previous
4957 content if any. */
4958 if (implicit)
4959 {
4960 if ((TREE_CODE (constructor_type) == RECORD_TYPE
4961 || TREE_CODE (constructor_type) == UNION_TYPE)
4962 && constructor_fields)
4963 value = find_init_member (constructor_fields);
4964 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
4965 value = find_init_member (constructor_index);
4966 }
4967
4968 p = XNEW (struct constructor_stack);
4969 p->type = constructor_type;
4970 p->fields = constructor_fields;
4971 p->index = constructor_index;
4972 p->max_index = constructor_max_index;
4973 p->unfilled_index = constructor_unfilled_index;
4974 p->unfilled_fields = constructor_unfilled_fields;
4975 p->bit_index = constructor_bit_index;
4976 p->elements = constructor_elements;
4977 p->constant = constructor_constant;
4978 p->simple = constructor_simple;
4979 p->erroneous = constructor_erroneous;
4980 p->pending_elts = constructor_pending_elts;
4981 p->depth = constructor_depth;
4982 p->replacement_value.value = 0;
4983 p->replacement_value.original_code = ERROR_MARK;
4984 p->implicit = implicit;
4985 p->outer = 0;
4986 p->incremental = constructor_incremental;
4987 p->designated = constructor_designated;
4988 p->next = constructor_stack;
4989 p->range_stack = 0;
4990 constructor_stack = p;
4991
4992 constructor_constant = 1;
4993 constructor_simple = 1;
4994 constructor_depth = SPELLING_DEPTH ();
4995 constructor_elements = 0;
4996 constructor_incremental = 1;
4997 constructor_designated = 0;
4998 constructor_pending_elts = 0;
4999 if (!implicit)
5000 {
5001 p->range_stack = constructor_range_stack;
5002 constructor_range_stack = 0;
5003 designator_depth = 0;
5004 designator_errorneous = 0;
5005 }
5006
5007 /* Don't die if an entire brace-pair level is superfluous
5008 in the containing level. */
5009 if (constructor_type == 0)
5010 ;
5011 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5012 || TREE_CODE (constructor_type) == UNION_TYPE)
5013 {
5014 /* Don't die if there are extra init elts at the end. */
5015 if (constructor_fields == 0)
5016 constructor_type = 0;
5017 else
5018 {
5019 constructor_type = TREE_TYPE (constructor_fields);
5020 push_member_name (constructor_fields);
5021 constructor_depth++;
5022 }
5023 }
5024 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5025 {
5026 constructor_type = TREE_TYPE (constructor_type);
5027 push_array_bounds (tree_low_cst (constructor_index, 0));
5028 constructor_depth++;
5029 }
5030
5031 if (constructor_type == 0)
5032 {
5033 error_init ("extra brace group at end of initializer");
5034 constructor_fields = 0;
5035 constructor_unfilled_fields = 0;
5036 return;
5037 }
5038
5039 if (value && TREE_CODE (value) == CONSTRUCTOR)
5040 {
5041 constructor_constant = TREE_CONSTANT (value);
5042 constructor_simple = TREE_STATIC (value);
5043 constructor_elements = CONSTRUCTOR_ELTS (value);
5044 if (!VEC_empty (constructor_elt, constructor_elements)
5045 && (TREE_CODE (constructor_type) == RECORD_TYPE
5046 || TREE_CODE (constructor_type) == ARRAY_TYPE))
5047 set_nonincremental_init ();
5048 }
5049
5050 if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
5051 {
5052 missing_braces_mentioned = 1;
5053 warning_init ("missing braces around initializer");
5054 }
5055
5056 if (TREE_CODE (constructor_type) == RECORD_TYPE
5057 || TREE_CODE (constructor_type) == UNION_TYPE)
5058 {
5059 constructor_fields = TYPE_FIELDS (constructor_type);
5060 /* Skip any nameless bit fields at the beginning. */
5061 while (constructor_fields != 0 && DECL_C_BIT_FIELD (constructor_fields)
5062 && DECL_NAME (constructor_fields) == 0)
5063 constructor_fields = TREE_CHAIN (constructor_fields);
5064
5065 constructor_unfilled_fields = constructor_fields;
5066 constructor_bit_index = bitsize_zero_node;
5067 }
5068 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
5069 {
5070 /* Vectors are like simple fixed-size arrays. */
5071 constructor_max_index =
5072 build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (constructor_type) - 1);
5073 constructor_index = convert (bitsizetype, integer_zero_node);
5074 constructor_unfilled_index = constructor_index;
5075 }
5076 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5077 {
5078 if (TYPE_DOMAIN (constructor_type))
5079 {
5080 constructor_max_index
5081 = TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type));
5082
5083 /* Detect non-empty initializations of zero-length arrays. */
5084 if (constructor_max_index == NULL_TREE
5085 && TYPE_SIZE (constructor_type))
5086 constructor_max_index = build_int_cst (NULL_TREE, -1);
5087
5088 /* constructor_max_index needs to be an INTEGER_CST. Attempts
5089 to initialize VLAs will cause a proper error; avoid tree
5090 checking errors as well by setting a safe value. */
5091 if (constructor_max_index
5092 && TREE_CODE (constructor_max_index) != INTEGER_CST)
5093 constructor_max_index = build_int_cst (NULL_TREE, -1);
5094
5095 constructor_index
5096 = convert (bitsizetype,
5097 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5098 }
5099 else
5100 constructor_index = bitsize_zero_node;
5101
5102 constructor_unfilled_index = constructor_index;
5103 if (value && TREE_CODE (value) == STRING_CST)
5104 {
5105 /* We need to split the char/wchar array into individual
5106 characters, so that we don't have to special case it
5107 everywhere. */
5108 set_nonincremental_init_from_string (value);
5109 }
5110 }
5111 else
5112 {
5113 if (constructor_type != error_mark_node)
5114 warning_init ("braces around scalar initializer");
5115 constructor_fields = constructor_type;
5116 constructor_unfilled_fields = constructor_type;
5117 }
5118 }
5119
5120 /* At the end of an implicit or explicit brace level,
5121 finish up that level of constructor. If a single expression
5122 with redundant braces initialized that level, return the
5123 c_expr structure for that expression. Otherwise, the original_code
5124 element is set to ERROR_MARK.
5125 If we were outputting the elements as they are read, return 0 as the value
5126 from inner levels (process_init_element ignores that),
5127 but return error_mark_node as the value from the outermost level
5128 (that's what we want to put in DECL_INITIAL).
5129 Otherwise, return a CONSTRUCTOR expression as the value. */
5130
5131 struct c_expr
5132 pop_init_level (int implicit)
5133 {
5134 struct constructor_stack *p;
5135 struct c_expr ret;
5136 ret.value = 0;
5137 ret.original_code = ERROR_MARK;
5138
5139 if (implicit == 0)
5140 {
5141 /* When we come to an explicit close brace,
5142 pop any inner levels that didn't have explicit braces. */
5143 while (constructor_stack->implicit)
5144 process_init_element (pop_init_level (1));
5145
5146 gcc_assert (!constructor_range_stack);
5147 }
5148
5149 /* Now output all pending elements. */
5150 constructor_incremental = 1;
5151 output_pending_init_elements (1);
5152
5153 p = constructor_stack;
5154
5155 /* Error for initializing a flexible array member, or a zero-length
5156 array member in an inappropriate context. */
5157 if (constructor_type && constructor_fields
5158 && TREE_CODE (constructor_type) == ARRAY_TYPE
5159 && TYPE_DOMAIN (constructor_type)
5160 && !TYPE_MAX_VALUE (TYPE_DOMAIN (constructor_type)))
5161 {
5162 /* Silently discard empty initializations. The parser will
5163 already have pedwarned for empty brackets. */
5164 if (integer_zerop (constructor_unfilled_index))
5165 constructor_type = NULL_TREE;
5166 else
5167 {
5168 gcc_assert (!TYPE_SIZE (constructor_type));
5169
5170 if (constructor_depth > 2)
5171 error_init ("initialization of flexible array member in a nested context");
5172 else if (pedantic)
5173 pedwarn_init ("initialization of a flexible array member");
5174
5175 /* We have already issued an error message for the existence
5176 of a flexible array member not at the end of the structure.
5177 Discard the initializer so that we do not die later. */
5178 if (TREE_CHAIN (constructor_fields) != NULL_TREE)
5179 constructor_type = NULL_TREE;
5180 }
5181 }
5182
5183 /* Warn when some struct elements are implicitly initialized to zero. */
5184 if (warn_missing_field_initializers
5185 && constructor_type
5186 && TREE_CODE (constructor_type) == RECORD_TYPE
5187 && constructor_unfilled_fields)
5188 {
5189 /* Do not warn for flexible array members or zero-length arrays. */
5190 while (constructor_unfilled_fields
5191 && (!DECL_SIZE (constructor_unfilled_fields)
5192 || integer_zerop (DECL_SIZE (constructor_unfilled_fields))))
5193 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5194
5195 /* Do not warn if this level of the initializer uses member
5196 designators; it is likely to be deliberate. */
5197 if (constructor_unfilled_fields && !constructor_designated)
5198 {
5199 push_member_name (constructor_unfilled_fields);
5200 warning_init ("missing initializer");
5201 RESTORE_SPELLING_DEPTH (constructor_depth);
5202 }
5203 }
5204
5205 /* Pad out the end of the structure. */
5206 if (p->replacement_value.value)
5207 /* If this closes a superfluous brace pair,
5208 just pass out the element between them. */
5209 ret = p->replacement_value;
5210 else if (constructor_type == 0)
5211 ;
5212 else if (TREE_CODE (constructor_type) != RECORD_TYPE
5213 && TREE_CODE (constructor_type) != UNION_TYPE
5214 && TREE_CODE (constructor_type) != ARRAY_TYPE
5215 && TREE_CODE (constructor_type) != VECTOR_TYPE)
5216 {
5217 /* A nonincremental scalar initializer--just return
5218 the element, after verifying there is just one. */
5219 if (VEC_empty (constructor_elt,constructor_elements))
5220 {
5221 if (!constructor_erroneous)
5222 error_init ("empty scalar initializer");
5223 ret.value = error_mark_node;
5224 }
5225 else if (VEC_length (constructor_elt,constructor_elements) != 1)
5226 {
5227 error_init ("extra elements in scalar initializer");
5228 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
5229 }
5230 else
5231 ret.value = VEC_index (constructor_elt,constructor_elements,0)->value;
5232 }
5233 else
5234 {
5235 if (constructor_erroneous)
5236 ret.value = error_mark_node;
5237 else
5238 {
5239 ret.value = build_constructor (constructor_type,
5240 constructor_elements);
5241 if (constructor_constant)
5242 TREE_CONSTANT (ret.value) = TREE_INVARIANT (ret.value) = 1;
5243 if (constructor_constant && constructor_simple)
5244 TREE_STATIC (ret.value) = 1;
5245 }
5246 }
5247
5248 constructor_type = p->type;
5249 constructor_fields = p->fields;
5250 constructor_index = p->index;
5251 constructor_max_index = p->max_index;
5252 constructor_unfilled_index = p->unfilled_index;
5253 constructor_unfilled_fields = p->unfilled_fields;
5254 constructor_bit_index = p->bit_index;
5255 constructor_elements = p->elements;
5256 constructor_constant = p->constant;
5257 constructor_simple = p->simple;
5258 constructor_erroneous = p->erroneous;
5259 constructor_incremental = p->incremental;
5260 constructor_designated = p->designated;
5261 constructor_pending_elts = p->pending_elts;
5262 constructor_depth = p->depth;
5263 if (!p->implicit)
5264 constructor_range_stack = p->range_stack;
5265 RESTORE_SPELLING_DEPTH (constructor_depth);
5266
5267 constructor_stack = p->next;
5268 free (p);
5269
5270 if (ret.value == 0)
5271 {
5272 if (constructor_stack == 0)
5273 {
5274 ret.value = error_mark_node;
5275 return ret;
5276 }
5277 return ret;
5278 }
5279 return ret;
5280 }
5281
5282 /* Common handling for both array range and field name designators.
5283 ARRAY argument is nonzero for array ranges. Returns zero for success. */
5284
5285 static int
5286 set_designator (int array)
5287 {
5288 tree subtype;
5289 enum tree_code subcode;
5290
5291 /* Don't die if an entire brace-pair level is superfluous
5292 in the containing level. */
5293 if (constructor_type == 0)
5294 return 1;
5295
5296 /* If there were errors in this designator list already, bail out
5297 silently. */
5298 if (designator_errorneous)
5299 return 1;
5300
5301 if (!designator_depth)
5302 {
5303 gcc_assert (!constructor_range_stack);
5304
5305 /* Designator list starts at the level of closest explicit
5306 braces. */
5307 while (constructor_stack->implicit)
5308 process_init_element (pop_init_level (1));
5309 constructor_designated = 1;
5310 return 0;
5311 }
5312
5313 switch (TREE_CODE (constructor_type))
5314 {
5315 case RECORD_TYPE:
5316 case UNION_TYPE:
5317 subtype = TREE_TYPE (constructor_fields);
5318 if (subtype != error_mark_node)
5319 subtype = TYPE_MAIN_VARIANT (subtype);
5320 break;
5321 case ARRAY_TYPE:
5322 subtype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
5323 break;
5324 default:
5325 gcc_unreachable ();
5326 }
5327
5328 subcode = TREE_CODE (subtype);
5329 if (array && subcode != ARRAY_TYPE)
5330 {
5331 error_init ("array index in non-array initializer");
5332 return 1;
5333 }
5334 else if (!array && subcode != RECORD_TYPE && subcode != UNION_TYPE)
5335 {
5336 error_init ("field name not in record or union initializer");
5337 return 1;
5338 }
5339
5340 constructor_designated = 1;
5341 push_init_level (2);
5342 return 0;
5343 }
5344
5345 /* If there are range designators in designator list, push a new designator
5346 to constructor_range_stack. RANGE_END is end of such stack range or
5347 NULL_TREE if there is no range designator at this level. */
5348
5349 static void
5350 push_range_stack (tree range_end)
5351 {
5352 struct constructor_range_stack *p;
5353
5354 p = GGC_NEW (struct constructor_range_stack);
5355 p->prev = constructor_range_stack;
5356 p->next = 0;
5357 p->fields = constructor_fields;
5358 p->range_start = constructor_index;
5359 p->index = constructor_index;
5360 p->stack = constructor_stack;
5361 p->range_end = range_end;
5362 if (constructor_range_stack)
5363 constructor_range_stack->next = p;
5364 constructor_range_stack = p;
5365 }
5366
5367 /* Within an array initializer, specify the next index to be initialized.
5368 FIRST is that index. If LAST is nonzero, then initialize a range
5369 of indices, running from FIRST through LAST. */
5370
5371 void
5372 set_init_index (tree first, tree last)
5373 {
5374 if (set_designator (1))
5375 return;
5376
5377 designator_errorneous = 1;
5378
5379 if (!INTEGRAL_TYPE_P (TREE_TYPE (first))
5380 || (last && !INTEGRAL_TYPE_P (TREE_TYPE (last))))
5381 {
5382 error_init ("array index in initializer not of integer type");
5383 return;
5384 }
5385
5386 if (TREE_CODE (first) != INTEGER_CST)
5387 error_init ("nonconstant array index in initializer");
5388 else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
5389 error_init ("nonconstant array index in initializer");
5390 else if (TREE_CODE (constructor_type) != ARRAY_TYPE)
5391 error_init ("array index in non-array initializer");
5392 else if (tree_int_cst_sgn (first) == -1)
5393 error_init ("array index in initializer exceeds array bounds");
5394 else if (constructor_max_index
5395 && tree_int_cst_lt (constructor_max_index, first))
5396 error_init ("array index in initializer exceeds array bounds");
5397 else
5398 {
5399 constructor_index = convert (bitsizetype, first);
5400
5401 if (last)
5402 {
5403 if (tree_int_cst_equal (first, last))
5404 last = 0;
5405 else if (tree_int_cst_lt (last, first))
5406 {
5407 error_init ("empty index range in initializer");
5408 last = 0;
5409 }
5410 else
5411 {
5412 last = convert (bitsizetype, last);
5413 if (constructor_max_index != 0
5414 && tree_int_cst_lt (constructor_max_index, last))
5415 {
5416 error_init ("array index range in initializer exceeds array bounds");
5417 last = 0;
5418 }
5419 }
5420 }
5421
5422 designator_depth++;
5423 designator_errorneous = 0;
5424 if (constructor_range_stack || last)
5425 push_range_stack (last);
5426 }
5427 }
5428
5429 /* Within a struct initializer, specify the next field to be initialized. */
5430
5431 void
5432 set_init_label (tree fieldname)
5433 {
5434 tree tail;
5435
5436 if (set_designator (0))
5437 return;
5438
5439 designator_errorneous = 1;
5440
5441 if (TREE_CODE (constructor_type) != RECORD_TYPE
5442 && TREE_CODE (constructor_type) != UNION_TYPE)
5443 {
5444 error_init ("field name not in record or union initializer");
5445 return;
5446 }
5447
5448 for (tail = TYPE_FIELDS (constructor_type); tail;
5449 tail = TREE_CHAIN (tail))
5450 {
5451 if (DECL_NAME (tail) == fieldname)
5452 break;
5453 }
5454
5455 if (tail == 0)
5456 error ("unknown field %qE specified in initializer", fieldname);
5457 else
5458 {
5459 constructor_fields = tail;
5460 designator_depth++;
5461 designator_errorneous = 0;
5462 if (constructor_range_stack)
5463 push_range_stack (NULL_TREE);
5464 }
5465 }
5466 \f
5467 /* Add a new initializer to the tree of pending initializers. PURPOSE
5468 identifies the initializer, either array index or field in a structure.
5469 VALUE is the value of that index or field. */
5470
5471 static void
5472 add_pending_init (tree purpose, tree value)
5473 {
5474 struct init_node *p, **q, *r;
5475
5476 q = &constructor_pending_elts;
5477 p = 0;
5478
5479 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5480 {
5481 while (*q != 0)
5482 {
5483 p = *q;
5484 if (tree_int_cst_lt (purpose, p->purpose))
5485 q = &p->left;
5486 else if (tree_int_cst_lt (p->purpose, purpose))
5487 q = &p->right;
5488 else
5489 {
5490 if (TREE_SIDE_EFFECTS (p->value))
5491 warning_init ("initialized field with side-effects overwritten");
5492 p->value = value;
5493 return;
5494 }
5495 }
5496 }
5497 else
5498 {
5499 tree bitpos;
5500
5501 bitpos = bit_position (purpose);
5502 while (*q != NULL)
5503 {
5504 p = *q;
5505 if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5506 q = &p->left;
5507 else if (p->purpose != purpose)
5508 q = &p->right;
5509 else
5510 {
5511 if (TREE_SIDE_EFFECTS (p->value))
5512 warning_init ("initialized field with side-effects overwritten");
5513 p->value = value;
5514 return;
5515 }
5516 }
5517 }
5518
5519 r = GGC_NEW (struct init_node);
5520 r->purpose = purpose;
5521 r->value = value;
5522
5523 *q = r;
5524 r->parent = p;
5525 r->left = 0;
5526 r->right = 0;
5527 r->balance = 0;
5528
5529 while (p)
5530 {
5531 struct init_node *s;
5532
5533 if (r == p->left)
5534 {
5535 if (p->balance == 0)
5536 p->balance = -1;
5537 else if (p->balance < 0)
5538 {
5539 if (r->balance < 0)
5540 {
5541 /* L rotation. */
5542 p->left = r->right;
5543 if (p->left)
5544 p->left->parent = p;
5545 r->right = p;
5546
5547 p->balance = 0;
5548 r->balance = 0;
5549
5550 s = p->parent;
5551 p->parent = r;
5552 r->parent = s;
5553 if (s)
5554 {
5555 if (s->left == p)
5556 s->left = r;
5557 else
5558 s->right = r;
5559 }
5560 else
5561 constructor_pending_elts = r;
5562 }
5563 else
5564 {
5565 /* LR rotation. */
5566 struct init_node *t = r->right;
5567
5568 r->right = t->left;
5569 if (r->right)
5570 r->right->parent = r;
5571 t->left = r;
5572
5573 p->left = t->right;
5574 if (p->left)
5575 p->left->parent = p;
5576 t->right = p;
5577
5578 p->balance = t->balance < 0;
5579 r->balance = -(t->balance > 0);
5580 t->balance = 0;
5581
5582 s = p->parent;
5583 p->parent = t;
5584 r->parent = t;
5585 t->parent = s;
5586 if (s)
5587 {
5588 if (s->left == p)
5589 s->left = t;
5590 else
5591 s->right = t;
5592 }
5593 else
5594 constructor_pending_elts = t;
5595 }
5596 break;
5597 }
5598 else
5599 {
5600 /* p->balance == +1; growth of left side balances the node. */
5601 p->balance = 0;
5602 break;
5603 }
5604 }
5605 else /* r == p->right */
5606 {
5607 if (p->balance == 0)
5608 /* Growth propagation from right side. */
5609 p->balance++;
5610 else if (p->balance > 0)
5611 {
5612 if (r->balance > 0)
5613 {
5614 /* R rotation. */
5615 p->right = r->left;
5616 if (p->right)
5617 p->right->parent = p;
5618 r->left = p;
5619
5620 p->balance = 0;
5621 r->balance = 0;
5622
5623 s = p->parent;
5624 p->parent = r;
5625 r->parent = s;
5626 if (s)
5627 {
5628 if (s->left == p)
5629 s->left = r;
5630 else
5631 s->right = r;
5632 }
5633 else
5634 constructor_pending_elts = r;
5635 }
5636 else /* r->balance == -1 */
5637 {
5638 /* RL rotation */
5639 struct init_node *t = r->left;
5640
5641 r->left = t->right;
5642 if (r->left)
5643 r->left->parent = r;
5644 t->right = r;
5645
5646 p->right = t->left;
5647 if (p->right)
5648 p->right->parent = p;
5649 t->left = p;
5650
5651 r->balance = (t->balance < 0);
5652 p->balance = -(t->balance > 0);
5653 t->balance = 0;
5654
5655 s = p->parent;
5656 p->parent = t;
5657 r->parent = t;
5658 t->parent = s;
5659 if (s)
5660 {
5661 if (s->left == p)
5662 s->left = t;
5663 else
5664 s->right = t;
5665 }
5666 else
5667 constructor_pending_elts = t;
5668 }
5669 break;
5670 }
5671 else
5672 {
5673 /* p->balance == -1; growth of right side balances the node. */
5674 p->balance = 0;
5675 break;
5676 }
5677 }
5678
5679 r = p;
5680 p = p->parent;
5681 }
5682 }
5683
5684 /* Build AVL tree from a sorted chain. */
5685
5686 static void
5687 set_nonincremental_init (void)
5688 {
5689 unsigned HOST_WIDE_INT ix;
5690 tree index, value;
5691
5692 if (TREE_CODE (constructor_type) != RECORD_TYPE
5693 && TREE_CODE (constructor_type) != ARRAY_TYPE)
5694 return;
5695
5696 FOR_EACH_CONSTRUCTOR_ELT (constructor_elements, ix, index, value)
5697 add_pending_init (index, value);
5698 constructor_elements = 0;
5699 if (TREE_CODE (constructor_type) == RECORD_TYPE)
5700 {
5701 constructor_unfilled_fields = TYPE_FIELDS (constructor_type);
5702 /* Skip any nameless bit fields at the beginning. */
5703 while (constructor_unfilled_fields != 0
5704 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
5705 && DECL_NAME (constructor_unfilled_fields) == 0)
5706 constructor_unfilled_fields = TREE_CHAIN (constructor_unfilled_fields);
5707
5708 }
5709 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5710 {
5711 if (TYPE_DOMAIN (constructor_type))
5712 constructor_unfilled_index
5713 = convert (bitsizetype,
5714 TYPE_MIN_VALUE (TYPE_DOMAIN (constructor_type)));
5715 else
5716 constructor_unfilled_index = bitsize_zero_node;
5717 }
5718 constructor_incremental = 0;
5719 }
5720
5721 /* Build AVL tree from a string constant. */
5722
5723 static void
5724 set_nonincremental_init_from_string (tree str)
5725 {
5726 tree value, purpose, type;
5727 HOST_WIDE_INT val[2];
5728 const char *p, *end;
5729 int byte, wchar_bytes, charwidth, bitpos;
5730
5731 gcc_assert (TREE_CODE (constructor_type) == ARRAY_TYPE);
5732
5733 if (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5734 == TYPE_PRECISION (char_type_node))
5735 wchar_bytes = 1;
5736 else
5737 {
5738 gcc_assert (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (str)))
5739 == TYPE_PRECISION (wchar_type_node));
5740 wchar_bytes = TYPE_PRECISION (wchar_type_node) / BITS_PER_UNIT;
5741 }
5742 charwidth = TYPE_PRECISION (char_type_node);
5743 type = TREE_TYPE (constructor_type);
5744 p = TREE_STRING_POINTER (str);
5745 end = p + TREE_STRING_LENGTH (str);
5746
5747 for (purpose = bitsize_zero_node;
5748 p < end && !tree_int_cst_lt (constructor_max_index, purpose);
5749 purpose = size_binop (PLUS_EXPR, purpose, bitsize_one_node))
5750 {
5751 if (wchar_bytes == 1)
5752 {
5753 val[1] = (unsigned char) *p++;
5754 val[0] = 0;
5755 }
5756 else
5757 {
5758 val[0] = 0;
5759 val[1] = 0;
5760 for (byte = 0; byte < wchar_bytes; byte++)
5761 {
5762 if (BYTES_BIG_ENDIAN)
5763 bitpos = (wchar_bytes - byte - 1) * charwidth;
5764 else
5765 bitpos = byte * charwidth;
5766 val[bitpos < HOST_BITS_PER_WIDE_INT]
5767 |= ((unsigned HOST_WIDE_INT) ((unsigned char) *p++))
5768 << (bitpos % HOST_BITS_PER_WIDE_INT);
5769 }
5770 }
5771
5772 if (!TYPE_UNSIGNED (type))
5773 {
5774 bitpos = ((wchar_bytes - 1) * charwidth) + HOST_BITS_PER_CHAR;
5775 if (bitpos < HOST_BITS_PER_WIDE_INT)
5776 {
5777 if (val[1] & (((HOST_WIDE_INT) 1) << (bitpos - 1)))
5778 {
5779 val[1] |= ((HOST_WIDE_INT) -1) << bitpos;
5780 val[0] = -1;
5781 }
5782 }
5783 else if (bitpos == HOST_BITS_PER_WIDE_INT)
5784 {
5785 if (val[1] < 0)
5786 val[0] = -1;
5787 }
5788 else if (val[0] & (((HOST_WIDE_INT) 1)
5789 << (bitpos - 1 - HOST_BITS_PER_WIDE_INT)))
5790 val[0] |= ((HOST_WIDE_INT) -1)
5791 << (bitpos - HOST_BITS_PER_WIDE_INT);
5792 }
5793
5794 value = build_int_cst_wide (type, val[1], val[0]);
5795 add_pending_init (purpose, value);
5796 }
5797
5798 constructor_incremental = 0;
5799 }
5800
5801 /* Return value of FIELD in pending initializer or zero if the field was
5802 not initialized yet. */
5803
5804 static tree
5805 find_init_member (tree field)
5806 {
5807 struct init_node *p;
5808
5809 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5810 {
5811 if (constructor_incremental
5812 && tree_int_cst_lt (field, constructor_unfilled_index))
5813 set_nonincremental_init ();
5814
5815 p = constructor_pending_elts;
5816 while (p)
5817 {
5818 if (tree_int_cst_lt (field, p->purpose))
5819 p = p->left;
5820 else if (tree_int_cst_lt (p->purpose, field))
5821 p = p->right;
5822 else
5823 return p->value;
5824 }
5825 }
5826 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
5827 {
5828 tree bitpos = bit_position (field);
5829
5830 if (constructor_incremental
5831 && (!constructor_unfilled_fields
5832 || tree_int_cst_lt (bitpos,
5833 bit_position (constructor_unfilled_fields))))
5834 set_nonincremental_init ();
5835
5836 p = constructor_pending_elts;
5837 while (p)
5838 {
5839 if (field == p->purpose)
5840 return p->value;
5841 else if (tree_int_cst_lt (bitpos, bit_position (p->purpose)))
5842 p = p->left;
5843 else
5844 p = p->right;
5845 }
5846 }
5847 else if (TREE_CODE (constructor_type) == UNION_TYPE)
5848 {
5849 if (!VEC_empty (constructor_elt, constructor_elements)
5850 && (VEC_last (constructor_elt, constructor_elements)->index
5851 == field))
5852 return VEC_last (constructor_elt, constructor_elements)->value;
5853 }
5854 return 0;
5855 }
5856
5857 /* "Output" the next constructor element.
5858 At top level, really output it to assembler code now.
5859 Otherwise, collect it in a list from which we will make a CONSTRUCTOR.
5860 TYPE is the data type that the containing data type wants here.
5861 FIELD is the field (a FIELD_DECL) or the index that this element fills.
5862 If VALUE is a string constant, STRICT_STRING is true if it is
5863 unparenthesized or we should not warn here for it being parenthesized.
5864 For other types of VALUE, STRICT_STRING is not used.
5865
5866 PENDING if non-nil means output pending elements that belong
5867 right after this element. (PENDING is normally 1;
5868 it is 0 while outputting pending elements, to avoid recursion.) */
5869
5870 static void
5871 output_init_element (tree value, bool strict_string, tree type, tree field,
5872 int pending)
5873 {
5874 constructor_elt *celt;
5875
5876 if (type == error_mark_node || value == error_mark_node)
5877 {
5878 constructor_erroneous = 1;
5879 return;
5880 }
5881 if (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
5882 && (TREE_CODE (value) == STRING_CST
5883 || TREE_CODE (value) == COMPOUND_LITERAL_EXPR)
5884 && !(TREE_CODE (value) == STRING_CST
5885 && TREE_CODE (type) == ARRAY_TYPE
5886 && INTEGRAL_TYPE_P (TREE_TYPE (type)))
5887 && !comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (value)),
5888 TYPE_MAIN_VARIANT (type)))
5889 value = array_to_pointer_conversion (value);
5890
5891 if (TREE_CODE (value) == COMPOUND_LITERAL_EXPR
5892 && require_constant_value && !flag_isoc99 && pending)
5893 {
5894 /* As an extension, allow initializing objects with static storage
5895 duration with compound literals (which are then treated just as
5896 the brace enclosed list they contain). */
5897 tree decl = COMPOUND_LITERAL_EXPR_DECL (value);
5898 value = DECL_INITIAL (decl);
5899 }
5900
5901 if (value == error_mark_node)
5902 constructor_erroneous = 1;
5903 else if (!TREE_CONSTANT (value))
5904 constructor_constant = 0;
5905 else if (!initializer_constant_valid_p (value, TREE_TYPE (value))
5906 || ((TREE_CODE (constructor_type) == RECORD_TYPE
5907 || TREE_CODE (constructor_type) == UNION_TYPE)
5908 && DECL_C_BIT_FIELD (field)
5909 && TREE_CODE (value) != INTEGER_CST))
5910 constructor_simple = 0;
5911
5912 if (!initializer_constant_valid_p (value, TREE_TYPE (value)))
5913 {
5914 if (require_constant_value)
5915 {
5916 error_init ("initializer element is not constant");
5917 value = error_mark_node;
5918 }
5919 else if (require_constant_elements)
5920 pedwarn ("initializer element is not computable at load time");
5921 }
5922
5923 /* If this field is empty (and not at the end of structure),
5924 don't do anything other than checking the initializer. */
5925 if (field
5926 && (TREE_TYPE (field) == error_mark_node
5927 || (COMPLETE_TYPE_P (TREE_TYPE (field))
5928 && integer_zerop (TYPE_SIZE (TREE_TYPE (field)))
5929 && (TREE_CODE (constructor_type) == ARRAY_TYPE
5930 || TREE_CHAIN (field)))))
5931 return;
5932
5933 value = digest_init (type, value, strict_string, require_constant_value);
5934 if (value == error_mark_node)
5935 {
5936 constructor_erroneous = 1;
5937 return;
5938 }
5939
5940 /* If this element doesn't come next in sequence,
5941 put it on constructor_pending_elts. */
5942 if (TREE_CODE (constructor_type) == ARRAY_TYPE
5943 && (!constructor_incremental
5944 || !tree_int_cst_equal (field, constructor_unfilled_index)))
5945 {
5946 if (constructor_incremental
5947 && tree_int_cst_lt (field, constructor_unfilled_index))
5948 set_nonincremental_init ();
5949
5950 add_pending_init (field, value);
5951 return;
5952 }
5953 else if (TREE_CODE (constructor_type) == RECORD_TYPE
5954 && (!constructor_incremental
5955 || field != constructor_unfilled_fields))
5956 {
5957 /* We do this for records but not for unions. In a union,
5958 no matter which field is specified, it can be initialized
5959 right away since it starts at the beginning of the union. */
5960 if (constructor_incremental)
5961 {
5962 if (!constructor_unfilled_fields)
5963 set_nonincremental_init ();
5964 else
5965 {
5966 tree bitpos, unfillpos;
5967
5968 bitpos = bit_position (field);
5969 unfillpos = bit_position (constructor_unfilled_fields);
5970
5971 if (tree_int_cst_lt (bitpos, unfillpos))
5972 set_nonincremental_init ();
5973 }
5974 }
5975
5976 add_pending_init (field, value);
5977 return;
5978 }
5979 else if (TREE_CODE (constructor_type) == UNION_TYPE
5980 && !VEC_empty (constructor_elt, constructor_elements))
5981 {
5982 if (TREE_SIDE_EFFECTS (VEC_last (constructor_elt,
5983 constructor_elements)->value))
5984 warning_init ("initialized field with side-effects overwritten");
5985
5986 /* We can have just one union field set. */
5987 constructor_elements = 0;
5988 }
5989
5990 /* Otherwise, output this element either to
5991 constructor_elements or to the assembler file. */
5992
5993 celt = VEC_safe_push (constructor_elt, gc, constructor_elements, NULL);
5994 celt->index = field;
5995 celt->value = value;
5996
5997 /* Advance the variable that indicates sequential elements output. */
5998 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
5999 constructor_unfilled_index
6000 = size_binop (PLUS_EXPR, constructor_unfilled_index,
6001 bitsize_one_node);
6002 else if (TREE_CODE (constructor_type) == RECORD_TYPE)
6003 {
6004 constructor_unfilled_fields
6005 = TREE_CHAIN (constructor_unfilled_fields);
6006
6007 /* Skip any nameless bit fields. */
6008 while (constructor_unfilled_fields != 0
6009 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6010 && DECL_NAME (constructor_unfilled_fields) == 0)
6011 constructor_unfilled_fields =
6012 TREE_CHAIN (constructor_unfilled_fields);
6013 }
6014 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6015 constructor_unfilled_fields = 0;
6016
6017 /* Now output any pending elements which have become next. */
6018 if (pending)
6019 output_pending_init_elements (0);
6020 }
6021
6022 /* Output any pending elements which have become next.
6023 As we output elements, constructor_unfilled_{fields,index}
6024 advances, which may cause other elements to become next;
6025 if so, they too are output.
6026
6027 If ALL is 0, we return when there are
6028 no more pending elements to output now.
6029
6030 If ALL is 1, we output space as necessary so that
6031 we can output all the pending elements. */
6032
6033 static void
6034 output_pending_init_elements (int all)
6035 {
6036 struct init_node *elt = constructor_pending_elts;
6037 tree next;
6038
6039 retry:
6040
6041 /* Look through the whole pending tree.
6042 If we find an element that should be output now,
6043 output it. Otherwise, set NEXT to the element
6044 that comes first among those still pending. */
6045
6046 next = 0;
6047 while (elt)
6048 {
6049 if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6050 {
6051 if (tree_int_cst_equal (elt->purpose,
6052 constructor_unfilled_index))
6053 output_init_element (elt->value, true,
6054 TREE_TYPE (constructor_type),
6055 constructor_unfilled_index, 0);
6056 else if (tree_int_cst_lt (constructor_unfilled_index,
6057 elt->purpose))
6058 {
6059 /* Advance to the next smaller node. */
6060 if (elt->left)
6061 elt = elt->left;
6062 else
6063 {
6064 /* We have reached the smallest node bigger than the
6065 current unfilled index. Fill the space first. */
6066 next = elt->purpose;
6067 break;
6068 }
6069 }
6070 else
6071 {
6072 /* Advance to the next bigger node. */
6073 if (elt->right)
6074 elt = elt->right;
6075 else
6076 {
6077 /* We have reached the biggest node in a subtree. Find
6078 the parent of it, which is the next bigger node. */
6079 while (elt->parent && elt->parent->right == elt)
6080 elt = elt->parent;
6081 elt = elt->parent;
6082 if (elt && tree_int_cst_lt (constructor_unfilled_index,
6083 elt->purpose))
6084 {
6085 next = elt->purpose;
6086 break;
6087 }
6088 }
6089 }
6090 }
6091 else if (TREE_CODE (constructor_type) == RECORD_TYPE
6092 || TREE_CODE (constructor_type) == UNION_TYPE)
6093 {
6094 tree ctor_unfilled_bitpos, elt_bitpos;
6095
6096 /* If the current record is complete we are done. */
6097 if (constructor_unfilled_fields == 0)
6098 break;
6099
6100 ctor_unfilled_bitpos = bit_position (constructor_unfilled_fields);
6101 elt_bitpos = bit_position (elt->purpose);
6102 /* We can't compare fields here because there might be empty
6103 fields in between. */
6104 if (tree_int_cst_equal (elt_bitpos, ctor_unfilled_bitpos))
6105 {
6106 constructor_unfilled_fields = elt->purpose;
6107 output_init_element (elt->value, true, TREE_TYPE (elt->purpose),
6108 elt->purpose, 0);
6109 }
6110 else if (tree_int_cst_lt (ctor_unfilled_bitpos, elt_bitpos))
6111 {
6112 /* Advance to the next smaller node. */
6113 if (elt->left)
6114 elt = elt->left;
6115 else
6116 {
6117 /* We have reached the smallest node bigger than the
6118 current unfilled field. Fill the space first. */
6119 next = elt->purpose;
6120 break;
6121 }
6122 }
6123 else
6124 {
6125 /* Advance to the next bigger node. */
6126 if (elt->right)
6127 elt = elt->right;
6128 else
6129 {
6130 /* We have reached the biggest node in a subtree. Find
6131 the parent of it, which is the next bigger node. */
6132 while (elt->parent && elt->parent->right == elt)
6133 elt = elt->parent;
6134 elt = elt->parent;
6135 if (elt
6136 && (tree_int_cst_lt (ctor_unfilled_bitpos,
6137 bit_position (elt->purpose))))
6138 {
6139 next = elt->purpose;
6140 break;
6141 }
6142 }
6143 }
6144 }
6145 }
6146
6147 /* Ordinarily return, but not if we want to output all
6148 and there are elements left. */
6149 if (!(all && next != 0))
6150 return;
6151
6152 /* If it's not incremental, just skip over the gap, so that after
6153 jumping to retry we will output the next successive element. */
6154 if (TREE_CODE (constructor_type) == RECORD_TYPE
6155 || TREE_CODE (constructor_type) == UNION_TYPE)
6156 constructor_unfilled_fields = next;
6157 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6158 constructor_unfilled_index = next;
6159
6160 /* ELT now points to the node in the pending tree with the next
6161 initializer to output. */
6162 goto retry;
6163 }
6164 \f
6165 /* Add one non-braced element to the current constructor level.
6166 This adjusts the current position within the constructor's type.
6167 This may also start or terminate implicit levels
6168 to handle a partly-braced initializer.
6169
6170 Once this has found the correct level for the new element,
6171 it calls output_init_element. */
6172
6173 void
6174 process_init_element (struct c_expr value)
6175 {
6176 tree orig_value = value.value;
6177 int string_flag = orig_value != 0 && TREE_CODE (orig_value) == STRING_CST;
6178 bool strict_string = value.original_code == STRING_CST;
6179
6180 designator_depth = 0;
6181 designator_errorneous = 0;
6182
6183 /* Handle superfluous braces around string cst as in
6184 char x[] = {"foo"}; */
6185 if (string_flag
6186 && constructor_type
6187 && TREE_CODE (constructor_type) == ARRAY_TYPE
6188 && INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
6189 && integer_zerop (constructor_unfilled_index))
6190 {
6191 if (constructor_stack->replacement_value.value)
6192 error_init ("excess elements in char array initializer");
6193 constructor_stack->replacement_value = value;
6194 return;
6195 }
6196
6197 if (constructor_stack->replacement_value.value != 0)
6198 {
6199 error_init ("excess elements in struct initializer");
6200 return;
6201 }
6202
6203 /* Ignore elements of a brace group if it is entirely superfluous
6204 and has already been diagnosed. */
6205 if (constructor_type == 0)
6206 return;
6207
6208 /* If we've exhausted any levels that didn't have braces,
6209 pop them now. */
6210 while (constructor_stack->implicit)
6211 {
6212 if ((TREE_CODE (constructor_type) == RECORD_TYPE
6213 || TREE_CODE (constructor_type) == UNION_TYPE)
6214 && constructor_fields == 0)
6215 process_init_element (pop_init_level (1));
6216 else if (TREE_CODE (constructor_type) == ARRAY_TYPE
6217 && (constructor_max_index == 0
6218 || tree_int_cst_lt (constructor_max_index,
6219 constructor_index)))
6220 process_init_element (pop_init_level (1));
6221 else
6222 break;
6223 }
6224
6225 /* In the case of [LO ... HI] = VALUE, only evaluate VALUE once. */
6226 if (constructor_range_stack)
6227 {
6228 /* If value is a compound literal and we'll be just using its
6229 content, don't put it into a SAVE_EXPR. */
6230 if (TREE_CODE (value.value) != COMPOUND_LITERAL_EXPR
6231 || !require_constant_value
6232 || flag_isoc99)
6233 value.value = save_expr (value.value);
6234 }
6235
6236 while (1)
6237 {
6238 if (TREE_CODE (constructor_type) == RECORD_TYPE)
6239 {
6240 tree fieldtype;
6241 enum tree_code fieldcode;
6242
6243 if (constructor_fields == 0)
6244 {
6245 pedwarn_init ("excess elements in struct initializer");
6246 break;
6247 }
6248
6249 fieldtype = TREE_TYPE (constructor_fields);
6250 if (fieldtype != error_mark_node)
6251 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6252 fieldcode = TREE_CODE (fieldtype);
6253
6254 /* Error for non-static initialization of a flexible array member. */
6255 if (fieldcode == ARRAY_TYPE
6256 && !require_constant_value
6257 && TYPE_SIZE (fieldtype) == NULL_TREE
6258 && TREE_CHAIN (constructor_fields) == NULL_TREE)
6259 {
6260 error_init ("non-static initialization of a flexible array member");
6261 break;
6262 }
6263
6264 /* Accept a string constant to initialize a subarray. */
6265 if (value.value != 0
6266 && fieldcode == ARRAY_TYPE
6267 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6268 && string_flag)
6269 value.value = orig_value;
6270 /* Otherwise, if we have come to a subaggregate,
6271 and we don't have an element of its type, push into it. */
6272 else if (value.value != 0
6273 && value.value != error_mark_node
6274 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6275 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6276 || fieldcode == UNION_TYPE))
6277 {
6278 push_init_level (1);
6279 continue;
6280 }
6281
6282 if (value.value)
6283 {
6284 push_member_name (constructor_fields);
6285 output_init_element (value.value, strict_string,
6286 fieldtype, constructor_fields, 1);
6287 RESTORE_SPELLING_DEPTH (constructor_depth);
6288 }
6289 else
6290 /* Do the bookkeeping for an element that was
6291 directly output as a constructor. */
6292 {
6293 /* For a record, keep track of end position of last field. */
6294 if (DECL_SIZE (constructor_fields))
6295 constructor_bit_index
6296 = size_binop (PLUS_EXPR,
6297 bit_position (constructor_fields),
6298 DECL_SIZE (constructor_fields));
6299
6300 /* If the current field was the first one not yet written out,
6301 it isn't now, so update. */
6302 if (constructor_unfilled_fields == constructor_fields)
6303 {
6304 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6305 /* Skip any nameless bit fields. */
6306 while (constructor_unfilled_fields != 0
6307 && DECL_C_BIT_FIELD (constructor_unfilled_fields)
6308 && DECL_NAME (constructor_unfilled_fields) == 0)
6309 constructor_unfilled_fields =
6310 TREE_CHAIN (constructor_unfilled_fields);
6311 }
6312 }
6313
6314 constructor_fields = TREE_CHAIN (constructor_fields);
6315 /* Skip any nameless bit fields at the beginning. */
6316 while (constructor_fields != 0
6317 && DECL_C_BIT_FIELD (constructor_fields)
6318 && DECL_NAME (constructor_fields) == 0)
6319 constructor_fields = TREE_CHAIN (constructor_fields);
6320 }
6321 else if (TREE_CODE (constructor_type) == UNION_TYPE)
6322 {
6323 tree fieldtype;
6324 enum tree_code fieldcode;
6325
6326 if (constructor_fields == 0)
6327 {
6328 pedwarn_init ("excess elements in union initializer");
6329 break;
6330 }
6331
6332 fieldtype = TREE_TYPE (constructor_fields);
6333 if (fieldtype != error_mark_node)
6334 fieldtype = TYPE_MAIN_VARIANT (fieldtype);
6335 fieldcode = TREE_CODE (fieldtype);
6336
6337 /* Warn that traditional C rejects initialization of unions.
6338 We skip the warning if the value is zero. This is done
6339 under the assumption that the zero initializer in user
6340 code appears conditioned on e.g. __STDC__ to avoid
6341 "missing initializer" warnings and relies on default
6342 initialization to zero in the traditional C case.
6343 We also skip the warning if the initializer is designated,
6344 again on the assumption that this must be conditional on
6345 __STDC__ anyway (and we've already complained about the
6346 member-designator already). */
6347 if (!in_system_header && !constructor_designated
6348 && !(value.value && (integer_zerop (value.value)
6349 || real_zerop (value.value))))
6350 warning (OPT_Wtraditional, "traditional C rejects initialization "
6351 "of unions");
6352
6353 /* Accept a string constant to initialize a subarray. */
6354 if (value.value != 0
6355 && fieldcode == ARRAY_TYPE
6356 && INTEGRAL_TYPE_P (TREE_TYPE (fieldtype))
6357 && string_flag)
6358 value.value = orig_value;
6359 /* Otherwise, if we have come to a subaggregate,
6360 and we don't have an element of its type, push into it. */
6361 else if (value.value != 0
6362 && value.value != error_mark_node
6363 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
6364 && (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
6365 || fieldcode == UNION_TYPE))
6366 {
6367 push_init_level (1);
6368 continue;
6369 }
6370
6371 if (value.value)
6372 {
6373 push_member_name (constructor_fields);
6374 output_init_element (value.value, strict_string,
6375 fieldtype, constructor_fields, 1);
6376 RESTORE_SPELLING_DEPTH (constructor_depth);
6377 }
6378 else
6379 /* Do the bookkeeping for an element that was
6380 directly output as a constructor. */
6381 {
6382 constructor_bit_index = DECL_SIZE (constructor_fields);
6383 constructor_unfilled_fields = TREE_CHAIN (constructor_fields);
6384 }
6385
6386 constructor_fields = 0;
6387 }
6388 else if (TREE_CODE (constructor_type) == ARRAY_TYPE)
6389 {
6390 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6391 enum tree_code eltcode = TREE_CODE (elttype);
6392
6393 /* Accept a string constant to initialize a subarray. */
6394 if (value.value != 0
6395 && eltcode == ARRAY_TYPE
6396 && INTEGRAL_TYPE_P (TREE_TYPE (elttype))
6397 && string_flag)
6398 value.value = orig_value;
6399 /* Otherwise, if we have come to a subaggregate,
6400 and we don't have an element of its type, push into it. */
6401 else if (value.value != 0
6402 && value.value != error_mark_node
6403 && TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
6404 && (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
6405 || eltcode == UNION_TYPE))
6406 {
6407 push_init_level (1);
6408 continue;
6409 }
6410
6411 if (constructor_max_index != 0
6412 && (tree_int_cst_lt (constructor_max_index, constructor_index)
6413 || integer_all_onesp (constructor_max_index)))
6414 {
6415 pedwarn_init ("excess elements in array initializer");
6416 break;
6417 }
6418
6419 /* Now output the actual element. */
6420 if (value.value)
6421 {
6422 push_array_bounds (tree_low_cst (constructor_index, 0));
6423 output_init_element (value.value, strict_string,
6424 elttype, constructor_index, 1);
6425 RESTORE_SPELLING_DEPTH (constructor_depth);
6426 }
6427
6428 constructor_index
6429 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6430
6431 if (!value.value)
6432 /* If we are doing the bookkeeping for an element that was
6433 directly output as a constructor, we must update
6434 constructor_unfilled_index. */
6435 constructor_unfilled_index = constructor_index;
6436 }
6437 else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
6438 {
6439 tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
6440
6441 /* Do a basic check of initializer size. Note that vectors
6442 always have a fixed size derived from their type. */
6443 if (tree_int_cst_lt (constructor_max_index, constructor_index))
6444 {
6445 pedwarn_init ("excess elements in vector initializer");
6446 break;
6447 }
6448
6449 /* Now output the actual element. */
6450 if (value.value)
6451 output_init_element (value.value, strict_string,
6452 elttype, constructor_index, 1);
6453
6454 constructor_index
6455 = size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
6456
6457 if (!value.value)
6458 /* If we are doing the bookkeeping for an element that was
6459 directly output as a constructor, we must update
6460 constructor_unfilled_index. */
6461 constructor_unfilled_index = constructor_index;
6462 }
6463
6464 /* Handle the sole element allowed in a braced initializer
6465 for a scalar variable. */
6466 else if (constructor_type != error_mark_node
6467 && constructor_fields == 0)
6468 {
6469 pedwarn_init ("excess elements in scalar initializer");
6470 break;
6471 }
6472 else
6473 {
6474 if (value.value)
6475 output_init_element (value.value, strict_string,
6476 constructor_type, NULL_TREE, 1);
6477 constructor_fields = 0;
6478 }
6479
6480 /* Handle range initializers either at this level or anywhere higher
6481 in the designator stack. */
6482 if (constructor_range_stack)
6483 {
6484 struct constructor_range_stack *p, *range_stack;
6485 int finish = 0;
6486
6487 range_stack = constructor_range_stack;
6488 constructor_range_stack = 0;
6489 while (constructor_stack != range_stack->stack)
6490 {
6491 gcc_assert (constructor_stack->implicit);
6492 process_init_element (pop_init_level (1));
6493 }
6494 for (p = range_stack;
6495 !p->range_end || tree_int_cst_equal (p->index, p->range_end);
6496 p = p->prev)
6497 {
6498 gcc_assert (constructor_stack->implicit);
6499 process_init_element (pop_init_level (1));
6500 }
6501
6502 p->index = size_binop (PLUS_EXPR, p->index, bitsize_one_node);
6503 if (tree_int_cst_equal (p->index, p->range_end) && !p->prev)
6504 finish = 1;
6505
6506 while (1)
6507 {
6508 constructor_index = p->index;
6509 constructor_fields = p->fields;
6510 if (finish && p->range_end && p->index == p->range_start)
6511 {
6512 finish = 0;
6513 p->prev = 0;
6514 }
6515 p = p->next;
6516 if (!p)
6517 break;
6518 push_init_level (2);
6519 p->stack = constructor_stack;
6520 if (p->range_end && tree_int_cst_equal (p->index, p->range_end))
6521 p->index = p->range_start;
6522 }
6523
6524 if (!finish)
6525 constructor_range_stack = range_stack;
6526 continue;
6527 }
6528
6529 break;
6530 }
6531
6532 constructor_range_stack = 0;
6533 }
6534 \f
6535 /* Build a complete asm-statement, whose components are a CV_QUALIFIER
6536 (guaranteed to be 'volatile' or null) and ARGS (represented using
6537 an ASM_EXPR node). */
6538 tree
6539 build_asm_stmt (tree cv_qualifier, tree args)
6540 {
6541 if (!ASM_VOLATILE_P (args) && cv_qualifier)
6542 ASM_VOLATILE_P (args) = 1;
6543 return add_stmt (args);
6544 }
6545
6546 /* Build an asm-expr, whose components are a STRING, some OUTPUTS,
6547 some INPUTS, and some CLOBBERS. The latter three may be NULL.
6548 SIMPLE indicates whether there was anything at all after the
6549 string in the asm expression -- asm("blah") and asm("blah" : )
6550 are subtly different. We use a ASM_EXPR node to represent this. */
6551 tree
6552 build_asm_expr (tree string, tree outputs, tree inputs, tree clobbers,
6553 bool simple)
6554 {
6555 tree tail;
6556 tree args;
6557 int i;
6558 const char *constraint;
6559 const char **oconstraints;
6560 bool allows_mem, allows_reg, is_inout;
6561 int ninputs, noutputs;
6562
6563 ninputs = list_length (inputs);
6564 noutputs = list_length (outputs);
6565 oconstraints = (const char **) alloca (noutputs * sizeof (const char *));
6566
6567 string = resolve_asm_operand_names (string, outputs, inputs);
6568
6569 /* Remove output conversions that change the type but not the mode. */
6570 for (i = 0, tail = outputs; tail; ++i, tail = TREE_CHAIN (tail))
6571 {
6572 tree output = TREE_VALUE (tail);
6573
6574 /* ??? Really, this should not be here. Users should be using a
6575 proper lvalue, dammit. But there's a long history of using casts
6576 in the output operands. In cases like longlong.h, this becomes a
6577 primitive form of typechecking -- if the cast can be removed, then
6578 the output operand had a type of the proper width; otherwise we'll
6579 get an error. Gross, but ... */
6580 STRIP_NOPS (output);
6581
6582 if (!lvalue_or_else (output, lv_asm))
6583 output = error_mark_node;
6584
6585 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6586 oconstraints[i] = constraint;
6587
6588 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
6589 &allows_mem, &allows_reg, &is_inout))
6590 {
6591 /* If the operand is going to end up in memory,
6592 mark it addressable. */
6593 if (!allows_reg && !c_mark_addressable (output))
6594 output = error_mark_node;
6595 }
6596 else
6597 output = error_mark_node;
6598
6599 TREE_VALUE (tail) = output;
6600 }
6601
6602 for (i = 0, tail = inputs; tail; ++i, tail = TREE_CHAIN (tail))
6603 {
6604 tree input;
6605
6606 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (tail)));
6607 input = TREE_VALUE (tail);
6608
6609 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
6610 oconstraints, &allows_mem, &allows_reg))
6611 {
6612 /* If the operand is going to end up in memory,
6613 mark it addressable. */
6614 if (!allows_reg && allows_mem)
6615 {
6616 /* Strip the nops as we allow this case. FIXME, this really
6617 should be rejected or made deprecated. */
6618 STRIP_NOPS (input);
6619 if (!c_mark_addressable (input))
6620 input = error_mark_node;
6621 }
6622 }
6623 else
6624 input = error_mark_node;
6625
6626 TREE_VALUE (tail) = input;
6627 }
6628
6629 args = build_stmt (ASM_EXPR, string, outputs, inputs, clobbers);
6630
6631 /* Simple asm statements are treated as volatile. */
6632 if (simple)
6633 {
6634 ASM_VOLATILE_P (args) = 1;
6635 ASM_INPUT_P (args) = 1;
6636 }
6637
6638 return args;
6639 }
6640 \f
6641 /* Generate a goto statement to LABEL. */
6642
6643 tree
6644 c_finish_goto_label (tree label)
6645 {
6646 tree decl = lookup_label (label);
6647 if (!decl)
6648 return NULL_TREE;
6649
6650 if (C_DECL_UNJUMPABLE_STMT_EXPR (decl))
6651 {
6652 error ("jump into statement expression");
6653 return NULL_TREE;
6654 }
6655
6656 if (C_DECL_UNJUMPABLE_VM (decl))
6657 {
6658 error ("jump into scope of identifier with variably modified type");
6659 return NULL_TREE;
6660 }
6661
6662 if (!C_DECL_UNDEFINABLE_STMT_EXPR (decl))
6663 {
6664 /* No jump from outside this statement expression context, so
6665 record that there is a jump from within this context. */
6666 struct c_label_list *nlist;
6667 nlist = XOBNEW (&parser_obstack, struct c_label_list);
6668 nlist->next = label_context_stack_se->labels_used;
6669 nlist->label = decl;
6670 label_context_stack_se->labels_used = nlist;
6671 }
6672
6673 if (!C_DECL_UNDEFINABLE_VM (decl))
6674 {
6675 /* No jump from outside this context context of identifiers with
6676 variably modified type, so record that there is a jump from
6677 within this context. */
6678 struct c_label_list *nlist;
6679 nlist = XOBNEW (&parser_obstack, struct c_label_list);
6680 nlist->next = label_context_stack_vm->labels_used;
6681 nlist->label = decl;
6682 label_context_stack_vm->labels_used = nlist;
6683 }
6684
6685 TREE_USED (decl) = 1;
6686 return add_stmt (build1 (GOTO_EXPR, void_type_node, decl));
6687 }
6688
6689 /* Generate a computed goto statement to EXPR. */
6690
6691 tree
6692 c_finish_goto_ptr (tree expr)
6693 {
6694 if (pedantic)
6695 pedwarn ("ISO C forbids %<goto *expr;%>");
6696 expr = convert (ptr_type_node, expr);
6697 return add_stmt (build1 (GOTO_EXPR, void_type_node, expr));
6698 }
6699
6700 /* Generate a C `return' statement. RETVAL is the expression for what
6701 to return, or a null pointer for `return;' with no value. */
6702
6703 tree
6704 c_finish_return (tree retval)
6705 {
6706 tree valtype = TREE_TYPE (TREE_TYPE (current_function_decl));
6707
6708 if (TREE_THIS_VOLATILE (current_function_decl))
6709 warning (0, "function declared %<noreturn%> has a %<return%> statement");
6710
6711 if (!retval)
6712 {
6713 current_function_returns_null = 1;
6714 if ((warn_return_type || flag_isoc99)
6715 && valtype != 0 && TREE_CODE (valtype) != VOID_TYPE)
6716 pedwarn_c99 ("%<return%> with no value, in "
6717 "function returning non-void");
6718 }
6719 else if (valtype == 0 || TREE_CODE (valtype) == VOID_TYPE)
6720 {
6721 current_function_returns_null = 1;
6722 if (pedantic || TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE)
6723 pedwarn ("%<return%> with a value, in function returning void");
6724 }
6725 else
6726 {
6727 tree t = convert_for_assignment (valtype, retval, ic_return,
6728 NULL_TREE, NULL_TREE, 0);
6729 tree res = DECL_RESULT (current_function_decl);
6730 tree inner;
6731
6732 current_function_returns_value = 1;
6733 if (t == error_mark_node)
6734 return NULL_TREE;
6735
6736 inner = t = convert (TREE_TYPE (res), t);
6737
6738 /* Strip any conversions, additions, and subtractions, and see if
6739 we are returning the address of a local variable. Warn if so. */
6740 while (1)
6741 {
6742 switch (TREE_CODE (inner))
6743 {
6744 case NOP_EXPR: case NON_LVALUE_EXPR: case CONVERT_EXPR:
6745 case PLUS_EXPR:
6746 inner = TREE_OPERAND (inner, 0);
6747 continue;
6748
6749 case MINUS_EXPR:
6750 /* If the second operand of the MINUS_EXPR has a pointer
6751 type (or is converted from it), this may be valid, so
6752 don't give a warning. */
6753 {
6754 tree op1 = TREE_OPERAND (inner, 1);
6755
6756 while (!POINTER_TYPE_P (TREE_TYPE (op1))
6757 && (TREE_CODE (op1) == NOP_EXPR
6758 || TREE_CODE (op1) == NON_LVALUE_EXPR
6759 || TREE_CODE (op1) == CONVERT_EXPR))
6760 op1 = TREE_OPERAND (op1, 0);
6761
6762 if (POINTER_TYPE_P (TREE_TYPE (op1)))
6763 break;
6764
6765 inner = TREE_OPERAND (inner, 0);
6766 continue;
6767 }
6768
6769 case ADDR_EXPR:
6770 inner = TREE_OPERAND (inner, 0);
6771
6772 while (REFERENCE_CLASS_P (inner)
6773 && TREE_CODE (inner) != INDIRECT_REF)
6774 inner = TREE_OPERAND (inner, 0);
6775
6776 if (DECL_P (inner)
6777 && !DECL_EXTERNAL (inner)
6778 && !TREE_STATIC (inner)
6779 && DECL_CONTEXT (inner) == current_function_decl)
6780 warning (0, "function returns address of local variable");
6781 break;
6782
6783 default:
6784 break;
6785 }
6786
6787 break;
6788 }
6789
6790 retval = build2 (MODIFY_EXPR, TREE_TYPE (res), res, t);
6791 }
6792
6793 return add_stmt (build_stmt (RETURN_EXPR, retval));
6794 }
6795 \f
6796 struct c_switch {
6797 /* The SWITCH_EXPR being built. */
6798 tree switch_expr;
6799
6800 /* The original type of the testing expression, i.e. before the
6801 default conversion is applied. */
6802 tree orig_type;
6803
6804 /* A splay-tree mapping the low element of a case range to the high
6805 element, or NULL_TREE if there is no high element. Used to
6806 determine whether or not a new case label duplicates an old case
6807 label. We need a tree, rather than simply a hash table, because
6808 of the GNU case range extension. */
6809 splay_tree cases;
6810
6811 /* Number of nested statement expressions within this switch
6812 statement; if nonzero, case and default labels may not
6813 appear. */
6814 unsigned int blocked_stmt_expr;
6815
6816 /* Scope of outermost declarations of identifiers with variably
6817 modified type within this switch statement; if nonzero, case and
6818 default labels may not appear. */
6819 unsigned int blocked_vm;
6820
6821 /* The next node on the stack. */
6822 struct c_switch *next;
6823 };
6824
6825 /* A stack of the currently active switch statements. The innermost
6826 switch statement is on the top of the stack. There is no need to
6827 mark the stack for garbage collection because it is only active
6828 during the processing of the body of a function, and we never
6829 collect at that point. */
6830
6831 struct c_switch *c_switch_stack;
6832
6833 /* Start a C switch statement, testing expression EXP. Return the new
6834 SWITCH_EXPR. */
6835
6836 tree
6837 c_start_case (tree exp)
6838 {
6839 enum tree_code code;
6840 tree type, orig_type = error_mark_node;
6841 struct c_switch *cs;
6842
6843 if (exp != error_mark_node)
6844 {
6845 code = TREE_CODE (TREE_TYPE (exp));
6846 orig_type = TREE_TYPE (exp);
6847
6848 if (!INTEGRAL_TYPE_P (orig_type)
6849 && code != ERROR_MARK)
6850 {
6851 error ("switch quantity not an integer");
6852 exp = integer_zero_node;
6853 orig_type = error_mark_node;
6854 }
6855 else
6856 {
6857 type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
6858
6859 if (!in_system_header
6860 && (type == long_integer_type_node
6861 || type == long_unsigned_type_node))
6862 warning (OPT_Wtraditional, "%<long%> switch expression not "
6863 "converted to %<int%> in ISO C");
6864
6865 exp = default_conversion (exp);
6866 type = TREE_TYPE (exp);
6867 }
6868 }
6869
6870 /* Add this new SWITCH_EXPR to the stack. */
6871 cs = XNEW (struct c_switch);
6872 cs->switch_expr = build3 (SWITCH_EXPR, orig_type, exp, NULL_TREE, NULL_TREE);
6873 cs->orig_type = orig_type;
6874 cs->cases = splay_tree_new (case_compare, NULL, NULL);
6875 cs->blocked_stmt_expr = 0;
6876 cs->blocked_vm = 0;
6877 cs->next = c_switch_stack;
6878 c_switch_stack = cs;
6879
6880 return add_stmt (cs->switch_expr);
6881 }
6882
6883 /* Process a case label. */
6884
6885 tree
6886 do_case (tree low_value, tree high_value)
6887 {
6888 tree label = NULL_TREE;
6889
6890 if (c_switch_stack && !c_switch_stack->blocked_stmt_expr
6891 && !c_switch_stack->blocked_vm)
6892 {
6893 label = c_add_case_label (c_switch_stack->cases,
6894 SWITCH_COND (c_switch_stack->switch_expr),
6895 c_switch_stack->orig_type,
6896 low_value, high_value);
6897 if (label == error_mark_node)
6898 label = NULL_TREE;
6899 }
6900 else if (c_switch_stack && c_switch_stack->blocked_stmt_expr)
6901 {
6902 if (low_value)
6903 error ("case label in statement expression not containing "
6904 "enclosing switch statement");
6905 else
6906 error ("%<default%> label in statement expression not containing "
6907 "enclosing switch statement");
6908 }
6909 else if (c_switch_stack && c_switch_stack->blocked_vm)
6910 {
6911 if (low_value)
6912 error ("case label in scope of identifier with variably modified "
6913 "type not containing enclosing switch statement");
6914 else
6915 error ("%<default%> label in scope of identifier with variably "
6916 "modified type not containing enclosing switch statement");
6917 }
6918 else if (low_value)
6919 error ("case label not within a switch statement");
6920 else
6921 error ("%<default%> label not within a switch statement");
6922
6923 return label;
6924 }
6925
6926 /* Finish the switch statement. */
6927
6928 void
6929 c_finish_case (tree body)
6930 {
6931 struct c_switch *cs = c_switch_stack;
6932 location_t switch_location;
6933
6934 SWITCH_BODY (cs->switch_expr) = body;
6935
6936 /* We must not be within a statement expression nested in the switch
6937 at this point; we might, however, be within the scope of an
6938 identifier with variably modified type nested in the switch. */
6939 gcc_assert (!cs->blocked_stmt_expr);
6940
6941 /* Emit warnings as needed. */
6942 if (EXPR_HAS_LOCATION (cs->switch_expr))
6943 switch_location = EXPR_LOCATION (cs->switch_expr);
6944 else
6945 switch_location = input_location;
6946 c_do_switch_warnings (cs->cases, switch_location,
6947 TREE_TYPE (cs->switch_expr),
6948 SWITCH_COND (cs->switch_expr));
6949
6950 /* Pop the stack. */
6951 c_switch_stack = cs->next;
6952 splay_tree_delete (cs->cases);
6953 XDELETE (cs);
6954 }
6955 \f
6956 /* Emit an if statement. IF_LOCUS is the location of the 'if'. COND,
6957 THEN_BLOCK and ELSE_BLOCK are expressions to be used; ELSE_BLOCK
6958 may be null. NESTED_IF is true if THEN_BLOCK contains another IF
6959 statement, and was not surrounded with parenthesis. */
6960
6961 void
6962 c_finish_if_stmt (location_t if_locus, tree cond, tree then_block,
6963 tree else_block, bool nested_if)
6964 {
6965 tree stmt;
6966
6967 /* Diagnose an ambiguous else if if-then-else is nested inside if-then. */
6968 if (warn_parentheses && nested_if && else_block == NULL)
6969 {
6970 tree inner_if = then_block;
6971
6972 /* We know from the grammar productions that there is an IF nested
6973 within THEN_BLOCK. Due to labels and c99 conditional declarations,
6974 it might not be exactly THEN_BLOCK, but should be the last
6975 non-container statement within. */
6976 while (1)
6977 switch (TREE_CODE (inner_if))
6978 {
6979 case COND_EXPR:
6980 goto found;
6981 case BIND_EXPR:
6982 inner_if = BIND_EXPR_BODY (inner_if);
6983 break;
6984 case STATEMENT_LIST:
6985 inner_if = expr_last (then_block);
6986 break;
6987 case TRY_FINALLY_EXPR:
6988 case TRY_CATCH_EXPR:
6989 inner_if = TREE_OPERAND (inner_if, 0);
6990 break;
6991 default:
6992 gcc_unreachable ();
6993 }
6994 found:
6995
6996 if (COND_EXPR_ELSE (inner_if))
6997 warning (OPT_Wparentheses,
6998 "%Hsuggest explicit braces to avoid ambiguous %<else%>",
6999 &if_locus);
7000 }
7001
7002 /* Diagnose ";" via the special empty statement node that we create. */
7003 if (extra_warnings)
7004 {
7005 if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block))
7006 {
7007 if (!else_block)
7008 warning (0, "%Hempty body in an if-statement",
7009 EXPR_LOCUS (then_block));
7010 then_block = alloc_stmt_list ();
7011 }
7012 if (else_block
7013 && TREE_CODE (else_block) == NOP_EXPR
7014 && !TREE_TYPE (else_block))
7015 {
7016 warning (0, "%Hempty body in an else-statement",
7017 EXPR_LOCUS (else_block));
7018 else_block = alloc_stmt_list ();
7019 }
7020 }
7021
7022 stmt = build3 (COND_EXPR, void_type_node, cond, then_block, else_block);
7023 SET_EXPR_LOCATION (stmt, if_locus);
7024 add_stmt (stmt);
7025 }
7026
7027 /* Emit a general-purpose loop construct. START_LOCUS is the location of
7028 the beginning of the loop. COND is the loop condition. COND_IS_FIRST
7029 is false for DO loops. INCR is the FOR increment expression. BODY is
7030 the statement controlled by the loop. BLAB is the break label. CLAB is
7031 the continue label. Everything is allowed to be NULL. */
7032
7033 void
7034 c_finish_loop (location_t start_locus, tree cond, tree incr, tree body,
7035 tree blab, tree clab, bool cond_is_first)
7036 {
7037 tree entry = NULL, exit = NULL, t;
7038
7039 /* If the condition is zero don't generate a loop construct. */
7040 if (cond && integer_zerop (cond))
7041 {
7042 if (cond_is_first)
7043 {
7044 t = build_and_jump (&blab);
7045 SET_EXPR_LOCATION (t, start_locus);
7046 add_stmt (t);
7047 }
7048 }
7049 else
7050 {
7051 tree top = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
7052
7053 /* If we have an exit condition, then we build an IF with gotos either
7054 out of the loop, or to the top of it. If there's no exit condition,
7055 then we just build a jump back to the top. */
7056 exit = build_and_jump (&LABEL_EXPR_LABEL (top));
7057
7058 if (cond && !integer_nonzerop (cond))
7059 {
7060 /* Canonicalize the loop condition to the end. This means
7061 generating a branch to the loop condition. Reuse the
7062 continue label, if possible. */
7063 if (cond_is_first)
7064 {
7065 if (incr || !clab)
7066 {
7067 entry = build1 (LABEL_EXPR, void_type_node, NULL_TREE);
7068 t = build_and_jump (&LABEL_EXPR_LABEL (entry));
7069 }
7070 else
7071 t = build1 (GOTO_EXPR, void_type_node, clab);
7072 SET_EXPR_LOCATION (t, start_locus);
7073 add_stmt (t);
7074 }
7075
7076 t = build_and_jump (&blab);
7077 exit = build3 (COND_EXPR, void_type_node, cond, exit, t);
7078 exit = fold (exit);
7079 if (cond_is_first)
7080 SET_EXPR_LOCATION (exit, start_locus);
7081 else
7082 SET_EXPR_LOCATION (exit, input_location);
7083 }
7084
7085 add_stmt (top);
7086 }
7087
7088 if (body)
7089 add_stmt (body);
7090 if (clab)
7091 add_stmt (build1 (LABEL_EXPR, void_type_node, clab));
7092 if (incr)
7093 add_stmt (incr);
7094 if (entry)
7095 add_stmt (entry);
7096 if (exit)
7097 add_stmt (exit);
7098 if (blab)
7099 add_stmt (build1 (LABEL_EXPR, void_type_node, blab));
7100 }
7101
7102 tree
7103 c_finish_bc_stmt (tree *label_p, bool is_break)
7104 {
7105 bool skip;
7106 tree label = *label_p;
7107
7108 /* In switch statements break is sometimes stylistically used after
7109 a return statement. This can lead to spurious warnings about
7110 control reaching the end of a non-void function when it is
7111 inlined. Note that we are calling block_may_fallthru with
7112 language specific tree nodes; this works because
7113 block_may_fallthru returns true when given something it does not
7114 understand. */
7115 skip = !block_may_fallthru (cur_stmt_list);
7116
7117 if (!label)
7118 {
7119 if (!skip)
7120 *label_p = label = create_artificial_label ();
7121 }
7122 else if (TREE_CODE (label) != LABEL_DECL)
7123 {
7124 if (is_break)
7125 error ("break statement not within loop or switch");
7126 else
7127 error ("continue statement not within a loop");
7128 return NULL_TREE;
7129 }
7130
7131 if (skip)
7132 return NULL_TREE;
7133
7134 return add_stmt (build1 (GOTO_EXPR, void_type_node, label));
7135 }
7136
7137 /* A helper routine for c_process_expr_stmt and c_finish_stmt_expr. */
7138
7139 static void
7140 emit_side_effect_warnings (tree expr)
7141 {
7142 if (expr == error_mark_node)
7143 ;
7144 else if (!TREE_SIDE_EFFECTS (expr))
7145 {
7146 if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
7147 warning (0, "%Hstatement with no effect",
7148 EXPR_HAS_LOCATION (expr) ? EXPR_LOCUS (expr) : &input_location);
7149 }
7150 else if (warn_unused_value)
7151 warn_if_unused_value (expr, input_location);
7152 }
7153
7154 /* Process an expression as if it were a complete statement. Emit
7155 diagnostics, but do not call ADD_STMT. */
7156
7157 tree
7158 c_process_expr_stmt (tree expr)
7159 {
7160 if (!expr)
7161 return NULL_TREE;
7162
7163 if (warn_sequence_point)
7164 verify_sequence_points (expr);
7165
7166 if (TREE_TYPE (expr) != error_mark_node
7167 && !COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (expr))
7168 && TREE_CODE (TREE_TYPE (expr)) != ARRAY_TYPE)
7169 error ("expression statement has incomplete type");
7170
7171 /* If we're not processing a statement expression, warn about unused values.
7172 Warnings for statement expressions will be emitted later, once we figure
7173 out which is the result. */
7174 if (!STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7175 && (extra_warnings || warn_unused_value))
7176 emit_side_effect_warnings (expr);
7177
7178 /* If the expression is not of a type to which we cannot assign a line
7179 number, wrap the thing in a no-op NOP_EXPR. */
7180 if (DECL_P (expr) || CONSTANT_CLASS_P (expr))
7181 expr = build1 (NOP_EXPR, TREE_TYPE (expr), expr);
7182
7183 if (EXPR_P (expr))
7184 SET_EXPR_LOCATION (expr, input_location);
7185
7186 return expr;
7187 }
7188
7189 /* Emit an expression as a statement. */
7190
7191 tree
7192 c_finish_expr_stmt (tree expr)
7193 {
7194 if (expr)
7195 return add_stmt (c_process_expr_stmt (expr));
7196 else
7197 return NULL;
7198 }
7199
7200 /* Do the opposite and emit a statement as an expression. To begin,
7201 create a new binding level and return it. */
7202
7203 tree
7204 c_begin_stmt_expr (void)
7205 {
7206 tree ret;
7207 struct c_label_context_se *nstack;
7208 struct c_label_list *glist;
7209
7210 /* We must force a BLOCK for this level so that, if it is not expanded
7211 later, there is a way to turn off the entire subtree of blocks that
7212 are contained in it. */
7213 keep_next_level ();
7214 ret = c_begin_compound_stmt (true);
7215 if (c_switch_stack)
7216 {
7217 c_switch_stack->blocked_stmt_expr++;
7218 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7219 }
7220 for (glist = label_context_stack_se->labels_used;
7221 glist != NULL;
7222 glist = glist->next)
7223 {
7224 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 1;
7225 }
7226 nstack = XOBNEW (&parser_obstack, struct c_label_context_se);
7227 nstack->labels_def = NULL;
7228 nstack->labels_used = NULL;
7229 nstack->next = label_context_stack_se;
7230 label_context_stack_se = nstack;
7231
7232 /* Mark the current statement list as belonging to a statement list. */
7233 STATEMENT_LIST_STMT_EXPR (ret) = 1;
7234
7235 return ret;
7236 }
7237
7238 tree
7239 c_finish_stmt_expr (tree body)
7240 {
7241 tree last, type, tmp, val;
7242 tree *last_p;
7243 struct c_label_list *dlist, *glist, *glist_prev = NULL;
7244
7245 body = c_end_compound_stmt (body, true);
7246 if (c_switch_stack)
7247 {
7248 gcc_assert (c_switch_stack->blocked_stmt_expr != 0);
7249 c_switch_stack->blocked_stmt_expr--;
7250 }
7251 /* It is no longer possible to jump to labels defined within this
7252 statement expression. */
7253 for (dlist = label_context_stack_se->labels_def;
7254 dlist != NULL;
7255 dlist = dlist->next)
7256 {
7257 C_DECL_UNJUMPABLE_STMT_EXPR (dlist->label) = 1;
7258 }
7259 /* It is again possible to define labels with a goto just outside
7260 this statement expression. */
7261 for (glist = label_context_stack_se->next->labels_used;
7262 glist != NULL;
7263 glist = glist->next)
7264 {
7265 C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 0;
7266 glist_prev = glist;
7267 }
7268 if (glist_prev != NULL)
7269 glist_prev->next = label_context_stack_se->labels_used;
7270 else
7271 label_context_stack_se->next->labels_used
7272 = label_context_stack_se->labels_used;
7273 label_context_stack_se = label_context_stack_se->next;
7274
7275 /* Locate the last statement in BODY. See c_end_compound_stmt
7276 about always returning a BIND_EXPR. */
7277 last_p = &BIND_EXPR_BODY (body);
7278 last = BIND_EXPR_BODY (body);
7279
7280 continue_searching:
7281 if (TREE_CODE (last) == STATEMENT_LIST)
7282 {
7283 tree_stmt_iterator i;
7284
7285 /* This can happen with degenerate cases like ({ }). No value. */
7286 if (!TREE_SIDE_EFFECTS (last))
7287 return body;
7288
7289 /* If we're supposed to generate side effects warnings, process
7290 all of the statements except the last. */
7291 if (extra_warnings || warn_unused_value)
7292 {
7293 for (i = tsi_start (last); !tsi_one_before_end_p (i); tsi_next (&i))
7294 emit_side_effect_warnings (tsi_stmt (i));
7295 }
7296 else
7297 i = tsi_last (last);
7298 last_p = tsi_stmt_ptr (i);
7299 last = *last_p;
7300 }
7301
7302 /* If the end of the list is exception related, then the list was split
7303 by a call to push_cleanup. Continue searching. */
7304 if (TREE_CODE (last) == TRY_FINALLY_EXPR
7305 || TREE_CODE (last) == TRY_CATCH_EXPR)
7306 {
7307 last_p = &TREE_OPERAND (last, 0);
7308 last = *last_p;
7309 goto continue_searching;
7310 }
7311
7312 /* In the case that the BIND_EXPR is not necessary, return the
7313 expression out from inside it. */
7314 if (last == error_mark_node
7315 || (last == BIND_EXPR_BODY (body)
7316 && BIND_EXPR_VARS (body) == NULL))
7317 return last;
7318
7319 /* Extract the type of said expression. */
7320 type = TREE_TYPE (last);
7321
7322 /* If we're not returning a value at all, then the BIND_EXPR that
7323 we already have is a fine expression to return. */
7324 if (!type || VOID_TYPE_P (type))
7325 return body;
7326
7327 /* Now that we've located the expression containing the value, it seems
7328 silly to make voidify_wrapper_expr repeat the process. Create a
7329 temporary of the appropriate type and stick it in a TARGET_EXPR. */
7330 tmp = create_tmp_var_raw (type, NULL);
7331
7332 /* Unwrap a no-op NOP_EXPR as added by c_finish_expr_stmt. This avoids
7333 tree_expr_nonnegative_p giving up immediately. */
7334 val = last;
7335 if (TREE_CODE (val) == NOP_EXPR
7336 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)))
7337 val = TREE_OPERAND (val, 0);
7338
7339 *last_p = build2 (MODIFY_EXPR, void_type_node, tmp, val);
7340 SET_EXPR_LOCUS (*last_p, EXPR_LOCUS (last));
7341
7342 return build4 (TARGET_EXPR, type, tmp, body, NULL_TREE, NULL_TREE);
7343 }
7344
7345 /* Begin the scope of an identifier of variably modified type, scope
7346 number SCOPE. Jumping from outside this scope to inside it is not
7347 permitted. */
7348
7349 void
7350 c_begin_vm_scope (unsigned int scope)
7351 {
7352 struct c_label_context_vm *nstack;
7353 struct c_label_list *glist;
7354
7355 gcc_assert (scope > 0);
7356 if (c_switch_stack && !c_switch_stack->blocked_vm)
7357 c_switch_stack->blocked_vm = scope;
7358 for (glist = label_context_stack_vm->labels_used;
7359 glist != NULL;
7360 glist = glist->next)
7361 {
7362 C_DECL_UNDEFINABLE_VM (glist->label) = 1;
7363 }
7364 nstack = XOBNEW (&parser_obstack, struct c_label_context_vm);
7365 nstack->labels_def = NULL;
7366 nstack->labels_used = NULL;
7367 nstack->scope = scope;
7368 nstack->next = label_context_stack_vm;
7369 label_context_stack_vm = nstack;
7370 }
7371
7372 /* End a scope which may contain identifiers of variably modified
7373 type, scope number SCOPE. */
7374
7375 void
7376 c_end_vm_scope (unsigned int scope)
7377 {
7378 if (label_context_stack_vm == NULL)
7379 return;
7380 if (c_switch_stack && c_switch_stack->blocked_vm == scope)
7381 c_switch_stack->blocked_vm = 0;
7382 /* We may have a number of nested scopes of identifiers with
7383 variably modified type, all at this depth. Pop each in turn. */
7384 while (label_context_stack_vm->scope == scope)
7385 {
7386 struct c_label_list *dlist, *glist, *glist_prev = NULL;
7387
7388 /* It is no longer possible to jump to labels defined within this
7389 scope. */
7390 for (dlist = label_context_stack_vm->labels_def;
7391 dlist != NULL;
7392 dlist = dlist->next)
7393 {
7394 C_DECL_UNJUMPABLE_VM (dlist->label) = 1;
7395 }
7396 /* It is again possible to define labels with a goto just outside
7397 this scope. */
7398 for (glist = label_context_stack_vm->next->labels_used;
7399 glist != NULL;
7400 glist = glist->next)
7401 {
7402 C_DECL_UNDEFINABLE_VM (glist->label) = 0;
7403 glist_prev = glist;
7404 }
7405 if (glist_prev != NULL)
7406 glist_prev->next = label_context_stack_vm->labels_used;
7407 else
7408 label_context_stack_vm->next->labels_used
7409 = label_context_stack_vm->labels_used;
7410 label_context_stack_vm = label_context_stack_vm->next;
7411 }
7412 }
7413 \f
7414 /* Begin and end compound statements. This is as simple as pushing
7415 and popping new statement lists from the tree. */
7416
7417 tree
7418 c_begin_compound_stmt (bool do_scope)
7419 {
7420 tree stmt = push_stmt_list ();
7421 if (do_scope)
7422 push_scope ();
7423 return stmt;
7424 }
7425
7426 tree
7427 c_end_compound_stmt (tree stmt, bool do_scope)
7428 {
7429 tree block = NULL;
7430
7431 if (do_scope)
7432 {
7433 if (c_dialect_objc ())
7434 objc_clear_super_receiver ();
7435 block = pop_scope ();
7436 }
7437
7438 stmt = pop_stmt_list (stmt);
7439 stmt = c_build_bind_expr (block, stmt);
7440
7441 /* If this compound statement is nested immediately inside a statement
7442 expression, then force a BIND_EXPR to be created. Otherwise we'll
7443 do the wrong thing for ({ { 1; } }) or ({ 1; { } }). In particular,
7444 STATEMENT_LISTs merge, and thus we can lose track of what statement
7445 was really last. */
7446 if (cur_stmt_list
7447 && STATEMENT_LIST_STMT_EXPR (cur_stmt_list)
7448 && TREE_CODE (stmt) != BIND_EXPR)
7449 {
7450 stmt = build3 (BIND_EXPR, void_type_node, NULL, stmt, NULL);
7451 TREE_SIDE_EFFECTS (stmt) = 1;
7452 }
7453
7454 return stmt;
7455 }
7456
7457 /* Queue a cleanup. CLEANUP is an expression/statement to be executed
7458 when the current scope is exited. EH_ONLY is true when this is not
7459 meant to apply to normal control flow transfer. */
7460
7461 void
7462 push_cleanup (tree ARG_UNUSED (decl), tree cleanup, bool eh_only)
7463 {
7464 enum tree_code code;
7465 tree stmt, list;
7466 bool stmt_expr;
7467
7468 code = eh_only ? TRY_CATCH_EXPR : TRY_FINALLY_EXPR;
7469 stmt = build_stmt (code, NULL, cleanup);
7470 add_stmt (stmt);
7471 stmt_expr = STATEMENT_LIST_STMT_EXPR (cur_stmt_list);
7472 list = push_stmt_list ();
7473 TREE_OPERAND (stmt, 0) = list;
7474 STATEMENT_LIST_STMT_EXPR (list) = stmt_expr;
7475 }
7476 \f
7477 /* Build a binary-operation expression without default conversions.
7478 CODE is the kind of expression to build.
7479 This function differs from `build' in several ways:
7480 the data type of the result is computed and recorded in it,
7481 warnings are generated if arg data types are invalid,
7482 special handling for addition and subtraction of pointers is known,
7483 and some optimization is done (operations on narrow ints
7484 are done in the narrower type when that gives the same result).
7485 Constant folding is also done before the result is returned.
7486
7487 Note that the operands will never have enumeral types, or function
7488 or array types, because either they will have the default conversions
7489 performed or they have both just been converted to some other type in which
7490 the arithmetic is to be done. */
7491
7492 tree
7493 build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
7494 int convert_p)
7495 {
7496 tree type0, type1;
7497 enum tree_code code0, code1;
7498 tree op0, op1;
7499 const char *invalid_op_diag;
7500
7501 /* Expression code to give to the expression when it is built.
7502 Normally this is CODE, which is what the caller asked for,
7503 but in some special cases we change it. */
7504 enum tree_code resultcode = code;
7505
7506 /* Data type in which the computation is to be performed.
7507 In the simplest cases this is the common type of the arguments. */
7508 tree result_type = NULL;
7509
7510 /* Nonzero means operands have already been type-converted
7511 in whatever way is necessary.
7512 Zero means they need to be converted to RESULT_TYPE. */
7513 int converted = 0;
7514
7515 /* Nonzero means create the expression with this type, rather than
7516 RESULT_TYPE. */
7517 tree build_type = 0;
7518
7519 /* Nonzero means after finally constructing the expression
7520 convert it to this type. */
7521 tree final_type = 0;
7522
7523 /* Nonzero if this is an operation like MIN or MAX which can
7524 safely be computed in short if both args are promoted shorts.
7525 Also implies COMMON.
7526 -1 indicates a bitwise operation; this makes a difference
7527 in the exact conditions for when it is safe to do the operation
7528 in a narrower mode. */
7529 int shorten = 0;
7530
7531 /* Nonzero if this is a comparison operation;
7532 if both args are promoted shorts, compare the original shorts.
7533 Also implies COMMON. */
7534 int short_compare = 0;
7535
7536 /* Nonzero if this is a right-shift operation, which can be computed on the
7537 original short and then promoted if the operand is a promoted short. */
7538 int short_shift = 0;
7539
7540 /* Nonzero means set RESULT_TYPE to the common type of the args. */
7541 int common = 0;
7542
7543 /* True means types are compatible as far as ObjC is concerned. */
7544 bool objc_ok;
7545
7546 if (convert_p)
7547 {
7548 op0 = default_conversion (orig_op0);
7549 op1 = default_conversion (orig_op1);
7550 }
7551 else
7552 {
7553 op0 = orig_op0;
7554 op1 = orig_op1;
7555 }
7556
7557 type0 = TREE_TYPE (op0);
7558 type1 = TREE_TYPE (op1);
7559
7560 /* The expression codes of the data types of the arguments tell us
7561 whether the arguments are integers, floating, pointers, etc. */
7562 code0 = TREE_CODE (type0);
7563 code1 = TREE_CODE (type1);
7564
7565 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
7566 STRIP_TYPE_NOPS (op0);
7567 STRIP_TYPE_NOPS (op1);
7568
7569 /* If an error was already reported for one of the arguments,
7570 avoid reporting another error. */
7571
7572 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7573 return error_mark_node;
7574
7575 if ((invalid_op_diag
7576 = targetm.invalid_binary_op (code, type0, type1)))
7577 {
7578 error (invalid_op_diag);
7579 return error_mark_node;
7580 }
7581
7582 objc_ok = objc_compare_types (type0, type1, -3, NULL_TREE);
7583
7584 switch (code)
7585 {
7586 case PLUS_EXPR:
7587 /* Handle the pointer + int case. */
7588 if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7589 return pointer_int_sum (PLUS_EXPR, op0, op1);
7590 else if (code1 == POINTER_TYPE && code0 == INTEGER_TYPE)
7591 return pointer_int_sum (PLUS_EXPR, op1, op0);
7592 else
7593 common = 1;
7594 break;
7595
7596 case MINUS_EXPR:
7597 /* Subtraction of two similar pointers.
7598 We must subtract them as integers, then divide by object size. */
7599 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE
7600 && comp_target_types (type0, type1))
7601 return pointer_diff (op0, op1);
7602 /* Handle pointer minus int. Just like pointer plus int. */
7603 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7604 return pointer_int_sum (MINUS_EXPR, op0, op1);
7605 else
7606 common = 1;
7607 break;
7608
7609 case MULT_EXPR:
7610 common = 1;
7611 break;
7612
7613 case TRUNC_DIV_EXPR:
7614 case CEIL_DIV_EXPR:
7615 case FLOOR_DIV_EXPR:
7616 case ROUND_DIV_EXPR:
7617 case EXACT_DIV_EXPR:
7618 /* Floating point division by zero is a legitimate way to obtain
7619 infinities and NaNs. */
7620 if (skip_evaluation == 0 && integer_zerop (op1))
7621 warning (OPT_Wdiv_by_zero, "division by zero");
7622
7623 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7624 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7625 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7626 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
7627 {
7628 enum tree_code tcode0 = code0, tcode1 = code1;
7629
7630 if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
7631 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
7632 if (code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)
7633 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1)));
7634
7635 if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE))
7636 resultcode = RDIV_EXPR;
7637 else
7638 /* Although it would be tempting to shorten always here, that
7639 loses on some targets, since the modulo instruction is
7640 undefined if the quotient can't be represented in the
7641 computation mode. We shorten only if unsigned or if
7642 dividing by something we know != -1. */
7643 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7644 || (TREE_CODE (op1) == INTEGER_CST
7645 && !integer_all_onesp (op1)));
7646 common = 1;
7647 }
7648 break;
7649
7650 case BIT_AND_EXPR:
7651 case BIT_IOR_EXPR:
7652 case BIT_XOR_EXPR:
7653 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7654 shorten = -1;
7655 else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
7656 common = 1;
7657 break;
7658
7659 case TRUNC_MOD_EXPR:
7660 case FLOOR_MOD_EXPR:
7661 if (skip_evaluation == 0 && integer_zerop (op1))
7662 warning (OPT_Wdiv_by_zero, "division by zero");
7663
7664 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7665 {
7666 /* Although it would be tempting to shorten always here, that loses
7667 on some targets, since the modulo instruction is undefined if the
7668 quotient can't be represented in the computation mode. We shorten
7669 only if unsigned or if dividing by something we know != -1. */
7670 shorten = (TYPE_UNSIGNED (TREE_TYPE (orig_op0))
7671 || (TREE_CODE (op1) == INTEGER_CST
7672 && !integer_all_onesp (op1)));
7673 common = 1;
7674 }
7675 break;
7676
7677 case TRUTH_ANDIF_EXPR:
7678 case TRUTH_ORIF_EXPR:
7679 case TRUTH_AND_EXPR:
7680 case TRUTH_OR_EXPR:
7681 case TRUTH_XOR_EXPR:
7682 if ((code0 == INTEGER_TYPE || code0 == POINTER_TYPE
7683 || code0 == REAL_TYPE || code0 == COMPLEX_TYPE)
7684 && (code1 == INTEGER_TYPE || code1 == POINTER_TYPE
7685 || code1 == REAL_TYPE || code1 == COMPLEX_TYPE))
7686 {
7687 /* Result of these operations is always an int,
7688 but that does not mean the operands should be
7689 converted to ints! */
7690 result_type = integer_type_node;
7691 op0 = c_common_truthvalue_conversion (op0);
7692 op1 = c_common_truthvalue_conversion (op1);
7693 converted = 1;
7694 }
7695 break;
7696
7697 /* Shift operations: result has same type as first operand;
7698 always convert second operand to int.
7699 Also set SHORT_SHIFT if shifting rightward. */
7700
7701 case RSHIFT_EXPR:
7702 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7703 {
7704 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7705 {
7706 if (tree_int_cst_sgn (op1) < 0)
7707 warning (0, "right shift count is negative");
7708 else
7709 {
7710 if (!integer_zerop (op1))
7711 short_shift = 1;
7712
7713 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7714 warning (0, "right shift count >= width of type");
7715 }
7716 }
7717
7718 /* Use the type of the value to be shifted. */
7719 result_type = type0;
7720 /* Convert the shift-count to an integer, regardless of size
7721 of value being shifted. */
7722 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7723 op1 = convert (integer_type_node, op1);
7724 /* Avoid converting op1 to result_type later. */
7725 converted = 1;
7726 }
7727 break;
7728
7729 case LSHIFT_EXPR:
7730 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
7731 {
7732 if (TREE_CODE (op1) == INTEGER_CST && skip_evaluation == 0)
7733 {
7734 if (tree_int_cst_sgn (op1) < 0)
7735 warning (0, "left shift count is negative");
7736
7737 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0)
7738 warning (0, "left shift count >= width of type");
7739 }
7740
7741 /* Use the type of the value to be shifted. */
7742 result_type = type0;
7743 /* Convert the shift-count to an integer, regardless of size
7744 of value being shifted. */
7745 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node)
7746 op1 = convert (integer_type_node, op1);
7747 /* Avoid converting op1 to result_type later. */
7748 converted = 1;
7749 }
7750 break;
7751
7752 case EQ_EXPR:
7753 case NE_EXPR:
7754 if (code0 == REAL_TYPE || code1 == REAL_TYPE)
7755 warning (OPT_Wfloat_equal,
7756 "comparing floating point with == or != is unsafe");
7757 /* Result of comparison is always int,
7758 but don't convert the args to int! */
7759 build_type = integer_type_node;
7760 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
7761 || code0 == COMPLEX_TYPE)
7762 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE
7763 || code1 == COMPLEX_TYPE))
7764 short_compare = 1;
7765 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7766 {
7767 tree tt0 = TREE_TYPE (type0);
7768 tree tt1 = TREE_TYPE (type1);
7769 /* Anything compares with void *. void * compares with anything.
7770 Otherwise, the targets must be compatible
7771 and both must be object or both incomplete. */
7772 if (comp_target_types (type0, type1))
7773 result_type = common_pointer_type (type0, type1);
7774 else if (VOID_TYPE_P (tt0))
7775 {
7776 /* op0 != orig_op0 detects the case of something
7777 whose value is 0 but which isn't a valid null ptr const. */
7778 if (pedantic && (!integer_zerop (op0) || op0 != orig_op0)
7779 && TREE_CODE (tt1) == FUNCTION_TYPE)
7780 pedwarn ("ISO C forbids comparison of %<void *%>"
7781 " with function pointer");
7782 }
7783 else if (VOID_TYPE_P (tt1))
7784 {
7785 if (pedantic && (!integer_zerop (op1) || op1 != orig_op1)
7786 && TREE_CODE (tt0) == FUNCTION_TYPE)
7787 pedwarn ("ISO C forbids comparison of %<void *%>"
7788 " with function pointer");
7789 }
7790 else
7791 /* Avoid warning about the volatile ObjC EH puts on decls. */
7792 if (!objc_ok)
7793 pedwarn ("comparison of distinct pointer types lacks a cast");
7794
7795 if (result_type == NULL_TREE)
7796 result_type = ptr_type_node;
7797 }
7798 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7799 && integer_zerop (op1))
7800 result_type = type0;
7801 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7802 && integer_zerop (op0))
7803 result_type = type1;
7804 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7805 {
7806 result_type = type0;
7807 pedwarn ("comparison between pointer and integer");
7808 }
7809 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7810 {
7811 result_type = type1;
7812 pedwarn ("comparison between pointer and integer");
7813 }
7814 break;
7815
7816 case LE_EXPR:
7817 case GE_EXPR:
7818 case LT_EXPR:
7819 case GT_EXPR:
7820 build_type = integer_type_node;
7821 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE)
7822 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE))
7823 short_compare = 1;
7824 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE)
7825 {
7826 if (comp_target_types (type0, type1))
7827 {
7828 result_type = common_pointer_type (type0, type1);
7829 if (!COMPLETE_TYPE_P (TREE_TYPE (type0))
7830 != !COMPLETE_TYPE_P (TREE_TYPE (type1)))
7831 pedwarn ("comparison of complete and incomplete pointers");
7832 else if (pedantic
7833 && TREE_CODE (TREE_TYPE (type0)) == FUNCTION_TYPE)
7834 pedwarn ("ISO C forbids ordered comparisons of pointers to functions");
7835 }
7836 else
7837 {
7838 result_type = ptr_type_node;
7839 pedwarn ("comparison of distinct pointer types lacks a cast");
7840 }
7841 }
7842 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST
7843 && integer_zerop (op1))
7844 {
7845 result_type = type0;
7846 if (pedantic || extra_warnings)
7847 pedwarn ("ordered comparison of pointer with integer zero");
7848 }
7849 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST
7850 && integer_zerop (op0))
7851 {
7852 result_type = type1;
7853 if (pedantic)
7854 pedwarn ("ordered comparison of pointer with integer zero");
7855 }
7856 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE)
7857 {
7858 result_type = type0;
7859 pedwarn ("comparison between pointer and integer");
7860 }
7861 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE)
7862 {
7863 result_type = type1;
7864 pedwarn ("comparison between pointer and integer");
7865 }
7866 break;
7867
7868 default:
7869 gcc_unreachable ();
7870 }
7871
7872 if (code0 == ERROR_MARK || code1 == ERROR_MARK)
7873 return error_mark_node;
7874
7875 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
7876 && (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1))
7877 || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0),
7878 TREE_TYPE (type1))))
7879 {
7880 binary_op_error (code);
7881 return error_mark_node;
7882 }
7883
7884 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE
7885 || code0 == VECTOR_TYPE)
7886 &&
7887 (code1 == INTEGER_TYPE || code1 == REAL_TYPE || code1 == COMPLEX_TYPE
7888 || code1 == VECTOR_TYPE))
7889 {
7890 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE);
7891
7892 if (shorten || common || short_compare)
7893 result_type = c_common_type (type0, type1);
7894
7895 /* For certain operations (which identify themselves by shorten != 0)
7896 if both args were extended from the same smaller type,
7897 do the arithmetic in that type and then extend.
7898
7899 shorten !=0 and !=1 indicates a bitwise operation.
7900 For them, this optimization is safe only if
7901 both args are zero-extended or both are sign-extended.
7902 Otherwise, we might change the result.
7903 Eg, (short)-1 | (unsigned short)-1 is (int)-1
7904 but calculated in (unsigned short) it would be (unsigned short)-1. */
7905
7906 if (shorten && none_complex)
7907 {
7908 int unsigned0, unsigned1;
7909 tree arg0 = get_narrower (op0, &unsigned0);
7910 tree arg1 = get_narrower (op1, &unsigned1);
7911 /* UNS is 1 if the operation to be done is an unsigned one. */
7912 int uns = TYPE_UNSIGNED (result_type);
7913 tree type;
7914
7915 final_type = result_type;
7916
7917 /* Handle the case that OP0 (or OP1) does not *contain* a conversion
7918 but it *requires* conversion to FINAL_TYPE. */
7919
7920 if ((TYPE_PRECISION (TREE_TYPE (op0))
7921 == TYPE_PRECISION (TREE_TYPE (arg0)))
7922 && TREE_TYPE (op0) != final_type)
7923 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0));
7924 if ((TYPE_PRECISION (TREE_TYPE (op1))
7925 == TYPE_PRECISION (TREE_TYPE (arg1)))
7926 && TREE_TYPE (op1) != final_type)
7927 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1));
7928
7929 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */
7930
7931 /* For bitwise operations, signedness of nominal type
7932 does not matter. Consider only how operands were extended. */
7933 if (shorten == -1)
7934 uns = unsigned0;
7935
7936 /* Note that in all three cases below we refrain from optimizing
7937 an unsigned operation on sign-extended args.
7938 That would not be valid. */
7939
7940 /* Both args variable: if both extended in same way
7941 from same width, do it in that width.
7942 Do it unsigned if args were zero-extended. */
7943 if ((TYPE_PRECISION (TREE_TYPE (arg0))
7944 < TYPE_PRECISION (result_type))
7945 && (TYPE_PRECISION (TREE_TYPE (arg1))
7946 == TYPE_PRECISION (TREE_TYPE (arg0)))
7947 && unsigned0 == unsigned1
7948 && (unsigned0 || !uns))
7949 result_type
7950 = c_common_signed_or_unsigned_type
7951 (unsigned0, c_common_type (TREE_TYPE (arg0), TREE_TYPE (arg1)));
7952 else if (TREE_CODE (arg0) == INTEGER_CST
7953 && (unsigned1 || !uns)
7954 && (TYPE_PRECISION (TREE_TYPE (arg1))
7955 < TYPE_PRECISION (result_type))
7956 && (type
7957 = c_common_signed_or_unsigned_type (unsigned1,
7958 TREE_TYPE (arg1)),
7959 int_fits_type_p (arg0, type)))
7960 result_type = type;
7961 else if (TREE_CODE (arg1) == INTEGER_CST
7962 && (unsigned0 || !uns)
7963 && (TYPE_PRECISION (TREE_TYPE (arg0))
7964 < TYPE_PRECISION (result_type))
7965 && (type
7966 = c_common_signed_or_unsigned_type (unsigned0,
7967 TREE_TYPE (arg0)),
7968 int_fits_type_p (arg1, type)))
7969 result_type = type;
7970 }
7971
7972 /* Shifts can be shortened if shifting right. */
7973
7974 if (short_shift)
7975 {
7976 int unsigned_arg;
7977 tree arg0 = get_narrower (op0, &unsigned_arg);
7978
7979 final_type = result_type;
7980
7981 if (arg0 == op0 && final_type == TREE_TYPE (op0))
7982 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0));
7983
7984 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type)
7985 /* We can shorten only if the shift count is less than the
7986 number of bits in the smaller type size. */
7987 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0
7988 /* We cannot drop an unsigned shift after sign-extension. */
7989 && (!TYPE_UNSIGNED (final_type) || unsigned_arg))
7990 {
7991 /* Do an unsigned shift if the operand was zero-extended. */
7992 result_type
7993 = c_common_signed_or_unsigned_type (unsigned_arg,
7994 TREE_TYPE (arg0));
7995 /* Convert value-to-be-shifted to that type. */
7996 if (TREE_TYPE (op0) != result_type)
7997 op0 = convert (result_type, op0);
7998 converted = 1;
7999 }
8000 }
8001
8002 /* Comparison operations are shortened too but differently.
8003 They identify themselves by setting short_compare = 1. */
8004
8005 if (short_compare)
8006 {
8007 /* Don't write &op0, etc., because that would prevent op0
8008 from being kept in a register.
8009 Instead, make copies of the our local variables and
8010 pass the copies by reference, then copy them back afterward. */
8011 tree xop0 = op0, xop1 = op1, xresult_type = result_type;
8012 enum tree_code xresultcode = resultcode;
8013 tree val
8014 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode);
8015
8016 if (val != 0)
8017 return val;
8018
8019 op0 = xop0, op1 = xop1;
8020 converted = 1;
8021 resultcode = xresultcode;
8022
8023 if (warn_sign_compare && skip_evaluation == 0)
8024 {
8025 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0));
8026 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
8027 int unsignedp0, unsignedp1;
8028 tree primop0 = get_narrower (op0, &unsignedp0);
8029 tree primop1 = get_narrower (op1, &unsignedp1);
8030
8031 xop0 = orig_op0;
8032 xop1 = orig_op1;
8033 STRIP_TYPE_NOPS (xop0);
8034 STRIP_TYPE_NOPS (xop1);
8035
8036 /* Give warnings for comparisons between signed and unsigned
8037 quantities that may fail.
8038
8039 Do the checking based on the original operand trees, so that
8040 casts will be considered, but default promotions won't be.
8041
8042 Do not warn if the comparison is being done in a signed type,
8043 since the signed type will only be chosen if it can represent
8044 all the values of the unsigned type. */
8045 if (!TYPE_UNSIGNED (result_type))
8046 /* OK */;
8047 /* Do not warn if both operands are the same signedness. */
8048 else if (op0_signed == op1_signed)
8049 /* OK */;
8050 else
8051 {
8052 tree sop, uop;
8053
8054 if (op0_signed)
8055 sop = xop0, uop = xop1;
8056 else
8057 sop = xop1, uop = xop0;
8058
8059 /* Do not warn if the signed quantity is an
8060 unsuffixed integer literal (or some static
8061 constant expression involving such literals or a
8062 conditional expression involving such literals)
8063 and it is non-negative. */
8064 if (tree_expr_nonnegative_p (sop))
8065 /* OK */;
8066 /* Do not warn if the comparison is an equality operation,
8067 the unsigned quantity is an integral constant, and it
8068 would fit in the result if the result were signed. */
8069 else if (TREE_CODE (uop) == INTEGER_CST
8070 && (resultcode == EQ_EXPR || resultcode == NE_EXPR)
8071 && int_fits_type_p
8072 (uop, c_common_signed_type (result_type)))
8073 /* OK */;
8074 /* Do not warn if the unsigned quantity is an enumeration
8075 constant and its maximum value would fit in the result
8076 if the result were signed. */
8077 else if (TREE_CODE (uop) == INTEGER_CST
8078 && TREE_CODE (TREE_TYPE (uop)) == ENUMERAL_TYPE
8079 && int_fits_type_p
8080 (TYPE_MAX_VALUE (TREE_TYPE (uop)),
8081 c_common_signed_type (result_type)))
8082 /* OK */;
8083 else
8084 warning (0, "comparison between signed and unsigned");
8085 }
8086
8087 /* Warn if two unsigned values are being compared in a size
8088 larger than their original size, and one (and only one) is the
8089 result of a `~' operator. This comparison will always fail.
8090
8091 Also warn if one operand is a constant, and the constant
8092 does not have all bits set that are set in the ~ operand
8093 when it is extended. */
8094
8095 if ((TREE_CODE (primop0) == BIT_NOT_EXPR)
8096 != (TREE_CODE (primop1) == BIT_NOT_EXPR))
8097 {
8098 if (TREE_CODE (primop0) == BIT_NOT_EXPR)
8099 primop0 = get_narrower (TREE_OPERAND (primop0, 0),
8100 &unsignedp0);
8101 else
8102 primop1 = get_narrower (TREE_OPERAND (primop1, 0),
8103 &unsignedp1);
8104
8105 if (host_integerp (primop0, 0) || host_integerp (primop1, 0))
8106 {
8107 tree primop;
8108 HOST_WIDE_INT constant, mask;
8109 int unsignedp, bits;
8110
8111 if (host_integerp (primop0, 0))
8112 {
8113 primop = primop1;
8114 unsignedp = unsignedp1;
8115 constant = tree_low_cst (primop0, 0);
8116 }
8117 else
8118 {
8119 primop = primop0;
8120 unsignedp = unsignedp0;
8121 constant = tree_low_cst (primop1, 0);
8122 }
8123
8124 bits = TYPE_PRECISION (TREE_TYPE (primop));
8125 if (bits < TYPE_PRECISION (result_type)
8126 && bits < HOST_BITS_PER_WIDE_INT && unsignedp)
8127 {
8128 mask = (~(HOST_WIDE_INT) 0) << bits;
8129 if ((mask & constant) != mask)
8130 warning (0, "comparison of promoted ~unsigned with constant");
8131 }
8132 }
8133 else if (unsignedp0 && unsignedp1
8134 && (TYPE_PRECISION (TREE_TYPE (primop0))
8135 < TYPE_PRECISION (result_type))
8136 && (TYPE_PRECISION (TREE_TYPE (primop1))
8137 < TYPE_PRECISION (result_type)))
8138 warning (0, "comparison of promoted ~unsigned with unsigned");
8139 }
8140 }
8141 }
8142 }
8143
8144 /* At this point, RESULT_TYPE must be nonzero to avoid an error message.
8145 If CONVERTED is zero, both args will be converted to type RESULT_TYPE.
8146 Then the expression will be built.
8147 It will be given type FINAL_TYPE if that is nonzero;
8148 otherwise, it will be given type RESULT_TYPE. */
8149
8150 if (!result_type)
8151 {
8152 binary_op_error (code);
8153 return error_mark_node;
8154 }
8155
8156 if (!converted)
8157 {
8158 if (TREE_TYPE (op0) != result_type)
8159 op0 = convert (result_type, op0);
8160 if (TREE_TYPE (op1) != result_type)
8161 op1 = convert (result_type, op1);
8162
8163 /* This can happen if one operand has a vector type, and the other
8164 has a different type. */
8165 if (TREE_CODE (op0) == ERROR_MARK || TREE_CODE (op1) == ERROR_MARK)
8166 return error_mark_node;
8167 }
8168
8169 if (build_type == NULL_TREE)
8170 build_type = result_type;
8171
8172 {
8173 tree result = build2 (resultcode, build_type, op0, op1);
8174
8175 /* Treat expressions in initializers specially as they can't trap. */
8176 result = require_constant_value ? fold_initializer (result)
8177 : fold (result);
8178
8179 if (final_type != 0)
8180 result = convert (final_type, result);
8181 return result;
8182 }
8183 }
8184
8185
8186 /* Convert EXPR to be a truth-value, validating its type for this
8187 purpose. */
8188
8189 tree
8190 c_objc_common_truthvalue_conversion (tree expr)
8191 {
8192 switch (TREE_CODE (TREE_TYPE (expr)))
8193 {
8194 case ARRAY_TYPE:
8195 error ("used array that cannot be converted to pointer where scalar is required");
8196 return error_mark_node;
8197
8198 case RECORD_TYPE:
8199 error ("used struct type value where scalar is required");
8200 return error_mark_node;
8201
8202 case UNION_TYPE:
8203 error ("used union type value where scalar is required");
8204 return error_mark_node;
8205
8206 case FUNCTION_TYPE:
8207 gcc_unreachable ();
8208
8209 default:
8210 break;
8211 }
8212
8213 /* ??? Should we also give an error for void and vectors rather than
8214 leaving those to give errors later? */
8215 return c_common_truthvalue_conversion (expr);
8216 }
8217 \f
8218
8219 /* Convert EXPR to a contained DECL, updating *TC, *TI and *SE as
8220 required. */
8221
8222 tree
8223 c_expr_to_decl (tree expr, bool *tc ATTRIBUTE_UNUSED,
8224 bool *ti ATTRIBUTE_UNUSED, bool *se)
8225 {
8226 if (TREE_CODE (expr) == COMPOUND_LITERAL_EXPR)
8227 {
8228 tree decl = COMPOUND_LITERAL_EXPR_DECL (expr);
8229 /* Executing a compound literal inside a function reinitializes
8230 it. */
8231 if (!TREE_STATIC (decl))
8232 *se = true;
8233 return decl;
8234 }
8235 else
8236 return expr;
8237 }