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