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