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