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