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