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