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